/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * 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;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g<p.length;g+=16){var j=o;var h=n;var f=m;var e=l;o=md5_ff(o,n,m,l,p[g+0],7,-680876936);l=md5_ff(l,o,n,m,p[g+1],12,-389564586);m=md5_ff(m,l,o,n,p[g+2],17,606105819);n=md5_ff(n,m,l,o,p[g+3],22,-1044525330);o=md5_ff(o,n,m,l,p[g+4],7,-176418897);l=md5_ff(l,o,n,m,p[g+5],12,1200080426);m=md5_ff(m,l,o,n,p[g+6],17,-1473231341);n=md5_ff(n,m,l,o,p[g+7],22,-45705983);o=md5_ff(o,n,m,l,p[g+8],7,1770035416);l=md5_ff(l,o,n,m,p[g+9],12,-1958414417);m=md5_ff(m,l,o,n,p[g+10],17,-42063);n=md5_ff(n,m,l,o,p[g+11],22,-1990404162);o=md5_ff(o,n,m,l,p[g+12],7,1804603682);l=md5_ff(l,o,n,m,p[g+13],12,-40341101);m=md5_ff(m,l,o,n,p[g+14],17,-1502002290);n=md5_ff(n,m,l,o,p[g+15],22,1236535329);o=md5_gg(o,n,m,l,p[g+1],5,-165796510);l=md5_gg(l,o,n,m,p[g+6],9,-1069501632);m=md5_gg(m,l,o,n,p[g+11],14,643717713);n=md5_gg(n,m,l,o,p[g+0],20,-373897302);o=md5_gg(o,n,m,l,p[g+5],5,-701558691);l=md5_gg(l,o,n,m,p[g+10],9,38016083);m=md5_gg(m,l,o,n,p[g+15],14,-660478335);n=md5_gg(n,m,l,o,p[g+4],20,-405537848);o=md5_gg(o,n,m,l,p[g+9],5,568446438);l=md5_gg(l,o,n,m,p[g+14],9,-1019803690);m=md5_gg(m,l,o,n,p[g+3],14,-187363961);n=md5_gg(n,m,l,o,p[g+8],20,1163531501);o=md5_gg(o,n,m,l,p[g+13],5,-1444681467);l=md5_gg(l,o,n,m,p[g+2],9,-51403784);m=md5_gg(m,l,o,n,p[g+7],14,1735328473);n=md5_gg(n,m,l,o,p[g+12],20,-1926607734);o=md5_hh(o,n,m,l,p[g+5],4,-378558);l=md5_hh(l,o,n,m,p[g+8],11,-2022574463);m=md5_hh(m,l,o,n,p[g+11],16,1839030562);n=md5_hh(n,m,l,o,p[g+14],23,-35309556);o=md5_hh(o,n,m,l,p[g+1],4,-1530992060);l=md5_hh(l,o,n,m,p[g+4],11,1272893353);m=md5_hh(m,l,o,n,p[g+7],16,-155497632);n=md5_hh(n,m,l,o,p[g+10],23,-1094730640);o=md5_hh(o,n,m,l,p[g+13],4,681279174);l=md5_hh(l,o,n,m,p[g+0],11,-358537222);m=md5_hh(m,l,o,n,p[g+3],16,-722521979);n=md5_hh(n,m,l,o,p[g+6],23,76029189);o=md5_hh(o,n,m,l,p[g+9],4,-640364487);l=md5_hh(l,o,n,m,p[g+12],11,-421815835);m=md5_hh(m,l,o,n,p[g+15],16,530742520);n=md5_hh(n,m,l,o,p[g+2],23,-995338651);o=md5_ii(o,n,m,l,p[g+0],6,-198630844);l=md5_ii(l,o,n,m,p[g+7],10,1126891415);m=md5_ii(m,l,o,n,p[g+14],15,-1416354905);n=md5_ii(n,m,l,o,p[g+5],21,-57434055);o=md5_ii(o,n,m,l,p[g+12],6,1700485571);l=md5_ii(l,o,n,m,p[g+3],10,-1894986606);m=md5_ii(m,l,o,n,p[g+10],15,-1051523);n=md5_ii(n,m,l,o,p[g+1],21,-2054922799);o=md5_ii(o,n,m,l,p[g+8],6,1873313359);l=md5_ii(l,o,n,m,p[g+15],10,-30611744);m=md5_ii(m,l,o,n,p[g+6],15,-1560198380);n=md5_ii(n,m,l,o,p[g+13],21,1309151649);o=md5_ii(o,n,m,l,p[g+4],6,-145523070);l=md5_ii(l,o,n,m,p[g+11],10,-1120210379);m=md5_ii(m,l,o,n,p[g+2],15,718787259);n=md5_ii(n,m,l,o,p[g+9],21,-343485551);o=safe_add(o,j);n=safe_add(n,h);m=safe_add(m,f);l=safe_add(l,e)}return Array(o,n,m,l)}function md5_cmn(h,e,d,c,g,f){return safe_add(bit_rol(safe_add(safe_add(e,h),safe_add(c,f)),g),d)}function md5_ff(g,f,k,j,e,i,h){return md5_cmn((f&k)|((~f)&j),g,f,e,i,h)}function md5_gg(g,f,k,j,e,i,h){return md5_cmn((f&j)|(k&(~j)),g,f,e,i,h)}function md5_hh(g,f,k,j,e,i,h){return md5_cmn(f^k^j,g,f,e,i,h)}function md5_ii(g,f,k,j,e,i,h){return md5_cmn(k^(f|(~j)),g,f,e,i,h)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};

/* Shows and hides the given div, putting it over the
 * black overlay 
 */
function lightbox(layer){
	var overlay = document.getElementById('overlay');
	var showBox = document.getElementById(layer);
	
	if (overlay.style.display == "block") {
		overlay.style.display = "";
		showBox.style.display = "";
	} else {
		overlay.style.display = "block";
		showBox.style.display = "block";
	}
}

function print_r(theObj){
    if (theObj.constructor == Array ||
    theObj.constructor == Object) {
        document.write("<ul>")
        for (var p in theObj) {
            if (theObj[p].constructor == Array ||
            theObj[p].constructor == Object) {
                document.write("<li>[" + p + "] => " + typeof(theObj) + "</li>");
                document.write("<ul>")
                print_r(theObj[p]);
                document.write("</ul>")
            }
            else {
                document.write("<li>[" + p + "] => " + theObj[p] + "</li>");
            }
        }
        document.write("</ul>")
    }
}

/* Validates the registered user and sends the verification 
 * mail via AJAX 
 */
function forgot(form){
	var registerForm = document.getElementById(form);
	var username = document.getElementById('username_'+form);
	var email = document.getElementById('email_'+form);
	var formError = document.getElementById('formError_'+form);
	var checkFalse = "true";
	
	/* First we check if the mail address or the user exits */
	if (email.value.length > 0) {
		AjaxHandler.setDefaultURL("../scripts/php/forgot.php")
		AjaxHandler.addParam("email", email.value);
		AjaxHandler.call();
		var availability = AjaxHandler.responseText;
		
		if (availability == "taken") {
			checkFalse = "false";
		}
	}
	
	if(username.value.length > 0){
		AjaxHandler.setDefaultURL("../scripts/php/forgot.php")
		AjaxHandler.addParam("check_login", username.value);
		AjaxHandler.call();
        
        var availability = AjaxHandler.responseText;
        
		if (availability == "taken") {
			checkFalse = "false";
		}
	}
	
	if(checkFalse == "false"){
		formError.innerHTML = "You'll receive a mail with instructions of how reactivate your account in a while.";
		formError.style.display = "block";
	} else {
		formError.innerHTML = "Email address or username not found in the database. <a href=\"register.php\">Do you want to register?</a>.";
		formError.style.display = "block";
	}
}

/* Validates the registration data given on the form
 * register.tpl 
 */
function register(form){
	var registerForm = document.getElementById(form);
	var username = document.getElementById('username_'+form);
	var password = document.getElementById('password_'+form);
	var password_repeat = document.getElementById('password_repeat_'+form);
	var email = document.getElementById('email_'+form);
	var md5_password = document.getElementById('md5_password_'+form);
	var md5_repeat_password = document.getElementById('md5_repeat_password_'+form);
	var formError = document.getElementById('formError_'+form);
	var checkFalse = "positive";
	
	var at = "@"
    var dot = "."
	var str = email.value;
    var lat = str.indexOf(at)
    var lstr = str.length
    var ldot = str.indexOf(dot)

	/* First we check that the email is not registered an dis a valid mail addr */
    if (str.indexOf(at) == -1 || str.indexOf(" ") != -1 || str.indexOf(dot, (lat + 2)) == -1 || str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot || str.indexOf(at, (lat + 1)) != -1 || str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr || str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
        email.style.border = "2px solid #2F82B8";
		checkFalse = "broken";
    } else {
		AjaxHandler.setDefaultURL("../scripts/php/register.php")
		AjaxHandler.addParam("email", email.value);
		AjaxHandler.call();
        
        var availability = AjaxHandler.responseText;
        
		if(availability == "taken"){
			email.style.border = "2px solid #2F82B8";
			checkFalse = "broken";
			formError.innerHTML = 'Email address already taken.';
		} else {
			email.style.border = "";
		}
	}
	
	/* Then we check if the passwords match and are larger than 4 charts */
	if(password.value != password_repeat.value || password.value.length < 4) {
		password.style.border = "2px solid #2F82B8";
		password_repeat.style.border = "2px solid #2F82B8";
		checkFalse = "broken";
		formError.innerHTML = 'Your passwords doesn\'t match.';
	} else {
		password.style.border = ""; password_repeat.style.border = "";
	}

	/* And the username, if exists and if it's greater than 3 */
	if(username.value.length < 3){
		username.style.border = "2px solid #2F82B8";
		username.style.border = "2px solid #2F82B8";
		checkFalse = "broken";
	} else {
		AjaxHandler.setDefaultURL("../scripts/php/register.php")
		AjaxHandler.addParam("check_login", username.value);
		AjaxHandler.call();
        
        var availability = AjaxHandler.responseText;
        
		if (availability == "taken") {
			username.style.border = "2px solid #2F82B8";
			checkFalse = "broken";
			formError.innerHTML = 'Username already taken.';
		} else {
			username.style.border = "";
		}
	}
	
	if(checkFalse == "positive"){
		md5_password.value = hex_md5(password.value);
		md5_repeat_password.value = hex_md5(password_repeat.value);
		password.value = "";
		password_repeat.value = "";
		
		registerForm.submit();
	} else {
		formError.style.display = "block";
	}
}

/* Functiono ot add rollover on every image that has
 * a _hover with the same name
 */
function swapOver(object){
	var withHover = object.src.replace("_hover","");
		
	if (withHover != object.src) {
		var oldIMG = object.src.replace("_hover","");
		object.src = oldIMG;
	}
	else {
		var longOut = object.src.split('.');
		var dafix = "";
			
		for(i=0; i<longOut.length-1; i++){
			dafix += longOut[i];
			if (i != longOut.length - 2) {
				dafix += ".";
			}
		}
		
		var hoverIMG = dafix + "_hover" + "." + longOut[longOut.length-1];
		object.src = hoverIMG;
	}
}

/* Checks if a given string is or not an integer
 * 
 */
function isInteger(s) {
  return (s.toString().search(/^-?[0-9]+$/) == 0);
}


/* Mouse position detector for the slider, maybe
 * a bit too far for an slider, but works
 */
var IE = document.all ? true : false
var tempX = 0;
var tempY = 0;

function getMouseXY(e){
    if (IE) { // grab the x-y pos.s if browser is IE,
        tempX = event.clientX + document.body.scrollLeft;
        tempY = event.clientY + document.body.scrollTop;
    }
    else { // grab the x-y pos.s if browser is NS
        tempX = e.pageX;
        tempY = e.pageY;
    }
    // catch possible negative values in NS4
    if (tempX < 0) {
        tempX = 0;
    }
    if (tempY < 0) {
        tempY = 0;
    }
    
    return true;
}

if (!IE) 
    document.captureEvents(Event.MOUSEMOVE)

document.onmousemove = getMouseXY;

/* Dom extension that gets the current position of any
 * element in the document 
 */
document.getElementPosition = function(obj){
    var X = 0;
    var Y = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            Y += obj.offsetTop;
            X += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else {
        if (obj.y) 
            Y += obj.y;
        if (obj.x) 
            X += obj.x;
    }
    return Array(X, Y);
}