$(document).ready(function()
{
	//предзагрузка крестика для ие
	var preImage=new Image(194,140);
	preImage.src="img/elems.png";

	//убираем outline для ie
	var ua = navigator.userAgent.toLowerCase();

	if(ua.indexOf('msie') !=-1)
	{
		$('a').focus(function()
		{
			this.blur();
		});
	}

	//навигация по форме регистрации
	regNaviSlider();

	//обработчики событий
	setHandlers();

	//$(".validError, #errorWin").corner("round 5px");
});


//байнд событий
function setHandlers() {
	//сабмит формы регистрации
	$('#regCaptcha').keyup(function(e)
	{
		if(e.keyCode == 13)
		{
			$(this).blur();
			submitRegForm();
		}

	});

	//сабмит формы регистрации
	$('#btnSubmit').click(function() { submitRegForm() });

	//проверка логина на совпадение
	$("input[name='login']").blur(function() {
		var login = $(this).val();
		if(login.length > 2){
			checkLogin(login);
		}
	});

	//закрытие модального окна
	$(".close").live("click", function(){ $("#mask").remove() });

	//всплывающие подсказки
	$('.jsValid').bind("focus blur", function(e){ inputTips(e,$(this)) });
}

//ajax-регистрация юзера
function submitRegForm() {

	var body = $('body');

	$("#errorWin, .validError").remove();//удаляем ошибки валидации

	if( !validFormFields() )
	{
		$.ajax({
			type: "POST",
			url: "system/ajax/ajaxRegister.php",
			data: $("#regForm").serialize(),
			dataType: "json",
			async:false,
			success: function(data){
				if(data)
				{
					var error = data['error'],
						safecode = data['safecode'],
						msg = data['msg'];

					if(!safecode)
						validFormFields(true);
					else if(error)
					{
						if(msg instanceof Array)
						{
							var str = '';

							for(key in msg)
								str += 	"<div class='strErr'>"+msg[key]+"</div>";

							$('<div id="errorWin" style="width:200px;"><span></span><div class="wrap"><div class="tr"></div><div class="tl"></div><div class="content">'+str+'</div><div class="br"></div><div class="bl"></div></div></div>')
								//$('<div class="validError"  error='+field+'><span></span><div class="wrap"><div class="tr"></div><div class="tl"></div><div class="content">'+msg+'</div><div class="br"></div><div class="bl"></div></div></div>')

							.appendTo(body)
								.css({
										left:($(".bodyWin").offset().left + $(".bodyWin").outerWidth()) +'px',
										top: $(".bodyWin").offset().top +'px'
									})
								.show();

							$("#errorWin span").click(function(){ $(this).parent().remove() });
						}
						else
						{
							$('<div id="mask"><div id="modalWin"><span class="close"></span>'+msg+'</div></div>')
							.appendTo(body)
						}
					}
					else
					{
						$("#regForm input").val('');
						$('<div id="mask"><div id="modalWin">'+msg+'</div></div>').appendTo(body);

						//статистика для post.rmbn.ru
						$('#form_general').append("<img src='http://post.rmbn.ru/image_new.php?cid=2&"+Math.random()+"' width=1 height=1>");
						$('#form_general').append("<img src='http://post.rmbn.ru/image_new.php?cid=1&"+Math.random()+"' width=1 height=1>");
						$('#form_general').append("<img src='http://post.rmbn.ru/image_new.php?cid=121&"+Math.random()+"' width=1 height=1>");

						//редирект на казино
						setTimeout("window.location = 'http://play.grand-casino.com/'", 2000);
					}
				}
			}
		});
	}
}


//навигации по форме регистрации
function regNaviSlider() {
	var	eProc = false,eProc2 = false,
		vIE = false;

	if($.browser.msie)
		vIE = $.browser.version;//узнаем версию IE



	//обработчик на кнопку "Далее"
	$('.btnNext').click(function() {
		if(!eProc) {
			var errStatus = false;

			eProc = true;//не обрабатывать новые события

			//проверка полей на валидность
			errStatus = validFormFields();

			//если поля заполнены верно
			if(!errStatus){
				$(".validError").remove();
				$('#step1').css("visibility","hidden").removeClass('activeStep');
				$('#step2').css("visibility","visible").addClass('activeStep');
			}
			else
				eProc = false;//разрешаем обработку новых событий
		}
	});
	$('.btnNext2').click(function() {
		if(!eProc2) {
			var errStatus = false;

			eProc2 = true;//не обрабатывать новые события

			//проверка полей на валидность
			errStatus = validFormFields();

			//если поля заполнены верно
			if(!errStatus){
				$(".validError").remove();
				$('#step2').css("visibility","hidden").removeClass('activeStep');
				$('#step3').css("visibility","visible").addClass('activeStep');
			}
			else
				eProc2 = false;//разрешаем обработку новых событий
		}
	});

	$('.btnBack2').click(function() {
		$(".validError").remove();
		eProc=0;
		$('#step2').css("visibility","hidden").removeClass('activeStep');
		$('#step1').css("visibility","visible").addClass('activeStep');
	});

	$('.btnBack3').click(function() {
		$(".validError").remove();
		eProc2=0;
		$('#step3').css("visibility","hidden").removeClass('activeStep');
		$('#step2').css("visibility","visible").addClass('activeStep');
	});
}


//ф-ия проверки валидности полей формы
function validFormFields(invalidVal) {
	var errors = 0,
		rexpCapcha = /^[0-9]{4}$/,
		rexpPhone = /^[0-9]{7,20}$/,
		rexpEmail = /^([\w-]+(?:\.+[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

	//проверяем валидность полей
	//$.each($('.activeStep input'), function()
	$(".activeStep input").each(function()
	{
		var msg = '',
			err = false,
			_this = $(this),
			field = _this.attr('name'),
			fieldVal = _this.val();

		if(fieldVal == '')
		{
			msg = 'Обязательно для заполнения';
			err = true;
			errors++;
		}
		else if( field == 'login')
		{
			if(fieldVal.length < 3 || fieldVal.length > 10)
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
			else if( !checkLogin(fieldVal, false) )
				errors++;
		}
		else if( field == 'pass' )
		{
			if(fieldVal.length < 3 || fieldVal.length > 15)
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
		}
		else if( field == 'rpass' )
		{
			if(fieldVal.length < 3 || fieldVal.length > 15)
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
			else if( fieldVal !== $("input[name='pass']").val() )
			{
				msg = 'Пароли не совпадают';
				err = true;
				errors++;
			}
		}
		else if( field == 'fio')
		{
			if(fieldVal.length < 2)
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
		}
		else if( field == 'nyear')
		{
			var selYear = fieldVal,
				selMonth = $('#selMonth').val(),
				selDay = $('#selDays').val(),
				now = new Date(),
				minYear = now.getFullYear() - 18,
				carMonth = now.getMonth() + 1,
				carDay = now.getDate();

			if(selMonth > 12 || selMonth < 1 || selDay < 1)
			{
				msg = 'Вы ввели не корректную дату рождения';
				err = true;
			}
			else if(selYear == minYear && (selMonth > carMonth || (selMonth == carMonth && selDay > carDay)))
			{
				msg = 'Возраст не может быть меньше 18';
				err = true;
			}

			if(err)
			{
				errors++;
				_this = $('#cuselFrame-selYear');
			}
		}
		else if( field == 'safecode' )
		{
			if(!rexpCapcha.test(fieldVal))
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
			else if(invalidVal !== undefined)
			{
				msg = 'Неверный код безопасности';
				err = true;
				errors++;
			}
		}
		else if( field == 'phone')
		{
			if(!rexpPhone.test(fieldVal))
			{
				msg = 'Неверный формат';
				err = true;
				errors++;
			}
		}
		else if( field == 'email' && !rexpEmail.test(fieldVal) )
		{
			msg = 'Неверный формат';
			err = true;
			errors++;
		}
		else err = false;

		if(err)
		{
			$("[error='"+field+"']").remove();//исключаем дублирование ошибок
			$('<div class="validError" style="width:'+(5*msg.length+50)+'px;" error='+field+'><span></span><div class="wrap"><div class="tr"></div><div class="tl"></div><div class="content">'+msg+'</div><div class="br"></div><div class="bl"></div></div></div>')
				.appendTo($('body'))
					.css({
							left: _this.offset().left + _this.outerWidth()+1 +'px',
							top: _this.offset().top-7 +'px'
						})
					.fadeIn();
		}
	});

	if(errors > 0)
		return true;
	else
		return false;
}


//ф-ия проверки уникальности логина
function checkLogin(val, fork) {
	var returnValue = false;
	fork = (fork === undefined) ? true : false;

	$.ajax({
		type: "POST",
		url: "system/ajax/checkLogin.php",
		data: "login="+val,
		async: fork,
		success: function(res){
			if(res)
			{
				var el = $("input[name='login']");
				$("<div class='validError' style='width:"+(5*res.length+50)+"px;' error='login'><span></span><div class='wrap'><div class='tr'></div><div class='tl'></div><div class='content'>"+res+"</div><div class='br'></div><div class='bl'></div></div></div>")
				.appendTo($('body'))
					.css({
						left: el.offset().left + el.outerWidth()+1 +'px',
						top: el.offset().top-7 +'px'
					})
					.fadeIn();
			}
			else returnValue = true;
		}
	});

	//alert('fork='+fork+' value='+returnValue);
	return returnValue;
}


function validate(e, _this) {
	var keynum, keychar, rexp;

	//создаем обьект с регулярными выражениями для каждого поля
	var regexp = {};
	regexp.email	= new RegExp("[^A-Za-zА-я0-9@\\_\\-\\.]|@@|@.+\\.\\.|\\.@|@\\.|@.*@|^@$|^\\.$", "gim");
	regexp.fio		= new RegExp("[^A-Za-zА-я\\s\\.]|\\s\\s|\\.\\.|\\s\\.|^\\s$|^\\.$", "gim");
	regexp.login	= new RegExp("[^A-Za-zА-я0-9\\_\\-]", "gim");
	regexp.pass		= new RegExp("[^A-Za-zА-я0-9\\_\\-]", "gim");
	regexp.rpass	= new RegExp("[^A-Za-zА-я0-9\\_\\-]", "gim");
	regexp.phone	= new RegExp("[^0-9]", "gim");
	regexp.safecode	= new RegExp("[^0-9]", "gim");

	if(window.event)
		keynum = e.keyCode;
	else if(e.which)
		keynum = e.which;

	//заглушка на клавиши Left, Right, Up, Down, Tab, Del, Backspace
	if( ((e.keyCode >= 35 && e.keyCode <= 40 || e.keyCode == 46) && e.which == 0) || e.keyCode == 9 || e.keyCode == 8)
		return true;

	keychar = String.fromCharCode(keynum);
	rexp = regexp[_this.name];

	//обработчик для события keyup, blur
	if(e.type=='keyup' || e.type=='blur')
	{
		if(rexp.test(_this.value))
		{
			_this.value = _this.value.replace(rexp,'');
			return true;
		}
		else return false;
	}

	//alert("event="+e.type+" which="+e.which+" keycode="+e.keyCode+" char="+keychar);

	return !rexp.test(_this.value + keychar);
}

function inputTips(e, _this)
{
	var strTips = '',
		objTips = $('.fieldTip'),
		elTop = _this.offset().top,
		elLeft = _this.offset().left + _this.outerWidth(),
		elName = _this.attr('name');

	var tips = {};
	tips.login		= 'Необходимо ввести от 3 до 10 символов,<br /> такого формата: A-Z, a-z, А-Я, а-я, 0-9, _, -.';
	tips.pass		= 'Необходимо ввести от 3 до 15 символов,<br /> такого формата: A-Z, a-z, А-Я, а-я, 0-9, _, -.';
	tips.rpass		= 'Необходимо ввести то же слово, что и в поле "пароль".';
	tips.email		= 'Электронная почта должна иметь формат a@a.aa';
	tips.phone		= 'В поле "Телефон" необходимо ввести от 7 до 20 цифр.';
	tips.fio		= 'Необходимо ввести свои фамилию, имя и отчество.';
	tips.safecode	= 'Необходимо ввести цифры изображеные на картинке выше.';
	tips.visData	= 'Только Ваши ФИО, страна и баланс будут видны другим игрокам';

	strTips = tips[elName];

	if(strTips != undefined)
	{
		if(e.type == 'focus')
		{
			//удаляем сообщ. об ошибке валидации
			$("[error='"+_this.attr('name')+"']").remove();

			objTips.append(strTips+'<span></span>')
					.css({
						left: elLeft +'px',
						top: elTop +'px'
					});

			objTips.fadeIn(500);
		}
		else if(e.type == 'blur')
			objTips.hide().text('');
		else if(e.type == 'mouseover')
			$('.textTips').text(strTips);
		else if(e.type == 'mouseout')
			$('.textTips').text('');
	}
}



function setValidDate()
{
	var year  = $("#selYear").val(),
		month = $("#selMonth").val(),
		day	  = $("#selDays").val();

	//определяет кол-во дней выбраного месяца
	var countDays = new Date(year, month, 0).getDate();

	//определяем текущее кол-во опшионов селекта-дней
	var countOpt = ( $(".nDays span").length > 0 ) ? $(".nDays span").length : 31;

	//определяем сколько опшионов не хватает
	var addOpt 	= ( countDays > countOpt ) ? countDays - countOpt : 0;

	if( addOpt > 0)
	{
		var strOpt 	= "";
		//цикл формирует строку с необходимыми опшионами
		for(var i = 1; i <= addOpt; i++)
		{
			countOpt++;
			strOpt += "<span value="+countOpt+">"+countOpt+"</span>";
		}
	}

	//добавляем недостающие дни
	$(".nDays span").parent().append(strOpt);

	//если установленое значение дня больще чем кол-во дней в месяце
	if( day > countDays )
	{
		$("#selDays").val(countDays);
		$(".nDays .cuselText").text(countDays);

		$.each($(".nDays span"),function(i)
		{
			//удаляем класс активности
			if( $(this).hasClass('cuselActive') )
				$(this).removeClass('cuselActive');

			//добавляем класс активности
			( i == countDays-1 ) ? $(this).addClass("cuselActive") : '';

			//удаляем лишние дни месяца
			( i > countDays-1 ) ? $(this).remove() : '';
		});
	}
	else
	{
		$.each($(".nDays span"), function(i)
		{
			//удаляем лишние дни месяца
			( i > countDays-1 ) ? $(this).remove() : '';
		});
	}


	//обновляем селект выбора дня
	var rparams = {
	refreshEl: "#selDays",
	visRows: 12
	}
	cuSelRefresh(rparams);
}

