// JavaScript Document

/*
	Проводит валидацию обязательного параметра
	param		field 			- атрибут формы, который является обязательным
	param		min_length	 	- минимальное по длине значение параметра
	param		max_length		- максимальное по длине значение параметра
	return						- TRUE/FALSE 
*/
function validate_required(field, min_length, max_length)
{
	with (field)
	{
  		if (value == null || value == "" || field.value.length < min_length || field.value.length > max_length)
   	{
	 		return false;
    	}
  		else
    	{
    		return true;
    	}
  	}
} //validate_required

/*
	Проводит валидацию электронного адреса
	param		field 			- атрибут формы, который является обязательным
	return						- TRUE/FALSE 
*/
function validate_email(field)
{
	with (field)
	{
  		apos=value.indexOf("@");
  		dotpos=value.lastIndexOf(".");
  		if (apos<1||dotpos-apos<2)
    	{
			return false;
		}
  		else 
		{
			return true;
		}
  	}
} //validate_email


/*
	Валидация формы регистрации пользователя
	param		thisform - объект формы
	return				- TRUE/FALSE
*/
function validate_registration_form(thisform)
{
	// константы для валидации длины строк обязательных параметров
	var c_min_length = 3;
	var c_max_length = 30;
	
	var l_return = true;

	with (thisform)
	{
  		if (validate_required(name, c_min_length, c_max_length) == false)
  		{
			name.focus();
			name_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			name_err_msg.style.visibility = "hidden";
		}

		if (validate_required(password, c_min_length, c_max_length) == false)
  		{
			password.focus();
			password_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			password_err_msg.style.visibility = "hidden";
		}

		if (validate_required(password_confirm, c_min_length, c_max_length) == false || password.value != password_confirm.value)
  		{
			password_confirm.focus();
			password_confirm_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			password_confirm_err_msg.style.visibility = "hidden";
		}

		if (validate_email(e_mail) == false)
  		{
			e_mail.focus();
			e_mail_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			e_mail_err_msg.style.visibility = "hidden";
		}

		if (validate_required(captcha_keystring, 0, c_max_length) == false)
  		{
			captcha_keystring.focus();
			captcha_keystring_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			captcha_keystring_err_msg.style.visibility = "hidden";
		}
  	}
	
	return l_return;

} //validate_registration_form

/*
	Валидация формы восстановления пароля
	param		thisform - объект формы
	return				- TRUE/FALSE
*/
function validate_reset_password_form(thisform)
{
	// константы для валидации длины строк обязательных параметров
	var c_min_length = 3;
	var c_max_length = 30;

	var l_return = true;

	with (thisform)
	{

		if (validate_email(e_mail) == false)
  		{
			e_mail.focus();
			e_mail_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			e_mail_err_msg.style.visibility = "hidden";
		}

		if (validate_required(captcha_keystring, 0, c_max_length) == false)
  		{
			captcha_keystring.focus();
			captcha_keystring_err_msg.style.visibility = "visible";
			l_return = false;
		} else {
			captcha_keystring_err_msg.style.visibility = "hidden";
		}

	}
	
	return l_return;

} //validate_reset_password_form


/*
	Валидация формы редактирования профиля
	param		thisform - объект формы
	return				- TRUE/FALSE
*/
function validate_edit_profile_form(thisform)
{
	// константы для валидации длины строк обязательных параметров
	var c_min_length = 3;
	var c_max_length = 30;

	var l_return = true;

	with (thisform)
	{
      //смена e_mail
      if (old_email.value != '')
      {
         if (validate_email(old_email) == false)
         {
            old_email.focus();
            old_email_err_msg.style.visibility = "visible";
            l_return = false;
         } else {
            old_email_err_msg.style.visibility = "hidden";
         }

         if (validate_email(e_mail) == false)
         {
            e_mail.focus();
            e_mail_err_msg.style.visibility = "visible";
            l_return = false;
         } else {
            e_mail_err_msg.style.visibility = "hidden";
         }
      }

      //смена пароля
      if (old_password.value != '')
      {
         if (validate_required(old_password, c_min_length, c_max_length) == false)
         {
            old_password.focus();
            old_password_err_msg.style.visibility = "visible";
            l_return = false;
         } else {
            old_password_err_msg.style.visibility = "hidden";
         }

         if (validate_required(password, c_min_length, c_max_length) == false)
         {
            password.focus();
            password_err_msg.style.visibility = "visible";
            l_return = false;
         } else {
            password_err_msg.style.visibility = "hidden";
         }

         if (validate_required(password_confirm, c_min_length, c_max_length) == false || password.value != password_confirm.value)
         {
            password_confirm.focus();
            password_confirm_err_msg.style.visibility = "visible";
            l_return = false;
         } else {
            password_confirm_err_msg.style.visibility = "hidden";
         }
      }

      if (old_email.value == '' && old_password.value == '')
      {
         old_fields_empty_err_msg.style.visibility = 'visible';
         l_return = false;
      } else {
         old_fields_empty_err_msg.style.visibility = 'hidden';
      }

	}

	return l_return;

} //validate_reset_password_form

/*
 * Делание доступным для ввода зависимые поля
 *	param		thisform - объект формы
*/
function enable_dependent_fields(thisform)
{
	with (thisform)
	{
      //смена e_mail
      if (old_email.value != null && old_email.value != '')
      {
         e_mail.disabled = false;
      } else {
         e_mail.disabled = true;
      }

      //смена e_mail
      if (old_password.value != null && old_password.value != '')
      {
         password.disabled = false;
         password_confirm.disabled = false;
      } else {
         password.disabled = true;
         password_confirm.disabled = true;
      }
   }
} //enable_dependent_fields

//скрытие и отображение элемента DIV
function show_hide_div(div_id)
{
   var elem, vis;

   if( document.getElementById ) // this is the way the standards work
      elem = document.getElementById( div_id );
   else if( document.all ) // this is the way old msie versions work
      elem = document.all[div_id];
   else if( document.layers ) // this is the way nn4 works
      elem = document.layers[div_id];

   //получаем объект Стиля
   vis = elem.style;
   
   // if the style.display value is blank we try to figure it out here
   if(vis.display == '' && elem.offsetWidth != undefined && elem.offsetHeight != undefined)
      vis.display = (elem.offsetWidth != 0 && elem.offsetHeight !=0 ) ? 'block' : 'none';

   //если DISPLAY установлен, значен должны отображать содержимое
   vis.visibility = (vis.display == 'block') ? 'visible' : 'hidden';

   //переключаем режим отображения
   vis.display    = (vis.display == ''|| vis.display == 'block') ? 'none' : 'block';
   vis.visibility = (vis.visibility == 'visible') ? 'hidden' : 'visible';

} //show_hide_div

//обработка DIV с формой добавления Прогноза
function process_add_progonosis()
{
   var btn = document.getElementById('process_add_progonosis_btn');

   //обрабатываем название кнопки
   //Добавление
   if (btn.value == 'Добавить') {
      btn.value = 'Отменить';
      btn.title = 'Отменить добавление Прогноза';
   //Отмена
   } else {
      btn.value = 'Добавить';
      btn.title = 'Добавить Прогноз на счёт либо на исход';

      //получаем объект формы
      var form = document.getElementById('add_prognosis_form');

      with (form) {
         //если Ставка была вызвана на Редактирование - удаляем её данные
         if (st_id.value !== null || st_id.value != "") {
            st_id.value                   = "";
            team_a.selectedIndex          = 0;
            team_a_overtime.selectedIndex = 0;
            team_a_penalty.selectedIndex  = 0;
            team_b.selectedIndex          = 0;
            team_b_overtime.selectedIndex = 0;
            team_b_penalty.selectedIndex  = 0;
            team_a_result.selectedIndex   = 0;
            team_b_result.selectedIndex   = 0;
         }
      }
   }

   //отображаем/скрываем DIV
   show_hide_div('add_prognosis_div');

} //process_add_progonosis

//отображение различных форм для разных типов Прогнозов в главной форме добавления Прогнозов
function process_progonosis_type()
{
   show_hide_div('prognosis_score_a');
   show_hide_div('prognosis_score_b');
   show_hide_div('prognosis_result_a');
   show_hide_div('prognosis_result_b');
} //process_add_progonosis

//синхронизация выбора в выпадающем списке для Прогноза на Исход
function synchronize_select_tag(obj)
{
   var l_selected_id = obj.selectedIndex;
   var select_obj;

   //получаем зависимый SELECT элемент
   if (obj.id == 'team_a_result') {
      select_obj = document.getElementById('team_b_result');
   } else if (obj.id == 'team_b_result') {
      select_obj = document.getElementById('team_a_result');
   }

   //проводим синхронизацию
   switch (obj.selectedIndex) {
      case 0:  //Ничего не выбрано
         select_obj.selectedIndex = 0; //Ничего не выбрано
         break;
      case 1:  //Проигрыш
         select_obj.selectedIndex = 3; //Выигрыш
         break;
      case 2:  //Ничья
         select_obj.selectedIndex = 2; //Ничья
         break;
      case 3:  //Выигрыш
         select_obj.selectedIndex = 1; //Проигрыш
         break;
   }
} //synchronize_select_tag

/**
 * Валидация формы добавления Прогноза/Ставки
 * @param   object   thisform    Объект формы
 * @return  bool                 True/False = Ок/Ошибка
 */
function validate_add_prognosis_form(thisform)
{
   const c_not_selected = -1; //не выбрано значение
   var   l_return = true;

   //подсвечивание поля формы
   function highlight_field(val, obj)
   {
      //не выбрано значение - подсвечиваем
      if (val == c_not_selected) {
         obj.style.color      = '#a00020';
         obj.style.fontWeight = 'bolder';
         l_return             = false;
      //значение выбрано - убираем подсветку
      } else {
         obj.style.color      = '#ccccff';
         obj.style.fontWeight = 'normal';
      }
   } //highlight_field

   with (thisform)
   {
      //Прогноз на Счёт
      if ((prognosis_score_a.style.visibility == 'visible' || prognosis_score_a.style.visibility == '') &&
          (prognosis_score_b.style.visibility == 'visible' || prognosis_score_b.style.visibility == ''))
      {
         //ОВ
         if (rc_event_type.value == 1) {
            highlight_field(team_a.value, team_a_title);
            highlight_field(team_b.value, team_b_title);
         //ОВ + ДВ + П
         } else if (rc_event_type.value == 3) {
            highlight_field(team_a.value, team_a_title);
            highlight_field(team_a_overtime.value, team_a_overtime_title);
            highlight_field(team_a_penalty.value, team_a_penalty_title);
            highlight_field(team_b.value, team_b_title);
            highlight_field(team_b_overtime.value, team_b_overtime_title);
            highlight_field(team_b_penalty.value, team_b_penalty_title);
         //ОВ + П
         } else if (rc_event_type.value == 4) {
            highlight_field(team_a.value, team_a_title);
            highlight_field(team_a_penalty.value, team_a_penalty_title);
            highlight_field(team_b.value, team_b_title);
            highlight_field(team_b_penalty.value, team_b_penalty_title);
         }
      }
      //Прогноз на Исход
      else {
         highlight_field(team_a_result.value, team_a_result_title);
         highlight_field(team_b_result.value, team_b_result_title);
      }

      //добавляем сообщения в статусну строку
      if (l_return == false) {
         status_bar.style.display = 'block';
         status_bar.style.visibility = 'visible';
         status_bar.style.color = '#a00020';
         status_bar.style.fontWeight = 'bolder';
      } else {
         status_bar.style.display = 'none';
         status_bar.style.visibility = 'hidden';
         status_bar.style.color      = '#ccccff';
         status_bar.style.fontWeight = 'normal';
      }
   }

   return l_return;

} //validate_add_prognosis_form

/**
 * Заполнение формы добавления Прогноза значениями данной ставки и её последующее отображение
 * @param   {integer}   p_rc_event_type   Тип События
 * @param   {integer}   p_rc_stake_type   Тип Ставки
 * @param   {string}    p_team_a          Прогноз на 1ую команду
 * @param   {string}    p_team_b          Прогноз на 2ую команду
 * @param   {number}    p_st_id           Ид. ставки
 * @return                                Нет
 */
function process_edit_prognosis(p_rc_event_type, p_rc_stake_type, p_team_a, p_team_b, p_st_id)
{
   //типы Ставок
   const c_prognosis_score = 1;  //Прогноз на Счёт
   const c_stake_score     = 3;  //Ставка на Счёт

   //типы Событий
   const c_event_ordinary        = 1;  //обычное (2 тайма по 45 минут) = Основное Время = ОВ
   const c_event_extra_time      = 2;  //ОВ + 2 тайма по 15 минут = ОВ + Дополнительное Время (ДВ) = ОВ + ДВ
   const c_event_ext_penalty     = 3;  //ОВ + ДВ + Пенальти = ОВ + ДВ + П
   const c_event_penalty         = 4;  //ОВ + Пенальти = ОВ + П

   //ОТОБРАЖЕНИЕ элементов интерфейса
   function display() {
      //получаем объект контейнера, содержащего форму добавления Прогноза
      var div = document.getElementById('add_prognosis_div');

      //отображаем форму
      if (div.style.display == '' || div.style.display == 'none') {
         div.style.display = 'block';
         div.style.visibility = 'visible';
      }

      //получаем объект кнопки Добавить
      var btn = document.getElementById('process_add_progonosis_btn');

      //мы отобразили форму, поэтому на кнопке должен быть режим закрытия формы
      btn.value = 'Отменить';
      btn.title = 'Отменить добавление Прогноза';
   } //display

   //скрытие и отображение зависимых DIV
   function switch_div(show_div, hide_div) {
      if (show_div.style.display == '' || show_div.style.display == 'none') {
         show_div.style.display = 'block';
         show_div.style.visibility = 'visible';
         hide_div.style.display = 'none';
         hide_div.style.visibility = 'hidden';
      }
   } //switch_div

   //заполнение элементов формы значениями
   function fill_data() {
      var team_a_arr = p_team_a.split('/');
      var team_b_arr = p_team_b.split('/');

      var idx = 1;
      for(i in team_a_arr) 
      {
         if (p_rc_stake_type == c_prognosis_score || p_rc_stake_type == c_stake_score)
         {
            if (p_rc_event_type == c_event_ext_penalty ) {
               if (idx == 1) {team_a.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 2) {team_a_overtime.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 3) {team_a_penalty.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 1) {team_b.selectedIndex = Number(team_b_arr[i]) + 1;}
               if (idx == 2) {team_b_overtime.selectedIndex = Number(team_b_arr[i]) + 1;}
               if (idx == 3) {team_b_penalty.selectedIndex = Number(team_b_arr[i]) + 1;}
            } else if (p_rc_event_type == c_event_penalty) {
               if (idx == 1) {team_a.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 2) {team_a_penalty.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 1) {team_b.selectedIndex = Number(team_b_arr[i]) + 1;}
               if (idx == 2) {team_b_penalty.selectedIndex = Number(team_b_arr[i]) + 1;}
            } else {
               if (idx == 1) {team_a.selectedIndex = Number(team_a_arr[i]) + 1;}
               if (idx == 1) {team_b.selectedIndex = Number(team_b_arr[i]) + 1;}
            }
         } else {
            if (idx == 1) {team_a_result.selectedIndex = Number(team_a_arr[i]) + 1;}
            if (idx == 1) {team_b_result.selectedIndex = Number(team_b_arr[i]) + 1;}
         }
         idx++;
      }
   } //fill_data

   //BEGIN
   //отображение необходимых элементов интерфейса
   display();

   //заполнение данными формы редактирования Прогноза
   //получаем объект формы
   var form = document.getElementById('add_prognosis_form');

   with (form) {
      //определяем тип Прогноза
      if (p_rc_stake_type == c_prognosis_score  || p_rc_stake_type == c_stake_score ) {
         //устанавливаем переключатель типа Прогноза
         prognosis_score.checked = true;
         //отображаем нужные элементы
         switch_div(prognosis_score_a, prognosis_result_a);
         switch_div(prognosis_score_b, prognosis_result_b);
      } else {
         //устанавливаем переключатель типа Прогноза
         prognosis_result.checked = true;
         //отображаем нужные элементы
         switch_div(prognosis_result_a, prognosis_score_a);
         switch_div(prognosis_result_b, prognosis_score_b);
      }

      //заполнение элементов формы значениями
      fill_data();

      //установка айдишника Ставки
      st_id.value = p_st_id;
   }
} //process_edit_prognosis


/**
 * Переводит символы новой строки в <br /> тег
 * @param   {string}   fieldValue    Исходная строка
 * @return  {string}                 Преобразованная строка
 */
function nl2br( fieldValue ) {
   return fieldValue = fieldValue.replace(/\n/g, '<br />');
}