/*
 *	-----------
 *	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",
		fadeDelay: 1000,
		autoSizeAlert: "true",
		borderSizeAlert: 1		
	}	
	
	// 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").length > 0 ){ parent.children("div.error-env").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 = "input." + 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);

			// pokud je povinna polozka prazdna nebo neni zatrhnuta
			if(
				( correctEmail ) ||
				( $(this).is(":input") && ( 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; }
											 					
				}  												 					 					
																											
				// chybova hlaska
				
				var errorStyle = "";
				var errorWidth = 0;
															
				if( parent.children("div.error-env").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" style="' + errorStyle + '"><div class="error">' + objectError + '</div></div>');
					parent.find("div.error-env").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; }
		
	});

}

