


function getRef(obj) { return (typeof obj == "string") ? document.getElementById(obj) : obj; }
	
	
// **** MOUSE EVENT / DRAG AND DROP - BEGIN ************************************
// credited to - http://www.webreference.com/programming/javascript/mk/column2/

document.onmousemove = mouseMove;

function mouseMove(ev){
	ev = ev || window.event;
	var mousePos = mouseCoords(ev);
}

function mouseCoords(ev){
    try {
	    if(ev.pageX || ev.pageY){
		    return {x:ev.pageX, y:ev.pageY};
	    }
	    return {
		    x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		    y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	    };
	}catch(exc) { }
}

// CAPTURE CLICKS
document.onmouseup = mouseUp;
var dragObject = null;

function makeClickable(object){ object.onmousedown = function(){ dragObject = this; } }

function mouseUp(ev){ dragObject = null; }

// MOVE OBJECT

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;

var dragObject  = null;
var mouseOffset = null;

function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseMove(ev){
	ev = ev || window.event;
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		dragObject.style.top = mousePos.y - mouseOffset.y;
		dragObject.style.left = mousePos.x - mouseOffset.x;
		return false;
	}
}

function mouseUp(){
	dragObject = null;
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}


// **** MOUSE EVENT / DRAG AND DROP - END ************************************

	
function Redirect(url) { window.location = url; }

function hideStatus(){window.status = '';}

function SetTabHeight(){
	if (BrowserDetect.browser == "Firefox"){ parent.window.document.getElementById("page").height = document.body.scrollHeight + 1; }
	else{ parent.window.document.getElementById("page").height = document.body.scrollHeight; }
}

function GetDropDownSelectText(s){
	var a = 0;
	var e = document.forms[0].elements[s];
	for (var i=0; i < e.length; i++){
		if (e[i].selected){
			a = e[i].text;
			break;
		}
	}	
	return a;
}

function GetRadioButtonListValue(s){
	var a = 0;
	var e = document.forms[0].elements[s];
	for (var i=0; i < e.length; i++){
		if (e[i].checked){
			a = e[i].value;
			break;
		}
	}
	return a;
}

function GetRadioButtonListText(s){
	var a = 0;
	var e = document.forms[0].elements[s];
	for (var i=0; i < e.length; i++){
		if (e[i].checked){
			alert(e[i].text);
			a = e[i].text;
			break;
		}
	}	
	return a;
}

function SetRadioButtonListValue(s, v){
	var e = document.forms[0].elements[s];
	for (var i=0; i < e.length; i++){
		if (e[i].value == v){ e[i].checked = true; }
		else{ e[i].checked = true; }
	}
}

function SetRadioButtonListDisabled(s, b){
	var e = document.forms[0].elements[s];
	for (var i=0; i < e.length; i++){ e[i].disabled = b; }
}

function showSpecialDescription(i) {		
	document.getElementById("SpecialDescriptionDiv" + i).style.visibility = "visible";
	try {getRef("OverlayDiv").style.display="";}catch(e){}
}

function hideSpecialDescription(i) {
	document.getElementById("SpecialDescriptionDiv" + i).style.visibility = "hidden";
	try {getRef("OverlayDiv").style.display="none";}catch(e){}
}

function ToggleDisplay(s){
    if (getRef(s).style.display == ""){ getRef(s).style.display = "none"; }
	else{ getRef(s).style.display = ""; }
}

function SetClass(obj, className) { obj.className = className; }

function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object()
	this.get=Querystring_get
	if (qs == null) { qs=location.search.substring(1,location.search.length); }
	if (qs.length == 0) return;
// Turn &lt;plus&gt; back to &lt;space&gt;
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&'); // parse out name/value pairs separated via &amp;
// split out each name=value pair
	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 = name; }
		this.params[name] = value
	}
}

function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	var value=this.params[key];
	if (value==null) value=default_;
	return value
}

function IsNumeric(sText) {
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) { IsNumber = false; }
   }
   return IsNumber;
}

function AllowNumbersOnly (bIsInt, myfield, e, dec) {
	var sAllowed;
	var keychar;
	var key;
	if ( bIsInt ) { sAllowed = "0123456789" } else { sAllowed = "0123456789." }	
	if (window.event) key = window.event.keyCode;
	else if (e) key = e.which;
	else return true;
	
	keychar = String.fromCharCode(key);
	// control keys
	// 118 = v for pasting
	if ((key==null) || (key=='.') || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) || (key==118)) return true;
	// numbers
	else if ( ( (sAllowed).indexOf(keychar) > -1) ) return true;
	else return false;
	}
	
function AllowNumbersOnlyStrict (bIsInt, myfield, e, dec) {
	var sAllowed;
	var keychar;
	var key;
	if ( bIsInt ) { sAllowed = "0123456789" } else { sAllowed = "0123456789." }	
	if (window.event) key = window.event.keyCode;
	else if (e) key = e.which;
	else return true;
	keychar = String.fromCharCode(key);
	//alert(key);
	// control keys
	// 8 = delete
	// 118 = v - for pasting 
	if ((key==0) || (key==8) || (key==9) || (key==13) || (key==27) || (key==118)){ return true; }
	// numbers
	//else 
	if ( ( (sAllowed).indexOf(keychar) > -1) ) return true;
	else return false;
	}
	
function GetShortDateString(d){ return (GetShortMonthText(d.getMonth()) + " " + d.getDate() + ", " + d.getFullYear()); }

function GetShortDateStringWithDayOfWeek(d){ return (GetDayOfWeekText(d) + ", " + GetShortMonthText(d.getMonth()) + " " + d.getDate() + ", " + d.getFullYear()); }

function GetShortDateRangeText(s, e){
	if (s.getFullYear() == e.getFullYear()){
		if (s.getMonth() == e.getMonth()){ return (GetShortMonthText(s.getMonth()) + " " + s.getDate() + " - " + e.getDate() + ", " + s.getFullYear()); }
		else{ return (GetShortMonthText(s.getMonth()) + " " + s.getDate() + " - " + GetShortMonthText(e.getMonth()) + " " + e.getDate() + ", " + s.getFullYear()); }
	}
	else{ return (GetShortDateString(s) + " to " + GetShortDateString(e)); }
}

function GetShortDateRangeTextWithDays(s, e){
	var sYear = Number(s.getFullYear());
	var eYear = Number(e.getFullYear());
	var sMonth = Number(s.getMonth());
	var eMonth = Number(e.getMonth());
	var sDay = s.getDate();
	var eDay = e.getDate();
	
	if (sYear == eYear){
		if (sMonth == eMonth){
			var text = GetDayOfWeekText(s) + ", " + GetShortMonthText(sMonth) + " " + sDay + " - " + GetDayOfWeekText(e) + ", " + eDay + ", " + s.getFullYear();
			//alert(text);
			return (text);
		}
		else{
			var text = GetDayOfWeekText(s) + ", " + GetShortMonthText(sMonth) + " " + sDay + " - " + GetDayOfWeekText(e) + ", " + GetShortMonthText(eMonth) + " " + eDay + ", " + s.getFullYear();
			//alert(text);
			return (text);
		}
	}
	else{
		var text = GetShortDateString(s) + " to " + GetShortDateString(e);
		//alert(text)
		return (text); 
	}
}

function GetDayOfWeekText(date){
	/*
	var m = date.getUTCDay();
	if (m==0) {return ("Monday");}
	if (m==1) {return ("Tuesday");}
	if (m==2) {return ("Wednesday");}
	if (m==3) {return ("Thursday");}
	if (m==4) {return ("Friday");}
	if (m==5) {return ("Saturday");}
	if (m==6) {return ("Sunday");}
	*/
	var m = Number(date.getDay());
	if (m==0) {return ("Sunday");}
	if (m==1) {return ("Monday");}
	if (m==2) {return ("Tuesday");}
	if (m==3) {return ("Wednesday");}
	if (m==4) {return ("Thursday");}
	if (m==5) {return ("Friday");}
	if (m==6) {return ("Saturday");}
}

function GetShortMonthText(m){
	if (m==0) {return ("Jan");}
	if (m==1) {return ("Feb");}
	if (m==2) {return ("Mar");}
	if (m==3) {return ("Apr");}
	if (m==4) {return ("May");}
	if (m==5) {return ("Jun");}
	if (m==6) {return ("Jul");}
	if (m==7) {return ("Aug");}
	if (m==8) {return ("Sep");}
	if (m==9) {return ("Oct");}
	if (m==10) {return ("Nov");}
	if (m==11) {return ("Dec");}	
}

String.prototype.trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};

String.prototype.Trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};


function Trim(sString){
	return trim(sString);
}

function trim(sString){
//	while (sString.substring(0,1) == ' '){
//		sString = sString.substring(1, sString.length);
//	}
//	while (sString.substring(sString.length-1, sString.length) == ' '){
//		sString = sString.substring(0,sString.length-1);
//	}
//	return sString;
    return(String(sString).trim());
}



function SetRed(s){
	getRef(s).style.color = "#ff0000";
}
function SetBlack(s){
	getRef(s).style.color = "#000000";
}


function GetRandomNumber(){
    return (Math.floor(Math.random()*1001) + 1);
}

/* URLs - BEGIN ********************************************************************************* */

var WebsiteRegEx = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;

function IsValidURL(s) { return WebsiteRegEx.test(s); }

/* URLs - END *********************************************************************************** */
