//////////////////////////////////////////////////////////////////////////////////////////////////////////
// WISEJUMP javascript library
// ---------------------------
// contains the following functions:
// - function view_site(site_id);
// - function SHA1(msg);
// - function verify_login();
// - function login(user_name,password);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// This function Updates a site's views when someone clicks the site's image, using AJAX
function view_site(site_id)
{
	var xmlHttp;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				// The client's browser does not support AJAX

			}
		}
	}
	xmlHttp.onreadystatechange=function()
	{
		//if(xmlHttp.readyState==4 && xmlHttp.status == 200)
		//{
		//}
	}
	
	xmlHttp.open("GET","scripts/add_views.php?site_id=" + site_id,true);
	xmlHttp.send(null);

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*
*  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();

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// This function verifyies that the form was filled properly, and encodes the password with SHA1 algorithm
function verify_login()
{
	var pass = document.getElementById('password');
	var user = document.getElementById('username');
	
	// verify that a user name and a password were entered
	if (user.value.length == 0)
	{
		document.getElementById('login_info').style.color = "red";
		document.getElementById('login_info').innerHTML = "(Enter your user name)"
		user.focus();
		return false;
	}
	else if (pass.value.length == 0)
	{
		document.getElementById('login_info').style.color = "red";
		document.getElementById('login_info').innerHTML = "(Enter your password)"
		pass.focus();
		return false;
	}
	else
	{
		document.getElementById('login_info').innerHTML = "<img src=\"images/prog.gif\" border=\"0\" style=\"float:right;\">";
		pass.value = SHA1(pass.value);	
		
		// Use AJAX to verify login
		login(user.value,pass.value);
		
		pass.value = "";
		user.value = "";
		
		if (document.getElementById('login_info').innerHTML == "(Login Approved. Redirecting...)"){
			//document.GetElementById('login_form').submit();
			return true;
		}
			
	}
	return false;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
function login(user_name,password)
{
	var xmlHttp;
	var params;
	
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				// The client's browser does not support AJAX

			}
		}
	}
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4)
		{
			//alert(xmlHttp.responseText);
			if (xmlHttp.responseText.search('error') == -1)
			{
				document.getElementById('login_info').style.color = "blue";
				document.getElementById('login_info').innerHTML = "(Login Approved. Redirecting...)";
			}
			else
			{
				document.getElementById('login_info').style.color = "red";
				document.getElementById('login_info').innerHTML = "(Wrong Login Details) <a href=signup.php>Sign Up?</a>";
//				alert(xmlHttp.responseText);
			}
		}
	}
	
	// set the page i am about to open on the server
	xmlHttp.open("POST","scripts/auth.php",false);
	params = "username=" + user_name + "&password=" + password;
	
	// Send the proper header information along with the request
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", params.length);
	xmlHttp.setRequestHeader("Connection", "close");
	
	xmlHttp.send(params);

}
