/*
 * FileTag: CommonJS
 * FileInfo: Common javascript functions for multiple user agents
 * Version: June 2007, modified October 2009
 * Author: André Braune<a.braune@signalservice-cottbus.net>
 * Copyright: (C)2009 Signalservice Cottbus GmbH
 * Disclaimer: Email the author to request this file (possibly updated).
 *             Free for individual and educational use! Commercial use
 *             not allowed without permission by author or company.
 */

var LastWindowResizeListener = 0;

// ----------------------------------------------------------------------------
function elemById(elem_id) {
	if(document.getElementById) {
		return document.getElementById(elem_id);
	} else if(document.all) {
		if(typeof document.all[elem_id] == "object") {
			return document.all[elem_id];
		}
	} else if (typeof document[elem_id] == "object") {
		return document[elem_id];
	}
	return null;
}

// ----------------------------------------------------------------------------
function getValueOf(elem) {
	if(elem.type && elem.name) {
		// form element
		return elem.value;
	} else if(elem.nodeType) {
		if(elem.nodeType == 3 || elem.nodeType == 2) {
			// text and attribute nodes
			return elem.nodeValue;
		} else if(elem.nodeType == 1 && elem.firstChild) {
			// element nodes, assuming text content
			return elem.firstChild.nodeValue;
		}
	} else if(document.all) {
		return elem.innerText;
	}
 	return "";
}

// ----------------------------------------------------------------------------
function setValueOf(elem, value) {
	if(elem.type && elem.name) {
		// form element
		elem.value = value;
	} else if(elem.nodeType) {
		if(elem.nodeType == 3 || elem.nodeType == 2) {
			// text and attribute nodes
			elem.nodeValue = value;
		} else if(elem.nodeType == 1) {
			// element nodes, assuming text content
			if(elem.firstChild) {
				elem.firstChild.nodeValue = value;
			} else if(document.all) {
				elem.innerText = value;
			}
		}
	} else if(document.all) {
		elem.innerText = value;
	}
}

// ----------------------------------------------------------------------------
function getClassOf(elem, css_class) {
	if(document.all) {
		return elem.className;
	} else {
		return elem.getAttribute("class");
	}
}

// ----------------------------------------------------------------------------
function setClassOf(elem, css_class) {
	if(document.all) {
		if(elem.className != css_class) {
			elem.className = css_class;
		}
	} else if(elem.getAttribute("class") != css_class) {
		elem.setAttribute("class", css_class);
	}
}

// ----------------------------------------------------------------------------
function getWidthOf(elem) {
	if(elem.clip) {
		return elem.clip.width;
	} else if(window.opera) {
		return elem.style.pixelWidth;
	} else if(elem.offsetWidth) {
		return elem.offsetWidth;
	} else {
		return 0;
	}
}

// ----------------------------------------------------------------------------
function getHeightOf(elem) {
	if(elem.clip) {
		return elem.clip.height;
	} else if(window.opera) {
		return elem.style.pixelHeight;
	} else if(elem.offsetHeight) {
		return elem.offsetHeight;
	} else {
		return 0;
	}
}

// ----------------------------------------------------------------------------
function getWindowWidth() {
	if(document.all) {
		return document.body.offsetWidth;
	} else {
		return window.innerWidth;
	}
}

// ----------------------------------------------------------------------------
function getWindowHeight() {
	if(document.all) {
		return document.body.offsetHeight;
	} else {
		return window.innerHeight;
	}
}

// ----------------------------------------------------------------------------
function setWindowResizeHandler(handler) {
	if(window.addEventListener) {
		if(LastWindowResizeListener) {
			// remove previous handler added by this function
			window.removeEventListener("resize", LastWindowResizeListener, true);
		}
   	window.addEventListener("resize", handler, true);
   	LastWindowResizeListener = handler;
	} else if(window.captureEvents && Event) {
		window.captureEvents(Event.RESIZE);
		window.onresize = handler;
	} else {
		window.onresize = handler;
	}
}


