var Dom = YAHOO.util.Dom;
var Anim = YAHOO.util.Anim;
var Evnt = YAHOO.util.Event;
var Json = YAHOO.lang.JSON;

 


   /**
	* CSS classa pro alert na prazdny povinny input
	*
	*/
	var emptyInputClass = "empty";
	
   /**
	* CSS classa pro alert na spatne vyplneny input 
	*
	*/
	var badInputClass = "bad";
	
   /**
	* url zpracovavajiciho ajaxovyho serveru 
	*
	*/
	var ajaxServerUrl = "/_system/forms_ajax.php";

	var errorMessageEmpty = "";
	var errorMessageCustom = "";

	var regEmail	= new RegExp('^([_a-zA-Z0-9\\.\\-]+)@([_a-zA-Z0-9\\.\\-]+)\\.([a-zA-Z]{2,4})$','i');
	var regTel		= new RegExp('^[ 0-9\.\+\/\-]{8,}$','i');



   /**
	* Funkce vrací boolean na validaci vlozeneho elementu 
	* a obarvuje prislusny element dle chyby
	*/
	
   	function validate(element){
	
		// povinne inputy 
		var returnValid = true;
		
		if (Dom.hasClass(element, 'povinny') && element.value =="" ){
			errorMessageEmpty = VALID_EMPTY;
			Dom.addClass(element, emptyInputClass);
			returnValid = false;
		}
		
		//CUSTOM VALIDACE.... 
		
		//telefon	
		if (element.name.indexOf('telefon')===0 && regTel.test(element.value)==false && element.value !="" ){
			errorMessageCustom += VALID_WRONG_PHONE;
			Dom.addClass(element, badInputClass);					   
			returnValid = false;
		} 
		
		// email
		if (element.name.indexOf('email')===0 && regEmail.test(element.value)==false && element.value !="" ){
			errorMessageCustom += VALID_WRONG_EMAIL;
			Dom.addClass(element, badInputClass);
			returnValid = false;
		}
			
		return returnValid;
	};

    /**
	 * Odeslani dat na ajaxovy server
	 *
	 */
	
	function sendForm(post){
		
		var jPostdata = '&data='+Json.stringify(post);
		
		var handleSuccess = function(oResponse) {
			if (oResponse.responseText.indexOf('OK:')===0){
				alert(VALID_OK);
				window.location="/";

			} else {
				alert(VALID_ERROR)	
			}
		}
		
		var handleFailure = function(oResponse) {
			alert(VALID_ERROR)
		}
		
		var callback =
		
		{
			success: handleSuccess,
			failure: handleFailure,
			timeout: 10000
		}
		
		YAHOO.util.Connect.asyncRequest('POST', ajaxServerUrl, callback, jPostdata);
		
	}
	
	/**
	 *  Kdyz vsechno klapne tak funkce vraci objekt 
	 *	validních formularovych dat
	 *
	 */
	function sendValidForm(e, form){
		Evnt.stopEvent(e);
		
		//clear inputu 
		Dom.removeClass(Dom.getElementsByClassName(emptyInputClass), emptyInputClass);
		Dom.removeClass(Dom.getElementsByClassName(badInputClass), badInputClass);
		
		// postdata
		var post = {};
		
		// custom validace zda je vybrany soubor skutecne prilozeny
		if (Dom.get("send_file")){
			var fileSelected = Dom.get("send_file").value;
			if (fileSelected!=""){
				var box = Dom.get("uploadLoadingBoxHolder");
				if (box.innerHTML.indexOf(fileSelected)==(-1)){
					if (!confirm(VALID_FILE_NOT_ATTACHED)){
						return false;	
					}
				}
			}
		}
		
		// projdu formular
		for (var i=0; i<form.length; i++){
			
			// multiple polozky
			if ((form[form[i].name].length) && (form[i].name.indexOf('[]')>0)){
			
				for (var x=0; x<form[form[i].name].length; x++){
					// Jeli to checkbox, musi se zapsat jen ten zaskrtnuty
					if (form[form[i].name][x].type == "checkbox" && form[form[i].name][x].checked){
						
						if (!post[form[i].name.replace("[]","")]) {
							post[form[i].name.replace("[]","")] = new Array();
						}
						if (validate(form[i])){
							post[form[i].name.replace("[]","")][x] = form[form[i].name][x].value;
						}
					
					// jeli to cokoli jineho nemusi to mi dalsi priznak	
					} else if (form[form[i].name][x].type != "checkbox") {
						
						if (!post[form[i].name.replace("[]","")]) {
							post[form[i].name.replace("[]","")] = new Array();
						}
						if (validate(form[i])){
							post[form[i].name.replace("[]","")][x] = form[form[i].name][x].value;
						}
					}
				}
				
			// pokud jsou to raiobuttony tj maji stejny name ale nemaji []			
			} else if ((form[form[i].name].length) && (form[i].name.indexOf('[]')===-1)){
				
				for (var x=0; x<form[form[i].name].length; x++){

					//je to zaskrtnuty radio
					if (form[form[i].name][x].type == "radio" && form[form[i].name][x].checked){
						if (validate(form[i])){
							post[form[i].name] = form[form[i].name][x].value;
						}
					};
				}
			//single polozka		
			} else {
				if (validate(form[i])){
					post[form[i].name] = form[i].value;
				}

			
			}
		}
		
		// resume
		var msg = "";
			msg = errorMessageEmpty+errorMessageCustom;
		if (msg != ""){
			alert(msg);
			errorMessageCustom = "";
			errorMessageEmpty = "";			
			
		} else {
			sendForm(post);
		}
	};

	
	function sendValidFormInit() {
	
		var form_submiters = Dom.getElementsByClassName('form_submit');
		for ( var i = 0; i<form_submiters.length; i++){
			var form_submiter = form_submiters[i];
			Evnt.addListener(form_submiter, 'click', sendValidForm, Dom.getAncestorByTagName(form_submiter, 'form'));	
		}
	}
	
	Evnt.onDOMReady(sendValidFormInit);
	
	
	
	
