var request = createRequest();
var g_val_cont = null;
var g_cont = null;
var g_task = '';
var base_url = 'http://www.relaxlet.com/ajax/';


var g_postingid = null;
var g_adjustment = null;

function createRequest() {
	try {
		req = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				req = false;
			}
		}
	}

/*	if (!req)
		alert("Error initializing XMLHttpRequest. Server interaction is impossible.");*/
		
	return req;
}

function urlencode(str) {
	str = escape(str);
	str = str.replace('+', '%2B');
	str = str.replace('%20', '+');
	str = str.replace('*', '%2A');
	str = str.replace('/', '%2F');
	str = str.replace('@', '%40');
	return str;
}

function urldecode(str) {
	str = str.replace('+', ' ');
	str = unescape(str);
	return str;
}

function MSIE() {
	var version = false;
	if (navigator.appVersion.indexOf("MSIE") != -1) {
		temp = navigator.appVersion.split("MSIE");
		version = parseFloat(temp[1]);
	}
	
	return version;
}

function htmlencode(text) {
	if (!text)
		return text;
		
	text = text.replace(/</g,"&lt;");
	text = text.replace(/>/g,"&gt;");
	return text;
}

function elbyid(elid) {
	return document.getElementById(elid);
}

function removeChildren(node) {
	if (node.hasChildNodes()) {
		while (node.childNodes.length >= 1) {
			node.removeChild(node.firstChild);       
		} 
	}
}

function replaceContent(node, content) {
	var newdiv = document.createElement("div");
	newdiv.innerHTML = content;
	removeChildren(node);
	node.appendChild(newdiv);
}


function addsmiley(container, text) {
	document.getElementById(container).value += ' '+text+' ';
}

function runRequest(url, handler) {
	request.open("GET", url, true);
	request.onreadystatechange = handler;
	request.send(null);
}

function requestFinished(req) {
	return req.readyState == 4 && req.status == 200;
}

function checkUpdate() {
	if (!requestFinished(request))
		return;
		
	replaceContent(g_cont, request.responseText);

	if (request.responseText.indexOf('incorrect') == -1) {
		OKs[g_task] = true;
		g_val_cont.style.background = 'white';
	} else {
		OKs[g_task] = false;
		g_val_cont.style.background = '#FFC0C0';
	}
}

function runCheck(task, val_cont_id, out_cont_id) {
	g_val_cont = elbyid(val_cont_id);
	var val = g_val_cont.value;
	g_cont = elbyid(out_cont_id);
	g_task = task;
	
	replaceContent(g_cont, '<span class="checking">Checking&hellip;</span>');
	
	runRequest(base_url+'register/?task='+task+'&value='+urlencode(val), checkUpdate);
}

function pageUpdate() {
	if (!requestFinished(request))
		return;

	replaceContent(g_cont, request.responseText);
}

function loadPage(url, out_cont_id) {
	g_cont = elbyid(out_cont_id);
	
	runRequest(url, pageUpdate);
}

/* Signup */

var OKs = Array();

function checkOKs(al) {
	var allOK = OKs["checkusername"] && OKs["checkcaptcha"] && OKs["checkpassword"] && OKs["checkemail"];
	
	if (allOK || !req)
		return true;
		
	if (al)
		alert("Please fill in all fields correctly.");
	return false;					
}

function runUsernameCheck() {
	if (!OKs["checkusername"])
		runCheck('checkusername', 'username', 'username_diag');
}

function checkPassword() {
	if (elbyid("password1").value.length < 4) {
		OKs["checkpassword"] = false;
	
		replaceContent(elbyid("password_diag1"), '<span class="incorrect">too short password</span>');
		replaceContent(elbyid("password_diag2"), '<span class="incorrect">too short password</span>');
		return false;						
	}
	
	if (elbyid("password1").value == elbyid("password2").value) {
		OKs["checkpassword"] = true;
		replaceContent(elbyid("password_diag1"), '<span class="correct">OK</span>');
		replaceContent(elbyid("password_diag2"), '<span class="correct">OK</span>');
	} else {
		OKs["checkpassword"] = false;
		replaceContent(elbyid("password_diag1"), '');
		replaceContent(elbyid("password_diag2"), '<span class="incorrect">no match</span>');
	}
}

function checkCaptcha(fieldname) {
	if (SHA1(elbyid(fieldname).value.toLowerCase()) == elbyid("captcha_answer_sha1").value) {
		OKs["checkcaptcha"] = true;
		replaceContent(elbyid("captcha_diag"), '<span class="correct">match</span>');
	} else {
		OKs["checkcaptcha"] = false;
		replaceContent(elbyid("captcha_diag"), '<span class="incorrect">no match</span>');
	}
		
}

function checkEmail () {
	if (/^[\w\d\-_.]+@([\w\d\-]+\.)+[\w]{2,6}$/.test(elbyid("email").value)) {
		OKs["checkemail"] = true;
		replaceContent(elbyid("email_diag"), '<span class="correct">OK</span>');
	} else {
		OKs["checkemail"] = false;
		replaceContent(elbyid("email_diag"), '<span class="incorrect">invalid e-mail address</span>');
	}
}


/**
*
* Secure Hash Algorithm (SHA1)
* http://www.webtoolkit.info/
*
**/

function SHA1 (msg) {

    function rotate_left(n,s) {
        var t4 = ( n<<s ) | (n>>>(32-s));
        return t4;
    };

    function lsb_hex(val) {
        var str="";
        var i;
        var vh;
        var vl;

        for( i=0; i<=6; i+=2 ) {
            vh = (val>>>(i*4+4))&0x0f;
            vl = (val>>>(i*4))&0x0f;
            str += vh.toString(16) + vl.toString(16);
        }
        return str;
    };

    function cvt_hex(val) {
        var str="";
        var i;
        var v;

        for( i=7; i>=0; i-- ) {
            v = (val>>>(i*4))&0x0f;
            str += v.toString(16);
        }
        return str;
    };


    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 blockstart;
    var i, j;
    var W = new Array(80);
    var H0 = 0x67452301;
    var H1 = 0xEFCDAB89;
    var H2 = 0x98BADCFE;
    var H3 = 0x10325476;
    var H4 = 0xC3D2E1F0;
    var A, B, C, D, E;
    var temp;

    msg = Utf8Encode(msg);

    var msg_len = msg.length;

    var word_array = new Array();
    for( i=0; i<msg_len-3; i+=4 ) {
        j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
        msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
        word_array.push( j );
    }

    switch( msg_len % 4 ) {
        case 0:
            i = 0x080000000;
        break;
        case 1:
            i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
        break;

        case 2:
            i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
        break;

        case 3:
            i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8    | 0x80;
        break;
    }

    word_array.push( i );

    while( (word_array.length % 16) != 14 ) word_array.push( 0 );

    word_array.push( msg_len>>>29 );
    word_array.push( (msg_len<<3)&0x0ffffffff );


    for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

        for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
        for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

        A = H0;
        B = H1;
        C = H2;
        D = H3;
        E = H4;

        for( i= 0; i<=19; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=20; i<=39; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=40; i<=59; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=60; i<=79; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        H0 = (H0 + A) & 0x0ffffffff;
        H1 = (H1 + B) & 0x0ffffffff;
        H2 = (H2 + C) & 0x0ffffffff;
        H3 = (H3 + D) & 0x0ffffffff;
        H4 = (H4 + E) & 0x0ffffffff;

    }

    var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

    return temp.toLowerCase();

}



