function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// --- GENERAL - START --- 
function getObject(pObj)
{
	var obj = null;
	switch(typeof(pObj))
	{
		case "string":
			if (document.all)
				obj = document.all.item(pObj);
			else if (document.getElementById)
				obj = document.getElementById(pObj);
			if ((!obj) && (document.getElementsByName))
				obj = document.getElementsByName(pObj).item(0);
			break;
		case "object":
			obj = pObj;
			break;
	}
	return obj;
}

function displayObject(pObj, show)
{
	var obj = null;
	if (!(obj = getObject(pObj)))
		return;

	obj.style.display = show ? "block" : "none";
	obj.style.visibility = show ? "visible" : "hidden";
}

function moveObjectToMouse(pObj, offset, e)
{
	var obj = null;
	var tempX = 0;
	var tempY = 0;

	if (!(obj = getObject(pObj)))
		return;
	if (!e)
		e = window.event;
	
	if (e.pageX || e.pageY)
	{
		tempX = e.pageX;
		tempY = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		if (document.body.scrollLeft || document.body.scrollTop)
		{
			tempX = e.clientX + document.body.scrollLeft;
			tempY = e.clientY + document.body.scrollTop;
		}
		else
		{
			tempX = e.clientX + document.documentElement.scrollLeft;
			tempY = e.clientY + document.documentElement.scrollTop;
		}
	}

	if (tempX < 0)
		tempX = 0;
	if (tempY < 0)
		tempY = 0;
	
	setObjectXY(obj, tempX + offset, tempY + offset);
}

function setObjectXY(pObj, x, y)
{
	var obj = null;
	if (!(obj = getObject(pObj)))
		return;
	
	obj.style.top  = y + "px";
	obj.style.left = x + "px";
}

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');

// _isInteger by Matt Kruse <matt@mattkruse.com> - javascripttoolbox.com
// Utility function for parsing in getDateFromFormat()
function _isInteger(val)
{
	var digits="1234567890";
	for (var i=0; i < val.length; i++)
	{
		if (digits.indexOf(val.charAt(i))==-1)
			return false;
	}
	return true;
}

// _getInt by Matt Kruse - javascripttoolbox.com
// Utility function for parsing in getDateFromFormat()
function _getInt(str,i,minlength,maxlength)
{
	for (var x=maxlength; x>=minlength; x--)
	{
		var token=str.substring(i,i+x);
		if (token.length < minlength)
			return null;
		if (_isInteger(token))
			return token;
	}
	return null;
}

// LZ by Matt Kruse - javascripttoolbox.com
// Utility function to append a 0 to single-digit numbers
function LZ(x)
{
	return(x<0||x>9?"":"0")+x;
}

// formatDate by Matt Kruse - javascripttoolbox.com 
function formatDate(date, format)
{
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;

	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0)
		value["h"]=12;
	else if (H>12)
		value["h"]=H-12;
	else
		value["h"]=H;
	value["hh"]=LZ(value["h"]);
	if (H>11)
		value["K"]=H-12;
	else
		value["K"]=H;
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11)
		value["a"]="PM";
	else
		value["a"]="AM";
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length)
	{
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length))
		{
			token += format.charAt(i_format++);
		}
		if (value[token] != null)
			result = result + value[token];
		else
			result = result + token;
	}
	return result;
}

// Original getDateFromFormat by Matt Kruse <matt@mattkruse.com> - javascripttoolbox.com 
function getDateFromFormat(val,format)
{
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length)
	{
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length))
		{
			token += format.charAt(i_format++);
		}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y")
		{
			if (token=="yyyy")
				x=4;y=4;
			if (token=="yy")
				x=2;y=2;
			if (token=="y")
				x=2;y=4;
			year=_getInt(val,i_val,x,y);
			if (year==null)
				return new Date();
			i_val += year.length;
			if (year.length==2)
			{
				if (year > 70)
					year=1900+(year-0);
				else
					year=2000+(year-0);
			}
		}
		else if (token=="MMM"||token=="NNN")
		{
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++)
			{
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase())
				{
					if (token=="MMM"||(token=="NNN"&&i>11))
					{
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
					}
				}
			}
			if ((month < 1)||(month>12))
				return new Date();
		}
		else if (token=="EE"||token=="E")
		{
			for (var i=0; i<DAY_NAMES.length; i++)
			{
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase())
				{
					i_val += day_name.length;
					break;
				}
			}
		}
		else if (token=="MM"||token=="M")
		{
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12))
				return new Date();
			i_val+=month.length;
		}
		else if (token=="dd"||token=="d")
		{
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31))
				return new Date();
			i_val+=date.length;
		}
		else if (token=="hh"||token=="h")
		{
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12))
				return new Date();
			i_val+=hh.length;
		}
		else if (token=="HH"||token=="H")
		{
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23))
				return new Date();
			i_val+=hh.length;
		}
		else if (token=="KK"||token=="K")
		{
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11))
				return new Date();
			i_val+=hh.length;
		}
		else if (token=="kk"||token=="k")
		{
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24))
				return new Date();
			i_val+=hh.length;hh--;
		}
		else if (token=="mm"||token=="m")
		{
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59))
				return new Date();
			i_val+=mm.length;
		}
		else if (token=="ss"||token=="s")
		{
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59))
				return new Date();
			i_val+=ss.length;
		}
		else if (token=="a")
		{
			if (val.substring(i_val,i_val+2).toLowerCase()=="am")
				ampm="AM";
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm")
				ampm="PM";
			else
				return new Date();
			i_val+=2;
		}
		else
		{
			if (val.substring(i_val,i_val+token.length)!=token)
				return new Date();
			else
				i_val+=token.length;
		}
	}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length)
		return new Date();
	// Is date valid for month?
	if (month==2)
	{
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) // leap year
		{ 
			if (date > 29)
				return new Date();
		}
		else
		{
			if (date > 28)
				return new Date();
		}
	}
	if ((month==4)||(month==6)||(month==9)||(month==11))
	{
		if (date > 30)
			return new Date();
	}

	// Correct hours value
	if (hh<12 && ampm=="PM")
		hh=hh-0+12;
	else if (hh>11 && ampm=="AM")
		hh-=12;

	return new Date(year,month-1,date,hh,mm,ss);
}

// --- GENERAL - END --- 
// --- HINT BOX - START --- 
var mouseIsOver = false;
document.onmousemove = mouseMove;

function HintShow(text)
{
	mouseIsOver = true;
	getObject("hintboxtext").innerHTML = text;
	displayObject("hintbox", true);
}

function HintHide()
{
	mouseIsOver = false;
	displayObject("hintbox", false);
}

function mouseMove(e)
{
	if (mouseIsOver)
		moveObjectToMouse("hintbox", 10, e);
}
// --- HINT BOX - OVER --- 
// --- DATEPICKER - START --- 
// Original Datepicker By Julian Robichaux -- http://www.nsftools.com 
var datePickerDivID = "datepicker";

var defaultDateFormat = "MM/dd/yy"
var dateFormat = defaultDateFormat;

function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat)
{
	var targetDateField = getObject(dateFieldName);

	if (!displayBelowThisObject)
		displayBelowThisObject = targetDateField;
	else
		displayBelowThisObject = getObject(displayBelowThisObject);
 
	if (dtFormat)
		dateFormat = dtFormat;
	else
		dateFormat = defaultDateFormat;
 
	var x = displayBelowThisObject.offsetLeft;
	var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
	
	var parent = displayBelowThisObject;
	while (parent.offsetParent)
	{
		parent = parent.offsetParent;
		x += parent.offsetLeft;
		y += parent.offsetTop ;
	}
 
	drawDatePicker(targetDateField, x, y);
}

function drawDatePicker(targetDateField, x, y)
{
	var dt = getDateFromFormat(targetDateField.value, dateFormat);
	var pickerDiv = getObject(datePickerDivID);

	if (!pickerDiv)
	{
		var newNode = document.createElement("div");
		newNode.setAttribute("id", datePickerDivID);
		newNode.setAttribute("class", "dpDiv");
		newNode.setAttribute("style", "visibility: hidden;");
		pickerDiv = document.body.appendChild(newNode);
	}
	
	pickerDiv.style.position = "absolute";
	setObjectXY(pickerDiv, x, y);
	displayObject(pickerDiv, true);	
	pickerDiv.style.zIndex = 10000;
	
	refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}

function refreshDatePicker(dateFieldName, year, month, day)
{
	var thisDay = new Date();
	
	if ((month >= 0) && (year > 0))
		thisDay = new Date(year, month, 1);
	else
	{
		day = thisDay.getDate();
		thisDay.setDate(1);
	}
 
	var crlf = "\r\n";
	var TABLE = "<table cols=7 class='dpTable'>" + crlf;
	var xTABLE = "</table>" + crlf;
	var TR = "<tr class='dpTR'>";
	var TR_title = "<tr class='dpTitleTR'>";
	var TR_days = "<tr class='dpDayTR'>";
	var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
	var xTR = "</tr>" + crlf;

    // leave this tag open, because we'll be adding an onClick event
	var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";

	var TD_title = "<td colspan=5 class='dpTitleTD'>";
	var TD_buttons = "<td class='dpButtonTD'>";
	var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
	var TD_days = "<td class='dpDayTD'>";

	// leave this tag open, because we'll be adding an onClick event
	var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";

	var xTD = "</td>" + crlf;
	var DIV_title = "<div class='dpTitleText'>";
	var DIV_selected = "<div class='dpDayHighlight'>";
	var xDIV = "</div>";
 
	// start generating the code for the calendar table
	var html = TABLE;

	// this is the title bar, which displays the month and the buttons to
	// go back to a previous month or forward to the next month
	html += TR_title;
	html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
	html += TD_title + DIV_title + MONTH_NAMES[thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
	html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, "&gt;") + xTD;
	html += xTR;

	// this is the row that indicates which day of the week we're on
	html += TR_days;
	for(i = 7; i < 14; i++)
		html += TD_days + DAY_NAMES[i] + xTD;
	html += xTR;

	// now we'll start populating the table with days of the month
	html += TR;

	// first, the leading blanks
	for (i = 0; i < thisDay.getDay(); i++)
		html += TD + "&nbsp;" + xTD;

	// now, the days of the month
	do
	{
		dayNum = thisDay.getDate();
		TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + formatDate(thisDay, dateFormat) + "');\">";

		if (dayNum == day)
			html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
		else
			html += TD + TD_onclick + dayNum + xTD;

		// if this is a Saturday, start a new row
		if (thisDay.getDay() == 6)
			html += xTR + TR;
	
		// increment the day
		thisDay.setDate(thisDay.getDate() + 1);
	}
	while (thisDay.getDate() > 1);
	
	// fill in any trailing blanks
	if (thisDay.getDay() > 0)
	{
		for (i = 7; i > thisDay.getDay(); i--)
			html += TD + "&nbsp;" + xTD;
	}
	html += xTR;
	
	// add a button to allow the user to easily return to today, or close the calendar
	html += TR_todaybutton + TD_todaybutton;
	html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>today</button>&nbsp;";
	html += "<button class='dpButton' onClick='displayObject(\"" + datePickerDivID + "\", false);'>cancel</button>";
	html += xTD + xTR;
	
	// and finally, close the table
	html += xTABLE;
	
	document.getElementById(datePickerDivID).innerHTML = html;
}


function getButtonCode(dateFieldName, dateVal, adjust, label)
{
	var newMonth = (dateVal.getMonth () + adjust) % 12;
	var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
	if (newMonth < 0)
	{
		newMonth += 12;
		newYear += -1;
	}
	
	return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}


function updateDateField(dateFieldName, dateString)
{
	var targetDateField = getObject(dateFieldName);
	if (dateString)
		targetDateField.value = dateString;
	
	displayObject(datePickerDivID, false);
	
	targetDateField.focus();
	if(targetDateField.onchange)
		targetDateField.onchange();
}
// --- DATEPICKER - END --- 
// --- TEXTAREA - START ---
function selectTextInTextarea(pTextarea)
{
	var textarea = getObject(pTextarea);
	textarea.select();
}
// --- TEXTAREA - END ---
