var validateHandles = new Array();


function isset(  ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    
    var a=arguments; var l=a.length; var i=0;
    
    if (l==0) { 
        throw new Error('Empty isset'); 
    }
    
    while (i!=l) {
        if (typeof(a[i])=='undefined' || a[i]===null) { 
            return false; 
        } else { 
            i++; 
        }
    }
    return true;
}



function exproValidateForm(form) {
	var name = 1;
	var el = 0;
	while (name!=undefined) {
		name = $(form+" *:input").eq(el).attr("id");
		$(form+" *:input").eq(el).triggerHandler("focusout");
		$(form+" *:input").eq(el).triggerHandler("focusin");
		$(form+" *:input").eq(el).triggerHandler("change");
		$(form+" *:input").eq(el).triggerHandler("click");
		$(form+" *:input").eq(el).triggerHandler("dbliclick");
		$(form+" *:input").eq(el).triggerHandler("focus");
		$(form+" *:input").eq(el).triggerHandler("keydown");
		$(form+" *:input").eq(el).triggerHandler("keyup");
		$(form+" *:input").eq(el).triggerHandler("mouseover");
		$(form+" *:input").eq(el).triggerHandler("mouseout");
		$(form+" *:input").eq(el).triggerHandler("mousedown");
		$(form+" *:input").eq(el).triggerHandler("mousemove");
		$(form+" *:input").eq(el).triggerHandler("mouseup");
		$(form+" *:input").eq(el).triggerHandler("select");
		el++;
		if (el>99) {break;}
	}
	name = 1;
	el = 0;
	while (name!=undefined) {
		name = $(form+" .validation_text:eq("+el+")").attr("id");
		if ($(form+" .validation_text:eq("+el+")").text()!="") {
			return false;	
		}
		el++;
		if (el>99) {break;}
	}
	
	return true;
}


// Validating items
function exproValidate (parameters) {
	// Default settings
	var defaults = {
	    messages: {
			min: "Musi być większe od {0}",
	    	max: "Musi być mniejsze od {0}",
	    	minlength: "Minimum {0} znaków",
	    	maxlength: "Maximum {0} znaków",
	    	email: "Zły adres email",
	    	url: "Zły adres www",
	    	url2: "Zły adres",
	    	domain: "Zła domena",
	    	text: "Niepoprawny znak",
	    	letters: "Tylko same litery",
	    	digits: "Tylko same cyfry",
	    	html: "Użycie tagów HTML jest zabronione",
	    	dual: "Te dwa pole muszą mieć tą samą wartość",
	    	nodigits: "Pole musi zawierać cyfry",
	    	nocapitals: "Pole musi zawierać duże litery",
	    	ajax: "Błąd"
	    },
	    wrongImg: baseUrl+"/public/images/validation/incorrect.png",
		fineImg: baseUrl+"/public/images/validation/correct.png",
	    cascade: true
	}
	
	if (!$(parameters.item).length) {
		// no items to validate
		return true;
	}
	
	// Replacing default settings
	var cascade = isset(parameters.cascade) ? parameters.cascade : defaults.cascade;
	var wrongImg = isset(parameters.wrongImg) ? parameters.wrongImg : defaults.wrongImg;
	var fineImg = isset(parameters.fineImg) ? parameters.fineImg : defaults.fineImg;
	
	// Listening via given event and checking all rules
	$(parameters.item).listen(parameters.event,parameters.item,function(){
		var warningText = '';
		var form = $(parameters.item).val();
		$.each(parameters.rules, function(rule, value) {
			var text = isset(parameters.messages[rule]) ? parameters.messages[rule] : defaults.messages[rule];
			switch (rule) {
				case 'minlength':
			    	if (form.length < value) {
			    		text = text.replace(new RegExp("\\{0\\}", "g"), value);
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			     	break;
			   	case 'maxlength':
			   		if (form.length == 0) {break;}
			      	if (form.length > value) {
			      		text = text.replace(new RegExp("\\{0\\}", "g"), value);
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'min':
			      	if (parseInt(form,10) < value || isNaN(parseInt(form,10))) {
			      		text = text.replace(new RegExp("\\{0\\}", "g"), value);
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'max':
			    	if (form.length == 0) {break;}
			      	if (parseInt(form,10) > value || isNaN(parseInt(form,10))) {
			      		text = text.replace(new RegExp("\\{0\\}", "g"), value);
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'email':
			    	if (form.length == 0) {break;}
			    	// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
			      	if (! /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'url':
			    	if (form.length == 0) {break;}
			    	// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
			      	if (! /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'domain':
			    	if (form.length == 0) {break;}
			      	if (! /^[a-zA-Z0-9.-]*$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'url2':
			    	if (form.length == 0) {break;}
			    	// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
			      	if ((! /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(form)) && (! /^(mailto:)((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(form))) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	} 
			      	break;
			    case 'digits':
			    	if (form.length == 0) {break;}
			      	if (! /^\d+$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'letters':
			    	if (form.length == 0) {break;}
			      	if (! /^[a-zA-Z]+$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'lettersPL':
			    	if (form.length == 0) {break;}
			      	if (! /^[a-zA-ZąćęłńóśżźĄĆĘŁŃÓŚŻŹ]+$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'text':
			    	if (form.length == 0) {break;}
			      	if (! /^[ a-zA-Z0-9._-]+$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			    case 'html':
			    	if (form.length == 0) {break;}
			      	if ( /(<.*>)+/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	
			      	break;
			      	
			    case 'textPL':
			    	if (form.length == 0) {break;}
			    	if (! /^[ a-zA-Z0-9ąćęłńóśżźĄĆĘŁŃÓŚŻŹ._-]+$/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	break;
			    	
			    case 'nodigits':
			    	if (form.length == 0) {break;}
			    	if (! /^.*[0-9]+.*/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	break;
			    
			    case 'nocapitals':
			    	if (form.length == 0) {break;}
			    	if (! /^.*[A-ZĄĆĘŁŃÓŚŻŹ]+.*/.test(form)) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	break;
			    	
			    case 'dual':
			    	if ($(value).val() != form) {
			    		if (cascade) {
			    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
			    		} else {
			    			warningText = text;
			    		} 
			    	}
			    	break;
			    
			    
			      	
			    case 'ajax':
			    	if (form.length == 0) {break;}
			    	var sent_content = new Array (form);
					$.post(baseUrl+value, 
						sent_content,
					  	function(msg) {
					  		if (msg == "NULL" || msg == "null" || msg == "false" || msg == "0" || msg == "") {
					    		if (cascade) {
					    			warningText = (warningText.length ? warningText + '<br/>' : '') + text;
					    		} else {
					    			warningText = text;
					    		} 
					    		if (warningText.length) {
									$(parameters.warning).html(warningText);
									$(parameters.warningImg).html('');
									$(parameters.item).addClass("validation_warning");
									
									var wrong_gfx=document.createElement("img");
									$(wrong_gfx).attr({ 
										src: wrongImg
									});
									$(parameters.warningImg).append(wrong_gfx);
								} else {
									$(parameters.warning).html('');
									$(parameters.warningImg).html('');
									$(parameters.item).removeClass("validation_warning");
									
									var fine_gfx=document.createElement("img");
									$(fine_gfx).attr({ 
										src: fineImg
									});
									$(parameters.warningImg).append(fine_gfx);
								}
					    	}
					  	
					  	},
					  	"html"
					);
			      	
			    	
			      	break;
			   	default:
			      	
			      	break;
			}
			

		});
		
		// Showing results
		if (warningText.length) {
			$(parameters.warning).html(warningText);
			$(parameters.warningImg).html('');
			$(parameters.item).addClass("validation_warning");
			
			var wrong_gfx=document.createElement("img");
			$(wrong_gfx).attr({ 
				src: wrongImg
			});
			$(parameters.warningImg).append(wrong_gfx);
		} else {
			$(parameters.warning).html('');
			$(parameters.warningImg).html('');
			$(parameters.item).removeClass("validation_warning");
			
			var fine_gfx=document.createElement("img");
			$(fine_gfx).attr({ 
				src: fineImg
			});
			$(parameters.warningImg).append(fine_gfx);
		}
		
	});
}

// Clear all marks of validation
function exproClearValidation () {
	$(".validation_warning").removeClass("validation_warning");
	$(".validation_text").html('');
	$(".validation_img").html('');
}



