// some useful functions to make it quicker to do dom manipulation

// our dollar function
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function removeElement(elementId) {
	var element = document.getElementById(elementId);
	element.parentNode.removeChild(element);
}

function hideElement(elementId) {
	//alert('hiding '+elementId);
	var element = document.getElementById(elementId);
	element.style.display = "none";
}

function showElement(elementId) {
	var element = document.getElementById(elementId);
	element.style.display = "block";
}

function toggle() {
	for ( var i=0; i < arguments.length; i++ ) {
		$(arguments[i]).style.display = ($(arguments[i]).style.display != 'none' ? 'none' : '' );
	}
}

function setText(elementId, text) {
	var element = document.getElementById(elementId);
	//element.firstChild.nodeValue = text;
	element.innerHTML = text;
}

function setFormElementValue(formId, elementId, value) {
	//alert("Setting "+elementId);
	var thisForm = document.forms[formId];
	var element = thisForm.elements[elementId];
	element.value=value;
}

function getFormElementValue(formId, elementId) {
    var thisForm = document.forms[formId];
    var element = thisForm.elements[elementId];
    if (element.type == 'checkbox' || element.type == 'radio') {
		return element.checked;
    } else if (element.type == 'select' || element.type == 'select-one') {
		return element.options[element.selectedIndex].value;
	} else {
        return element.value;
    }
}
	
function makeLinkFromElement(elementId, linkTarget) {
	var element = document.getElementById(elementId);
	var child = element.firstChild;
	linkElement = document.createElement("a");
	linkElement.href = linkTarget;
	element.removeChild(child);
	linkElement.appendChild(child);
	element.appendChild(linkElement);
}

function setLinkTarget(linkElementId, linkTarget) {
	var linkElement = document.getElementById(linkElementId);
	linkElement.href = linkTarget;
}

function setLinkOnClickAction(linkElementId, onClickAction) {
	var linkElement = document.getElementById(linkElementId);
	linkElement.onclick = alert('click me!');
}

function truncate(stringToTruncate, numChars) {
	if (stringToTruncate.length < numChars) {
		return stringToTruncate;
	}
	var trunc = stringToTruncate.split(' ');
	if (trunc[0].length > numChars) {
		return substr(trunc[0], 0, numChars-3) + '...';
	} else {
		var truncated = trunc[0];
		for (var i=1; i<trunc.length; i++) {
			if ((truncated + ' ' + trunc[i]).length > numChars-4) {
				return truncated + ' ...';
			} else {
				truncated += (' ' + trunc[i]);
			}
		}
	}
}

function insertAfter(parent, node, referenceNode) { 
	if(referenceNode.nextSibling){ 
		parent.insertBefore(node, referenceNode.nextSibling); 
	} else { 
		parent.appendChild(node); 
	} 
}

function isset(varname){
	return(typeof(window[varname])!='undefined');
}

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
	
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			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]);
				};
				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;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

function instanceOf(object, constructor) { 
	while (object != null) { 
		if (object == constructor.prototype) 
			return true; 
		object = object.__proto__; 
   } 
   return false; 
}

function isANode(object) {
	while (object != null) {
//		if (object == Node.prototype) 
//			return true; 
		if (object.nodeType != null) {
			return true;
		}
		object = object.__proto__; 
	} 
	return false;
}

function showImage(name) {
	document.getElementById(name).style.visibility = "visible"
}

function hideImage(name) {
	document.getElementById(name).style.visibility = "hidden"
}
	