
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);
}




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 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;
}






var lang=document.getElementsByTagName("html")[0].lang?document.getElementsByTagName("html")[0].lang:"cs";




var browser=new Object();

browser.isIE=(navigator.appName=="Microsoft Internet Explorer" && 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(";"));
  }
}


browser.toString=function(){
  return listProperties(navigator);
}







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(el){
  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){

  wwi=wi;
  whe=he;
  if(wi>760)
  {
	  wwi=800;
	  wwi+=16;
	  winParams = "scrollbars=yes"
  }
  if(he>650)
  {
	  whe=650;
	  wwi+=16;
	  winParams = "scrollbars=yes"
  }

  var wL = (screen.width-wwi) / 2;
  var wT = (screen.height-whe) / 2;

  var win=window.open("","","width="+wwi+",height="+whe+",left="+wL+",top="+wT+(isUndefined(winParams)?"":(","+winParams)));
  if(typeof(win)!="object")return true;

  var cls=""
  var titl="";
  if(!isUndefined(closeTitle)){
    cls=closeTitle;
  }else{
    cls="Kliknutím zavřete 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(){

    if(!isUndefined(this.originalOnsubmit))this.originalOnsubmit();

    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(lang=="sk"){
      var imess="Následujúce poloľky majú chybný formát:";
      var emess="Následujúce poloľky neboly vyplneny:";
    }

    if(lang=="en"){
      var imess="The following items have invalid format:";
      var emess="The following items are 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="";


    for(var i=0;i<inps.length;i++){

      if(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;

            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){
              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;
    }

  }


}

FormValidator.prototype.registerInput=function(){
  this.inps[this.inps.length]=arguments;
}

var flash=function(){
	var objs=document.getElementsByTagName("object");
	var objl=objs.length;
	for(var i=0;i<objl;i++){
		var obj=objs[i];
		var parent=obj.parentNode;
		var html=obj.outerHTML;
		html=html.substring(0,html.indexOf("</"));
		var params=parent.getElementsByTagName("param");
		var parl=params.length;
		for(var j=0;j<parl;j++)html+=params[j].outerHTML;
		html+="</object>";
		obj.outerHTML=html;
		var nobjs=parent.getElementsByTagName("object");
		setDB(nobjs[0]);
	}
}


//alert(FormValidator)