var errstr=""; var parent="";
var xml = iajax(); var neRedrawCap=0;
function iajax(){
    var request = false;
    try {
	request = new XMLHttpRequest();
    } catch (trymicrosoft) {
	try {
	    request = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (othermicrosoft) {
	    try {
		request = new ActiveXObject("Microsoft.XMLHTTP");
	    } catch (failed) {
		request = false;
	    }  
	}
    }
    if (!request){
	alert("Error initializing XMLHttpRequest!");
	return false;
    }else{
	return request;
    }
}
function setph(mname){
    if(mname.value==mname.defaultValue){mname.value='';}
}

function regexp(mid){
    var re;
    re = new Array();
    if(mid=='email'){re[0] = /^[a-zA-Z0-9\-\._]+?@[a-zA-Z0-9\-\_\.]+?\.[A-Za-z0-9]{2,6}$/; re[1]="E-Mail набран неверно";}
    if(mid=='birthday'){
	re[0] = /^((0[1-9]|[1-2][0-9]|3[0-1])\.(01|03|05|07|08|10|12)|(0[1-9]|[1-2][0-9]|30)\.(04|06|09|11)|(0[1-9]|[1-2][0-9])\.02)\.(19|20)[0-9][0-9]$/;
	re[1] = "Дата набрана неверно";
	}
    if(mid=='fio'){re[0] = /^[А-ЯA-Z][a-zа-я]{2,30}\ [А-ЯA-Z][a-zа-я]{2,30}\ [А-ЯA-Z][a-zа-я]{2,30}$/; re[1]="FIO набран неверно";}
    if(mid=='username'){re[0] = /^[a-z0-9]+$/; re[1]="Имя пользователя должно содержать только маленькие латинские буквы и/или цифры";}
    if(mid=='phone'){re[0] = /(\d\d\d|)(-|)\d\d(-|)\d\d(\d|)$/; re[1]="Телефон указан неверно";} 
    if((mid=='password')||(mid=='password1')){re[0] = /^[A-Za-z0-9]{6,50}$/; re[1]="Пароль должен состоять только из латинских букв и цифр. Рекомендуем использовать пароль длиной не менее 6 знаков.";}
    if(mid=='acp'){re[0] = /on/; re[1]="Вы не согласились с правилами сайта";}
    if(mid=='captcha'){re[0] = /[a-z0-9]/; re[1]="Вы не ввели код с картинки";}
    return re;
}

function xmlprep(req,callback){
    var url = "/cgi-bin/ajax?"+req;
    xml.open("GET", url, true);
    xml.onreadystatechange = callback;
    xml.send(null);
}

function sxmlprep(req,callback){
    var url = "/cgi-bin/ajax?"+req;
    xml.open("GET", url, true);
    xml.onreadystatechange = callback;
    xml.send(null);
}


function ajaxCaptcha() {
    if (xml.readyState == 4){
	if (xml.status == 200){
	    var text = xml.responseText;
	    var tst = /cap_OK|cap_ERR/; var tst1 = /cap_ERR/;
	    var cap = tst.test(text); var err = tst1.test(text);
	    document.getElementById("cap").innerHTML=text;
	    if(!document.getElementById("cap")){return 0;}
	    if(text){
		document.getElementById("helper").style.display = 'none';
	    }
	    if((cap)&&(err)){
		document.getElementById("helper").style.display = '';
		document.getElementById("helper-text").innerHTML = 'Код введён неверно';
	    }
	    if((cap)&&(!err)){
		neRedrawCap=1;
	    }
	}
    }
}

function ajaxTexts() {
    if (xml.readyState == 4){
	if (xml.status == 200){
	    var text = xml.responseText;
	    var sStr = text.split("[%azsxd%]");
	    var urlid = sStr[1];
	    var close = sStr[2];
	    var status = sStr[3];
	    text = sStr[0];
	    if(close==1){
		document.getElementById("trid_"+urlid).style.display='none';
		document.getElementById("tdid_"+urlid).innerHTML='';
		document.getElementById("urlid_"+urlid).innerHTML=status;
	    }else{
		document.getElementById("trid_"+urlid).style.display='';
		document.getElementById("tdid_"+urlid).innerHTML=text;
	    }
	}
    }
}

function errPage() {
    if (xml.readyState == 4){
	if (xml.status == 200){
	    var text = xml.responseText;
	    if(!document.getElementById("helper")){return 0;}
	    if(text){
		document.getElementById("helper").style.display = '';
		document.getElementById("helper-text").innerHTML = text;
	    }else{
		document.getElementById("helper").style.display = 'none';
	    }
	}
    }
}

function m_errPage(text){
    if(text){
	if(!document.getElementById("helper")){return 0;}
	document.getElementById("helper").style.display = '';
	document.getElementById("helper-text").innerHTML = text;
    }else{
	document.getElementById("helper").style.display = 'none';
    }
}

function updatePage() {
    if (xml.readyState == 4){
	if (xml.status == 200){
    	    xmlprep("error="+encodeURI(xml.responseText),errPage);
	}
    }
}

function doCheckCap(mname){
    if(neRedrawCap){return 0;}
    if(!mname.value){return 0;}
    xmlprep("captcha="+mname.value+"&md5="+document.getElementById("cap_md5").value,ajaxCaptcha);
}

function unsetph(mname,doDB){
    var merr=0;
    var mid = mname.id || mname.name;
    if(mname.value==''){mname.value=mname.defaultValue}
    var re = regexp(mid);
    if(re!=''){
        var result=re[0].test(mname.value);
        if(!result){
	    merr=1;
    	    mname.style.color="#FF0000";
	    m_errPage(re[1]);
	}else{mname.style.color="#000000";}
    }
    if((mname.value==mname.defaultValue)&&(!merr)){
	merr=1;
        mname.style.color="#FF0000";
        m_errPage("Значение поля не должно быть: \""+mname.defaultValue+"\"");
    }
    if(!merr){mname.style.color="#000000";}
    if((doDB)&&(!merr)){
	xmlprep("authch="+mid+"&value="+encodeURI(mname.value),updatePage);
    }
}

function checkform(xname){
    var err=0; var pass1=0; var pass2=0; var passadr=0; var mname; var agree=0;
    if(!xname.elements){
	mname=document.getElementById(xname);
    }else{
	mname=xname;
    }

   for(i=0; i<25; i++){
	if ((mname.elements[i])&&((mname.elements[i].type == "text")||(mname.elements[i].type == "password")||(mname.elements[i].type == "checkbox"))){
	    var mid = mname.elements[i].id || mname.elements[i].name;
	    var re = regexp(mid);
	    if(re==''){continue;}
	    var result=re[0].test(mname.elements[i].value);
	    if(!result){
		err=1;
		mname.elements[i].style.color="#FF0000";
	    }
	    if(mname.elements[i].value==mname.elements[i].defaultValue){
		err=1;
		mname.elements[i].style.color="#FF0000";
	    }
	    if(mname.elements[i].type == "password"){
		if(pass1){
		    if(pass1 != mname.elements[i].value){
			err=1;
			mname.elements[passadr].style.color="#FF0000";
			mname.elements[i].style.color="#FF0000";
			alert("Пароли не совпадают!");
		    }
		}else{
		    pass1=mname.elements[i].value;
		    passadr=i;
		}
	    }
	    if((mid=='acp')&&(!mname.elements[i].checked)){
		document.getElementById('acp').style.border="1px solid red";
		err=1;
		alert("Вы не согласились с правилами");
	    }
	    if((mid=='captcha')&&(!neRedrawCap)){
		err=1;
		alert("Вы не ввели код с картинки");
	    }
	}
   }

    if(err==1){
	alert("Форма заполнена с ошибками. Поажлуйста, обратите внимания на поля, значения которых выделены красным");
	return false;
    }else{
	return mname.submit();
    }
}

function onoff(name){
    var reg = /^cap/;
    var re = reg.test(name);
    if(re){
	xmlprep("captcha=1",ajaxCaptcha);
	document.getElementById("cap").innerHTML;
    }
    if(document.getElementById(name).style.display=='none'){document.getElementById(name).style.display='';}
    else{document.getElementById(name).style.display='none'}
}


var pname;

function ajaxSearch(){
    if (xml.readyState == 4){
	if (xml.status == 200){
	    var text = xml.responseText;
	    if(!document.getElementById(pname)){return 0;}
	    if(text){
		document.getElementById(pname+"h").style.display='';
		document.getElementById(pname+"h").innerHTML = text;
	    }else{
		document.getElementById(pname+"h").style.display = 'none';
	    }
	}
    }

}

function sh(mname,table,row){
    pname = mname.name;
    sxmlprep("search="+table+"&row="+row+"&string="+mname.value+"%&mname="+mname.name,ajaxSearch);
}

function dubsrch(url){
    xmlprep(url,ajaxTexts);
}

function pause(ms)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < ms);
}

function sel(field,val)
{
    document.getElementById(field).value=val;
    document.getElementById(field+"h").style.display='none';
    document.getElementById(field+"s").value="* Описание будет подключено";
    document.getElementById(field+"s").readOnly='true';
    document.getElementById(field+"s").style.background='#cfcfcf';
    document.getElementById(field+"f").value="* Описание будет подключено";
    document.getElementById(field+"f").readOnly='true';
    document.getElementById(field+"f").style.background='#cfcfcf';
    document.getElementById(field+"z").style.display='none';
}

function submitlet(let,form)
{
    document.getElementById(form+"_hidden").innerHTML = "<input type='hidden' name='"+form+"' value='"+let+"'>";
    document.getElementById(form).submit();
}

function sub(req,f){
    var srch=getFormValues(f,"validate");
    if(srch){
	xmlprep(req+'&'+getFormValues(f,"validate")+"&ch=1",ajaxTexts);
    }else{
	xmlprep(req+'&'+"ch=1",ajaxTexts);
    }
}

function getFormValues(fobj,valFunc)
{
    var str = "";
    var valueArr = null;
    var val = "";
    var cmd = "";
    var req = new Array();
    for(var i = 0;i < fobj.elements.length;i++)
    {
	switch(fobj.elements[i].type)
	{
	    case "hidden":
		var re = /chk(\d+)/;
		if(re.test(fobj.elements[i].name)){
		    req.push(fobj.elements[i].name+'=1');
		}
	    break;
	    case "radio":
		if((fobj.elements[i].name)&&(fobj.elements[i].checked)&&(fobj.elements[i].value>'0')){
		    req.push(fobj.elements[i].name+'='+fobj.elements[i].value);
		}
		break;
	    case "checkbox":
		if((fobj.elements[i].name)&&(fobj.elements[i].checked)){
		    req.push(fobj.elements[i].name+'=1');
		}
		break;

	}
    }
    str = req.join('&');
    return str;
}

function chckall(objid)
{
    var fobj = document.getElementById(objid);

    var str; var check=0;
    for(var i = 0;i < fobj.elements.length;i++)
    {
	switch(fobj.elements[i].type)
	{
	    case "checkbox":
		if((fobj.elements[i].name == "checkall")&&(fobj.elements[i].checked)){
		    check=1;
		}
		if((fobj.elements[i].name)&&(check)&&(!fobj.elements[i].checked)){
		    fobj.elements[i].checked=true;
		}
		if((fobj.elements[i].name)&&(!check)&&(fobj.elements[i].checked)){
		    fobj.elements[i].checked=false;
		}
    	    break;
	}
    }
}

function chckallc(objid)
{
    var fobj = document.getElementById(objid);

    var str; var check=0;
    for(var i = 0;i < fobj.elements.length;i++)
    {
	switch(fobj.elements[i].type)
	{
	    case "checkbox":
		if((fobj.elements[i].name == "checkall")&&(fobj.elements[i].checked)){
		    check=1;
		}
		if((fobj.elements[i].name)&&(check)&&(!fobj.elements[i].checked)){
		    fobj.elements[i].checked=true;
		    alert(fobj.elements[i].value);
		}
		if((fobj.elements[i].name)&&(!check)&&(fobj.elements[i].checked)){
		    fobj.elements[i].checked=false;
		}
    	    break;
	}
    }
}


function setCookie (name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

function Cookies(secure)
{
    var allcookies = this.document.cookie;
    var cook = allcookies.split(';');
    var length = cook.length; var html;
    for (var i = 0; i < length; i++){
	var spl = cook[i].split('_');
	if(spl[0] == ' urlid'){
	    var url_id = spl[1];
	    var adurl = spl[2];
	    var sess = spl[3].split('=');
	    var mysess = sess[0];
	    var id = sess[1];
	    var val = unescape(spl[4]);
	    var oval = val;
	    if(val == '!'){val = 0;}
	    if(secure==mysess){
		var tr = document.getElementById('odd'+id);
		if(!tr){tr = document.getElementById('odd'+url_id);}
		if(tr){
		    tr.style.background='#efefef';
		    document.getElementById('urlid'+url_id).options.selectedIndex = val;
		    document.getElementById('chck'+url_id).checked = true;
		}else{
		    if(html){html = html+"<input type=hidden name=urlid"+url_id+" value="+adurl+"_"+oval+">"+"<input type=hidden name=chck"+url_id+" value=\"on\">\n";}
		    else{html = "<input type=hidden name=urlid"+url_id+" value="+adurl+"_"+oval+">"+"<input type=hidden name=chck"+url_id+" value=\"on\">\n";}
		}
	    }
	}
    }
    if(html){
	document.getElementById("dubler").innerHTML=html;
    }
}

function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
    	offset = cookie.indexOf(search);
    	if (offset != -1) {
    	    offset += search.length;
    	    end = cookie.indexOf(";", offset)
    	    if (end == -1) {
    	    	end = cookie.length;
    	    }
    	    setStr = unescape(cookie.substring(offset, end));
    	}
    }
    return(setStr);
}

function checkBox(obj,id,url_id,srchid,adurl){
    if(obj.checked){
	var val = document.getElementById('urlid'+url_id).options.selectedIndex;
	if(val == 0){val='!';}
	if(document.getElementById('odd'+id)){document.getElementById('odd'+id).style.background='#efefef';}
	if(document.getElementById('odd'+url_id)){document.getElementById('odd'+url_id).style.background='#efefef';}
	val = id+'_'+val;
	setCookie('urlid_'+url_id+"_"+adurl+"_"+srchid,val,'','','',''); 
    }else{
	if(document.getElementById('odd'+id)){document.getElementById('odd'+id).style.background='#f5ffd9';}
	if(document.getElementById('odd'+url_id)){document.getElementById('odd'+url_id).style.background='#f5ffd9';}
	setCookie('urlid_'+url_id+"_"+adurl+"_"+srchid,'0','','','','');
    }
}
function sprintf( ) {    // Return a formatted string
    // 
    // +   original by: Ash Searle (http://hexmen.com/blog/)
    // + namespaced by: Michael White (http://crestidg.com)
 
    var regex = /%%|%(\d+\$)?([-+#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
    var a = arguments, i = 0, format = a[i++];
 
    // pad()
    var pad = function(str, len, chr, leftJustify) {
        var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
        return leftJustify ? str + padding : padding + str;
    };
 
    // justify()
    var justify = function(value, prefix, leftJustify, minWidth, zeroPad) {
        var diff = minWidth - value.length;
        if (diff > 0) {
            if (leftJustify || !zeroPad) {
            value = pad(value, minWidth, ' ', leftJustify);
            } else {
            value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
            }
        }
        return value;
    };
 
    // formatBaseX()
    var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
        // Note: casts negative numbers to positive ones
        var number = value >>> 0;
        prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
        value = prefix + pad(number.toString(base), precision || 0, '0', false);
        return justify(value, prefix, leftJustify, minWidth, zeroPad);
    };
 
    // formatString()
    var formatString = function(value, leftJustify, minWidth, precision, zeroPad) {
        if (precision != null) {
            value = value.slice(0, precision);
        }
        return justify(value, '', leftJustify, minWidth, zeroPad);
    };
 
    // finalFormat()
    var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
        if (substring == '%%') return '%';
 
        // parse flags
        var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false;
        for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
            case ' ': positivePrefix = ' '; break;
            case '+': positivePrefix = '+'; break;
            case '-': leftJustify = true; break;
            case '0': zeroPad = true; break;
            case '#': prefixBaseX = true; break;
        }
 
        // parameters may be null, undefined, empty-string or real valued
        // we want to ignore null, undefined and empty-string values
        if (!minWidth) {
            minWidth = 0;
        } else if (minWidth == '*') {
            minWidth = +a[i++];
        } else if (minWidth.charAt(0) == '*') {
            minWidth = +a[minWidth.slice(1, -1)];
        } else {
            minWidth = +minWidth;
        }
 
        // Note: undocumented perl feature:
        if (minWidth < 0) {
            minWidth = -minWidth;
            leftJustify = true;
        }
 
        if (!isFinite(minWidth)) {
            throw new Error('sprintf: (minimum-)width must be finite');
        }
 
        if (!precision) {
            precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
        } else if (precision == '*') {
            precision = +a[i++];
        } else if (precision.charAt(0) == '*') {
            precision = +a[precision.slice(1, -1)];
        } else {
            precision = +precision;
        }
 
        // grab value using valueIndex if required?
        var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
 
        switch (type) {
            case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad);
            case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
            case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
            case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
            case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
            case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
            case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
            case 'i':
            case 'd': {
                        var number = parseInt(+value);
                        var prefix = number < 0 ? '-' : positivePrefix;
                        value = prefix + pad(String(Math.abs(number)), precision, '0', false);
                        return justify(value, prefix, leftJustify, minWidth, zeroPad);
                    }
            case 'e':
            case 'E':
            case 'f':
            case 'F':
            case 'g':
            case 'G':
                        {
                        var number = +value;
                        var prefix = number < 0 ? '-' : positivePrefix;
                        var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
                        var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
                        value = prefix + Math.abs(number)[method](precision);
                        return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
                    }
            default: return substring;
        }
    };
 
    return format.replace(regex, doFormat);
}

function fastproj(objSel)
{
    var id;
    if ( objSel.selectedIndex != -1){
	id = objSel.options[objSel.selectedIndex].value;
    }
    var re = /_/;
    if(result = re.test(id)){
	id = id.replace(re,"");
	location.replace("/?xset=1&url=1&proj="+id);
    }else{
	location.replace("/?proj="+id);
    }
}
