function $(id)
{
    return document.getElementById(id);
}

// ============================================================================================================
// This Script file contains
// - XML HTTP call back Methods
// - Method to add Posted Form Variables to the Post Request
// - Method to add Query String to the Get Request
// ============================================================================================================
// We need this to make sure we have the capability of using either one
// MSXML2.XMLHTTP ... or ... Javascript builtin suport for XMLHttpRequest
var bXMLHttpSupport = (typeof XMLHttpRequest == "object" || window.ActiveXObject);

// Our simple Http Object, We define a get method
var Http = new Object();

// Define Get Method Handler
Http.get = function (sURL, fnCallback, asyncFlag)
{
	// Flag helps if we need a Synchronous access
	if(new String(asyncFlag) == "undefined") asyncFlag = true;

	// AJAX Caching Issue
	if (sURL.match(/\?/))
		sURL = sURL + "&RANDOM=" + (Math.random() * Date.parse(new Date()));
	else
		sURL = sURL + "?RANDOM=" + (Math.random() * Date.parse(new Date()));

	if(bXMLHttpSupport)
	{
		var oRequest = getHTTPObject();
		oRequest.open("get", sURL, asyncFlag);
		oRequest.onreadystatechange = function ()
		{
			if(oRequest.readyState == 4)
				fnCallback(oRequest.responseText);
		}
		oRequest.send(null);
	}
	else
		throw new Error("Browser does not support XMLHTTPRequest or ActiveXObjects.");
}

// Define Post Method Handler
Http.post = function (sURL, sParams, fnCallback, asyncFlag)
{
	// Flag helps if we need a Synchronous access
	if(new String(asyncFlag) == "undefined") asyncFlag = true;

	// AJAX Caching Issue
	sURL = sURL + "?RANDOM=" + (Math.random() * Date.parse(new Date()));

	if(bXMLHttpSupport)
	{
		var oRequest = getHTTPObject();
		oRequest.open("post", sURL, asyncFlag);
		oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		oRequest.onreadystatechange = function ()
		{
			if(oRequest.readyState == 4)
				fnCallback(oRequest.responseText);
		}
		oRequest.send(sParams);
	}
	else
		throw new Error("Browser does not support XMLHTTPRequest or ActiveXObjects.");
}

// Data Reflection
Http.dataReflection = function(delay, fnCallback)
{
  	setTimeout(fnCallback, delay);
}

// #################################################################
// Function:	getHTTPObject()
// Arguments:	<None>
// Details:		Creating the XMLHttpRequest Object
// #################################################################
function getHTTPObject()
{
	// First try to get HTTP Object from Microsoft Libraries
	var arrXMLSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];

	for(var i = 0; i < arrXMLSignatures.length; i++)
	{
		try
		{
			var xmlhttp = new ActiveXObject(arrXMLSignatures[i]);
			return xmlhttp;
		}
		catch(e)
		{
			// ignore
		}
	}

	// 2nd try to get HTTP Object from Javascript Libraries
	if(typeof XMLHttpRequest == "object")
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlhttp = false;
		}
	}

	// If all fails, throw an exception
	throw new Error("MSXML is not installed on your system");
}


// #################################################################
// Function:	addURLParams()
// Arguments:	sURL -> String: Static URL being called
//				sParamName -> String: Query String Parameter Key
//				sParamValue -> String: Query String Parameter Value
// Details:		Simple add the Query String to our called URL, encode them first
// #################################################################
function addURLParams(sURL, sParamName, sParamValue)
{
	sURL += ((sURL.indexOf("?") == -1) ? "?" : "&");
	sURL += encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
	return sURL;
}


// #################################################################
// Function:	addPostParams()
// Arguments:	sParams -> String: Resulting Parameter String
//				sParamName -> String: Query String Parameter Key
//				sParamValue -> String: Query String Parameter Value
// Details:		Simple create a Post form variables String
// #################################################################
function addPostParams(sParams, sParamName, sParamValue)
{
	if(sParams.length > 0)
		sParams += "&";

	return sParams + encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
}


// #################################################################
// Function:	debug()
// Arguments:	msg -> String
// Details:		Simple Javascript Debug window
// #################################################################
function debug(msg)
{
	var debugOn = false;
	if(!debugOn)
	{
		//alert(msg);
		return;
	}
	if(!debug._window || debug._window.closed)
	{
		var win = window.open("", null, "width=650,height=550,scrollbars=auto,resizable=no,status=no,location=no,menubar=no,toolbar=no");
		if(!win) return;
		var doc = win.document;
		var str = "";
		str += "<html>";
		str += "<head>";
		str += "<title>";
		str += "Debug Window";
		str += "</title>";
		str += "</head>";
		str += "<body style='";
		str += "color:#445066; ";
		str += "background-color:#FFFFF2; ";
		str += "font: 10px Verdana,Arial,Helvetica,sans-serif; ";
		str += "'>";
		//str += "' onload='window.focus();' onblur='window.focus();'>";
		//str += "<span style='color:#0000FF; font-weight:bold; font-size:10px'>Debug Data:</span>";
		str += "<table style='width:300px; border-bottom:1px solid #CCCCCC'><tr>";
		str += "<td>";
		str += "<span style='color:#0000FF; font-weight:bold; font-size:12px'>Debug Data</span>";
		str += "</td>";
		str += "<td align='right'>";
		str += "<input type='button' value='Reset Window' onclick='div_Debug.innerHTML=\"\";' style='font:10px Verdana,Arial,Helvetica,sans-serif;color:#620000'>";
		str += "</td>";
		str += "</tr></table>";
		str += "</body>";
		str += "</html>";
		doc.write(str);
		doc.close();
		debug._window = win;
		var debugDiv = debug._window.document.body.appendChild(debug._window.document.createElement("DIV"));
		debugDiv.id = "div_Debug";
		debugDiv.style.marginTop = "10px";
		debugDiv.style.width = "638px";
		debugDiv.style.height = "490px";
		debugDiv.style.wordWrap = "break-word";
		debugDiv.style.overflowY = "auto";
	}

	debug._window.document.getElementById('div_Debug').innerHTML += "<BR>" + "=============================================" + "<BR>" + msg;
}


window.onerror = function(err, file, line)
{
	var msg = "<b><u>Exception</u></b> thrown while running the script <BR>"
			+ "<b>Error:</b> " + err + "<BR>"
			+ "<b>Line:</b> " + line + "<BR>"
			+ "<b>File:</b> " + file.split("/").reverse()[0];
}


// #################################################################
// Function:	createButtons
// Arguments:	btnID -> String; Button Image Element ID
//				imgFile -> String; Image File
//				imgDir -> String; Image Directory
//				type -> String; Image File Type
//				disabledFlag -> Boolean; Enabled/Disabled
//				altStr -> String; For default tooltip
// Details:		Dynamically create All the Buttons on the page
// #################################################################
function createButtons(btnID, imgFile, imgDir, fileType, disabledFlag, altStr)
{
	var btn = document.getElementById(btnID);
	if (disabledFlag)
	{
		btn.src = imgDir + imgFile + "_disabled." + fileType;
		btn.onmousedown = btn.onmouseout = btn.onmouseover = btn.onmouseup = null;
		btn.style.cursor = "default";
		btn.disabled = true;
	}
	else
	{
		btn.src = imgDir + imgFile + "_normal." + fileType;
		btn.onmousedown = function() {this.src = imgDir + imgFile + "_pressed." + fileType;};
		btn.onmouseout = function() {this.src = imgDir + imgFile + "_normal." + fileType;};
		btn.onmouseover = function() {this.src = imgDir + imgFile + "_hover." + fileType;};
		btn.onmouseup = function() {this.src = imgDir + imgFile + "_normal." + fileType;};
		btn.style.cursor = "hand";
		btn.disabled = false;
	}
	altStr = new String(altStr);
	if (altStr != 'undefined') btn.alt = altStr;
}

// #################################################################
// Function:	createToggleButtons
// Arguments:	btnID -> String; Button Image Element ID
//				imgFile -> String; Image File
//				imgDir -> String; Image Directory
//				type -> String; Image File Type
//				disabledFlag -> Boolean; Enabled/Disabled
//				altStr -> String; For default tooltip
// Details:		Dynamically create All the Buttons on the page
// #################################################################
function createToggleButtons(btnID, imgFile, imgDir, fileType, disabledFlag, altStr, toggleState)
{
	var btn = document.getElementById(btnID);
	if (disabledFlag)
	{
		btn.src = imgDir + imgFile + "_disabled." + fileType;
		btn.onmousedown = btn.onmouseout = btn.onmouseover = btn.onmouseup = null;
		btn.style.cursor = "default";
		btn.disabled = true;
	}
	else
	{		
		
		if(toggleState)
		{
			btn.src = imgDir + imgFile + "_pressed." + fileType;
			btn.onmousedown = btn.onmouseout = btn.onmouseover = btn.onmouseup = null;
		}
		else
		{
			btn.src = imgDir + imgFile + "_normal." + fileType;
			btn.onmousedown = function() {this.src = imgDir + imgFile + "_pressed." + fileType;};
			btn.onmouseout = function() {this.src = imgDir + imgFile + "_normal." + fileType;};
			btn.onmouseover = function() {this.src = imgDir + imgFile + "_hover." + fileType;};
			btn.onmouseup = function() {this.src = imgDir + imgFile + "_normal." + fileType;};
		}
		btn.style.cursor = "hand";
		btn.disabled = false;
	}
	altStr = new String(altStr);
	if (altStr != 'undefined') btn.alt = altStr;
}

// #################################################################
// Function:	findPosX() & findPosY()
// Arguments:	<None>
// Details:		Utility Functions - To capture the x, y coordinates for any element on the page
// #################################################################
function findPosX(obj, parentID)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			if (obj.id == parentID) break;
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj, parentID)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			if (obj.id == parentID) break;
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function findPos(obj, parentID)
{
	var curleft = curtop = 0;
	if (obj.offsetParent)
	{
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj.offsetParent)
		{
			if (obj.id == parentID) break;
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	return [curleft,curtop];
}

// #################################################################
// Function:	checkNumericKey
// Arguments:	<None>
// Details:		TextBox Validation - Only numbers allowed
// #################################################################
function checkNumericKey()
{
	// Event Code # 9 -> Tab
	// Event Code # 8 -> Backspace
	// Event Code # 46 -> Delete
	if ((event.keyCode != '9') && (event.keyCode != '8') && (event.keyCode != '46'))
	{
		// event is Global Object in IE
		if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105))
			event.returnValue = true;
		else
			event.returnValue = false;
	}
}

// #################################################################
// Function:	defaultEnterKey
// Arguments:	listener -> Function to be invoked
// Details:		Used for textboxes, if Enter is pressed we invoke the listener
// #################################################################
function defaultEnterKey(listener)
{
	// Event Code # 13 -> Enter Key
	if (event.keyCode == '13') listener();
}


// #################################################################
// Function:	trim
// Arguments:	str -> String to be trimmed
// Details:		Heavy duty trim funtion being used throughout
// #################################################################
function trim(str)
{
	return new String(str).replace(/^\s+/, '').replace(/\s+$/, '');
}

// #################################################################
// Function:	getDateTime
// Arguments:	<None>
// Details:		Gets date and time in mm/dd/yyyy hh:mm:ss format
// #################################################################
function getDateTime(dt)
{
	var d = (new String(dt) == 'undefined') ? new Date() : new Date(dt);
	var str = "";
	str += (d.getMonth() + 1).toString().replace(/^(\d)$/, '0$1');
	str += "/";
	str += d.getDate().toString().replace(/^(\d)$/, '0$1');
	str += "/";
	str += d.getFullYear();
	str += " ";
	str += d.getHours().toString().replace(/^(\d)$/, '0$1');
	str += ":";
	str += d.getMinutes().toString().replace(/^(\d)$/, '0$1');
	str += ":";
	str += d.getSeconds().toString().replace(/^(\d)$/, '0$1');

	return str;
}

// #################################################################
// Function:	getDateOnly
// Arguments:	<None>
// Details:		Gets date in mm/dd/yyyy format
// #################################################################
function getDateOnly(dt)
{
	var d = (new String(dt) == 'undefined') ? new Date() : new Date(dt);
	var str = "";
	str += (d.getMonth() + 1).toString().replace(/^(\d)$/, '0$1');
	str += "/";
	str += d.getDate().toString().replace(/^(\d)$/, '0$1');
	str += "/";
	str += d.getFullYear();

	return str;
}

// #################################################################
// Function:	showWait/hideWait
// Arguments:	waitObj, waitString
// Details:		Shows or hides wait signs
// #################################################################
function showWait(waitObj, waitString)
{
	// Show wait sign while loading
	waitObj.style.visibility = "visible";
	document.getElementById(waitObj.labelID).innerHTML = waitString;
}

function hideWait(waitObj)
{
	// Show wait sign while loading
	waitObj.style.visibility = "hidden";
	document.getElementById(waitObj.labelID).innerHTML = "";
}

// #################################################################
// Function:	createModalContainer
// Arguments:	divObj -> The backgorund Div
// Details:		To use this Modal Container Wisely for whole page, you need to have
//				the actual body elements in a div, Pass Div Object when Calling
// #################################################################
var modalParent = null;
var selCol = new Object();
function createModalContainer(divBody)
{
	modalParent = divBody;
	modalParent.style.filter = "alpha(opacity=40)";

	// Make sure all Select Objects are disabled explicitly
	var sels = divBody.getElementsByTagName("SELECT");
	selCol.obj = new Array();
	selCol.objStatus = new Array();
	for (var i = 0; i < sels.length; i++)
	{
		selCol.obj.push(sels[i]);
		selCol.objStatus.push(sels[i].disabled);
		sels[i].disabled = true;
		sels[i].style.visibility = "hidden";     // Stooopid DropDowns
	}
    
	// create the modalContainer div as a child of the BODY element
	var mObj = document.body.appendChild(document.createElement("div"));
	mObj.id = "modalContainer";
	mObj.style.height = document.body.scrollHeight + "px";
    
	return mObj;
}

// #################################################################
// Function:	removeModalContainer
// Arguments:	<None>
// Details:		Removes the Modal View
// #################################################################
function removeModalContainer(mObj)
{	
	if(!mObj) return;
	modalParent.style.filter = "alpha(opacity=100)";
	mObj.removeNode(true);
	var sels = modalParent.getElementsByTagName("SELECT");
	for (var i = 0; i < sels.length; i++)
	{
		for(var j = 0; j < selCol.obj.length; j++)
			if(sels[i] == selCol.obj[j])
			{
			    sels[i].disabled = selCol.objStatus[j];
			    sels[i].style.visibility = "visible";     // Stooopid DropDowns
			}
	}
}

// #################################################################
// Class:		Alerter
// Details:		The usable class, for Custom Alerts. Not modal
// #################################################################

function Alerter()
{
	this.divBody = null;
	this.alertMsg = "";
	this.callBackMethod_OK = null;
	//this.callBackMethod_Cancel = null;
	this.showAlert = function()
	{
		var mObj = createModalContainer(this.divBody);

		var _top = (document.documentElement.clientHeight) * 0.25 + document.documentElement.scrollTop;
		var _left = (document.documentElement.clientWidth) * 0.25 + document.documentElement.scrollLeft;
		var oDiv = mObj.appendChild(document.createElement("DIV"));
		oDiv.className = "divCustomAlert";
		oDiv.style.top = _top;
		oDiv.style.left = _left;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var td = tbl.appendChild(document.createElement("TBODY")).appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdHeaderCustomAlert";
		td.innerHTML = "&nbsp;&nbsp;Warning";

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var tr = tbd.appendChild(document.createElement("TR"));

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyLeftCustomAlert";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "5px";
		var img = iDiv.appendChild(document.createElement("IMG"));
		//img.src = "IMG/AlertPrompt.JPG";
		img.src = Image4.src;

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyRightCustomAlert";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "5px";
		var lbl = iDiv.appendChild(document.createElement("LABEL"));
		lbl.id = "lbl_CustomAlert";
		lbl.className = "lblBodyRightCustomAlert";
		lbl.innerHTML = this.alertMsg;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdBodyBottomCustomAlert";
		var img = td.appendChild(document.createElement("IMG"));
		img.id = "img_AlertOK";
		//img.src = "IMG/OK_normal.JPG";
		img.src = Image2.src;
		img.style.cursor = "hand";
		img.callBackMethod = this.callBackMethod_Ok;
		img.onclick = function(){okAlert(mObj);};

		//td.appendChild(document.createTextNode(" "));

		//img = td.appendChild(document.createElement("IMG"));
		//img.id = "img_AlertCancel";
		//img.src = "IMG/Cancel_normal.JPG";
		//img.src = Image3.src;
		//img.style.cursor = "hand";
		//img.callBackMethod = this.callBackMethod_Cancel;
		//img.onclick = function(){cancelAlert(mObj);};
		createButtons("img_AlertOK", "OK", "IMG/", "jpg", false, "Close Alert");
		//createButtons("img_AlertCancel", "Cancel", "IMG/", "jpg", false, "Close Alert");
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.style.height = "5px";

		window.onresize = window.onscroll = function()
		{
			var _top = (document.documentElement.clientHeight) * 0.40 + document.documentElement.scrollTop;
			var _left = (document.documentElement.clientWidth) * 0.40 + document.documentElement.scrollLeft;
			oDiv.style.top = _top;
			oDiv.style.left = _left;
		};
	}
}

function cancelAlert(mObj)
{
	removeAlert(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod();
}

function okAlert(mObj)
{
	removeAlert(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod();
	//_getChapters();
}

function removeAlert(mObj)
{
	if(mObj) removeModalContainer(mObj);
}


// #################################################################
// Class:		PrompterI
// Details:		The usable class, for Custom Prompts. Not modal
// #################################################################

function PrompterI()
{
	this.divBody = null;
	this.promptMsg = "";
	this.callBackMethod_OK = null;
	this.callBackMethod_Cancel = null;
	this.showPrompt = function()
	{
		var mObj = createModalContainer(this.divBody);

		var _top = (document.documentElement.clientHeight) * 0.25 + document.documentElement.scrollTop;
		var _left = (document.documentElement.clientWidth) * 0.25 + document.documentElement.scrollLeft;		
		var oDiv = mObj.appendChild(document.createElement("DIV"));
		oDiv.className = "divCustomAlert";
		oDiv.style.top = _top;
		oDiv.style.left = _left;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var td = tbl.appendChild(document.createElement("TBODY")).appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdHeaderCustomAlert";
		td.innerHTML = "&nbsp;&nbsp;Warning";

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var tr = tbd.appendChild(document.createElement("TR"));

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyLeftCustomAlert";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "5px";
		var img = iDiv.appendChild(document.createElement("IMG"));
		//img.src = "IMG/AlertPrompt.JPG";
		img.src = Image4.src;

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyRightCustomAlert";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "5px";
		var lbl = iDiv.appendChild(document.createElement("LABEL"));
		lbl.id = "lbl_CustomAlert";
		lbl.className = "lblBodyRightCustomAlert";
		lbl.innerHTML = this.promptMsg;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellSpacing = tbl.cellPadding = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdBodyBottomCustomAlert";
		var img = td.appendChild(document.createElement("IMG"));
		img.id = "img_AlertOK";
		//img.src = "IMG/OK_normal.JPG";
		img.src = Image2.src;
		img.style.cursor = "hand";
		img.callBackMethod = this.callBackMethod_Ok;
		img.onclick = function(){okPromptI(mObj);};

		td.appendChild(document.createTextNode(" "));

		img = td.appendChild(document.createElement("IMG"));
		img.id = "img_AlertCancel";
		//img.src = "IMG/Cancel_normal.JPG";
		img.src = Image3.src;
		img.style.cursor = "hand";
		img.callBackMethod = this.callBackMethod_Cancel;
		img.onclick = function(){cancelPromptI(mObj);};
		createButtons("img_AlertOK", "OK", "IMG/", "jpg", false, "Close Alert");
		createButtons("img_AlertCancel", "Cancel", "IMG/", "jpg", false, "Close Alert");
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.style.height = "5px";

		window.onresize = window.onscroll = function()
		{
			var _top = (document.documentElement.clientHeight) * 0.40 + document.documentElement.scrollTop;
			var _left = (document.documentElement.clientWidth) * 0.40 + document.documentElement.scrollLeft;
			oDiv.style.top = _top;
			oDiv.style.left = _left;
		};
	}
}

function cancelPromptI(mObj)
{
	removePromptI(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod();
}

function okPromptI(mObj)
{
	removePromptI(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod();
	//_getChapters();
}

function removePromptI(mObj)
{
	if(mObj) removeModalContainer(mObj);
}


// #################################################################
// Class:		Prompter
// Details:		The usable class, for Custom Prompts (Radio). Not modal
// #################################################################
function PrompterII()
{
	this.divBody = null;
	this.promptMsg = "";
	this.callBackMethod_Ok = null;
	this.callBackMethod_Cancel = null;
	this.showPrompt = function()
	{
		var mObj = createModalContainer(this.divBody);
		var _top = (document.documentElement.clientHeight) * 0.25 + document.documentElement.scrollTop;
		var _left = (document.documentElement.clientWidth) * 0.25 + document.documentElement.scrollLeft;
		var oDiv = mObj.appendChild(document.createElement("DIV"));
		oDiv.id = "div_CustomPrompt";
		oDiv.className = "divCustomPrompt";
		oDiv.style.top = _top;
		oDiv.style.left = _left;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = "0";
		tbl.cellPadding = "0";
		tbl.cellSpacing = "0";
		var td = tbl.appendChild(document.createElement("TBODY")).appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdHeaderCustomPrompt";
		td.innerHTML = "&nbsp;&nbsp;Prompt";

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = "0";
		tbl.cellPadding = "0";
		tbl.cellSpacing = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var tr = tbd.appendChild(document.createElement("TR"));

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyLeftCustomPrompt";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "5px";
		var img = iDiv.appendChild(document.createElement("IMG"));
		//img.src = "IMG/PromptImage.GIF";
		img.src = Image6.src;
		img.style.width = img.style.height = "45px";

		var td = tr.appendChild(document.createElement("TD"));
		td.className = "tdBodyRightCustomPrompt";
		var iDiv = td.appendChild(document.createElement("DIV"));
		iDiv.style.margin = "15px";
		var lbl = iDiv.appendChild(document.createElement("LABEL"));
		lbl.id = "lbl_CustomAlert";
		lbl.className = "lblBodyRightCustomPrompt";
		lbl.innerHTML = this.promptMsg;

		var tbl = oDiv.appendChild(document.createElement("TABLE"));
		tbl.width = "100%";
		tbl.border = tbl.cellPadding = tbl.cellSpacing = "0";
		var tbd = tbl.appendChild(document.createElement("TBODY"));
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.className = "tdBodyBottomCustomPrompt";
		var img = td.appendChild(document.createElement("IMG"));
		img.id = "img_PromptOK";
		//img.src = "IMG/OK_normal.JPG";
		img.src = Image2.src;
		img.style.cursor = "hand";
		img.callBackMethod = this.callBackMethod_Ok;
		img.onclick = function(){okPromptII(mObj, oDiv);};

		td.appendChild(document.createTextNode(" "));

		img = td.appendChild(document.createElement("IMG"));
		img.id = "img_PromptCancel";
		//img.src = "IMG/Cancel_normal.JPG";
		img.src = Image3.src;
		img.style.cursor = "hand";
		img.callBackMethod = this.callBackMethod_Cancel;
		img.onclick = function(){cancelPromptII(mObj);};
		createButtons("img_PromptOK", "OK", "IMG/", "jpg", false, "Close Prompt");
		createButtons("img_PromptCancel", "Cancel", "IMG/", "jpg", false, "Prompt Alert");
		var td = tbd.appendChild(document.createElement("TR")).appendChild(document.createElement("TD"));
		td.style.height = "5px";

		window.onresize = window.onscroll = function()
		{
			var _top = (document.documentElement.clientHeight) * 0.40 + document.documentElement.scrollTop;
			var _left = (document.documentElement.clientWidth) * 0.40 + document.documentElement.scrollLeft;
			oDiv.style.top = _top;
			oDiv.style.left = _left;
		};
	}
}

function cancelPromptII(mObj)
{
	removePromptII(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod();
}

function okPromptII(mObj, promptDiv)
{
	var selectionStr = "";
	var oInput = promptDiv.getElementsByTagName("INPUT");
	for(var i = 0; i < oInput.length; i++)
	{
		if((oInput[i].type == "radio") && (oInput[i].checked == true))
			selectionStr = oInput[i].value;
	}
	removePromptII(mObj);
	if(event.srcElement.callBackMethod)
		event.srcElement.callBackMethod(selectionStr);
}

function removePromptII(mObj)
{
	if(mObj) removeModalContainer(mObj);
}



// #################################################################
// Function:	ZeroPad
// Arguments:	n -> number to be padded
// Details:		Pads a single digit with a zero
// #################################################################
function ZeroPad(n)
{
	if (n < 10)
		return "0" + n;

	return n;
}

// #################################################################
// Function:	ZeroPad
// Arguments:	str -> str to be padded
// Details:		Pads a single digit with a zero
// #################################################################
function ZeroPad(str)
{
	var foo = new String(str);
	foo = foo.replace(/^(\d)$/, '0$1');
	return foo;
}

// #################################################################
// Function:	toUsaString
// Arguments:	<None>
// Details:		Add a method to Date Class, Returns date in correct format
// #################################################################
Date.prototype.toUsaString = function()
{
	if ( this.getFullYear() == 1969 )
		return "";

	if (this.toString() == "NaN")
		return "";

	return (ZeroPad(this.getMonth() + 1)) + "/" +
		ZeroPad(this.getDate()) + "/" +
		ZeroPad(this.getFullYear()) + " " +
		ZeroPad(this.getHours()) + ":" +
		ZeroPad(this.getMinutes());
}

// #################################################################
// Function:	fadeIn
// Arguments:	obj -> obj to be padded
// Details:		Fade In The object obj
// #################################################################
var _initialOpacity = null;
var _faderTimer = null;
function fadeIn(objID, interval)
{    
    _initialOpacity = 0;
    _faderTimer = setInterval("_StartFadeIn('" + objID + "')", interval);
}

function _StartFadeIn(objID)
{
	var obj = document.getElementById(objID);
	
	if(_initialOpacity >= 100)
		clearInterval(_faderTimer);
	else
		_initialOpacity += 10;
		
	obj.style.filter = "Alpha(Opacity:" + _initialOpacity + ")";
}

function fadeOut(objID, interval)
{    
    _initialOpacity = 100;
    _faderTimer = setInterval("_StartFadeOut('" + objID + "')", interval);
}

function _StartFadeOut(objID)
{
	var obj = document.getElementById(objID);
	
	if(_initialOpacity <= 0)
		clearInterval(_faderTimer);
	else
		_initialOpacity -= 10;
		
	obj.style.filter = "Alpha(Opacity:" + _initialOpacity + ")";
}

// #################################################################
// Function:	_floatImage
// Arguments:	imgID
// Details:		Add an Image, after page load to initiate float on scroll
// #################################################################
var floater = new Object();
function _floatImage(imgID)
{
    var img = $(imgID);  
    floater["Obj_" + imgID] = parseInt(img.style.top);
    
    if(img.style.position == "absolute")
    { 
        window.onscroll = function()
	    {       
		    var _top = floater["Obj_" + imgID] + document.documentElement.scrollTop;
		    img.style.top = _top;
	    };
    }
}

// =================================================================
// Function:	TooltipTxt()
// Arguments:	title -> string
// Returns:     void
// Details:		Returns the appropiate Tooltip text to the Tip method
// =================================================================
function TooltipTxt(title)
{
    switch(title)
    {
        case "SafeSense":
            return "<img src=images/SafeSense.gif align=right> "
                 + "<b>SafeSense&reg; Technology</b>"
                 + "<br />Fellowes SafeSense&reg; stops the shredder automatically when hands get too close to the paper opening.";
        break;  
        
        case "LevelOfSecurity":
            return "<img src=images/CutType.jpg valign=top /> "
                 + "<b>Shredding Cut Type</b><br />"
                 + "Fellowes offers a wide variety of cut types including: "
                 + "<br /><b>StripCut</b> (Basic Security)<br /><b>Cross-Cut</b> (Good Security)"
                 + "<br /><b>Microshred&trade;</b> (Superior Security)<br><br>"
                 + "Whatever your shredding needs are, Fellowes has a solution for you.";
        break; 
        
        case "JamProof":
            return "<img src=images/JamProof.gif valign=top align=right /> "
                 + "<b>Jam Proof System<sup>TM</sup></b><br />"
                 + "Fellowes Jam Proof System<sup>TM</sup> prevents overloads "
                 + "and powers through misfed paper to eliminate frustrating jams.";
        break; 
        
        case "SilentShred":
            return "<img src=images/SilentShred.gif valign=top align=right /> "
                 + "<b>SilentShred<sup>TM</sup> System</b><br />"
                 + "Fellowes SilentShred<sup>TM</sup> Operation "
                 + "shreds quietly for noise reduction in shared workspaces.";
        break; 
        
        case "AutoOil":
            return "<img src=images/Auto_Oil.gif valign=top align=right /> "
                 + "<b>AutoOil<sup>TM</sup> Feature</b><br />"
                 + "AutoOil<sup>TM</sup> feature lubricates the shredder automatically to enhance performance and extend shredder life.";
        break;
        
        default:
            return "Text Not Found";     
    }
} 

// #################################################################
// Function:	_floatImage
// Arguments:	imgID
// Details:		Add an Image, after page load to initiate float on scroll
// #################################################################
function _addToolTipImage()
{
    var _tooltips = document.getElementsByTagName("i");
    //alert(_ttImgs.length);
    
    //&lt;img alt="Get Level Of Security Info" src= "images/SafeSense_Info.gif" style="vertical-align: middle; cursor:hand" onmouseover="Tip(TooltipTxt(\"JamProof\"), WIDTH, 300);" /&gt;
    for(var i =0 ; i < _tooltips.length; i++)
    {       
        if(_tooltips[i].type == "ToolTip")
        {
            var _img = document.createElement("IMG");
            _img.alt = "Get " + _tooltips[i].action + " Info";
            _img.src = "images/information.gif";                     
            _img.className = "ToolTip";
            _tooltips[i].appendChild(_img);
            
            var lbl = document.createElement("LABEL");
            lbl.innerHTML = "Learn More";
            lbl.className = "ToolTip";
            _tooltips[i].appendChild(lbl);
            
            switch(_tooltips[i].action)
            {
                case "SafeSense":
                    _tooltips[i].onmouseover = function(){
                        Tip(TooltipTxt("SafeSense"), WIDTH, 300);
                    }
                break;  
                
                case "MicroShred":
                    _tooltips[i].onmouseover = function(){
                        Tip(TooltipTxt("LevelOfSecurity"), WIDTH, 300);
                    }
                break; 
                
                case "JamProof":
                    _tooltips[i].onmouseover = function(){
                        Tip(TooltipTxt("JamProof"), WIDTH, 300);
                    }
                break;  
                
                case "AutoOil":
                    _tooltips[i].onmouseover = function(){
                        Tip(TooltipTxt("AutoOil"), WIDTH, 300);
                    }
                break;  
            }           
        }
    }
}