// JavaScript Document
/* [c] 2006 Svist21 s.r.o. (20061026 - marty) 
css:
    #mainForm label { color: #666; float:left; width: 180px; text-align:right; margin: 6px 10px 0 0; }
    #mainForm br    { clear: both; }
    #mainForm input,#mainForm textarea { margin-top:5px; width:180px; border:1px solid #999; padding: 1px 2px; background-color: #efefef;}
    #mainForm .chf-alert{ border:1px solid red; background-color: #fff;}
    #errmess { font: bold 13px Arial; color: red; visibility: hidden; padding-left: 190px;  }

header:
    <script charset="windows-1250" type="text/javascript" src="_rsrc/checkform.js"></script>


form: onsubmit="return checkform(this);"
    #blok pro chybovou hlasku
    <span id="errmess">Nevyplnil jste všecha povinná pole!</span><br />
    #carkami oddelene povinne pole a pole s emailem
    <input type="hidden" name="chf_reqfields" value="name,surname,address" />
    <input type="hidden" name="chf_emlfields" value="email,emailDoPrace" />

*/

/* function formcheck(form) - on submit request - projizdi formularove prvky a kontroluje, zda jsou vyplnene polozky uvedene v hidden prvku "chf_reqfields" */    
function checkform(form){
    var e = form.elements; //nacteni vsech elementu formulare
    var m = ''; //zprava
    var html = true; //alert nebo hlaska v tele stranky?
    var nl = html ? '<br />\n' : '\n'
    var spliter=/[ ,;]+/;  //regularni vyraz pro oddelovac pozadovanych nazvu poli
    if(e['chf_reqfields']){ //pokud je zname hidden pole 'chf_reqfields' s vyzadovanymi nazvy povinnych poli
        var rf=e['chf_reqfields'].value.split(spliter); //nacteni pozadovanych nazvu poli do array chf_reqfields (rf)
        //POVINNE PRVKY
        for(i=0;i<e.length;i++){
            if((e[i].type=='text' || e[i].type=='textarea' || e[i].type=='password') && inArray(rf,e[i].name) && e[i].value==''){
                m += 'Nevyplněné pole "'+e[i].title+'"'+nl;
                e[i].className = 'chf-alert';
                e[i].onkeypress = function onkeypress(event) { if(this.value!='') this.className = 'input'; hideAlert(form) } //document.getElementById('errmess').style.display = 'none';
            }else if(e[i].type=='select-one' && inArray(rf,e[i].name) && e[i].selectedIndex < 1 ){
                m += 'Nevybráno "'+e[i].title+'"'+nl; 
                e[i].className = 'chf-alert';
                e[i].onchange = function onchange(event) { if(this.selectedIndex>0) this.className = 'input'; hideAlert(form) } //document.getElementById('errmess').style.display = 'none';
            }else if(e[i].type=='checkbox' && e[i].checked==false){
                m += 'Neoznačeno "'+e[i].title+'"'+nl;
            }else if(e[i].type=='radio'){
                //radio se neresi
            }
        }
        //SYNTAXE EMAILU
        if(e['chf_emlfields']){ //pokud je zname hidden pole 'chf_emlfields' s vyzadovanymi nazvy povinnych poli
            var re=e['chf_emlfields'].value.split(spliter); //nacteni pozadovanych nazvu poli do array chf_emlfields (re)
            var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
            for(i=0;i<e.length;i++){
                if(inArray(re,e[i].name) && (e[i].value=='' || !filter.test(e[i].value))){
                    m += 'Nekorektní emailová adresa "'+e[i].title+'"'+nl;
                    e[i].className = 'chf-alert';
                    e[i].onkeypress = function onkeypress(event) { if(this.value!='') this.className = 'input'; hideAlert(form) } //document.getElementById('errmess').style.display = 'none';
                }
            }
        }
        if(m!='') { 
            //if(html) document.getElementById('errmess').style.display = 'block' //document.getElementById('errmess').innerHTML = m //document.getElementById('errmess2').style.display = 'block'
            if(html) document.getElementById('errmess').style.visibility = 'visible'
            else alert(m);
            return false; // message obsahuje nejake hlasky, cili se vyskytly nevyplnene pole, ret = false - formular se neodesle a zobrazi alert.
        }else{
            return true; // message (m) je prazdna, cili se nevyskytl pripad nevyplneneho povinneho pole, ret = true - formular se normalne odesle
        }
    }else{ //neni zname hidden pole 'reqfields' s vyzadovanymi nazvy povinnych poli - povolit odeslani formulare
        return true; //ve formulari nenalezen hidden tag s nazvem "chf_reqfields" s povinnymi policky, ret true = formular - normalne odejde
    }
}

/* function inArray(arr,val) - obdoba funkce z php, kdy se v array "arr" hleda hodnota "val", podle toho vraci true/false */
function inArray(arr,val){
    for(prop in arr){
        if(arr[prop]==val) return true;
    }
    return false;
}

/* function hideAlert(form) - projede formularove prvky a pokud je vse, co bylo puvodne nevypkneno jiz ok, skryje varovny text */
function hideAlert(form){
    var e = form.elements; //nacteni vsech elementu formulare
    var is = true;
    for(i=0;i<e.length;i++){
        if(e[i].className == 'chf-alert' && e[i].type == 'text'){
            if(e[i].value=='') is &= false
            else if(e[i].onkeypress) e[i].onkeypress = submit
        }else if(e[i].className == 'chf-alert' && e[i].type == 'select-one'){
            if(e[i].selectedIndex<1) is &= false
            else if(e[i].onchange) e[i].onchange = null;
        }
    }
    if(is){
        document.getElementById('errmess').style.visibility = 'hidden';
    }
}

