/*
funkce pro odmazavani a doplnovani vzoroveho textu inputu pri aktivaci a deaktivaci inputu
*/


function vzorovyText(id, vzorovyText, akce)
{
	prvek = document.getElementById(id);
	
	if (akce == 'aktivace') {
		if (prvek.value == vzorovyText) {
			prvek.value = '';
		}
	}
	
	if (akce == 'deaktivace') {
		if (prvek.value == '') {
			prvek.value = vzorovyText;
		}
	}
}


// --- zkontroluje telefon
function CheckTel(telefon)
{
	
	var filter  = /^[+]?[()/0-9. -]{9,}$/;
//        var filter  = /^(\+420)? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$/; //odpovídá českému telefonnímu číslu
	if (filter.test(telefon)) {
		return true;
	}
	else {
		return false;
	}
}



// --- zkontroluje email
function CheckMail(email)
{
	
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(email)) {
		return true;
	}
	else {
		return false;
	}
}

/*
funkce pro kontrolu validity emailu v inputu s danym id
*/
function overEmail(id)
{
	prvek = document.getElementById(id);
	if (CheckMail(prvek.value)) {
		return true;
	}
	else {
		alertt('Zadaná emailová adresa není platná.');
		return false;
	}
}
/**
 * Funkcia ktora v pozadi nacita dalsiu reakciu od 
 * zakaznikov z DB a zobrazi v prislusnych div-och
 */
function nactiDalsiReakci() {
	$('#reakce-text-box-wrapper').hide();
	  $.getJSON("tools/ajax_reakce.php", function(data){
		  $('#reakce-fit-text').text(data.text);
		  $('#reakce-person').text(data.kdo);
		  $('#reakce-company').text(data.firma);
		  $('#reakce-text-box-wrapper').fadeIn();
		  $('.fit-text').textfill({});
	  });
	  
}


/** Odeslání XMLHttp požadavku
* @param Function state_change funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
* @param string method GET|POST|...
* @param string url URL požadavku
* @param string [content] tělo zprávy
* @param object [headers] předané hlavičky ve tvaru { 'hlavička': 'obsah' }
* @return boolean true v případě úspěchu, false jinak
* @copyright Jakub Vrána, http://php.vrana.cz
*/
function send_xmlhttprequest(state_change, method, url, content, headers) {
    var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
    if (!xmlhttp) {
        return false;
    }
    xmlhttp.open(method, url);
    xmlhttp.onreadystatechange = function () {
        state_change(xmlhttp);
    };
    headers = headers || {};
    headers['X-Requested-With'] = headers['X-Requested-With'] || 'XMLHttpRequest';
    for (var key in headers) {
        xmlhttp.setRequestHeader(key, headers[key]);
    }
    xmlhttp.send(content);
    return true;
}

/** Odeslání formuláře přes XMLHttp požadavek
* @param function state_change funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
* @param string url URL požadavku
* @param object form formulář k odeslání
* @param object [headers] předané hlavičky ve tvaru { 'hlavička': 'obsah' }
* @return boolean true v případě úspěchu, false jinak
* @copyright Jakub Vrána, http://php.vrana.cz
*/
function post_xmlhttprequest(state_change, url, form, headers) {
    var elements = form.elements;
    var content = [];
    for (var i=0; i < elements.length; i++) {
        if (elements[i].attributes.name && elements[i].attributes.name.specified && !elements[i].disabled) {
            if (/^(select)$/i.test(elements[i].tagName)) {
                var options = elements[i].options;
                for (var j=0; j < options.length; j++) {
                    if (options[j].selected) {
                        var value = (options[j].attributes.value && options[j].attributes.value.specified ? options[j].value : options[j].text);
                        content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(value));
                    }
                }
            } else if (!/^(submit|reset|button|file|image)$/i.test(elements[i].type) && (!/^(radio|checkbox)$/i.test(elements[i].type) || elements[i].checked)) {
                content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value));
            }
        }
    }
    if (!headers) {
        headers = {};
    }
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
    return send_xmlhttprequest(state_change, 'POST', url, content.join('&'), headers);
}

function odeslat(id, url, result) {
    //document.getElementById('cena').innerHTML = '...';
    //document.getElementById('cena_dph').innerHTML = '...';
    form = document.getElementById(id);
    return post_xmlhttprequest(function (xmlhttp) {
        if (xmlhttp.readyState == 4) {
            document.getElementById(result).innerHTML = xmlhttp.responseText;
            var scripts = xmlhttp.responseText.replace(/\r/g, "");
               scripts = scripts.replace(/\n/g, "");
               scripts = scripts.replace(/^.*<script type="text\/javascript">(.*)<\/script>.*$/im, "$1");
               eval(scripts);

            //document.getElementById('cena').innerHTML = Math.round(Number(xmlhttp.responseText)*1.19);
        }
    }, baseUrl+url, form);
}

// funkce pro nastaveni kontrolniho klice formularu
function vyplnFormControl(id)
{					  
	var FormElement = document.getElementById(id);
	
	var NahodneCislo = Math.round((Math.random() * 20000)) * 8513; 
	
	if (FormElement != undefined){
		FormElement.value = NahodneCislo; 	
	}
	
}

function skryjElement(id) {
	document.getElementById(id).style.display = 'none';
}

function zobrazElement(id) {
	document.getElementById(id).style.display = 'block';
}

function strlen(strVar)
{
	strVar = strVar.replace(/ /g, "");
	return(strVar.length);
}

function checkdate (month, day, year) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Pyerre
    // *     example 1: checkdate(12, 31, 2000);
    // *     returns 1: true
    // *     example 2: checkdate(2, 29, 2001);
    // *     returns 2: false
    // *     example 3: checkdate(03, 31, 2008);
    // *     returns 3: true
    // *     example 4: checkdate(1, 390, 2000);
    // *     returns 4: false
 
    var myDate = new Date();
    myDate.setFullYear( year, (month - 1), day );
 
    return month >= 1 && month <= 12 && year >= 1 && year <= 32767 && ((myDate.getMonth()+1) == month && day<32);
}

function overVyhledavani(id) {
	var FormElement = document.getElementById(id);
	if (FormElement.value == '') {
		alertt(document.getElementById('ErrorVyhlText').value);
		return false;
	}
	else if (strlen(FormElement.value) < 3) {
		alertt(document.getElementById('ErrorVyhlDelka').value);
		return false;
	}
	else {
		return true;
	}
}

function overKontaktForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.jmeno.value == '') {
		alertt(document.getElementById('ErrorKontJmeno').value);
		return false;
	}
	if (formElement.email.value == '') {
		alertt(document.getElementById('ErrorKontEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.email.value)) {
		alertt(document.getElementById('ErrorKontFormat').value);
		return false;
	}
	else if (formElement.telefon.value == '') {
		alertt(document.getElementById('ErrorKontTelefon').value);
		return false;
	}
	else if (formElement.text.value == '') {
		alertt(document.getElementById('ErrorKontText').value);
		return false;
	}
	else {
		return true;
	}
}

function overFiremniReseniForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.jmeno.value == '') {
		alertt(document.getElementById('ErrorKontJmeno').value);
		return false;
	}
	else if (formElement.pozice.value == '') {
		alertt(document.getElementById('ErrorKontPozice').value);
		return false;
	}
	else if (formElement.telefon.value == '') {
		alertt(document.getElementById('ErrorKontTelefon').value);
		return false;
	}
	else if (formElement.mobil.value == '') {
		alertt(document.getElementById('ErrorKontMobil').value);
		return false;
	}
	else if (formElement.email.value == '') {
		alertt(document.getElementById('ErrorKontEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.email.value)) {
		alertt(document.getElementById('ErrorKontFormat').value);
		return false;
	}
	else if (formElement.spolecnost.value == '') {
		alertt(document.getElementById('ErrorKontSpolecnost').value);
		return false;
	}
	else if (formElement.poptavka.value == '') {
		alertt(document.getElementById('ErrorKontPoptavka').value);
		return false;
	}
	else {
		return true;
	}
}

function overPraceForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.jmeno.value == '') {
		alertt(document.getElementById('ErrorPraceJmeno').value);
		return false;
	}
	
	if (formElement.prijmeni.value == '') {
		alertt(document.getElementById('ErrorPracePrijmeni').value);
		return false;
	}
	
	if (formElement.narozeniDen.value == '') {
		alertt(document.getElementById('ErrorPraceDen').value);
		return false;
	}
	
	if (formElement.narozeniMesic.value == '') {
		alertt(document.getElementById('ErrorPraceMesic').value);
		return false;
	}
	
	if (formElement.narozeniRok.value == '') {
		alertt(document.getElementById('ErrorPraceRok').value);
		return false;
	}
	
	if (!checkdate(formElement.narozeniMesic.value, formElement.narozeniDen.value, formElement.narozeniRok.value)) {
		alertt(document.getElementById('ErrorPraceDatumFormat').value);
		return false;
	}
	
	if (formElement.ulice.value == '') {
		alertt(document.getElementById('ErrorPraceUlice').value);
		return false;
	}
	
	if (formElement.psc.value == '') {
		alertt(document.getElementById('ErrorPracePsc').value);
		return false;
	}
	
	if (formElement.mesto.value == '') {
		alertt(document.getElementById('ErrorPraceMesto').value);
		return false;
	}
	
	if (formElement.telefon.value == '') {
		alertt(document.getElementById('ErrorPraceTelefon').value);
		return false;
	}
	
	if (formElement.email.value == '') {
		alertt(document.getElementById('ErrorPraceEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.email.value)) {
		alertt(document.getElementById('ErrorPraceEmailFormat').value);
		return false;
	}
	
	if (formElement.termin.value == '') {
		alertt(document.getElementById('ErrorPraceTermin').value);
		return false;
	}
	
	if (formElement.vzdelani.value == '') {
		alertt(document.getElementById('ErrorPraceVzdelani').value);
		return false;
	}
	
	if (formElement.praxe.value == '') {
		alertt(document.getElementById('ErrorPracePraxe').value);
		return false;
	}
	
	if (formElement.kvalifikace.value == '') {
		alertt(document.getElementById('ErrorPraceKvalifikace').value);
		return false;
	}
	
	if (formElement.prijem.value == '') {
		alertt(document.getElementById('ErrorPracePrijem').value);
		return false;
	}
	
	if (formElement.stav.value == '') {
		alertt(document.getElementById('ErrorPraceStav').value);
		return false;
	}
	
	if (!formElement.souhlas.checked) {
		alertt(document.getElementById('ErrorPraceSouhlas').value);
		return false;
	}
	
	return true;
	
}

function overKurzForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.kurzJmeno.value == '') {
		alertt(document.getElementById('ErrorObjJmeno').value);
		return false;
	}
	if (formElement.kurzEmail.value == '') {
		alertt(document.getElementById('ErrorObjEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.kurzEmail.value)) {
		alertt(document.getElementById('ErrorObjFormat').value);
		return false;
	}
	else if (formElement.kurzTelefon.value == '') {
		alertt(document.getElementById('ErrorObjTelefon').value);
		return false;
	}
	else if (formElement.kurzPocet.value == '') {
		alertt(document.getElementById('ErrorObjPocet').value);
		return false;
	}
	else {
		return true;
	}
}

function overKurzPreposlaniForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.kurzPreposlaniEmail.value == '') {
		alertt(document.getElementById('ErrorPrepEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.kurzPreposlaniEmail.value)) {
		alertt(document.getElementById('ErrorPrepEmailFormat').value);
		return false;
	}
	else if (formElement.kurzPreposlaniCiziEmail.value == '') {
		alertt(document.getElementById('ErrorPrepPrijem').value);
		return false;
	}
	else if (!CheckMail(formElement.kurzPreposlaniCiziEmail.value)) {
		alertt(document.getElementById('ErrorPrepPrijemFormat').value);
		return false;
	}
	else {
		return true;
	}
}

function alertt(errorMessage) {
//	var alertWidth = 120 + (strlen(errorMessage) * 6);
//	
//	Ext.MessageBox.show({
//	       msg: errorMessage,
//	       buttons: Ext.MessageBox.OK,
//	       icon: Ext.MessageBox.ERROR,
//	       minWidth: alertWidth
//	    }
//	    );

	jError(errorMessage);
}

function vymazKontaktForm(id) {
	formElement = document.getElementById(id);
	
	formElement.jmeno.value = '';
	formElement.email.value = '';
	formElement.telefon.value = '';
	formElement.text.value = '';
}

function vymazFiremniReseniForm(id) {
	formElement = document.getElementById(id);
	
	formElement.jmeno.value = '';
	formElement.email.value = '';
	formElement.telefon.value = '';
	formElement.vzkaz.value = '';
	formElement.mobil.value = '';
	formElement.poptavka.value = '';
	formElement.spolecnost.value = '';
	formElement.pozice.value = '';
}

function vymazKurzForm(id) {
	formElement = document.getElementById(id);
	
	formElement.kurzJmeno.value = '';
	formElement.kurzEmail.value = '';
	formElement.kurzTelefon.value = '';
	formElement.kurzPocet.value = '';
	formElement.kurzSleva.value = '';
}

function vymazKurzPreposlaniForm(id) {
	formElement = document.getElementById(id);
	
	formElement.kurzPreposlaniEmail.value = '';
	formElement.kurzPreposlaniCiziEmail.value = '';
	formElement.textPreposlat.value = '';
}

function overObjednavkuKataloguForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.jmeno.value == '') {
		alertt(document.getElementById('ErrorObjJmeno').value);
		return false;
	}
	else if (formElement.nazevSpol.value == '') {
		alertt(document.getElementById('ErrorObjNazev').value);
		return false;
	}
	else if (formElement.pozice.value == '') {
		alertt(document.getElementById('ErrorObjPozice').value);
		return false;
	}
	else if (formElement.sidlo.value == '') {
		alertt(document.getElementById('ErrorObjSidlo').value);
		return false;
	} 
        else if (formElement.telefon.value == '') {
		alertt(document.getElementById('ErrorObjTelefon').value);
		return false;
	}
        else if (!CheckTel(formElement.telefon.value)) {
		alertt(document.getElementById('ErrorObjTelefonFormat').value);
		return false;
	}
	else if (formElement.email.value == '') {
		alertt(document.getElementById('ErrorObjEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.email.value)) {
		alertt(document.getElementById('ErrorObjEmailFormat').value);
		return false;
	}
	else {
		return true;
	}
}


function overObjednavkuPoukazuForm(id) {
	formElement = document.getElementById(id);
	
	if (formElement.jmeno.value == '') {
		alertt(document.getElementById('ErrorObjJmeno').value);
		return false;
	}
        else if (formElement.pocet1.value == '' && formElement.pocet2.value == '') {
		alertt(document.getElementById('ErrorObjPocet').value);
		return false;
	}
	else if (formElement.nazevSpol.value == '') {
		alertt(document.getElementById('ErrorObjNazev').value);
		return false;
	}
	else if (formElement.pozice.value == '') {
		alertt(document.getElementById('ErrorObjPozice').value);
		return false;
	}
	else if (formElement.sidlo.value == '') {
		alertt(document.getElementById('ErrorObjSidlo').value);
		return false;
	} 
        else if (formElement.telefon.value == '') {
		alertt(document.getElementById('ErrorObjTelefon').value);
		return false;
	}
        else if (!CheckTel(formElement.telefon.value)) {
		alertt(document.getElementById('ErrorObjTelefonFormat').value);
		return false;
	}
	else if (formElement.email.value == '') {
		alertt(document.getElementById('ErrorObjEmail').value);
		return false;
	}
	else if (!CheckMail(formElement.email.value)) {
		alertt(document.getElementById('ErrorObjEmailFormat').value);
		return false;
	}
        else if (formElement.ic.value == '') {
		alertt(document.getElementById('ErrorObjIC').value);
		return false;
	}
        else if (formElement.dic.value == '') {
		alertt(document.getElementById('ErrorObjDIC').value);
		return false;
	}
//        else if (formElement.banka.value == '') {
//		alertt(document.getElementById('ErrorObjBanka').value);
//		return false;
//	}
//        else if (formElement.ucet.value == '') {
//		alertt(document.getElementById('ErrorObjUcet').value);
//		return false;
//	}
	else {
		return true;
	}
}

//=================================================================================================
//=================================================================================================
//=================================================================================================

function overSoutezForm() {
	
	if (!$("input[name='otazky[1]']:checked").val()) {
		alertt($("#ErrorOtazka1").val());
		return false;
	}
	
	if (!$("input[name='otazky[2]']:checked").val()) {
		alertt($("#ErrorOtazka2").val());
		return false;
	}
	
	if (!$("input[name='otazky[3]']:checked").val()) {
		alertt($("#ErrorOtazka3").val());
		return false;
	}
	
	if (!$("input[name='otazky[4]']:checked").val()) {
		alertt($("#ErrorOtazka4").val());
		return false;
	}
	
	
	if ($("#jmeno").val() == '') {
		alertt($("#ErrorJmeno").val());
		return false;
	}
	
	if ($("#prijmeni").val() == '') {
		alertt($("#ErrorPrijmeni").val());
		return false;
	}
	
	if ($("#email").val() == '') {
		alertt($("#ErrorEmail").val());
		return false;
	}
	
	if (!CheckMail($("#email").val())) {
		alertt($("#ErrorEmailFormat").val());
		return false;
	}
	
	return true;
	
}

//=================================================================================================
//=================================================================================================
//=================================================================================================

function overSoutezPritelForm() {
	
	if ($("#jmeno").val() == '') {
		alertt($("#ErrorJmeno").val());
		return false;
	}
	
	if ($("#prijmeni").val() == '') {
		alertt($("#ErrorPrijmeni").val());
		return false;
	}
	
	if ($("#email").val() == '') {
		alertt($("#ErrorEmail").val());
		return false;
	}
	
	if (!CheckMail($("#email").val())) {
		alertt($("#ErrorEmailFormat").val());
		return false;
	}
	
	if ($("#emailPrijemce").val() == '') {
		alertt($("#ErrorEmailPrijemce").val());
		return false;
	}
	
	if (!CheckMail($("#emailPrijemce").val())) {
		alertt($("#ErrorEmailFormat").val());
		return false;
	}
	
	return true;
	
}
/**
 * PREVZATO Z QFAKTURY.CZ
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;

	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";

	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		for(var item in arr) {
			var value = arr[item];

			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}



/**
 * PREVZATO Z QFAKTURY.CZ
 * Aktivuje navazani zobrazeni modalniho dialogu na tlacitko.
 * Slouzy jako proxy pro Q2IS_Core_Activate_OnClickDialog
 */
function Q2IS_Core_Activate_OnClickModalDialog(prvekDialog, prvekTlacitko, options)
{
    options['modal'] = true;

    Q2IS_Core_Activate_OnClickDialog(prvekDialog, prvekTlacitko, options);
}



/**
 * PREVZATO Z QFAKTURY.CZ
 * Aktivuje navazani zobrazeni modalniho dialogu na tlacitko.
 * @param prvekDialog Prvek, ktery bude pouzit jako dialog
 * @param prvekTlacitko Prvek, ktery po kliknuti aktivuje dialog
 * @param options Dodatecne nastaveni. Je predano metode .dialog(...)
 *      Nektere .dialog() parametry:
 *          title -- titulek okna
 *          width, height -- velikost
 *      Dalsi dodatecne parametry teto funkce:
 *          bool resetOnShow -- pri zobrazeni dialogu jsou vsechny formulare resetovany
 *          function hookOnShow -- funkce ke spusteni pri zobrazeni dialogu
 *          function hookOnDialog -- callback volany po otevreni dialogu
 */
function Q2IS_Core_Activate_OnClickDialog(prvekDialog, prvekTlacitko, options)
{
    // schovani dialogu
    $(prvekDialog).hide();

    // aktivace zobrazovani na tlacitko
    $(prvekTlacitko).click(function (e) {
        e.preventDefault();
        $(prvekDialog).show();
        if (options['resetOnShow'] == true) {
            $(prvekDialog).find('form').each(function () {
                this.reset();
            });
        }
        if (propertyIsDefined(options, 'hookOnShow')) {
            options.hookOnShow();
        }
        var ModalDialog = $(prvekDialog).dialog(options);
        ModalDialog.dialog({
            beforeClose: function(e,ui){
                e.preventDefault();
                //loadujeme jeste?
                if ($(prvekDialog).find(".ajax-loader:visible").length) {//loaduju
                    jConfirm("Operace není ukončená.<br />Opravdu chcete okno zavřít?", "Potvrzení", function(r) {
                        if(r) {
                            ModalDialog.dialog('destroy');
                        }
                    });
                } else {//neloaduju
                    ModalDialog.dialog('destroy');//zavrit
                }

            }
        });
        if (propertyIsDefined(options, 'hookOnDialog')) {
            options.hookOnDialog();
        }
    });
}



/**
 * PREVZATO Z QFAKTURY.CZ
 * @author Lukas Pohl <dr.zoidberg1969 AT yahoo.com>
 * NEFUNGUJE PRO SOUBORY VE FORMULARI, POUZIT HTML PRENOS FCE Q2IS_Core_HTML_Form(...)!!
 * Funkce ktera udela z normalniho formulare ajaxovy formular, data se posilaji jsonem
 * Neni problem pripsat dalsi callbacky, vlastnosti (beforeSubmit, beforeSerialize, ...
 * (viz. http://jquery.malsup.com/form/#options-object)
	Validace formulare v kontrolleru
	function validateAction(...)
	{
		...
		$form = new Q2IS_Faktury_Form_Faktura_Vydana_Ks();
		$form->submit->setLabel('Přidat');
		$form->setAction($this->view->url(array(
				'controller' 	=> 'faktury-vydane-ks',
				'action'		=> 'add',
				)));
		$formData = $this->getRequest()->getPost();
//		$this->view->form = $form;
		$this->_helper->layout->disableLayout();

		if($form->isValid($formData)) {
			$this->view->result = json_encode(array('success'=>'success'));
		} else {
			$this->view->result = json_encode(array('error'=>'validate', 'form'=>$form->populate($formData)->render()));
		}
		...
	}

 * VIEW: validate.phtml
 echo json_encode($this->result);

 *	Odpoved z controlleru se ocekava:
	array('error' => 'validate', 'form' => '<form action=.....>);
	array('success' => 'success', ....);
	array('error' => 'Spatny SQL dotaz', ....);
	array('success' => "success"
    'id' => "17"
    'result' ...
        'CompanyId' => "1"
        'Cislo' => "2345"
        'Nazev' => "asdf");

 *      Hodnoty v options:
 *          == Values ==
 *          reload_after_error = false; --refresh stranky po chybe?
 *          == Callbacks ==
 *          callback_success(data) -- uspech formulare
 *          callback_error_validate(data)  -- chyba validace formulare, prepise se aktualni formular formularem s chybama
 *          callback_error(context) -- obecna chyba, prazdna odpoved, spatna odpoved, chyba SQL atd...
 */
function Q2IS_Core_Ajax_Form(prvekForm, options) {
	var prvekForm = prvekForm;
    var action = $(prvekForm).attr("action");

    var lastChar = action.substring(action.length - 1, action.length);
//    if(lastChar == "/") {
//        $(prvekForm).attr("action", $(prvekForm).attr("action") + "ajax-json/1");
//    } else {
//        $(prvekForm).attr("action", $(prvekForm).attr("action") + "/ajax-json/1");
//    }


	$(prvekForm).ajaxForm({
		// dataType identifies the expected content type of the server response
		dataType:  'json',
		loading_enabled: 'true',
		// success identifies the function to invoke when the server response
		// has been received
		success: function (result) {
			enable_form(prvekForm);
			if(!result) {
				alert('Dotaz selhal');
				return;
			}
//			var data = jQuery.parseJSON(jQuery.trim(result));
            var data = result;
			if(data != null) {
				if(data.success != null) {
					if (propertyIsDefined(options, 'callback_success')) {
						options.callback_success(data);
					} else {
						location.reload();//refresh page
					}
				} else if (data.error != null){
					if(data.error=='validate') {
						if (propertyIsDefined(options, 'callback_error_validate')) {
							options.callback_error_validate(data);
						} else {
							if($(data.form)!=null) {
								$(prvekForm).html($(data.form).html());	//zobrazim formular
							} else {
								alert('Chybi revalidovany formular: ' + dump(data), 'error');
							}
						}
					} else {
						if (propertyIsDefined(options, 'callback_error')) {
							options.callback_error(data);
						} else {
                            jAlert(data.error, "Chyba", function(){
                                if (propertyIsDefined(options, 'reload_after_error')) {
                                    var reload = options.reload_after_error;
                                    if(reload) {
                                        location.reload();
                                    }
                                }
                            });
                        }
					}
				} else {
					alert('Neocekavana odpoved: ' + dump(data), 'error');
				}
			} else {
				//empty data result
				if (propertyIsDefined(options, 'callback_result_error')) {
					options.callback_result_error(data);
				}
			}
		},
		beforeSerialize: function(form, options) {
			if (options.loading_enabled) {
				disable_form(form);
			}
		}
	});
}


/**
 * Kontrola, zda je atribut objektu definovany
 * PREVZATO Z QFAKTURY.CZ
 * @param object Objekt
 * @param property Nazev atributu
 * @return boolean
 */
function propertyIsDefined(object, property)
{
    return (eval("typeof object['" + property + "'] != \"undefined\""));
}



/**
 * PREVZATO Z QFAKTURY.CZ
 * @author Lukas Pohl
 * chce to jeste vychytat, pridavani/ostranovani atributu neni stastny pze ve
 * formulari mohou byt uz predem zamknute formy
 */
function disable_form(form) {
		$(":submit", form).parent().append("<img class='ajax-loader' src='"+window.baseUrl+"/img/ajax-loader.gif' alt='loading'></img>");
		$(":submit", form).attr('disabled', 'disabled');
//			$("input", $form).attr('readonly', 'true');
//			$("textarea", $form).attr('readonly', 'true');
//			$(":checkbox", $form).attr('disabled', 'disabled');
//			$(":radio", $form).attr('disabled', 'disabled');
	}
function enable_form(form) {
		$(form + ' img.ajax-loader').remove();
//			$(form + " :submit").attr('disabled', '');
//			$(form + " input").attr('readonly', '');
//			$(form + " textarea").attr('readonly', '');
//			$(form + " :checkbox").attr('disabled', '');
//			$(form + " :radio").attr('disabled', '');
		$(form + " :submit").removeAttr('disabled');
//			$(form + " input").removeAttr('readonly');
//			$(form + " textarea").removeAttr('readonly');
//			$(form + " :checkbox").removeAttr('disabled');
//			$(form + " :radio").removeAttr('disabled');
	}

function toggle(chkbox, group) { 
        var visSetting = !(chkbox.checked) ? "visible" : "hidden"; 
        document.getElementById(group).style.visibility = visSetting; 
    } 
    
//    function aktualizuj(actCena1, actCena2, id) { 
//     formElement = document.getElementById(id);
//	
//        if (formElement.pocet1.value != '') {
//		actCena1 = (formElement.pocet1.value)*actCena;
//        }
//        if (formElement.pocet2.value != '') {
//		actCena2 = (formElement.pocet2.value)*actCena;
//        }
//    }
