/*
 *	-----------
 *	formValidator v1.53
 *	-----------
 *  zalozeno na jQuery.
 *  Pro NetDirect s.r.o. vytvoril Tomas Musiol (tomas.musiol@netdirect.cz).
 *
 *	Pravidla:
 *	---------
 *	Povinne polozky musi mit nastavenou tridu .required
 *	a musi mit nastaveny svuj label
 *	 
 *	<label for="name">Jmeno</label>  
 *	<input type="text" class="required" id="name" />
 *	
 *	validace formulare probiha na onclick submit tlacitka
 *	<input type="submit" class="submiter" />  
 *
 */

jQuery.fn.ndFormValidator = function(ndFormOptions){

	var settings = {   	

		lang: "cz",
		checkAll: "true",
		submitClass: "submiter",
		selectBoxDefaultText: "Vyberte",
		checkEmailClass: "checkEmail",
		checkICClass: "checkIC",
		fadeDelay: 1000,
		autoSizeAlert: "false",
		borderSizeAlert: 1,
		errorToAlert: "true"
				
	}	

	// prebiti nastavovacich promennych
	var opts = $.extend(settings, ndFormOptions);  

	// objekt na kterem byla udalost volana
	var callObject = $(this);

	// funkce pro smazani chybove hlasky
	function removeError( object ){
		var parent = object.parent();
		if( parent.children("div.error-env-auto").length > 0 ){ parent.children("div.error-env-auto").remove(); }
	}
	
	// zmena v povinnem policku a pokud ten obsahuje chybovou hlasku tak ji odstran
	$(callObject).find(".required:input").keydown( function(){ removeError( $(this) ); } );
	$(callObject).find(".required:checkbox").click( function(){ removeError( $(this) ); });
	$(callObject).find("select.required").change( function(){ removeError( $(this) ); });

	// kliknuti na tlacitko pro odeslani formulare
	var submiter = "." + opts.submitClass;
	$(this).find(submiter).click( function(e){							

		var status = true;
		var firstError = -1;

		// kliknuti na odeslani formulare
		$(callObject).find(".required").each( function(i){


			var v = $(this).val();
			var correctEmail =  $(this).hasClass( opts.checkEmailClass ) && (v == "" || v.indexOf('@')==-1 || v.indexOf('.')==-1);
			var correctIC = $(this).hasClass( opts.checkICClass );

			// pokud je povinna polozka prazdna nebo neni zatrhnuta
			if(
				( correctEmail ) ||
				( $(this).is(":input") && ( (v == '') || (v == ' ') ) ) ||
				( $(this).is(":checkbox") && $(this).is(":not(:checked)") ) ||
				( $(this).is("select") && ( v == opts.selectBoxDefaultText ) )

				){

				// ulozeni hodnoty indexu prvniho vyskytu chyby
				if( firstError == -1 ){ firstError = i; }

				// vyhledavani objektu
				var parent =  $(this).parent();

				// ziskame id prochazeneho objektu
				var objectId = $(this).attr("id");
				// zjisteni o ktery label se jedna
				var objectLabelId = "label[for=" + objectId + "]";
				// vytazeni textove informace z labelu 
				var objectLabel = $(objectLabelId).text();

				// sestaveni chybove hlasky pro ruzne jazyky
				var objectError = '';

				switch( opts.lang ){  

					case "cz":
						if( correctEmail ){ objectError = 'Položka <strong>' + objectLabel + '</strong> není ve správném tvaru.'; break; }
						else{ objectError = 'Položka <strong>' + objectLabel + '</strong> je povinná.'; break; }

					case "en":
						if( correctEmail ){ objectError = 'Field <strong>' + objectLabel + '</strong> has wrong type.'; break; }
						else{ objectError = 'Field <strong>' + objectLabel + '</strong> is required.'; break; }
						
    				case "pl":
						if( correctEmail ){ objectError = 'Pozycja <strong>' + objectLabel + '</strong> ma zły format.'; break; }
                        else{ objectError = 'Pozycja <strong>' + objectLabel + '</strong> est obowiązkowe.'; break; }						

				}  												 					 					

				// chybova hlaska

				var errorStyle = "";
				var errorWidth = 0;

				if( parent.children("div.error-env-auto").length == 0 ){
					if( opts.autoSizeAlert == "true" ){ 

						if( $(this).attr("offsetWidth") < 100 ){ errorWidth = 100; }
						else{ errorWidth = $(this).attr("offsetWidth"); }
						errorStyle = "width: " + (errorWidth - (opts.borderSizeAlert * 2)) + "px;" 
					}
					else{ errorStyle = "width: 100%"; }

					parent.append('<div class="error-env-auto" style="' + errorStyle + '"><div class="error">' + objectError + '</div></div>');
					parent.find("div.error-env-auto").fadeIn( opts.fadeDelay );
				}					

				// status pro odesilani formulare
				status = false;												

				if( opts.checkAll != "true" ){
					$(this).focus();					 
					return false;				
				}

			}
		});

		// pokud se maji kontrolovat vsechny polozky nastav se na prvni vyskyt chyby 
		if( opts.checkAll == "true" ){ $(".required").eq(firstError).focus(); }

		// osetreni odeslani formulare		
		if( status == false ){ return false; }
		else{ return true; }

	});

}

