function getObjectById(id){
	var obj;
	if(document.getElementById){
		obj = document.getElementById(id);
	} else if(document.layers){
		obj = document.layers[id];
	} else {
		obj = document.all.item(id);
	}
	return obj;
}

function getFilenameFromURL(strURL) {
	var re = new RegExp("^.*[\\\/]([^\\\/]*)$", "g");
	var fileName;
	fileName = strURL.replace(re, "$1");
	return fileName;
}

if(!document.getElementById){
  if(document.all)
  document.getElementById=function(){
    if(typeof document.all[arguments[0]]!="undefined")
    return document.all[arguments[0]]
    else
    return null
  }
  else if(document.layers)
  document.getElementById=function(){
    if(typeof document[arguments[0]]!="undefined")
    return document[arguments[0]]
    else
    return null
  }
}

function addLoadEvent(_function) {
	var _onload = window.onload;
	if ( typeof window.onload != 'function' ) {
		if ( window.onload ) {
			window.onload = _function;
		} else {
			var _addEventListener = window.addEventListener || document.addEventListener;
			var _attachEvent = window.attachEvent || document.attachEvent;
			if ( _addEventListener ) {
				_addEventListener('load', _function, true);
				return true;
			} else if ( _attachEvent ) {
				var _result = _attachEvent('onload', _function);
				return _result;
			} else {
				//todo: preloading fix for ie5.2 on mac os
				return false;
			}
		}
	} else {
		window.onload = function() {
			_onload();
			_function();
		}
	}
}

function ClickToActivateCleaner(BaseObject){
	if (document.getElementsByTagName && document.body.outerHTML) {	
		var objCode = '';
		var tagNames = ['EMBED', 'APPLET', 'OBJECT'];
		for (var t=0;t<tagNames.length;t++){
			if (!BaseObject){
				var objs = document.body.getElementsByTagName(tagNames[t]);
			} else {
				var objs = BaseObject.getElementsByTagName(tagNames[t]);
			}
			if (objs){
				for(var o=0;o<objs.length;o++){
					objs[o].outerHTML = objs[o].outerHTML;
				}
			}
		}
	}
}

function insertAfter(parent, node, referenceNode) {
	parent.insertBefore(node, referenceNode.nextSibling);
}

function GetObjectCode(tag, obj){
	var code = '';
	//alert(obj.innerHtml);
	if (!obj){
		return code;
	}
	code += '<' + tag;
	for(var i=0;i<obj.attributes.length;i++){
		if(obj.attributes[i].specified){
			code += ' ' + obj.attributes[i].nodeName + '=' + '"' + obj.attributes[i].nodeValue + '"';
		}
	}
	code += '>';
	code += obj.innerHtml;
	code += '</' + tag + '>';
	return code;
}


function ReplaceObject(Obj1, Obj2){
	Obj1.parentNode.replaceChild(Obj2, Obj1);
}


function TextToObj(strText){
	var fragment = document.createElement("<SPAN>");
	fragment.innerHTML = strText;
	return fragment;
}

function GetObjectByCriteria(strTag, strNodeName, strNodeValue){
	if(document.body.getElementsByTagName) {
		var objs = document.body.getElementsByTagName(strTag);
		if (objs){
			for(var o=0;o<objs.length;o++){
				var obj = objs[o];
				for(var i=0;i<obj.attributes.length;i++){
					if(obj.attributes[i].specified){
						//alert(obj.attributes[i].nodeName + ' = ' + obj.attributes[i].nodeValue);
						if(obj.attributes[i].nodeName == strNodeName && obj.attributes[i].nodeValue == strNodeValue) {
							return obj;
						}
					}
				}
			}
		}
	}
}

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;
	}
	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';
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	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;
}

if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode)
	{
		switch (where){
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
	{
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}

  insertHTML = function (thenode, htmlStr) {
    var r = thenode.ownerDocument.createRange();
    r.setStartBefore(thenode);
    var parsedHTML = r.createContextualFragment(htmlStr);
  //remove all children, add the new one.
    for (var i = 0; i < thenode.childNodes.length; i++) {
      thenode.removeChild(thenode.childNodes[i]);
    }
    thenode.appendChild(parsedHTML);
  }

} else {
  insertHTML = function (thenode, htmlStr) {
    thenode.insertAdjacentHTML('beforeEnd', htmlStr);
  //remove all children except for the new one.
    for (var i = 0; i < thenode.childNodes.length-1; i++) {
      thenode.removeChild(thenode.childNodes[i]);
    }
  }
}

function QString(qsParam) {
	var output = null;
	this.params = new Object()
	var qs=location.search.substring(1,location.search.length);
	if (qs.length == 0){
		return output;
	}
	qs = qs.replace(/\+/g, ' ')
	var args = qs.split('&') // parse out name/value pairs separated via &
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=');
		var name = unescape(pair[0]);
		if (pair.length == 2) {
			value = unescape(pair[1]);
		} else {
			value = '';
		}
		this.params[name] = value
		if (name == qsParam) {
			output = value;
		}
	}
	return output;
}

function HashString(hsParam) {
	var output = null;
	this.params = new Object()
	var hs=location.hash.substring(1,location.hash.length);
	if (hs.length == 0){
		return output;
	}
	hs = hs.replace(/\+/g, ' ')
	var args = hs.split('&') // parse out name/value pairs separated via &
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=');
		var name = unescape(pair[0]);
		if (pair.length == 2) {
			value = unescape(pair[1]);
		} else {
			value = '';
		}
		this.params[name] = value
		if (name == hsParam) {
			output = value;
		}
	}
	return output;
}
