//DENUG OPTIONS --- IMPORTANT: REMOVE ON PRODUCTION SERVER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

var tmp = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
if(tmp) var isIE = document.namespaces ? 1 : 0;

//switch Mood black / white
var styleSwitcher = Class.create();
styleSwitcher.prototype = {
	initialize: function() {
		Event.observe('black', 'mousedown', this.switchStyleBlack.bind(this), false);
		Event.observe('white', 'mousedown', this.switchStyleWhite.bind(this), false);
	},
			
	switchStyleBlack: function(element) {
		document.body.className = 'black';
		$('tabsLeft').className = 'black';
		$('tabsRight').className = 'black';
		$('indi').src = 'http://images.pixila.com/global/indicator/modalbox_black.gif';
		if(!$('black').hasClassName('selected')) {
			$('black').addClassName('selected');
			$('white').removeClassName('selected');
		}
				
		var selectedContent = {content: '_mood', selection: 'black'};
		jar.put('mood','black');
	},
			
	switchStyleWhite: function(element) {
		document.body.className = 'white';
		$('tabsLeft').className = 'white';
		$('tabsRight').className = 'white';
		if (!blackIndi) {
			$('indi').src = 'http://images.pixila.com/global/indicator/modalbox_white.gif';
		} else {
			$('indi').src = 'http://images.pixila.com/global/indicator/modalbox_black.gif';
		}
		if(!$('white').hasClassName('selected')) {
			$('white').addClassName('selected');
			$('black').removeClassName('selected');
		}
				
		var selectedContent = {content: '_mood', selection: 'white'};
		jar.put('mood','white');
	}
}
/*
function getRequestDetails(request){
    	var message = '';
    	try{
        	message += 'Method: '+request.method+'<br/>';
        	message += 'URL: '+request.url+'<br/>';
        	message += 'Parameters: '+$H(request.parameters).toQueryString()+'<br/>';
        	message += 'Response: '+request.transport.status+' '+request.transport.statusText+'<br/>';
        	var jsonHeader = request.transport.getResponseHeader('X-JSON');
        	var jsonText = (jsonHeader ? jsonHeader.escapeHTML():false);
        	message += 'X-JSON: '+(jsonText ? '<pre>'+"\n\n"+jsonText+"\n"+'</pre>':'')+'<br/>';
        	var resText = request.transport.responseText.escapeHTML();
        	message += 'Response Text: '+(resText ? '<pre>'+"\n\n"+resText+"\n"+'</pre>':'')+'<br/>';
       		return message;
    	}
		catch(ex) { 
			return message+'<br/>Invalid XML Request: '+getExceptionDetails(ex); 
		}
	}
	
	function getExceptionDetails(ex){
	    var message =
	    ex.name+': '+ex.message+'\n'+
	    (ex.fileName && ex.lineNumber ? ex.fileName+' (line <b>'+ex.lineNumber+'</b>)<br/><br/>':'')+
	    (ex.description ? 'Description:<pre>'+ex.description+'</pre><br/>':'')+
	    (ex.stack ? 'Stack trace: <pre>'+ex.stack+'</pre><br/>':'')+
	    (ex.number ? 'Number: '+ex.number+'<br/>':'')+
	    (ex['opera#sourceloc'] ? 'Location: <b>'+ex['opera#sourceloc']+'</b><br/>':'');
	    return message;
	}
						
	Ajax.Responders.register({
		onException: function(request,ex) {
			alert(getExceptionDetails(ex));
		}
	});
*/
//END DEBUG OPTION!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

// GLOBAL FUNCTIONS

	// ------------------ REDIRECT ------------------ // 
	function redirect(url) {
		window.location.href = url;
	}

	// ============= EFFECTS ============= // 
		// ------------------ SHOW/HIDE ------------------ // 
		Effect.OpenUp = function(element) {
    		element = $(element);
    		Effect.BlindDown(element);
		}

		Effect.CloseDown = function(element) {
    		element = $(element);
    		Effect.BlindUp(element);
		}

		Effect.Combo = function(element) {
			element = $(element);
			if(element.style.display == 'none') { 
				new Effect.OpenUp(element, arguments[1] || {}); 
			} else { 
				new Effect.CloseDown(element, arguments[1] || {}); 
			}
		}
		// ------------------ Fade Items ------------------ // 
		function swapFade() {
			new Effect.Fade(items_to_fade[i], { duration:1, from:1.0, to:0.0 });
			i++;
			if (i == items_to_fade.length) i = 0;
			new Effect.Appear(items_to_fade[i], { duration:1, from:0.0, to:1.0 });
		}			
		
	// ============= CATEGORY SEARCH ============= // 
		// --------------- LOAD CATEGORIES DATA ------------------ // 
		var params = "";
		var categoryData = new Array();
		
		function loadCategories(category) {
			toggleCategories('mainCats',category);
			
			new Ajax.Updater('subCats1','/lib/global/php/getCategories.php', {
				method: 'get',
				parameters: category,
				encoding: 'UTF-8'
			});
		}

		function toggleCategories(elements,selection) {
			var list = $(elements).getElementsBySelector('p');
			list.each(function(e) {
				var selected = $(e).readAttribute('name')+' - selected->';
				var deselected =  $(e).readAttribute('name');
				
				if (selection == e.id) {
					$(e.id).addClassName('selected');
					} else {
						$(e.id).removeClassName('selected');
					}
				});
			}
	// =========== END CATEGORY SEARCH =========== // 
		
	// =========== GALLERY SLIDER =========== //
	/*
		var onImg = new Image();
		onImg.src = '/media/global/gallery/page_on.gif';
		
		var offImg = new Image();
		offImg.src = '/media/global/gallery/page_off.gif';

		function togglePageButtons(element) {
			var list = $('pages').childElements();
			list.each(function(e) {
				if (e.hasClassName('on')) {
					$(e.id).className = 'off';
					$(e.id).update('<img src="/media/global/gallery/page_off.gif" width="8" height="8" border="0">');
					$(e.id).innerHTML;
				}
			});
			$(element).className = 'on';
			$(element).update('<img src="/media/global/gallery/page_on.gif" width="8" height="8" border="0">');
			$(element).innerHTML;
		}	
	*/

	// ============= AJAX UTILITIES ============= // 
var Xposejax = {
	receiveArray: function(responseText) {
		if ( typeof responseText != 'string' ){
			return responseText;
		}
    	eval('var ret = ' + responseText);
    	return ret;
	},
	trim: function(str) {
    	return str.replace(/^(\s+)?(\S*)(\s+)?$/, '$2');
	},
	ltrim: function(str) {
    	return str.replace(/^\s*/, '');
	},
	rtrim: function(str) {
    	return str.replace(/\s*$/, '');
	},
	xmldoc2string: function(xmlDocObject){
		// use the jsolait xmlrpc module to parse the response text xml.
		// The jsolait 2.0 libraries must be included seperately.
		// @see http://jsolait.net/
		var xmlMod=null;
		try{
			var xmlMod = imprt("xml");
		} catch(e){
			//alert(e);
			throw "importing of xml module failed.";
		}
		// try to parse the response (fault responses will throw an exception)
		try {	
			var xmlString = xmlMod.node2XML(xmlDocObject.documentElement);
		} catch(e) {
			throw e;
		}
		return xmlString;
	},
	
	xmlrpc_extractpayload: function(responseText){
		// use the jsolait xmlrpc module to parse the response text xml.
		// The jsolait 2.0 libraries must be included seperately.
		// @see http://jsolait.net/
		// try to import the xmlrpc module
		var xmlrpcMod=null;
		try{
			var xmlrpcMod = imprt("xmlrpc");
		}catch(e){
			//alert(e);
			throw "importing of xmlrpc module failed.";
		}
		// try to parse the response (fault responses will throw an exception)
		try {
			var xmlPayload = xmlrpcMod.unmarshall(responseText);
		} catch(e) {
			if ( e.constructor == xmlrpcMod.Fault ){
				//alert(e.faultCode + ' ' + e.faultString);
				throw e;
			} else {
				alert(e);
			}
		}
		return xmlPayload;
	},
	
	xmlrpc_formatrequest: function(methodName, methodParameters){
		// Use the XMLRPCMessage class to format the request XML.
		// The XMLRPCMessage libraries must be included seperately.
		// @see http://www.scottandrew.com/xml-rpc
		
		// TODO: we could use the jsolait xmlrpc module to do this and
		// eliminate the duplicate functionality of XMLRPCMessage.
		
		var message = new XMLRPCMessage(methodName);
		message.addParameter(methodParameters);
		return message.xml();
	},

	xmlrpc_receivepayload: function(responseText) {
		// try to parse the response (fault responses will throw an exception)
		try {
			// extract the payload
			xmlPayload = this.xmlrpc_extractpayload(responseText);
	
			//create a DOMParser
			//var xmlDOMParser = new DOMParser();
			//create new document from string
			//var xmlDoc = xmlDOMParser.parseFromString(xmlPayload, "text/xml");
			var xmlDoc;
			try {
				// Mozilla, create a new DOMParser
				var xmlDOMParser = new DOMParser();
				xmlDoc = xmlDOMParser.parseFromString(xmlPayload, "text/xml");
			} catch(e){
				// Internet Explorer, create a new XML document using ActiveX
				// and use loadXML as a DOM parser.
				try {
					xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
					xmlDoc.async="false";
					xmlDoc.loadXML(xmlPayload);
				} catch(e){
					throw e;
				}
			}
		} catch(e) {
			/// TODO: deal with exceptions
			if ( typeof e == 'object' && e.faultCode ){
				throw e;
			} else {
				alert(e);
			}
		}
		return xmlDoc;
	},
	
	requestState: function(req) {
		switch (req.readyState) {
			case 1: case 2: case 3:
				return true;
				break;
		default:
			return false;
			break;
		}
	}, 
	
	showTimeoutMessage: function() {
		alert('The request has timed out. Please try again.');
	},
	
	defaultOnFailure: function() {
		alert('The request has failed.');
	},
	
	isFailure: function(req) {
		if(AjaxFailure.isNotXmlHttpRequest(req)) {
			return true;
		}
		if(AjaxFailure.isHeaderlessContent(req)) {
			this.showTimeoutMessage();
			return true;
		}
		if(AjaxFailure.isFailureString(req)) {
			return true;
		}
		return false;
	}
}

var AjaxFailure = {
	isHeaderlessContent: function(req) {
		return (req.getResponseHeader('X-Headerless-Content') == 'YES' ? true : false);
	},
	
	isFailureString: function(req) {
		return (req.responseText == 'ajax_fail' ? true : false);
	},
	
	isNotXmlHttpRequest: function(req) {
		return (req.responseText ? false : true);
	}
}

// global responders for catching timeouts
Ajax.Responders.register({
	onCreate: function(req) {
		if(!req.options['supressTimeout']) { 
			req['TimeoutID'] = window.setTimeout(
				function() {
					if (AjaxUtil.requestState(req.transport)) {
						if(req.options['supressReqAbort']) {
							// don't abort req
							//alert('did not abort');
						} else {
							req.transport.abort();
							//alert('aborted');
						}
						
						// call on the onTimeout Function if exists
						if(req.options['onTimeout']) {
							req.options['onTimeout'](req.transport, req.json);
						} 
						// else run the onFailure method
						else if (req.options['onFailure']) {
							AjaxUtil.showTimeoutMessage();
							req.options['onFailure'](req.transport, req.json);
						} else {
							AjaxUtil.showTimeoutMessage();
							AjaxUtil.defaultOnFailure();
						}
					}
				},
				(req.option['timeout'] ? req.options['timeout'] : 20000) // twenty seconds
			);
		}
	},
	onComplete: function(req) {
		// Clear the timeout, the request completed ok
		if(!req.options['supressTimeout']) {
			window.clearTimeout(req['TimeoutID']);
		}

		if(AjaxUtil.isFailure(req.transport)) {
			if (req.options['onFailure']) {
				req.options['onFailure'](req.transport, req.json);
			} else {
				AjaxUtil.defaultOnFailure();
			}
			return;
		}
	}
});

// modifications to Ajax Request

Ajax.Request.prototype.respondToReadyState = function(readyState) {
	var state = Ajax.Request.Events[readyState];
	var transport = this.transport, json = this.evalJSON();
	if (state == 'Complete') {
		try {
    		this._complete = true;
    		(this.options['on' + this.transport.status]
     		|| this.options['on' + (this.success() ? 'Success' : 'Failure')]
     		|| Prototype.emptyFunction)(transport, json);
  		} catch (e) {
    		this.dispatchException(e);
  		}
  		var contentType = this.getHeader('Content-type');
     	if (contentType && contentType.strip().
        	match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
          	this.evalResponse();
	}
	try {
		// added returnFlag, only execute this.options['on'+event]() if its true;
		var returnFlag = Ajax.Responders.dispatch('on' + state, this, transport, json);
		if(returnFlag == false && state == 'Complete') {
    		// don't do anything
		} else {
			(this.options['on' + state] || Prototype.emptyFunction)(transport, json);
		}
	} catch (e) {
		this.dispatchException(e);
	}
	if (state == 'Complete') {
		// avoid memory leak in MSIE: clean up
		this.transport.onreadystatechange = Prototype.emptyFunction;
	}
}

//============== GLOBAL LOGOUT ============================ //
			function logOut() {
				var action = 'logout';
				
				var url = '/lib/logout.php';
				var params = encodeURI('action='+action);
		
				var myAjax = new Ajax.Request (url, { 
					method: 'post',
					parameters: params,
					onComplete: function(req) {
						var data = Xposejax.receiveArray(req.responseText);
						window.location.href = data.redirect; //"http://www.onexpose.dev/logout/";
						//} else if (data.message) {
						//	window.location.href = "/";
						//}
					}
				});
			}

/**
*
*  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();
}
var base64		= {
								charmap : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
								encode  : function(str) {
											var ret = "";
											var c, i, acc = 0;
											var div = 1;
											for( i=0, c=0; i<str.length; i++, c++) {
												acc = acc*256 + str.charCodeAt(i);
												div = div*4;
												ret = ret + base64.charmap.charAt(parseInt(acc/div));
												acc = acc % div;
												if(div==64) ret = ret + base64.charmap.charAt(parseInt(acc)), acc = 0, div = 1, c++;
												if(c>=75) c=-1, ret = ret + "\n";
											}
											if(i%3) {
												ret = ret + base64.charmap.charAt(parseInt(acc*((i%3==1)?16:4)));
												ret = ret + ((i%3)==1?"==":"=");
											}
											return ret;
										},
								decode : function(str) {
											var ret = "";
											var i, acc = 0;
											var div = 1;
											for(i=0;i<str.length;i++) {
											if(str.charAt(i)=="=" || str.charAt(i)=='\n') break;
											acc = acc*64 + base64.charmap.indexOf(str.charAt(i));
											div = (div==1?64:div/4);
											if(div!=64) {
											ret = ret + String.fromCharCode(parseInt(acc/div));
											acc = acc % div;
										}
									} return ret;
								}
							}

/**
 * Javascript code to store data as JSON strings in cookies. 
 * It uses prototype.js 1.5.1 (http://www.prototypejs.org)
 * 
 * Author : Lalit Patel
 * Website: http://www.lalit.org/lab/jsoncookies
 * License: Creative Commons Attribution-ShareAlike 2.5
 *          http://creativecommons.org/licenses/by-sa/2.5/
 * Version: 0.3
 * Updated: Jun 22, 2007 3:40pm
 * 
 * Chnage Log:
 *   v 0.3
 *   -  Removed dependancy on json.js (http://www.json.org/json.js)
 *   -  empty() function only deletes the cookies set by CookieJar
 */

var CookieJar = Class.create();

CookieJar.prototype = {

	/**
	 * Append before all cookie names to differntiate them.
	 */
	appendString: "_",

	/**
	 * Initializes the cookie jar with the options.
	 */
	initialize: function(name, options) {
		this.options = {
			expires: 31536000,		// seconds (1 hr)
			path: '/',			// cookie path
			domain: 'pixila.com',			// cookie domain
			secure: ''			// secure ?
		};
		Object.extend(this.options, options || {});

		if (this.options.expires != '') {
			var date = new Date();
			date.setTime(date.getTime() + (this.options.expires * 1000));
			this.options.expires = '; expires=' + date.toGMTString();
		}
		if (this.options.path != '') {
			this.options.path = '; path=' + escape(this.options.path);
		}
		if (this.options.domain != '') {
			this.options.domain = '; domain=' + escape(this.options.domain);
		}
		if (this.options.secure == 'secure') {
			this.options.secure = '; secure';
		} else {
			this.options.secure = '';
		}
	},

	/**
	 * Adds a name values pair.
	 */
	put: function(name, value) {
		name = this.appendString + name;
		cookie = this.options;
		var type = typeof value;
		switch(type) {
		  case 'undefined':
		  case 'function' :
		  case 'unknown'  : return false;
		  case 'boolean'  : 
		  case 'string'   : 
		  case 'number'   : value = String(value.toString());
		}
		var cookie_str = name + "=" + escape(Object.toJSON(value));
		try {
			document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Removes a particular cookie (name value pair) form the Cookie Jar.
	 */
	remove: function(name) {
		name = this.appendString + name;
		cookie = this.options;
		try {
			var date = new Date();
			date.setTime(date.getTime() - (3600 * 1000));
			var expires = '; expires=' + date.toGMTString();
			document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Return a particular cookie by name;
	 */
	get: function(name) {
		name = this.appendString + name;
		var cookies = document.cookie.match(name + '=(.*?)(;|$)');
		if (cookies) {
			return (unescape(cookies[1])).evalJSON();
		} else {
			return null;
		}
	},

	/**
	 * Empties the Cookie Jar. Deletes all the cookies.
	 */
	empty: function() {
		keys = this.getKeys();
		size = keys.size();
		for(i=0; i<size; i++) {
			this.remove(keys[i]);
		}
	},

	/**
	 * Returns all cookies as a single object
	 */
	getPack: function() {
		pack = {};
		keys = this.getKeys();

		size = keys.size();
		for(i=0; i<size; i++) {
			pack[keys[i]] = this.get(keys[i]);
		}
		return pack;
	},

	/**
	 * Returns all keys.
	 */
	getKeys: function() {
		keys = $A();
		keyRe= /[^=; ]+(?=\=)/g;
		str  = document.cookie;
		CJRe = new RegExp("^" + this.appendString);
		while((match = keyRe.exec(str)) != undefined) {
			if (CJRe.test(match[0].strip())) {
				keys.push(match[0].strip().gsub("^" + this.appendString,""));
			}
		}
		return keys;
	}
};

/**
*
*  AJAX IFRAME METHOD (AIM)
*  http://www.webtoolkit.info/
*
**/

AIM = {

	frame : function(c) {

		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
		document.body.appendChild(d);

		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}

		return n;
	},

	form : function(f, name) {
		f.setAttribute('target', name);
	},

	submit : function(f, c) {
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart();
		} else {
			return true;
		}
	},

	loaded : function(id) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}

		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML);
		}
	}

}

function toggelSideBar(element,bar) {
				Effect.toggle(bar, 'blind', {duration: .5}); 
				if($(element).hasClassName('off')) {
					$(element).removeClassName('off');
				} else {
					$(element).addClassName('off');
				}		
			}
var myPopUp = "";
function viewDetails(url,name,height) {
	if(!height) height = 740;
	myPopUp = window.open(url,name,'width=940,height='+height+',left=0,top=0,scrollbars=yes,resizable=yes');	
	myPopUp.focus();
}

function hideShowSelect() {
	if (document.getElementById && document.documentElement.filters) {
		var args = arguments;
		for (var i_tem = 0; i_tem < args.length; i_tem++)
		if (document.getElementById(args[i_tem]).style.visibility == '') {
			document.getElementById(args[i_tem]).style.visibility='hidden';
		} else {
			document.getElementById(args[i_tem]).style.visibility='';
		}
	}
}

/*** GOOGLE ***/
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
/*** END GOOGLE ***/