	var ns4 = document.layers;
	var op5 = (navigator.userAgent.indexOf("Opera 5")!=-1) 
		||(navigator.userAgent.indexOf("Opera/5")!=-1);
	var op6 = (navigator.userAgent.indexOf("Opera 6")!=-1) 
		||(navigator.userAgent.indexOf("Opera/6")!=-1);
	var agt=navigator.userAgent.toLowerCase();
	var mac = (agt.indexOf("mac")!=-1);
	var ie = (agt.indexOf("msie") != -1); 
	var mac_ie = mac && ie;

function addElement(tag_name,txt,container,class_item,element)
{	
	txt=htmlspecialchars_decode(txt,'ENT_QUOTES');
	
	var newdiv = document.createElement(tag_name);
	if(class_item!=null) newdiv.className=class_item;
	if(txt)	newdiv.innerHTML =txt;
	if(!element)
		{
			var ni = document.getElementById(container);
			ni.appendChild(newdiv);
		}else{
			element.appendChild(newdiv);
		}
}

function addElementBefore(tag_name,txt,container,class_item,element,before)
{	
	txt=htmlspecialchars_decode(txt,'ENT_QUOTES');
	
	var newdiv = document.createElement(tag_name);
	if(class_item!=null) newdiv.className=class_item;
	if(txt)	newdiv.innerHTML =txt;
	if(!element)
		{
			var ni = document.getElementById(container);
			ni.insertBefore(newdiv,before);
		}else{
			element.insertBefore(newdiv,before);
		}
}

function removeElement(divNum) {
  var d = document.getElementById('container');
  var olddiv = d.childNodes[noChilds()-1];
  d.removeChild(olddiv);
}

function noChilds()
{
    var parent = document.getElementById('container');
    var childCount = parent.getElementsByTagName('DIV').length;
	return childCount;
}

function newLine()
{
	var parent = document.getElementById('container');
	var newP = document.createElement('br');
	parent.appendChild(newP);
}

function removeAllChildNodes(node) {
	if (node && node.hasChildNodes && node.removeChild) {
		while (node.hasChildNodes()) {
			node.removeChild(node.firstChild);
			}
		}
}


function htmlspecialchars_decode(string, quote_style) {

   string = string.toString();
  
   string = string.replace(/&amp;/g, '&');
   string = string.replace(/&lt;/g, '<');
   string = string.replace(/&gt;/g, '>');
  
   if (quote_style == 'ENT_QUOTES') {
       string = string.replace(/&quot;/g, '"');
       string = string.replace(/&#039;/g, '\'');
   } else if (quote_style != 'ENT_NOQUOTES') {
       string = string.replace(/&quot;/g, '"');
   }
  
   return string;
}

var notWhitespace = /\S/;
function cleanWhitespace(node) {
  for (var x = 0; x < node.childNodes.length; x++) {
    var childNode = node.childNodes[x];
    if ((childNode.nodeType == 3)&&(!notWhitespace.test(childNode.nodeValue))) {
// that is, if it's a whitespace text node
      node.removeChild(node.childNodes[x])
      x--
    }
    if (childNode.nodeType == 1) {
// elements can have text child nodes of their own
      cleanWhitespace(childNode)
    }
  }
}

function getElementHeight(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.height;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) { 
			xPos = elem.style.pixelHeight;
		} else {
			xPos = elem.offsetHeight;
		}
		return xPos;
	} 
}

function getElementWidth(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.width;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) {
			xPos = elem.style.pixelWidth;
		} else {
			xPos = elem.offsetWidth;
		}
		return xPos;
	}
}

function findPosition(obj) {
	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
	do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}