/**
* Declaration variables
*/
var selectedTab = "";
var screenHeight = window.screen.availHeight;
var screenWidth = window.screen.availWidth;
var colorDepth = window.screen.colorDepth;
var timeNow = new Date();
var referrer = escape(document.referrer);
var windows, mac, linux;
var ie, op, moz, misc, browsercode, browsername, browserversion, operatingsys;
var dom, ienew, ie4, ie5, ie6, moz_rv, moz_rv_sub, ie5mac, ie5xwin, opnu, op4, op5, op6, op7, saf, konq;
var appName, appVersion, userAgent;
var appname = navigator.appName;
var appVersion = navigator.appVersion;
var userAgent = navigator.userAgent.toLowerCase();
var title = document.title;
var checktoggle = 1;
var DOMBROWSER = "default";

windows = (appVersion.indexOf('Win') != -1);
mac = (appVersion.indexOf('Mac') != -1);
linux = (appVersion.indexOf('Linux') != -1);

/**
* DOM Compatible?
*/
if (!document.layers)
{
	dom = (document.getElementById ) ? document.getElementById : false;
} else {
	dom = false;
}

if (document.getElementById)
{
	DOMBROWSER = "default";
} else if (document.layers) {
	DOMBROWSER = "NS4";
} else if (document.all) {
	DOMBROWSER = "IE4";
}

misc=(appVersion.substring(0,1) < 4);
op=(userAgent.indexOf('opera') != -1);
moz=(userAgent.indexOf('gecko') != -1);
ie=(document.all && !op);
saf=((userAgent.indexOf('safari') != -1) || (navigator.vendor == "Apple Computer, Inc."));
konq=(userAgent.indexOf('konqueror') != -1);

if (op) {
	op_pos = userAgent.indexOf('opera');
	opnu = userAgent.substr((op_pos+6),4);
	op5 = (opnu.substring(0,1) == 5);
	op6 = (opnu.substring(0,1) == 6);
	op7 = (opnu.substring(0,1) == 7);
} else if (moz){
	rv_pos = userAgent.indexOf('rv');
	moz_rv = userAgent.substr((rv_pos+3),3);
	moz_rv_sub = userAgent.substr((rv_pos+7),1);
	if (moz_rv_sub == ' ' || isNaN(moz_rv_sub)) {
		moz_rv_sub='';
	}
	moz_rv = moz_rv + moz_rv_sub;
} else if (ie){
	ie_pos = userAgent.indexOf('msie');
	ienu = userAgent.substr((ie_pos+5),3);
	ie4 = (!dom);
	ie5 = (ienu.substring(0,1) == 5);
	ie6 = (ienu.substring(0,1) == 6);
}

if (konq) {
	browsercode = "KO";
	browserversion = appVersion;
	browsername = "Knoqueror";
} else if (saf) {
	browsercode = "SF";
	browserversion = appVersion;
	browsername = "Safari";
} else if (op) {
	browsercode = "OP";
	if (op5) {
		browserversion = "5";
	} else if (op6) {
		browserversion = "6";
	} else if (op7) {
		browserversion = "7";
	} else {
		browserversion = appVersion;
	}
	browsername = "Opera";
} else if (moz) {
	browsercode = "MO";
	browserversion = appVersion;
	browsername = "Mozilla";
} else if (ie) {
	browsercode = "IE";
	if (ie4) {
		browserversion = "4";
	} else if (ie5) {
		browserversion = "5";
	} else if (ie6) {
		browserversion = "6";
	} else {
		browserversion = appVersion;
	}
	browsername = "Internet Explorer";
}

if (windows) {
	operatingsys = "Windows";
} else if (linux) {
	operatingsys = "Linux";
} else if (mac) {
	operatingsys = "Mac";
} else {
	operatingsys = "Unkown";
}

function browserObject(objid)
{
	if (DOMBROWSER == "default")
	{
		return document.getElementById(objid);
	} else if (DOMBROWSER == "NS4") {
		return document.layers[objid];
	} else if (DOMBROWSER == "IE4") {
		return document.all[objid];
	}
}

// ======= KEYBOARD SHORTCUTS =======
if (window.Event)
{
	document.captureEvents(Event.KEYDOWN);
}
document.onkeydown = keyHandler;

var isTicketList = false;
var isTicketPage = false;

function keyHandler(e)
{
	var isShift = isCtrl = false;

	var eventSrc = null;

	if (window.Event)
	{
		if (e.altKey == true) {
			return false;
		}

		if (e.shiftKey == true)
		{
			isShift = true;
		} else if (e.ctrlKey == true) {
			isCtrl = true;
		}

		keyPress = e.which;

		try {
			if (e.srcElement) {
				eventSrc = e.srcElement;
			} else if (e.target) {
				eventSrc = e.target;
			}
		} catch (e) {
		
		}
	} else {
		if (window.event.altKey == true)
		{
			return true;
		} else if (window.event.shiftKey == true) {
			isShift = true;
		} else if (window.event.ctrlKey == true) {
			isCtrl = true;
		}

		keyPress = window.event.keyCode;

		try {
			if (window.event.srcElement) {
				eventSrc = window.event.srcElement;
			} else if (window.event.target) {
				eventSrc = window.event.target;
			}
		} catch (e) {
		
		}
	}

	keyPressChar = String.fromCharCode(keyPress);

	if (isCtrl && isTicketPage && keyPress == 13)
	{
		if (selectedTab == "ttpostreply")
		{
			document.replyform.submit();
		} else if (selectedTab == "ttforward") {
			document.forwardform.submit();
		} else if (selectedTab == "ttrelease") {
			document.releaseform.submit();
		} else if (selectedTab == "ttbilling") {
			document.billingform.submit();
		} else if (selectedTab == "ttaddnotes") {
			document.noteform.submit();
		}

		return true;
	}

	// Loop through DOM Nodes
	for (var eHandler = eventSrc; eHandler != null; eHandler = eHandler.parentNode) {
		if (eHandler.nodeName == "TEXTAREA" || eHandler.nodeName == "SELECT" || eHandler.nodeName == "INPUT" || eHandler.nodeName == "BUTTON") {
			return true;
		}
	}

	// Ticket List + Shift + ] = Previous Department
	if (isTicketList == true && isShift == true && keyPress == 221)
	{


	// Ticket List + Shift + [ = Next Department
	} else if (isTicketList == true && isShift == true && keyPress == 219) {


	// Ticket List + Shift + | = View All
	} else if (isTicketList == true && isShift == true && keyPress == 220) {
	

	// Search Keywords
	} else if (isShift == true && keyPressChar == "S" && (isTicketList == true || isTicketPage == true)) {
		CustomPopup('ticketsearch', e, 'linkticketsearch', 'ticketsearch');
		setTimeout('document.tiqform.query.focus();', 400);
	// Search Ticket ID
	} else if (isShift == true && keyPressChar == "T" && (isTicketList == true || isTicketPage == true)) {
		CustomPopup('ticketsearch', e, 'linkticketsearch', 'ticketsearch');
		setTimeout('document.tidform.ticketid.focus();', 400);
	} else if (isShift == true && keyPressChar == "K") {
		setTimeout('focusIRS()', 100);
	} else if (isShift == true && keyPressChar == "P" && isTicketPage == true) {
		switchGridTab('ttpostreply', 'tickets');
		setTimeout('document.replyform.replycontents.focus();', 400);
	} else if (isShift == true && keyPressChar == "G" && isTicketPage == true) {
		switchGridTab('ttgeneral', 'tickets')
	} else if (isShift == true && keyPressChar == "F" && isTicketPage == true) {
		switchGridTab('ttforward', 'tickets');
		fetchData('forward', ticketPageTicketID);
	} else if (isShift == true && keyPressChar == "B" && isTicketPage == true) {
		switchGridTab('ttbilling', 'tickets');
		fetchData('billing', ticketPageTicketID);
	} else if (isShift == true && keyPressChar == "N" && isTicketPage == true) {
		switchGridTab('ttaddnotes', 'tickets');
		fetchData('addnotes', ticketPageTicketID);
	} else if (isShift == true && keyPressChar == "R" && isTicketPage == true) {
		switchGridTab('ttrelease', 'tickets');
		fetchData('release', ticketPageTicketID);
	} else if (isShift == true && keyPressChar == "H" && isTicketPage == true) {
		switchGridTab('tthistory', 'tickets');
		fetchData('history', ticketPageTicketEmail);
	// Shift + ->
	} else if (isShift == true && keyPress == 39 && isTicketPage == true) {
		window.location.href = swiftpath+ "staff/index.php?_m=tickets&_a=ticketactions&action=jump&t=next&ticketid="+ticketPageTicketID;
	// Shift + -<
	} else if (isShift == true && keyPress == 37 && isTicketPage == true) {
		window.location.href = swiftpath+ "staff/index.php?_m=tickets&_a=ticketactions&action=jump&t=previous&ticketid="+ticketPageTicketID;
	}


//	alert(keyPress);
}

function displayObject(objid)
{
	result = browserObject(objid);
	if (!result)
	{
		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
		return;
	}

	result.style.display = "";
}

function hideObject(objid)
{
	result = browserObject(objid);
	if (!result)
	{
		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
		return;
	}

	result.style.display = "none";
}

function displayTicketEdit() {
	displayObject('ticketedit');
	displayObject('ticketsubmit');
	hideObject('tickettext');
}

function hideTicketEdit() {
	hideObject('ticketedit');
	hideObject('ticketsubmit');
	displayObject('tickettext');
}

function switchDisplay(objid)
{
	result = browserObject(objid);
	if (!result)
	{
		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
		return;
	}

	if (result.style.display == "none")
	{
		result.style.display = "";
	} else {
		result.style.display = "none";
	}
}

function blurObject(objid) {
	var objM = browserObject(objid);
	if (objM)
	{
		objM.blur();
	}
}

function displayGridTabData(gridname, dodisplay) {
	if (dodisplay)
	{
		displayObject("gridtableopt"+gridname);
	} else {
		switchDisplay("gridtableopt"+gridname);
	}
	hideTab("massaction");
	hideTab("search");
	hideTab("settings");
}

function displayTab(objid) {
	if (objid != "addresscards" && objid != "detailedcards")
	{
		result = browserObject("tab_"+objid);
		if (!result)
		{
	//		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
			return;
		}

		result.style.display = "";
	}

	resultlink = browserObject(objid);
	if (!resultlink)
	{
		return;
	}
	resultlink.className = "currenttab";
}

function hideTab(objid) {
	if (objid != "addresscards" && objid != "detailedcards")
	{
		var result = browserObject("tab_"+objid);
		if (!result)
		{
	//		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
			return;
		}

		result.style.display = "none";
	}
	resultlink = browserObject(objid);
	if (!resultlink)
	{
		return;
	}
	resultlink.className = "";
}

function iif(cond, success, failure) {
	return cond ? success : failure;
}

function switchGridTab(object, tabgroup) {
	if (tabgroup == "gridoptions")
	{
		var gridtabs = new Array("search", "massaction", "settings");
		hideTabObj(object, gridtabs);
	} else if (tabgroup == "tickets") {
		selectedTab = object;
		var tickettabs = new Array("ttgeneral", "ttpostreply", "ttforward", "ttaddnotes", "ttbilling", "tthistory", "ttlog", "ttedit", "ttrelease", "ttlschats");
		hideTabObj(object, tickettabs);
	} else if (tabgroup == "teamwork") {
		selectedTab = object;
		var twtabs = new Array("twday", "twworkweek", "twweek", "twmonth");
		hideTabObj(object, twtabs);
	} else if (tabgroup == "contacts") {
		selectedTab = object;
		var cltabs = new Array("addresscards", "detailedcards");
		hideTabObj(object, cltabs);
	} else if (tabgroup == "contactform") {
		selectedTab = object;
		var cftabs = new Array("clgeneral", "clbusiness", "clpersonal", "clmisc", "cltickets", "clchats", "clcustom");
		hideTabObj(object, cftabs);
	} else if (tabgroup == "eventform") {
		selectedTab = object;
		var cftabs = new Array("efgeneral", "efmisc", "efcustom");
		hideTabObj(object, cftabs);
	} else if (tabgroup == "taskform") {
		selectedTab = object;
		var cftabs = new Array("tfgeneral", "tfmisc", "tfcustom");
		hideTabObj(object, cftabs);
	} else if (tabgroup == "userform") {
		selectedTab = object;
		var cftabs = new Array("suedit", "sutickets", "suchats", "suticketreports");
		hideTabObj(object, cftabs);
	}
}

function hideTabObj(showtab, tablist) {
	displayTab(showtab);
	for (i=0;i<tablist.length;i++)
	{
		if (tablist[i] != showtab)
		{
			hideTab(tablist[i]);
		}
	}
}


function hideTabOn(objid, displaytype) {
	result = browserObject(objid);
	if (!result)
	{
		alert("Invalid Display Object: "+objid+"\nPlease make sure that all correct display objects are on the page");
		return;
	}

	if (result.style.display == "none")
	{
		// hidden
		hideTab("search");
		hideTab("massaction");
		hideTab("settings");
	} else {
		if (displaytype == "search")
		{
			displayTab("search");
		} else if (displaytype == "settings") {
			displayTab("settings");
		} else {
			displayTab("massaction");
		}
	}
}

function toggleAll(formname) {
	var currForm = formname;
	var isChecked = checktoggle;
	var itercount = 1;
	var trassignid;

	if (checktoggle == 1) {
		checktoggle = 0;
	} else {
		checktoggle = 1;
	}

	for (var elementIdx=0; elementIdx<currForm.elements.length; elementIdx++) {
		if (!currForm.elements)
		{
			break;
		}

		if (currForm.elements[elementIdx].type == 'checkbox') {
			currForm.elements[elementIdx].checked = isChecked;
		} else if (currForm.elements[elementIdx].type == 'hidden') {
			hidval = currForm.elements[elementIdx].name;

			if (hidval.substr(0, 13) == 'itemhighlight')
			{
				trassignid = hidval.substr(13, hidval.length);
				currForm.elements[elementIdx].value = isChecked;
				highlightTR("trid"+trassignid, isChecked, itercount);
				itercount++;
			}
		}
	}
}

function highlightTR(element, isChecked, ditercount){

	var mgobj = browserObject(element);
	if (!mgobj)
	{
		return;
	}
		
	var altdecide = ditercount%2;

	if (isChecked == 1)
	{
		mgobj.className="rowselect";
	} else {	
		if (altdecide == 0)
		{
			mgobj.className="row1";
	} else {
			mgobj.className="row2";
		}
	}
}

function showHighlight(name)
{
	if (name.className != "rowselect")
	{
		name.style.backgroundColor = "";
		name.className = 'rowhighlight';
	}
}

function clearHighlight(name, classname, bgcolor)
{
	if (name.className != "rowselect")
	{
		name.style.backgroundColor = bgcolor;
		name.className = classname;
	}
}

function doConfirm(question,url) {
	var x = confirm(question);
	if (x) {
		window.location.href = url;
	}
}

function submitGridForm(dosubmit)
{
	if (dosubmit)
	{
		document.ticketlistform.submit();
	}
	return true;
}

function doFormConfirm(confirmmessage, object) {
	if (object.value == "")
	{
		return false;
	}

	var x = confirm(confirmmessage);
	if (x) {
		object.form.submit();
		return true;
	}

	return false;
}

function selectjump(object){
	object.form.submit();
	return true;
}

function htmlize(str){
        str = str.replace(/\&/g,"&amp;");
        str = str.replace(/\</g,"&lt;");
        str = str.replace(/\>/g,"&gt;");
        str = str.replace(/\"/g,"&quot;");
        str = str.replace(/\n/g,"<br/>\n");
        return str;
}

function preloadImages() {
    if (document.images) {
        var imgFiles = arguments;
        if (document.preloadArray == null) {
            document.preloadArray = new Array();
        }
        var i = document.preloadArray.length;
        with (document) {
            for (var j = 0; j < imgFiles.length; j++) {
                if (imgFiles[j].charAt(0) != "#") {
                    document.preloadArray[i] = new Image();
                    document.preloadArray[i++].src = imgFiles[j];
                }
            }
        }
    }
}

/**
* MENU TAB RELATED FUNCTIONS
*/
function switchTabClass(tabname, classname) {
	var t_tab = browserObject(tabname);
	if (t_tab)
	{
		t_tab.className = classname;
	}
}

function resetTabDefault() {
	var tabClass = "menusectiondefault";
	if (swiftiswinapp == "1")
	{
		tabClass = "menusectionwinapp";
	}
	for (i = 1; i <= 10; i++)
	{
		switchTabClass("tb_menusection"+i, tabClass);
	}
}

function switchTab(tabitem, classid) {
	var t_ml = browserObject("tb_menuline");
	var t_mlnk = browserObject("tb_menulinks");
	var t_md = browserObject("linksdiv");

	t_md.innerHTML = menulinks[tabitem];
	t_ml.className = "menuline"+classid;
	t_mlnk.className = "menulinks"+classid;
	t_md.className = "menulinks"+classid;

	resetTabDefault();
	switchTabClass("tb_menusection"+tabitem, "menusection"+classid);
}

function LoadBarMenu(obj, tdobj){
	if(document.getElementById){
	var el = document.getElementById(obj);
	var ar = document.getElementById("parent").getElementsByTagName("span");
		if(el.style.display != "block"){
			for (var i=0; i<ar.length; i++){
				if (ar[i].className=="BarOptions" || ar[i].className=="BarOptionsDisplay")
				ar[i].style.display = "none";
			}
			el.style.display = "block";
		}else{
			el.style.display = "none";
		}
	}

	if (tdobj)
	{
		tdobj.style.background='#FFFFFF';
	}
}

function navigateWindow(navlocation) {
	window.location.href = navlocation;
}

function doRand()
{
	var num;
	now=new Date();
	num=(now.getSeconds());
	num=num+1;
	return num;
}

function popupInfoWindow(url) {
	screen_width = screen.width;
	screen_height = screen.height;
	widthm = (screen_width-400)/2;
	heightm = (screen_height-500)/2;
	window.open(url,"infowindow");
}

function popupSmallWindow(url) {
	screen_width = screen.width;
	screen_height = screen.height;
	widthm = (screen_width-400)/2;
	heightm = (screen_height-300)/2;
	window.open(url,"infowindow"+doRand(), "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=400,height=300,left="+widthm+",top="+heightm);
}

function changeImage(imgid, newpath)
{
	imgObj = browserObject(imgid);
	if (imgObj)
	{
		imgObj.src = newpath;
	}
}

function popupDataWindow(url) {
	screen_width = screen.width;
	screen_height = screen.height;
	widthm = (screen_width-700)/2;
	heightm = (screen_height-600)/2;
	window.open(url,"datawindow"+doRand(), "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=700,height=600,left="+widthm+",top="+heightm);
}

function changeColorTable(inputname, value) {
	tableid = browserObject("color"+inputname);
	
	tableid.style.backgroundColor = value;
	return true;
}

function enableField(field) {
	if (document.all || document.getElementById) {
		field.disabled = false;
	}
}

function disableField(field) {
	if (document.all || document.getElementById) {
		if (!field)
		{
			return;
		}
		field.disabled = true;
	}
}

function initEditor() {
	htmlAreaLoaded = true;

	editor = new HTMLArea("contents");
	var config = editor.config;
	config.pageStyle = 'body { font-family: Verdana, Sans-Serif; font-size: 12px; } ';
	config.statusBar = false;
	config.toolbar = [
		[ "fontname", "space",
		  "fontsize", "space",
		  "formatblock", "space",
		  "bold", "italic", "underline", "strikethrough", "separator",
		  "subscript", "superscript", "separator",
		  "copy", "cut", "paste", "space", "undo", "redo", "space"],

		[ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
		  "lefttoright", "righttoleft", "separator",
		  "orderedlist", "unorderedlist", "outdent", "indent", "separator",
		  "forecolor", "hilitecolor", "separator",
		  "inserthorizontalrule", "createlink", "insertimage", "inserttable", "htmlmode"]
	];
	if (loadTablePlugin == true)
	{
		editor.registerPlugin("TableOperations");
	}
	editor.registerPlugin("ContextMenu");
	editor.generate();
	return false;
}

function clearAllMenus(doignore) {
	return;

	if (!window.CMenuList)
	{
		return;
	}
	for (var i = 0;i<window.CMenuList.length;i++)
	{
		var itemKey = window.CMenuList[i];
		if ((window.CMenuClick == false || doignore == true) && window.CMenus[itemKey].isover == false)
		{
			window.CMenus[itemKey].cancelQueued();
			window.CMenus[itemKey]._setVisibility(false);
//			window.CMenus[itemKey].showLevel(null, 0);
		}
	}
}

function listMoveItem(from, to)
{
	var f;
	var SI;

	from = document.forms["viewform"][from];
	to = document.forms["viewform"][to];

	if (from.options.length > 0)
	{
		for (i=0;i<from.length;i++)
		{
			if (from.options[i].selected)
			{
				SI = from.selectedIndex;
				f = from.options[SI].index;
				to.options[to.length] = new Option(from.options[SI].text,from.options[SI].value);
				from.options[f] = null;
				i--;
			}
		}
	}
}

function listMoveUpList(listField) {
	listField = document.forms["viewform"][listField];

	if ( listField.length == -1)
	{
//		alert("There are no values which can be moved!");
	} else {
		var selected = listField.selectedIndex;
		if (selected == -1)
		{
//			alert("You must select an entry to be moved!");
		} else {
			if (listField.length == 0 )
			{
//				alert("There is only one entry!\nThe one entry will remain in place.");
			} else {
				if ( selected == 0 ) {
//					alert("The first entry in the list cannot be moved up.");
				} else {
					var moveText1 = listField[selected-1].text;
					var moveText2 = listField[selected].text;
					var moveValue1 = listField[selected-1].value;
					var moveValue2 = listField[selected].value;
					listField[selected].text = moveText1;
					listField[selected].value = moveValue1;
					listField[selected-1].text = moveText2;
					listField[selected-1].value = moveValue2;
					listField.selectedIndex = selected-1;
				}
			}
		}
	}
}

function listMoveDownList(listField) {
	listField = document.forms["viewform"][listField];

	if (listField.length == -1) {
//		alert("There are no values which can be moved!");
	} else {
		var selected = listField.selectedIndex;
		if (selected == -1) {
//			alert("You must select an entry to be moved!");
		} else {
			if ( listField.length == 0 ) {
//				alert("There is only one entry!\nThe one entry will remain in place.");
			} else {
				if ( selected == listField.length-1 ) {
//					alert("The last entry in the list cannot be moved down.");
				} else {
					var moveText1 = listField[selected+1].text;
					var moveText2 = listField[selected].text;
					var moveValue1 = listField[selected+1].value;
					var moveValue2 = listField[selected].value;
					listField[selected].text = moveText1;
					listField[selected].value = moveValue1;
					listField[selected+1].text = moveText2;
					listField[selected+1].value = moveValue2;
					listField.selectedIndex = selected+1;
				}
			}
		}
	}
}

function processViewForm() {
	leftField = document.forms["viewform"]["leftfields[]"];
	mainField = document.forms["viewform"]["fields[]"];

	if (leftField.options.length > 0)
	{
		for (i=0;i<leftField.length;i++)
		{
			leftField.options[i].selected = true;
		}
	}
	if (mainField.options.length > 0)
	{
		for (i=0;i<mainField.length;i++)
		{
			mainField.options[i].selected = true;
		}
	}

	return true
}

function refreshPage() {
//	window.location.reload(true);
	window.location.href = swiftpath+"staff/index.php?_m=tickets&_a=manage";
}

function absX(o) {
	if (o == document.body) return 0;
	var x = o.offsetLeft;
	if (o.offsetParent && o.offsetParent != o)
		x += absX(o.offsetParent);
	return x;
}

function absX2(o, dotype) {
	if (o == document.body) return 0;

	var x = o.offsetLeft;
	if (dotype == 1)
	{
		x += o.offsetWidth;
	}

	if (o.offsetParent && o.offsetParent != o)
		x += absX2(o.offsetParent, 0);
	return x;
}

function absY(o) {
	if (o == document.body) return 0;
	var y = o.offsetTop;
	if (o.offsetParent && o.offsetParent != o)
		y += absY(o.offsetParent);
	return y;
}

function absY2(o, dotype) {
	if (o == document.body) return 0;
	var y = o.offsetTop;
	if (dotype == 1)
	{
		y += o.offsetHeight;
	}
	if (o.offsetParent && o.offsetParent != o)
		y += absY2(o.offsetParent, 0);
	return y;
}

function CustomOver(text, id, id2) {
	var o1 = browserObject(id); var o2 = browserObject(id2);
	if (!o1 || !o2)
	{
		return;
	}

//	return overlib(text, RELX, absX(o1), RELY, absY2(o2, 1), WIDTH, 300, FGCLASS, "stickyfg", BGCLASS, "stickybg", TEXTFONTCLASS, "stickyfont", CAPTIONFONTCLASS, "stickyfont", CLOSEFONTCLASS, "stickyfont");
	return overlib(text, FOLLOWMOUSE, WIDTH, 300, FGCLASS, "stickyfg", BGCLASS, "stickybg", TEXTFONTCLASS, "stickyfont", CAPTIONFONTCLASS, "stickyfont", CLOSEFONTCLASS, "stickyfont");
}

function CustomPopup(menu, e, id, datam) {
	var o1 = browserObject(id), o2 = browserObject('popupRef');
	if (!o1 || !o2)
		return;

	CMenuPopUpXY(menu, absX(o1), absY(o2));
}

function CustomPopupRef(menu, e, id, datam, refobject, refvar) {
	if (!refvar)
	{
		return false;
	}

	var o1 = browserObject(id), o2 = browserObject(refobject);
	if (!o1 || !o2)
		return;

	if (menu == "tviewmenu" || menu == "tlabelmenu")
	{
		if (browsercode == "IE")
		{
			var minval = 1;
		} else {
			var minval = 1;
		}
		var yCord = absY2(o2, 1)-minval;
	} else if (menu == "kbcachemenu" || menu == "prcachemenu" || menu == "dlcachemenu" || menu == "fwquotemenu") {
		var yCord = absY2(o2, 1);
	} else {
		var yCord = absY(o2);
	}
	CMenuPopUpXY(menu, absX2(o1), yCord);
}

function CustomPopupRefRight(menu, id, refobject) {
	var o1 = browserObject(id), o2 = browserObject(refobject);
	if (!o1 || !o2)
		return;

	if (menu == "tviewmenu")
	{
		var yCord = absY(o2)-1;
	} else {
		var yCord = absY(o2);
	}
	CMenuPopUpXY(menu, absX2(o1, 1), yCord);
}

function mEventRef(m, node_index, e, refvar) {
	if (!refvar)
	{
		return false
	}
}

function hideMenu(menu) {
//	window.CMenus[menu].hide();
}

function storeCaret (textEl) {
	if (textEl.createTextRange) 
		textEl.caretPos = document.selection.createRange().duplicate();
}

function insertAtCaret (textEl, text) {
	if (textEl.createTextRange && textEl.caretPos) {
		var caretPos = textEl.caretPos;
		caretPos.text =
		caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
		text + '' : text;
	} else {
		textEl.value = textEl.value+ "" + text;
	}
}

var popupCalendar = null;

function showCalendar(id, format, showsTime, showsOtherMonths) {
	var el = document.getElementById(id);
	if (popupCalendar != null) {
		popupCalendar.hide();
	} else {
		var cal = new Calendar(1, null, calSelected, calCloseHandler);
		if (typeof showsTime == "string") {
			cal.showsTime = true;
			cal.time24 = (showsTime == "24");
		}
		if (showsOtherMonths) {
			cal.showsOtherMonths = true;
		}
		popupCalendar = cal;
		cal.setRange(1900, 2070);
		cal.create();
	}
	popupCalendar.setDateFormat(format);
	popupCalendar.parseDate(el.value);
	popupCalendar.sel = el;

	popupCalendar.showAtElement(el, "Br");

	return false;
}

function calSelected(cal, date) {
	cal.sel.value = date;
	if (cal.dateClicked && (cal.sel.id == "opt_due"))
	cal.callCloseHandler();
}

function calCloseHandler(cal) {
	cal.hide();
	popupCalendar = null;
}

// =========== XML HTTP REQUEST STUFF ==============
var xmlhttp;
var xmlaction = "";

function loadXMLHTTPRequest(url) {
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
		xmlhttp.onreadystatechange = processStatusChange;
		xmlhttp.open("GET", url, true);
		xmlhttp.send(null);
	} else if (window.ActiveXObject) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		if (xmlhttp) {
			xmlhttp.onreadystatechange = processStatusChange;
			xmlhttp.open("GET", url, true);
			xmlhttp.send();
		}
	}
}

var oldKeyword = "";
function processStatusChange() {
	if (xmlhttp.readyState == 4) {
		if (xmlhttp.status == 200) {
			formname = getActiveFormName();
			if (xmlaction == "tp" && formname == "replyform")
			{
				switchGridTab('ttpostreply', 'tickets');
				document.replyform.replycontents.focus();
			}

			if (xmlaction == "kb" || xmlaction == "pr" || xmlaction == "tp" || xmlaction == "forwardquote" || xmlaction == "forwardquoteall")
			{
				insertAtCaret(document.forms[formname].replycontents, xmlhttp.responseText);
			} else if (xmlaction == "history" || xmlaction == "forward" || xmlaction == "addnotes" || xmlaction == "edit" || xmlaction == "billing" || xmlaction == "release" || xmlaction == "lschats") {
				ticketDataObj = browserObject("tab_tt"+xmlaction);
				if (ticketDataObj)
				{
					ticketDataObj.innerHTML = xmlhttp.responseText;
				}

				if (xmlaction == "addnotes")
				{
					setTimeout('document.noteform.notecontents.focus();', 100);
				} else if (xmlaction == "forward") {
					setTimeout('document.forwardform.opt_to.focus();', 100);
				} else if (xmlaction == "release") {
					setTimeout('document.releaseform.tt_staffid.focus();', 100);
				} else if (xmlaction == "billing") {
					setTimeout('document.billingform.tworked.focus();', 100);
				}
			} else if (xmlaction == "auditlog") {
				logObj = browserObject("tab_ttlog");
				if (logObj)
				{
					logObj.innerHTML = xmlhttp.responseText;
				}
			} else if (xmlaction == "userlookup") {
//				alert(xmlhttp.responseText);
				eval(xmlhttp.responseText);
			} else if (xmlaction == "twday" || xmlaction == "twworkweek" || xmlaction == "twweek" || xmlaction == "twmonth") {
				tabObj = browserObject("tab_"+xmlaction);
				if (tabObj)
				{
					tabObj.innerHTML = xmlhttp.responseText;
				}
			} else if (xmlaction == "addresscards" || xmlaction == "detailedcards") {
				tabObj = browserObject("contactscontainer");
				if (tabObj)
				{
					tabObj.innerHTML = xmlhttp.responseText;
					recalcContactHeight();
					document.realtimesearch.searchquery.focus();
				}
			} else if (xmlaction == "cltickets" || xmlaction == "clchats" || xmlaction == "sutickets" || xmlaction == "suchats" || xmlaction == "suticketreports") {
				tabObj = browserObject("tab_"+xmlaction);
				if (tabObj)
				{
					tabObj.innerHTML = xmlhttp.responseText;
				}
			} else if (xmlaction == "kbirs" && window.$IRS.isThreadRunning == true && xmlhttp.responseText != "") {
				window.$IRS.render(xmlhttp.responseText);
			}
		} else {
			alert("There was a problem retrieving the XML data from Server:\n" +xmlhttp.statusText);
		}
	}
}

function windowPlaceEmail(email, formname, formfield)
{
	if (!window.opener)
	{
		alert("Couldnt find window opener. Unable to append email");
		return;
	}

	var fieldValue = window.opener.document.forms[formname].elements[formfield].value;

	var appendValue = "";
	if (fieldValue == "")
	{
		appendValue = email;
	} else {
		appendValue = fieldValue+","+email;
	}

	window.opener.document.forms[formname].elements[formfield].value = appendValue;
	window.close();
}

function fetchData(datatype, dataid, ticketlabelid) {
	if (datatype == "kb")
	{
		xmlaction = "kb";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=knowledgebase&_a=ajax&type=fetcharticle&randno="+doRand()+"&kbarticleid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "kbirs") {
		xmlaction = "kbirs";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=knowledgebase&_a=ajax&type=irs&randno="+doRand()+"&query="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "pr") {
		xmlaction = "pr";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&randno="+doRand()+"&predefinedreplyid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "tp" || datatype == "tpf") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&randno="+doRand()+"&ticketpostid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "history") {
		xmlaction = "history";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action=history&randno="+doRand()+"&email="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "auditlog" || datatype == "forward" || datatype == "release" || datatype == "addnotes" || datatype == "forwardquote" || datatype == "forwardquoteall") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action="+datatype+"&randno="+doRand()+"&ticketid="+dataid+"&ticketlabelid="+ticketlabelid+"&sessionid="+swiftsessionid);
	} else if (datatype == "edit") {
		xmlaction = "edit";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action=edit&randno="+doRand()+"&ticketid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "billing") {
		xmlaction = "billing";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action=billing&randno="+doRand()+"&ticketid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "twday" || datatype == "twworkweek" || datatype == "twweek" || datatype == "twmonth") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=teamwork&_a=ajax&action="+datatype+"&customtype="+dataid+"&randno="+doRand()+"&sessionid="+swiftsessionid);
	} else if (datatype == "addresscards" || datatype == "detailedcards") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=teamwork&_a=ajax&action="+datatype+"&randno="+doRand()+"&sessionid="+swiftsessionid+"&searchquery="+dataid);
	} else if (datatype == "cltickets" || datatype == "sutickets") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action=history&randno="+doRand()+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "suticketreports") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=tickets&_a=ajax&action=ticketreports&randno="+doRand()+"&userid="+dataid+"&sessionid="+swiftsessionid);
	} else if (datatype == "clchats" || datatype == "suchats" || datatype == "lschats") {
		xmlaction = datatype;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=livesupport&_a=ajax&action=history&randno="+doRand()+dataid+"&sessionid="+swiftsessionid);
	}
}

function keywordCheck(formname, formfield)
{
	newKeyword = document.userlookupform.searchquery.value;
	if (oldKeyword != newKeyword)
	{
		oldKeyword = newKeyword;
/*		searchdivObj = browserObject("searchdiv");
		if (searchdivObj)
		{
			searchdivObj.innerHTML = newKeyword;
		}*/
		// Fetch the keyword
		xmlaction = "userlookup";
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=core&_a=userlookup&action=search&randno="+doRand()+"&query="+escape(newKeyword)+"&formname="+escape(formname)+"&formfield="+escape(formfield)+"&sessionid="+swiftsessionid);
	}
	setTimeout("keywordCheck('"+formname+"', '"+formfield+"');", 1000);
}

function keywordCheckContacts()
{
	newKeyword = document.realtimesearch.searchquery.value;
	if (oldKeyword != newKeyword)
	{
		oldKeyword = newKeyword;
		// Fetch the keyword
		xmlaction = selectedTab;
		loadXMLHTTPRequest(swiftpath+"staff/index.php?_m=teamwork&_a=ajax&action="+selectedTab+"&randno="+doRand()+"&searchquery="+escape(newKeyword)+"&sessionid="+swiftsessionid);
	}
	setTimeout("keywordCheckContacts();", 1000);
}

function autoInsertKB(kbarticleid) {
	formname = getActiveFormName();

	if (!document.forms[formname])
	{
		window.location.href = swiftpath+"staff/index.php?_m=knowledgebase&_a=editquestion&kbarticleid="+kbarticleid;
	} else {
		fetchData("kb", kbarticleid);
	}
}

function autoInsertPR(predefinedreplyid) {
	fetchData("pr", predefinedreplyid);

	return true;
}

function autoInsertTP(ticketpostid, fetchtype) {
	fetchData("tp", ticketpostid);
}

function autoInsertDL(downloaditemid, link, title) {
	formname = getActiveFormName();
	if (formname == "forwardform" || formname == "newticketform")
	{
		fprefix = "f";
	} else {
		fprefix = "";
	}

	if (!document.forms[formname])
	{
		window.location.href = swiftpath+"staff/index.php?_m=downloads&_a=editfile&downloaditemid="+downloaditemid;
	} else if (link != "") {
		// Simply append the link to the contents
		insertAtCaret(document.forms[formname].replycontents, link);
	} else {
		// Add the download to select box
		displayObject(fprefix+"downloads1");
		displayObject(fprefix+"downloads2");
		to = document.forms[formname]["opt_downloads[]"];
		to.options[to.length] = new Option(title,downloaditemid);
	}
}

function removeDLItem() {
	formname = getActiveFormName();
	to = document.forms[formname]["opt_downloads[]"];

	if (to.options.length > 0)
	{
		for (i=0;i<to.length;i++)
		{
			if (to.options[i].selected)
			{
				to.options[i] = null;
			}
		}
	}
}

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function decode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

	output.replace("\n", "<br>");
	output.replace("<", "&lt;");
	output.replace(">", "&gt;");

	return output;
}

function getActiveFormName()
{
	var formname = "";
	if (selectedTab == "ttforward")
	{
		formname = "forwardform"
	} else if (selectedTab == "newticket") {
		formname = "newticketform";
	} else {
		formname = "replyform";
	}

	return formname;
}

function clearDLItems() {
	formname = getActiveFormName();
	if (formname == "forwardform" || formname == "newticketform")
	{
		fprefix = "f";
	} else {
		fprefix = "";
	}

	to = document.forms[formname]["opt_downloads[]"];

	if (to.options.length > 0)
	{
		for (i=0;i<to.length;i++)
		{
			to.options[i] = null;
		}
	}
	hideObject(fprefix+"downloads1");
	hideObject(fprefix+"downloads2");
}

function processReplyForm() {
	formname = getActiveFormName();
	selField = document.forms[formname]["opt_downloads[]"];

	if (selField.options.length > 0)
	{
		for (i=0;i<selField.length;i++)
		{
			selField.options[i].selected = true;
		}
	}

	return true
}

function openSpellChecker() {
	formname = getActiveFormName();
	var text1 = document.forms[formname].replycontents;
	var speller = new spellChecker(text1);
	speller.openChecker();
}

/**
* ###############################################
* BEGIN COOLMENUPRO CODE, MERGED INTO ONE FILE.
* ###############################################
*/

var kbmenuloaded = false;
var prmenuloaded = false;
var dlmenuloaded = false;
var htmlAreaLoaded = false;
var VSTYLE = {"border":1, "borders":[1,0,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFFFFF","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var VSTYLEBORDER = {"border":1, "borders":[1,1,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFFFFF","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var VSTYLESEL = {"border":1, "borders":[1,0,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFF6E2","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var VSTYLESELBORDER = {"border":1, "borders":[1,1,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFF6E2","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var SUBPOPUPTOP = {"border":1, "borders":[1,1,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFFFFF","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var SUBPOPUP = {"border":1, "borders":[1,0,1,1], "shadow":1, "color":{"border":"#6393DF", "shadow":"#DBD8D1", "bgON":"#FFFFFF","bgOVER":"#F7FAFF"}, "css":{"ON":"clsCMOn", "OVER":"clsCMOver"}};
var STYLEPOPUP = {"border":1, "borders":[1,1,1,1], "shadow":1, "color":{"border":"#6393DF", "bgON":"#FFFFFF","bgOVER":"#F7FAFF",shadow:'#DBD8D1'}, "css":{"ON":"popupOn", "OVER":"popupOver"}};

// Title: COOLjsMenu
// URL: http://javascript.cooldev.com/scripts/coolmenu/
// Version: 2.4.3
// Last Modify: 9 May 2005
// Author: Alex Kunin <alx@cooldev.com>
// Notes: Registration needed to use this script on your web site.
// Copyright (c) 2001-2005 by CoolDev.Com
// Copyright (c) 2001-2005 by Sergey Nosenko

// Options: PROFESSIONAL, COMPRESSED, COMPATIBLE

function _u(_2){return typeof(_2)=='undefined'};function _K(_2){return typeof(_2)=='number'};function _1X(_2){return typeof(_2)=='object'};_k=document;_1N=RegExp;_h=window;_k._3e=_k.getElementById;_33=_k._3e?function(_E){return _k.getElementById(_E)}:function(_E){return _k.all[_E]};_34={_f:1,_d:0,_g:3,_e:2};_2n={};for(var i in _34)_2n[_34[i]]=i;_1y=1;_1$=2;_h.CMenus=_h.$CM=_h._G=[];_1={};_1._24=navigator.appVersion;_1._1J=navigator.userAgent;_1._1z=_h.opera;_1._3i=_1._1J.match(/opera.[789]/i);_1._1n=_1._1z&&!_1._3i;_1._X=_k._3e;_1._2A=_1._24.match(/MSIE 5.5/)&&_1._X&&!_1._1z;_1._3j=_1._24.match(/MSIE 5/)&&_1._X&&!_1._2A&&!_1._1z;_1._20=_1._24.match(/MSIE 6/)&&_1._X&&!_1._1z;_1._3g=_k.all&&!_1._X&&!_1._1z;_1._1f=_1._3g||_1._3j||_1._20;_1._21=_1._1J.match(/Mac/);_1._3F=_1._1J.match(/hotjava/i);_1._I=_k.layers&&!_1._X&&!_1._3F;_1._1R=_1._1J.match(/gecko/i);_1._A=_1._1f&&!_1._21;_3E={zIndex:1000,pos:'relative',dynamic:false,delay:[0,800],popupoff:[0,0],blankImage:'img/b.gif'};_2B={main:false,image:null,color:'',cssStyle:'',cssClass:'',attributes:'',size:['+item','+item'],offset:[0,0],code:_1._1n?'&nbsp;':'',_f:0,_d:0,_g:0,_e:0,_s:true,align:'left',valign:'top',_14:function(){with(this){_14=_L;if(!main){_f=Number.NaN;_d=Number.NaN;_f=size[1](_6,this);_d=size[0](_6,this);if(isNaN(_f)||isNaN(_d)){_f=_._1S();_d=_._1T();_f=size[1](_6,this);_d=size[0](_6,this)};_._T(_f,_d)};_g=offset[1](_6,this)+((this._2F&&this._6._3B)||0);_e=offset[0](_6,this);_._Q(_g,_e);_6._7._9._2J(this)}},_2w:function(){if(this._s!=this._6._2I(this.visibility))this._._n(this._s=!this._s);this._14()},_3n:function(){if(this._s!=this._6._2I(this.visibility)){this._s=!this._s;var _O=(this._6._7._9._1V&&_1._1f&&this[this._s?'fadeIn':'fadeOut'])||'';var _A=(_1._1f&&!_1._21&&this.filters)||'';if(_O||_A)this._._3.filter=_O+' '+_A;with(this._){if(_O)_.filters[0].apply();_n(this._s);if(_O)_.filters[0].play()}};this._14()}};_3K={};function _1t(_z,_2s){for(var i in _2s)if(_u(_z[i]))_z[i]=_2s[i]};BLANK_IMAGE='img/b.gif';function COOLjsMenuPRO(_r,_j){_1t(_j[0],_3E);this._1Y=_j[0].dynamic&&((_1._X&&!_1._1n&&!(_1._1f&&_1._21))||_1._I);this._3o=_j[0].autosize;this._2r=_1._1f||_1._1R;this._1q={};_j[0].blankImage=BLANK_IMAGE;if(!_r){_r='menu_';do _r+=Math.round(Math.random()*10);while(!_u(_h._G[_r]))};_h._G[this._r=_r]=this;this._q='$CM.'+_r;this._18=_j[0].popup;this._25=_j[0].frames;this._37=this._25&&_j[0].frames[0]==_h.name;this._13=!this._18&&_j[0].pos=='relative'&&(!this._25||this._37);this.$root=this._b={_4:this,_r:this._r,_q:this._q+'.$root',_7:null,_g:0,_e:0,_5:_j[0],frameoff:_j[0].pos?_j[0].pos:[0,0],_10:_L,_w:'R',_1p:true,_1E:-1,_1w:_j,_39:function(){return[]},_S:function(){return[]},_l:_22.prototype._l};if(this._25&&!this._37){this._b._g=0;this._b._e=0}else if(!this._13&&!this._18){this._b._g=_j[0].pos[0];this._b._e=_j[0].pos[1]};this._3d=this._3a=0;this._b.$level=this._b._9=new _1A(this,this._b);with(this._b){if(_K(_5.delay))_5.delay=[400,_5.delay];_5._3x=_5.delay[0];_5._30=_5.delay[1]};this.items=this._j=[];this._2N='';this._1x=[];this._2R=null;this._1u=null;this._26=null;this._2P={name:'trigger',size:['+item','+item'],zIndex:1000,code:'{trigger}'};this._1k(this._2P);if(_u(_h._Z)){_h._Z=_h.onload;_h.onload=function(){CLoadNotify();if(_h._Z){var _o=_h._Z;_h._Z=null;return _o()}}};if(_1._1n)_v=_1D;else if(_1._I)_v=_1l;else{_v=_1h};_v._2Z={}};$=COOLjsMenuPRO.prototype;$._l=function(_1s){return this._r+'_'+_1s};$.$ev=$._3P=function(_R,_w,_3N){var _a=true,_6=this._j[_w];if(_6){_a=this['$'+_R](_6);if(this[_R])this[_R](_6)};return _a};$._2Q=function(){return this._b._5.blankImage};$._Z=function(){if(!this._18){if(_1._I&&this._13)with(_k.anchors[this._l('da')]){this._b._g=x;this._b._e=y};this._2G()};this._Z=_L};$.initTop=function(){this._1q._f=this._2W();this._1q._d=this._2Y();var w=0,h=0,i,s;if(!this._2r)for(i in this)if(i.match(/^\$(on.*)$/))this._2N+=_1m(_1N.$1,'return '+this._q+'.$ev(\'' + _1N.$1 + '\', {index})');this._b._9._2$();if(this._b._5.placeholder)with(this._b._5){w=placeholder[1];h=placeholder[0]}else with(this._b._9){var x=0,y=0;for(i=0;i<_8.length;i++){if(i>0){x+=_8[i]._1F[1](_8[i]);y+=_8[i]._1F[0](_8[i])};w=Math.max(w,x+_8[i]._2_[1](_8[i]));h=Math.max(h,y+_8[i]._2_[0](_8[i]))}};this._2g=_K(w+h)&&w+h==w+h;if(!_1._I){s='<div id="'+this._l('r')+'" style="z-index:'+this._b._1w[0].zIndex+';position:';if(this._13)s+='relative;'+(this._2g?'width:'+w+'px;height:'+h+'px;':'');else s+='absolute;left:'+this._b._g+'px;top:'+this._b._e+'px;';s+='">'+(this._1Y?'':this._b._9._1G())+'</div>';_k.write(s);this._$=_v._U(this._l('r'))}else if(this._13)_k.write('<div><a name="'+this._l('da')+'" href="#"><img src="'+this._2Q()+'"'+(this._2g?'width="'+w+'" height="'+h+'"':'width="1" height="1"')+' border="0" /></a></div>');if(_1._20){this.$$$onclick=new Function('return '+this._q+".$$onclick(event)");this._2O=_k.body.onclick;_k.body.onclick=this.$$$onclick}else if(_1._X){this.$$$onclick=new Function('event','return '+this._q+".$$onclick(event)");_k.addEventListener('click',this.$$$onclick,true)}};$._3w=function(ev,offX,offY){var x=ev.pageX||ev.x;var y=ev.pageY||ev.y;if(_1._1f&&_k.body&&_k.body.parentElement){x+=_k.body.parentElement.scrollLeft;y+=_k.body.parentElement.scrollTop};var _2S=this._b._5.popupoff;x+=_u(offX)?_2S[1]:offX;y+=_u(offY)?_2S[0]:offY;this._3c(x,y)};$._3c=function(_x,_y){this.__(_x,_y);_h.setTimeout(this._q+'._2G()',10)};$._3z=function(_R){var _1B=_R.srcElement||_R.target;while(_1B){if(_1B==this._$._)return true;_1B=_1B.parentNode};return false};$.$$onclick=function(_R){if(!this._3z(_R)){this._17();this._F(null);this._1c(null)};if(this._2O)this._2O()};$._2G=function(){this._F(this._b._9)};$.init=_L;$.show=$._2G;$.hide=function(){this._F(null)};$.__=function(_x,_y){if(_1._I){this._3d=_x;this._3a=_y;this._b._9._2c()}else this._$._Q(_x,_y)};$._2b=function(_3u,_32,_H){this._1x[this._1x.length]=_h.setTimeout(this._q+'.'+_3u+'('+(_32?_32._q:'null')+')',_H)};$.cancelQueued=$._17=function(){for(var i in this._1x)_h.clearTimeout(this._1x[i]);this._1x=[]};$.setActiveItem=$._1c=function(_6,_H){if(_H)this._2b('setActiveItem',_6,_H);else{if(this._1r)this._1r._3p();var _11=_38(this._2R,_6),i;for(i in _11[0])_11[0][i]._10(_1y);for(i in _11[1])_11[1][i]._10(_1$);this._2R=_6;if(_6&&this._b._5.exclusive)for(i in _h._G)if(_h._G[i]!=this){_h._G[i]._F(null);_h._G[i]._1c(null)};if(_6&&_6._c.hasControls){this._1r=_6;_6._3r()}else this._1r=null}};$.setSelectedItem=$._3t=function(_6,_H){if(_H)this._2b('setSelectedItem',_6,_H);else{var _3s=this._26;this._26=_6;(_3s||this._b)._10('',true);(_6||this._b)._10('',true)}};$.showLevel=$._F=function(_9,_H){if(_H)this._2b('showLevel',_9,_H);else{if(_9&&_9._3C)_9=_9._7._7._9;if(!_9&&!this._18)_9=this._b._9;var _11=_38(this._1u,_9),i;_n(_11[0],false);_n(_11[1],true);this._1u=_9;this._3J()}};$._3J=function(){if(_1._1R){if(this._13){var o=this._$._.parentNode;if(o.tagName!='BODY'){o.style.width=this._$._.offsetWidth+'px';o.style.height=this._$._.offsetHeight+'px'}}}};$.$onfocus=function(_6){_6._2e();this._17();this._F(_6._9);_6._1H(true);this._1c(_6)};$.$_3Q=function(_6){this._17();if(this._1r)return true;if(!_6._c.sticky)this._F(null);this._1c(null);_6._1H(false)};$.$onmouseover=function(_6){_6._2e();this._17();this._F(_6._9,this._b._5._3x);_6._1H(true);this._1c(_6);return true};$.$onclick=function(_6){this._17();this._3t(_6);if(_6._c.url){_h.open(_6._c.url,_6._c.target||'_'+'self');if(!_6._c.sticky)this._F(null)}else{this._F(_6._9._s?_6._9._7._7._9:_6._9)};return false};$.$onmouseout=function(_6){this._17();if(this._1r)return true;this._F(this._18&&this._1u?this._b._9:null,this._b._5._30);this._1c(null,this._b._5._30);_6._1H(false);return true};$.$resizeHandler=function(){this._1q._f=this._2W();this._1q._d=this._2Y();this._b._9.__();return this._2t?this._2t():true};$._2x=function(){this._2t=window.onresize;window.onresize=new Function('return '+this._q+'.$resizeHandler()');this._2x=_L};$._2W=function(){return document.body.clientWidth};$._2Y=function(){return document.body.clientHeight};$._1e=function(_Y,_P){if(!_u(_Y)&&typeof(_Y[0])!='function'){_Y[1]=this._2z(_Y[1],_P,1);_Y[0]=this._2z(_Y[0],_P,0)};return _Y};var _2j={};$._2z=function(_2,_P,_2h){var _2i=_2+'|'+_P+'|'+_2h;if(!_u(_2j[_2i]))return _2j[_2i];var _p='return Math.round(';if(_K(_2))_p+=_2;else{_p='with(i)'+_p;var _3G=_2C(_2h),_3O,_m;while(_m=_2.match(/^([-+\.\d+]*)\*?(\w+)/)){if(_m[1]=='')_P=_m[2];else _p+=_N(_m[1])+(_m[2]=='px'?'':'*'+_m[2]+_3G);if(_m[2]=='body')this._2x();_2=_2.slice(_m[0].length)}};if(_P){var _2a=_2C(_2h+2);_p+='+i.'+_P+_2a;switch(_P){case'item':case'previousItem':break;case'parentItem':_p+='+i.parentLevel'+_2a;default:_p+='-i.level'+_2a}};_p+='+0)';var _a=_2j[_2i]=new Function('i,self',_p);return _a};$._1k=function(_,_1I){if(!_._28){_._28=true;if(!_.size&&(_.main||_.code))_.size=['+self','+self'];_1t(_,_2B);if(_1._A&&(_.fadeIn||_.fadeOut))_._2w=_._3n;with(_){if(image)code='<img src="'+image+'" width="'+size[1]+'" height="'+size[0]+'"'+(_1._I?'':' style="display:block"')+' />';code='<div'+attributes+' id="" style="position:absolute;'+(_1._1n?'width:1px;':'')+(color?'background-color:'+color+';':'')+cssStyle+'"'+_1m('class',cssClass)+'>'+code+'</div>'+"\n";if(_1._I)code=code.replace(/background([-\w]*:)/g,'layer-background$1');offset=_J(offset);size=_J(size);if(_K(offset[0]))offset[0]=_N(offset[0])+'px';if(_K(offset[1]))offset[1]=_N(offset[1])+'px';switch(_.align){case'center':offset[1]+='+0.5'+_1I+'-0.5self';break;case'right':offset[1]+='+'+_1I+'-self';break};switch(_.valign){case'middle':offset[0]+='+0.5'+_1I+'-0.5self';break;case'bottom':offset[0]='+'+_1I+'-self';break};if(!_u(_.margin)){var _g,_e,_1K,_1Q;if(_K(_.margin))_g=_e=_1K=_1Q=_.margin;else if(_.margin.length==2){_e=_1Q=_.margin[0];_g=_1K=_.margin[1]}else{_e=_.margin[0];_1K=_.margin[1];_1Q=_.margin[2];_g=_.margin[3]};if(_K(size[0]))size[0]=_N(size[0])+'px';if(_K(size[1]))size[1]=_N(size[1])+'px';if(!main){size[0]+=_N(-_e-_1Q)+'px';size[1]+=_N(-_g-_1K)+'px'};offset[0]+=_N(_e)+'px';offset[1]+=_N(_g)+'px'};this._1e(size);this._1e(offset,'item')}};return _};$._3k=function(_3){if(!_3._28){var i,j;_3._28=true;_3.layers=[];_3._4=this;_3._1i=function(_){this._4._1k(this.layers[this.layers.length]=_,'item')};var b=_3.border||0,_O=_3.transition||{};b=(b&&_3.borders)||[b,b,b,b];var _1v=_3._1v=b[0],_2d=_3._2d=b[1],_2u=_3._2u=b[2],_2v=_3._2v=b[3],_2l=_3._2l=_1v+_2u,_29=_3._29=_2d+_2v;var _1L=0,_1M=0;if(_K(_3.shadow))_1L=_1M=_3.shadow;else if(_1X(this._5.shadow)){_1L=_3.shadow[0];_1M=_3.shadow[1]};if(!_3.color)_3.color={};if(!_3.css)_3.css={};if(_3.color.shadow&&(_1L||_1M))_3._1i({_1j:1,color:_3.color.shadow,offset:[_1M,_1L]});if(_3.color.border&&(_2l||_29))_3._1i({_1j:1,color:_3.color.border});_={size:['+item-'+_29+'px','+item-'+_2l+'px'],offset:[_2d,_1v]};if(_3.color.bgON)_3._1i(_J(_,{_1j:1,color:_3.color.bgON,visibility:_O.fadeIn||_O.fadeOut?'':'n'}));if(_3.color.bgOVER)_3._1i(_J(_,{_1j:1,color:_3.color.bgOVER,visibility:'o',fadeIn:_O.fadeIn,fadeOut:_O.fadeOut}));if(this._3o)_.size=0;_3._1i(_J(_,{main:true,code:'<div class="'+_3.css.ON+'">{code}</div>',visibility:'h',_2F:1}));_3._1i(_J(_,{code:'<div class="'+_3.css.OVER+'">{ocode}</div>',visibility:'H',_2F:1}));_1t(_3,_3K)};return _3};function _1A(_4,_7){this._4=_4;this._7=_7;this._1P=_7==_4._b;this._1O=!_4._18&&this._1P;this._q=this._7._q+'.$level';this._31={_f:0,_d:0};this._r=this._4._l('l'+this._7._w)};$=_1A.prototype;$._8=[];$._g=0;$._e=0;$._1o=false;$._1V=false;$._2$=function(){if(!this._8.length){var i,_j=this._7._1w,_27=_j.length-1;if(_u(_j[_27]))_27--;this._8=_j.slice(1,_27+1);if(this._8.length==1&&this._8[0].array){var _12=this._8[0];this._8=[];for(i=0;i<_12.array.count;i++){this._8[i]=_J(_12);this._8[i].array.prepare(this._8[i],i)}};with(this)for(i in _8)_8[i]=new _22(_4,_7,_8[i],i,_4._j.length)}};$._l=function(_1s){return this._r+'_'+_1s};$._1C=function(){return!this._1O&&(_1._2A||_1._20)&&!this._2L(true)&&!this._2k(true)&&!this._2k(false)};$._2c=function(){if(this._B){this._B._Q(this._4._3d,this._4._3a);for(var i in this._8)this._8[i]._9._2c()}};$.__=function(){this._2f();for(var i in this._8)this._8[i].__();this._2y()};$._1G=function(){this._2$();var i,_a='<div id="'+this._l('l')+'" style="position:absolute;visibility:hidden;">';for(i in this._8)_a+=this._8[i]._2E;_a+='</div>';if(!this._4._1Y){_a='<div id="'+this._l('d')+'" style="position:absolute;visibility:hidden;left:0;top:0;width:1px;height:1px;">'+_a+'</div>';for(i in this._8)_a+=this._8[i]._9._1G()};if(this._1C())_a='<iframe tabindex="-1" frameborder="0" id="'+this._l('f')+'" src="'+(location.protocol=='https:'?this._4._b._5.https_fix_blank_doc:'')+'" scroll="none" style="filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);visibility:hidden;height:1px;position:absolute;width:1px;"></iframe>'+_a;return _a};$._S=function(){with(this._7)return _7?_7._9._S().concat([this]):[this]};$._2J=function(_z){this._D=Math.min(this._D,_z._g);this._C=Math.min(this._C,_z._e);this._1d=Math.max(this._1d,_z._g+_z._f);this._16=Math.max(this._16,_z._e+_z._d)};$._2f=function(){this._D=this._C=65535;this._1d=this._16=-65535};$._2L=function(){return _1._A?this._8[0]._5.filters||'':''};$._2k=function(_3v){return!this._1O&&_1._A?this._8[0]._5[_3v?'fadeIn':'fadeOut']||'':''};$._2y=function(){if(!this._1P){this._g+=this._8[0]._2U[1](this._8[0]);this._e+=this._8[0]._2U[0](this._8[0])}else if(_1._I){this._g=this._4._b._g;this._e=this._4._b._e};this._._Q(-this._D,-this._C);this._B._Q(this._g+this._D,this._e+this._C);this._._T(this._1d-this._D,this._16-this._C);this._B._T(this._1d-this._D,this._16-this._C);if(_1._I){with(this._B._.clip){left=this._D;top=this._C};with(this._._.clip){left=this._D;top=this._C}};if(!_1._I&&!_1._1n&&this._1O&&this._4._13&&!this._4._2g)this._4._$._T(this._f,this._d);if(this._1C())this._2m._n(this._s);else if(this._1O){var i,_19=this._4._b._5.forms_to_hide;if(_19)for(i in _19)_v._U(_19[i])._n(!this._4._1u||this._4._1u==this._4._b._9)}};$._n=function(_2){if(this._s!=_2){this._1V=false;var i;this._s=_2;this._7._10('',true);if(!this._2X){this._2X=true;if(this._4._1Y)this._B=_v._2V(this._1G(),this._4._$||1);else this._B=_v._U(this._l('d'));if(this._1C())this._2m=_v._U(this._l('f'));this._=_v._U(this._l('l'));this._2f();for(i in this._8)this._8[i]._3y();for(i in this._8)this._8[i]._3b();this._f=this._1d-this._D;this._d=this._16-this._C;this._2f()};var _A='';if(_1._A){_A=this._2k(_2)+' '+this._2L();var _1o=_A!=' ';if(_1o!=this._1o){this._B._3.filter=_A;this._1o=_1o};if(_1o)for(i=0;i<this._B._.filters.length;i++)this._B._.filters[i].apply()};_n(this._8,_2);this._2y();if(this._1C()){this._2m._Q(this._g+this._D,this._e+this._C);this._2m._T(this._1d-this._D,this._16-this._C)};this._B._n(_2);this._._n(_2);if(_A)for(var i=0;i<this._B._.filters.length;i++)this._B._.filters[i].play()};this._1V=_2};function _22(_4,_7,_c,_1a,_w){_4._j[_w]=this;if(_u(_c.ocode))_c.ocode=_c.code;_c.index=_w;_c.$0=null;var _3=this._3=(_c.format||{}).style||_7._1w[0].style||_7._5.style;this._1E=_7._1E+1;if(_1X(_3)&&_3.length)_3=_3[this._1E]||_3[0];this._5=_J(_7._5,_3==_7._3?{}:_4._3k(_3),_7._1w[0],_c.format||{});_1t(this,{_4:_4,_w:_w,_7:_7,_1a:_1a,_r:_4._l('i'+_w),_g:0,_e:0,_f:0,_d:0,_q:_4._q+'.items['+_w+']',_M:{},_s:false,_V:_1y,_i:[],_2E:'',_35:_7._9._8[_1a-1],_1P:_7==_4._b,_3q:_1a==0,_3A:_1a==_7._9._8.length-1,_c:_J(_c,this._5.parameters),_1w:_c.sub,_1p:_c.sub&&_c.sub.length>1,_2_:_4._1e(this._5.size),_2U:_4._1e(this._5.leveloff,'parentItem'),_1F:_4._1e(this._5.itemoff,'previousItem'),_2o:_4._1e(this._5.wrapoff,'previousItem')});this.$level=this._9=this._1p?new _1A(_4,this):{_3C:true,_7:this,_q:this._q+'.$level',_S:_1A.prototype._S,_1G:_L,_2c:_L,__:_L};this._c.trigger='<a '+_1m('class',this._5.trigger)+_1m('accesskey',this._c.key)+' href="'+(this._c.url||'#')+'" '+_1m('target',this._c.target)+this._4._2N+'>'+(_1._1n?'':'<img src="'+this._4._2Q()+'" width="100%" height="100%"'+_1m('alt',this._c[this._5.alt||'alt'])+' border="0" />')+'</a>';_1t(this,{main:this._M,maxMain:_7._9._31,item:this,previousItem:this._35,level:_7._9,parentItem:_7,body:this._4._1q,parentLevel:this._1P?null:_7._7._9});var _1Z=[],_1W=[];if(this._5.imgsize&&this._5.image){this._3B=this._5.imgsize[1];_1Z[0]=_4._1k({_1j:1,image:this._5.image,size:this._5.imgsize,offset:[0,this._5._1v],valign:'middle',visibility:'n'},'item');_1Z[1]=_4._1k({_1j:1,image:this._5.oimage||this._5.image,size:this._5.imgsize,offset:[0,this._5._1v],valign:'middle',visibility:'o'},'item')};if(this._5.arrsize&&this._5.arrow){_1W[0]=_4._1k({image:this._5.arrow,size:this._5.arrsize,align:'right',valign:'middle',visibility:'nc'},'item');_1W[1]=_4._1k({image:this._5.oarrow||this._5.arrow,size:this._5.arrsize,align:'right',valign:'middle',visibility:'oc'},'item')};with(this)_1b(_5.levelLayers),_1b(_5.itemLayers),_1b(_5.layers),_1b(_1Z),_1b(_1W),_1b([_4._2P])};$=_22.prototype;$._2e=function(_2H){if(this._4._2r&&!this._3L){var _3M=this._i[this._i.length-1]._._;for(i in _2H?{$onmouseover:1,$onfocus:1}:this._4)if(i.match(/^\$(on.*)$/))_3M[_1N.$1]=new Function('return '+this._4._q+'.$ev(\'' + _1N.$1 + '\', '+this._w+')');this._3L=!_2H}};$._l=function(_1s){return this._r+'_'+_1s};$.getData=function(){return this._c};$._1H=function(_3I){var _2K=this._c[this._5.status||'status'];if(_2K)_h.status=_3I?_2K:_h.defaultStatus};$._S=function(){return this._7._S().concat([this])};$._39=function(){return this._7._39().concat([this._1a])};$._1b=function(_19){for(var i in _19||[]){var _12=_19[i];if(this._3H(_12.visibility)){var i,_p=_12.code,_m;if(!_12._1j){while(_m=_p.match(/\{([\w\d]+)=([^}]*)\}/))_p=_p.replace(new _1N(_m[0],'g'),_u(this._c[_m[1]])?_m[2]:this._c[_m[1]]);while(_m=_p.match(/\{([\w\d]+)\}/)){if(_u(this._c[_m[1]]))break;_p=_p.replace(new _1N(_m[0],'g'),this._c[_m[1]])}};i=this._i.length;this._i[i]=_J(_12);this._2E+=_p.replace('id=""','id="'+this._l(i)+'"')}}};$._3y=function(){var i,_23,_15;for(i in this._i){with(this._i[i]._=_v._U(this._l(i)))if(this._i[i].main){if(!_u(_23))this._i[_23].main=false;_15={_f:Number.NaN,_d:Number.NaN};this._i[i]._f=this._M._f=this._i[i].size[1](this,_15);this._i[i]._d=this._M._d=this._i[i].size[0](this,_15);if(isNaN(this._M._f)||isNaN(this._M._d)){_15={_f:_1S(),_d:_1T()};this._i[i]._f=this._M._f=this._i[i].size[1](this,_15);this._i[i]._d=this._M._d=this._i[i].size[0](this,_15)};with(this._7._9._31){_f=Math.max(_f,this._M._f);_d=Math.max(_d,this._M._d)};_23=i};this._i[i]._6=this};this._2e(true)};$._3b=function(){with(this){_f=_5.size[1](this);_d=_5.size[0](this);if(_35){if(_c.wrapPoint){_g=_2o[1](this);_e=_2o[0](this)}else{_g=_1F[1](this);_e=_1F[0](this)}};_7._9._2J(this)}};$._n=function(_2){this._s=_2;this._10(this._V,true)};$._3H=function(_W){if(_W){var j,_2,_t=false;for(j=0;j<_W.length;j++){_2=null;switch(_W.charAt(j)){case'!':_t=!_t;break;case'G':_2=!!_1._1R;break;case'c':_2=!!this._1p;break;case'C':_2=_t!=!!this._1p;break;case'H':_2=!this._c.hasControls&&!_t;break;case'h':case's':case'n':case'N':case'o':case'O':_2=!_t;break;case'f':_2=this._3q;break;case'l':_2=this._3A;break;default:_2=_W.charAt(j)==this._1E;break};if(_2!==null)if(_2==_t)return false;else _t=false}};return true};$._2I=function(_W){if(!this._s)return false;if(_W){var j,_2,_t=false;for(j=0;j<_W.length;j++){_2=null;switch(_W.charAt(j)){case'!':_t=!_t;break;case'G':_2=!!_1._1R;break;case'C':_2=!!(this._1p&&this._9._s);break;case's':_2=this._4._26==this;break;case'h':_2=this._c.hasControls?!_t:this._V==_1y;break;case'n':_2=this._V==_1y;break;case'N':_2=this._7._V==_1y;break;case'H':case'o':_2=this._V==_1$;break;case'O':_2=this._7._V==_1$;break;default:_2=!_t;break};if(_2!==null)if(_2==_t)return false;else _t=false}};return true};$._10=function(_2,_3D){with(this)if(_2!=_V||_3D){if(_2)_V=_2;for(var i in _i)_i[i]._2w()}};$.__=function(){this._3b();for(var i in this._i){this._i[i]._14=_2B._14;this._i[i]._14()};if(this._9._2X)this._9.__()};$._3p=function(){this._i[this._i.length-1]._._n(true)};$._3r=function(){this._i[this._i.length-1]._._n(false)};_v=_L;function _2D(_1g){for(var i in _1g){_v._2Z[_1g[i].id]=_1g[i];if(_1g[i].layers&&_1g[i].layers.length)_2D(_1g[i].layers)}};function _1h(){};$=_1h.prototype;_1h._U=function(_E){var _a=new _1h;_a._=_33(_E);_a._2q();return _a};_1h._2V=function(_2p,_7){_a=new _1h;_a._=_k.createElement('div');with(_a._.style){position='absolute';left=top=-1000;visibility='hidden'};_a._.innerHTML=_2p;_7._.appendChild(_a._);_a._2q();return _a};$._2q=function(){this._3=this._.style;this._2T=this._.childNodes[0]};$._n=function(_2){this._3.visibility=_2?'inherit':'hidden'};$._1S=function(){this._2T.offsetWidth};$._1T=function(){this._2T.offsetHeight};$._Q=function(_g,_e){with(this._3){left=_g+'px';top=_e+'px'}};$._T=function(_f,_d){with(this._3){width=_f+'px';height=_d+'px'}};function _1D(){};$=_1D.prototype;_1D._U=function(_E){var _a=new _1D;_a._=_33(_E);_a._3=_a._.style;return _a};$._n=function(_2){this._3.visibility=_2?'visible':'hidden'};$._1S=function(){return this._3.pixelWidth};$._1T=function(){return this._3.pixelHeight};$._Q=function(_g,_e){with(this._3){left=_g;top=_e}};$._T=function(_f,_d){with(this._3){width=_f;height=_d}};function _1l(){};$=_1l.prototype;_1l._U=function(_E){var _a=new _1l;_a._=_v._2Z[_E];return _a};_1l._2V=function(_2p){var _a=new _1l;_T._=new Layer(1000);with(_a._){visibility='hide';document.open('text/html');document.write(_E);document.close();_2D(layers)};return _a};$._n=function(_2){this._.visibility=_2?'inherit':'hide'};$._1S=function(){return this._.clip.width};$._1T=function(){return this._.clip.height};$._Q=function(_g,_e){this._.moveTo(_g,_e)};$._T=function(_f,_d){this._.resize(_f,_d)};function _L(){return''};function _1m(_r,_2){return _2?' '+_r+'="'+_2+'"':''};function _J(_z){if(!_u(_z.length)&&_z.concat)return([]).concat(_z);var i,j,_a={};for(j=0;j<arguments.length;j++)if(_1X(arguments[j]))for(i in arguments[j])_a[i]=arguments[j][i];return _a};function _2C(_w){return'.'+_2n[_w]};function _N(_2){switch(_2){case'':_2='+';case'-':case'+':return _2+1;default:return(_2>=0?'+':'')+parseFloat(_2)}};function _38(_2M,_36){var _1_=_2M?_2M._S():[],_1U=_36?_36._S():[],i=0;while(i<_1_.length&&i<_1U.length&&_1_[i]==_1U[i])i++;return[_1_.slice(i),_1U.slice(i)]};function _n(_3f,_2){for(var i in _3f)_3f[i]._n(_2)};function CMenuPopUp(_4,_3l,_3m,_3h){_h._G[_4]._3w(_3l,_3m,_3h)};function CMenuPopUpXY(_4,_x,_y){_h._G[_4]._3c(_x,_y)};function CLoadNotify(){for(var i in _h._G)_h._G[i]._Z()}

if (!themepath)
{
	var themepath = "";
}

var BLANK_IMAGE=themepath+"space.gif";

// +-----------------------------------------------------------------------+
// | Copyright (c) 2002-2003, Richard Heyes, Harald Radi                        |
// | All rights reserved.                                                  |
// |                                                                       |
// | Redistribution and use in source and binary forms, with or without    |
// | modification, are permitted provided that the following conditions    |
// | are met:                                                              |
// |                                                                       |
// | o Redistributions of source code must retain the above copyright      |
// |   notice, this list of conditions and the following disclaimer.       |
// | o Redistributions in binary form must reproduce the above copyright   |
// |   notice, this list of conditions and the following disclaimer in the |
// |   documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote      |
// |   products derived from this software without specific prior written  |
// |   permission.                                                         |
// |                                                                       |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
// |                                                                       |
// +-----------------------------------------------------------------------+
// | Author: Richard Heyes <richard@phpguru.org>                           |
// |         Harald Radi <harald.radi@nme.at>                              |
// +-----------------------------------------------------------------------+
//
// $Id: main.js,v 1.38 2005/12/05 22:12:35 vshoor Exp $

/**
* ###############################################
* REMOVED HARD CODED IMAGE WIDTHS [VARUN]
* ###############################################
*/


/**
* Function to create copies of objects which are
* normally passed around by references (Arrays for example)
*/
function arrayCopy(input)
{
	var output = new Array(input.length);

	for (i in input) {
		if (typeof(input[i]) == 'array') {
			output[i] = arrayCopy(input[i]);
		} else {
			output[i] = input[i];
		}
	}

	return output;
}

/**
* TreeMenu class
*/
	function TreeMenu(iconpath, myname, linkTarget, defaultClass, usePersistence, noTopLevelImages)
	{
		// Properties
		this.iconpath         = iconpath;
		this.myname           = myname;
		this.linkTarget       = linkTarget;
		this.defaultClass     = defaultClass;
		this.usePersistence   = usePersistence;
		this.noTopLevelImages = noTopLevelImages;
		this.n                = new Array();
		this.output           = '';

		this.nodeRefs       = new Array();
		this.branches       = new Array();
		this.branchStatus   = new Array();
		this.layerRelations = new Array();
		this.childParents   = new Array();
		this.cookieStatuses = new Array();

		this.preloadImages();
	}

/**
* Adds a node to the tree
*/
	TreeMenu.prototype.addItem = function (newNode)
	{
		newIndex = this.n.length;
		this.n[newIndex] = newNode;
		
		return this.n[newIndex];
	}

/**
* Preload images hack for Mozilla
*/
	TreeMenu.prototype.preloadImages = function ()
	{
		var plustop    = new Image; plustop.src    = this.iconpath + '/plustop.gif';
		var plusbottom = new Image; plusbottom.src = this.iconpath + '/plusbottom.gif';
		var plus       = new Image; plus.src       = this.iconpath + '/plus.gif';
	
		var minustop    = new Image; minustop.src    = this.iconpath + '/minustop.gif';
		var minusbottom = new Image; minusbottom.src = this.iconpath + '/minusbottom.gif';
		var minus       = new Image; minus.src       = this.iconpath + '/minus.gif';
	
		var branchtop    = new Image; branchtop.src    = this.iconpath + '/branchtop.gif';
		var branchbottom = new Image; branchbottom.src = this.iconpath + '/branchbottom.gif';
		var branch       = new Image; branch.src       = this.iconpath + '/branch.gif';
	
		var linebottom = new Image; linebottom.src = this.iconpath + '/linebottom.gif';
		var line       = new Image; line.src       = this.iconpath + '/line.gif';
	}

/**
* Main function that draws the menu and assigns it
* to the layer (or document.write()s it)
*/
	TreeMenu.prototype.drawMenu = function ()// OPTIONAL ARGS: nodes = [], level = [], prepend = '', expanded = false, visbility = 'inline', parentLayerID = null
	{
		/**
	    * Necessary variables
	    */
		var output        = '';
		var modifier      = '';
		var layerID       = '';
		var parentLayerID = '';
	
		/**
	    * Parse any optional arguments
	    */
		var nodes         = arguments[0] ? arguments[0] : this.n
		var level         = arguments[1] ? arguments[1] : [];
		var prepend       = arguments[2] ? arguments[2] : '';
		var expanded      = arguments[3] ? arguments[3] : false;
		var visibility    = arguments[4] ? arguments[4] : 'inline';
		var parentLayerID = arguments[5] ? arguments[5] : null;

		var currentlevel  = level.length;

		for (var i=0; i<nodes.length; i++) {
		
			level[currentlevel] = i+1;
			layerID = this.myname + '_' + 'node_' + this.implode('_', level);

			/**
            * Store this object in the nodeRefs array
            */
			this.nodeRefs[layerID] = nodes[i];

			/**
	        * Store the child/parent relationship
	        */
			this.childParents[layerID] = parentLayerID;
	
			/**
	        * Gif modifier
	        */
			if (i == 0 && parentLayerID == null) {
				modifier = nodes.length > 1 ? "top" : 'single';
			} else if(i == (nodes.length-1)) {
				modifier = "bottom";
			} else {
				modifier = "";
			}
	
			/**
	        * Single root branch is always expanded
	        */
			if (!this.doesMenu() || (parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages))) {
				expanded = true;
	
			} else if (nodes[i].expanded) {
				expanded = true;
	
			} else {
				expanded = false;
			}
	
			/**
	        * Make sure visibility is correct based on parent status
	        */
			visibility =  this.checkParentVisibility(layerID) ? visibility : 'none';

			/**
	        * Setup branch status and build an indexed array
			* of branch layer ids
	        */
			if (nodes[i].n.length > 0) {
				this.branchStatus[layerID] = expanded;
				this.branches[this.branches.length] = layerID;
			}
	
			/**
	        * Setup toggle relationship
	        */
			if (!this.layerRelations[parentLayerID]) {
				this.layerRelations[parentLayerID] = new Array();
			}
			this.layerRelations[parentLayerID][this.layerRelations[parentLayerID].length] = layerID;
	
			/**
	        * Branch images
	        */
			var gifname  = nodes[i].n.length && this.doesMenu() && nodes[i].isDynamic ? (expanded ? 'minus' : 'plus') : 'branch';
			var iconName = expanded && nodes[i].expandedIcon ? nodes[i].expandedIcon : nodes[i].icon;
			var iconimg  = nodes[i].icon ? this.stringFormat('<img src="{0}/{1}" align="top" id="icon_{2}">', this.iconpath, iconName, layerID) : '';
			
			/**
			* Add event handlers
			*/
			var eventHandlers = "";
			for (j in nodes[i].events) {
				eventHandlers += this.stringFormat('{0}="{1}" ', j, nodes[i].events[j]);
			}

			/**
	        * Build the html to write to the document
			* IMPORTANT:
			* document.write()ing the string: '<div style="display:...' will screw up nn4.x
	        */
			var layerTag  = this.doesMenu() ? this.stringFormat('<div id="{0}" style="display: {1}" class="{2}">', layerID, visibility, (nodes[i].cssClass ? nodes[i].cssClass : this.defaultClass)) : this.stringFormat('<div class="{0}">', nodes[i].cssClass ? nodes[i].cssClass : this.defaultClass);
			var onMDown   = this.doesMenu() && nodes[i].n.length  && nodes[i].isDynamic ? this.stringFormat('onmousedown="{0}.toggleBranch(\'{1}\', true)" style="cursor: pointer; cursor: hand"', this.myname, layerID) : '';
			var imgTag    = this.stringFormat('<img src="{0}/{1}{2}.gif" align="top" border="0" name="img_{3}" {4}>', this.iconpath, gifname, modifier, layerID, onMDown);
			var linkTarget= nodes[i].linkTarget ? nodes[i].linkTarget : this.linkTarget;
			var linkStart = nodes[i].link ? this.stringFormat('<a href="{0}" target="{1}">', nodes[i].link, linkTarget) : '';

			var linkEnd   = nodes[i].link ? '</a>' : '';

			this.output += this.stringFormat('{0}<nobr>{1}{2}{3}{4}<span {5}>{6}</span>{7}</nobr><br></div>',
			                  layerTag,
							  prepend,
			                  parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages) ? '' : imgTag,
							  iconimg,
							  linkStart,
							  eventHandlers,
							  nodes[i].title,
							  linkEnd);

			/**
	        * Traverse sub nodes ?
	        */
			if (nodes[i].n.length) {
				/**
	            * Determine what to prepend. If there is only one root
				* node then the prepend to pass to children is nothing.
				* Otherwise it depends on where we are in the tree.
	            */
				if (parentLayerID == null && (nodes.length == 1 || this.noTopLevelImages)) {
					var newPrepend = '';
	
				} else if (i < (nodes.length - 1)) {
					var newPrepend = prepend + this.stringFormat('<img src="{0}/line.gif" align="top">', this.iconpath);
	
				} else {
					var newPrepend = prepend + this.stringFormat('<img src="{0}/linebottom.gif" align="top">', this.iconpath);
				}

				this.drawMenu(nodes[i].n,
				              arrayCopy(level),
				              newPrepend,
				              nodes[i].expanded,
				              expanded ? 'inline' : 'none',
				              layerID);
			}
		}
	}

/**
* Writes the output generated by drawMenu() to the page
*/
	TreeMenu.prototype.writeOutput = function (customdiv)
	{
		if (customdiv != "")
		{
			customDivObj = browserObject(customdiv);
			if (customDivObj)
			{
				customDivObj.innerHTML = this.output;
			}
		} else {
			document.write(this.output);
		}
	}

/**
* Expand all Nodes
*/
	TreeMenu.prototype.expandAllNodes = function ()
	{
		var nodes = this.n;
		var level = new Array();

		var currentlevel  = level.length;
		var parentLayerID = null;
		var visibility = 'inline';

		for (var i=0; i<nodes.length; i++) {
			level[currentlevel] = i+1;
			layerID = this.myname + '_' + 'node_' + this.implode('_', level);

			if (this.layerRelations[layerID]) {
				this.toggleBranch(layerID, true);
			}
		}

		return true;
	}


/**
* Toggles a branches visible status. Called from resetBranches()
* and also when a +/- graphic is clicked.
*/
	TreeMenu.prototype.toggleBranch = function (layerID, updateStatus) // OPTIONAL ARGS: fireEvents = true
	{
		var currentDisplay = this.getLayer(layerID).style.display;
		var newDisplay     = (this.branchStatus[layerID] && currentDisplay == 'inline') ? 'none' : 'inline';
		var fireEvents     = arguments[2] != null ? arguments[2] : true;

		for (var i=0; i<this.layerRelations[layerID].length; i++) {

			if (this.branchStatus[this.layerRelations[layerID][i]]) {
				this.toggleBranch(this.layerRelations[layerID][i], false);
			}
	
			this.getLayer(this.layerRelations[layerID][i]).style.display = newDisplay;
		}
	
		if (updateStatus) {
			this.branchStatus[layerID] = !this.branchStatus[layerID];
	
			/**
	        * Persistence
	        */
			if (this.doesPersistence() && !arguments[2] && this.usePersistence) {
				this.setExpandedStatusForCookie(layerID, this.branchStatus[layerID]);
			}

			/**
			* Fire custom events
			*/
			if (fireEvents) {
				nodeObject = this.nodeRefs[layerID];
	
				if (nodeObject.ontoggle != null) {
					eval(nodeObject.ontoggle);
				}
				
				if (newDisplay == 'none' && nodeObject.oncollapse != null) {
					eval(nodeObject.oncollapse);
				} else if (newDisplay == 'inline' && nodeObject.onexpand != null){
					eval(nodeObject.onexpand);
				}
			}

			// Swap image
			this.swapImage(layerID);
		}

		// Swap icon
		this.swapIcon(layerID);
	}

/**
* Swaps the plus/minus branch images
*/
	TreeMenu.prototype.swapImage = function (layerID)
	{
		var imgSrc = document.images['img_' + layerID].src;
	
		var re = /^(.*)(plus|minus)(bottom|top|single)?.gif$/
		if (matches = imgSrc.match(re)) {
	
			document.images['img_' + layerID].src = this.stringFormat('{0}{1}{2}{3}',
			                                                matches[1],
															matches[2] == 'plus' ? 'minus' : 'plus',
															matches[3] ? matches[3] : '',
															'.gif');
		}
	}

/**
* Swaps the icon for the expanded icon if one
* has been supplied.
*/
	TreeMenu.prototype.swapIcon = function (layerID)
	{
		if (document.images['icon_' + layerID]) {
			var imgSrc = document.images['icon_' + layerID].src;
	
			if (this.nodeRefs[layerID].icon && this.nodeRefs[layerID].expandedIcon) {
				var newSrc = (imgSrc.indexOf(this.nodeRefs[layerID].expandedIcon) == -1 ? this.nodeRefs[layerID].expandedIcon : this.nodeRefs[layerID].icon);
	
				document.images['icon_' + layerID].src = this.iconpath + '/' + newSrc;
			}
		}
	}

/**
* Can the browser handle the dynamic menu?
*/
	TreeMenu.prototype.doesMenu = function ()
	{
		return (is_ie4up || is_nav6up || is_gecko || is_opera7);
	}

/**
* Can the browser handle save the branch status
*/
	TreeMenu.prototype.doesPersistence = function ()
	{
		return (is_ie4up || is_gecko || is_nav6up || is_opera7);
	}

/**
* Returns the appropriate layer accessor
*/
	TreeMenu.prototype.getLayer = function (layerID)
	{
		if (is_ie4) {
			return document.all(layerID);
	
		} else if (document.getElementById(layerID)) {
			return document.getElementById(layerID);
	
		} else if (document.all(layerID)) {
			return document.all(layerID);
		}
	}

/**
* Save the status of the layer
*/
	TreeMenu.prototype.setExpandedStatusForCookie = function (layerID, expanded)
	{
		this.cookieStatuses[layerID] = expanded;
		this.saveCookie();
	}

/**
* Load the status of the layer
*/
	TreeMenu.prototype.getExpandedStatusFromCookie = function (layerID)
	{
		if (this.cookieStatuses[layerID]) {
			return this.cookieStatuses[layerID];
		}

		return false;
	}

/**
* Saves the cookie that holds which branches are expanded.
* Only saves the details of the branches which are expanded.
*/
	TreeMenu.prototype.saveCookie = function ()
	{
		var cookieString = new Array();

		for (var i in this.cookieStatuses) {
			if (this.cookieStatuses[i] == true) {
				cookieString[cookieString.length] = i;
			}
		}
		
		// ======= PERMANENT COOKIE PATCH [VARUN] =======
		var expire = new Date();
		expire.setTime(expire.getTime() + 365*24*60*60*1000);

		document.cookie = 'TreeMenuBranchStatus=' + cookieString.join(':')+"; expires="+expire.toUTCString();
	}

/**
* Reads cookie parses it for status info and
* stores that info in the class member.
*/
	TreeMenu.prototype.loadCookie = function ()
	{
		var cookie = document.cookie.split('; ');

		for (var i=0; i < cookie.length; i++) {
			var crumb = cookie[i].split('=');
			if ('TreeMenuBranchStatus' == crumb[0] && crumb[1]) {
				var expandedBranches = crumb[1].split(':');
				for (var j=0; j<expandedBranches.length; j++) {
					this.cookieStatuses[expandedBranches[j]] = true;
				}
			}
		}
	}

/**
* Reset branch status
*/
	TreeMenu.prototype.resetBranches = function ()
	{
		if (!this.doesPersistence()) {
			return false;
		}
		
		this.loadCookie();

		for (var i=0; i<this.branches.length; i++) {
			var status = this.getExpandedStatusFromCookie(this.branches[i]);
			// Only update if it's supposed to be expanded and it's not already
			if (status == true && this.branchStatus[this.branches[i]] != true) {
				if (this.checkParentVisibility(this.branches[i])) {
					this.toggleBranch(this.branches[i], true, false);
				} else {
					this.branchStatus[this.branches[i]] = true;
					this.swapImage(this.branches[i]);
				}
			}
		}
	}

/**
* Checks whether a branch should be open
* or not based on its parents' status
*/
	TreeMenu.prototype.checkParentVisibility = function (layerID)
	{
		if (this.in_array(this.childParents[layerID], this.branches)
		    && this.branchStatus[this.childParents[layerID]]
			&& this.checkParentVisibility(this.childParents[layerID]) ) {
			
			return true;
	
		} else if (this.childParents[layerID] == null) {
			return true;
		}
		
		return false;
	}

/**
* New C# style string formatter
*/
	TreeMenu.prototype.stringFormat = function (strInput)
	{
		var idx = 0;
	
		for (var i=1; i<arguments.length; i++) {
			while ((idx = strInput.indexOf('{' + (i - 1) + '}', idx)) != -1) {
				strInput = strInput.substring(0, idx) + arguments[i] + strInput.substr(idx + 3);
			}
		}
		
		return strInput;
	}

/**
* Also much adored, the PHP implode() function
*/
	TreeMenu.prototype.implode = function (seperator, input)
	{
		var output = '';
	
		for (var i=0; i<input.length; i++) {
			if (i == 0) {
				output += input[i];
			} else {
				output += seperator + input[i];
			}
		}
		
		return output;
	}

/**
* Aah, all the old favourites are coming out...
*/
	TreeMenu.prototype.in_array = function (item, arr)
	{
		for (var i=0; i<arr.length; i++) {
			if (arr[i] == item) {
				return true;
			}
		}
	
		return false;
	}

/**
* TreeNode Class
*/
	function TreeNode(title, icon, link, expanded, isDynamic, cssClass, linkTarget, expandedIcon)
	{
		this.title        = title;
		this.icon         = icon;
		this.expandedIcon = expandedIcon;
		this.link         = link;
		this.expanded     = expanded;
		this.isDynamic    = isDynamic;
		this.cssClass     = cssClass;
		this.linkTarget   = linkTarget;
		this.n            = new Array();
		this.events       = new Array();
		this.handlers     = null;
		this.oncollapse   = null;
		this.onexpand     = null;
		this.ontoggle     = null;
	}

/**
* Adds a node to an already existing node
*/
	TreeNode.prototype.addItem = function (newNode)
	{
		newIndex = this.n.length;
		this.n[newIndex] = newNode;
		
		return this.n[newIndex];
	}

/**
* Sets an event for this particular node
*/
	TreeNode.prototype.setEvent = function (eventName, eventHandler)
	{
		switch (eventName.toLowerCase()) {
			case 'onexpand':
				this.onexpand = eventHandler;
				break;

			case 'oncollapse':
				this.oncollapse = eventHandler;
				break;

			case 'ontoggle':
				this.ontoggle = eventHandler;
				break;

			default:
				this.events[eventName] = eventHandler;
		}
	}

/**
* That's the end of the tree classes. What follows is
* the browser detection code.
*/
	

//<!--
// Ultimate client-side JavaScript client sniff. Version 3.03
// (C) Netscape Communications 1999-2001.  Permission granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Revised 20 Dec 00 to add is_gecko and change is_nav5up to is_nav6up
//                      also added support for IE5.5 Opera4&5 HotJava3 AOLTV
// Revised 22 Feb 01 to correct Javascript Detection for IE 5.x, Opera 4,
//                      correct Opera 5 detection
//                      add support for winME and win2k
//                      synch with browser-type-oo.js
// Revised 26 Mar 01 to correct Opera detection
// Revised 02 Oct 01 to add IE6 detection

// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates "is_" variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera, is_hotjava, is_webtv, is_TVNavigator, is_AOLTV
// (2) browser version number:
//     is_major (integer indicating major version number: 2, 3, 4 ...)
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04 ...)
// (3) browser vendor AND major version number
//     is_nav2, is_nav3, is_nav4, is_nav4up, is_nav6, is_nav6up, is_gecko, is_ie3,
//     is_ie4, is_ie4up, is_ie5, is_ie5up, is_ie5_5, is_ie5_5up, is_ie6, is_ie6up, is_hotjava3, is_hotjava3up,
//     is_opera2, is_opera3, is_opera4, is_opera5, is_opera5up
// (4) JavaScript version number:
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2 ...)
// (5) OS platform and version:
//     is_win, is_win16, is_win32, is_win31, is_win95, is_winnt, is_win98, is_winme, is_win2k
//     is_os2
//     is_mac, is_mac68k, is_macppc
//     is_unix
//     is_sun, is_sun4, is_sun5, is_suni86
//     is_irix, is_irix5, is_irix6
//     is_hpux, is_hpux9, is_hpux10
//     is_aix, is_aix1, is_aix2, is_aix3, is_aix4
//     is_linux, is_sco, is_unixware, is_mpras, is_reliant
//     is_dec, is_sinix, is_freebsd, is_bsd
//     is_vms
//
// See http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html and
// http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html
// for detailed lists of userAgent strings.
//
// Note: you don't want your Nav4 or IE4 code to "turn off" or
// stop working when new versions of browsers are released, so
// in conditional code forks, use is_ie5up ("IE 5.0 or greater")
// is_opera5up ("Opera 5.0 or greater") instead of is_ie5 or is_opera5
// to check version in code which you want to work on future
// versions.

/**
* Severly curtailed all this as only certain elements
* are required by TreeMenu, specifically:
*  o is_ie4up
*  o is_nav6up
*  o is_gecko
*/

    // convert all characters to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase();

    // *** BROWSER VERSION ***
    // Note: On IE5, these return 4, so use is_ie5up to detect IE5.
    var is_major = parseInt(navigator.appVersion);
    var is_minor = parseFloat(navigator.appVersion);

    // Note: Opera and WebTV spoof Navigator.  We do strict client detection.
    // If you want to allow spoofing, take out the tests for opera and webtv.
    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
    var is_nav6up = (is_nav && (is_major >= 5));
    var is_gecko = (agt.indexOf('gecko') != -1);


    var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
    var is_ie4up  = (is_ie && (is_major >= 4));
	
	var is_opera  = (agt.indexOf("opera") != -1);
	var is_opera7 = is_opera && (agt.indexOf("opera 7") != -1);

	// Patch from Harald Fielker
    if (agt.indexOf('konqueror') != -1) {
        var is_nav    = false;
        var is_nav6up = false;
        var is_gecko  = false;
        var is_ie     = true;
        var is_ie4    = true;
        var is_ie4up  = true;
    }
//--> end hide JavaScript


/**
* ###############################################
* MAIN CACHE FUNCTIONS - ADDED IN 3.00.26
* ###############################################
*/

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>")
  }
}

function buildMainMenus()
{
	var sendemail = new Array();
	var phoneticket = new Array();
	var itemstyle;

	if (swticketdepartments.length != 0)
	{
	sendemail.push({"itemoff":[21,0]});
	phoneticket.push({"itemoff":[21,0]});

	for (var ii=0; ii<swticketdepartments.length; ii++)
	{
		if (swticketdepartments[ii] == null)
		{
			continue;
		}
		if (swticketdepartments[ii][2] == 1)
		{
			itemstyle = SUBPOPUPTOP;
		} else {
			itemstyle = SUBPOPUP;
		}

		if (swticketdepartments[ii][0].length > 16)
		{
			swticketdepartments[ii][0] = swticketdepartments[ii][0].substr(0,16)+"...";
		}

		sendemail.push({code:swticketdepartments[ii][0], "format":{"image":themepath+"menu_folderblue.gif", "oimage":themepath+"menu_folderblue.gif", "style":itemstyle, "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=newticket&type=generic&departmentid="+swticketdepartments[ii][1]});
		phoneticket.push({code:swticketdepartments[ii][0], "format":{"image":themepath+"menu_folderblue.gif", "oimage":themepath+"menu_folderblue.gif", "style":itemstyle, "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=newticket&type=phone&departmentid="+swticketdepartments[ii][1]});
	}

	MENU_TICKETNEW =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[22,180], "itemoff":[21,0], "leveloff":[10,59], "delay":1000, "style":VSTYLE, "imgsize":[20,17], dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:"Send Email", "format":{"itemoff":[0,0], "leveloff":[5,179], "arrow":themepath+"icon_rightarrowblue.gif", "oarrow":themepath+"icon_rightarrowblue.gif", "arrsize":[10,10], "image":themepath+"menu_ticketnormal.gif", "oimage":themepath+"menu_ticketnormal.gif", "imgsize":[20,22]}, url:"javascript:void(0);",
					sub: sendemail
	},
	{code:"Phone Ticket", url:"javascript:void(0);", "format":{"itemoff":[21,0], "leveloff":[5,179], "arrow":themepath+"icon_rightarrowblue.gif", "oarrow":themepath+"icon_rightarrowblue.gif", "arrsize":[10,10], "image":themepath+"menu_ticketphone.gif", "oimage":themepath+"menu_ticketphone.gif", "imgsize":[20,22]},
					sub: phoneticket
	}
];
	}

CLoadNotify();

if (kbmenuloaded)
{
	var kbmenu = new COOLjsMenuPRO("kbcachemenu", MENU_JSCACHE_KNOWLEDGEBASE);
	kbmenu.initTop();
}
if (prmenuloaded)
{
	var prmenu = new COOLjsMenuPRO("prcachemenu", MENU_JSCACHE_PREDEFINED);
	prmenu.initTop();
}
if (dlmenuloaded)
{
	var dlmenu = new COOLjsMenuPRO("dlcachemenu", MENU_JSCACHE_DOWNLOADS);
	dlmenu.initTop();
}

	if (swmenulist.length != 0)
	{
		for (var ii=0; ii<swmenulist.length; ii++)
		{
			if (swmenulist[ii] == null)
			{
				continue;
			}

			eval('var menu'+ ii +' = new COOLjsMenuPRO("'+ swmenulist[ii][0] +'", '+ swmenulist[ii][1] +'); menu'+ ii +'.initTop();');
		}
	}
}

function buildViewTicketMenus(swphrases, swticketid)
{

MENU_FORWARDQUOTE =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[23,180], "itemoff":[21,0], "leveloff":[10,59], "delay":1000, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:"Quote Client Posts", "format":{"itemoff":[0,0], "image":themepath+"menu_quoteclient.gif", "oimage":themepath+"menu_quoteclient.gif", "imgsize":[20,22], "style":VSTYLEBORDER}, url:"javascript:fetchData(\'forwardquote\', \'"+swticketid+"\');"},
	{code:"Quote All Posts", url:"javascript:fetchData(\'forwardquoteall\', \'"+swticketid+"\');", "format":{"image":themepath+"menu_quoteall.gif", "oimage":themepath+"menu_quoteall.gif", "imgsize":[20,22]}}
];

MENU_FLAGTICKET =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[22,180], "itemoff":[20,0], "leveloff":[10,59], "delay":1500, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:swphrases['purpleflag'], "format":{"style":VSTYLEBORDER, "itemoff":[0,0], "image":themepath+"menu_purpleflag.gif", "oimage":themepath+"menu_purpleflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=purple"},
	{code:swphrases['redflag'], "format":{"image":themepath+"menu_redflag.gif", "oimage":themepath+"menu_redflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=red"},
	{code:swphrases['orangeflag'], "format":{"image":themepath+"menu_orangeflag.gif", "oimage":themepath+"menu_orangeflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=orange"},
	{code:swphrases['yellowflag'], "format":{"image":themepath+"menu_yellowflag.gif", "oimage":themepath+"menu_yellowflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=yellow"},
	{code:swphrases['blueflag'], "format":{"image":themepath+"menu_blueflag.gif", "oimage":themepath+"menu_blueflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=blue"},
	{code:swphrases['greenflag'], "format":{"image":themepath+"menu_greenflag.gif", "oimage":themepath+"menu_greenflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=green"},
	{code:swphrases['clearflag'], "format":{"image":themepath+"menu_clearflag.gif", "oimage":themepath+"menu_clearflag.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=flagticket&flag=clear"}
];
MENU_EXPORTTICKET =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[22,180], "itemoff":[20,0], "leveloff":[10,59], "delay":1500, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:swphrases['exportpdf'], "format":{"style":VSTYLEBORDER, "itemoff":[0,0], "image":themepath+"menu_pdf.gif", "oimage":themepath+"menu_pdf.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=export&type=pdf"},
	{code:swphrases['exportxml'], "format":{"image":themepath+"menu_exportxml.gif", "oimage":themepath+"menu_exportxml.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=export&type=xml"},
];
MENU_TICKETOPTIONS =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[22,180], "itemoff":[20,0], "leveloff":[10,59], "delay":1500, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:swphrases['printticket'], "format":{"style":VSTYLEBORDER, "itemoff":[0,0], "image":themepath+"menu_print.gif", "oimage":themepath+"menu_print.gif", "imgsize":[20,22]}, url:"javascript:popupDataWindow('index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=options&type=print');"},
	{code:swphrases['mergeticket'], "format":{"image":themepath+"menu_mergeticket.gif", "oimage":themepath+"menu_mergeticket.gif", "imgsize":[20,22]}, url:"javascript:switchGridTab(\'ttedit\', \'tickets\');fetchData(\'edit\', \'"+swticketid+"\');"},
	{code:swphrases['ban'], "format":{"image":themepath+"menu_ban.gif", "oimage":themepath+"menu_ban.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=options&type=ban"},
	{code:swphrases['bandelete'], "format":{"image":themepath+"menu_bandelete.gif", "oimage":themepath+"menu_bandelete.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=options&type=bandelete"},
	{code:swphrases["dodelete"], "format":{"image":themepath+"menu_delete.gif", "oimage":themepath+"menu_delete.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=options&type=delete"},
];
MENU_MARKDUE =
[
	{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[22,180], "itemoff":[20,0], "leveloff":[10,59], "delay":1500, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
	{code:swphrases['markasdue'], "format":{"style":VSTYLEBORDER, "itemoff":[0,0], "image":themepath+"menu_markdue.gif", "oimage":themepath+"menu_markdue.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=markdue&type=due"},
	{code:swphrases['markduetf'], "format":{"image":themepath+"menu_markdue24.gif", "oimage":themepath+"menu_markdue24.gif", "imgsize":[20,22]}, url:"index.php?_m=tickets&_a=ticketactions&ticketid="+swticketid+"&action=markdue&type=due24"}
];

var tflagmenu = new COOLjsMenuPRO("tflagmenu", MENU_FLAGTICKET);
tflagmenu.initTop();
tflagmenu.init();
var texportticket = new COOLjsMenuPRO("texportticket", MENU_EXPORTTICKET);
texportticket.initTop();
texportticket.init();
var tticketoptions = new COOLjsMenuPRO("tticketoptions", MENU_TICKETOPTIONS);
tticketoptions.initTop();
tticketoptions.init();
var tmarkdue = new COOLjsMenuPRO("tmarkdue", MENU_MARKDUE);
tmarkdue.initTop();
tmarkdue.init();
var fwquotemenu = new COOLjsMenuPRO("fwquotemenu", MENU_FORWARDQUOTE);
fwquotemenu.initTop();
fwquotemenu.init();
}

function buildTopTabMenu()
{
	document.write('<table width="100%"  border="0" cellspacing="0" cellpadding="0"><tr>');
	for (var ii=0; ii<swtabmenu.length; ii++)
	{
		if (swtabmenu[ii] == null)
		{
			continue;
		}

		document.write('<td '+swtabmenutype+'="javascript:switchTab('+swtabmenu[ii][0]+', '+swtabmenu[ii][2]+');"><table width="'+swtabmenu[ii][1]+'"  border="0" cellspacing="0" cellpadding="0"><tr height="21">');
		if (swtabmenu[ii][0] != 1)
		{
			document.write('<td bgcolor="#414142" width="1"><img src="'+themepath+'space.gif" width="1" height="1"></td><td width="1" class="'+swmenubg1+'"><img src="'+themepath+'space.gif" width="1" height="21"></td>');
		}

		var tabmenbg = swmenubg2;
		if (swtabselmenu == swtabmenu[ii][0])
		{
			tabmenbg = "menusection"+swtabmenu[ii][2];
		}

		document.write('<td id="tb_menusection'+swtabmenu[ii][0]+'" align="center" class="'+ tabmenbg +'">'+ swtabmenu[ii][3] +'</td></tr></table></td>');
	}

	document.write('<td><table width="100%"  border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#414142" width="1"><img src="'+themepath+'space.gif" width="1" height="1"></td><td width="1" class="menudefbg"><img src="'+themepath+'space.gif" width="1" height="21"></td><td class="'+swmenubg2+'">&nbsp;</td></tr></table></td><td width="100%" class="'+swmenubg2+'"><table width="100%"  border="0" cellspacing="0" cellpadding="0"><tr><td><img src="'+themepath+'space.gif" width="1" height="21"></td></tr></table></td></tr>');

	document.write('<tr id="tb_menuline" class="menuline'+swtabselmenuclass+'" height="1"><td colspan="'+swtabmenucolspan+'"><img src="'+themepath+'space.gif" width="1" height="5"></td></tr><tr id="tb_menulinks" align="left" class="menulinks'+swtabselmenuclass+'" valign="middle"><td colspan="'+swtabmenucolspan+'"> <table width="100%"  border="0" cellspacing="0" cellpadding="0" height="5" height="100%"><tr valign="middle"><td width="94%" valign="middle"><div id="linksdiv" class="menulinks'+swtabselmenuclass+'" style="padding-left:5px;padding-top:5px;padding-bottom:5px;width:100%;height:13px;">');

	document.write(menulinks[swtabselmenu]);

	document.write('</div></td><td width="6%"><img src="'+themepath+'space.gif" width="1"></td></tr></table></td></tr></table>');
}

function buildTicketViewMenus(newlabeltext, tdeletetext, tvdepid, tvtsid, tlabelid)
{
	if (tlabelid != 0)
	{
		var MENU_TICKETLABELS =
		[
			{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[50,180], "itemoff":[50,0], "leveloff":[10,59], "delay":1000, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
			{code:"<table width='100%'  border='0' cellspacing='0' cellpadding='2'><tr><td width='1'><img src='"+themepath+"doublearrows.gif' border='0' /></td><td width='100%'><span class='smalltext'>"+newlabeltext+"</span></td></tr><tr><td colspan='2'><form name='tlabform' action='index.php' method='POST'><input type='text' name='title' class='swifttext' id='ticketlabel' style='width:160px;' /><input type='hidden' name='_m' value='tickets' /><input type='hidden' name='_a' value='ticketactions' /><input type='hidden' name='action' value='newlabel' /><input type='hidden' name='departmentid' value='"+tvdepid+"' /><input type='hidden' name='ticketstatusid' value='"+tvtsid+"' /></form></td></tr></table>", hasControls:true, "format":{"size":[50,180], "itemoff":[0,0],"style":VSTYLEBORDER}},
			{code:tdeletetext, "format":{"image":themepath+"menu_delete.gif", "oimage":themepath+"menu_delete.gif", "imgsize":[20,22],"size":[22,180]}, url:"index.php?_m=tickets&_a=manage&do=dellabel&ticketlabelid="+tlabelid},
		];
	} else {
		var MENU_TICKETLABELS =
		[
			{"popup":1, "popupoff":[0,0], "pos":[0,0], "zindex":50, "size":[50,180], "itemoff":[50,0], "leveloff":[10,59], "delay":1000, "style":VSTYLE, dynamic: true, https_fix_blank_doc:themepath+'blank.html'},
			{code:"<table width='100%'  border='0' cellspacing='0' cellpadding='2'><tr><td width='1'><img src='"+themepath+"doublearrows.gif' border='0' /></td><td width='100%'><span class='smalltext'>"+newlabeltext+"</span></td></tr><tr><td colspan='2'><form name='tlabform' action='index.php' method='POST'><input type='text' name='title' class='swifttext' id='ticketlabel' style='width:160px;' /><input type='hidden' name='_m' value='tickets' /><input type='hidden' name='_a' value='ticketactions' /><input type='hidden' name='action' value='newlabel' /><input type='hidden' name='departmentid' value='"+tvdepid+"' /><input type='hidden' name='ticketstatusid' value='"+tvtsid+"' /></form></td></tr></table>", hasControls:true, "format":{"size":[50,180], "itemoff":[0,0],"style":VSTYLEBORDER}}
		];
	}
	tlabelmenu = new COOLjsMenuPRO("tlabelmenu", MENU_TICKETLABELS);
	tlabelmenuloaded = true;
	tlabelmenu.initTop();
	tlabelmenu.init();
}


/**
* ###############################################
* AUTO COMPLETE FOR STAFF CP IRS - By Zichun
* This code has been modified to use AJAX
* ###############################################
*/

/* Event Functions */

// Add an event to the obj given
// event_name refers to the event trigger, without the "on", like click or mouseover
// func_name refers to the function callback when event is triggered
function addEvent(obj,event_name,func_name){
	if (obj.attachEvent){
		obj.attachEvent("on"+event_name, func_name);
	}else if(obj.addEventListener){
		obj.addEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = func_name;
	}
}

// Removes an event from the object
function removeEvent(obj,event_name,func_name){
	if (obj.detachEvent){
		obj.detachEvent("on"+event_name,func_name);
	}else if(obj.removeEventListener){
		obj.removeEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = null;
	}
}

// Stop an event from bubbling up the event DOM
function stopEvent(evt){
	evt || window.event;
	if (evt.stopPropagation){
		evt.stopPropagation();
		evt.preventDefault();
	}else if(typeof evt.cancelBubble != "undefined"){
		evt.cancelBubble = true;
		evt.returnValue = false;
	}
	return false;
}

// Get the obj that starts the event
function getElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.currentTarget;
	}
}
// Get the obj that triggers off the event
function getTargetElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.target;
	}
}
// For IE only, stops the obj from being selected
function stopSelect(obj){
	if (typeof obj.onselectstart != 'undefined'){
		addEvent(obj,"selectstart",function(){ return false;});
	}
}

/*    Caret Functions     */

// Get the end position of the caret in the object. Note that the obj needs to be in focus first
function getCaretEnd(obj){
	if(typeof obj.selectionEnd != "undefined"){
		return obj.selectionEnd;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToEnd",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}
// Get the start position of the caret in the object
function getCaretStart(obj){
	if(typeof obj.selectionStart != "undefined"){
		return obj.selectionStart;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToStart",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}
// sets the caret position to l in the object
function setCaret(obj,l){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(l,l);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',l);
		m.collapse();
		m.select();
	}
}
// sets the caret selection from s to e in the object
function setSelection(obj,s,e){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(s,e);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',s);
		m.moveEnd('character',e);
		m.select();
	}
}

/*    Escape function   */
String.prototype.addslashes = function(){
	return this.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');
}
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};
/* --- Escape --- */

/* Offset position from top of the screen */
function curTop(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return toreturn;
}
function curLeft(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return toreturn;
}
/* ------ End of Offset function ------- */

/* Types Function */

// is a given input a number?
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

/* Object Functions */

function replaceHTML(obj,text){
	while(el = obj.childNodes[0]){
		obj.removeChild(el);
	};
	obj.appendChild(document.createTextNode(text));
}

/**
* ###############################################
* IRS AUTO COMPLETE OBJECT
* ###############################################
*/
function IRSAutoComplete(obj)
{
	this.textObject = obj;
	this.isThreadRunning = false;
	this.cachedContents;
	this.itemMap = new Array();
	this.selectedItem = 0;
	this.itemRange = 0;
	this.isIRSDisplayed = false;

	var keyHandled = false;
	var thisObject = this;

	addEvent(this.textObject, "focus", _startIRS);

	function _startIRS()
	{
		addEvent(document, "keydown", _keyDown);
		addEvent(thisObject.textObject, "blur", _clear);
		addEvent(document, "keypress", _keyPress);

		if (thisObject.isThreadRunning == false)
		{
			setTimeout('window.$IRS.lookupThread()',2000);
		}
	}

	function _keyDown(evt)
	{
		if (!evt) evt = event;
		var currentKeyCode = evt.keyCode;

		keyHandled = false;

		switch (currentKeyCode){
			case 38:
				// Up Arrow
				if (!window.$IRS.isIRSDisplayed)
				{
					return true;
				}

				window.$IRS.moveSelectionUp();
				keyHandled = true;

				return true;
				break;
			case 40: case 9:
				// Down Arrow & Tab
				if (!window.$IRS.isIRSDisplayed)
				{
					return true;
				}

				window.$IRS.moveSelectionDown();
				keyHandled = true;

				return true;
				break;
			case 13:
				// Enter
				window.$IRS.clickHandler();
				keyHandled = true;

				return true;
				break;

			case 27:
				window.$IRS.cleanup();

				return true;
				break;
			default:
				break;
		}
	}

	function _clear(evt)
	{
		if (!evt) evt = event;
		removeEvent(document, "keydown", _keyDown);
		removeEvent(thisObject.textObject, "blur", _clear);
		removeEvent(document, "keypress", _keyPress);

		window.$IRS.cleanup();
	}

	function _keyPress(evt)
	{
		if (!evt) evt = event;

		if (keyHandled) stopEvent(evt);
		return !keyHandled;
	}
}

IRSAutoComplete.prototype.lookupThread = function (x) {
	this.isThreadRunning = true;

	var currentValue = this.textObject.value;

	if (currentValue == "" && this.cachedContents != "")
	{
		window.$IRS.cleanup();
	} else if (currentValue != this.cachedContents && currentValue != "") {
		// Run IRS
		this.changeSearchBoxClass('staffcpirsloading');
		fetchData('kbirs', currentValue, '');
	}

	this.cachedContents = currentValue;
	setTimeout('window.$IRS.lookupThread()',2000);
}

IRSAutoComplete.prototype.render = function (rawdata) {
	var listMain = rawdata.split("\n");

		if (browserObject("coreIRSTable"))
		{
			document.body.removeChild(document.getElementById('coreIRSTable'));
		}

		this.selectedItem = 0;
		this.itemMap = new Array();
		this.itemRange = 0;

		this.changeSearchBoxClass('staffcpirs');
		a = document.createElement('div');
		a.style.position='absolute';
		a.style.top = eval(curTop(this.textObject) + this.textObject.offsetHeight - 1) + "px";
		a.style.left = curLeft(this.textObject) + "px";
		a.id = 'coreIRSTable';
		a.className = 'IRSCoreDiv';

		document.body.appendChild(a);

		this.isIRSDisplayed = true;

		if (rawdata == "0")
		{
			return;
		}

		var itemOffset = 1;
		for (var ii=0;ii<listMain.length;ii++){
			if (listMain[ii] == "" || !listMain[ii])
			{
				continue;
			}

			this.itemRange = itemOffset;

			var listItem = listMain[ii].split(";");
			var itemSubject = listItem[0];
			var itemID = listItem[1];
			var itemRelevance = listItem[2];

			row = document.createElement('div');
			row.className = 'IRSCoreItem';
			row.id = 'coreIRSItem'+itemOffset;
			row.innerHTML = '<div style="FLOAT: left" class="IRSCoreItemRel">'+itemSubject+'</div><div class="IRSCoreItemRel" style="FLOAT: right">'+itemRelevance+'%</div>';

			row.onmousedown = new Function('return window.$IRS.clickHandler("'+itemID+'");');
			row.onmouseover = new Function('return window.$IRS.hoverHandler("'+itemOffset+'");');

			a.appendChild(row);

			this.itemMap[itemOffset] = itemID;
			itemOffset++;
		}
}

IRSAutoComplete.prototype.cleanup = function (x) {
	if (browserObject("coreIRSTable"))
	{
		document.body.removeChild(document.getElementById('coreIRSTable'));
	}

	this.isIRSDisplayed = false;
}

IRSAutoComplete.prototype.moveSelectionUp = function (x) {
	if (this.selectedItem == 0 || (this.selectedItem-1) == 0)
	{
		return false;
	}

	var previousItem = browserObject("coreIRSItem"+this.selectedItem);
	if (previousItem)
	{
		previousItem.className = 'IRSCoreItem';
	}

	this.selectedItem--;
	var newItem = browserObject("coreIRSItem"+this.selectedItem);

	if (newItem)
	{
		newItem.className = 'IRSCoreItemHighlight';
	}
}

IRSAutoComplete.prototype.moveSelectionDown = function (customSelectedItem) {
	if ((this.selectedItem-1) >= this.itemRange && this.itemRange >= 1)
	{
		return false;
	}

	if (this.itemRange == 1)
	{
		this.selectedItem = 0;
	}

	var previousSelectedItem = this.selectedItem;

	var previousItem = browserObject("coreIRSItem"+this.selectedItem);

	if (customSelectedItem)
	{
		this.selectedItem = customSelectedItem;
	} else {
		this.selectedItem++;
	}
	var newItem = browserObject("coreIRSItem"+this.selectedItem);

	if (previousItem && newItem)
	{
		previousItem.className = 'IRSCoreItem';
	} else if (previousItem && !newItem) {
		this.selectedItem = previousSelectedItem;
		previousItem.className = 'IRSCoreItemHighlight';
	}

	if (newItem)
	{
		newItem.className = 'IRSCoreItemHighlight';
	}
}

IRSAutoComplete.prototype.hoverHandler = function (x) {
	this.moveSelectionDown(x);
}

IRSAutoComplete.prototype.clickHandler = function (x) {
	var kbarticleid;

	if (this.isIRSDisplayed == false)
	{
		this.changeSearchBoxClass('staffcpirsloading');
		fetchData('kbirs', this.textObject.value, '');

		return false;
	}

	if (!x)
	{
		kbarticleid = this.itemMap[this.selectedItem];
		if (!kbarticleid)
		{
			return false;
		}
	} else {
		kbarticleid = x;
	}

	if (isTicketPage == true)
	{
		switchGridTab('ttpostreply', 'tickets');
		document.replyform.replycontents.focus();
		autoInsertKB(kbarticleid);
	} else {
		popupDataWindow(swiftpath+"staff/index.php?_m=knowledgebase&_a=preview&kbarticleid="+kbarticleid);
	}
}

IRSAutoComplete.prototype.changeSearchBoxClass = function (newClass) {
	this.textObject.className = newClass;
}

function focusIRS()
{
	if (window.$IRS)
	{
		window.$IRS.textObject.focus();
	}
}