var result_nick;
var result_email;
var restore_mail = false;

//Функция AJAX запроса
function loadXMLDoc(url) {
    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest)
    {
    	//Сорздаем новый запрос
        req = new XMLHttpRequest();
        //Подключаем обработчик получения результата
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);//отправляем гет запрос
        req.send(null);

    // для версии с ActiveX
    } else if (window.ActiveXObject) {
        var aVersions = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
        for (var i = 0; i < aVersions.length; i++) {
            try {
                req = new ActiveXObject(aVersions[i]);
            } catch (oError) {
                 if (i == aVersions.length) throw new Error("Ваш броузер не поддерживает объект XMLHttp!");
            }
        }
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() {
    // только при состоянии "complete"
    if (req.readyState == 4)
    {
    	//alert(req.responseText);
        if (req.status == 200) eval(req.responseText);//выполняем полученный текст как джаваскрипт
        else alert("Не удалось получить данные:\n" + req.statusText);
    }
}

function fnShowProps(obj, objName){
    var result = "";
    for (var i in obj) // обращение к свойствам объекта по индексу
        result += objName + "." + i + " = " + obj[i] + "<br />\n";
    document.write(result);
}

//Показать окно регистрации
function ShowRForm()
{
	var rForm = document.getElementById("reg_window");
	rForm.style.display = 'block';
	rForm.style.visibility = 'visible';
	rForm.style.left=(document.body.clientWidth/2)-(400/2)+'px';
	rForm.style.top=(document.documentElement.scrollTop+100)+'px';
	document.regForm.nick.focus();
	document.getElementById('nick_status').innerHTML = '';
	document.getElementById('email_status').innerHTML = '';
	return false;
}

//Скрыть окно регистрации
function CloseRForm()
{	var rForm = document.getElementById("reg_window");
	rForm.style.display = 'none';
	rForm.style.visibility = 'hidden';
	return false;
}

//Показать форму восстановления пароля
function ShowPForm()
{
	var pForm = document.getElementById("pass_window");
	pForm.style.display = 'block';
	pForm.style.visibility = 'visible';
	pForm.style.left=(document.body.clientWidth/2)-(400/2)+'px';
	pForm.style.top=(document.body.scrollTop+100)+'px';
	document.passForm.email.focus();
	return false;
}
//Скрыть форму фосстановления пароля
function ClosePForm()
{
	var pForm = document.getElementById("pass_window");
	pForm.style.display = 'none';
	pForm.style.visibility = 'hidden';
	return false;
}
//Проверить правильно заполнена ли форме регистрации
function CheckRForm()
{	var form = document.regForm;
	if (form.nick.value.length == 0)
	{		alert('Enter Nick');
		form.nick.focus();
		return false;
	} else {		loadXMLDoc('/?ajax=confirm&field=nick&value='+regForm.nick.value);
		if (result_nick == 'nonfree')
		{			alert('Try another Nick please');
			form.nick.focus();
			return false;
		}
		if (check_nonrus(form.nick.value) == false) {
			alert('Enter correct Nick');
			form.nick.focus();
			return false;
			}
	}
	if (form.email.value.length == 0)
	{
		alert('Enter E-mail');
		form.email.focus();
		return false;
	} else {
		loadXMLDoc('/?ajax=confirm&field=email&value='+regForm.email.value);
		if (result_email == 'nonfree')
		{
			alert('Try another E-mail please');
			form.email.focus();
			return false;
		}
		if (check_email(form.email.value) == false) {			alert('Enter correct Email');
			form.email.focus();
			return false;
			}
	}
	if (form.password.value.length == 0)
	{
		alert('Enter Password');
		form.password.focus();
		return false;
	}
	AddUser(form.nick.value, form.email.value, form.password.value);
	return true;
}
//Проверить есть ли такой ник или емеил в базе пользователей
function CheckIsAccountFree(object)
{	loadXMLDoc('/?ajax=confirm&field='+object.name+'&value='+object.value);
}
//Добавить/зарегистрировать нового пользователя
function AddUser(nick, email, pass)
{
	loadXMLDoc('/?ajax=newusr&nick='+nick+'&email='+email+'&pass='+pass);
}
//Проверить верно ли заполнена форма восстановления пароля
function CheckPForm()
{
	var form = document.passForm;
	if (form.email.value.length == 0)
	{
		alert('Enter E-mail');
		form.email.focus();
		return false;
	} else {
		loadXMLDoc('/?ajax=restormail&email='+form.email.value);
		if (restore_mail == false)
		{
			alert('Такой E-mail не зарегистрирован!');
			form.email.focus();
			return false;
		}
	}
	alert('Check your e-mail');
	return true;
}
//Проверить зарегистрирован ли в системе пользователь с таким емейлом.
function CheckEmail(object)
{	loadXMLDoc('/?ajax=restormail&email='+object.value);
}

//Проверить емеил на совпадение с шаблоном
function check_email(email) {
    var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$/;
    email = drop_spaces(email); //функцию drop_spaces() см. выше
    if (template.test(email)) {
        return true;
    }
    return false;
}

function check_nonrus(string) {
    var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)/;
    email = drop_spaces(string); //функцию drop_spaces() см. выше
    if (template.test(string)) {
        return true;
    }
    return false;
}
//Удаление граничных пробелов из строки
function trim(str) {
    var newstr = str.replace(/^\s*(.+?)\s*$/, "$1");
    if (newstr == " ") {
        return "";
    }
    return newstr;
}
//Удаление пробелов из строки
function drop_spaces(str) {
    var newstr = trim(str); //функцию trim() см. выше
    return newstr.replace(/(\s)+/g, "");
}

//Функция смены пароля
function ChangePassword()
{	var user = getCookie('nick');
	var pass_div = document.createElement('div');
	pass_div.setAttribute('id','chng_pass');
	pass_div.innerHTML = '' +
	'<a href="#" onClick="return CloseDialog(\'chng_pass\')"/><img class="close_img" src="/images/close_r.gif"/></a>' +
	'<h1>Сменить пароль</h1>' +
	'<form id="chngForm" name="chngForm" action="" method="post" onSubmit="return SubmitCnhgForm();">' +
		'<div class="reg_div">' +
			'Новый пароль&nbsp;<span id="newpass_status" class="nonfree" style="font-size:14px;"></span><br/>' +
			'<input class="text" type="text" name="new_pass" value=""/>' +
		'</div>' +
		'<div class="reg_div">' +
			'Текущий пароль&nbsp;<span id="currpass_status" class="nonfree"  style="font-size:14px;"></span><br/>' +
			'<input class="text" type="password" name="password" value=""/>' +
		'</div>' +
		'<input class="btn" type="submit" name="cnhgpass" value="Submit"/>' +
		'<input class="btn" id="sbmtBtn3" style="float:right;" type="reset" value="Cancel"  onClick="return CloseDialog(\'chng_pass\')"/>' +
	'</form>';
	pass_div.style.left=(document.body.clientWidth/2)-(400/2)+'px';
	pass_div.style.top=(document.documentElement.scrollTop+100)+'px';
 	document.body.appendChild(pass_div);
	document.getElementById('chngForm').new_pass.focus();
 	return false;
}

function SubmitCnhgForm()
{	var new_pass = document.getElementById('chngForm').new_pass.value;
	var curr_pass = document.getElementById('chngForm').password.value;
	document.getElementById('currpass_status').innerHTML = '';
	document.getElementById('newpass_status').innerHTML = '';
	var user = getCookie('nick');
	if (new_pass.length == 0)
	{
		document.getElementById('newpass_status').innerHTML = 'укажите новый пароль';
		document.getElementById('chngForm').new_pass.focus();
		return false;
	}
	if (curr_pass.length == 0)
	{
		document.getElementById('currpass_status').innerHTML = 'укажите пароль';
		document.getElementById('chngForm').password.focus();
		return false;
	}
	loadXMLDoc('/?ajax=chngpass&nick='+user+'&new_pass='+new_pass+'&curr_pass='+curr_pass);
	return false;
}

//Функция смены ника
function ChangeNick()
{
	var email = getCookie('email');
	var nick_div = document.createElement('div');
	nick_div.setAttribute('id','chng_nick');
	nick_div.innerHTML = '' +
	'<a href="#" onClick="return CloseDialog(\'chng_nick\')"/><img class="close_img" src="/images/close_r.gif"/></a>' +
	'<h1>Сменить Ник</h1>' +
	'<form id="nickForm" name="nickForm" action="" method="post" onSubmit="return SubmitNickForm();">' +
		'<div class="reg_div">' +
			'Новый ник&nbsp;<span id="newnick_status" class="nonfree"></span><br/>' +
			'<input class="text" type="text" name="newnick"  onkeyup="CheckIsAccountFree(this)" value=""/>' +
		'</div>' +
		'<div class="reg_div">' +
			'Пароль&nbsp;<span id="currpass_status" class="nonfree" ></span><br/>' +
			'<input class="text" type="password" name="password" value=""/>' +
		'</div>' +
		'<input class="btn" type="submit" name="cnhgpass" value="Submit"/>' +
		'<input class="btn" id="sbmtBtn4" style="float:right;" type="reset" value="Cancel"  onClick="return CloseDialog(\'chng_nick\')"/>' +
	'</form>';
	nick_div.style.left=(document.body.clientWidth/2)-(400/2)+'px';
	nick_div.style.top=(document.documentElement.scrollTop+100)+'px';
 	document.body.appendChild(nick_div);
	document.getElementById('nickForm').newnick.focus();
 	return false;
}

function SubmitNickForm()
{	var nick = getCookie('nick');
	var new_nick = document.getElementById('nickForm').newnick.value;
	var curr_pass = document.getElementById('nickForm').password.value;
	document.getElementById('newnick_status').innerHTML = '';
	document.getElementById('currpass_status').innerHTML = '';
	var user = getCookie('nick');
	if (new_nick.length == 0)
	{
		document.getElementById('newnick_status').innerHTML = 'укажите новый Ник';
		document.getElementById('nickForm').newnick.focus();
		return false;
	} else
	if (curr_pass.length == 0)
	{
		document.getElementById('currpass_status').innerHTML = 'введите пароль';
		document.getElementById('nickForm').password.focus();
		return false;
	}
	loadXMLDoc('/?ajax=chngnick&oldnick='+nick+'&new_nick='+new_nick+'&curr_pass='+curr_pass);
	return false;
}
//Закрывает диалоговое окно
function CloseDialog(dialog_name)
{	var dialog = document.getElementById(dialog_name);
	document.body.removeChild(dialog);
}

function DeleteAccount()
{    var conf = confirm('Вы уверены, что хотите удалить себя?')
    if (conf == true)
    {		var nick = getCookie('nick');
		var pass = getCookie('pass');
		loadXMLDoc('/?ajax=delusr&dnick='+nick+'&dpass='+pass);
		document.location.reload();
	}
	return false;
}

//Подписка на новости
function Subscribe(mode)
{	var nick = getCookie('nick');
	loadXMLDoc('/?ajax=subscr&dnick='+nick+'&m='+mode);
	return false;
}

//Получаем куки
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);
}







/**
*
*  MD5 (Message-Digest Algorithm)
*  http://www.webtoolkit.info/
*
**/

var MD5 = function (string) {

	function RotateLeft(lValue, iShiftBits) {
		return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
	}

	function AddUnsigned(lX,lY) {
		var lX4,lY4,lX8,lY8,lResult;
		lX8 = (lX & 0x80000000);
		lY8 = (lY & 0x80000000);
		lX4 = (lX & 0x40000000);
		lY4 = (lY & 0x40000000);
		lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
		if (lX4 & lY4) {
			return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
		}
		if (lX4 | lY4) {
			if (lResult & 0x40000000) {
				return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
			} else {
				return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
			}
		} else {
			return (lResult ^ lX8 ^ lY8);
		}
 	}

 	function F(x,y,z) { return (x & y) | ((~x) & z); }
 	function G(x,y,z) { return (x & z) | (y & (~z)); }
 	function H(x,y,z) { return (x ^ y ^ z); }
	function I(x,y,z) { return (y ^ (x | (~z))); }

	function FF(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};

	function GG(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};

	function HH(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};

	function II(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	};

	function ConvertToWordArray(string) {
		var lWordCount;
		var lMessageLength = string.length;
		var lNumberOfWords_temp1=lMessageLength + 8;
		var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
		var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
		var lWordArray=Array(lNumberOfWords-1);
		var lBytePosition = 0;
		var lByteCount = 0;
		while ( lByteCount < lMessageLength ) {
			lWordCount = (lByteCount-(lByteCount % 4))/4;
			lBytePosition = (lByteCount % 4)*8;
			lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
			lByteCount++;
		}
		lWordCount = (lByteCount-(lByteCount % 4))/4;
		lBytePosition = (lByteCount % 4)*8;
		lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
		lWordArray[lNumberOfWords-2] = lMessageLength<<3;
		lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
		return lWordArray;
	};

	function WordToHex(lValue) {
		var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
		for (lCount = 0;lCount<=3;lCount++) {
			lByte = (lValue>>>(lCount*8)) & 255;
			WordToHexValue_temp = "0" + lByte.toString(16);
			WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
		}
		return WordToHexValue;
	};

	function Utf8Encode(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;
	};

	var x=Array();
	var k,AA,BB,CC,DD,a,b,c,d;
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;

	string = Utf8Encode(string);

	x = ConvertToWordArray(string);

	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

	for (k=0;k<x.length;k+=16) {
		AA=a; BB=b; CC=c; DD=d;
		a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
		d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
		c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
		b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
		a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
		d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
		c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
		b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
		a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
		d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
		c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
		b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
		a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
		d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
		c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
		b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
		a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
		d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
		c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
		b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
		a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
		d=GG(d,a,b,c,x[k+10],S22,0x2441453);
		c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
		b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
		a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
		d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
		c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
		b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
		a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
		d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
		c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
		b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
		a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
		d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
		c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
		b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
		a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
		d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
		c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
		b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
		a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
		d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
		c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
		b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
		a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
		d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
		c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
		b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
		a=II(a,b,c,d,x[k+0], S41,0xF4292244);
		d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
		c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
		b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
		a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
		d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
		c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
		b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
		a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
		d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
		c=II(c,d,a,b,x[k+6], S43,0xA3014314);
		b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
		a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
		d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
		c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
		b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
		a=AddUnsigned(a,AA);
		b=AddUnsigned(b,BB);
		c=AddUnsigned(c,CC);
		d=AddUnsigned(d,DD);
	}

	var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

	return temp.toLowerCase();
}
