/*	Common JavaScript Functions */

/*****************************************
***	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 obj = _obj;
	if(typeof(_obj) == "string") { obj = document.getElementById(_obj); }
	if(obj !== null) { 
		var modifiedclass = obj.className;
		var RE = new RegExp('UNDEFINED','gi');
		if(typeof classtoreplace != "undefined" && classtoreplace !== "") {
			var classEStoreplace = classtoreplace.split(",");
			for(var i=0; i<classEStoreplace.length; i++) {
				RE.compile('\\b'+classEStoreplace[i]+'\\b','gi');
				if(RE.test(modifiedclass) == true) {
					modifiedclass = modifiedclass.replace(RE,"");
				}
			}
		}
		if(newclass !== "") {
			var newclassES = newclass.split(",");
			for(var k=0; k<newclassES.length; k++) {
				RE.compile('\\b'+newclassES[i]+'\\b','gi');
				if(!RE.test(modifiedclass)) {
					modifiedclass = modifiedclass + " " + newclassES[k];
				}
			}
		}
		modifiedclass = modifiedclass.replace(/^\s+/,'').replace(/\s{2,}/g,' ').replace(/\s+$/,'');
		obj.setAttribute("class", modifiedclass);
		obj.setAttribute("className", modifiedclass);
		//alert("final: 0"+modifiedclass+"0");
	}
}

/*****************************************
***	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 page load or unload event
*****************************************/
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if(oldonload) { oldonload(); }
			func();
		};
	}
}
function addUnloadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
		window.onunload = func;
	} else {
		window.onunload = function() {
			if(oldonunload) { 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 copy element data
*****************************************/
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;
}