//-----------------------------------------------------------------
// HTML Element related functions
//
//-----------------------------------------------------------------		

function getElementById(sId) {
   if ( document.getElementById && document.getElementById(sId)) {
      return document.getElementById(sId);
   }
   else if ( document.all && document.all[sId]) {
      return document.all[sId] ;
   }
   else if ( document.layers && document.layers[sId]) {
      return document.layers[sId] ;
   }
   else {
      // element not found
      return false;
   } 	
} // function getElementById

function hideElement(e) {
	if ( document.layers ) // ns4
		e.visibility = 'hide';
	else  // ie4+ ns6+
		e.style.display = 'none';
} // function hideElement

function showElement(e) {
	if ( document.layers ) // ns4
		e.visibility = 'show';
	else  // ie4+ ns6+
		e.style.display = '';
} // function showElement

function isVisibleElement(e) {
	if ( document.layers ) { // ns4
		if ( e.visibility == 'show' )
			return true;
		else
			return false;
	}
	else { // ie4+ ns6+
		if ( e.style.display == 'none' || e.style.visibility == 'hidden' )
			return false;
		else
			return true;
	}
} // function isVisibleElement

//change the opacity for different browsers
function changeOpacity(e,opacity) {
	if ( e.style ) { // need style property
		var oStyle = e.style;
		oStyle.opacity = (opacity / 100);
		oStyle.MozOpacity = (opacity / 100);
		oStyle.KhtmlOpacity = (opacity / 100);
		oStyle.filter = 'alpha(opacity=' + opacity + ')';
	}
} // function changeOpacity

function setCursor(e,type) {
	var browser = navigator.userAgent.toLowerCase();
	var oStyle = e.style;
	switch(type) {
		case 'hand':
			if (browser.indexOf('mozilla')!=-1) 
				oStyle.cursor = 'pointer';
			else
				oStyle.cursor = 'hand';
		default:
			e.style.cursor = type;
	}
}

function getInnerHTML(node) {
	return node.innerHTML;
}

var leafElems = new Array();
leafElems['IMG'] = true;
leafElems['HR'] = true;
leafElems['BR'] = true;
leafElems['INPUT'] = true;

function getOuterHTML(node) {
   var str = "";

   switch (node.nodeType) {
      case 1: // ELEMENT_NODE
         str += "<" + node.nodeName;
         for (var i=0; i<node.attributes.length; i++) {
            if (node.attributes.item(i).nodeValue != null) {
               str += " "
               str += node.attributes.item(i).nodeName;
               str += "=\"";
               str += node.attributes.item(i).nodeValue;
               str += "\"";
            }
         }

         if (node.childNodes.length == 0 && leafElems[node.nodeName])
            str += ">";
         else {
            str += ">";
            str += getInnerHTML(node);
            str += "<" + node.nodeName + ">"
         }
         break;

      case 3:   //TEXT_NODE
         str += node.nodeValue;
         break;

      case 4: // CDATA_SECTION_NODE
         str += "<![CDATA[" + node.nodeValue + "]]>";
         break;

      case 5: // ENTITY_REFERENCE_NODE
         str += "&" + node.nodeName + ";"
         break;

      case 8: // COMMENT_NODE
         str += "<!--" + node.nodeValue + "-->"
         break;
   }

   return str;
}

function getClientLeft(oElement) {
	return _traveUpwards(oElement, 'offsetLeft');
}

function getClientTop(oElement) {
	return _traveUpwards(oElement, 'offsetTop');
}

function _traveUpwards(oElement, sProperty) {
	var iValue = 0;
	while ( oElement ) {
		iValue += oElement[sProperty];
		oElement = oElement.offsetParent;
	}
	return iValue;
}

function computedStyle(oElement, sProperty) {
	if ( document.defaultView && document.defaultView.getComputedStyle ) {
 		// W3C DOM
		return document.defaultView.getComputedStyle(oElement,null).getPropertyValue(sProperty);
	} else if ( oElement.currentStyle )
		// IE
		return oElement.currentStyle[sProperty];
	else
		return '';
}


if ( !document.all ) {

	Node.prototype.__defineGetter__("outerHTML", function () {
		return getOuterHTML(this);
	});

}
