/**
 * Fce mani souzi k jekemukoliv prepinaci
 * Pouziti napr. prepnuti mezi velikostmi pisma v obsahu
 *
 * @param string idElSwitch ID bloku, kde budou objekty s prepinaci
 * @param string idElChange ID blok, kam se pridava trida
 * 
 * Blok elSwitch pocita, ze je obalem odkazu s atributem rel, kde je hodnota tridy, jez se nastavi
 * pro blok elChange
 */
function switchs(idElSwitch, idElChange) {

    var elSwitch = jQ(idElSwitch);
    var elChange = jQ(idElChange);

    // Uklada puvodni tridy
    var oldClass = jQ(elChange).attr('class');
    var newClass = '';
    var elSwitchs = jQ(elSwitch).find('a');
    
    var expires = new Date();
    expires = expires.valueOf() + 31*24*60*60*1000;
    expires = new Date(expires);

    if (elSwitch.length && elChange.length) {
        jQ(elSwitchs).click(function(event) {
            event.preventDefault();

            jQ(elSwitchs).removeClass('active');
            jQ(elChange).removeAttr('class');

            if (jQ(this).attr('rel') == '') {
                newClass = oldClass;
            } else {
                newClass = oldClass + ' ' + jQ(this).attr('rel');
            }

            setCookie('contentClass', jQ(this).parent().attr('class'), expires, '/');

            jQ(this).addClass('active');
            jQ(elChange).attr('class', newClass);
        });
    }
}

function setContentFontSize(idElSwitch, idElChange) {

    var elSwitch = jQ(idElSwitch);
    var elChange = jQ(idElChange);

    if (elSwitch.length && elChange.length) {
    
        var contentClass = getCookie('contentClass');
        
        jQ(elSwitch).find('a').removeClass('active');
        
        var elLink = jQ(elSwitch).find('.' + contentClass + ' a');
        jQ(elLink).addClass('active');
        jQ(elChange).addClass(jQ(elLink).attr('rel'));
    }
}


/**
 * Objekt pro kontrolu formularu
 * 
 * @param formId string ID testovaneho formulare
 */
function CheckForm(formId) {
    // Ulozi si DOMobjekt pro zkraceni prochazeni
    this.elForm = jQ(formId);
    // 
    this.results = new Array();
    
    this.eventType = 'submit';
    
    this.eventElement = this.elForm;
}

/**
 * 
 */
CheckForm.prototype.setEvent = function(eventElement, eventType) {
   if (eventElement == 'default') {
       this.eventElement = this.elForm;
   } else {
       this.eventElement = jQ(eventElement);
   } 
   
   if (eventType == 'default') {
       this.eventType = 'submit';
   } else {
       this.eventType = eventType;
   }
}

/*
 * Testuje, zda-li je formular vyplnen
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni
 */
CheckForm.prototype.isEmpty = function(objName, idAlert) {

    var thisObject = this;


    jQ(this.eventElement).bind(this.eventType + '.' + objName, function () {

        var result = false;

        // Testovani hodnoty formulare
        var elValue = thisObject.getValue(thisObject.elForm, objName);
        elValue = elValue.replace(/(^\s*)|(\s*$)/g, '');              
        var elAlert = jQ(idAlert);

        if (elValue == '') {
            jQ(elAlert).fadeTo(250, 1, function() {
                jQ(this).addClass('show').removeClass('hide');
            });
            result = false;
        } else {
            jQ(elAlert).removeClass('show').addClass('hide');
            result = true;
        }

        thisObject.results[thisObject.eventType + '.' + objName] = result;
        
        return result;
    });
}

/*
 * Testuje, zda-li je formular zaskrtnuty
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni
 */
CheckForm.prototype.isSelected = function(objName, idAlert) {

    var thisObject = this;

    jQ(this.eventElement).bind(this.eventType + '.' + objName, function () {
               
        var result = false;
        var elRadio = jQ(thisObject.elForm).find('input:radio[@name=' + objName + ']:checked');
        var elAlert = jQ(idAlert);  
        // Testovani hodnoty formulare
        if ( jQ(elRadio).length == 0 ) {
            jQ(elAlert).fadeTo(250, 1, function() {
                jQ(this).addClass('show').removeClass('hide');
            });
            result = false;
        } else {
            jQ(elAlert).removeClass('show').addClass('hide');
            result = true;
        }
        
        thisObject.results[thisObject.eventType + '.' + objName] = result;
        return result;
    });
}


/*
 * Testuje, zda-li je formular zaskrtnuty
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni
 */
CheckForm.prototype.isChecked = function(objName, idAlert) {

    var thisObject = this;

    jQ(this.eventElement).bind(this.eventType + '.' + objName, function () {
                    
        var result = false;
        var elCheckbox = jQ(thisObject.elForm).find('input:checkbox[@name=' + objName + ']');

        // Testovani hodnoty formulare
        if ( jQ(elCheckbox).length > 0 ) {
            var elAlert = jQ(idAlert);  
            if (jQ(elCheckbox).attr('checked') == false) {
                jQ(elAlert).fadeTo(250, 1, function() {
                    jQ(this).addClass('show').removeClass('hide');
                });
                result = false;
            } else {
                jQ(elAlert).removeClass('show').addClass('hide');
                result = true;
            }
        }
        
        thisObject.results[thisObject.eventType + '.' + objName] = result;
        return result;
    });
}

/*
 * Testuje retezec na urcity pocet znaku
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni
 * @param integer minCount Minimalni pocet znaku
 * @param integer maxCount Maximalni pocet znaku 
 */
CheckForm.prototype.checkLengtValue = function(objName, idAlert, minCount, maxCount) {

    var thisObject = this;

    jQ(this.eventElement).bind(this.eventType + '.' + objName, function () {
        var result = false;

        // Testovani hodnoty formulare
        if ( jQ(thisObject.elForm).length > 0 ) {
        
            var elValue = thisObject.getValue(thisObject.elForm, objName);
            
            elValue = elValue.replace(/(^\s*)|(\s*$)/g, '');
            var elAlert = jQ(idAlert);
            var strLength = elValue.length;
            if (strLength < minCount || maxCount < strLength) {
                jQ(elAlert).fadeTo(250, 1, function() {
                    jQ(this).addClass('show').removeClass('hide');
                });
                result = false;
            } else {
                jQ(elAlert).removeClass('show').addClass('hide');
                result = true;
            }
        }

        thisObject.results[thisObject.eventType + '.' + objName] = result;        
        return result;
    });
}

/**
 * Odnastavuje fci z DOM objektu
 *
 * @param string typeDom ID udalosti, kterou bude odstranovat
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni
 */
CheckForm.prototype.unbind = function(typeBind, idAlert) {
    jQ(this.eventElement).unbind(typeBind);
    jQ(this.eventElement).find(idAlert).addClass('hide').removeClass('show');
}

/*
 * Testuje, zda-li je formular vyplnen
 *
 * @param elForm DOMobject Objekt formulare
 * @param objName string Jmeno formularoveho prvku
 * @return string Hodnota formulare
 */
CheckForm.prototype.getValue = function(elForm, objName) {

    var elInput = jQ(elForm).find('input[@name=' + objName + ']');
    var elSelect = jQ(elForm).find('select[@name=' + objName + ']');  
    
    var elValue = '';
    
    if (jQ(elInput).length == 1) {
        elValue = jQ(elInput).val();                
    } else if (jQ(elSelect).length == 1) {
        elValue = jQ(elSelect).val();
        if (elValue == null) {
            elValue = '';
        }
    }
    
    return elValue;
}

/*
 * Testuje, hodnotu formulare, dle zadaneho regularniho vyrazu v parametru
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni 
 * @param strReg string Regularni vyraz
 */
CheckForm.prototype.checkReg = function(objName, idAlert, strReg) {

    var thisObject = this;
    var elForm = jQ(this.formId);

    jQ(this.eventElement).bind(this.eventType + '.' + objName, function () {

        var result = false;

        // Testovani hodnoty formulare
        var elValue = thisObject.getValue(thisObject.elForm, objName);

        elValue = elValue.replace(/(^\s*)|(\s*$)/g, '');
        var elAlert = jQ(idAlert);
        var regCheck = new RegExp(strReg);
        var isCorrect = regCheck.test(elValue);

        if (isCorrect == false) {
            jQ(elAlert).fadeTo(250, 1, function() {
                jQ(this).addClass('show').removeClass('hide');
            });
            result = false;
        } else {
            jQ(elAlert).removeClass('show').addClass('hide');
            result = true;
        }
        
        thisObject.results[thisObject.eventType + '.' + objName] = result;
        return result;
    });
}

/*
 * Provede se, pokud veskere fce predtim se vyhodnoti jako uspesne
 *
 * @param objName DOMobject Nazev objektu
 * @param idAlert DOMobject Object se zpravovou pro uzivatele v pripade nespravneho vyplneni 
 * @param strReg string Regularni vyraz
 */
CheckForm.prototype.setCheckFunction = function(func) {

    var thisObject = this;
    
    jQ(this.eventElement).bind(this.eventType, func);
}

/**
 * Nastavuje atribut autocomplete na inputy, ktere maji tridu autocomplete
 */
function setAutocomplete() {
    jQ('.autocomplete').attr('autocomplete', 'off');
}

/**
 * Fce dynamicky nastavuje odeslani target u všech elementu, ktere maji tridu dle parametru
 *
 * @param string nameClass Jmeno tridy
 */
function setSendTarget(nameClass) {
    var elElements = jQ('a.' + nameClass + ', form.' + nameClass);
    if (elElements.length > 0) {;
        jQ(elElements).attr('target', '_blank');
    }
}

/** 
 * Pridava a odebira DOM objektu tridu pro zobrazeni
 * 
 * @param elObject DOMobject objekt, na ktery je pridana trida
 * @return void
 */
function switchVisibility(elObject) {
    jQ(elObject).toggleClass('show');
}

/**
 * Vraci pozici prvku v domu vuci objektum na jeho urovni
 *
 * @param elElement DOMobject Objekt, jehoz pozici zjistuji
 * @return integer
 */
function getIndex(elElement) {
    return jQ(elElement).parent().children(elElement.nodeName).index(elElement);
}
 
/** 
 * Slouzi k prepinani mezi objekty
 * napr. k prepinani mezi zalozkami
 * 
 * @param idDomBlock ID zuzuje prohledavanou oblast
 * @param classAction Trida, jez se nastavi na aktivni DOM objekt
 * @return void
 */
function switchDomObject(idDomSwitch, idDomForms, idclassAction) {

    // Vybira objekty pro prepnuti a nastavuje na ne udalost
    var elFrameSwitch = jQ(idDomSwitch).children('li');
    var elFrameForm = jQ(idDomForms);
    
    // Nastavuje zobrazeni prvniho ramu jako default
    jQ(elFrameForm).children('div').addClass('hide');   
    jQ(elFrameForm).children('div:eq(0)').removeClass('hide').addClass('show');    
    
    // Nastavuje udalosti na zalozky
    jQ(elFrameSwitch).click(function() {

        var bookmarkIndex = getIndex(this);
        var countObject = jQ(elFrameSwitch).length;
        
        jQ(elFrameSwitch).parent().find('li')
            .removeClass('active_first')
            .removeClass('active')
            .removeClass('active_last');
            
        if (bookmarkIndex == 0) {
            jQ(elFrameSwitch).parent().find('li:first').addClass('active_first');    
        } else if (bookmarkIndex == (countObject-1)) {
            jQ(elFrameSwitch).parent().find('li:last').addClass('active_last');        
        } else {
            jQ(elFrameSwitch).parent().find('li:eq(' + bookmarkIndex + ')').addClass('active');        
        }

        jQ(elFrameForm).children('div').removeClass('show').addClass('hide');
        jQ(elFrameForm).children('div:eq(' + bookmarkIndex + ')').removeClass('hide').addClass('show');
    });
}

/**
 * Zneaktivnuje odkazy s heckem v atributu href
 */
function disableLinks() {
    jQ('a[@href=#]')
    .click(function(event) {
        event.preventDefault(); 
    })
    .addClass('nonactive');
}

/**
 * Slouzi k listovani mizi bannery
 */ 
function bannersListing(idBannersAll, idBannerFrames, idPreview, idNext) {
    
    var elFrame = jQ(idBannersAll);
    var elBanners = jQ(elFrame).children('#bannersFrames');

    // Nastavuje udalost na tlacitko predchozi
    jQ(elFrame).find(idPreview).click(function() {
        var prevPosition = (jQ(elBanners).children('a.show:first').attr('rel')) * 1 - 1;
        var elPrev1 = jQ(elBanners).children('a[@rel="' + prevPosition + '"]');
        if (jQ(elPrev1).length == 0) {
            elPrev1 = jQ(elBanners).children('a:last');
            prevPosition = jQ(elBanners).length;
        }
        var elImg1 = jQ(elPrev1).children('img');
        
        jQ(elBanners).children('a').removeClass('show').addClass('hide');
        
        if (jQ(elImg1).hasClass('big')) {
            jQ(elPrev1).removeClass('hide').addClass('show');
        } else {
            var elPrev2 = jQ(elBanners).children('a[@rel="' + (prevPosition-1) + '"]');
            jQ(elPrev1).removeClass('hide').addClass('show');
            if (jQ(elPrev2).children('img').hasClass('small')) {
                jQ(elPrev2).removeClass('hide').addClass('show');                            
            }

        }
    });

    // Nastavuje udalost na tlacitko dalsi
    jQ(elFrame).find(idNext).click(function() {
        var nextPosition = (jQ(elBanners).children('a.show:last').attr('rel')) * 1 + 1;
        var elNext1 = jQ(elBanners).children('a[@rel="' + nextPosition + '"]');
        if (jQ(elNext1).length == 0) {
            elNext1 = jQ(elBanners).children('a[@rel="1"]');
            nextPosition = 1;
        }
        var elImg1 = jQ(elNext1).children('img');
        
        jQ(elBanners).children('a').removeClass('show').addClass('hide');
        
        if (jQ(elImg1).hasClass('big')) {
            jQ(elNext1).removeClass('hide').addClass('show');
        } else {
            var elNext2 = jQ(elBanners).children('a[@rel="' + (nextPosition+1) + '"]');
            if (jQ(elNext2).children('img').hasClass('small')) {
                jQ(elNext2).removeClass('hide').addClass('show');                                
            }
            jQ(elNext1).removeClass('hide').addClass('show');  
        }
    });
    
    
    // Nastavuje udalost na tlacitko predchozi
    
    
}

function keyPressSubmitStorno(p_event) {

    var result = false;

    nKeyCode = null;
    try {
        nKeyCode = p_event.keyCode;
    } catch(eException) {
        try {
            nKeyCode = p_event.which;
        } catch(eException2) {}
    }
 
    if(nKeyCode != 13) {
        result = true;
    }
    
    return result;
}

/**
 * Volani AJAX - specialni nabidky
 *
 * @param type Typ napovedy
 */
function viewHelp(type) {
    jQ.ajax({
        type: "GET",
        url: '/' + lng + '/info/helps.xml?page=' + type,
        dataType: "xml",
        
   
    /**
     * Spracovava stazeny dokument
     *
     * @param DOMobject dgData Data
     */
    success: function(dgData) {
    	var strContent = jQ('/root/content', dgData).text();
        jQ.alerts.okButton = "Close";
        jQ.alerts.overlayOpacity = 0.9;
        jQ.alerts.focusCancelButton = true;
        jAlert(strContent);
        
        jQ('#helpClose').click(function() {
            jQ('#popup_overlay, #popup_container').addClass('hide').removeClass('show');
        });

    },
    
    /**
     * Nastava pri espravnem stazeni dokumentu
     */
    error: function(xmlObject, errorMsg, exception) {}

 });
}

/**
 * Vraci objekt datumu z textoveho retezce
 *
 * @param string strDate
 * @return Date
 */
function getDateFromStr(strDate) {
	
	var testDate = null;
	
	var checkReg = RegExp('^(([0-3][0-9]|[0-9])\.([1]{1}[0-2]{1}|[0]{1}[1-9]{1}|[1-9]{1})\.[2]{1}[0]{1}[0-9]{2})$');
    if (checkReg.test(strDate) == true) {

       	var viewDate = new Date();
        var day, month, year = -1;
        
        var parseDate = strDate.split('.', 3);
   		for (var index in parseDate) {
			intValue = parseDate[index] * 1;
			index = index * 1;
			switch(index) {
				case 0:
				  //viewDate.setDate(intValue);
				  day = intValue;
				  break;
				case 1:
    			  intValue = intValue - 1; // Index mesice 0..11
				  month = intValue;					
				  //viewDate.setMonth(intValue);
				  break;
				case 2:
				    year = intValue;		
					//viewDate.setFullYear(intValue);
				  break;
			}
   		}
   		
   		if(day != -1 && month != -1 && year != -1) {
   		    viewDate = new Date(year, month, day);
   		}
   		
   		if ( 
   		    day == (viewDate.getDate() * 1) &&
   		    month == (viewDate.getMonth() * 1) &&
            year == (viewDate.getFullYear() * 1)
   		) {
   		    testDate = viewDate;
   		}
   	}

	return testDate;
}

function onEnterpress(e, elForm) {
    //define any varible
    var KeyPress;

    //if which property of event object is supported 

    if(e && e.which) {
        e = e;
        //character code is contained in NN4's which property
        KeyPress = e.which;
    } else {
        KeyPress = e.keyCode;
    }
      
    //13 is the key code of enter key
    if(KeyPress == 13) {
        //alert(navigator.userAgent.toLowerCase().indexOf('msie'));
        if (navigator.userAgent.toLowerCase().indexOf('msie') != '-1') {
            e.returnValue = false;
        } else {
            e.preventDefault();
        }
        /* e.preventDefault();
        if(document.preventDefault)
            e.preventDefault();
        else
            e.returnValue = false;*/
        return false;
    } else {
        return true
    }
}

function aagAlert(message) {
    jAlert(message, 'Warning');
}
