/*****************************************
***	get, set, and delete cookie functions
*****************************************/
function getCookie(name) {
	var start = document.cookie.indexOf(name + "=");
	var len = start + name.length + 1;
	if(( !start ) && (name != document.cookie.substring(0, name.length))) {
		return null;
	}
	if(start == -1) {return null;}
	var end = document.cookie.indexOf(";", len);
	if(end == -1) {end = document.cookie.length;}
	return unescape(document.cookie.substring( len, end ));
}

function setCookie(name,value,expires,path,domain,secure) {
	var today = new Date();
	today.setTime(today.getTime());
	if(expires) {
		expires = expires * 1000 * 60 * 60 * 24;
	} else {
		expires = 365 * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date(today.getTime() + (expires));
	document.cookie = name+"="+escape(value) +
		((expires) ? ";expires="+expires_date.toGMTString() : "") + //expires.toGMTString()
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "") +
		((secure) ? ";secure" : "");
}

function deleteCookie(name,path,domain) {
	if(getCookie(name)) {
		document.cookie = name + "=" +
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "") +
		";expires=Thu, 01-Jan-1970 00:00:01 GMT";
	}
}

/*****************************************
***	get all elements with specific class attribute
*****************************************/
function getElementsByClass(searchClass,node,tag) {
	var classElements = [];
	if ( node === null ) {node = document;}
	if ( tag === null ) {tag = '*';}
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/*****************************************
***	Update object's class attribute
*****************************************/
function updateClassName(obj,newclass,classtoreplace) {
	var modifiedclass = obj.className;
	if (classtoreplace !== "") {
		var classEStoreplace = classtoreplace.split(",");
		for(var i=0; i<classEStoreplace.length; i++) {
			if(modifiedclass.indexOf(classEStoreplace[i]) != -1) {
				modifiedclass = modifiedclass.replace(classEStoreplace[i],"");
			}
		}
	}
	if (newclass !== "") {
		var newclassES = newclass.split(",");
		for(var k=0; k<newclassES.length; k++) {
			if (modifiedclass.indexOf(newclassES[k]) == -1) {
				if (modifiedclass.length > 0) {
					modifiedclass = modifiedclass + " " + newclassES[k];
				} else {
					modifiedclass = newclassES[k];
				}
			}
		}
	}
	var modifiedclass2 = "";
	var spacedclass = modifiedclass.split(" ");
	for(var j=0; j<spacedclass.length; j++) {
		if(spacedclass[j].length > 0) {
			modifiedclass2 += spacedclass[j] + " ";
		}
	}
	obj.setAttribute("class", modifiedclass2);
	obj.setAttribute("className", modifiedclass2);
	//alert("final: |"+modifiedclass2+"|");
}

/*****************************************
***	toggle display of an object
***** toggleDisplay() and toggle()
*****************************************/
function toggleDisplay(obj,display,truevalue) {
	var obj_to_toggle = obj;
	var newstatus = display;
	if(typeof(obj_to_toggle) == "string") { obj_to_toggle = document.getElementById(obj); }
	if(obj_to_toggle !== null) {
		var displaytype = "block";
		//alert(obj_to_toggle.nodeName.toLowerCase());
		if(obj_to_toggle.nodeName.toLowerCase() == "tbody" && navigator.appVersion.toLowerCase().indexOf("msie") == -1) {
			var displaytype = "table-row-group";
		}
		if(obj_to_toggle.nodeName.toLowerCase() == "tr" && navigator.appVersion.toLowerCase().indexOf("msie") == -1) {
			var displaytype = "table-row";
		}
		if(truevalue == "") { displaytype = ""; }
		if(display == true) { obj_to_toggle.style.display = displaytype; }
		else if(display == false) { obj_to_toggle.style.display = "none"; }
		else {
			if((obj_to_toggle.style.display == "none") || (obj_to_toggle.style.display === "")) {
				obj_to_toggle.style.display = displaytype;
				newstatus = true;
			} else {
				obj_to_toggle.style.display = "none";
				newstatus = false;
			}
		}
		return newstatus;
	} else { return false; }
}
function toggle(obj) {
	return toggleDisplay(obj);
}
function setToggler(trig,obj,state) {
	var obj_to_toggle = obj;
	var trigger_object = trig;
	var initial_state = state;
	if(typeof(obj_to_toggle) == "string") { obj_to_toggle = document.getElementById(obj); }
	if(typeof(trigger_object) == "string") { trigger_object = document.getElementById(trig); }
	if(initial_state != true) { initial_state = false; }
	if(obj_to_toggle !== null && trigger_object != null) {
		toggleDisplay(obj_to_toggle,initial_state);
		trigger_object.onclick = function() { toggleDisplay(obj_to_toggle); }
	}
}


/*****************************************
***	add js event
*****************************************/
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}
	else {
		elm['on' + evType] = fn;
		return true;
	}
}

/*****************************************
***	add page load event
*****************************************/
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		};
	}
}
function addUnloadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
		window.onunload = func;
	} else {
		window.onunload = function() {
			oldonunload();
			func();
		};
	}
}

/*****************************************
***	remove all data from object
*****************************************/
function clearData(obj) {
	var obj_to_clear = obj;
	if(typeof(obj_to_clear) == "string") {
		obj_to_clear = document.getElementById(obj);
	}
	if(obj_to_clear !== null) {
		var idx = obj_to_clear.childNodes.length;
		for (var i = idx - 1; i >= 0; i--) {
			//alert(obj_to_clear.childNodes[i].nodeName);
			obj_to_clear.removeChild(obj_to_clear.childNodes[i]);
		}
	}
}

/*****************************************
***	function to get page and link urls
*****************************************/
function copyData(_src,_dest) {
	var src = _src;
	var dest = _dest;
	if(typeof(src) == "string") { src = document.getElementById(_src); }
	if(typeof(dest) == "string") { dest = document.getElementById(_dest); }
	if(src !== null && dest !== null) {
		clearData(dest);
		var idx = src.childNodes.length;
		for (var i=0; i<idx; i++) {
			dest.appendChild(src.childNodes[i].cloneNode(true));
		}
	}
}

/*****************************************
***	function to get page and link urls
*****************************************/
function getScriptName() {
	return location.pathname.slice(0,location.pathname.lastIndexOf("/")+1).toLowerCase();
}
function getLinkPath(linkobj) {
	var href = linkobj.getAttribute("href").replace(location.protocol+"//"+location.host,"");
	return href.slice(0,href.lastIndexOf("/")+1).toLowerCase();
}

/*****************************************
***	function to get associative arrays of url variables
*****************************************/
function parseURLVarString() {
	var vars = {};
	var tmp = location.search.replace(/\?/,"").split("&");
	var tmp2;
	for(var i=0; i<tmp.length; i++) {
		tmp2 = tmp[i].split("=");
		if(tmp2.length > 1) { vars[tmp2[0].toLowerCase()] = "" + tmp2[1]; }
		else { vars[tmp2[0].toLowerCase()] = ""; }
	}
	return vars;
}

/*****************************************
***	function to open a popup window
*****************************************/
function loadPopupWindow(src,_n,_h,_w) {
	var n = _n;
	var h = _h;
	var w = _w;
	if(typeof _n == "undefined") { n = "newwin"; }
	if(typeof _h == "undefined") { h = 450; }
	if(typeof _w == "undefined") { w = 500; }
	var pwndw = window.open(src, n, "location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width="+w+",height="+h,true);
		pwndw.focus();
	return true;
}


/*****************************************
***	ColdFusion JSON
*****************************************/
function getCFJSONValueIndex(columns,attribute) {
	for(var i=0; i<columns.length; i++) {
		if(attribute.toUpperCase() == columns[i]) {
			return i;
		}
	}
	return -1;
}