/*
    COPYRIGHT Phrazit, INC
    ALL RIGHTS RESERVED, 2008
*/

function getXmlHttpRequestObject()
{
        if (window.XMLHttpRequest) return new XMLHttpRequest();
        else if(window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
        else document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object.' + 'Consider upgrading your browser.';
}

function deleteElement(object) { object.parentNode.removeChild(object); }
function getEl(id) { return document.getElementById(id); }

var voteReceiveReq = getXmlHttpRequestObject();

function voteFor(object,opinion,itemid)
{
	if(AJAXRequestGET('backend/votefor.php?itemid=' + itemid + '&opinion=' + opinion,voteReceived)) getEl('tagCloudLoading').src = 'images/loading.gif';
}

function voteReceived()
{
	$("#itemtagcloud").html(AJAXResponse());
}

var receiveReq = getXmlHttpRequestObject();
var popupReceiveReq = getXmlHttpRequestObject();
var loginCallback = null;
var registerCallback = null;

function reloadPage()
{
	setTimeout("reloadNow()",1000);
}

function reloadNow()
{
	window.location.reload(false);
}



function showPopup(text,logCallback,width)
{
	if(!width) width = 220;
	if(logCallback != 'keep') loginCallback = logCallback;
	getEl('popup').style.width = width + 'px';
	getEl('popup').parentNode.style.width = (width) + 'px';
	$("#popupcontainer").fadeIn("normal");
	$("#popup").html("<div id='closePopup'><a href='javascript:hidePopup();'><img src='http://www.PhrazIt.com/images/x.png'></a></div>" + text);
}
function hidePopup()
{
	$("#popupcontainer").fadeOut("normal");
}

function showLogin(callback)
{
	showPopup("<div id='login'>" +
			" <h2>Phrazit Login</h2> "+
			" <p id='loginmessage'>Please log in to continue.</p> "+
			" <form onsubmit='return submitLogin();'> "+
				" <table> "+
					" <tr> "+
						" <td> "+
							" Username: "+
						" </td> "+
						" <td> "+
							" <input type='text' id='loginusername' name='username' class='inputbox' /> "+
						" </td> "+
					" </tr> "+
					" <tr> "+
						" <td> "+
							" Password: "+
						" </td> "+
						" <td> "+
							" <input type='password' id='loginpassword' name='password' class='inputbox' /> "+
						" </td> "+
					" </tr> "+
					" <tr> "+
						" <td colspan='2'> "+
							" <input type='checkbox' id='loginremember' name='remember' /> Keep me logged in "+
						" </td> "+
					" </tr> "+
				" </table> "+
				" <input type='submit' value='Log In' class='submit' /> "+
			" </form> "+
			" <p>Not registered? Take a second to <a href='#' onclick='top.location=\"http://www.phrazit.com/register.php\";'>sign up</a>.</p>"+
			" <p>Forgot your password? <a href='#' onclick='top.location=\"http://www.phrazit.com/resetpassword.php?action=sendform\";'>Reset it</a>.</p> "+
			" </div>"
			,callback,260);
}


function showTuring(callback)
{
	showPopup("<div id='turingbox'>" +
			" <h2>Verification</h2> "+
			" <p id='turingmessage'>In order to ensure the validity of the content on our site, we need to check that you're human. Type the letters in the box below.</p> "+
			
			" <form action='#' onsubmit='return submitTuring();'> "+
				" <img src='images/loading.gif' alt='Please turn on images to continue.' title='Type these letters in the box below.' id='turingimage' /> "+
				" <input type='text' name='turing' id='turing' class='inputbox' /> "+
				" <input type='submit' value='Continue' />"+
			" </form><br /> "+
			" <p>Want to avoid these messages? Take a second to <a href='#' onclick='top.location=\"http://www.phrazit.com/register.php\";'>register</a>.</p> "+
			" <p>Already registered? <a href='#' onclick='showLogin(\"keep\")'>Log in</a>."+
			" </div><script type='text/javascript'>reloadTuring('turingimage');</script>"
			,callback,300);
	getEl('turing').focus();
}


function showTuring(callback)
{
	showPopup("<div id='turingbox'>" +
			" <h2>Verification</h2> "+
			" <p id='turingmessage'>In order to ensure the validity of the content on our site, we need to check that you're human. Type the letters in the box below.</p> "+
			
			" <form action='#' onsubmit='return submitTuring();'> "+
				" <img src='images/loading.gif' alt='Please turn on images to continue.' title='Type these letters in the box below.' id='turingimage' /> "+
				" <input type='text' name='turing' id='turing' class='inputbox' /> "+
				" <input type='submit' value='Continue' />"+
			" </form><br /> "+
			" <p>Want to avoid these messages? Take a second to <a href='#' onclick='top.location=\"http://www.phrazit.com/register.php\";'>" +
			"    register</a> for <a href='#' onclick='top.location=\"http://www.phrazit.com\";'>Phrazit</a>.</p> "+
			" <p>Already registered? <a href='#' onclick='showLogin(\"keep\")'>Log in</a>."+
			" </div><script type='text/javascript'>reloadTuring('turingimage');</script>"
			,callback,300);
	getEl('turing').focus();
}


function confirmEmail()
{
	showPopup('<h2>Confirmation sent!</h2>'+
		'<br /><p>A confirmation has been sent to the email you provided. Follow the directions in the email to activate your account.</p>'+
		'<p>Thank you for using PhrazIt!</p>'+
		'<center><p><a href="javascript:hidePopup();">close</a></p></center>');
}
function votePending()
{
	showPopup('<h2>Confirmation sent!</h2>'+
		'<br /><p>Your vote has not yet been logged!</p>'+
		'<p>A confirmation has been sent to the email you provided. Follow the directions in the email to activate your account.</p>'+
		'<p>Thank you for using PhrazIt!</p>'+
		'<center><p><a href="javascript:hidePopup();">close</a></p></center>');
}

function submitLogin()
{
	var username = getEl('loginusername').value;
	var password = getEl('loginpassword').value;
	var remember = (getEl('loginremember').checked?1:0);
	
	if(!username || !password) return loginError("Please enter your username and password.");
	
	loginStatus("Encrypting...");
	
	if(AJAXRequestPOST('backend/login.php','username='+username+'&password='+hex_md5(password)+'&remember='+remember,loginAttempt)) loginStatus("Sending login data...");

	return false;
}

function loginAttempt()
{
	var message = receiveReq.responseXML.getElementsByTagName('message')[0].firstChild.nodeValue;
	var loggedin = receiveReq.responseXML.getElementsByTagName('loggedin')[0].firstChild.nodeValue;
	
	if(loggedin == 1)
	{
		loginStatus("Logging in...");
		
		var cookie_nodes = receiveReq.responseXML.getElementsByTagName('cookie');
		for(var i=0; i<cookie_nodes.length; i++)
		{
			var name = cookie_nodes[i].getElementsByTagName('name')[0].firstChild.nodeValue;
			var value = cookie_nodes[i].getElementsByTagName('value')[0].firstChild.nodeValue;
			setCookie(name,value,30);
		}
		
		if(loginCallback) loginCallback();
		return;
	}
	
	loginError(message);
}

function submitTuring()
{
	var turingText = getEl('turing').value;
	if(turingText.length != 5) window.alert("Please enter the five-letter code in the image.");
	else AJAXRequestGET('backend/checkturing.php?turing='+turingText,turingAttempt);
	return false;
}
function turingAttempt()
{
	if(AJAXResponse() == "1") loginCallback();
	else 
	{
		reloadTuring('turingimage');
		getEl('turing').value = '';
		getEl('turing').focus();
		window.alert("That code is not correct. Please try again.");
	}
}


function reloadTuring(object)
{
	if(typeof(object) == "string") object = getEl(object);
	object.src = "turing.php?"+Math.ceil(Math.random()*9999999);
}



function AJAXRequestGET(url,callback)
{
	receiveReq = getXmlHttpRequestObject();
	if(receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open('GET', AJAXAddKey(url), true);
		receiveReq.onreadystatechange = function() { if(AJAXResponseReceived() == true) callback(); };
		receiveReq.send(null);
		return true;
	}
	return false;
}

function AJAXRequestPOST(url,params,callback)
{
	receiveReq = getXmlHttpRequestObject();
	if(receiveReq.readyState == 4 || receiveReq.readyState == 0)
	{
		receiveReq.open('POST', AJAXAddKey(url), true);
		receiveReq.onreadystatechange = function() { if(AJAXResponseReceived() == true) callback(); };
		
		receiveReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		receiveReq.setRequestHeader("Content-length", params.length);
		receiveReq.setRequestHeader("Connection", "close");
		receiveReq.send(params);
		return true;
	}
	return false;
}
function AJAXResponseReceived()
{
	if(receiveReq.readyState == 4) return true;
	else return false;
}
function AJAXResponse()
{
	return receiveReq.responseText;
}
function AJAXResponseXML()
{
	return receiveReq.responseXML;
}
function AJAXAddKey(url)
{
	if(url.indexOf("?") != -1) url += '&';
	else url += '?';
	
	url += 'security='+getRandString();
	return url;
}

function loginStatus(status,hideLoading) { popupStatus('loginmessage',status,hideLoading); }

function popupStatus(element,status,hideLoading)
{
	var showErrorHere = getEl(element);
	showErrorHere.innerHTML = (hideLoading?'':'<img src="http://www.phrazit.com/images/loading.gif" class="loading" /> ') + status;
	showErrorHere.className = '';
	return false;
}




/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

var hexcase=0;var b64pad="";var chrsz=8;function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));}
function core_md5(x,len)
{x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}
return Array(a,b,c,d);}
function md5_cmn(q,a,b,x,s,t)
{return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);}
function md5_ff(a,b,c,d,x,s,t)
{return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);}
function md5_gg(a,b,c,d,x,s,t)
{return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);}
function md5_hh(a,b,c,d,x,s,t)
{return md5_cmn(b^c^d,a,b,x,s,t);}
function md5_ii(a,b,c,d,x,s,t)
{return md5_cmn(c^(b|(~d)),a,b,x,s,t);}
function core_hmac_md5(key,data)
{var bkey=str2binl(key);if(bkey.length>16)bkey=core_md5(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128);}
function safe_add(x,y)
{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}
function bit_rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));}
function str2binl(str)
{var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)
bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin;}
function binl2hex(binarray)
{var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++)
{str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);}
return str;}

function setCookie(cookieName,cookieValue,nDays) 
{
	var today = new Date();
	var expire = new Date();
	if (nDays==null || nDays==0) nDays=1;
	expire.setTime(today.getTime() + 3600000*24*nDays);
	document.cookie = cookieName+"="+escape(cookieValue)+";expires="+expire.toGMTString();
}