	/**
	 * Funkcia, ktorá sa zavolá po dokončení uploadu
	 */
	var doAfterUploadFinish;
	
	/**
	 * Id tlačítka, ktoré sa používa na checkovanie statusu uploadu
	 */
	var checkStatusButtonId;
	
	/**
	 * Názov súboru, ktorý sa ide uploadovať
	 */
	var fileLabel;
	
	/**
	 * Bookmark tinymce editora
	 */
	var tinyMceBookMark;

	/**
	 * Id editačného formuláru
	 */
    var formId;
   
    /**
	 * Boolean hovorí o tom, či práve teraz prebieha ajaxRequest
	 */
   	var ajaxRequestInProgress;
   	
   	/**
	 * Kam sa bude ukladať obrázok po vložení z uploadFormu
	 */
   	var insertImageInto;
    
    /**
	 * Nastaví elementu zadanému v argumente funkciu, ktorá sa zavolá pri akcii,
	 * ktorá sa definuje vo vnútri. V tomto prípade je to submit
	 */
    function setValidateButtonAction(buttonId) {
		// Event.observe(buttonId, 'click', validate, true);
    }
    
    /**
	 * Funkcia, ktorá sa zavolá, keď sa vráti ajax response
	 */
    var doAfterAjaxResponse = function(){
    }
    
 	/**
	 * Pri zmene formuláru vykoná request pre validáciu
	 */   
    function validate(buttonId) {
    	try{
    		setTinyMCEeditor(textAreaId);
    	}
    	catch(e){
    		// nič, textAreaId len nie je definované
    	}
    		
    	var formElement = getFormOfElement(document.getElementById(buttonId));
    	
    	var divToReloadId = getDivToReloadId(formElement);
    	 	
        var method = formElement.method;
        var url = formElement.action;
        
        var elementsToSerialize = new Array();
        var serializedElements;

        var inputs = Form.getElements(formElement);
        for(i=0;i<inputs.length;i++){
        	if((inputs[i].type!='submit' || inputs[i].id==buttonId)){
        		elementsToSerialize[elementsToSerialize.length] = inputs[i];
        	}
        }
        serializedElements = Form.serializeElements(elementsToSerialize, false);

        ajaxRequestStarted();
        
        document.getElementById(buttonId).disabled = true;
        
        var myAjax = new Ajax.Request(
          		url, 
           		{
                method: method,
                parameters: serializedElements,
                onSuccess: function(transport) {
                	try{
                	var jsonResponse = transport.responseText.evalJSON();
                	if(jsonResponse.responseMessage == 'validation_ok'){
                		formElement.action=jsonResponse.formAction;
                		document.getElementById('_flowExecutionKey').value=jsonResponse.flowExecutionKey;
                		
                		var newButton = document.createElement('input');
  						newButton.setAttribute('id','_eventId_save');
  						newButton.setAttribute('name','_eventId_save');
  						newButton.setAttribute('type','hidden');
  						newButton.setAttribute('value',' ');
  						formElement.appendChild(newButton);

						ajaxRequestStopped();
   						formElement.submit();
   					}
   					else if(jsonResponse.responseMessage == 'ajaxContentReturned'){
						try{
							$(divToReloadId).innerHTML = jsonResponse.response;
						}
   						catch(e){
   							// nič, nebol definovaný divToReloadId
   						}
   						
   						try{
   							initTinyMCE();
   						}
   						catch(e){
   							// nič, len to znamená, že tinyMCE nie je na stránke
   						}
   						
   						try{
							// funkcia, ktorá sa zavolá ak bola validácia
							// neúspešná
							validationFailed();
						}
   						catch(e){
   							// nič, nebola definovaná funkcia
   						}
   						
   						ajaxRequestStopped();
   						doAfterAjaxResponse();
   					}
   					}
   					catch(e){
   						//alert(e);
   						window.location = errorPageUrl;
   					}
  				},
                onFailure: errFunc,
                evalScripts: true
        		}
        );
		return false;
    }
    
    /**
	 * Funkcia vráti id divu, ktorý sa bude reloadovať počas ajaxovského
	 * requestu. Tento div je uložený vo formulári, ktorý zadávam ako argument.
	 */
    function getDivToReloadId(formElement){
    	var inputs = Form.getElements(formElement);
   
        for(i=0;i<inputs.length;i++){
        	if(inputs[i] != null && inputs[i].id=='divToReloadId'){
        		return inputs[i].value;
        	}
        }
    }
    
   	/**
	 * Nastaví funkciu ajaxRequest pre formulár na akciu submit. Ako argument
	 * prijíma tlačítko
	 */
    function observeAjaxRequest(button){    	
		var formElement = getFormOfElement(button);
		
    	formElement.onsubmit = function(event){
    			return ajaxRequest(button.name);
   	 	}
    }
    
    /**
	 * Nastaví funkciu ajaxRequest pre formulár na akciu submit. Ako argument
	 * prijíma id tlačítka a formulár
	 */
    function observeAjaxRequestWithButtonId(button, buttonId){    	
		var formElement = getFormOfElement(button);
		
    	formElement.onsubmit = function(event){
    			return ajaxRequest(buttonId);
   	 	}
    }

    
    function getFormOfElement(element){
    	//skúsim nájsť formulár takto, ak to nepôjde, skúsim to inak
    	if(element.form!=null){
    		return element.form;
    	}
    	if(element.parentNode == null){
    		return null;
    	}
    	// hack na zistenie, či je daný element formulár
    	if(element.parentNode.id != '' && eval('document.' + element.parentNode.id + '!=null')){
    		return element.parentNode;
    	}
    	return getFormOfElement(element.parentNode);
    }
    
	/**
	 * Vykoná ajax request a response nastaví ako body(div s idcontent)
	 */   
    function ajaxRequest(buttonId, reloadFlowId) {
    	if(document.getElementById('_flowExecutionKey') != null){
    		var oldFlowId = document.getElementById('_flowExecutionKey').value;
    	}

    	var formElement = getFormOfElement(document.getElementById(buttonId));
        var method = formElement.method;	
        var url = formElement.action;
        var divToReloadId = getDivToReloadId(formElement);

        var elementsToSerialize = new Array();
        var serializedElements;

        var inputs = Form.getElements(formElement);
        for(i=0;i<inputs.length;i++){
        	if((inputs[i].type!='submit' || inputs[i].id==buttonId)){
        		elementsToSerialize[elementsToSerialize.length] = inputs[i];
        	}
        }

        serializedElements = Form.serializeElements(elementsToSerialize, false);
		ajaxRequestStarted();

		document.getElementById(buttonId).disabled = true;
    	
		var myAjax = new Ajax.Request(
          		url, 
           		{
                method: method,
                parameters: serializedElements,
                onSuccess: function(transport) {
                	try{
                	
                	var jsonResponse = transport.responseText.evalJSON();
                	if(divToReloadId!=null && divToReloadId!=''){
   						$(divToReloadId).innerHTML = jsonResponse.response;
   						
   						if(!reloadFlowId){
   							document.getElementById('_flowExecutionKey').value = oldFlowId;
   						}
   						//alert(oldFlowId);
   						//alert(document.getElementById('_flowExecutionKey').value);
   						formElement = document.getElementById(formElement.id);
   						formElement.action = url;
   						ajaxRequestStopped();
   					}
   					doAfterAjaxResponse();
   					}
   					catch(e){
   						//alert('error is:' + e);
   						window.location = errorPageUrl;
   					}
  				},
                onFailure: errFunc,
                evalScripts: true
        		}
        );
        formElement.onsubmit = '';
		return false;
    }
    

	/**
	 * Vypíše error kód, v prípade chyby servra
	 */
	var errFunc = function(t) {
    	alert('Error ' + t.status + ' -- ' + t.statusText);
	}
	
	/**
	 * Nastaví hodnotu tinyMce editora do textarea, ktorej prislúcha
	 */
	function setTinyMCEeditor(textAreaId){
		try{
			tinyMCE.triggerSave(true,true);
			var mytextarea = tinyMCE.get(textAreaId).getContent();
			document.getElementById(textAreaId).value = mytextarea;
		}
		catch(err){
		}		
	}
	
	function prepairForInsertingImageIntoTinyMCE(){
		insertImageInto = 'tinyMCE';
	}
	
	function prepairForInsertingImageIntoImgTag(imgSrcTag){
		insertImageInto = imgSrcTag;
	}
	
	/**
	 * Pridá text do tiniMCE
	 */
	function addTextToTinyMCE(theText) {
    	tinyMCE.execCommand('mceReplaceContent',true,theText);
	}
	
	/**
	 * Nastaví locale
	 */
	function setLocale(locale){
		button = document.getElementById('localeButton');
		button.value=locale;
		button.click();
	}
	
	/**
	 * Vytvorí tlačítko s daným id
	 */
	function createButton(eventId, invoker){
        var formElement = getFormOfElement(invoker);

        var newButton = document.createElement('input');
  		newButton.setAttribute('id', eventId);
  		newButton.setAttribute('name', eventId);
  		newButton.setAttribute('type','submit');
  		newButton.setAttribute('value',' ');
  		newButton.style.display = 'none';
		formElement.appendChild(newButton);
		return newButton;
	}
	
	/**
	 * Vytvorí tlačítko s daným id a potom ho stlačí
	 */
	function createButtonAndSubmit(eventId, invoker){
		var newButton = createButton(eventId, invoker);		
		newButton.click();
	}
	
	/**
	 * Refreshne stránku za pomoci ajaxu(toto však musí byť definované vo
	 * webflow)
	 */
	function refreshPageWithAjax(invoker, reloadFlowId){
		var formElement = getFormOfElement(invoker);
        
        var newButton = document.createElement('input');
  		newButton.setAttribute('id', '_eventId_ajaxRefresh');
  		newButton.setAttribute('name', '_eventId_ajaxRefresh');
  		newButton.setAttribute('type','submit');
  		newButton.setAttribute('value',' ');
  		newButton.style.visibility = 'hidden';
		formElement.appendChild(newButton);

		ajaxRequest('_eventId_ajaxRefresh', reloadFlowId);
	}

	/**
	 * Načíta stránku cez ajax do nejakého DIVu
	 */   
    function loadPageIntoDiv(url, divToLoadIn) {
    	var method = 'get';	
		
		ajaxRequestStarted();
        var myAjax = new Ajax.Request(
          		url, 
           		{
                method: method,
                parameters: {},
                onSuccess: function(transport) {
                	try{
                	var jsonResponse = transport.responseText.evalJSON();
                	document.getElementById(divToLoadIn).innerHTML = jsonResponse.response;
                	ajaxRequestStopped();
                	}
                	catch(e){
   						window.location = errorPageUrl;
   					}
  				},
                onFailure: errFunc,
                evalScripts: true
        		}
        );
		return false;
    }
	
	function ajaxRequestStarted(){
		ajaxRequestInProgress = true;
		document.getElementById('ajax_loading').style.display='block';
		setTimeout('checkAjaxWaitingTime()', 50);	
	}
	
	function checkAjaxWaitingTime(){
		//alert('ajax request trva dlho');
	}
	
	function ajaxRequestStopped(){
		ajaxRequestInProgress = false;
		document.getElementById('ajax_loading').style.display='none';
	}
	
	function pridajDoKosika(id, invoker){
		var eventId='_eventId_pridaj_do_kosika';
		
		var rowToAddToNakupnyKosik = document.getElementById('sluzbaToEditInNakupnyKosik');
		var newButton = createButton(eventId, rowToAddToNakupnyKosik);
		observeAjaxRequest(newButton);
		rowToAddToNakupnyKosik.value=id;
		
		var mainFormElement = getFormOfElement(invoker);
		var nakupnyKosikFormElement = getFormOfElement(rowToAddToNakupnyKosik);
		nakupnyKosikFormElement.action = mainFormElement.action;
		
		newButton.click();
	}
	
	function odoberSluzbuZKosika(id, invoker){
		var eventId='odober_sluzbu_z_kosika';
			
		var rowToAddToNakupnyKosik = document.getElementById('sluzbaToEditInNakupnyKosik');
		var newButton = createButton(eventId, rowToAddToNakupnyKosik);
		observeAjaxRequest(newButton);
		rowToAddToNakupnyKosik.value=id;
		
		var formElement = getFormOfElement(rowToAddToNakupnyKosik);
		
		formElement.action = getUrlFromFormAction(formElement) + 'odober_sluzbu_z_kosika.htm';
		newButton.click();
	}
	
	function getUrlFromFormAction(formElement){
		var text = formElement.action;
		var poziciaLomitka;
		for(poziciaLomitka=text.length;poziciaLomitka>=0;poziciaLomitka--){
			if(text[poziciaLomitka]=='/'){
				break;
			}
		}

		return text.substring(0, poziciaLomitka+1);
	}
	
	function showUploadWindow(event, button)
	{    
		//uložím si bookmark editora
		try{
			tinyMceBookMark = tinyMCE.get(textAreaId).selection.getBookmark();
		}
		catch(e){
			//nič
		}
		
		// skúsim zatvoriť staré fileupload okno, ak existuje
		try{
		document.getElementById('closeImage' + popupFileUploadDivId).onclick(); 
		document.getElementById('dhtml_goodies_id' + popupFileUploadDivId).innerHTML = '';
		}
		catch(e){
			// neexistuje staré okno, nemusím nič robiť
		}
		
		try{
			if(document.getElementById('windowContent' + popupFileUploadDivId) != null){
				document.getElementById('windowContent' + popupFileUploadDivId).innerHTML = '';
			}
		}catch(e){
			// neexistuje fileupload okno, nemusím nič robiť
		}
			
		// skúsim zatvoriť staré okno, ak existuje
		try{
		document.getElementById('closeImage' + popupUploadDivId).onclick(); 
		document.getElementById('dhtml_goodies_id' + popupUploadDivId).innerHTML = '';
		}
		catch(e){
			// neexistuje staré okno, nemusím nič robiť
		}
		
		if(document.getElementById('windowContent' + popupUploadDivId) != null){
			document.getElementById('windowContent' + popupUploadDivId).innerHTML = '';
		}
	
		popupUploadDivId = createNewWindow(300,150,getXPosition(event),getYPosition(event));
		document.getElementById('windowContent' + popupUploadDivId).innerHTML = 
			'<div id="upload_image_div_content"></div>';
	
		var formElement = getFormOfElement(button);
		var divToReload = document.getElementById('divToReloadId'); 
		divToReload.value = 'upload_image_div_content';

		observeAjaxRequestWithButtonId(button, '_eventId_upload_image'); 
		createButtonAndSubmit('_eventId_upload_image', button);
		
		doAfterAjaxResponse = function(){
			//ak ideme vkladať do tinyMCE, zobrazím aj voľbu šírky
			if(insertImageInto == 'tinyMCE'){
				document.getElementById('imageWidthSelect').style.display='block';
			}
		}
		
		doAfterUploadFinish = function(){
			var fileName = document.getElementById('fileName').value;
			var fileDescription = document.getElementById('fileDescription').value;
   			if(insertImageInto=='tinyMCE'){   				
   				//nastavím bookmark editora
   				try{
   					tinyMCE.get(textAreaId).selection.moveToBookmark(tinyMceBookMark);
   				}
   				catch(e){
   					alert(e);
   					//nič
   				}
   				addTextToTinyMCE('<img src="' + urlBase + 'shared/uploaded/' + fileName + '" alt="' + fileDescription + '" ' + widthString + '/>');
   			}
   			else{
   				var zakladnyImgTag = document.getElementById(insertImageInto);
   				zakladnyImgTag.value = fileName;
   				try{
   					zakladnyImgTag.onchange();
   				}
   				catch(e){}
   			} 
   			document.getElementById('closeImage' + popupUploadDivId).onclick();
   			
   			uploadDiv = document.getElementById('dhtml_goodies_id' + popupUploadDivId);
   			uploadDiv.parentNode.removeChild(uploadDiv);
		}
		
		checkStatusButtonId = '_eventId_upload_image';
	}
	
	function showFileUploadWindow(event,button)
	{    	
		// skúsim zatvoriť staré imageupload okno, ak existuje
		try{
		document.getElementById('closeImage' + popupUploadDivId).onclick(); 
		document.getElementById('dhtml_goodies_id' + popupUploadDivId).innerHTML = '';
		}
		catch(e){
			// neexistuje staré okno, nemusím nič robiť
		}
		
		if(document.getElementById('windowContent' + popupUploadDivId) != null){
			document.getElementById('windowContent' + popupUploadDivId).innerHTML = '';
		}
		
		// skúsim zatvoriť staré fileupload okno, ak existuje
		try{
		document.getElementById('closeImage' + popupFileUploadDivId).onclick(); 
		document.getElementById('dhtml_goodies_id' + popupFileUploadDivId).innerHTML = '';
		}
		catch(e){
			// neexistuje staré okno, nemusím nič robiť
		}
		
		if(document.getElementById('windowContent' + popupFileUploadDivId) != null){
			document.getElementById('windowContent' + popupFileUploadDivId).innerHTML = '';
		}
	
		popupFileUploadDivId = createNewWindow(300,100,getXPosition(event),getYPosition(event));
		document.getElementById('windowContent' + popupFileUploadDivId).innerHTML = 
			'<div id="upload_file_div_content"></div>';
	
		var formElement = getFormOfElement(button);
		var divToReload = document.getElementById('divToReloadId'); 
		divToReload.value = 'upload_file_div_content';

		observeAjaxRequestWithButtonId(button, '_eventId_upload_file'); 
		createButtonAndSubmit('_eventId_upload_file', button);
		
		doAfterAjaxResponse = function(){
		}
		
		doAfterUploadFinish = function(){
			var fileName = document.getElementById('fileName').value;			
   			
			//nastavím bookmark editora
			try{
				tinyMCE.get(textAreaId).selection.moveToBookmark(tinyMceBookMark);
			}
			catch(e){
				//nič
			}
			
			addTextToTinyMCE('<a href="' + urlBase + 'shared/uploaded_files/' + fileName + '">' + fileLabel + '</a>');
   			document.getElementById('closeImage' + popupFileUploadDivId).onclick();
   			
   			uploadDiv = document.getElementById('dhtml_goodies_id' + popupFileUploadDivId);
   			uploadDiv.parentNode.removeChild(uploadDiv);
		}
		checkStatusButtonId = '_eventId_upload_file';
	}

	function submitRequestForCheckUploadStatus(buttonId){
		var button = document.getElementById(buttonId);
   		var formElement = getFormOfElement(button);
   		
		observeAjaxRequestWithButtonId(button, checkStatusButtonId); 
		createButtonAndSubmit(checkStatusButtonId, button);
	
		doAfterAjaxResponse = function(){
			doAfterUploadFinish();
			ajaxRequestStopped();
			
			doAfterAjaxResponse = function(){
				
			}
		}
	}

	/**
	 * Skontroluje stav uploadu
	 */
	function checkUploadStatus(buttonId){
		var iframeInnerHTML;
		if(document.getElementById('upload_target')!=null && document.getElementById('upload_target').contentWindow.document!=null){
			iframeInnerHTML = document.getElementById('upload_target').contentWindow.document.body.innerHTML;
		}
		
		if(iframeInnerHTML!=null && iframeInnerHTML!=''){
			submitRequestForCheckUploadStatus(buttonId);
		}
		else{
			setTimeoutForUploadCheckUploadStatus(buttonId);
		}
	}

	function setTimeoutForUploadCheckUploadStatus(buttonId){
		setTimeout('checkUploadStatus(\'' + buttonId + '\')', 10);
	}

	var widthString = '';
	
	function startUpload(buttonId){
		var width = document.getElementById('picture_resolution').value;
		if(width!='original'){
			widthString = 'width="' + width + '"'; 
		}
		
		doAfterAjaxResponse = function(){
			//alert('finito');
		}
		
		return abstractStartUpload(buttonId);
	}
	
	function abstractStartUpload(buttonId){
		var uploadInput = document.getElementById('uploadInput');
		
		//if(containsDiacritics(uploadInput.value)){
			//alert(zleZnakyVNazveMessage);
		//	return false;
		//}	
		setTimeoutForUploadCheckUploadStatus(buttonId);
		return true;
	}
	
	function startFileUpload(buttonId){
		fileLabel = document.getElementById('nazov_uploadovaneho_suboru').value;
		if(fileLabel == ''){
			alert(nezadanyNazovSuboru);
			return false;
		}
		
		return abstractStartUpload(buttonId);
	}
	
	isAlphaNum = /^([a-zA-Z0-9_-_-_._+]+)$/;
	
	function containsDiacritics(text){
		var tempText = text;
		var lastIndexOfSlash = text.lastIndexOf("\\");
		var lastIndexOfBackSlash = text.lastIndexOf("/");
		if(lastIndexOfSlash !=-1){
			tempText = text.substring(lastIndexOfSlash + 1);
		}
		if(lastIndexOfBackSlash !=-1){
			tempText = tempText.substring(lastIndexOfBackSlash + 1);
		}
		
		if(isAlphaNum.test(tempText)){
			return false;
		}		
		return true;
	}
	

