var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};
BrowserDetect.init();

function correctPNG() 
{
   	for(var i=0; i<document.images.length; i++)
	{
		var img = document.images[i];
		var imgName = img.src.toUpperCase();
		if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
		{
			var imgID = (img.id) ? "id='" + img.id + "' " : "";
			var imgClass = (img.className) ? "class='" + img.className + "' " : "";
			var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
			var imgStyle = "display:inline-block;" + img.style.cssText;
			if (img.align == "left") imgStyle = "float:left;" + imgStyle;
			if (img.align == "right") imgStyle = "float:right;" + imgStyle;
			if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;		
			var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"; 
			img.outerHTML = strNewHTML;
			i = i-1;
		}
	}
}

function Trim(TRIM_VALUE){
	if(TRIM_VALUE.length < 1)
	{
		return"";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	
	if(TRIM_VALUE=="")
	{
		return "";
	}
	else
	{
		return TRIM_VALUE;
	}
}

function RTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0)
	{
		return"";
	}
	var iTemp = v_length -1;
	
	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp) == w_space)
		{
		
		}
		else
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;

	}
	return strTemp;
}

function LTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	if(v_length < 1)
	{
		return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;

	while(iTemp < v_length)
	{
		if(VALUE.charAt(iTemp) == w_space){
		
		}
		else
		{
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	}
	return strTemp;
}
function cutoff(str, maxlength)
{
	if(str.length>maxlength)
		return str.substring(0,maxlength)+"...";	
	else
		return str;
}

function getStyleObject(objectId, doc) {
    if(document.getElementById && document.getElementById(objectId)) {
	return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
	return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
		return getObjNN4(document,objectId);
    } else {
	return false;
    }
} 

function changeObjectVisibility(objectId, newVisibility) {
    var styleObject = getStyleObject(objectId, document);
    if(styleObject) {
	styleObject.visibility = newVisibility;
	return true;
    } else {
	return false;
    }
} 

function findImage(name, doc) {
	var i, img;
	for (i = 0; i < doc.images.length; i++) {
    	if (doc.images[i].name == name) {
			return doc.images[i];
		}
	}
	for (i = 0; i < doc.layers.length; i++) {
    	if ((img = findImage(name, doc.layers[i].document)) != null) {
			img.container = doc.layers[i];
			return img;
    	}
	}
	return null;
}

function getImage(name) {
	if (document.layers) {
    	return findImage(name, document);
	}
	return null;
}

function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}
function getElementHeight(Elem) {
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.height;
	} else {
		var elem;
		if(typeof(Elem) == "object")
			var elem = Elem;
		else if(document.getElementById) {	
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		xPos = elem.offsetHeight;
		return xPos;
	} 
}

function getElementWidth(Elem) {
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.width;
	} else {
		var elem;
		if(typeof(Elem) == "object")
			var elem = Elem;
		else if(document.getElementById) {	
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		xPos = elem.offsetWidth;
		return xPos;
	}
}

function getElementLeft(Elem) {
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		var elem = getObjNN4(document, Elem);
		return elem.pageX;
	} else {
		var elem;
		if(typeof(Elem) == "object")
			var elem = Elem;
		else if(document.getElementById) {	
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		xPos = elem.offsetLeft;
		tempEl = elem.offsetParent;
  		while (tempEl != null) {
  			xPos += tempEl.offsetLeft;
	  		tempEl = tempEl.offsetParent;
  		}
		return xPos;
	}
}


function getElementTop(Elem) {
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		var elem = getObjNN4(document, Elem);
		return elem.pageY;
	} else {
		if(typeof(Elem) == "object")
			var elem = Elem;
		else if(document.getElementById) {	
			var elem = document.getElementById(Elem);
		} else if (document.all) {
			var elem = document.all[Elem];
		}
		yPos = elem.offsetTop;
		tempEl = elem.offsetParent;
		while (tempEl != null) {
  			yPos += tempEl.offsetTop;
	  		tempEl = tempEl.offsetParent;
  		}
		return yPos;
	}
}


function getImageLeft(myImage) {
	var x, obj;
	if (document.layers) {
		var img = getImage(myImage);
    	if (img.container != null)
			return img.container.pageX + img.x;
		else
			return img.x;
  	} else {
		return getElementLeft(myImage);
	}
	return -1;
}

function getImageTop(myImage) {
	var y, obj;
	if (document.layers) {
		var img = getImage(myImage);
		if (img.container != null)
			return img.container.pageY + img.y;
		else
			return img.y;
	} else {
		return getElementTop(myImage);
	}
	return -1;
}

function getImageWidth(myImage) {
	var x, obj;
	if (document.layers) {
		var img = getImage(myImage);
		return img.width;
	} else {
		return getElementWidth(myImage);
	}
	return -1;
}



function getImageHeight(myImage) {
	var y, obj;
	if (document.layers) {
		var img = getImage(myImage);
		return img.height;
	} else {
		return getElementHeight(myImage);
	}
	return -1;
}

function moveXY(myObject, x, y) {
	obj = getStyleObject(myObject)
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		obj.top = y;
 		obj.left = x;
	} else {
		obj.top = y + 'px';
		obj.left = x + 'px';	
	}
}

function getElement(Elem)
{
	if((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4))
		return getObjNN4(document, Elem);
	else
	{
		if(document.getElementById)
			return document.getElementById(Elem);
		else if(document.all)
			return document.all[Elem];
	}
}

function changeClass(Elem, myClass) {
	var elem;
	if(document.getElementById) {
		var elem = document.getElementById(Elem);
	} else if (document.all){
		var elem = document.all[Elem];
	}
	if(elem)
		elem.className = myClass;
}

function getFileName(strFN)
{
	return strFN.substring(strFN.lastIndexOf("/")+1);	
}

function changeBGColour(myObject, colour) {
	if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
		var obj = getObjNN4(document, myObject);
		obj.bgColor=colour;
	} else {
		var obj = getStyleObject(myObject);
		obj.backgroundColor = colour;	
	}
}

function changeImage(target, source) {
	var imageObj;
	var src;
	
	if(source.substring(source.lastIndexOf(".")+1).toUpperCase()=="GIF" || source.substring(source.lastIndexOf(".")+1).toUpperCase()=="PNG")
	{
		if(typeof(target)=="object")
			target.src = source;		
		else
			getElement(target).src = source;
	}
	else
	{
		src = eval(source).src;
		if(typeof(target)=="object")
			target.src = src;	
		else if(getElement(target).tagName!="IMG")
			getElement(target).src = src;
		else
		{			
			if ((BrowserDetect.browser=="Netscape" && BrowserDetect.version == 4)) {
				imageObj = getImage(target);
				if (imageObj) imageObj.src = src; 
			} else {
				imageObj = getElement(target);
				if (imageObj) imageObj.src = src; 
			}
		}
	}
}

function addEvent(obj, evType, fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
 } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
 } else {
    return false;
 }
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

function initResize(id){
	var table = document.getElementById(id);
	window.onresize = function(){resizeTable(table);}
	resizeTable(table);
}

function getViewportHeight() {
	if (window.innerHeight!=window.undefined) return window.innerHeight;
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
	if (document.body) return document.body.clientHeight;
	return window.undefined; 
}
function getViewportWidth() {
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
	if (document.body) return document.body.clientWidth; 
	return window.undefined; 
}
function resizeTable(table)
{	
	if(table)
		table.style.height = getViewportHeight()+"px";
}

function getWindowHeight()
{
	if(window.outerHeight) return window.outerHeight;
	if(document.documentElement.clientHeight) return document.documentElement.clientHeight;
	return document.body.clientHeight;
}
function getWindowWidth()
{
	if(window.outerWidth) return window.outerWidth;
	if(document.documentElement.clientWidth) return document.documentElement.clientWidth;
	return document.body.clientWidth;
}
function getLeftOffset()
{
	if(window.screenX || window.screenX==0) return window.screenX;
	if(window.screenLeft || window.screenLeft==0) return window.screenLeft;
	return window.undefined;
}
function getTopOffset()
{
	if(window.screenY||window.screenY==0) return window.screenY;
	if(window.screenTop || window.screenTop==0) return window.screenTop;
	return window.undefined;
}
function popup(content, wName, toolbar, status, scrollbar, location, width, height, left, top)
{
	var c = content || "";
	var w = wName || "myWindow";
	var l = left || (getAbsoluteX()-(width/2));
	var t = top || (getAbsoluteY()-(height/2)-21);
	var toolbar = toolbar || "yes";
	var status = status || "yes";
	var scrollbar = scrollbar || "yes";
	var width = width || "200px";
	var height = height || "200px";
	var location = location || "yes";
	var properties = "left="+l+", top="+t+", toolbar="+toolbar+", status="+status+", scrollbar="+scrollbar+", location="+location+", width="+width+"px, height="+height+"px";
	window.open(c,w,properties);
}
function getAbsoluteX()
{
	var x = getLeftOffset() + (getViewportWidth()/2);
	return Math.round(x);
}
function getAbsoluteY()
{
	var bottomOffset = screen.height-getTopOffset()-getWindowHeight();
	var toolbarHeight = screen.height - getTopOffset() - getViewportHeight() - bottomOffset;
	var y=getTopOffset() + toolbarHeight + (getViewportHeight()/2)
	return Math.round(y);
}