$(document).ready(function(){
	Pages.All(); 
	if($('ul.headerNavigation li:eq(0)').hasClass('cur')){Pages.About()};
	if($('#regForm').attr('step') == '3'){Pages.Registration.Step3.init();};	//регистрация шаг 3
	if($('#regForm').attr('name') == 'edit_seller'){Pages.EditSeller.init();};	//редактирование seller-a
	
	$('#siteBlock').click(function() {
		popup_opened = false
		$('.dEdit').hide()
	})
});



Pages = {};
Pages.All = function(){
	$.ajaxSetup({
		type: "POST",
		url: "/action.php3",
		cache: false,
		dataType: 'json'
	});
}


Constants = {
	validatorPluginURL: 'scripts/validation.js'
};

popup_opened = false
function getEditDate(adv_id){
	if (popup_opened == true)
		return false;
		
	popup_opened = true
	var parent = $('#adv_'+adv_id);
	var params = {action:'get_adv_date', adv_id: adv_id};
	$.ajax({
		dataType:'html',
		data: params,
		success: function(data){
			parent.append('<div class="dEdit">'+data+'</div>');
		}
	});
}


//страница регистрации - шаг 3 
Pages.Registration = {};
Pages.Registration.Step3 = {
	init: function(){
		$.getScript(Constants.validatorPluginURL, function() {
			ValidatorPlugin.configure({
				fields: [
					{type: 'email', $Obj: $('input[name="email"]')},
					{type: 'website', $Obj: $('input[name="website"]')},						
					{type: 'phone', $Obj: $('input[name="tel_1"]')},
					{type: 'phone', $Obj: $('input[name="tel_2"]')},
					{type: 'phone', $Obj: $('input[name="tel_3"]')},
					{type: 'fax', $Obj: $('input[name="fax"]')}																	
				]
			});
		});
	}
};




Pages.EditSeller = {
	init: function(){
		$.getScript(Constants.validatorPluginURL, function() {
			ValidatorPlugin.configure({
				fields: [
					{type: 'email', $Obj: $('input[name="email"]')},
					{type: 'website', $Obj: $('input[name="website"]')},						
					{type: 'phone', $Obj: $('input[name="tel_1"]')},
					{type: 'phone', $Obj: $('input[name="tel_2"]')},
					{type: 'phone', $Obj: $('input[name="tel_3"]')}										
				]
			});
		});
	}
};







var loading = "";
var ans = "";
var check = true;
var cap = false;
function request(url, target, callback) {
	if ( ! document.getElementById)
	{return false;}

	if (loading != null)
	{document.getElementById(target).innerHTML = loading;}

	if (window.ActiveXObject) 
	{req = new ActiveXObject("Microsoft.XMLHTTP");}
	else if (window.XMLHttpRequest) 
	{req = new XMLHttpRequest();} 
	
	if (req == undefined)
	{return false;}
		
	if (callback != undefined) 
	{req.onreadystatechange = eval(callback);}
	else
	{req.onreadystatechange = function() { response(url, target); }}
	
	req.open("GET", url, true);	
	req.send(null);
}
function response(url, target) {
	if (req.readyState == 4) 
	 {
    if(req.responseText=="false") 
     {var cOut = document.getElementById('coutput'); cOut.innerHTML = "Вы указали неверный код."; check = false;}
    else
     {var cOut = document.getElementById('coutput'); cOut.innerHTML = ""; check = true; cap=true; MailSend();}
    //document.getElementById(target).innerHTML = (req.status == 200) ? req.responseText : "An error was encountered: " + req.status;
   }
}
function setLoadMessage(msg){
  loading = msg;
}

function MailSend(){		
	f = document.forms['leasingOrderForm'];
  var phone    = f.elements['lphone'];
  var contactname   = f.elements['lcontactname'];
  var keystring = f.elements['keystring'];
  
  if (!keystring.value)
    {var cOut = document.getElementById('coutput'); cOut.innerHTML = "Необходимо указать код."; check = false;}
  else if (keystring.value && cap==false) {
    request('/include/kcaptcha/ttest.php?keystring=' + keystring.value, 'answer');
   }
	if(keystring.value == ""){
		keystring.className = 'error';
		keystring.parentNode.parentNode.firstChild.style.color = '#c13000';
		check = false;
	}  
	if(phone.value == ""){
		phone.className = 'error';
		phone.parentNode.parentNode.firstChild.style.color = '#c13000';
		check = false;
	}
	if(contactname.value == ""){
		contactname.className = 'error';
		contactname.parentNode.parentNode.firstChild.style.color = '#c13000';
		check = false;
	}	  
	if(check && cap){
		document.getElementById('leasingOrder').className = 'none';
		//document.getElementById('orderSent').className = 'visible';
		f.submit();
		}
	else
		return false;
}


function viewBlock(ptable, link) {
  var obj = document.getElementById(ptable);
	obj.className = obj.className == 'none' ? 'visible' : 'none';
	if(link)
	   link.className = link.className == 'cur' ? '' : 'cur';
 }


function input_focus(obj){
	
	if(obj.className == 'text')
		obj.className = 'textfocus';
		
	else if(obj.className == 'textfocus')
		obj.className = 'text';
		
	else if(obj.className == 'error'){
		obj.className = 'textfocus';
		obj.parentNode.parentNode.firstChild.style.color = '#333333';
		}
}



	function setAhtung(parentSrc, objSrc){
		var myObj = document.getElementById(objSrc);
		myObj.value = parentSrc.value;
	}


	function set_my_focus(event, item_id){
		if (!document.getElementById) return;
		if (window.event) event = window.event;
		
		switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
		{
			case 13:
				AddSubscriber();
			break;
			default:
				return;
			break;
		}

	}

	function CheckLogin(){
		f = document.getElementById('regForm');

		var loginRow = document.getElementById('loginRow');
		if(loginRow)
		{
			loginRow.className = 'ok';
			var nick = f.elements['name'].value;
			
			if(nick == ""){
				if(!err)
					f.elements['name'].focus();

				loginRow.className = 'error';
			}

			
			var params = {action:'check_user', nick: nick};
			$.ajax({
				data: params,
				success: function(data){
					if(data.total > 0){
						loginRow.className = 'error2';
						f.elements['name'].focus();
					}else{
						document.getElementById('loginBubble').className = 'none';
					}
				}
			});
		}
	}




	function CheckBacklink(sellerID){
	
		f = document.getElementById('regForm');

		var toptruckRow = document.getElementById('toptruckRow');
		if(toptruckRow)
		{
			toptruckRow.className = 'ok';
			var backlink = f.elements['backlink'].value;
			
			if(backlink == ""){
				toptruckRow.className = 'error';
				f.elements['backlink'].focus();
			}else{
				var params = {action:'check_backlink', website: backlink, seller_id: sellerID};
				$.ajax({
					data: params,
					success: function(data){
					
						if(data.total != 1){
							toptruckRow.className = 'error2';
							
							document.getElementById('toptruckErr').innerHTML = "Нет обратной ссылки на ТопТрак";
																			
							f.elements['backlink'].focus();
							f.elements['backlink'].value = "";
						}
					}
				});
			}
		}
		

	}



	
	function AddSubscriber(){
		f = document.getElementById('regForm');
		
		var err = 0;
		
		var loginRow = document.getElementById('loginRow');
		var passwdRow = document.getElementById('passwdRow');
		var re_passwdRow = document.getElementById('re_passwdRow');
		
		var companyRow = document.getElementById('companyRow');
		var sellerRow = document.getElementById('sellerRow');
		var attnRow = document.getElementById('attnRow');
		var emailRow = document.getElementById('emailRow');
		var websiteRow = document.getElementById('websiteRow');
		var telRow = document.getElementById('telRow');
		var faxRow = document.getElementById('faxRow');
		var cityRow = document.getElementById('cityRow');
		var addressRow = document.getElementById('addressRow');
		var shortTextRow = document.getElementById('shortTextRow');
		var textRow = document.getElementById('textRow');
		
		if(loginRow)
		{
			loginRow.className = 'ok';
			var nick = f.elements['name'].value;
			
			if(nick == ""){
				if(!err)
					f.elements['name'].focus();

				err = 1;
				loginRow.className = 'error';
			}else
				err = 0;
			
		}

		
		if(passwdRow)
		{
			passwdRow.className = 'ok';
			if(f.elements['passwd'].value == ""){
				if(!err){
					f.elements['passwd'].focus();
				}
				err = 1;
				passwdRow.className = 'error';
				}
		}
		
		if(re_passwdRow)
		{
			re_passwdRow.className = 'ok';
			if(f.elements['passwd'].value != f.elements['re_passwd'].value){
				if(!err){
					f.elements['re_passwd'].focus();
				}
				err = 1;
				re_passwdRow.className = 'error';
				passwdRow.className = 'error2';
				}
		}
		
		if(companyRow)
		{
			companyRow.className = 'ok';
			if(f.elements['company'].value == ""){
				if(!err){
					f.elements['company'].focus();
				}
				err = 1;
				companyRow.className = 'error';
				}
		}
		
		if(attnRow)
		{
			attnRow.className = 'ok';
			if(f.elements['attn_name'].value == ""){
				if(!err){
					f.elements['attn_name'].focus();
				}
				err = 1;
				attnRow.className = 'error';
				}
		}
		
		if(emailRow)
		{
			emailRow.className = 'ok';
			if(f.elements['email'].value == ""){
				if(!err){
					f.elements['email'].focus();
				}
				err = 1;
				emailRow.className = 'error';
				}
		}
		
		if(websiteRow)
		{
			websiteRow.className = 'ok';
			if(f.elements['website'].value == ""){
				if(!err){
					f.elements['website'].focus();
				}
				err = 1;
				websiteRow.className = 'error';
				}
		}
		if(telRow)
		{
			telRow.className = 'ok';
			if(f.elements['tel_1'].value == ""){
				if(!err){
					f.elements['tel_1'].focus();
				}
				err = 1;
				telRow.className = 'error';
			}
			else{
				if(f.elements['tel_code_1'].value == ""){
					if(!err){
						f.elements['tel_code_1'].focus();
					}
					err = 1;
					telRow.className = 'error2';
				}
			}
			
			if(f.elements['tel_2'].value != ""){
				if(f.elements['tel_code_2'].value == ""){
					if(!err){
						f.elements['tel_code_2'].focus();
					}
					err = 1;
					telRow.className = 'error2';
				}
			}
			
			if(f.elements['tel_3'].value != ""){
				if(f.elements['tel_code_3'].value == ""){
					if(!err){
						f.elements['tel_code_3'].focus();
					}
					err = 1;
					telRow.className = 'error2';
				}
			}
		}
		
		
		if(cityRow)
		{
			cityRow.className = 'ok';
			if(f.elements['city'].value == ""){
				if(!err){
					f.elements['city'].focus();
				}
				err = 1;
				cityRow.className = 'error';
				}
		}
		
		if(addressRow)
		{
			addressRow.className = 'ok';
			if(f.elements['address'].value == ""){
				if(!err){
					f.elements['address'].focus();
				}
				err = 1;
				addressRow.className = 'error';
				}
		}
		
		if(shortTextRow)
		{
			shortTextRow.className = 'ok';
			if(f.elements['short_text'].value == ""){
				if(!err){
					f.elements['short_text'].focus();
				}
				err = 1;
				shortTextRow.className = 'error';
				}
		}
			
		if(textRow)
		{
			textRow.className = 'ok';
			if(f.elements['text'].value == ""){
				if(!err){
					f.elements['text'].focus();
				}
				err = 1;
				textRow.className = 'error';
				}
		}
	
		if(err == 1)
			return false;
		else
			f.submit();
	}


	
	function AddCar(){
		var carName = document.getElementById('carName');
		var carPrice = document.getElementById('carPrice');
		var carYear = document.getElementById('carYear');

		carName.className = 'ok';
		carPrice.className = 'ok';
		carYear.className = 'ok';
		
		f = document.forms['add_car'];
		var err = 0;
		
		var ageValue = null;
		
		var L = f.elements['age'].length;
		for(i=0;i<L;i++){
			if(f.elements['age'][i].checked){
				ageValue = f.elements['age'][i].value;
				break;
			}
		}


		if(f.elements['name'].value == ""){
			if(!err){
				f.elements['name'].focus();
			}
			err = 1;
			carName.className = 'error';
		}
		
		if(f.elements['price'].value == "" || f.elements['price'].value < 10315){
			if(!err){
				f.elements['price'].focus();
			}
			err = 1;
			carPrice.className = 'error';
		}

		if(f.elements['init_date'].value == "" && ageValue=="old"){
			if(!err){
				f.elements['init_date'].focus();
			}
			err = 1;
			carYear.className = 'error';
		}

	
		if(err == 1)
			return false;
		else
			f.submit();
	}


	function disable_element(Obj_id){
		var Obj = document.getElementById(Obj_id);
		Obj.value = null;
		Obj.disabled = true;		
	}

	function enable_element(Obj_id){
		var Obj = document.getElementById(Obj_id);
		Obj.disabled = false;		
	}

	function select_single_vendor(vendor_id, vendor_name){
		var name_input = document.getElementById('vendor_name');
		var id_input = document.getElementById('vendor');
		name_input.innerHTML = vendor_name;
		id_input.value = vendor_id;
		
		document.getElementById('vendorBlock').className = 'none';
		
	}
	

	function select_single_region(region_id, region_name){
		var name_input = document.getElementById('region_name');
		var id_input = document.getElementById('region');
		name_input.innerHTML = region_name;
		id_input.value = region_id;
		
		document.getElementById('regionBlock').className = 'none';
		
	}

	function my_confirm(to, what){
		if (confirm(what))
			document.location=to;
	}
	
	function open_foto(url, winname, width, height){
		var foto_windows = new Array();
		foto_windows[foto_windows.length] = window.open(url,winname,'height='+height+',width='+width+',resizable=0,scrollbars=no,menubar=no,status=no');
		for(i = 0; foto_windows.length > i; i++){
			if(!foto_windows[i].closed)
				foto_windows[i].focus();
		}
	}
	
	function closePreview(){
		preview_bg.className = 'none';
	}
	
	function openPreview(img, w, h){
		preview_bg.className = 'visible';
		preview_bg.style.height = document.getElementById('siteBlock').offsetHeight;
		image_preview.src = img;
		image_preview.width = w;
		image_preview.height = h;
		
		preview_block.style.left = (document.body.offsetWidth/2) - (preview_block.offsetWidth/2);
		preview_block.style.top =  (document.body.offsetHeight/2) + document.body.scrollTop - (preview_block.offsetHeight/2);
		document.onkeydown = escapePreview;
	}
	
	function fixPng(){
		if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent) && navigator.userAgent.search("Opera") < 0){
			preview_bg.id = 'imagePreviewBgFix';
			preview_bg = document.getElementById('imagePreviewBgFix');
		}
	}
	
	function escapePreview (event)
		{
			if (window.event) event = window.event;
			var code = event.keyCode ? event.keyCode : event.which ? event.which : null;
			if (code == 27)
			{
				preview_bg.className = 'none';
		
				document.onclick = null;
				document.onkeydown = null;
			}
		}
	
        function filter(objectsrc,imgId){
            var activeImg = document.getElementById( imgId );
            var prev1 = document.getElementById('img1');
            var prev2 = document.getElementById('img2');
            var prev3 = document.getElementById('img3');
                      
            if(prev1) prev1.className = 'carPrevOut';
            if(prev2) prev2.className = 'carPrevOut';
            if(prev3) prev3.className = 'carPrevOut';
            
            if(activeImg) activeImg.className = 'carPrevIn';
            
             document.images['main_image'].src = objectsrc;

        }  
             

	function bookmark_car(car_id){
		var my_rand = Math.ceil(Math.random()*1000000000000000);
		var url  = '/scripts/php/bookmark_car.php';
		var pars = 'car_id='+car_id+'&myrand='+my_rand;
		var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: toggle_mark_sign});
	}


	function toggle_mark_sign(originalRequest)
	{
		response = originalRequest.responseXML.documentElement;
		//alert(originalRequest.responseText);

		item_name= response.getElementsByTagName('item')[0].firstChild.data;
		status = response.getElementsByTagName('status')[0].firstChild.data;

		var myName = 'fav_'+item_name;
		var myObj = document.getElementById(myName);
		myObj.className = status;
	}


        function bookmark(div){
        if(div.className == 'markOff')
        	div.className = 'markOn';
        else
        	div.className = 'markOff';
        }
        
        
        
        function classOver(imgId){
            var activeImg = document.getElementById( imgId );
            if(activeImg.className != 'clickBrd')
                    activeImg.className = 'overBrd';
        }
        
        function classOut(imgId){
            var activeImg = document.getElementById( imgId );
            if(activeImg.className != 'clickBrd')
                    activeImg.className = 'none';
        }
        
	function tableLinesOn(pos, event){
		var X = Event.pointerX(event);
		var Y = Event.pointerY(event);
		
		my_table = document.getElementById('main_table');
		tr_list = my_table.getElementsByTagName('tr');
		for (i = 0; tr_list.length > i; i++){
			if(i == pos){
				tr_node = tr_list[i];
				td_list = tr_node.getElementsByTagName('td');
				for (z = 0; td_list.length > z; z++){
					td_node = td_list[z];
					td_node.style.background = "#efefef";
				}
				
				img_div_name = 'car_'+i;	
				img_div = document.getElementById(img_div_name);				
				img_div.style.position = 'absolute';
				img_div.style.left =X+5;
				img_div.style.top = Y+5;
				img_div.style.display = 'block';
				
			}
		}
		
	}
	
	
	function tableLinesOff(pos){
		my_table = document.getElementById('main_table');
		tr_list = my_table.getElementsByTagName('tr');
		for (i = 0; tr_list.length > i; i++){
			if(i == pos){
				tr_node = tr_list[i];
				td_list = tr_node.getElementsByTagName('td');
				for (z = 0; td_list.length > z; z++){
					td_node = td_list[z];
					td_node.style.background = "#ffffff";
				}

				img_div_name = 'car_'+i;
				img_div = document.getElementById(img_div_name);
				img_div.style.display = 'none';

			}
		}
		
	}
	
	function show_tel(){
		var tel2 = document.getElementById('tel2');
		
		var tel3 = document.getElementById('tel3');
		if(tel2.style.display == 'none'){
			tel2.style.display = 'block';
		}else{
			if(tel3.style.display = 'none')
				tel3.style.display = 'block';
		}
		
		
	}
	
	function toggle_obj(Obj_id){
		var Obj = document.getElementById(Obj_id);
		var display = Obj.style.display;
		if (display == 'none' || !display)
			Obj.style.display = 'block';
		else
			Obj.style.display = 'none';
	}
	
	function displayMore(obj_id, link){
		
		var obj = document.getElementById(obj_id);
		obj.className = obj.className == 'none' ? 'visible' : 'none';
		
		if(link)
			link.parentNode.style.display = 'none';
	}
	
	function catListMouse(obj_id){
		var obj = document.getElementById(obj_id);
		if(obj.className != 'delete'){
			obj.className = obj.className == 'standart' ? 'over' : 'standart';
		}
	}
	
	function deleteLock(obj_id , action){
		var line = document.getElementById('category' + obj_id);
		var passwd = document.getElementById('deletePassword' + obj_id);
		
		if(action == 1){
			line.className = 'delete';
			passwd.className = 'deletePasswordOn';
		}
		else if(action == 2){
			alert("Delete!");
			//my_confirm('action.php3?mode={/page/constants/mode_id}&amp;id={/page/constants/item}&amp;obj={@id}&amp;action=drop_vendor','Delete object???');
			line.className = 'standart';
			passwd.className = 'deletePasswordOff';
		}
		else{
			line.className = 'over';
			passwd.className = 'deletePasswordOff';
		}
	}
	
	
	function mouseAction(obj, count, cname){
		for(i=0; i<count; i++)
		{
			obj = obj.parentNode;
		}
		obj.className = cname;
	}
	
	function sellers_list_switch(obj){
		var cTable = document.getElementById('companySellersList');
		var cLink = document.getElementById('companySwitcher');
		var uTable = document.getElementById('userSellersList');
		var uLink = document.getElementById('userSwitcher');
		
		if(obj == 'company'){
			cTable.className = 'sellersListBlock';
			cLink.className = 'cur';
			uTable.className = 'none';
			uLink.className = 'link';
			sellersListBlock = cTable;
		}
		if(obj == 'user'){
			cTable.className = 'none';
			cLink.className = 'link';
			uTable.className = 'sellersListBlock';
			uLink.className = 'cur';
			sellersListBlock = uTable;
		}
	}
	

	function form_test(objects,submitters)
	{
		this.checker=function()
	
		{
			good=0;
	
			total=0;
			for(var i=0;i<objects.length;i++)
	
			{
				obj=document.getElementById(objects[i]);
				if(obj.value!='')good++;
	
				total++;
	
			}
	
	
	
			good=(good!=total);
	
			for(var i=0;i<submitters.length;i++)
	
			{
				if(good)
					disp = 'block';
				else
					disp = 'none';
				obj=document.getElementById(submitters[i]);
				if(obj.tagName == 'SPAN')
					obj.style.display = disp;
				else
					obj.disabled=good;
			}
	
		}
	
		this.checker()
	
	
	
		for(var i=0;i<objects.length;i++)
	
		{
			obj=document.getElementById(objects[i]);
	
			obj.onkeyup=this.checker;
			obj.onchange=this.checker;
	
		}
	
	
	}
	
	
	function sellersListHeight(firstLoad)
	{
		var company_list = sellersListBlock.getElementsByTagName('span');
		var height = new Array;
		var line_count = Math.floor(sellersListBlock.offsetWidth / 232);
		if(firstLoad){
			for (i = 0; company_list.length > i; i++){
				real_height[i] = company_list[i].offsetHeight;
			}
		}
		else
		{
			for (i = 0; company_list.length > i; i++){
				company_list[i].style.height = real_height[i];
			}
		}
		
		
		j=0;
		q=0;
		height[q] = 0;
		for (i = 0; company_list.length > i; i++){
			if(j>=line_count)
			{
				j=0;
				q++;
				height[q] = 0;
			}
			if(company_list[i].offsetHeight > height[q])
				height[q] = company_list[i].offsetHeight;
			j++;
		}
		
					
		j=0;
		q=0;
		for (i = 0; company_list.length > i; i++){
			if(j>=line_count)
			{
				j=0;
				q++;
			}
			company_list[i].style.height = height[q];
			j++;
		}
	}
	
	

/*
	function changeColor(obj)
	{
		var r = Math.round(Math.random()*206)+50;
		var g = Math.round(Math.random()*206)+50;
		var b = Math.round(Math.random()*206)+50;
		obj.style.backgroundColor = 'RGB('+r+', '+g+', '+b+')';
		
	}
*/




Pages.About = function(){
	var handler = function(){
		var antispamObj = {
			checker: function(){
				var reqFields = $('input.req'),
					checkFields = function(){
						
						var button = $('.subIt'),
							reqFieldsNum = reqFields.size(),
							filledNum = 0;

						reqFields.each(function(){
							if($(this).val() != '') filledNum++;
						});
						
						if(filledNum == reqFieldsNum)
							button.attr('disabled', '').removeClass('disabled');
						else
							button.attr('disabled', 'true').addClass('disabled');
					};
				
				checkFields();
				reqFields.keyup(function(){checkFields()});
			},
			
			showForm: function(wrapSel){$(wrapSel).fadeIn('1000')}
		};
		
		$(document).mousemove(function(e){
			antispamObj.showForm('.feedbackForm');
			setTimeout(antispamObj.checker, 4000);  //лочит-анлочит кнопку "отправить"
			$(this).unbind(e);
		});
	};

	
	setTimeout(handler, 500);
};








//remove later
function test(){


var ValidatorPlugin = {


configure: function(configObj){
	for(var i=0, l = configObj.fields.length; i<l; i++){
		this._createField(configObj.fields[i]).observe();
	}
},





_serverValidation: function(){
	var curField = this;
	$.ajax({
		data: curField.getData(),	//{action, value}  
		success: function(data){
			if(data.total > 0){
				curField.throwError(data.errMsg);
			}
			else{
				curField.clearErrors();
			}
		}
	});
},
	
	

/*
*	конструктор объекта "поле" 
*	создаёт объект "поле" в зависимости от названия (fName) этого поля
*	@param {Object} fieldObj {type, JDOM}
*	@return {Object} с именем '_'+fName+'Field' - это нигде не используется, сделано для наглядности
*/
_createField: function(fieldObj){
	var parentOfThisObj = this, 
		fJOBJ = fieldObj.$Obj,	//jQuery объект, соответствующий текщему полю (инпуту)
		fType = fieldObj.type,	//тип текущего поля (инпута)
		
		//шаблон для валидации в браузере
		regExpTemplate = (function(){
			var reg = new RegExp();
			if(fType == 'email'){
				reg = /^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/;
			}
			else if(fType == 'website'){
				//не очень хорошая весчь, но что-то фильтрует
				reg = /(http):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
			}
			return reg;
		})();
	
	
	return this['_'+fType+'Field'] = new function(){
		/*
		*	для 'email'если длинна < 7 возвращает пустую строку
		*	для 'website длинна < 6 возвращает пустую строку			
		*	для 'phone' если длинна телефона < 5 возвращает пустую строку
		*	возвращенная "пустая строка" (проверять пока нечего) означает, что валидация происходить вообще не будет (ни на сервере ни на клиенте) 
		*/
		this.getValue = function(){
			var value = '';
			if(fType == 'email'){
				if(fJOBJ.val().length > 6){
					value = fJOBJ.val();
				}
			}
			else if(fType == 'website'){
				if(fJOBJ.val().length > 5){
					value = fJOBJ.val();
				}
			}
			else if(fType == 'phone' || fType == 'fax'){
				if(fJOBJ.val().length > 4){
					value = fJOBJ.val();
				}
			}
			return value;
		};
		
		
	
		//нужна только для асинхронного запроса (валидация на сервере)
		this.getData = function(){
			var action = '';
			if(fType == 'email'){action = 'check_email';}
			else if(fType == 'website'){action = 'check_website';}
			else if(fType == 'phone'){action = 'check_phone';}
			else if(fType == 'fax'){action = 'check_fax'}

			return {
				value: this.getValue(), 
				action: action
			};
		};		


				
		/*
		*	показывает ошибки текущего поля
		*	либо если данные ввели в неверном формате (неправильно записан email) - клиентская валидация,
		*	либо если не пройдена валидация на сервере
		*/		
		this.throwError = function(num){
			var errStr = '';
				
			if(fType == 'website'){
				if(num == 1) errStr = "Компания с таким сайтом уже зарегистрирована";
				else if(num == 2) errStr = "Неправильный адрес сайта";
				else if(num == 3) errStr = "Сайт должен быть на домене второго уровня (site.ru).<br/>Сайты на поддоменах (site.narod.ru, site.ukoz.ru и т.д.) не допускаются.";
				else if(num == 4) errStr = "Некорректный адрес сайта";
				else if(num == 5) errStr = "На портале TopTRUCK могут регистрироваться компании, сайты которых имеют тематический индекс цитирования Яндекса (тИЦ) не менее 10.";																							
				else if(num == 6) errStr = "Неправильно написан адрес сайта";																												
			}
			else if(fType == 'email'){
				if(num == null) errStr = "Компания с таким адресом электронной почты уже зарегистрирована";
				else if(num == 6) errStr = "Неправильно написан адрес почты";
			}
			else if(fType == 'phone'){
				if(num == null) errStr = "Компания с таким телефоном уже зарегистрирована";
			}	
			else if(fType == 'fax'){
				if(num == null) errStr = "Компания с таким факсом уже зарегистрирована";
			}
			
			fJOBJ.addClass('error').next('span.errText').remove().end().after('<span class="errText">'+ errStr +'</span>');
		};
		
		
		
		/*
		*	чистит ошибки если:
		*	либо слишком мало данных для валидации
		*	либо всё впорядке - данные проверены и на клиенте и на сервере
		*/
		this.clearErrors = function(){
			fJOBJ.removeClass('error').next('span.errText').remove();
		};
		
		
		
		/*
		*	клиентская проверка - правильно ли записан адрес, сайт, телефон
		*/
		this._validation = function(){
			if(this.getValue() != ''){
				//данные введены верно (превалидация пройдена)
				if(regExpTemplate.test(this.getValue())){
					parentOfThisObj._serverValidation.call(this);  //валидация на сервере
				}
				//данные введены неправильно
				else{
					this.throwError(6);
				}
			}
			//мало данных для валидации
			else{
				this.clearErrors();				
			}				
			
		};
		
		
		
		/*
		*	для телефонов: фильтрует ввод не-цифр и ограничивает вводимого номера
		*	для всех полей: следит за валидностью вводимых данных
		*/
		this.observe = function(){
			//filter for phones
			if(fType == 'phone' || fType == 'fax'){
				var controlKeysStr = '8,9,13,35,36,37,39';
				fJOBJ.keypress(function(){
					var isControlKey = controlKeysStr.match(new RegExp(event.which));
					//ввод разрешенного символа (цифра)
					if (!event.which || (49 <= event.which && event.which <= 57) || (48 == event.which && $(this).attr("value")) || isControlKey){ 
						//ограничение по количеству "разрядов" (введённых цифр)
						if(this.value.length == 7){
							event.preventDefault();
						}
						return;
					}
					else{
						event.preventDefault();
					}
				});
			}
			
			//client pre-validation
			var that = this;
			fJOBJ.keyup(that._validation.debounce(500, that));	
		}
	};
}



};




//помогает выполнить функцию с задержкой
Function.prototype.debounce = function(delay, ctx) {
    var fn = this, timer;
    return function() {
        var args = arguments, that = this;
        clearTimeout(timer);
        timer = setTimeout(function() {
            fn.apply(ctx || that, args);
        }, delay);
    };
};
 

}




