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 tree_toggle(event) {
	event = event || window.event
	var clickedElem = event.target || event.srcElement

	if (!hasClass(clickedElem, 'Expand')) {
		return // клик не там
	}

	// Node, на который кликнули
	var node = clickedElem.parentNode
	if (hasClass(node, 'ExpandLeaf')) {
		return // клик на листе
	}

	// определить новый класс для узла
	var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'
	// заменить текущий класс на newClass
	// регексп находит отдельно стоящий open|close и меняет на newClass
	var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/
	node.className = node.className.replace(re, '$1'+newClass+'$3')

}

function ftree_toggle(event) {
	event = event || window.event
	var clickedElem = event.target || event.srcElement

	if (!hasClass(clickedElem, 'FExpand')) {
		return // клик не там
	}

	// Node, на который кликнули
	var node = clickedElem.parentNode
	if (hasClass(node, 'FExpandLeaf')) {
		return // клик на листе
	}

	// определить новый класс для узла
	var newClass = hasClass(node, 'FExpandOpen') ? 'FExpandClosed' : 'FExpandOpen'
	// заменить текущий класс на newClass
	// регексп находит отдельно стоящий open|close и меняет на newClass
	var re =  /(^|\s)(FExpandOpen|FExpandClosed)(\s|$)/
	node.className = node.className.replace(re, '$1'+newClass+'$3')

}

function hasClass(elem, className) {
	return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
}

function xsetph(mname,df){
    if(mname.value==df){mname.value='';}
}

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=='name'){re[0] = /^[А-ЯA-Z][a-zа-я]{2,30}$/; re[1]="Имя набрано неверно";}
    if(mid=='sname'){re[0] = /^[А-ЯA-Z][a-zа-я]{2,30}$/; re[1]="Фамилия набрана неверно";}
    if(mid=='fname'){re[0] = /^[А-ЯA-Z][a-zа-я]{2,30}$/; re[1]="Отчество набрана неверно";}
    if(mid=='username'){re[0] = /^[a-z0-9]+$/; re[1]="Имя пользователя должно содержать только маленькие латинские буквы и/или цифры";}
    if(mid=='phone'){re[0] = /\d\d\d(-|)\d\d(-|)\d\d$/; re[1]="Телефон указан неверно";} 
    if((mid=='password')||(mid=='password1')){re[0] = /^[A-Za-z0-9]+$/; re[1]="Пароль должен состоять только из латинских букв и цифр";}
    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;
//    document.getElementById("helper").style.display = '';
//    document.getElementById("helper-text").innerHTML = "идёт проверка...<br>(это окно можно закрыть)";
    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 mxmlprep(req,callback){
    var url = req;
    xml.open("GET", url, true);
    xml.onreadystatechange = callback;
    xml.send(null);
}

/*
function split_form(myform){
    data = new Array();
    for(i = 0; i < myform.length; i++){
	data[myform.elements[i].name] = myform.elements[i].value;
    }
    return data;
}

function postxml(myform,req,callback){
    var url = req;
    data = split_form(myform);
    xml.open("POST", url, true);
    if (xml.setRequestHeader){
	xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xml.setRequestHeader("Referer", location.href);
    }
    xml.onreadystatechange = callback;
    xml.send(urlEncodeData(data));
}
*/
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 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 xunsetph(mname,def,reg,info){
    var re = new RegExp(reg);
    var merr=0;
    if((mname.value=='')&&(def != "NULL")){mname.value=def}
    if(reg!=''){
        var result=re.test(mname.value);
        if(!result){
	    merr=1;
    	    mname.style.color="#FF0000";
	    m_errPage(info);
	}else{mname.style.color="#000000";}
    }
    if((mname.value==def)&&(!merr)){
	merr=1;
        mname.style.color="#FF0000";
        m_errPage("Значение поля не должно быть: \""+def+"\"");
    }
    if(!merr){mname.style.color="#000000";}
}

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)&&(!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(mname.elements[i].value == "root"){
		err=0;
	    }
	}
   }

    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 ajaxExec(){
    if (xml.readyState == 4){
	if (xml.status == 200){
	    var text = xml.responseText;
	    if((text)&&(pname)){
		document.getElementById(pname).style.display='';
		document.getElementById(pname).innerHTML = text;
	    }
	}
    }

}

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

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 onoff(name){
    if(document.getElementById(name).style.display=='none'){
//	document.getElementById(name).style.left=window.event.clientX+5;	
//	document.getElementById(name).style..top=window.event.clientY+5;
	document.getElementById(name).style.display='';
    }
    else{document.getElementById(name).style.display='none'}
}

function onoff_ev(name,event){
    myalt = document.getElementById(name);
    if((opened)&&(opened != name)){
	document.getElementById(opened).style.display = 'none'
    }
    opened = name;
    if(document.getElementById(name).style.display=='none'){
	document.getElementById(name).style.display='';
	_x=event.clientX; 
	_y=event.clientY;
	_dx=5;
//	left=false;right=false;
//	if(_dx+_x+myalt.clientWidth>document.body.clientWidth){_x=document.body.clientWidth-myalt.clientWidth-_dx;left=true;}
//	if(_dx+_y+myalt.clientHeight>document.body.clientHeight){_y=document.body.clientHeight-myalt.clientHeight-_dx;right=true;} 
//	if(left&&right)_y=document.body.clientHeight-myalt.clientHeight-_dx*4;
//	myalt.style.left=_x; 
//	myalt.style.top=_y+document.body.scrollTop;
    }
    else{
	document.getElementById(name).style.display='none'
//	myalt.style.top=0;
//	myalt.style.left=0;
    }
}

function onoff2(name){
    if(document.getElementById('is_show_'+name).style.display=='none'){
	document.getElementById('is_show_'+name).style.display='';
	document.getElementById('is_hide_'+name).style.display='none';
	document.getElementById('arrow_is_show_'+name).style.display='';
	document.getElementById('arrow_is_hide_'+name).style.display='none';
    }
    else{
	document.getElementById('is_show_'+name).style.display='none'
	document.getElementById('is_hide_'+name).style.display=''
	document.getElementById('arrow_is_show_'+name).style.display='none'
	document.getElementById('arrow_is_hide_'+name).style.display=''
    }
}

var Url = {
    encode : function (string) {
	return escape(this._utf8_encode(string));
    },

    decode : function (string) {
	return this._utf8_decode(unescape(string));
    },

    _utf8_encode : function (string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";
	for (var n = 0; n < string.length; n++) {
	    var c = string.charCodeAt(n);
	    if (c < 128) {
		utftext += String.fromCharCode(c);
	    }else if((c > 127) && (c < 2048)) {
		utftext += String.fromCharCode((c >> 6) | 192);
		utftext += String.fromCharCode((c & 63) | 128);
	    }else {
		utftext += String.fromCharCode((c >> 12) | 224);
		utftext += String.fromCharCode(((c >> 6) & 63) | 128);
		utftext += String.fromCharCode((c & 63) | 128);
	    }
	}
	return utftext;
    },

    _utf8_decode : function (utftext) {
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;
	while ( i < utftext.length ) {
	    c = utftext.charCodeAt(i);
	    if (c < 128) {
		string += String.fromCharCode(c);
		i++;
	    }else if((c > 191) && (c < 224)) {
		c2 = utftext.charCodeAt(i+1);
		string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
		i += 2;
	    }else {
		c2 = utftext.charCodeAt(i+1);
		c3 = utftext.charCodeAt(i+2);
		string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
		i += 3;
	    }
	}
	return string;
    }
}
function urlEncodeData(data) {
    var query = [];
    if (data instanceof Object) {
        for (var k in data) {
            query.push(encodeURIComponent(k) + "=" +
            		encodeURIComponent(data[k]));
        }
        return query.join('&');
    } else {
        return encodeURIComponent(data);
    }
}

function textarea_ajax(){
    text = tinyMCE.activeEditor.getContent({format : 'raw'});
    text = text.replace(/.br mce_bogus=.1../g,'');
    text = text.replace(/.p...p./gm,'');
    text = text.replace(/\//g,'');
    return encodeURIComponent(text);
}
