/*	EventCache Version 1.0
	Copyright 2005 Mark Wubben

	Provides a way for automagically removing events from nodes and thus preventing memory leakage.
	See <http://novemberborn.net/javascript/event-cache> for more information.
	
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/

/*	Implement array.push for browsers which don't support it natively.
	Please remove this if it's already in other code */
if(Array.prototype.push == null){
	Array.prototype.push = function(){
		for(var i = 0; i < arguments.length; i++){
			this[this.length] = arguments[i];
		};
		return this.length;
	};
};

/*	Event Cache uses an anonymous function to create a hidden scope chain.
	This is to prevent scoping issues. */
var EventCache = function(){
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				
				item[0][item[1]] = null;
			};
		}
	};
}();

function addEvent(obj, evType, fn, useCapture){
    var result;
	if (typeof(useCapture) == "undefined") useCapture = false;
    if (obj.addEventListener){
        obj.addEventListener(evType, fn, useCapture);
        result = true;
    } else if (obj.attachEvent){
        var r = obj.attachEvent("on"+evType, fn);
        result = r;
    } else {
        return false;
    }
    EventCache.add(obj, evType, fn, useCapture);
    return result;
}
addEvent(window, "unload", EventCache.flush);

function $(id) {
	return document.getElementById(id);	
}

function sendToBack(obj) {
	if (!obj) return;
	var ifrm = $("XMFrameOverlay");
	if (ifrm) ifrm.style.display = "none";
};

function bringToFront(obj,ht,wdt,lft,top) {
	if (!browserIE) return;
	var objPos = getObjectPosition(obj);
	var ifrm = $("XMFrameOverlay");
	if (!ifrm) {
		ifrm = document.createElement("IFRAME");
		ifrm.id="XMFrameOverlay";
		ifrm.setAttribute("scrolling","no");
		ifrm.setAttribute("frameborder","no");
		ifrm.src = "/blank.cfm"
		document.body.appendChild(ifrm);
	}
	ifrm.style.height = ((ht)?ht:obj.offsetHeight)+"px";
	ifrm.style.top = ((top)?top:objPos["y"])+"px";
	ifrm.style.left = ((lft)?lft:objPos["x"])+"px";		
	ifrm.style.width = ((wdt)?wdt:obj.offsetWidth)+"px";
	ifrm.style.display = "block";
	ifrm.style.zIndex = 10;
	obj.style.zIndex = 20;
	ifrm = null;
};

var overObj = new Object();
function showObj(e,el,pos,clickToClose) {
	var obj = $(el);
	var clickToClose = (typeof(clickToClose) != "undefined")?clickToClose:true;
	var docWidth = document.body.offsetWidth;
	if (obj) {
		if (typeof overObj[el] == "undefined") overObj[el] = false;
		var pos = (typeof(pos) != "undefined")?pos:"bottom";
		var eProp = getObjectProperties(e);
		obj.onmouseover = function(){overObj[el]=true;};
		obj.onmouseout = function(){overObj[el]=false;};
		obj.style.display = "block";
		obj.style.left  = Math.min(eProp["x"],(docWidth-obj.offsetWidth))+"px";
		obj.style.top = eProp["y"]+eProp["h"]+"px";
		if (pos == "top") obj.style.top = eProp["y"]-obj.offsetHeight+"px";
		else if (pos == "right") {
			obj.style.left  = Math.min(eProp["x"]+eProp["w"],(docWidth-obj.offsetWidth))+"px";
			obj.style.top = eProp["y"]+"px";
		}
		if (obj.offsetHeight > (document.body.offsetHeight-(eProp["y"]+eProp["h"]))) {
			obj.style.height = Math.min(200,document.body.offsetHeight-(eProp["y"]+eProp["h"]))+"px";
			obj.style.overflow = "auto";
		}
		bringToFront(obj);
		if (clickToClose) {
			document.onmouseup = function(e) {
				for (var m in overObj) {
					if (!overObj[m]) {
						this.onmouseup = null;
						hideObj(m); 
					}
				}
			}
		}
	}
}

function hideObj(el) {
	var obj = $(el);
	if (obj) obj.style.display = "none";
	sendToBack(obj);
}

function getObjectProperties(elObj) {
	var o = elObj;
	var elPos = getObjectPosition(o);
	var objArr = new Array();
	objArr["x"] = elPos["x"];
	objArr["y"] = elPos["y"];
	objArr["h"] = o.offsetHeight;
	objArr["w"] = o.offsetWidth;
	return objArr;
};

function getObjectPosition(elObj) {
	var objRealPos = Position.get(elObj);
	var posArr = new Array();
	posArr["x"] = objRealPos["left"];
	posArr["y"] = objRealPos["top"];
	return posArr;
};


var Position =(function(){function resolveObject(s){if(document.getElementById && document.getElementById(s)!=null){return document.getElementById(s);}else if(document.all && document.all[s]!=null){return document.all[s];}else if(document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x){for(var i=0;i<document.anchors.length;i++){if(document.anchors[i].name==s){return document.anchors[i]}}}}var pos ={};
pos.set = function(o,left,top){if(typeof(o)=="string"){o = resolveObject(o);}if(o==null || !o.style){return false;}o.style.position = "absolute";if(typeof(left)=="object"){var pos = left;left = pos.left;top = pos.top;}o.style.left = left + "px";o.style.top = top + "px";return true;};
pos.get = function(o){var fixBrowserQuirks = true;if(typeof(o)=="string"){o = resolveObject(o);}if(o==null){return null;}var left = 0;var top = 0;var width = 0;var height = 0;var parentNode = null;var offsetParent = null;offsetParent = o.offsetParent;var originalObject = o;var el = o;while(el.parentNode!=null){el = el.parentNode;if(el.offsetParent==null){}else{var considerScroll = true;if(fixBrowserQuirks && window.opera){if(el==originalObject.parentNode || el.nodeName=="TR"){considerScroll = false;}}if(considerScroll){if(el.scrollTop && el.scrollTop>0){top -= el.scrollTop;}if(el.scrollLeft && el.scrollLeft>0){left -= el.scrollLeft;}}}if(el == offsetParent){left += o.offsetLeft;if(el.clientLeft && el.nodeName!="TABLE"){left += el.clientLeft;}top += o.offsetTop;if(el.clientTop && el.nodeName!="TABLE"){top += el.clientTop;}o = el;if(o.offsetParent==null){if(o.offsetLeft){left += o.offsetLeft;}if(o.offsetTop){top += o.offsetTop;}}offsetParent = o.offsetParent;}}if(originalObject.offsetWidth){width = originalObject.offsetWidth;}if(originalObject.offsetHeight){height = originalObject.offsetHeight;}return{'left':left, 'top':top, 'width':width, 'height':height};};
pos.getCenter = function(o){var c = this.get(o);if(c==null){return null;}c.left = c.left +(c.width/2);c.top = c.top +(c.height/2);return c;};return pos;})();

/***********************************************
* Cool DHTML tooltip script II- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
//tooltip

//General Scripts
var ie = (navigator.userAgent.indexOf('MSIE') != -1);
var moz = !ie && document.getElementById != null && document.layers == null;
var browserIE = ie;
var browserMozilla = moz;
var browserSafari = (navigator.userAgent.indexOf('Safari') != -1);
var browserOpera = (navigator.userAgent.indexOf('Opera') != -1);

var windowLoaded = false;
var filtering = false; //Used when filtering on a list page - flag set so we don't fire the "ENTER" key event
var BreadCrumbs = null;//Track breadcrumb path