/*

	Global Functions
	Copyright 2007 Wimbomedia.com

*/


/* GLOBAL CURRENT VARIABLES */
var CURRENT_MODULE = "none";
var CURRENT_BROWSING = "none";
var CURRENT_SORTING = "recent";


window.onload = preload;
//window.onbeforeunload = kwaheri;
window.onerror = errorHandler;


/* --------------------- [ PRELOADER ] ------------------------ */

function preload()
{
	preloader.load();
}

var preloader = {
	images : new Array(),
	timer : null,
	toload : 0,
	loaded : 0,
	boxWidth : 300,
	bar : null
}

preloader.item = function(src, size)
{
	return ( {src:src, size:size, loaded:false, hook:null} );
}

preloader.init = function()
{
	var p = preloader;

	document.getElementById("preloadBox").style.width = p.boxWidth + "px";

	p.bar = document.getElementById("preloadBar");

	var util_1 = new Image()
	util_1.src = "../images/preloader_bar.png";

	var util_2 = new Image()
	util_2.src = "../images/preloader_box.png";

	var util_3 = new Image()
	util_3.src = "../images/splash_logo.jpg";
}

preloader.complete = function()
{
	var splash = document.getElementById("splash_screen");
	splash.style.display = "none";
	splash.parentNode.removeChild(splash);	

	document.getElementById("main").style.display = "block";

	init();
}

preloader.load = function()
{
	var p = preloader;

	p.init();

	var imgs = p.images;
	var imgsL = imgs.length;

	for(var i=0; i<imgsL; i++)
	{
		var pimg = new Image();
		pimg.src = imgs[i].src;
		imgs[i].hook = pimg;

		p.toload += imgs[i].size;
	}

	p.timer = setInterval("preloader.checkLoad()", 100);
}

preloader.checkLoad = function()
{
	var p = preloader;
	var imgs = p.images;
	var imgsL = imgs.length;

	p.loaded = 0;

	for(var i=0; i<imgsL; i++)
	{
		var img = imgs[i];

		img.loaded = img.hook.complete;

		if(img.loaded)
		{
			p.loaded += img.size;
		}
	}

	var per = p.loaded/p.toload;

	if(per > 0.95) { per = 1; }

	p.bar.style.width = (per*p.boxWidth) + "px";
	p.bar.innerHTML = Math.round(per*100) + "%";

	if(per == 1)
	{
		setTimeout("preloader.complete()", 1000);
		if(p.timer)
		{
			clearInterval(p.timer);
			p.timer = null;
		}
	}
}




/* --------------------[ WINDOW FUNCTIONS ]-------------------- */


/* HANDLE ERROR */
function errorHandler(msg, url, line)
{
	return false; 	/* true would catch errors */
}


/* HANDLE KEY EVENTS */
var keyEvents = {

	focused : "",

	init : function ()
	{
		var ke = keyEvents;

		if (document.addEventListener)
		{
			document.addEventListener("keydown", ke.keydown, false);
			document.addEventListener("keypress", ke.keypress, false);
			document.addEventListener("keyup", ke.keyup, false);
		}
		else if (document.attachEvent)
		{
			document.attachEvent("onkeydown", ke.keydown);
			document.attachEvent("onkeypress", ke.keypress);
			document.attachEvent("onkeyup", ke.keyup);
		}
		else
		{
			document.onkeydown = ke.keydown;
			document.onkeypress = ke.keypress;
			document.onkeyup = ke.keyup;
		}
	},

	keydown : function (e)
	{
		var ev = (e) ? e : window.event;
		var kc = (ev.keyCode) ? ev.keyCode : ev.which;

		if(kc == 13)
		{
			if(document.getElementById("search_entry") == keyEvents.focused)
			{
				doSearch();
			}
		}
	},

	keyup : function (e)
	{
		return;
	},

	keypress : function (e)
	{
		return;
	}

}


/* WINDOW FOCUSING */
var  lense = {

	bisMSIE : false,
	active_element : "",

	init : function()
	{
		if(navigator.appName == "Microsoft Internet Explorer")
		{
			lense.active_element = document.activeElement;
			document.onfocusout = lense.blurDetected;
			lense.bIsMSIE = true;
		}
		else
		{
			window.onblur = lense.isBlurred;
		}

		window.onfocus = lense.isFocused;
	},

	blurDetected : function()
	{   
		if(lense.bIsMSIE && (lense.active_element != document.activeElement))
		{
			lense.active_element = document.activeElement;
		}
		else
		{
			lense.isBlurred();
		}
	},

	isBlurred : function()
	{
		WimboPlayer.blur("true");
	},

	isFocused : function()
	{
		WimboPlayer.blur("false");
	}

}


/* UPDATE APP TITLE AND STATUS MSG (Called by PLAYER) */
function updateTitle(text)
{
	if(text)
	{
		document.title = "Wimbomedia | "+ text;
	}

	window.defaultStatus = document.title;
}


/* FUNCTION FOR POPUP WINDOWS */
function popup(url, width, height, resizable, scrollbars)
{
	var resize = (resizable == "" || resizable == null) ? "yes" : resizable;
	var scroll = (scrollbars == "" || scrollbars == null) ? "yes" : scrollbars;

	var properties = "";

	if(width)
	{
		properties += "width = " + width + ",";
	}

	if(height)
	{
		properties += "height = " + height + ",";
	}

	properties	+= "toolbar = 0, location = 0"
			+ ",resizable = " + resize
			+ ",scrollbars = " + scroll;

	var leftprop, topprop, screenX, screenY;

	if(navigator.appName == "Microsoft Internet Explorer")
	{
		screenY = document.body.offsetHeight;
		screenX = window.screen.availWidth;
	}
	else
	{
		screenY = window.outerHeight
		screenX = window.outerWidth
	}

	leftvar = (screenX - 700) / 2;
	rightvar = (screenY - 500) / 2;

	if(navigator.appName == "Microsoft Internet Explorer")
	{
		leftprop = leftvar;
		topprop = rightvar;
	}
	else
	{
		leftprop = (leftvar - pageXOffset);
		topprop = (rightvar - pageYOffset);
	}

	open(url,name,properties);
}


var invite = {

	send : function()
	{
		var from_field	= document.getElementById("invite_from");
		var to_field	= document.getElementById("invite_to");

		from_field.style.border	= "1px #333333 solid";
		to_field.style.border	= "1px #333333 solid";

		var from = from_field.value;
		var to	 = to_field.value;

		if(from == "")
		{
			from_field.style.border = "1px #ff3333 solid";
			from_field.focus();
			alert("You forgot to include your name.");
			return;
		}

		if(to == "")
		{
			to_field.style.border = "1px #ff3333 solid";
			to_field.focus();
			alert("You forgot to include your friends email address.");
			return;
		}

		if(!validateEmail(to))
		{
			to_field.style.border = "1px #ff3333 solid";
			to_field.focus();
			alert(to + " is not a valid email address.");
			return;
		}

		AjaxEngine._call(AjaxEngine._print, "invitation.php?action=dispatch&from="+from+"&to="+to, "invite_feedback", true, false);

		from_field.value = "";
		to_field.value	 = "";
	},

	update : function()
	{
		AjaxEngine._call(AjaxEngine._print, "invitation.php?action.php=fetch", "invite_feedback", true, false);
	}
}



/* --------------------[ DISPLAY ELEMENTS ]-------------------- */


/* FOG BOX */
var fogBox = {

	create : function(name, c, w, cy, cw, noInnerBox)
	{
		var cnt	= c;
		var h = 1000;
		var iw = (cw < w) ? cw : w;
		iw -= 26;
		var ix = (w-cw)/2;
		ix = (ix > 0) ? ix : 0;

		var fogbox_style	= ""
					+ "position: absolute;"
					+ "top: 0px;"
					+ "left: 0px;"
					+ "width: " + w + "px;"
					+ "height: " + h + "px;"
					+ "";

		var outerbox_style	= ""
					+ "filter: alpha(opacity=80);"
					+ "opacity: 0.8;"
					+ "z-index: 1000;"
					+ "position: absolute;"
					+ "background: #000000;"
					+ "top: 0px;"
					+ "left: 0px;"
					+ "width: " + w + "px;"
					+ "height: " + h + "px;"
					+ "";

		if(!noInnerBox) // double negative he he he...
		{
			var innerbox_style	= ""
						+ "filter: alpha(opacity=70);"
						+ "opacity: 0.70;"
						+ "z-index: 1001;"
						+ "position: absolute;"
						+ "border: 3px #000000 solid;"
						+ "background: #000000;"
						+ "top: " + cy + "px;"
						+ "left: " + ix + "px;"
						+ "width: " + iw + "px;"
						+ "padding: 10px;"
						+ "font: bold 14px Arial;"
						+ "color: #000000;"
						+ "text-align: justfiy;"
						+ "";
		}

		var content_style	= ""
					+ "filter: alpha(opacity=90);"
					+ "opacity: 0.9;"
					+ "z-index: 1002;"
					+ "position: absolute;"
					+ "border: 3px #cc7700 solid;"
					+ "top: " + cy + "px;"
					+ "left: " + ix + "px;"
					+ "width: " + iw + "px;"
					+ "padding: 10px;"
					+ "font: bold 14px Arial;"
					+ "color: #ffaa00;"
					+ "text-align: left;"
					+ "";

		// Check if a Fob Box with this name aleady
		// exists. If it does, delete it first.
		if(document.getElementById(name))
		{
			fogBox.destroy(name);
		}

		var content	= ""
				+ "<div style='fogbox_style' id='" + name + "'>"
				+ "<div style='" + outerbox_style + "'></div>"
				+ "";

		if(!noInnerBox)
		{
			content += "<div style='" + innerbox_style + "'>" + cnt + "</div>"
		}

		content	+= ""
			+ "<div style='" + content_style + "'>" + cnt + "</div>"
			+ "</div>"
			+ "";

			return content;
		},

	destroy : function(box, callback)
	{
		var fogbox = document.getElementById(box);
		var p = fogbox.parentNode;
		p.removeChild(fogbox);

		if(callback)
		{
			setTimeout(callback, 0);
		}
	}

}


/* ALERT BOX */
var AlertBox = {

	timer : null,
	box : null,
	name : "alert_box",

	show : function(msg)
	{
		AlertBox.box = document.getElementById(AlertBox.name);
		AlertBox.box.style.display = "block";

		AlertBox.box.innerHTML += msg;

		if(AlertBox.timer != null)
		{
			window.clearTimeout(AlertBox.timer);
		}

		AlertBox.timer = window.setTimeout("AlertBox.hide()", 5000);
	},

	hide : function()
	{
		AlertBox.box.style.display = "none";
		AlertBox.box.innerHTML = "";

		if(AlertBox.timer != null)
		{
			window.clearTimeout(AlertBox.timer);
			AlertBox.timer == null;
		}
	}
}


/* LOADING DIV */
var loadingMsg  = "<div class='loading'><div class='loading_text'>Loading...</div></div>";

var LOAD_PADDING = "<div style='height:100px;'></div>";

function displayLoadingMsg(area)
{
	try{ area.innerHTML += loadingMsg; }
	catch(err){}
}


/* HISTORY BTNS
window.onscroll = doOnScroll;
function doOnScroll()
{
	if(window.pageYOffset) { var y = window.pageYOffset; } else { var y = document.body.scrollTop; }
	var b = document.getElementById("nav_history");
	if(y > 110) { b.style.position = "absolute"; b.style.top = window.pageYOffset+10+"px"; } else { b.style.position = "relative"; }
}
*/


/* --------------------[ STRING FUNCTIONS ]-------------------- */


/* INDEX OF A STRING IN AN ARRAY */
Array.prototype.findIndex = function(value)
{
	var err = -1;

	for (var i=0; i<this.length; i++)
	{
		if (this[i] == value)
		{
			return i;
		}
	}

	return err;
}


/* VALIDATE EMAIL INPUT (returns true or false) */
function validateEmail(input)
{
	var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	var result = filter.test(input);
	return result;
}


/* CONVERT CARRIAGE RETURN LINE BREAKS TO "[BR]" */
function nl2br(input)
{
	var output = "";

	for(i=0; i<input.length; i++)
	{
		if(input.charCodeAt(i) == 10)
		{
			output += "[br]";
		}
		else
		{
			output += input.charAt(i);
		}
	}

	return output;
}


/* PARSE INPUT */
function parseInput(str)
{
	// THESE INPUTS WILL KILL THE PROCESS
	var testStr = /www./i;
	if(str == null || str == "" || testStr.test(str)) { return; }

	// REMOVE HTML TAGS
	str = str.replace(/<.*?>/g,'');

	// REMOVE "+"
	str = str.replace(/\+/g,' ');

	// REPLACE "< and >" with " "
	str = str.replace(/</g,'').replace(/>/g,'');

	// TRIM WHITE SPACES
	str = str.replace(/^\s+|\s+$/g,'');

	// CHOUGH UP THE OUTPUT
	return str;	
}


/* PARSE AND GET FUNCTION NAME */
function getFunctionName(f)
{
	var name = "";
	var str = f.toString();
	var regex = /(\s*function\s+)(\w+)(\s*\()/m;
 	//var regex = /(function\s*)(\w+)(\s*\()/;

	if (regex.test(str))
	{
		regex.exec(str);
		name = RegExp.$2;
	}

	return name;
}






//--------------------[ INTERFACE FUNCTIONS ]--------------------


/* FUNCTION TO SWAP OBJECT STYLES */
function swapStyle(obj, newStyle)
{
	var current = obj.className;

	if(current.lastIndexOf("-") > 0)
	{
		current = current.substring(0, current.lastIndexOf("-"));
	}

	if(newStyle == "base")
	{
		var style = "";
	}
	else
	{
		var style = "-"+newStyle;
	}

	obj.className = current+style;
}


/* FUNCTION TO SWEEP FOR CLASSES */
function sweepFor(cName, classParent)
{
	var cp = classParent ? classParent.getElementsByTagName("div") : document.getElementsByTagName("div");
	var sweepEl = new Array();

	if(cp)
	{
		for(i=0; i<cp.length; i++)
		{
			if(cp[i].className == cName)
			{
				sweepEl.push(cp[i]);
			}
		}
	}

	return sweepEl;
}


/* FUNCTION TO ATTACH EVENTS TO ELEMENTS */
function addEvent(obj, action)
{
	if(!obj) {return;}

	if (document.attachEvent)
	{
		obj.attachEvent("onmouseover", action.over);
		obj.attachEvent("onmouseout", action.out);
		obj.attachEvent("onmousedown", action.down);
		obj.attachEvent("onmouseup", action.up);
	}
	else if (document.addEventListener)
	{
		obj.addEventListener("mouseover", action.over, false);
		obj.addEventListener("mouseout", action.out, false);
		obj.addEventListener("mousedown", action.down, false);
		obj.addEventListener("mouseup", action.up, false);
	}
}


/* MOUSE EFFECTS */
var mouseFx = {

	over : function(e)
	{
		var src = e.target ? e.target : window.event.srcElement;

		if(!focused(src))
		{
			swapStyle(src, "over");
		}
	},

	out : function(e)
	{
		var src = e.target ? e.target : window.event.srcElement;
			
		if(!focused(src))
		{
			swapStyle(src, "base");
		}
	},

	down : function(e)
	{
		var src = e.target ? e.target : window.event.srcElement;
			
		if(!focused(src))
		{
			swapStyle(src, "down");
		}
	},

	up : function(e)
	{
		var src = e.target ? e.target : window.event.srcElement;
			
		if(!focused(src))
		{
			swapStyle(src, "base");
		}
	}

}


/*  CHECK IF THIS TAB IS THE SELECTION / FOCUS */
function focused(obj)
{
	if(obj.className.indexOf("focus") > -1)
	{
		return true;
	}
	else
	{
		return false;
	}
}


/* SWITCH BETWEEN NAVIGATION TABS */
function switchNavTabs(module)
{
	var tabNum = sweepFor("nav_item", document.getElementById("nav_main")).length;

	if(CURRENT_MODULE != "none")
	{
		var focus = document.getElementById(CURRENT_MODULE.nav_tab);
		swapStyle(focus, "base");
		focus.style.zIndex = tabNum+1-(CURRENT_MODULE.nav_tab.substring(CURRENT_MODULE.nav_tab.length-1, CURRENT_MODULE.nav_tab.length));
	}

	var m = document.getElementById(module.nav_tab);

	swapStyle(m, "focus");
	m.style.zIndex = tabNum;
}


/* FOCUS ON 1ST INPUT FIELD IN FORM */
function formFocus(formArea)
{
	var area = document.getElementById(formArea);
	var m_form = area.getElementsByTagName("form")[0];

	for(var i=0; i<m_form.length; i++)
	{
		if (m_form[i].type != "hidden")
		{
			if (m_form[i].disabled != true)
			{
				m_form[i].focus();
				break;
			}
		}
	}
}






/* --------------------[ INTERFACE FUNCTIONS ]-------------------- */


/* FUNCTION TO CALL NEXT PAGE OF SEARCH RESULTS */
function r_page(page, arg, filter)
{
	var r = (arg) ? arg : 1;
	var area = window["ajax_r_area"+r];
	var call = window["ajax_r_call"+r];

	var y = document.getElementById(area).offsetTop;
	window.scroll(0,y);

	if(call.indexOf("&q=") > -1)
	{
		var re = new RegExp("&w\=([^&]*)&q\=([^&]*)");
		var match = re.exec(call);
		var query = match[2];
		var where = match[1];

		var eon = new Array("searchFor", query, where, false, page)
		History.add(eon);
	}

	if(filter)
	{
		var filter = document.getElementById("album_list").value;
		AjaxEngine._call(AjaxEngine._print, call+page+"&filter="+filter, area);
	}
	else
	{
		AjaxEngine._call(AjaxEngine._print, call+page+"&sort="+CURRENT_SORTING, area);
	}
}


/* HISTORY */
var History = {

	eons : new Array(),
	current : 0,

	add : function(page)
	{
		with(History)
		{
			if(current >= eons.length)
			{
				eons.push(page);
				current = eons.length-1;
			}
			else
			{
				var s = current+1;
				var l = eons.length-s;
				eons.splice(s, l, page);
				current = s;
			}
		}

		History.updateBtns();
	},

	recall : function(direction)
	{
		with(History)
		{
			if(eons.length < 1) { return; }
			if(current == 0 && direction == 'b') { return; }
			if(current+1 == eons.length && direction == 'f') { return; }
		}

		switch(direction)
		{
			case "b": History.current -= 1; break;
			case "f": History.current += 1; break;
			default: History.current = History.eons.length-1; break;
		}

		var eon = History.eons[History.current];

		var action = eon[0] + "(";
		for(var i=1; i<eon.length; i++)
		{
			if(i != 1) { action += ","; }
			action += "'" + eon[i] + "'";
		}

		action += ",false)";

		setTimeout(action, 0);

		History.updateBtns();
	},

	updateBtns : function()
	{
		with(History)
		{
			if(current+1 == eons.length) { document.getElementById("history_fwd_btn").className = "history_btn_disabled"; }
			else { document.getElementById("history_fwd_btn").className = "history_btn"; }

			if(current == 0) { document.getElementById("history_back_btn").className = "history_btn_disabled"; }
			else { document.getElementById("history_back_btn").className = "histroy_btn"; }
		}
	}

}


/* CLIPPINGS */
var Clippings = {

	clips : new Array(),

	add : function(type, id, title)
	{
		var str = type.substring(0, 1);
		str = str.toUpperCase();
		str += type.substring(1, type.length);
		type = str;

		for(var i=0; i<Clippings.clips.length; i++)
		{
			var clip = Clippings.clips[i];

			if(clip.type == type && clip.id == id)
			{
				var msg = str + " already in clipboard<br />";
				AlertBox.show(msg);
				return;
			}
		}

		Clippings.clips.push( { type:type, id:id, title:title } );
		Clippings.update();

		var msg = str + " added to clipboard<br />";
		AlertBox.show(msg);
	},

	update : function()
	{
		var clips = Clippings.clips;
		var clipsNum = clips.length;
		var size = 200;
		var content = "<select size='1' id='clipped' style='padding:2px; border:0; background:#111111; font:bold 11px Arial; color:#ffaa00;' onChange=Clippings.open()>";

		content += "<option value=''>Clipboard : ";
		content += (clipsNum == 0) ? "Empty" : clipsNum + " item";
		if(clipsNum != 1 && clipsNum != 0) { content += "s"; }
		content += "</option><optgroup value='' style='border-bottom:1px #666666 dotted;'></optgroup>";

		clips.sort(Clippings.order);
		for(var i=0; i<clips.length; i++)
		{
			var clip = clips[i];

			if(i == 0)
			{
				content += "<optgroup label='" + clip.type + "s' style='font:normal 11px Arial; color:#0099ff;'>";
			}

			if(i > 0 && clip.type != clips[i-1].type)
			{
				content += "</optgroup><optgroup label='" + clip.type + "s' style='font:normal 11px Arial; color:#0099ff;'>";
			}

			var title = decodeURI(clip.title);

			if(size && title.length > size) { title = title.substring(0, size) + "..."; }

			content += "<option value=" + i + ">" + title + "</option>";
		}

		content += "</optgroup></select>";

		document.getElementById("clipboard").innerHTML = content;
	},


	show : function(holder, where, size)
	{
		if(!holder) { return; }

		var clips = Clippings.clips;
		var clipsNum = clips.length;
		var content = "<select size='1' id='clip_list' style='border:0; font-size:10px; color:#0099ff;' onChange=Clippings.insert('" + where + "')>";

		content += "<option value=''>Clipboard : ";
		content += (clipsNum == 0) ? "Empty" : clipsNum + " item";
		if(clipsNum != 1) { content += "s"; }
		content += "</option><optgroup value='' style='border-bottom:1px #666666 dotted;'></optgroup>";

		clips.sort(Clippings.order);
		for(var i=0; i<clips.length; i++)
		{
			var clip = clips[i];

			if(i == 0)
			{
				content += "<optgroup label='" + clip.type + "s'>";
			}

			if(i > 0 && clip.type != clips[i-1].type)
			{
				content += "</optgroup><optgroup label='" + clip.type + "s'>";
			}

			var title = decodeURI(clip.title);

			if(size && title.length > size) { title = title.substring(0, size) + "..."; }

			content += "<option value='{" + clip.type + ":" + clip.id + "}'>" + title + "</option>";
		}

		content += "</optgroup></select>";

		holder.innerHTML = content;
	},

	insert : function(target)
	{
		var list = document.getElementById("clip_list");
		var clip = list[list.selectedIndex].value;
		var area = document.getElementById(target);

		if(clip == "") { return; }

		area.focus();

		var caretPos = 0;

		/* IE */
		if(document.selection)
		{
			var sel = document.selection.createRange();
			sel.moveStart("character", -area.value.length);
			caretPos = sel.text.length;
		}
		/* Firefox */
		else if (area.selectionStart || area.selectionStart == "0")
		{
			caretPos = area.selectionStart;
		}

		var text = area.value;
		area.value = text.substring(0, caretPos) + clip + text.substring(caretPos, text.length);

		caretPos = caretPos+clip.length;

		if(area.setSelectionRange)
		{
			area.setSelectionRange(caretPos, caretPos);
		}
		else if(area.createTextRange)
		{
			var range = area.createTextRange();
			range.collapse(true);
			range.moveEnd("character", caretPos);
			range.moveStart("character", caretPos);
			range.select();
		}

		list.selectedIndex = 0;
	},

	open : function()
	{
		var list = document.getElementById("clipped");
		var index = list[list.selectedIndex].value;
		if(index == "") { return; }
		var clip = Clippings.clips[index];
		type = (clip.type == "User") ? "profile" : clip.type;
		explore(clip.id, type.toLowerCase());
		list.selectedIndex = 0;
	},

	empty : function()
	{
		Clippings.clips.splice(0, Clippings.clips.length);
		Clippings.update();
	},

	order : function(a, b)
	{
		var itemA = a.type.charCodeAt(0);
		var itemB = b.type.charCodeAt(0);
		return(itemA-itemB);
	}

}


/* FUNCTION TO SWITCH BETWEEN MODULES */
function goTo(module, comatose, kumbuka, rPage)
{
	if(module.name == null) { module = window[module]; }

	if(CURRENT_MODULE.name == "m_post" && module.name != "m_login" && POSTING)
	{
		if(CURRENT_MODULE.name == module.name) { return; }
		var leave = confirm("Are you sure you want to discard your post?");
		if(!leave){ return; }
	}

	switchNavTabs(module);
	CURRENT_MODULE = module;

	document.getElementById("explorer").innerHTML = module.content;
	document.getElementById("category_tabs").innerHTML = module.cat_tabs;

	var classSet = sweepFor("cat_tab", document.getElementById("cat_tabs"));
	for(i=0; i<classSet.length; i++) { addEvent(classSet[i], mouseFx); }

	/* Comatoes mode means that the module won't perform its methods */
	if(!comatose || comatose == "false")
	{
		module['methods'](rPage);
		comatose = false;
	}

	if(kumbuka != false)
	{
		var eon = new Array("goTo", module.name, comatose);
		History.add(eon);
	}
}


function springBoard(call)
{
	/* A hack to get to the AjaxEngine from iframe w/out error */
	setTimeout("AjaxEngine._call(AjaxEngine._print,'"+call+"','explorer')", 500);
}


/*  CALL THE searchFor FUNCTION FROM THE SEARCH BAR */

var SearchField = {

	focus : function(field)
	{
		if (field.value == "Keywords")
		{
			field.value = "";
			field.style.color = "#0099ff";
		}

		keyEvents.focused = field;
	},

	blur : function(field)
	{
		if (field.value == "")
		{
			field.value = "Keywords";
			field.style.color = "#aaaaaa";
		}

		keyEvents.focused = null;
	}
}

function doSearch()
{
	var query = document.getElementById("search_entry").value;
	query = parseInput(query);

	var where = document.getElementById("search_where").value;

	if(!query || query == "") { return; }

	searchFor(query, where, true);
}


/* Explore track/profile */
function explore(q, w, kumbuka)
{
	if(CURRENT_MODULE.name == "m_track")
	{
		var cat_focused = sweepFor("cat_tab_focus", document.getElementById("category_tabs"));
		cat_focused[0].className = "cat_tab";
	}

	switch(w)
	{
		case "profile":
			var call = "exp_profile.php?q="+q;
			goTo(m_people, true, false);

			ajax_r_call1 = "fetch_journal.php?print=true&rArea=1&rQuery="+q+"&where=user&show=1&start=";
			ajax_r_area1 = "exp_journal";

			ajax_r_call2 = "fetch_messages.php?print=true&rArea=2&rQuery="+q+"&where=user_hook&show=5&start=";
			ajax_r_area2 = "exp_messages";

			ajax_r_call3 = "fetch_playlists.php?print=true&rArea=3&rQuery="+q+"&where=user_hook&show=10&start=";
			ajax_r_area3 = "exp_playlists";

			ajax_r_call4 = "fetch_submissions.php?print=true&rArea=4&rQuery="+q+"&where=user&show=20&start=";
			ajax_r_area4 = "exp_submissions";

			ajax_r_call5 = "fetch_favorites.php?print=true&rArea=5&rQuery="+q+"&where=user_hook&show=20&start=";
			ajax_r_area5 = "exp_favorites";
		break;
		case "track":
			var call = "exp_track.php?q="+q;
			goTo(m_tracks, true, false);

			ajax_r_call1 = "fetch_comments.php?print=true&rArea=1&rQuery="+q+"&where=track_hook&show=10&start=";
			ajax_r_area1 = "exp_comments";

			ajax_r_call2 = "fetch_reviews.php?print=true&rArea=2&rQuery="+q+"&type=track&where=hook&show=20&start=";
			ajax_r_area2 = "exp_reviews";
		break;
		case "playlist":
			var call = "exp_playlist.php?q="+q;
			goTo(m_playlists, true, false);
		break;
		case "all_tracks":
			var call = "fetch_all_tracks.php?rArea=1&q="+q+"&show=50&start=";
			goTo(m_tracks, true, false);

			document.getElementById("cat_tab_1").className = "cat_tab_focus";

			ajax_r_call1 = call;
			ajax_r_area1 = "explorer";

		break;
		case "all_artists":
			var call = "fetch_all_artists.php?rArea=1&q="+q+"&show=50&start=";
			goTo(m_tracks, true, false);

			document.getElementById("cat_tab_2").className = "cat_tab_focus";

			ajax_r_call1 = call;
			ajax_r_area1 = "explorer";

		break;
		case "all_sources":
			var call = "fetch_all_sources.php?rArea=1&q="+q+"&show=50&start=";
			goTo(m_tracks, true, false);

			document.getElementById("cat_tab_3").className = "cat_tab_focus";

			ajax_r_call1 = call;
			ajax_r_area1 = "explorer";
		break;
		default:
			return;
		break;
	}

	window.scroll(0,0);

	document.getElementById("explorer").innerHTML = LOAD_PADDING;

	AjaxEngine._call(AjaxEngine._print, call, "explorer", false);

	if(kumbuka != false)
	{
		var eon = new Array("explore", q, w);
		History.add(eon);
	}
}


/* SWITCH BETWEEN EXPLORING TABS */
function exp_switch_tab(q, t, exp, kumbuka)
{
	switch(exp)
	{
		case "track":
			var explore = "exp_track.php";

			ajax_r_call1 = "fetch_comments.php?print=true&rArea=1&rQuery="+q+"&where=track_hook&show=10&start=";
			ajax_r_area1 = "exp_comments";

			ajax_r_call2 = "fetch_reviews.php?print=true&rArea=2&rQuery="+q+"&type=track&where=hook&show=20&start=";
			ajax_r_area2 = "exp_reviews";
		break;
		case "profile":
			var explore = "exp_profile.php";

			ajax_r_call1 = "fetch_journal.php?print=true&rArea=1&rQuery="+q+"&where=user&show=1&start=";
			ajax_r_area1 = "exp_journal";

			ajax_r_call2 = "fetch_messages.php?print=true&rArea=2&rQuery="+q+"&where=user_hook&show=5&start=";
			ajax_r_area2 = "exp_messages";

			ajax_r_call3 = "fetch_playlists.php?print=true&rArea=3&rQuery="+q+"&where=user_hook&show=10&start=";
			ajax_r_area3 = "exp_playlists";

			ajax_r_call4 = "fetch_submissions.php?print=true&rArea=4&rQuery="+q+"&where=user&show=20&start=";
			ajax_r_area4 = "exp_submissions";

			ajax_r_call5 = "fetch_favorites.php?print=true&rArea=5&rQuery="+q+"&where=user_hook&show=20&start=";
			ajax_r_area5 = "exp_favorites";
		break;
	}

	window.scroll(0,0);

	if(t == "video")
	{
		WimboPlayer.stop();
	}

	var call = explore + "?q=" + q + "&tab=" + t;

	AjaxEngine._call(AjaxEngine._print, call, "explorer");

	if(kumbuka != false)
	{
		var eon = new Array("exp_switch_tab", q, t, exp);
		History.add(eon);
	}
}


/* Smoking kills */
var lungs = {

	timer : null,

	inhale : function()
	{
		AjaxEngine._call(AjaxEngine._print, "fetch_whats_hot.php?track="+_pl.currentTrack+"&list="+playlist, "whats_hot", true, false);

		window.clearTimeout(lungs.timer);
		lungs.timer = setTimeout("lungs.exhale()", 50000);
	},

	exhale : function()
	{
		if(document.getElementById("listener_check").innerHTML == "") { notloggedin(); }
	}
}


//--------------------[ INITIALIZATION ]--------------------


/* INITIALIZE */
function init()
{
	/* initialize components */
	keyEvents.init();
	lense.init();
	_pl.init();

	var classSet = sweepFor("nav_item", document.getElementById("nav_main"));
	for(i=0; i<classSet.length; i++)
	{
		addEvent(classSet[i], mouseFx);
	}

	with (link_to)
	{
		switch(where)
		{
			case "track":
				_pl.load('list', '', '', session_playlist);
				explore(query, where);
			break;

			case "profile":
				_pl.load('list', '', '', session_playlist);
				explore(query, where);
			break;

			case "playlist":
				_pl.load('playlist', session_playlist_title, query, session_playlist);
				explore(query, where);
			break;

			case "register":
				_pl.load('list', '', '', session_playlist);

				goTo(m_register, false, false);

				var reg_email = query;
				var reg_name = query.substring(0, query.indexOf('@'));

				document.registerForm.field_username.value = reg_name;
				document.registerForm.field_email.value = reg_email;
			break;

			case "account":
				_pl.load('list', '', '', session_playlist);

				goTo(m_account);

				if(!isLoggedIn)
				{
					goTo(m_login, false, false);
					document.loginForm.field_username.value = query;
					document.loginForm.field_password.focus();
				}
			break;

			default:
				_pl.load('list', '', '', session_playlist);
				goTo(m_home);
			break;
		}
	}

	/* Load "hot" stuff */
	document.getElementById("whats_hot").innerHTML = LOAD_PADDING;
	AjaxEngine._call(AjaxEngine._print, "fetch_whats_hot.php", "whats_hot");

	/* load poll */
	ajax_r_call2 = "fp_poll.php?q=";
	ajax_r_area2 = "ex_poll";

	var area2 = document.getElementById(ajax_r_area2);
	if(area2.innerHTML == "")
	{
		area2.innerHTML = LOAD_PADDING;
		AjaxEngine._call(AjaxEngine._print, ajax_r_call2+1, ajax_r_area2);
	}

	lung_timer = setInterval("lungs.inhale()", 60000);
}