/*
The onion cms - cambridge webworks

http://www.cambridgewebworks.com
http://www.cambridgenetworks.co.uk

This file belongs to 'The Onion' C.M.S. it should not be modified as it could
seriously damage the performance to this website. For more information on the
onion please visit one of the links provided above.
*/
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;

if (isIE == true) {
	var isOpera = false;
	var isFirefox = false;
} else {
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
	var isFirefox = (navigator.appCodeName.indexOf("Mozilla") != -1) ? true : false;
}

if (isIE) {
	//check ie version
	if (window.XMLHttpRequest) {
		var isIE7 = true;
	} else {
		var isIE7 = false;
	}
}

//###############################################################################
//skin picker
function onionadminskinpickerhide(nprefix,ninputid,npreviews) {
	var offobject = oniongetelement("skinpicker_off_"+nprefix);
	var onobject = oniongetelement("skinpicker_on_"+nprefix);
	var previewobject = oniongetelement("skinpicker_preview_"+nprefix);
	
	offobject.style.display='block';
	onobject.style.display='none';
	previewobject.src = npreviews[oniongetradiovalue(ninputid)].src;
	
	document.location.hash = "skinpicker_anchor_"+nprefix;
}


//###############################################################################
//page loader
function onionshowpageloader(ntext,nlink) {
	
	if (!ntext) { ntext = "Loading"; }
	if (!nlink) { nlink = "Cancel"; }
	
	var loadertext = $("onionpageloadertext")
	var loader = $("onionpageloader");
	
	if ($defined(loader)) {
		
		loadertext.set("html",ntext+"<br /><div class=\"cancel\">"+nlink+"</div>");
		loadertext.fade("hide");
		loader.setStyle("opacity",0.6);
		loader.setStyle("display","block");
		loadertext.fade("in");
		
		var cancel = loadertext.getFirst("div.cancel");
		
		if ($defined(cancel)) {
			cancel.addEvent("click",function() {
				onionhidepageloader();
			});
		}
	}
	
}

function onionhidepageloader() {
	var loader = $("onionpageloader");
	if (loader) {
		loader.fade("out");
		//loader.setStyle("display","none");
	 }
}

//###############################################################################
//widget runtime
var onionwidgetdetails = new Array();
var onionsessiondetails = new Array();


function onionwidgetskin() {
	return onionwidgetdetails["skin"];
}

function onionwidgetskinpath() {
	return onionwidgetdetails["path"]+"skins/"+onionwidgetdetails["skinname"]+"/";
}

function onionwidgetskinname() {
	return onionwidgetdetails["skinname"];
}

function onionwidgetpath() {
	return onionwidgetdetails["path"];
}

function onionwidgetname() {
	return onionwidgetdetails["name"];
}

function onionwidgetprofile() {
	return onionwidgetdetails["profile"];
}

function onionwidgetmode() {
	return onionwidgetdetails["mode"];
}

//###############################################################################
//session runtime
function onionskinpath() {
	return onionsessiondetails["skinpath"];
}

//###############################################################################
//global runtime
var onionmousebusy = false;
var onionmousebusyid = "";
var onionmousebusyobject = "undefined";

function onionmouseobject() {
	return onionmousebusyobject;
}

function onionmouseid() {
	return onionmousebusyid;
}

function onionmousebusy() {
	return (onionmousebusy == true);
}

function onionsetmouseidle() {
	onionmousebusy = false;
}

function onionmouseidle() {
	return (onionmousebusy == false);
}

function onionsetmousebusy(nobject,nid) {
	onionmousebusyobject = nobject;
	onionmousebusyid = nid;
	onionmousebusy = true;
}

function onionmouseleft(nevent) {
	if (window.event != null && nevent.button == 1 || nevent.button == 0) {
		return true;
	}
	return false;
}

function oniongetelementsbyname(nname,nelement) {
	if (nelement == undefined) { nelement = document; }
	return nelement.getElementsByName(nname);
}

function oniongetelementsbyclass(nclass,nelement,nlevel,nelements) {
	if (nlevel == undefined) { nlevel = -1; }
	if (nelement == undefined) { nelement = document; }
    if (nelements == undefined) { nelements = new Array(); }
	var index,index2;

	var nclasses = nclass.split(" ");
	
	//test for matching class name
	if (nelement.className != undefined && nelement.className.length > 0) {
		var classes = nelement.className.split(" ");
		outer_loop:
		for(index = 0;index < classes.length;index++) {
			for(index2 = 0;index2 < nclasses.length;index2++) {
				if (classes[index] == nclasses[index2]) {
					nelements.push(nelement);
					break outer_loop;
				}
			}
		}
	}
	
	//loop through children of element
	if (nlevel == -1 || nlevel > 0) {
		if (nlevel > 0) { nlevel = nlevel - 1; }
	    for (index = 0;index < nelement.childNodes.length; index++ ) {
	        oniongetelementsbyclass(nclass,nelement.childNodes[index],nlevel,nelements);
		}
	}
    
	//return array of results
    return nelements;
}

function oniongetelementsbytag(ntag,nelement) {
	if (nelement == undefined) { nelement = document; }
    var elements = arguments[2] || new Array();
	var index;

	//test for matching class name
	if (nelement.tagName != undefined && nelement.tagName.length > 0) {
		if (nelement.tagName == ntag) {
			elements.push(nelement);
		}
	}
	
	//loop through children of element
    for (index = 0;index < nelement.childNodes.length; index++ ) {
        oniongetelementsbytag(ntag,nelement.childNodes[index],elements);
	}
    
	//return array of results
    return elements;
}

function oniongetelement(nname,nelement) {
	if (nelement == undefined) {
		//scan document for element
		return document.getElementById(nname);
	} else {
		//loop through children of element
	    for (var index = 0;index < nelement.childNodes.length; index++ ) {
			if (nelement.childNodes[index].id == nname) {
				return nelement.childNodes[index];
			}
		}
	}
}

function onioninsertafter(nthis,nthat) {
	nthat.parentNode.insertBefore(nthis,nthat.nextSibling);
}

//###############################################################################
//events runtime
function onionaddevent(nelement,nevent,nfunction,ntarget) {
	//setup target if it has not been set. this lets events be redirected to a speciffic target
	if (typeof(ntarget) != "object") {
		ntarget = nelement;
	}
	
	//this is a crossplatform event handler
	if (nelement.addEventListener) {
		//mozilla/etc
		nelement.addEventListener(nevent,function(e){nfunction(ntarget,e);},false);
	} else if ( nelement.attachEvent ) {
		//internet explorer
		nelement.attachEvent("on" + nevent,function(e){nfunction(ntarget,e);});
	} 
}

function onioncancelevent(nevent) {
	if (nevent && nevent.preventDefault) { nevent.preventDefault(); }
	return false;
}

function onioneventkeycode(nevent) {
	if(window.event && nevent.keyCode) {
		//ie
		return nevent.keyCode;
	} else if(nevent.which) {
		///netscape/firefox
		return nevent.which;
	} else {
		return 0;
	}
}

function onioneventkeychar(nevent) {
	return String.fromCharCode(onioneventkeycode(nevent));
}

//###############################################################################
//functions
function onionextractnumber(nvalue) {
	var n = parseInt(nvalue);
	return n == null || isNaN(n) ? 0 : n;
}

function onionis_numeric(nvalue) {
	if ((isNaN(nvalue)) || (nvalue.length == 0)) {
		return false;
	} else {
		return true;
	}
}

function onionbaseurl() {
	return onionsettings.paths_website;
}

function onionsetting(nname) {
	if (onionsettings[nname] != undefined) {
		return onionsettings[nname];
	} else {
		return undefined;
	}
}

//###############################################################################
//flash stuff
var onionflashdetectcache = -2;
function oniondetectflash(reqMajorVer, reqMinorVer, reqRevision) {
	//save cache if first time cache
	if (onionflashdetectcache == -2) { onionflashdetectcache = oniongetflashversion(); }
		
	if (onionflashdetectcache == -1 ) {
		return false;
	} else if (onionflashdetectcache != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = onionflashdetectcache.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = onionflashdetectcache.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

			// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function onionembedflash(nurl,nwidth,nheight) {
	//this function will embed a flash object via javascript
	document.write("<div style=\"width:"+nwidth+"px;height:"+nheight+"px;background-image:url('theonion/images/loading_medium.gif');background-color:#000000;background-position:center center;overflow:hidden;background-repeat:no-repeat;\">");
	document.write("<object type=\"application/x-shockwave-flash\" data=\""+nurl+"\" width=\""+nwidth+"\" height=\""+nheight+"\";>");
	document.write("<param name=\"movie\" value=\""+nurl+"\" />");
	document.write("<param name=\"wmode\" value=\"transparent\" />");
	document.write("</object>");
	document.write("</div>");
}

function oniongetflashversion() {
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = oniongetflashactivexversion();
	}	
	return flashVer;
}

function oniongetflashactivexversion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

//###############################################################################
//xml
function onionloadxml(npath,ncallback) {
	if (window.ActiveXObject) {
		//internet explorer
		var doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async = true;
		doc.onreadystatechange = ncallback;
		doc.load(npath);
		
		return doc;
	} else if (document.implementation && document.implementation.createDocument) {
		//mozilla, firefox, opera, etc.
		var doc = document.implementation.createDocument("","",null);
		doc.load(npath);
		doc.onload = ncallback;
		
		return doc;
	} else {
		alert('Your browser does not support loading of xml documents!');
		
		return null;
	}
}
//###############################################################################
//imagepicker
function onionpopup(ntitle,nurl,nwidth,nheight,nresizable,nscrollbars,ncontents,nx,ny) {
	//default values
	if (nresizable == undefined) { var nresizable = true; }
	if (nscrollbars == undefined) { var nscrollbars = true; }
	
	//resizable flag
	if (nresizable == true) {
		resizable = "yes";
	} else {
		resizable = "no";
	}
	
	//scrollbars flag
	if (nscrollbars == true) {
		scrollbars = "yes";
	} else {
		scrollbars = "no";
	}

	//build options
	var popupquery = "width="+nwidth+",height="+nheight+",resizable="+resizable+",scrollbars="+scrollbars+",toolbar=no,menubar=no,location=no,status=yes,directories=no";
	if (nx != undefined) { popupquery = popupquery + ",left="+nx; }
	if (ny != undefined) { popupquery = popupquery + ",top="+ny; }
	var windowobject = window.open(nurl,ntitle,popupquery);
	if (ncontents != undefined) {
		windowobject.document.write(ncontents);
	}
	return windowobject;
}

function onionfolderpicker(nurl,nroot,ncurrent,nwidth,nheight,nelement) {
	
	var url = onionaddqueryitem("adminelement",nelement,nurl);
	url = onionaddqueryitem("adminpickmode","folder",url);
	url = onionaddqueryitem("adminfirst",1,url);
	url = onionaddqueryitem("adminroot",nroot,url);
	url = onionaddqueryitem("admincurrent",ncurrent,url);
	return onionpopup("",url,nwidth,nheight,false,false);	
	
}

function onionfilemanager_pickfile(nurl,nwidth,nheight,ncurrentpath,naction,ncallback) {
	//check for valid field and get path from field
	if (ncallback == false) {
		field = oniongetelement(naction);
		if (field == undefined) { 
			return false;
		}
		ncurrentpath = field.value;
	}

	var url = nurl;
	url = onionaddqueryitem("filemanagerpopuppick","file",url);
	url = onionaddqueryitem("filemanagerpopupaction",naction,url);
	url = onionaddqueryitem("filemanagerpopupcallback",ncallback,url);
	url = onionaddqueryitem("filemanagerpopupcurrentpath",ncurrentpath,url);
	return onionpopup("Filemanger",url,nwidth,nheight,true,false);
}

function onionfilepicker(nurl,nroot,ncurrent,nwidth,nheight,nelement) {
	
	var url = onionaddqueryitem("adminelement",nelement,nurl);
	url = onionaddqueryitem("adminpickmode","file",url);
	url = onionaddqueryitem("adminfirst",1,url);
	url = onionaddqueryitem("adminroot",nroot,url);
	url = onionaddqueryitem("admincurrent",ncurrent,url);
	return onionpopup("",url,nwidth,nheight,false,false);
	
}

function onionimagepicker(nurl,nwidth,nheight,nel,ncallback) {
	
	var url = onionaddqueryitem("element",nel,nurl);
	url = onionaddqueryitem("callback",ncallback,url);
	return onionpopup("",url,nwidth,nheight,false,false);
	
}

function onionarticlepicker(nurl,nwidth,nheight,nel,narticles) {
	var url = onionaddqueryitem("onionpickelement",nel,nurl);
	url = onionaddqueryitem("onionpickmode","article",url);
	return onionpopup("",url,nwidth,nheight,false,false);
}

function onionsectionpicker(nurl,nwidth,nheight,nel,narticles) {
	var url = onionaddqueryitem("onionpickelement",nel,nurl);
	url = onionaddqueryitem("onionpickmode","section",url);
	return onionpopup("",url,nwidth,nheight,false,false);
}

function onioncategorypicker(nurl,nwidth,nheight,nel,narticles) {
	var url = onionaddqueryitem("onionpickelement",nel,nurl);
	url = onionaddqueryitem("onionpickmode","category",url);
	return onionpopup("",url,nwidth,nheight,false,false);
}

//###############################################################################
// cookies
function onionsetcookie(nname,nvalue,ndays) {
	// sets "nname" cookie to "nvalue" to expire in "ndays"
	if (ndays) {
		var date = new Date();
		date.setTime(date.getTime() + (ndays * 24 * 60 * 60 * 1000) );
		var expires = "; expires="+date.toGMTString();
	} else {
		var expires	= "";
	}
	document.cookie = nname+"="+nvalue+expires+"; path=/";
}

function oniongetcookie(nname) {
	nname=nname+"=";
	var ca = document.cookie.split(";");
	for (var i=0;i<ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==" ") c = c.substring(1,c.length);
		if (c.indexOf(nname)==0) return c.substring(nname.length,c.length);
	}
	return null;
}

function onionremovecookie(nname) {
	onionsetcookie(nname,"",-1);	
}

function onionaddqueryitem(nname,nvalue,nurl) {
	if (nurl.length == 0) return "";
	
	// split url by the ?
	var components = nurl.split("?");
	
	// if url has more than one ?, then it is invalid
	if (components.length > 2) return nurl;
	
	var newparams = new Array();
	var updated = false;
	
	if (components.length == 2) { // params already exists, so add to.
	
		var params = components[1].split("&"); // [thing=1,thing2=2,thing3=3]
		
		for(var i=0; i<params.length; i++) {
		
			if (params[i] != null) {
				
				x = params[i].split("="); // [thing,1]
				
				if (x[0] == nname) { // already exists
					newparams.push(nname+"="+nvalue);
					updated = true;
				} else {
					newparams.push(x[0]+"="+x[1]);
				}
			}
		}
		
		if (!updated) newparams.push(nname+"="+nvalue);
		
	} else {
		newparams.push(nname+"="+nvalue);
	}
	
	url = components[0]+"?"+newparams.join("&");
	return url;
}

function oniontextfocus(id) {
	if (!id.is_focused) {
		id.is_focused = true;
		id.value = "";
		c = id.getAttribute("defaultcolor");
		if (c) id.style.color = c;
	}
}

function oniontextblur(id) {
	if (id.value != "") return;
	if (id.is_focused) {
		id.is_focused = false;
		id.value = id.getAttribute("defaulttext");
		id.setAttribute("defaultcolor",id.style.color);
		id.style.color = "#999";
	}
}

//###############################################################################
//treeview stuff
function oniontoggletreeviewnode(ntreeviewid,nid,nimage) {
	var node = oniongetelement(ntreeviewid+"_item"+nid);
	
	//check for first time treenode adjustment
	if (node.onionTreeview == undefined) {
		node.onionTreeview = ntreeviewid;
		node.onionImage = nimage;
	}
	
	//set node status
	if (node.style.display != "none") {
		onionsettreeviewnode(node,false);
	} else {
		onionsettreeviewnode(node,true);
	}
}

function onionsettreeviewnode(nnode,nopen) {
	if (nopen) {
		//set open
		//update open status
		nnode.style.display = "block";
		//upsate image
		oniongetelement(nnode.id+"_icon").src = eval(nnode.onionTreeview+"_images."+nnode.onionImage+"_minus.src");
	} else {
		//set closed
		//update open status
		nnode.style.display = "none";
		//update image
		oniongetelement(nnode.id+"_icon").src = eval(nnode.onionTreeview+"_images."+nnode.onionImage+"_plus.src");
	}
}


function oniontogglehelp(nelement) {
	var span = nelement.parentNode.childNodes[4];
	var div = nelement.parentNode.childNodes[1];
	var img = nelement.parentNode.childNodes[2];
	
	if (div.style.display == "none") {
		div.style.display = "block";
		nelement.parentNode.clicker = span.innerHTML;
		span.innerHTML = "Click to hide";
		div.style.display = "block";
//		if (div.h == undefined) { div.h = div.clientHeight; }
//		div.style.height = "0px";
//		div.style.overflow = "hidden";
//		document.dd = div;
//		div.sss = setInterval("onionexpand()",2);
		img.src = img.src.replace(/(expand_small.gif)$/i,"compress_small.gif");
	} else {
		div.style.display = "none"; 
		span.innerHTML = nelement.parentNode.clicker;
		img.src = img.src.replace(/(compress_small.gif)$/i,"expand_small.gif");
	//	div.sss = setInterval("onioncompress()",2);
	}
	
	
}

//###############################################################################
//sidebar stuff
function oniontogglesidebar(nsidebar) {
	//find the root node
	while (nsidebar.className.toLowerCase() != "onionsidebar_open" && nsidebar.className.toLowerCase() != "onionsidebar_closed") {
		nsidebar = nsidebar.parentNode;
	}
	
	if (nsidebar.className == "onionsidebar_open") {
		nsidebar.className = "onionsidebar_closed";
	} else {
		nsidebar.className = "onionsidebar_open";
	}	
}

//###############################################################################
//collapse box stuff
function oniontogglecollapsebox(nbox) {
	if (nbox.className == "onioncollapsebox_open") {
		nbox.className = "onioncollapsebox_closed";
	} else {
		nbox.className = "onioncollapsebox_open";
	}
}


function oniontoggledisplay(nelement) {
	with(nelement.style) {
		if (display != "none") {
			display = "none";
		} else {
			display = "block";
		}
	}
}

//###############################################################################
//tabber stuff
function oniontabbershowtab(ntabber,nindex) {
		var tabber = oniongetelement("oniontabber_"+ntabber);
		var contentelements = oniongetelementsbyclass("oniontabbercontent",tabber,1);
		var tabbarelements = oniongetelementsbyclass("oniontabbertabbar",tabber,1);
		var tabelements = oniongetelementsbyclass("oniontabberoff oniontabberon",tabbarelements[0],3);
		var index;
		
		//update the tabs
		for(index=0;index<tabelements.length;index++) {
			if (index == nindex) {
				tabelements[index].className="oniontabberon";
			} else {
				tabelements[index].className="oniontabberoff";
			}
		}
		
		//loop through content elements
		for(index=0;index<contentelements.length;index++) {
			content = contentelements[index];
			if (index == nindex) {
				content.style.display="block";
			} else {
				content.style.display="none";
			}
		}
		
		//show teh tabber
		tabbarelements[0].style.display="block";
	}
	
	function oniontabbersetup() {
		if (ndefault == undefined) { var ndefault = 0; }
		
		var tabber,tabberindex,contentindex;
		var tabberelements = oniongetelementsbyclass("oniontabber");
		var content,contentelements;
		
		//loop through all tabber elements
		for(tabberindex=0;tabberindex<tabberelements.length;tabberindex++) {
			tabber = tabberelements[tabberindex];
			//get content elements
			contentelements = oniongetelementsbyclass("oniontabbercontent",tabber);
			
			//loop through all content elements in this tabber
			for(contentindex=0;contentindex<contentelements.length;contentindex++) {
				content = contentelements[contentindex];
				//setup individual content element
				content.style.display="none";
			}
		}
	}

function onionaddload(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}


function onionaddunload( nfunc ) {
	
	var f = window.onunload;
	
	if (typeof f == "function") {
		window.onunload = function() {
			f();
			nfunc();
		}
	} else {
		window.onunload = nfunc;
	}
}


	
function oniongetoffset( nelement ) {
	
	var offset = {x:0,y:0};
	if (nelement.offsetParent) {
		
		offset.x = nelement.offsetLeft;
		offset.y = nelement.offsetTop;
		
		while (nelement = nelement.offsetParent) {
			offset.x += nelement.offsetLeft;
			offset.y += nelement.offsetTop;
		}
		
	}
	
	return offset;
	
}

function oniongetdimensions( nelement ) {
	var dir = {};
	var offset = oniongetoffset(nelement);
	dir.x = offset.x;
	dir.y = offset.y;
	dir.width = isIE?nelement.clientWidth:nelement.offsetWidth;
	dir.height = isIE?nelement.clientHeight:nelement.offsetHeight;
	return dir;
}


function onionrgbtohex( nr, ng, nb ) {
	
	var hex = "", i;
	var hexer = function(n) { // function to convert dec to hex
		
		if (n==null) return "00";
		n=parseInt(n);
		if (n==0 || isNaN(n)) return "00";
		n=Math.round(Math.min(Math.max(0,n),255));
		
		return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16);
		
	}
	
	return hexer(nr)+hexer(ng)+hexer(nb);
	
}

function onionsearchparenttoclass(nel,nclass) {
	
//	if (nel.className = nclass) return nel;
	
//	while (nel.className 
	
}


//###############################################################################
// Class add,remove

function onionaddclass(nel,nc) {
	nel.className += " "+nc;
}

function onionremoveclass(nel,nc) {
	var classes = nel.className.split(" ");
	var newclasses = new Array();
	for (var i=0; i < classes.length; i++) {
		if (classes[i] != nc) {
			newclasses.push(classes[i]);
		}
	}
	nel.className = newclasses.join(" ");
}

//###############################################################################

function onionadddomload(nfunc) {
	
	var f = window.domload;
	
	if (typeof f == "function") {
		window.domload = function() {
			nfunc();
			f();
		}
	} else {
		window.domload = nfunc;
	}
	
}

//###############################################################################
// DOM Ready Detection Script, fires event when DOM is ready to go.
//###############################################################################

if (navigator.userAgent.match(/WebKit/)) {
	
	(function(){
		if(document.readyState != 'complete' && document.readyState != 'loaded') return setTimeout(arguments.callee, 1);
		if (window.domload) window.domload();
	})();
	
} else if (document.addEventListener) {
	
	document.addEventListener("DOMContentLoaded", function(){if (window.domload) window.domload();}, false);
	
} else if (document.all) {
	
	if(!document.getElementById('WhenDomReady_element')) {
		document.write("<scr" + "ipt id=\"WhenDomReady_element\" defer=true " + "src=//:><\/scr" + "ipt>");
	}
	
	document.getElementById('WhenDomReady_element').attachEvent("onreadystatechange",function(){
		
		if (document.getElementById('WhenDomReady_element').readyState=="complete") {
			if (window.domload) window.domload();
		}
	});
}

//###############################################################################