function $(id) {return document.getElementById(id);}
function max(a,b) {return (a>b)?a:b;}
function checkmessage()
{
	tl= $('textlable');
	ta= $('message');
	maxlen= (-1==ta.value.search(/[а-яА-Я]/))?160:68;
	if (ta.value.length>maxlen) ta.value= ta.value.substr(0,maxlen);
	tl.innerHTML= maxlen-ta.value.length+' символов';
}

function ifs () {
	for (var i=0; i<arguments.length; i++) if (arguments[i]) return arguments[i];
	return '';
}
function getParentByTag (el, tag) {do if (el.tagName==tag) return el; while (el= el.parentNode)}
function isClass (el, cl) {return el.className && el.className.search(RegExp('\\b'+cl+'\\b'))!=-1;}
function replaceClass (el,cl1,cl2) {
	var cname= el.className;
    if (cname) {
        el.className= cname.replace (RegExp('\\b'+cl1+'\\b'),cl2);
    }
    return el.className!=cname;
}
function swapClass (el,cl1,cl2) {
	var cname= el.className
    if (cname) {
        el.className= cname.replace (RegExp('\\b'+cl1+'\\b'),cl2);
        if (el.className!=cname) return true;
        el.className= cname.replace (RegExp('\\b'+cl2+'\\b'),cl1);
        if (el.className!=cname) return true;
    }
    return false;
}
function getParentWithClass (el,cl) {
    do if (isClass(el,cl)) return el;
    while (el= el.parentNode);
    return null;
}
function vardump(obj) {
    var a= new Array();
    for (var p in obj) a[a.length]= p;
    a.sort();
    var w= window.open ('','vardumper');
    w.document.write('<dl><dt>'+obj+'</dt>');
    for (var i=0; i<a.length; i++) w.document.write('<dd>'+a[i]+'<i>= '+obj[a[i]]+'</i></dd>');
    w.document.write('</dl>');
    w.document.onclick= function () {w.close();};
}
function zFormCheck (evt) {
    var form= evt?(evt.currentTarget?evt.currentTarget:evt):getParentByTag(event.srcElement,'FORM');
    var fields= [];
    var submit= null;
    function addels(els) {
        //alert(els);
        for (var i=0; i<els.length; i++) {
            switch (els[i].type) {
                case 'reset': if (!els[i].onclick) els[i].onclick= function () {setTimeout('zAllFormsCheck();',1000);}; break;
                case 'submit': submit= els[i]; break;
                case 'checkbox': fields[fields.length]= {el:els[i], val:els[i].checked}; break;
                default: fields[fields.length]= {el:els[i], val:els[i].value}; break;
            }//zAllFormsCheck();
        }
    }
    addels (form.getElementsByTagName('input'));
    addels (form.getElementsByTagName('textarea'));
    addels (form.getElementsByTagName('select'));
    var wrongels= [];    
    for(i=0; i<fields.length; i++)
    {
        var inp= fields[i];
        var wrong= (isClass(inp.el,'z-mustbe') && (inp.val===false || inp.val.length===0)) ||
            (inp.val.length && (
               (isClass(inp.el,'z-email') && inp.val.search(/^[-\w.]+\@([-\w]+\.)+[-\w]+$/i)) ||
               (isClass(inp.el,'z-phrase') && inp.val.search(/\S+\s+\S+\s+\S+/i)<0) ||
               (isClass(inp.el,'z-natnumb') && inp.val.search(/^[\d ]+$/i)) ||
               (isClass(inp.el,'z-intnumb') && inp.val.search(/^-?[\d ]+$/i)) ||
               (isClass(inp.el,'z-realnumb') && inp.val.search(/^-?[\d ]*(?:\.|\,)?[\d ]*$/i))
            ));
        var mel= getParentWithClass(inp.el, 'z-mood');
        if (mel) {
            if (wrong) replaceClass(mel,'z-good','z-bad');
            else replaceClass(mel,'z-bad','z-good');
        }
        if (wrong) wrongels[wrongels.length]= inp;
    }
    submit.disabled= wrongels.length;
}
function zAllFormsCheck () {
    var forms= document.getElementsByTagName('form');
    for (i=0; i<forms.length; i++) {
        form= forms[i];
        if (isClass(form,'z-form')) {
            if (!form.onclick) form.onclick= zFormCheck;
            if (!form.onmouseup) form.onmouseup= zFormCheck;
            if (!form.onkeyup) form.onkeyup= zFormCheck;
            zFormCheck(form);
        }
    }
}
window.onload= function() {
	zAllFormsCheck();
};
