// JavaScript Document

/*******************************************************************************
 * OLD SCHOOL MACROMEDIA IMAGE SCRIPTS
 *******************************************************************************/
function MM_findObj(n, d) { //v4.01
  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 && d.getElementById) x=d.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];}
}

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];}}
}

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function trimAll(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;
}

function getClientInnerSize(type) 
{
  var w = 0, h = 0;
  if( typeof( window.innerWidth ) == 'number' ) 
  {
    //Non-IE
    w = window.innerWidth;
    h = window.innerHeight;
  } 
  else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
  {
    //IE 6+ in 'standards compliant mode'
    w = document.documentElement.clientWidth;
    h = document.documentElement.clientHeight-16;
  } 
  else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) 
  {
    //IE 4 compatible
    w = document.body.clientWidth;
    h = document.body.clientHeight;
  }
  
  if( type == "width" )
    return w;
  else if( type == "height" ) 
    return h;
  else
    return "undefined";
}

function form_is_modified(oForm)
{
	if(oForm==undefined) return false;
	var el, opt, hasDefault, i = 0, j;
	while (el = oForm.elements[i++]) {
		switch (el.type) {
			case 'text' :
     	case 'textarea' :
     	case 'hidden' :
           	if (!/^\s*$/.test(el.value) && el.value != el.defaultValue) return true;
           	break;
     	case 'checkbox' :
     	case 'radio' :
           	if (el.checked != el.defaultChecked) return true;
           	break;
     	case 'select-one' :
     	case 'select-multiple' :
           	j = 0, hasDefault = false;
           	while (opt = el.options[j++])
                  	if (opt.defaultSelected) hasDefault = true;
           	j = hasDefault ? 0 : 1;
           	while (opt = el.options[j++]) 
                  	if (opt.selected != opt.defaultSelected) return true;
           	break;
		}
	}
	return false;
}

/*******************************************************************************
 * URI PARSER
 * @link http://blog.stevenlevithan.com/archives/parseuri
 *******************************************************************************/
function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};

/*******************************************************************************
 * COOKIES
 *******************************************************************************/
function delCookie(name)
{
  var expdate = new Date();
  expdate.setTime(expdate.getTime() - 1);
  document.cookie = name += "=; expires=" + expdate.toGMTString();
}

/*******************************************************************************
 * OBJECT COORDINATES
 *******************************************************************************/
function getXCoord(obj)
{
	if ('string' == typeof obj)
	obj = document.getElementById(obj);
	var x = 0;
	while (obj != null)
	{
	x += obj.offsetLeft;
	obj = obj.offsetParent;
	}
	return x;
}

function getYCoord(obj)
{
	if ('string' == typeof obj)
	obj = document.getElementById(obj);
	var y = 0;
	while (obj != null)
	{
	y += obj.offsetTop;
	obj = obj.offsetParent;
	}
	return y;
}

/*******************************************************************************
 * DEPRECATED FUNCTIONS
 *******************************************************************************/
/*
 * DEPRECATED!  Use jQuery instead
 * This function is for cross-browser compatibility
 *		var grp_name = getElement("grp_name");
 *		if( !grp_name ) alert('Error getting object: grp_name'); else grp_name.value = "";
 */
function getElement(elementName)
{
	var thisElement = false;

	if (document.getElementById)  // this is the way the standards work
		thisElement = document.getElementById(elementName);
	else if (document.all)        // this is the way old msie versions work
		thisElement = document.all[elementName];
	else if (document.layers)     // this is the way nn4 works
		thisElement = document.layers[elementName];

	return thisElement;
}
