$(document).ready(function(){

	var pss = $('.passwordstrength');
	if(pss.size())
	{
		$.getScript('/lib/pstrength/digitalspaghetti.password.js',function(){
			pss.pstrength({minChar: 6,displayMinChar: false})
		})
	}

	$.get('/general/ajax_vars.php?lang=' + lang + '&form=1',function(data){
		$(data).appendTo('body');
	})

	$('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);
	})

	$("form.form_validate :input.form_clear").click(function(){
		var val = $(this).attr('title');
		if(val && $(this).val() == val) $(this).val('');
	})
	
	$("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).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)
					{
						show_form_message(obj,$('#form_message_fill').html());
						return submit_form = false;
					}
				}

				if($(this).is('.form_mail') && $(this).val() && !check_mail($(this).val()))
				{
					show_form_message(this,$('#form_message_mail').html());
					return submit_form = false;
				}

				if($(this).is('[@class*=form_minlength]'))
				{
					var val_length = $(this).val().length;
					if(preg = /form_minlength(\d+)/g.exec($(this).attr('class')))
					{
						var min_length = parseInt(preg[1]);
						if(val_length < min_length)
						{
							show_form_message(this,$('#form_message_min').html().replace(/#n#/g,min_length));
							return submit_form = false;
						}
					}
				}

				if($(this).is('[@class*=form_maxlength]'))
				{
					var val_length = $(this).val().length;
					if(preg = /form_maxlength(\d+)/g.exec($(this).attr('class')))
					{
						var max_length = parseInt(preg[1]);
						if(val_length > max_length)
						{
							var message = $('#form_message_max').html();
							message = message.replace(/#n#/g,max_length);
							message = message.replace(/#num#/g,val_length);
							show_form_message(this,message);
							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] : '';
						for(i = 0;i < exts.length; i++)
						{
							if(ext == exts[i])
							{
								valid_ext = true;
								break;
							}
						}
						if(!valid_ext)
						{
							show_form_message(this,$('#form_message_fileext').html().replace('#formats#',exts.join(', ')));
							return submit_form = false;
						}
					}
				}
				
				if($(this).is(':password'))
				{
					var pss_val = $(this).val();
					var pss_match = true
					var pss = $(':password',form);
					pss.each(function()
					{
						if($(this).val() != pss_val)
						{
							pss_match = false;
							return;
						}
					})
					if(!pss_match)
					{
						show_form_message(pss.filter(':last'),$('#form_message_pwds').html());
						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))
							{
								show_form_message(ccode,$('#form_message_code').html());
								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.attr('action');
	var result = /result_id=(\w+)/g.exec(form_action);
	if(result) result_id = result[1];
	else result_id = form_id + '_result';
	if(!$('#' + result_id).size()) return;
	var sending = show_message($('#form_message_send').html(),true);
	if(form.method == 'get') $("#" + result_id).load(form.attr('action'),function(){init();sending.remove();reload_captcha(form_id)});
	else
	{ 
		var to = form.attr('action');
		$("#" + result_id).load(to,form.serializeArray(),function(){
			init();
			sending.remove();
			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.length ? obj.type : '';
	if(obj_type == 'text' || obj_type == 'textarea') input.removeClass('blur').addClass('focus');
	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);
	})
}
