$(document).ready(function(){

	if($.fn.mask)
	{
		$('.form_mask').each(function(){
			var mask = $(this).attr('title');
			$(this).attr('title','').mask(mask,{placeholder:" "});
		})
	}
	
	if($.fn.alphanumeric)
	{
		$('.form_filter').each(function(){
			var filt = $(this).attr('title');
			$(this).attr('title','');
			var reg = /^\\([adw])(\^?)(.*)$/g;
			if(preg = reg.exec(filt))
			{
				var chars = preg[3];
				if(!chars) opts = null;
				else
				{
					if(preg[2]) opts = {ichars: chars};
					else opts = {allow: chars};
				}
				switch(preg[1])
				{
					case 'w':
						$(this).alphanumeric(opts);
						break;
					case 'a':
						$(this).alpha(opts);
						break;
					case 'd':
						$(this).numeric(opts);
						break;
				}
			}
		})
	}

	if($.fn.combobox)
	{
		$('.form_combobox').each(function(){
			var w = parseInt($(this).width());
			$(this).combobox(
			{
				comboboxContainerClass: "comboboxContainer",
				comboboxValueContainerClass: "comboboxValueContainer",
				comboboxValueContentClass: "comboboxValueContent",
				comboboxDropDownClass: "comboboxDropDownContainer",
				comboboxDropDownButtonClass: "comboboxDropDownButton",
				comboboxDropDownItemClass: "comboboxItem",
				comboboxDropDownItemHoverClass: "comboboxItemHover",
				comboboxDropDownGroupItemHeaderClass: "comboboxGroupItemHeader",
				comboboxDropDownGroupItemContainerClass: "comboboxGroupItemContainer",
				animationType: "fade",
				width: w
			});	
		});	
	}
	
	if($.fn.autocomplete)
	{
		$(':input.form_autocomplete').each(function(){
			var url = $(this).attr('title');
			$(this).autocomplete(url, {
				delay:10,
				minChars:1,
				matchSubset:1,
				autoFill:true,
				matchContains:1,
				cacheLength:0,
				selectFirst:true,
				maxItemsToShow:10,
				formatItem: function (row, i, num){
					return row[0];
				}
			})
		})
	}
	
	$('div.form-ajaxvalidator').each(function(){
		var validator = $(this);
		var fid = validator.attr('id').replace(/^ajaxvalidator_/g,'');
		var file = validator.attr('title');
		var input = $('#' + fid);
		input.blur(function(){
			var v = $(this).val();
			$.drawLoading();
			$.post(file + '?lang=' + lang + '&value=' + v,{value: input.val()},function(data){
				$.removeLoading();
				validator.html(data).fadeIn('fast');
				input.bind('focus',function(){
					validator.fadeOut('fast');
				})
			})
		})
	})
	
	
	var pss = $('.passwordstrength');
	if(pss.size())
	{
		$.getScript('/lib/pstrength/digitalspaghetti.password.js',function(){
			pss.pstrength({minChar: 6,displayMinChar: false})
		})
	}

	$('select.countryselect').change(function(){
		var sid = $(this).attr('id');
		var country = $(this).val();
		var sname = $(this).attr('name');
		var usa_id = $(this).find('option.location_usa').attr('value');
		if(usa_id && country == usa_id) $('#zipcode' + sid).show();
		$('#towndiv' + sid).load('/modules/Form/Form_locations.php?lang=' + lang + '&country=' + country + '&id=' + sid + '&name=' + sname);
	})

	$(":input.form_clear").focus(function(){
		var val = $(this).attr('title');
		if(val && $(this).val() == val) $(this).val('');
	})
	
	$("form.form_validate input,form.form_validate textarea").focus(function(){
		if((this.type == 'text' || this.type == 'password' || this.type == 'file' || this.type == 'textarea') && !$(this).is('.require'))
		{
			$(this).addClass('focus').blur(function(){
				$(this).removeClass('focus');
			});
		}
	})

	$("form.form_validate").submit(function(){
			var submit_form = true;
			var form_id = $(this).attr('id');
			if(!form_id) form_id = $(this).attr('id','form' + document.uniqueID).attr('id');
			var form = $(this);
			
			$(':input,:password,:radio,:checkbox',this).each(function(){

				if($(this).parents('fieldset.hidden').size()) return true;
				
				if($(this).is('.form_need'))
				{
					var do_message = false;
					var is_radio = $(this).is(':radio');
					var is_checkbox = $(this).is(':checkbox');
					var is_multiple = $(this).length && this.type == 'select-multiple';
					if(is_radio)
					{
						rname = $(this).attr('name');
						if(!$(":radio[@name='" + rname + "']:checked",form).length)
						{
							do_message = true;
							obj = $(":radio[@name='" + rname + "']:first",form).get(0);
						}
					}
					else if(is_checkbox)
					{
						rname = $(this).attr('name');
						if(!$(":checkbox[@name='" + rname + "']:checked",form).length)
						{
							do_message = true;
							obj = $(":checkbox[@name='" + rname + "']",form).get(0);
						}
					}
					else if(is_multiple)
					{
						if(!$(this).val())
						{
							do_message = true;
							obj = this;
						}
					}
					else if($(this).val() == '')
					{
						do_message = true;
						obj = this;
					}
					if(do_message)
					{
						$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorFill',function(data){
							show_form_message(obj,data);
						})
						return submit_form = false;
					}
				}

				if($(this).is('.form_mail') && $(this).val() && !check_mail($(this).val()))
				{
					var obj = this;
					$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorCorrectMail',function(data){
						show_form_message(obj,data);
					})
					return submit_form = false;
				}

				if($(this).is('[@class*=form_minlength]'))
				{
					var val_length = $(this).val().length;
					var obj = this;
					if(preg = /form_minlength(\d+)/g.exec($(this).attr('class')))
					{
						var min_length = parseInt(preg[1]);
						if(val_length < min_length)
						{
							$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorMinlength',function(data){
								data = data.replace(/#n#/g,min_length);
								show_form_message(obj,data);
							})
							return submit_form = false;
						}
					}
				}

				if($(this).is('[@class*=form_maxlength]'))
				{
					var val_length = $(this).val().length;
					var obj = this;
					if(preg = /form_maxlength(\d+)/g.exec($(this).attr('class')))
					{
						var max_length = parseInt(preg[1]);
						if(val_length > max_length)
						{
							$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorMaxlength',function(data){
								data = data.replace(/#n#/g,max_length);
								data = data.replace(/#num#/g,val_length);
								show_form_message(obj,data);
							})
							return submit_form = false;
						}
					}
				}

				if($(this).is('.form_exts'))
				{
					var exts = $(this).attr('title').split(' ');
					var file_name = $(this).val();
					if(file_name)
					{
						var valid_ext = false;
						var ext = (preg = new RegExp('\.([a-zA-Z0-9]+)$','g').exec(file_name)) ? preg[1] : '';
						ext = ext.toLowerCase();
						for(i = 0;i < exts.length; i++)
						{
							if(ext == exts[i])
							{
								valid_ext = true;
								break;
							}
						}
						if(!valid_ext)
						{
							var obj = this;
							$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorFileExt',function(data){
								data = data.replace('#formats#',exts.join(', '));
								show_form_message(obj,data);
							})
							return submit_form = false;
						}
					}
				}
				
				if($(this).is(':password[name^=password]'))
				{
					var pss_val = $(this).val();
					var pss_match = true;
					var pss = $(':password[name^=password]',form);
					pss.each(function()
					{
						if($(this).val() != pss_val)
						{
							pss_match = false;
							return;
						}
					})
					if(!pss_match)
					{
						$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=ErrorPasswords',function(data){
							show_form_message(pss.filter(':last'),data);
						})
						return submit_form = false;
					}
				}
			})

			if(submit_form)
			{
				$(':file',this).each(function(){
					if($(this).val())
					{
						form.addClass('form_direct');
						//if(form.attr('action').indexOf('/modules/Form/Form_handler.php') != -1) form.attr('action','');
						return;
					}
				})
				if(!$(this).is(".form_direct"))
				{
					ccode = $(this).find(':text[@name=confirm_code]');
					if(ccode.size())
					{
						$.post('/modules/Form/Form_validate_captcha.php',ccode.serializeArray(),function(data)
						{
							if(!parseInt(data))
							{
								$.get('/modules/Form/Form_ajax_return.php?lang=' + lang + '&field=MessageCode',function(data){
									show_form_message(ccode.get(0),data);
									reload_captcha(form)
								})
								return submit_form = false;
							}
							else do_submit(form)
						})
					}
					else do_submit(form)
				}
				else return true;
			}
			return false;
	})
})

function do_submit(form)
{
	form_id = form.attr('id');
	form_action = form.find(':hidden[@name=handler]').val();
	handler = '/modules/Form/Form_handler.php?lang=' + lang;
	result_id = form_id + '_result';
	if(!$('#' + result_id).size()) return;
	$.drawLoading();
	if(form.method == 'get') $("#" + result_id).load(handler,function(){$.removeLoading();init();reload_captcha(form_id)});
	else
	{ 
		$("#" + result_id).load(handler,form.serializeArray(),function(){
			$.removeLoading();
			init();
			reload_captcha(form);
			if($(this).find('#form_message_ok,.success').size()) form.remove();
		})
	}
}

function check_mail(str)
{
	if(str == '') return true;
	str = str.replace(/\s/g,'');
	var mails = str.split(",");
	var reg2 = /^[a-zA-Z0-9][a-zA-Z0-9\._-]+@[a-zA-Z0-9_\.-]+\.[a-zA-Z]{2,4}$/;
	for(i = 0;i < mails.length;i++) if(!reg2.test(mails[i])) return false;
	return true;
}

function show_form_message(obj,message)
{
	input = $(obj);
	obj_type = input.size() ? obj.type : '';
	if(obj_type == 'text' || obj_type == 'textarea') input.removeClass('blur').addClass('require');
	var as = 0;
	if($.browser.msie || $.browser.opera) as = 2;
	else if($.browser.mozilla || $.browser.safari) as = 2;
	var left = input.offset({scroll:false}).left - as;
	var top = input.offset({scroll:false}).top + input.height() + as + 3;
	var need_mess = $('<div class=formmessage>' + message + '</div>').css('left',left).css('top',top).appendTo('body')
	.fadeIn('fast',function()
	{
		if(input.is(':visible')) input.focus();
	});
	if(obj_type == 'file' || obj_type == 'select-one' || obj_type == 'select-multiple') bind_form_message('change',obj,need_mess);
	else if(obj_type == 'radio' || obj_type == 'checkbox') bind_form_message('click',obj,need_mess);
	else bind_form_message('keydown',obj,need_mess);
}

function bind_form_message(bind_type,obj,obj_mess)
{
	$(obj).bind(bind_type,function()
	{
		obj_mess.fadeOut('fast',function()
		{
			$(this).remove();
			$(obj).removeClass('focus').addClass('blur');
		})
	})
}

function reload_captcha(form)
{
	$("img[@src*=captcha]",$(form)).each(function(){
		var new_src = $(this).attr('src') + '?' + Math.random();
		$(this).attr('src',new_src);
		$('#field_confirmation_code',form).val('').focus();
	})
	return false;
}