

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.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 setWidth(id, width) {
	obj = MM_findObj(id);
	if(document.getElementById || document.all){//all the modern browsers
		obj.style.width = width;
	}
	else if(document.layers){//this is NS4
		obj.width = width;
	}  
}


function getWidth(id) {
	obj = MM_findObj(id);
	
	var divWidth;	
    if(obj.offsetWidth) { 
        divWidth = obj.offsetWidth; 
    } else if(obj.style.pixelWidth) { 
        divWidth = obj.style.pixelWidth; 
    } 
    return divWidth;
}


function setHeight(id, height) {
	obj = MM_findObj(id);
	if(document.getElementById || document.all){//all the modern browsers
		obj.style.height = height;
	}
	else if(document.layers){//this is NS4
		obj.height = height;
	}  
}



function getHeight(id) {
	obj = MM_findObj(id);
	
	var divHeight;
    if(obj.offsetHeight) { 
        divHeight = obj.offsetHeight; 
    } else if(obj.style.pixelHeight) { 
        divHeight = obj.style.pixelHeight; 
    } 
    
    return divHeight;
}





function setVis(id, vis, displayNone) {
    if (id != '') {
        if (displayNone == undefined || (displayNone != true && displayNone != false)) {
            displayNone = true;
        }
	    obj = MM_findObj(id);
	    if (obj == undefined) {
	        return;
	    }
	    if(document.getElementById || document.all){//all the modern browsers
		    obj.style.visibility = vis ? "visible" : "hidden";
		    if (displayNone) {
		        obj.style.display = vis ? "block" : "none";
		    }
	    }
	    else if(document.layers){//this is NS4
		    obj.visibility = vis ? "show" : "hide";
		    if (displayNone) {
    		    obj.display = vis ? "block" : "hide";
            }
	    }  
	}
}


function getVis(id) {
	obj = MM_findObj(id);
	
	var vis = true;
	
	if(document.getElementById || document.all){//all the modern browsers
		if (obj.style.visibility == "hidden") {
		    vis = false;
		}
	}
	else if(document.layers){//this is NS4
		if (obj.visibility == "hide") {
		    vis = false;
		}
	}  
	return vis;
}

function toggleVis(id) {
	setVis(id, !getVis(id));
}


var ns = (document.layers)? true:false
var is = (document.all)? true:false
var ns6 = (navigator.appName.indexOf('Netscape') >= 0 && navigator.appVersion.indexOf('5.') ==0)? true:false;

// vars for dhtml dropdown menus
var gn_curr_layer = 0;
var gn_out_layer = 0;
var gn_timer_id;
var gn_timer_len = 500; // 350; // milleseconds
var gn_using_images = false;

function menu_in(div_id) {
	gn_curr_layer = div_id;
	show_layer(div_id);
	stop_timer();
	
	if (gn_curr_layer != gn_out_layer && gn_out_layer != 0) {
		if (gn_using_images) MM_swapImgRestore();
		hide_layer(gn_out_layer);
		// insert image swapping code here if necessary (used for div_id's menu trigger image)
	}
}
function menu_out(div_id) {
	gn_out_layer = div_id;
	start_timer();
}
function start_timer() {
	gn_timer_id = window.setTimeout("timeout()",gn_timer_len);
}
function stop_timer() {
	window.clearTimeout(gn_timer_id);
}
function timeout() {
	if (gn_using_images) MM_swapImgRestore();
	if (gn_out_layer != 0) {
		hide_layer(gn_out_layer);
		gn_out_layer = 0;
		// if (gn_using_images) insert image swapping code here if necessary (used for div_id's menu trigger image)
	}
}

function hide_layer(item) {
	var hidden = (ns)? "hide" : "hidden";
	
	if (ns6) {
		var tmp=document.getElementById(item);
		tmp.style.visibility = hidden;
	} else if (ns){
		document.layers[item].visibility = hidden;
	} else {
		eval(item + ".style.visibility = 'hidden'");
	}
}

function show_layer(item) {
	var visibility = (ns)? "show" : "visible";
	if (ns6) {
		var tmp=document.getElementById(item);
		tmp.style.visibility = visibility;
	} else if (ns){
		document.layers[item].visibility = visibility;
	} else {
	
		eval(item + ".style.visibility = 'visible'");
	}
}























///
/// Replace the string specified in the from variable with the variable in the 
/// to parameter.
///
function strReplace(src, from, to) 
{
	if (from == "")
		return src;

	return _strReplace(src, from, to);
}

// helper function - don't call directly
function _strReplace(src, from, to)
{
	var i = src.indexOf(from);
	if (i == -1) return src;

	var r = "";
	r += src.substring(0,i) + to;
	if(i + from.length < src.length)
		r += _strReplace(src.substring(i + from.length, src.length), from, to);
	return r;
}


function ShowMessage(msg)
{
	msg = strReplace(msg, "<br>", "\n");
	alert(msg)
}

function ShowErrorPopup(msg)
{
	ShowMessage(msg);
}


function CloseForm()
{
	window.close();
    return false;
}

function GetElementById(id)
{
	if(typeof(id) == "object")
		return id;
		
	return MM_findObj(id);
}


function GetElementName(el)
{
	var sReturn = '';
	
	if(typeof(el.id)=='string')
		sReturn = el.id;

	if (el.type == "radio"  || (sReturn.length==0 && typeof(el.name)=='string'))
		sReturn = el.name;

	return sReturn;
}

/// <summary>
/// </summary>
function GetElementData(el)
{

	if(typeof(el) == "string")
		el = GetElementById(el);

	if(!el)
		return null;
		
	var sReturn = null;
	switch(el.type)
	{
		case 'radio':
			sReturn = '0';
			if(el.checked)
				sReturn = el.value;
			break;

		case 'checkbox':
			sReturn = '0';
			if (el.checked)
			{
				sReturn = '1';
				
				// FIX: Check to see if a value exists for each checkbox.
				// If not 0 or blank, then return the value instead of "1"
				// for items checked.
				if(el.value && el.value != "0" && el.value != "")
					sReturn = el.value;
			}
			break;
			
		case 'text':
		case 'textarea':
		case 'password':
		case 'hidden':
		case 'select-one':
			sReturn = el.value;
			break;
		case 'select-multiple':
			var aReturn = new Array();
			var elLen = el.length;
			var opt = el.options;
			for (i=0;i<elLen;i++)
			{
				if (opt[i].selected)
				{
					aReturn.push(opt[i].value + ',');
				}
			}
			
			sReturn = aReturn.join('');
			if (sReturn!=null && sReturn.charAt(sReturn.length-1)==',')
				sReturn = sReturn.substr(0, sReturn.length-1);
			break;
	}
	
	if (typeof(sReturn)=='undefined')
		return null;

	return escape(sReturn).replace(/\+/g,'%2B');
}


/**********************************************************************************************************
 <summary>
	GetFormData function returns data so that it can be posted via AJAX. Data posted via AJAX can
	be accessed from the Request.Form object on the server just like you normally would.
 </summary>

 <returns>string formatted call to AJAX API (name=value&name=value)</returns>
*********************************************************************************************************/
function GetFormData(formnum)
{
	var sReturn='';
	var objName='';
	var objValue='';
	var el;
	var i;
	var s;
	
	if(!formnum || typeof(formnum)=="undefined")
		formnum = 0;
		
	var elBase=document.forms[formnum].elements;
	var elLen =elBase.length;	
	var aReturn =new Array();
	 
	try
	{
	aReturn.push('<root>');
		for(i=0;i<elLen;i++)
		{
			el = elBase[i];		
			
			objName = GetElementName(el);	
			objValue = '';
			

			//exclude all .NET native controls, buttons and images
			if (objName.length>0 
					&& objName!='__VIEWSTATE' && objName!='__EVENTTARGET' && objName!='__EVENTARGUMENT' && objName!='\r\n__VIEWSTATE'
					&& el.type!='submit' && el.type!='reset' && el.type!='image' && el.type!='button')
			{
				if(el.type == 'radio' && el.checked == false)
					continue;

				// Exclude disabled controls, to be consistent with standard HTML form posts and to
				// eliminate data for controls that aren't likely needed.
				if (el.isDisabled)  // Note: isDisabled will be true if the control or a parent element is disabled
					continue;

				objValue = GetElementData(el);

                // <v id="idval">asdfasdfasdf</v>
				aReturn.push('<v id="' + objName + '">' + objValue + '</v>'); 
			}
		}
			aReturn.push('</root>');

	}catch(e){alert('Error Getting Form Data:' + e.message);} 

	sReturn = aReturn.join('');

	if (sReturn.charAt(sReturn.length-1)=='&')
		sReturn = sReturn.substr(0, sReturn.length-1);
	
	return sReturn;
}


/* 
    the following 3 blocks of code allow Firefox to support the outerHTML getter and setter
    functions.  
*/

//if (/Mozilla\/5\.0/.test(navigator.userAgent))
//   document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');

/*
if (whichBrs() == 'Mozilla') {
    document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');
}
*/


// Browser Detection Javascript
// copyright 1 February 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function whichBrs() {
var agt=navigator.userAgent.toLowerCase();
if (agt.indexOf("opera") != -1) return 'Opera';
if (agt.indexOf("staroffice") != -1) return 'Star Office';
if (agt.indexOf("webtv") != -1) return 'WebTV';
if (agt.indexOf("beonex") != -1) return 'Beonex';
if (agt.indexOf("chimera") != -1) return 'Chimera';
if (agt.indexOf("netpositive") != -1) return 'NetPositive';
if (agt.indexOf("phoenix") != -1) return 'Phoenix';
if (agt.indexOf("firefox") != -1) return 'Firefox';
if (agt.indexOf("safari") != -1) return 'Safari';
if (agt.indexOf("skipstone") != -1) return 'SkipStone';
if (agt.indexOf("msie") != -1) return 'Internet Explorer';
if (agt.indexOf("netscape") != -1) return 'Netscape';
if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
if (agt.indexOf('\/') != -1) {
if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') {
return navigator.userAgent.substr(0,agt.indexOf('\/'));}
else return 'Netscape';} else if (agt.indexOf(' ') != -1)
return navigator.userAgent.substr(0,agt.indexOf(' '));
else return navigator.userAgent;
}



function setInnerHTML(obj, str)
{
    try
    {
        if(obj.innerHTML != undefined)
        {
            obj.innerHTML = str;
        }
        else
        {
	        var r = obj.ownerDocument.createRange();
	        r.selectNodeContents(obj);
	        r.deleteContents();
	        var df = r.createContextualFragment(str);
	        obj.appendChild(df);
	    }
    } catch(ex) {return false;}
    	
	return true;
}
  
function setOuterHTML(obj, str) 
{

    try
    {
        if(obj.outerHTML != undefined)
        {
            obj.outerHTML = str;
        }
        else
        {
            var r = obj.ownerDocument.createRange();
            r.setStartBefore(obj);
            var df = r.createContextualFragment(str);
            obj.parentNode.replaceChild(df, obj);
	    }
    } catch(ex) {return false;}
    	
	return true;
}


/*
<APAjax>
<Obj name='jscall'>setVisible('fldid')</Obj>
<Obj name='jsfile'>filename.js</Obj>
<Obj name="rightNavID" type="value">new value</Obj>
<Obj name="rightNavID" type="obj"><!CData[<table><tr><td>hello</td></tr></table>]</Obj>
</APAjax>

	_name = _nodes[i].getAttribute('name');
	_type = _nodes[i].getAttribute('type');
	_value = _nodes[i].text;
*/

function processAjaxResponse(xml)	// xml should be a XML Dom object
{
    var _node;
	var _nodes;
	var _rootnodename = 'APAjax/Obj';
	var _name = '';
	var _type = '';
	var _value = '';
	var _obj;
	var _errmsg = '';
	var _infomsg = '';

	_nodes = Ext.DomQuery.select('//APAjax/Obj', xml)

	for(var i = 0; i < _nodes.length; i++)
	{
	    _node = _nodes[i];
	    
		_name = _node.getAttribute('id');
		_value = ''
		
		var l = _node.childNodes.length;
		for(var x=0; x < l; )
		{
		    _value += _node.childNodes[x].nodeValue;
		    ++x;
		}
		    
		switch(_name)
		{
			case "jscall":
				try
				{
					eval(_value);
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br/>";
					_errmsg += 'Error executing script: ' + _value + '\n' + e.message;
				}
				break;


			case "jsfile":
				try
				{
					_obj = document.createElement('script');
					_obj.type = 'text/javascript';
					_obj.src = _value;
					document.body.appendChild(_obj);
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br/>";
					_errmsg += 'Error registering javascript file: ' + _value + '\n' + e.message;
				}
				break;


			case "showerror":
				if(_errmsg != "")
					_errmsg += "<br/>";
				_errmsg += _value;
				break;

			case "showmsg":
				if(_infomsg != "")
					_infomsg += "<br/>";
				_infomsg += _value;
				break;

			case "close":
				try
				{
					if (_infomsg != "")
					{
						ShowMessage(_infomsg);
						_infomsg = "";
					}
					CloseForm();
				}
				catch(e){}

				break;

			default:
				try
				{
					_type = _nodes[i].getAttribute('type');

					_obj = MM_findObj(_name);
					
					if (_obj && _type=='value')
					{
						_obj.value = _value;
					}
					else if (_obj && _type=='obj')
					{
						if (!_value)  _value = '';
						    
					    if(setOuterHTML(_obj, _value) == false)
					    {
							setInnerHTML(_obj, _value);
						}
					}
				}
				catch(e)
				{
					if(_errmsg != "")
						_errmsg += "<br>";
					_errmsg += 'Error setting/replacing: ' + _name + '\nwith: ' + _value + '\n' + e.message;
				}
				break;
		}
	}

	if(_errmsg != "")  ShowErrorPopup(_errmsg);

	if (_infomsg != "")  ShowMessage(_infomsg);
}


function parseBool(str)
{
	if(!str)
		return null;
		
	switch(str)
	{
		case "0":
		case "false":
			return false;
		default:
			return true;
	}
	return true;
}

function SetElementValue(id, val)
{
	var obj, retValue;
	if(typeof(id) == "object")
		obj = id;
	else
		obj = MM_findObj(id);

	if(!obj)
		return false;
		
	if (obj.tagName == 'SPAN')
		obj.innerText = val;
	else if(obj.type == 'radio' || obj.type=="checkbox" )
		obj.checked = parseBool(val);
    else if (obj.length > 0 && obj[0].type == "radio")
    {
        for (var n=0; n< obj.length; n++)
        {
            if (obj[n].value == val)
            {
                obj[n].checked = true;
                break;
            }
        }
    }
	else if (obj.tagName != "SELECT")
		obj.value = val;
	else 
	{
		val = ('' + val).toLowerCase();  // handle numeric values in null along with strings.
		obj.selectedIndex = -1;

		var optLen = obj.options.length; 
		for (var n=0; n < optLen; n++) 
		{ 
			var opt = obj.options[n];
			if (opt.value.toLowerCase()==val || opt.text.toLowerCase()==val)
			{ 
				obj.selectedIndex = n; 
				break;
			}

		}
	}
	return true;
}


function isBluebox()
 {
    var str = 0;
    
    try {
    var query = window.location.search.substring(1);
    
    if(query != null && query.toLowerCase().indexOf("gentype=bluebox") >= 0)
        str = 1;    
    } catch(e) { 
        //alert("Error: " + e.message);
    }
    
    return str;
}

//SEARCH FUNCTIONS

function SubmitSearch(isBlueBox, searchResultsPageUrl)
{
    if( isBlueBox == "True")
    {
        location.href=searchResultsPageUrl + '&Term=' + document.getElementById('SearchBox').value;
    }
    else
    {
        location.href=searchResultsPageUrl + '?Term=' + document.getElementById('SearchBox').value;
    }
}
function disableEnterKey(e)
{
     var key;

     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}
function searchKeyPress(evt)
{
     // If it's Mozilla/FF use evt; else use window.event
     evt = evt ? evt : event;

     var keyCode = evt.keyCode;

     // figure out which key code goes with which key
     // alert(evt.keyCode);

     if(keyCode == 13)
     {
          // do this if it IS the enter key
          SubmitSearch(false,'SearchResults.aspx');
     }
}