function isNull(a){
  return (typeof(a)=="object" && !a);
}



function isUndefined(a){
  return typeof(a)=="undefined";
} 



function isFunction(a){
  return typeof(a)=="function";
}



function cloneObject(a){
  for(pr in a)if(typeof(a[pr])=="object")this[pr]=new cloneObject(a[pr]);else this[pr]=a[pr];
}


function listProperties(obj){
  var lst="";
  for(var prop in obj)if(typeof obj[prop]!="function")lst+=prop+": "+obj[prop]+"\n";
  return lst;
}
 

Object.prototype.listProperties=function(){
  return listProperties(this);
}



function listMethods(obj,full){
  var lst="";
  for(var prop in obj)if(typeof obj[prop]=="function")lst+=prop+": "+obj[prop]+"\n";
  if(full)return lst;
  var lst2="";
  var fceRE=browser.isIE?/(.*): function(\([^\{]+)\{/g:/(.*):\s+\ *function\s*(.*)\{/g;
  while(result=fceRE.exec(lst)){
    lst2+=result[1]+result[2]+"\n";
  }
  return lst2;
}


Object.prototype.listMethods=function(full){
  return listMethods(this,full);
}



 var s=" ®?¾µ©?¹±Ýý«?»?ÀÁÂÃÄÅàáâãä¾åÒÓÔÕÖØøòóôõöøÈÉÊËèéêëÇçÌÍÎÏïìíîïÙÚÛÜùúûüýÑòñ.";var d="-ZZzzSSssYyTTttRAAAALraaaallNOOOORprnoooorCEEEceeeCcEIIDdeiihdUUUUuuuuyNnnz---";





var gang=document.getElementsByTagName("html")[0].lang?document.getElementsByTagName("html")[0].lang:"cs";



var msie="Microsoft Internet Explorer";
var maxthon="Maxthon";


var browser=new Object();

browser.isIE=(navigator.appName==msie && navigator.userAgent.indexOf("Opera")<0)?true:false;
browser.isOpera=navigator.userAgent.indexOf("Opera")>0?true:false;
browser.isMozilla=navigator.product=="Gecko"?true:false;

browser.getIEversion=function(){
  if(!browser.isIE)return 0; else {
    var ver=navigator.appVersion;
    ver=ver.substring(ver.indexOf("MSIE")+4);
    return ver.substring(0,ver.indexOf(";"));
  }
}



function trim(inpstr){
  return inpstr.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1");
}



String.prototype.trim=function(){
  return trim(this);
} 


function isMail(inpstr){
  return /^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/.test(inpstr);
}



String.prototype.isMail=function(){
  return isMail(this);
} 



function isISOdate(inpstr){
  return /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/.test(inpstr); 
}



function isCzechDate(inpstr){
  return /^([0-9]{1,2}\.){2}[0-9]{4}$/.test(inpstr);
}



function isPosInt(inpstr){
return /^[0-9]+$/.test(inpstr);
}



function is9numbers(inpstr){
return /^[0-9]{9}$/.test(inpstr.replace(/\ /g,""));
}



function czech2ISOdate(inpstr){
  return inpstr.replace(/^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$/,"$3-$2-$1");
}



function ISO2czechDate(inpstr){
return inpstr.replace(/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$/,"$3.$2.$1");
}




function getIm(){
  return new Image();
}


function getElementsByClassName(parEl,clsName,tagName){
  if(typeof(parEl)=="string")parEl=getEl(parEl);
  if(isUndefined(tagName))tagName="*";
  var outp=new Array();
  var els=parEl.getElementsByTagName(tagName);
  for(var i=0;i<els.length;i++){
    if(new RegExp("\ *"+clsName+"\ *","gi").test(els[i].className))outp[outp.length]=els[i];
  }
  return outp;
}



function getAttributesByClassName(parEl,clsName,tagName,attName){
  if(typeof(parEl)=="string")parEl=getEl(parEl);
  if(isUndefined(tagName))tagName="*";
  var outp=new Array();
  var els=parEl.getElementsByTagName(tagName);
  for(var i=0;i<els.length;i++){
    if(new RegExp("\ *"+clsName+"\ *","gi").test(els[i].className))outp[outp.length]=els[i][attName];}return outp;}
getActualPath=function(){};



function getElementsByTagNames(el){
  var out=[];
  var al=arguments.length;
  for(var i=1;i<al;i++){
    var tmpa=el.getElementsByTagName(arguments[i]);

    var tmpal=tmpa.length;
    for(var j=0;j<tmpal;j++)out.push(tmpa[j]);
  }
  
  return out;
}





browser.toString=function(){
  return listProperties(navigator);
}




  
  
 
   
   var encodeHTML=function(str){
    str=str.replace(/&/ig,"&amp;");
   	str=str.replace(/</ig,"&lt;");
   	str=str.replace(/\>/ig,"&gt;");
  	 str=str.replace(/\x22/ig,"&quot;");
   	return str;
  }  
  



function getEl(elid){
  return document.getElementById(elid);
}



function getViewportHeight(){
  if(window.innerHeight)return parseInt(window.innerHeight);
  else if(document.documentElement && document.documentElement.clientHeight)return parseInt(document.documentElement.clientHeight);
  else if(document.body && document.body.clientHeight)return parseInt(document.body.clientHeight);
}



function getViewportWidth(){
  if(window.innerWidth)return parseInt(window.innerWidth);
  else if(document.documentElement && document.documentElement.clientWidth)return parseInt(document.documentElement.clientWidth);
  else if(document.body && document.body.clientWidth)return parseInt(document.body.clientWidth);
}



function getElementHeight(el){
  if(typeof(el)=="string")el=getEl(el);
  if(browser.isIE)return parseInt(el.offsetHeight);
  else return parseInt(document.defaultView.getComputedStyle(el,"").getPropertyValue("height"));
}



function getElementWidth(el){
  if(typeof(el)=="string")el=getEl(el);
  if(browser.isIE)return parseInt(el.offsetWidth);
  else return parseInt(document.defaultView.getComputedStyle(el,"").getPropertyValue("width"));
}



function findPosX(el){
 if(typeof(el)=="string")el=getEl(el);
  var curleft=0;
  if(el.offsetParent){
    while(el.offsetParent){
      curleft+=el.offsetLeft;
      el=el.offsetParent;
    }
  }else if(el.x)curleft+=el.x;
  return parseInt(curleft);
}



function findPosY(el){
 if(typeof(el)=="string")el=getEl(el);
  var curtop=0;
  if(el.offsetParent){
    while(el.offsetParent){
      curtop+=el.offsetTop
      el=el.offsetParent;
    }
  }else if(el.y)curtop+=el.y;
  return parseInt(curtop);
}



function clipEl(el,l,t,r,b){
  if(typeof(el)=="string")el=getEl(el);
  el.style.clip="rect("+t+"px,"+(getW(elid)-r)+"px,"+(getH(elid)-b)+"px,"+l+"px)";
}


 
function setDN(){
  var al=arguments.length;
  for(var i=0;i<al;i++){
    var el=arguments[i];
    if(typeof(el)=="string")el=getEl(el);
    el.style.display="none";
  }
}



function setDB(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.display="block";
}



function setDI(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.display="inline";
}



function setVH(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.visibility="hidden";
}



function setVV(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.visibility="visible";
}



function setTrDB(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.display=browser.isIE?"block":"table-row";
}



function swapDisplay(el){
  if(typeof(el)=="string")el=getEl(el);
  el.style.display=el.style.display=="none"?"block":"none";
}



function killTeckos(){
  window.focus();
}



function picWin(url,wi,he,title,winParams,closeTitle){
  var win=window.open("","","width="+wi+",height="+he+(isUndefined(winParams)?"":(","+winParams)));
  if(typeof(win)!="object")return true;

  var posLeft=Math.round((screen.width-wi)/2);
  var posTop=Math.round((screen.height-he)/2);
  var cls=""
  var titl="";
  if(!isUndefined(closeTitle)){
    cls=closeTitle;
  }else{
    if(gang=="en")cls="Click to close the window"; else cls="Kliknutm zavete okno"; 
  }
  if(!isUndefined(title))titl=title;

  var html='<html><head><title>'+titl+'</title><meta http-equiv="content-type" content="text/html; charset=iso-8859-2"></head><body style="margin:0"><img src="'+url+'" style="cursor:pointer;cursor:hand;display:block;" width="'+wi+'" height="'+he+'" onclick="window.close()" alt="" title="'+cls+'"></body></html>';

  win.document.open();
  win.document.write(html);
  win.document.close(); 
  win.focus();
 
  return false;
}









function FormValidator(el,mode,errClass){
  var mailRE=/^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;
  var iso_dateRE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
  var czech_dateRE=/^([0-9]{1,2}\ *\.){2}\ *[0-9]{4}$/;
  var phoneRE=/^(\ *[0-9]\ *){9}$/;
  var intRE=/^[0-9]+$/;




  

  this.mode=isUndefined(mode)?1:mode;
  if(this.mode==1)this.errClass=isUndefined(errClass)?"error":errClass;


  if(typeof(el)=="string")el=getEl(el);
  this.inps=new Array();
  
  if(isFunction(el.onsubmit))el.originalOnsubmit=el.onsubmit;

  this.labels=new Array();
    var labelEls=el.getElementsByTagName("label");
    for(var i=0;i<labelEls.length;i++){
      if(!isUndefined(labelEls[i].htmlFor) && labelEls[i].htmlFor!="")this.labels[labelEls[i].htmlFor]=labelEls[i].firstChild.data;
    }
    

 
  
  el.checkform=this;  
  
  
  
  
  
  
  el.onsubmit=function(){



    
    var emptys=new Array();
    var invalids=new Array();

    var imess="Následující polo¾ky mají chybný formát:";
    var emess="Následující polo¾ky nebyly vyplnìny:";

    if(gang=="en"){
      var imess="The following items have invalid format:";
      var emess="The following items are required:";
    }
    
    var imess_0='Polo¾ka "%" má chybný formát';
    var emess_0='Polo¾ka "%" není vyplnìna';
    if(gang=="en"){
      var imess_0='The item "%" has incorrect format';
      var emess_0='The item "%" is required';
    }
    
    
    
    var inps=this.checkform.inps;
    
    var modeEnabled=function(mode,modearray){
      for(var i=0;i<modearray.length;i++){
        if(modearray[i]==mode)return true; 
      }
      return false;
    }

   
    var alrt="";
    var valEnabled=isUndefined(window.top.ep)?config["CORE"]["FORM_VALIDATION"]:window.top.ep.config["CORE"]["FORM_VALIDATION"];
    
    for(var i=0;i<inps.length;i++){
      
      


      if(valEnabled && (isUndefined(inps[i][4]) || eval(inps[i][4]))){
    
        if(typeof(inps[i][0])=="string")inps[i][0]=getEl(inps[i][0]);
        var el=inps[i][0];
        var mode=inps[i][1].toLowerCase().replace(/\ /gi,"");
        

        var modesdef=["require","validate"];


        var modes=mode.split("&");

        for(var j=0;j<modesdef.length;j++)eval("var mode_"+modesdef[j]+"="+(modeEnabled(modesdef[j],modes)?"true":"false"));
      
        var type=inps[i][2];
        if(typeof type=="string" && type.trim()!="")var typeRE=eval(type+"RE");else var typeRE=type;

        var label="";
        if(!isUndefined(inps[i][3]) && !isNull(inps[i][3]))label=inps[i][3]; else if(!isUndefined(this.checkform.labels[el.id]))label=this.checkform.labels[el.id]; 
        
        
        
        
        if(mode_require){
          if(el.value.trim()==""){
            emptys[emptys.length]=label;
            
            if(this.checkform.mode==0){
              alert(emess_0.replace(/%/,label));
              el.focus();
              return false;
            }
            el.className+=" "+el.form.checkform.errClass;
            if(isFunction(el.onchange))el.originalOnchange=el.onchange;
              var nF=new Function('if(isFunction(this.originalOnchange) && isUndefined(this.originalOnchange.chfempty))this.originalOnchange();if(this.value.trim()!="")this.className=this.className.replace(/\ *'+el.form.checkform.errClass+'\ */gi,"");else if(this.className.indexOf("error")==-1)this.className+="'+el.form.checkform.errClass+'";');
              nF.chfempty=true;            
              el.onchange=nF;

          }
        }
        
        
        
        if(mode_validate){
          if(el.value.trim()!="" && !typeRE.test(el.value)){
            invalids[invalids.length]=label;
             if(this.checkform.mode==0){
              alert(imess_0.replace(/%/,label));
              el.focus();
              return false;
            }

            el.className+=" "+el.form.checkform.errClass;
            if(isFunction(el.onchange))el.originalOnchange=el.onchange;
              var nF=new Function('if(isFunction(this.originalOnchange) && isUndefined(this.originalOnchange.chfinvalid))this.originalOnchange();if(this.value.trim()!="" && '+typeRE+'.test(this.value))this.className=this.className.replace(/\ *'+el.form.checkform.errClass+'\ */gi,"");');
              nF.chfinvalid=true;            
              el.onchange=nF;

          }
        }
        
        
      }
    }
    
    
    
    if(emptys.length>0 || invalids.length>0){
      if(emptys.length>0){
        alrt+=emess+"\n\n";
        for(var i=0;i<emptys.length;i++)alrt+=emptys[i]+"\n";
      }  

      if(invalids.length>0){
        if(emptys.length>0)alrt+="\n\n";
         alrt+=imess+"\n\n";
        for(var i=0;i<invalids.length;i++)alrt+=invalids[i]+"\n";
      }  
    
    
      alert(alrt);
      return false;
    }
    
        if(!isUndefined(this.originalOnsubmit))return this.originalOnsubmit();

  }
   

  
  
}





function AJAX(){

  var req=false;
  
  if(window.XMLHttpRequest){ 
    req=new XMLHttpRequest();
    if(req.overrideMimeType)req.overrideMimeType("text/xml");
  }else if(window.ActiveXObject){
    try{
      req=new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      try{
        req=new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){}
    }
  }

  
  
  if(!req){
    alert("Fatal AJAX error");
    return false;
  }
  

  
  this.setFinalMethod=function(fce){
  

    req.onreadystatechange=function(){
    if(req.readyState==4)fce(req.status);
    };
  }

  
  this.request=function(method,url,params,async){
    if(method.toUpperCase()=="POST"){
      req.open("POST",url);
      if(!isUndefined(params))req.send(params);

    }else req.open(method.toUpperCase(),url+(isUndefined(params)?"":"?"+params),(async || true))
    req.send(null);
  }
  
  
  this.getResponseText=function(){
    return req.responseText;
  }
  
  this.getResponseObject=function(){
    return req.responseXML;
  }

  
}







FormValidator.prototype.registerInput=function(){
  this.inps[this.inps.length]=arguments;
}


