var ns4 = (document.layers);
var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);
var ie  = document.all;
var debugTimers = false;
var UnitSeperator = String.fromCharCode(31);
var RecordSeperator = String.fromCharCode(30);

function FindObject(id, subForm)
{
	var doc = null;
	if (subForm == null)
		doc = document;
	else
		doc = subForm.document;
		
	if (ns4)
		return doc.layers[id];
	else if (ie4)
		return doc.all[id];
	else if (ie5 || ns6)
		return doc.getElementById(id);
}

function GetSrcElement()
{
	var elem = null;
	var evnt = null;
	
	if (typeof(evt) != "undefined")
		evnt = evt
	else if (typeof(event) != "undefined")
		evnt = event;
		
	if (evnt)
	{
		if (typeof(evnt.target) != "undefined")
			elem = evnt.target;
		else (typeof(evnt.srcElement) != "undefined")
			elem = evnt.srcElement;
	}
	return elem;
}

function SwapImage(img, newImg)
{
	if (newImg != null)
		img.src = newImg.src;
}

function GetElementPosition(element)
{
	var offsetTrail = element;
	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail)
	{
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
			    
	if (navigator.userAgent.indexOf("Mac") != -1 && typeof document.body.leftMargin != "undefined")
	{
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	return {left:offsetLeft, right:offsetLeft+element.clientWidth, top:offsetTop, bottom:offsetTop+element.clientHeight, width:element.clientWidth, height:element.clientHeight};
}

function PosToString(name, pos)
{
	return name + "=left:" + pos.left + ",top:" + pos.top + ",width:" + pos.width + ",height:" + pos.height;
}

function GetParentElement(element, tagName)
{
	var elementTrail = element.parentNode;
	while (elementTrail != null && elementTrail.tagName.toLowerCase() != tagName.toLowerCase())
	{
		elementTrail = elementTrail.parentNode;
	}
	return elementTrail;
}

function SetDefaultButton(btnID)
{
	var key = ie ? event.keyCode : e.which;
	if (key == 13)
	{
		var btn = FindObject(btnID);
		if (btn != null)
		{
			event.returnValue = false;
			event.cancel = true;
			btn.click();
		}
	}
}

function fakePostBack()
{
  var theform;
  if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1)
  {
    theform = document.forms["form1"];
  }
  else
  {
    theform = document.form1;
  }
  theform.submit();
}

var dragapproved = false;
var z,x,y;

function move(e)
{
	if (dragapproved)
	{
		z.style.left = ns6 ? temp1 + e.clientX-x : temp1 + event.clientX-x
		z.style.top  = ns6 ? temp2 + e.clientY-y : temp2 + event.clientY-y
		return false
	}
}

function drags(e)
{
	if (!ie && !ns6)
		return;
	var firedobj = ns6 ? e.target : event.srcElement;
	var topelement = ns6 ? "HTML" : "BODY";

	while (firedobj.tagName != topelement && firedobj.className.indexOf("drag") == -1)
	{
		firedobj = ns6 ? firedobj.parentNode : firedobj.parentElement;
	}

	if (firedobj.className.indexOf("drag") != -1)
	{
		dragapproved = true;
		z = firedobj;
		temp1 = parseInt(z.style.left + 0);
		temp2 = parseInt(z.style.top + 0);
		x = ns6 ? e.clientX : event.clientX;
		y = ns6 ? e.clientY : event.clientY;
		document.onmousemove = move;
		return false;
	}
}

//document.onmousedown = drags;
//document.onmouseup = new Function("dragapproved = false;");

// AMOR, this was removed 04/08/2004. The reason it was introduced has been lost,
// if needed again then please add a comment here to indictate what needs it
//document.oncontextmenu = new Function("return false;");

function SetTimeoutFunction(name, delay, javascript)
{
	var text = "";
	if (debugTimers)
		text += "self.status='" + name + " = " + delay + "';";
	text += name + " = window.setTimeout(\"" + javascript + "\", " + delay + ");";
	return new Function(text);
}

function ClearTimeoutFunction(name)
{
	var text = "";
	if (debugTimers)
		text += "self.status='" + name + " cleared';";
	text += "clearTimeout(" + name + ");";
	return new Function(text);
}

function SetElementWidths(id, width)
{
	var objectList = document.all[id];
	if (objectList != null)
	{
		if (objectList.length == undefined)
		{
			objectList.style.width = width;
		}
		else
		{
			for (var i=0; i<objectList.length; ++i)
			{
				if (typeof(objectList[i].attributes["adjust"]) != "undefined")
				{
					var adjust = parseInt(objectList[i].attributes["adjust"].value);
					objectList[i].style.width = Math.max(1, width + adjust);
				}
				else
				{
					objectList[i].style.width = width;
				}
			}
		}
	}
}

function Debug_ShowCellWidths(tableID)
{
	var table = FindObject(tableID);
	if (table != null)
	{
		var objectList = table.getElementsByTagName("td");
		if (objectList != null)
		{
			if (objectList.length == undefined)
			{
				objectList.title = Debug_CellWidthString(objectList);
			}
			else
			{
				for (i=0; i<objectList.length; ++i)
				{
					objectList[i].title = Debug_CellWidthString(objectList[i]);
				}
			}
		}
	}
}

function Debug_CellWidthString(element)
{
	return element.style.width + "(" + element.clientWidth + ")";
}

// string functions
function TrimString(stringToTrim)
{
	var text = this;
	var ch = text.substring(0,1);
	while (ch == stringToTrim)
	{
		text  = text.substring(1, text.length);
		ch = text.substring(0,1);
	}
	ch = text.substring(text.length-1,text.length);
	while (ch == stringToTrim)
	{
		text = text.substring(0, text.length-1);
		ch = text.substring(text.length-1,text.length);
	}
	return text;
}

String.prototype.Trim = TrimString;

function SetClassName(id, className, tagName, element)
{
	var element = element != null ? element : document;
	var nodeList = element.getElementsByTagName(tagName);
	if (nodeList != null)
	{
		for (i=0; i<nodeList.length; ++i)
		{
			if (nodeList[i].getAttribute("id") == id)
				nodeList[i].className = className;
		}
	}
}

function EnsureSimpleInputOnly(theID)
{
    var elem = document.getElementById(theID);
    //if(elem == null) return true;

	var string = elem.value;
    // from http://developer.irt.org/script/709.htm
    for (var i=0, output='', valid=" 123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-/"; i<string.length; i++)
       if (valid.indexOf(string.charAt(i)) != -1) output += string.charAt(i)
       
    elem.value = output;
}


function SetStyleByID(id, property, value)
{
	var element = FindObject(id);
	if (element != null)
	{
		var selector = "#" + id;
		var sheets = document.styleSheets;
		for (var sheetIndex=0; sheetIndex<sheets.length; ++sheetIndex)
		{
			var rules = sheets[sheetIndex].rules;
			for (var ruleIndex=0; ruleIndex<rules.length; ++ruleIndex)
			{
				if (rules[ruleIndex].selectorText == selector)
				{
					var style = rules[ruleIndex].style;
					style[property] = value;
					break;
				}
			}
		}
	}
}

function CancelReturn()
{
  if (event.keyCode == 13)
  {
     // can't cancel return, so change it to something we can cancel and cancel that
     // (works on textboxs anyway :-))
     event.keyCode=8;
     event.returnValue = false;
  }
}

// use this via something like textBox.Attributes.Add("onKeyPress", "TextBoxReturnSubmit(this)");, this will
// make a textbox submit in preference to an <input type=submit>
function TextBoxReturnSubmit(sender)
{
  if (event.keyCode == 13)
  {
    event.keyCode=8;
    sender.onchange(event)
  }
}

function SwapRetForTab()
{
  if (event.keyCode == 13)
  {
     event.keyCode=9;
  }
}

function SizeDiv(id)
{
	var div = FindObject(id);
	
	if (div != null)
	{
		var bodyPos = GetElementPosition(document.body);
		var divPos = GetElementPosition(div);
		
		var quickLinksRow = FindObject("QuickLinksRow");
		var gap = 8;
		if (quickLinksRow != null)
			gap += quickLinksRow.clientHeight;
		
		div.style.width = document.body.clientWidth - divPos.left - 50;
		div.style.height = document.body.clientHeight - divPos.top - gap;
		
		if (resize != null)
			resize();
	}
}

function ArrayFind(objectToFind, key)
{
	var i=0;
	for (i=0; i<this.length; ++i)
	{
		if (this[i][key] == objectToFind[key])
			return i;
	}
	return -1;
}

function ArrayAdd(objectToAdd)
{
	this[this.length] = objectToAdd;
}

function ArrayRemoveAt(index)
{
	if (index >= 0 && index <= this.length)
	{
		var i;
		for (i=index; i<this.length-1; ++i)
			this[i] = this[i+1];
		--this.length;
	}
}

function ResizeToBodySize(id, minusWidth, minusHeight)
{
  var elem = document.getElementById(id)
  elem.style.width = document.body.clientWidth - minusWidth
  elem.style.height = document.body.clientHeight - minusHeight
}


Array.prototype.Find = ArrayFind;
Array.prototype.Add = ArrayAdd;
Array.prototype.RemoveAt = ArrayRemoveAt;

