jQuery.validator.addMethod("regex", function(value, element, param) {
	return param.test(value);
}, "Invalid format");

jQuery.validator.addMethod("notEqualTo", function(value, element, param) {
	return $(param).val() ? (value != jQuery.trim($(param).val())) : (value != param);
}, "error");

$().ready(function() {
	// Cleaning fields
	$("#regform,#loginform").find("input[@type='text'], input[@type='password'], textarea").each(function() { this.value=''; });
	$("#regform,#loginform").find("select").each(function() { this.selectedIndex = 0; });;

	$("#loginform").validate({
		debug: true,
		submitHandler: function() {
			var params = {};
			$("#loginform").find("input[@type='text'],  input[@type='password'],input[@type='hidden'], option[@selected]").each(function() { params[this.name || this.parentNode.name] = jQuery.trim(this.value); });
			//$("#loginform").find("input[@type=checkbox]").each(function() { params[this.name || this.parentNode.name] = this.checked;});

			$("#existing_user_status").show();
			$("#existing_user_waiting").show();
			$("#existing_user_msgs").hide();

			$.post(document.getElementById("loginform").getAttribute("action"), params, function(xml) {
				var r = x2a(xml);
				if (r.result == "OK") {

					$("#regform").validate().resetForm();
					show_step_two(r.wcusersessionid,'existing_user',r.currency);

				} else if (r.nr != undefined) {
					// Refreshing capcha in any case of error
					refresh_capcha();

					var msg = messages.errors.detected;

					var errors = {'8' : {"username" : messages_login.login_username.regex},
 					              '20002' : {"securitycode" : messages_login.securitycode.invalid},
								  '3' : {"login_password" : messages_login.login_password.regex},
								  '1000' : {"securitycode" : messages_login.securitycode.invalid}
					};

					if (errors[r.nr]) {
						$("#loginform").validate().showErrors(errors[r.nr]);
					} else {
						msg = messages.errors.internal;
					}

					$("#existing_user_waiting").hide();
					$("#existing_user_msgs").show();
					$("#existing_user_msgs").text(msg);

				} else {
					//document.getElementById("captcha_i").src=document.getElementById("captcha_i").src.replace(/\?.*/, "") + "?r=" + Math.random();
					//document.getElementById("securitycode").value="";

					$("#existing_user_waiting").hide();
					$("#existing_user_msgs").show();
					$("#existing_user_msgs").text(messages.errors.internal);
				}
			});
			return false;
		},
		rules: {
			login_username: {
				required: true,
				regex: /^[\w0-9\.@#\$\/'&\+<>\(\)\*`;\!\?]{5,30}$/i
			},
			login_password: {
				required: true,
				regex: /^[0-9a-z]{5,10}$/i,
				notEqualTo: "#username"
			},
			login_country: {
				required: true
			},
			login_game: {
				required: true
			},
			login_cellphone: {
				required: true,
				regex: /^[\d\s\(\)\-+\.]{4,13}$/
			},
			securitycode: {
				required: true,
				regex: /^[\d]{4}$/
			}
		},
		messages: messages_login,

		errorPlacement: function(error, element) {
			if (element.is(":radio")) {
			 }
			else{
				element.parent().find("label").append("<br />");
				error.appendTo(element.parent().find("label"));
			}
		},
		success: function(label) {
			label.html("<![CDATA[ ]]>").addClass("checked");
		}
	});


	$("#regform").validate({
		debug: true,
		submitHandler: function() {
			var params = {};

			$("#regform").find("input[@type='text'], input[@type='hidden'], input[@type='password'], option[@selected], textarea").each(function() { params[this.name || this.parentNode.name] = jQuery.trim(this.value);});
			$("#regform").find("input[@type=checkbox]").each(function() { params[this.name || this.parentNode.name] = this.checked;});
			$("#regform").find("input[@type=radio]").each(function() {if(this.checked) params[this.name || this.parentNode.name] = this.value});

			params.birthdate = params.b_year + "-" + (params.b_month.length == 1 ? '0' + params.b_month : params.b_month) + "-" + (params.b_day.length == 1 ? '0' + params.b_day : params.b_day);
			params.countrycode = params.country.split('-')[1];
			params.k = k;

			$("#new_user_status").show();
			$("#new_user_waiting").show();
			$("#new_user_msgs").hide();

			$.post(document.getElementById("regform").getAttribute("action"), params, function(xml) {
				var r = x2a(xml);

				if (r.result == "OK") {

					$("#regform").validate().resetForm();
					show_step_two(r.wcusersessionid,'new_user',r.currency);
					//location.href = redirect_link;

				} else if (r.nr != undefined) {
					//document.getElementById("captcha_i").src=document.getElementById("captcha_i").src.replace(/\?.*/, "") + "?r=" + Math.random();
					//document.getElementById("securitycode").value="";

					var msg = messages.errors.detected;

					var errors = {'8' : {"username" : messages.username.regex},
					              '11' : {"username" : messages.username.regex},
					              '15' : {"password1" : messages.password1.notEqualTo},
					              '16' : {"username" : messages.username.regex},
					              '18' : {"username" : messages.username.exist},
					              '19' : {"email" : messages.email.exist},
					              '20' : {"b_day" : messages.birthdate.invalid},
					              '21' : {"b_day" : messages.birthdate.young},
					              '22' : {"b_day" : messages.birthdate.old},
					              '25' : {"coupon" : messages.coupon.invalid},
					              '1100' : {"firstname" : messages.firstname.regex},
					              '1101' : {"firstname" : messages.lastname.regex},
					              '1102' : {"address" : messages.address.regex},
					              '1103' : {"city" : messages.city.regex},
					              '1104' : {"state" : messages.state.regex},
					              '1105' : {"zip" : messages.zip.regex},
					              '1107' : {"email" : messages.email.regex},
					              '1109' : {"phone" : messages.phone.regex},
					              '1112' : {"cellphone" : messages.cellphone.regex},
                                  '1118' : {"coupon" : messages.coupon.invalid},
 					              '20002' : {"securitycode" : messages.securitycode.invalid}};

					if (errors[r.nr]) {
						$("#regform").validate().showErrors(errors[r.nr]);
					} else {
						msg = messages.errors.internal;
					}

					$("#new_user_waiting").hide();
					$("#new_user_msgs").show();
					$("#new_user_msgs").text(msg);

				} else {
					$("#new_user_waiting").hide();
					$("#new_user_msgs").show();
					$("#new_user_msgs").text(messages.errors.internal);
				}
			});
			return false;
		},
		rules: {
			firstname: {
				required: true,
				regex: /^[a-z ]{1,40}$/i
				//regex: /^[^\d_\.@#\$\/'&\+<>\(\)\*`;\!\?\-]{1,40}$/
			},
			lastname: {
				required: true,
				regex: /^[a-z ]{1,40}$/i
				//regex: /^[^\d_\.@#\$\/'&\+<>\(\)\*`;\!\?\-]{1,40}$/
			},
			country: {
				required: true
			},
			game: {
				required: true
			},
			city: {
				required: true,
				regex: /^[\w ]{2,40}$/i
			},
			state: {
				required: true,
				regex: /^[a-z\- ]{0,20}$/i
			},
			address: {
				required: true,
				rangelength: [2, 160]
			},
			zip: {
				required: true,
				regex: /^[\w\d\-\\]{1,12}$/
			},
			sex: {
				required: true
			},
			username: {
				required: true,
				regex: /^[\w0-9\.@#\$\/'&\+<>\(\)\*`;\!\?]{5,30}$/i
			},
			password1: {
				required: true,
				regex: /^[0-9a-z]{5,10}$/i,
				notEqualTo: "#username"
			},
			password2: {
				required: true,
				regex: /^[0-9a-z]{5,10}$/i,
				equalTo: "#password1"
			},
			email: {
				required: true,
				regex: /^[\w\d\-\.]+@[\w\d\-\.]+$/
			},
			cellphone: {
				required: true,
				regex: /^[\d\s\(\)\-+\.]{4,13}$/
			},
			age: {
				required: true
			},
			agree: {
				required: true
			}
		},
		messages: messages,

		errorPlacement: function(error, element) {
			if (element.is(":radio")) {
			 }
			else{
				element.parent().find("label").append("<br />");
				error.appendTo(element.parent().find("label"));
			}
		},
		showErrors: function(errorMap, errorList) {
			if(errorList.length > 0){
				var _loc = errorList[0].element.id;
				mange_fieldsets(_loc,true);
			}
			this.defaultShowErrors();
		},

		success: function(label) {
			var _loc = label.parent().attr('for');
			mange_fieldsets(_loc,false);
			label.html("<![CDATA[ ]]>").addClass("checked");
		}
	});


	// Adding onkeyup validation
	$("#regform").find("input[@type='text'], input[@type='password'],  select, textarea").each(function() {
		$(this).keyup(function(event){
			$("#regform").validate().element(this);
		});
	});
	$("#loginform").find("input[@type='text'], input[@type='password'],  select, textarea").each(function() {
		$(this).keyup(function(event){
			$("#loginform").validate().element(this);
		});
	});

	$("#country").change(function(event){
		$("#regform").validate().element(this);
	});


	// Adding country cellphone prefix
	$("#country").change(function() {
		var prefix = this.value.split("-")[0];
		document.getElementById('cellphone_pre').value = prefix;
	});
	$("#login_country").change(function() {
		var prefix = this.value.split("-")[0];
		document.getElementById('login_cellphone_pre').value = prefix;
	});
});

/******************************************************************
*
* Modal iframe control block
*
******************************************************************/
$(document).ready(function(){

	//thickbox replacement
	var closeModal = function(hash)
	{
		  var $modalWindow = $(hash.w);
		  //$('#jqmContent').attr('src', 'blank.html');
		  $modalWindow.fadeOut('2000', function()
		  {
			  hash.o.remove();
			  //refresh parent
			  if (hash.refreshAfterClose == true)
			  {
				  window.location.href = document.location.href;
			  }
		  });
		  location.href = '/'+langugage_for_cashier+'/mobile/'+step_3_page;
	};
	var openInFrame = function(hash)
	{
		  var $trigger = $(hash.t);
		  var $modalWindow = $(hash.w);
		  var $modalContainer = $('iframe', $modalWindow);
		  var myUrl = $trigger.attr('href');
		  var myTitle = $trigger.attr('title');
		  var newWidth = 0, newHeight = 0, newLeft = 0, newTop = 0;
		  $modalContainer.html('').attr('src', myUrl);
		  $('#jqmTitleText').text(myTitle);
		  myUrl = (myUrl.lastIndexOf("#")> -1) ? myUrl.slice(0, myUrl.lastIndexOf("#")) : myUrl;

		$modalWindow.css({
			display: 'block'
		})
		// don't do animations
		$modalWindow.jqmShow();
	}

	$('#modalWindow').jqm({
		  overlay: 70,
		  modal: true,
		  trigger: 'a.go_to_cashier_button',
		  target: '#jqmContent',
		  onHide: closeModal,
		  onShow: openInFrame
	});
});


var success_fieldsets = new Array();  // holds valid fieldset lables
var step_3_page = ''; 					   // holds getstarted page for redirect to step3, depends on submited form

/******************************************************************
*
* This function called from validator on success && on errror
* @param arg1 {string} : input id
* @param arg2 {boolean} : false - called on success, true - called on error
*
******************************************************************/
function mange_fieldsets(fieldset_name,iserror){
	if(fieldset_name == '' || fieldset_name == undefined) return false;
	var _arr_position = jQuery.inArray(fieldset_name, success_fieldsets);

	if(_arr_position == -1 && !iserror){
		success_fieldsets.push(fieldset_name);
	}else{
		if(iserror && _arr_position != -1){
			success_fieldsets.splice(_arr_position,1)
		}
	}
	show_hide_fieldsets();
}

/***************************************************************
*
* Function hide/show fieldsets depending on valid fields in form are filled up
*
***************************************************************/
function show_hide_fieldsets(){
	var counter = 0;
	var fieldset_lables = new Array();
	var fildset_ids = new Array("personal_p1","personal_p2","account_details","confirm");
	fieldset_lables.push(new Array("firstname","lastname"));
	fieldset_lables.push(new Array("country", "city", "state", "address", "zip"));
	fieldset_lables.push(new Array("username","password1","password2","email"));
	fieldset_lables.push(new Array("cellphone","age","agree"));

	jQuery.each(fieldset_lables, function(i,fildset) {
		jQuery.each(fildset, function(k,fildset_lable) {
			var _arr_position = jQuery.inArray(fildset_lable, success_fieldsets);
			counter += _arr_position != -1 ? 1 : 0;
		});
		if(counter == fildset.length){
			enable_fieldset(fildset_ids[i+1]);
		}else{
			disable_fieldset(fildset_ids[i+1]);
		}
		counter = 0;
    });
}
function disable_fieldset(fieldset_name){
	$("#"+fieldset_name).find("input[@type='text'], input[@type='password'], select, textarea").each(function() {
		$(this).attr('disabled', 'disabled');
	});
	$("#"+fieldset_name).addClass('hidden_element');
}
function enable_fieldset(fieldset_name){
	$("#"+fieldset_name).find("input[@type='text'], input[@type='password'], select, textarea").each(function() {
		$(this).removeAttr('disabled');
	});
	$("#"+fieldset_name).removeClass('hidden_element');
}
$(document).ready(function(){
	$(".hidden_element").find("input[@type='text'], input[@type='password'], select, textarea").each(function() {
		$(this).attr('disabled', 'disabled');
	});
});

/************************************************************************************************
*
* Function to show step 2, hide/show needed elements, pass redirect page, pass cashier link with session
* @param arg1 {string} -- session id, arg2 {string} -- form type (register/login), arg3 {string} -- ex:USD
*
************************************************************************************************/
function show_step_two(ssid,type,currency){
	$("#"+type+"_status").hide();
	$("#"+type+"_img_step_1").addClass('hidden_element');
	$("#"+type+"_separator_1").addClass('step_success');
	$("#"+type+"_img_step_2").removeClass('hidden_element');
	$('div.go_to_cashier').show();
	$("#regform,#loginform").find("fieldset").each(function() { $(this).remove(); });
	$("#go_to_cashier_button_existing_user,#go_to_cashier_button_new_user").attr("href","http://cashier1.casinotropez.com/HTMLLayout/Cashier.php?skin=tropez&language="+langugage_for_cashier_url+"&clienttype=casino&casino=tropez&currency="+currency+"&wcusersessionid="+ssid+"&webcashier=1");
	step_3_page = 'started.html';
}
/************************************************************************************************
*
* Managing capcha refresh
*
************************************************************************************************/
var capcha_src;
$(document).ready(function(){
	capcha_src = $('#captcha_i').attr('src');
});
function refresh_capcha(){
	var _tmp = new Date();
    _tmp = "?"+_tmp.getTime();
	$('#captcha_i').fadeOut('fast');
	$('#captcha_i').attr('src',capcha_src+_tmp);
	$('#captcha_i').fadeIn('fast');
}
