$(document).ready(function(){

	$.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($('#form_handler').text()) != -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_kcaptcha.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;
	})
	
	$('*[@id^=smile_]').click(function(){
		var area_id = $(this).attr('id').replace(/^smile_/g,'');
		var str = $(this).attr('title')
		var area = $('#' + area_id);
		if(area.length)
		{
			var pos = getCaretPos(area.get(0));
			newtext = area.val();
			newtext = newtext.substr(0,pos) + str + newtext.substr(pos);
			area.val(newtext);
		}
		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(){sending.remove();reload_captcha(form_id)});
	else
	{ 
		var to = form.attr('action');
		$("#" + result_id).load(to,form.serializeArray(),function(){
			sending.remove();
			reload_events(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);
	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()});
	obj_type = input.length ? obj.type : '';
	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()})})
}

function reload_captcha(form)
{
	$("img[@src*=kcaptcha]",$(form)).each(function(){
		var new_src = $(this).attr('src') + '?' + Math.random();
		$(this).attr('src',new_src);
	})
}

function reload_events(form)
{
	reload_captcha(form);
}


function getCaretPos(obj)
{
	obj.focus();
	if(obj.selectionStart) return obj.selectionStart;
	else if(document.selection)
	{
		var sel = document.selection.createRange();
		var clone = sel.duplicate();
		sel.collapse(true);
		clone.moveToElementText(obj);
		clone.setEndPoint('EndToEnd', sel);
		return clone.text.length;
	}
	return 0;
}

function bbcode(str,id,res_obj)
{
	var area = $('#' + id);
	var areaobj = area.get(0);
	area.focus();
	var temp = res_obj ? '[#str#=#value#]#text#[/#str#]' : '[#str#]#text#[/#str#]';
	if(res_obj) var val = $(res_obj).val();
	if(document.selection) 
	{
		var s = document.selection.createRange(); 
		shit = s.text;
		newtext = temp.replace(/#text#/g,shit);
		newtext = newtext.replace(/#str#/g,str);
		if(res_obj) newtext = newtext.replace(/#value#/g,val);
		s.text = newtext;
		if(!shit) s.moveEnd('character',-(str.length + 3))
		s.select();
	}
	else if (typeof(areaobj.selectionStart) == 'number')
	{
		var start = areaobj.selectionStart;
		var end = areaobj.selectionEnd;
		text = areaobj.value.substr(start,end-start);
		shit = text;
		newtext = temp.replace(/#text#/g,shit);
		newtext = newtext.replace(/#str#/g,str);
		if(res_obj) newtext = newtext.replace(/#value#/g,val);
		fp = areaobj.value.substr(0,start).length;
		areaobj.value = areaobj.value.substr(0,start) + newtext + areaobj.value.substr(end);
		if(!shit) ss = start + str.length + (!res_obj ? 2 : 3 + val.length) ;
		else ss = fp + 2 * str.length + (!res_obj ? 5 : 6 + val.length) + shit.length;
		areaobj.setSelectionRange(ss,ss);
	}
}
