var ExpressProtocolForm = {
	/**
	 * pocet povolenych priloh
	 */
	allowedImagesCount: 5,
	
	/**
	 * pocet pozadovanych priloh
	 */
	requiredImagesCount: 2,
	
	/**
	 * povolene formaty priloh
	 */
	allowedImagesMimeTypes: ["jpg","jpeg","pjpeg"],
	
	/**
	 * url pro validaci zasilanych dat ajaxem
	 */
	formValidateURL: null,
	
	/**
	 * zprava, ktera se zobrazi pri zadani spatneho typu souboru
	 */
	invalidFileSelectedMessage: "",
	
	/**
	 * alias pro submit tlacitko
	 */
	submitButton: null,

	/**
	 * je kliknuto na 'zkolaudovano'?
	 */
	zkolaudovanoClicked: false,
	
	/**
	 * vyskytly se chyby?
	 */
	areErrors: false,
	
	/**
	 * chyby pri validaci/zpracovani
	 */
	errors: {},
	
	formSubmitStarted: false,
	
	/**
	 * je vybrano 'Rozestavěná stavba'?
	 */
	rozestavenaChecked: false,
	
	/**
	 * prilozene obrazky
	 */
	attachedImages: [0,0,0,0,0],
	
	typStavby: "rodinny-dum-radovy",
	
	/**
	 * vsechny policka pro nastaveni stavu rozestaveni
	 */
	statusRows: [
                 "zaklady",
                 "suteren",
                 "prvni_podlazi",
                 "dalsi_podlazi",
                 "strecha",
                 "okna_a_dvere",
                 "venkovni_upravy",
                 "pripojky"
                ],
                
	/**
	 * Prvotni inicializace
	 */
	init: function(){
		this._initSubmitButton();
		this._initForm();
	},
	
	/**
	 * Vytvori alias submit tlacitka
	 */
	_initSubmitButton: function(){
		this.submitButton = express_submitButton;
	},
	
	/**
	 * Inicializace formulare
	 */
	_initForm: function(){
		dojo.byId("tr_rozestavena_stavba").style.display="";
		dojo.byId("express_typ_stavby_dum").style.display="";
		
		var suteren_neni_checked=dojo.byId("express_suteren_status_neni").checked;
		var dalsi_podlazi_neni_checked=dojo.byId("express_suteren_status_neni").checked;
		
		dojo.byId("span_express_suteren_status_neni").innerHTML='<input	type="checkbox"'+  
					'name="express_suteren_status"'+ 
					'id="express_suteren_status_neni"'+ 
					'value="neni"'+
					(suteren_neni_checked ? 'checked="checked"' : '')+
					'onclick="ExpressProtocolForm._checkRowStatus(\'suteren\');"'+
			'/>';
		
		dojo.byId("span_express_dalsi_podlazi_status_neni").innerHTML='<input	type="checkbox"'+  
				'name="express_dalsi_podlazi_status"'+ 
				'id="express_dalsi_podlazi_status_neni"'+ 
				'value="neni"'+
				(dalsi_podlazi_neni_checked ? 'checked="checked"' : '')+
				'onclick="ExpressProtocolForm._checkRowStatus(\'dalsi_podlazi\');"'+
		'/>';
	
		
		
		this._hideUnableFinishMessage();
		this._hideZkolaudovanoHlaska();
		
		this._disableAllStatusRows();
		
		this._enableStatusRow("zaklady");
		this._enableStatusRow("venkovni_upravy");
		this._enableStatusRow("pripojky");
		/*
		this._disablePercent("zaklady");
		this._disablePercent("venkovni_upravy");
		this._disablePercent("pripojky");
		*/
		if(dojo.byId("express_zkolaudovano_ano").checked){
			this.frmZkolaudovanoClick(1);
		} else {
			this._checkRowStatus("zaklady");
		}
		this.checkSelectedTypStavby();
		this.checkIfRozestavena();
		this._checkIfEnableSubmit();
		this.formSubmitStarted=false;
		var el;
		for(var priloha=1; priloha <= this.allowedImagesCount; priloha++){
			el = dojo.byId("span_deleteAttach_"+priloha);
			if(el) {
				el.style.display="";
			}
		}
	},

	/**
	 * Vypne elementy ve formulari
	 */
	_disableFormElements: function(){
		dojo.query("#frmExpressProtocol input").attr("disabled", true);
		dojo.query("#frmExpressProtocol select").attr("disabled", true);
		dojo.query("#frmExpressProtocol textarea").attr("disabled", true);
		this.disableSubmitButton();
		var dijitElems = [
		                  "express_jmeno_klienta",
		                  "express_cislo_klienta",
		                  "express_email",
		                  "express_cislo_pracovni",
		                  "express_obec",
		                  "express_katastralni_uzemi"
		                 ];
		for(var a=0; a < dijitElems.length; a++){
			dijit.byId(dijitElems[a]).setDisabled(true);
		}
		
		for(var a = 0; a < this.statusRows.length; a++){
			dijit.byId("express_"+this.statusRows[a]+"_procenta").setDisabled(true);
		}
	},
	
	/**
	 * Zapne elementy ve formulari
	 */
	_enableFormElements: function(){
		dojo.query("#frmExpressProtocol input").attr("disabled", false);
		dojo.query("#frmExpressProtocol select").attr("disabled", false);
		dojo.query("#frmExpressProtocol textarea").attr("disabled", false);
		this.enableSubmitButton();
		var dijitElems = [
		                  "express_jmeno_klienta",
		                  "express_cislo_klienta",
		                  "express_email",
		                  "express_cislo_pracovni",
		                  "express_obec",
		                  "express_katastralni_uzemi"
		                 ];
		for(var a=0; a < dijitElems.length; a++){
			dijit.byId(dijitElems[a]).setDisabled(false);
		}
		
		for(var a = 0; a < this.statusRows.length; a++){
			dijit.byId("express_"+this.statusRows[a]+"_procenta").setDisabled(false);
		}
	},
	
	/**
	 * vypne vsechny inputy v radku s rozestavenosti
	 */
	_disableStatusRow: function(which){
		dojo.query("#tr_express_"+which+" input").attr("disabled", true);
		this._disablePercent(which);
	},
	
	/**
	 * zapne vsechny inputy v radku s rozestavenosti
	 */
	_enableStatusRow: function(which){
		dojo.query("#tr_express_"+which+" input").attr("disabled", false);
		this._enablePercent(which);
	},
	
	/**
	 * vypne input s procenty rozestavenosti
	 */
	_disablePercent: function(which){
		dijit.byId("express_"+which+"_procenta").setDisabled(true);
	},
	
	/**
	 * zapne input s procenty rozestavenosti
	 */
	_enablePercent: function(which){
		dijit.byId("express_"+which+"_procenta").setDisabled(false);
	},
	
	/**
	 * nastavi procenta rozestavenosti
	 */
	_setPercent: function(which, percent){
		dijit.byId("express_"+which+"_procenta").setValue(percent);
	},
	
	/**
	 * vrati procenta rozestavenosti
	 */
	_getPercent: function(which){
		var elem = dijit.byId("express_"+which+"_procenta");
		if(!elem.isValid() || isNaN(parseInt(elem.getValue()))) return 0;
		return parseInt(elem.getValue());
	},
	
	/**
	 * nastavi stav rozestavenosti (klikne na radio button)
	 */
	_setStatus: function(which, status){
		if(which == "suteren" || which == "dalsi_podlazi"){
			if(status != "neni"){
				dojo.byId("express_"+which+"_status_neni").checked=false;
				this._neniUnchecked(which);
			}
		}
		dojo.byId("express_"+which+"_status_"+status).checked=true;
		if(status == "neni") dojo.byId("express_"+which+"_status_nezahajeno").checked=true;
		this._checkRowStatus(which, 1);
	},
	
	/**
	 * vraci stav rozestavenosti
	 */
	_getStatus: function(which){
		var states = ["neni", "nezahajeno", "rozestaveno", "hotovo"];
		var status="";
		var elem;
		for(var a=0; a < states.length; a++){
			elem=dojo.byId("express_"+which+"_status_"+states[a]);
			if(elem && elem.checked){
				status=states[a];
				break;
			}
		}
		return status;
	},
	
	/**
	 * povoli input boxy v dalsim radku rozestavenosti (a kaskadovite dalsich, pokud je to mozne)
	 */
	_enableNextRow: function(which){
		var enableNext = false;
		for(var a = 0; a < this.statusRows.length; a++){
			if(enableNext){
				if(this.statusRows[a] == "venkovni_upravy" ||
                   this.statusRows[a] == "pripojky") break;
				this._enableStatusRow(this.statusRows[a]);
				this._checkRowStatus(this.statusRows[a]);
				break;
			}
			enableNext = (which == this.statusRows[a]);
		}
	},
	
	/**
	 * vypne input boxy v dalsim radku rozestavenosti (a kaskadovite dalsich, pokud je to mozne)
	 */
	_disableNextRow: function(which){
		var disableNext = false;
		for(var a = 0; a < this.statusRows.length; a++){
			if(disableNext){
				if(this.statusRows[a] == "venkovni_upravy" ||
		           this.statusRows[a] == "pripojky") break;
				this._setStatus(this.statusRows[a], "nezahajeno");
				this._disableStatusRow(this.statusRows[a]);
				break;
			}
			disableNext = (which == this.statusRows[a]);
		}
	},
	
	_neniChecked: function(which){
		dojo.byId("express_"+which+"_status_nezahajeno").disabled=true;
		dojo.byId("express_"+which+"_status_rozestaveno").disabled=true;
		dojo.byId("express_"+which+"_status_hotovo").disabled=true;
		this._disablePercent(which);
	},
	
	_neniUnchecked: function(which){
		dojo.byId("express_"+which+"_status_nezahajeno").disabled=false;
		dojo.byId("express_"+which+"_status_rozestaveno").disabled=false;
		dojo.byId("express_"+which+"_status_hotovo").disabled=false;
		this._enablePercent(which);
	},
	
	/**
	 * Zkontroluje radek stavu rozestavenosti a postara se o nasledujici akce
	 */
	_checkRowStatus: function(which, isOnclick){
		if(this.zkolaudovanoClicked && which != "venkovni_upravy") return;
		isOnclick = typeof(isOnclick) != "undefined" && isOnclick;
		var percent = this._getPercent(which);
		var status  = this._getStatus(which);
		if(which == "suteren" || which == "dalsi_podlazi"){
			if(status == "neni"){
				this._neniChecked(which);
			} else {
				this._neniUnchecked(which);
			}
		}
		switch(status){
			case "hotovo":
				this._setPercent(which, 100);
				this._disablePercent(which);
				this._enableNextRow(which);
			break;
			case "nezahajeno":
				this._setPercent(which, 0);
				this._disablePercent(which);
				this._disableNextRow(which);
			break;
			case "rozestaveno":
				if(isOnclick){
					this._enablePercent(which);
					this._disableNextRow(which);
				} else {
					if(percent == 0 ){
						this._setStatus(which, "nezahajeno")
					} else if(percent == 100){
						this._setStatus(which, "hotovo")
					} else {
						this._enablePercent(which);
						this._disableNextRow(which);
					}
				}
			break;
			case "neni":
				this._setPercent(which, 0);
				this._enableNextRow(which);
			break;
			default:
				this._setStatus(which, "nezahajeno");
			break;
		}
		this.checkIfRozestavena();
		this._checkIfEnableSubmit();
	},
	
	/**
	 * Vypne vsechny radky stavu rozestavenosti
	 */
	_disableAllStatusRows: function(){
		for(var a = 0; a < this.statusRows.length; a++){
			this._disableStatusRow(this.statusRows[a]);
		}
	},
	
	/**
	 * Zapne vsechny radky stavu rozestavenosti
	 */
	_enableAllStatusRows: function(){
		for(var a = 0; a < this.statusRows.length; a++){
			this._enableStatusRow(this.statusRows[a]);
		}
	},
	
	/**
	 * Zobrazi zpravu, ze neni mozne cerpat uver
	 */
	_showUnableFinishMessage: function(){
		setTimeout('dojo.byId("trStavNeumoznujeCerpani").style.display="";', 1000);
	},
	
	/**
	 * Schova zpravu, ze neni mozne cerpat uver
	 */
	_hideUnableFinishMessage: function(){
		setTimeout('dojo.byId("trStavNeumoznujeCerpani").style.display="none";', 1000);
	},
	
	_showZkolaudovanoHlaska: function(){
		setTimeout('dojo.byId("divZkolaudovanoHlaska").style.display="";', 1000);
	},
	
	_hideZkolaudovanoHlaska: function(){
		setTimeout('dojo.byId("divZkolaudovanoHlaska").style.display="none";', 1000);
	},
	
	/**
	 * Zkontroluje a povoli/zakaze submit tlacitko
	 */
	_checkIfEnableSubmit: function(){
		this.disableSubmitButton();
		if(this.rozestavenaChecked){
			this.enableSubmitButton();
		}
	},

	/**
	 * Zkontroluje zadana data pres AJAX
	 */	
	checkFormRemote: function(){
		this.showCheckingDialog();
		this.lockCheckingDialog();
		var data = {
			"express_typ_stavby": ExpressProtocolForm.getTypStavby(),
			"express_jmeno_klienta": dijit.byId("express_jmeno_klienta").getValue(),
			"express_cislo_klienta": dijit.byId("express_cislo_klienta").getDisplayedValue(),
			"express_email": dijit.byId("express_email").getValue(),
			"express_cislo_pracovni": dijit.byId("express_cislo_pracovni").getValue(),
			"express_obec": dijit.byId("express_obec").getValue(),
			"express_katastralni_uzemi": dijit.byId("express_katastralni_uzemi").getValue(),
			"express_termin_zahajeni": dijit.byId("express_termin_zahajeni").getValue(),
			"express_termin_dokonceni": dijit.byId("express_termin_dokonceni").getValue(),
			"express_zkolaudovano": dojo.byId("express_zkolaudovano_ano").checked ? 1 : 0
		};

		
		var stat;
		for(var i=0; i < this.statusRows.length; i++){
			stat=this.statusRows[i];
			data["express_"+stat+"_status"]=this._getStatus(stat);
			data["express_"+stat+"_procenta"]=dijit.byId("express_"+stat+"_procenta").getValue();
		}
		
		for(var p=1; p <= this.requiredImagesCount; p++){
			data["express_nazev_prilohy_"+p] = dojo.byId("express_priloha_"+p).value;
		}
		
		mf_main.AJAXOperation("HBExpressProtocol", 
							  "checkformdata", 
							  data,
							  function(response){
									ExpressProtocolForm.unlockCheckingDialog();
									ExpressProtocolForm.hideCheckingDialog();
									if(response.data.areErrors){
										var div=dojo.byId("express_dlgErrors_check_errors");
										var html="";
										for(var i in response.data){
											if(i == "areErrors") continue;
											html += "<span style='color: red;'>"+response.data[i] + "</span><br/>";
										}
										div.innerHTML = html;
										setTimeout("ExpressProtocolForm.showCheckErrorDialog();", 500);
									} else {
										if(!ExpressProtocolForm.formSubmitStarted){
											setTimeout("ExpressProtocolForm.showSendingDialog();  ExpressProtocolForm.lockSendingDialog(); dojo.byId('frmExpressProtocol').submit();", 500);
										}
										ExpressProtocolForm.formSubmitStarted=true;
									}
							  },
							  "express_submitButton");
	},
	
	/**
	 * onClick event submit tlacitka
	 */
	submitButtonClick: function(){
		ExpressProtocolForm.checkFormRemote();
	},
	
	/**
	 * Kontrola koncovky vlozeneho souboru, jestli je mezi povolenymi
	 */
	checkImageFormat: function(which, showMessage){
		if(typeof(showMessage) == "undefined") showMessage=true;
		var fileInput = dojo.byId("express_priloha_"+which);
		var fileName = php.strtolower(fileInput.value);
		if(!fileName.length) return;
		var parts=php.explode(".", fileName);
		var ext = parts[parts.length-1];
		if(!php.in_array(ext, this.allowedImagesMimeTypes)){
			if(!showMessage) return false;
			alert(ExpressProtocolForm.invalidFileSelectedMessage);
			dojo.query("#span_priloha_"+which+"_container").attr("innerHTML",
				'<input type="file" '+ 
				'name="express_priloha_'+which+'" '+
				'id="express_priloha_'+which+'" '+ 
				'onchange="ExpressProtocolForm.checkImageFormat('+which+');" '+
				'/>');
		}
		if(!showMessage) return true;
		this._checkIfEnableSubmit();
	},
	
	/**
	 * Vypne submit tlacitko
	 */
	disableSubmitButton: function(){
		this.submitButton.setDisabled(true);
	},
	
	/**
	 * Zapne submit tlacitko
	 */
	enableSubmitButton: function(){
		this.submitButton.setDisabled(false);
	},
	
	
	/**
	 * Reakce na kliknuti na "Zkolaudovano" - vsechny status radky prepne na HOTOVO (krome venkovnich uprav)
	 */
	frmZkolaudovanoClick: function(value){
		var which;
		value=value == "1" || value == 1 ? 1 : 0;
		if(value){
			for(var a = 0; a < this.statusRows.length; a++){
				which=this.statusRows[a];
				if(which == "venkovni_upravy") continue;
				dijit.byId("express_"+which+"_procenta").setValue(100);
				dojo.byId("express_"+which+"_status_hotovo").checked=true;
				dojo.byId("express_"+which+"_status_hotovo").disabled=false;
				if(dojo.byId("express_"+which+"_status_neni")){
					dojo.byId("express_"+which+"_status_neni").disabled=true;
				}
				dojo.byId("express_"+which+"_status_nezahajeno").disabled=true;
				dojo.byId("express_"+which+"_status_rozestaveno").disabled=true;
			}
			this.zkolaudovanoClicked=value;
			dojo.byId("express_rozestavena_ano").click();
			this._showZkolaudovanoHlaska();
		} else {
			if(this.zkolaudovanoClicked){
				for(var a = 0; a < this.statusRows.length; a++){
					which=this.statusRows[a];
					if(which == "venkovni_upravy") continue;
					if(dojo.byId("express_"+which+"_status_neni")){
						dojo.byId("express_"+which+"_status_neni").disabled=false;
					}
					dojo.byId("express_"+which+"_status_nezahajeno").disabled=false;
					dojo.byId("express_"+which+"_status_rozestaveno").disabled=false;
				}
				this.zkolaudovanoClicked=value;
				this._checkRowStatus("zaklady");
			}
			this._hideZkolaudovanoHlaska();
		}
		
		this.checkIfRozestavena();
		this._checkIfEnableSubmit();
	},
	
	/**
	 * reakce na kliknuti na "Rozestavěná stavba"
	 */
	rozestavenaClick: function(){
		if(this.rozestavenaChecked){
			this._hideUnableFinishMessage();
			dojo.byId("express_rozestavena_ano").checked=true;
			dojo.byId("express_rozestavena_ne").checked=false;
		} else {
			this._showUnableFinishMessage();
			dojo.byId("express_rozestavena_ano").checked=false;
			dojo.byId("express_rozestavena_ne").checked=true;
		}
	},
	
	/**
	 * Otestuje, jestli se ma zaskrtnout "Rozestavěná stavba" 
	 */
	checkIfRozestavena: function(){
		var typNemovitosti = this.getTypStavby(); //dojo.byId("express_typ_stavby").value;
		var strecha_hotova = dojo.byId("express_strecha_status_hotovo").checked != false;
		var prvni_podlazi = parseInt(dojo.byId("express_prvni_podlazi_procenta").value);
		if(isNaN(prvni_podlazi)) prvni_podlazi=0;
		this.rozestavenaChecked = (typNemovitosti == "byt" && strecha_hotova) ||
								  (typNemovitosti != "byt" && prvni_podlazi >= 50) ||
								  dojo.byId("express_zkolaudovano_ano").checked;
		this.rozestavenaClick();
	},
	
	/* ZOBRAZOVANI A SCHOVAVANI DIALOGU */
	
	showCheckingDialog: function(){
		dijit.byId("express_dlgChecking").show();
	},
	
	hideCheckingDialog: function(){
		dijit.byId("express_dlgChecking").hide();
	},
	
	lockCheckingDialog: function(){
		dijit.byId("express_dlgChecking")._alreadyInitialized=false;
	},
	
	unlockCheckingDialog: function(){
		dijit.byId("express_dlgChecking")._alreadyInitialized=true;
	},
	
	showSendingDialog: function(){
		dijit.byId("express_dlgSending").show();
	},

	hideSendingDialog: function(){
		dijit.byId("express_dlgSending").hide();
	},
	
	lockSendingDialog: function(){
		dijit.byId("express_dlgSending")._alreadyInitialized=false;
	},
	
	unlockSendingDialog: function(){
		dijit.byId("express_dlgSending")._alreadyInitialized=true;
	},
	
	showCheckErrorDialog: function(){
		dijit.byId("express_dlgErrors_check").show();
	},
	
	hideCheckErrorDialog: function(){
		dijit.byId("express_dlgErrors_check").hide();
	},
	
	showSendErrorDialog: function(){
		dijit.byId("express_dlgErrors_send").show();
	},
	
	hideSendErrorDialog: function(){
		dijit.byId("express_dlgErrors_send").hide();
	},
	
	/**
	 * ajaxove mazani prilohy
	 */	
	removeAttachment: function(which){
		var data = {"which": which};
		mf_main.AJAXOperation("HBExpressProtocol", 
				  "removeattachment", 
				  data,
				  function(response){
				  	if(response.data.OK == "OK"){
				  		ExpressProtocolForm.attachedImages[(which-1)]=0;
				  		dojo.byId("div_priloha_preview_"+which).style.display="none";
				  	}
				  },
				  "deleteAttach_"+which);
	},
	
	changeTypStavby: function(typ){
		this.typStavby = typ;
		switch(typ){
			case "bytovy-dum":
			case "byt":
				dojo.byId("express_typ_stavby_dum").checked=false;
				dojo.byId("express_typ_stavby_dum_radovy").disabled=true;
				dojo.byId("express_typ_stavby_dum_volne_stojici").disabled=true;
				dojo.byId("express_typ_stavby_dum_radovy").checked=false;
				dojo.byId("express_typ_stavby_dum_volne_stojici").checked=false;
			break;
			case "rodinny-dum-volne-stojici":
			case "rodinny-dum-radovy":
				dojo.byId("express_typ_stavby_dum").checked=true;
				dojo.byId("express_typ_stavby_dum_radovy").disabled=false;
				dojo.byId("express_typ_stavby_dum_volne_stojici").disabled=false;
				if(typ=="rodinny-dum-volne-stojici"){
					dojo.byId("express_typ_stavby_dum_volne_stojici").checked=true;
					dojo.byId("express_typ_stavby_dum_radovy").checked=false;
				} else {
					dojo.byId("express_typ_stavby_dum_volne_stojici").checked=false;
					dojo.byId("express_typ_stavby_dum_radovy").checked=true;
				}
			default:
			break;
		}
		this.checkIfRozestavena();
		this._checkIfEnableSubmit();
	},
	
	checkSelectedTypStavby: function(){
		if(dojo.byId("express_typ_stavby_byt").checked || dojo.byId("express_typ_stavby_bytovy_dum").checked){
			dojo.byId("express_typ_stavby_dum").checked=false;
			dojo.byId("express_typ_stavby_dum_radovy").disabled=true;
			dojo.byId("express_typ_stavby_dum_volne_stojici").disabled=true;
		} else {
			dojo.byId("express_typ_stavby_dum").checked=true;
			dojo.byId("express_typ_stavby_dum_radovy").disabled=false;
			dojo.byId("express_typ_stavby_dum_volne_stojici").disabled=false;
		}
	},
	
	getTypStavby: function(){
		return this.typStavby;
	}
};

