﻿// JScript File

/*browser detection script*/
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

//------------------------------------------------------------------------------
// Description	: Gets Index
// Parameters	: string
// Returns		: index
//------------------------------------------------------------------------------
function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

//------------------------------------------------------------------------------
// Description	: Hide/Shows Elements
// Parameters	: pnInfoID
// Returns		: nothing
//------------------------------------------------------------------------------
function fnShowInfo(pnInfoID){
	var infoObj=document.getElementById('item_' + pnInfoID.id);
	var infoBtn=pnInfoID;
	if(infoObj.className == 'hidden'){
		if(infoObj.nodeName=='TR'){
			if ((browser == 'Internet Explorer') || (browser == 'Safari')){//for IE..could expand to test for container element type...
				infoObj.style.display = 'block';
			}
			else{//for other browsers, so we can show/hide TR's as a block level element normally...
				infoObj.style.display = 'table-row';
			}
		}else{
			infoObj.style.display = 'block';
		}
		infoObj.className = 'infoObj';
		infoBtn.className = 'infoBtnCollapse';
	}
	else{
		infoObj.style.display = 'none';
		infoObj.className = 'hidden';
		infoBtn.className = 'infoBtnExpand';
		return true;
	}
}

//------------------------------------------------------------------------------
// Description	: Return elements by their classname
// Parameters	: oElm, strTagName, oClassNames
// Returns		: Array of Elements
//------------------------------------------------------------------------------
function getElementsByClassName(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\s)" + oClassNames[i].replace(/-/g, "\-") + "(\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\s)" + oClassNames.replace(/-/g, "\-") + "(\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

//------------------------------------------------------------------------------
// Description	: Adjust Active Navigation
// Parameters	: None
// Returns		: Array of Elements
//------------------------------------------------------------------------------
function adjustActiveNav(){
	if(getElementsByClassName(document,'*','ctl00_TopNav_MainMenu_1 tabSelected ctl00_TopNav_MainMenu_3')){
		var myObj=getElementsByClassName(document,'*','ctl00_TopNav_MainMenu_1 tabSelected ctl00_TopNav_MainMenu_3');
		if(browser=='Internet Explorer'){
			myObj[0].style.borderTop='solid 1px #028ab6';
			myObj[0].style.borderRight='solid 1px #028ab6';
			myObj[0].style.borderBottom='none 0px';
			myObj[0].style.borderLeft='solid 1px #028ab6';
		}else{
			myObj[0].style='border-top: solid 1px #028ab6; border-right: solid 1px #028ab6; border-left: solid 1px #028ab6';
		}
	}
}

//------------------------------------------------------------------------------
// Description	: Formats Paging for GridViews
// Parameters	: None
// Returns		: Boolean
//------------------------------------------------------------------------------
function combineSearchNav(){
	//detBrowser();
	var myObj=getElementsByClassName(document,'*','pageNumber');
	var myHTML='';
	if(browser=='Netscape Navigator'){
		myHtml=myObj[0].childNodes[1].innerHTML;
		//alert(myHtml);
	}
	else{
		if(browser=='Safari'){
			myHtml=myObj[0].childNodes[0].innerHTML;
			//alert(myHtml=myObj[0].childNodes[0].innerHTML);
		}
		else{
			myHtml=myObj[0].childNodes[0].innerHTML;
			//alert(myHtml);	
		}
	}
	var myElement=document.getElementById('pageNumbers');
	myElement.innerHTML=myHtml;
	myObj[0].style.display='none';
	return false;
}

//horrible hack
function combineSearchNav2(){
	//detBrowser();
	
	var myObj=getElementsByClassName(document,'*','pageNumbers2');
	var myHTML='';
	if(browser=='Netscape Navigator'){
		myHtml=myObj[0].childNodes[1].innerHTML;
		//alert(myHtml);
	}
	else{
		if(browser=='Safari'){
			myHtml=myObj[0].childNodes[0].innerHTML;
			//alert(myHtml=myObj[0].childNodes[0].innerHTML);
		}
		else{
			myHtml=myObj[0].childNodes[0].innerHTML;
			//alert(myHtml);	
		}
	}
	var myElement=document.getElementById('ctl00_Content_pageNumber2');
	myElement.innerHTML=myHtml;
	myObj[0].style.display='none';
	return false;
}

//------------------------------------------------------------------------------
// Description	: Formats Paging for GridViews, Top Row Only.
// Parameters	: None
// Returns		: Boolean
//------------------------------------------------------------------------------
function combineSearchNav_Top(){

	//detBrowser();
	var myObj=getElementsByClassName(document,'*','pageNumber');
	if(browser=='Netscape Navigator'){
		myHtml=myObj[0].childNodes[1].innerHTML;
	}
	else{
		if(browser=='Safari'){
			myHtml=myObj[0].childNodes[0].innerHTML;
		}
		else{
			myHtml=myObj[0].childNodes[0].innerHTML;
		}
	}
	var myElement=document.getElementById('pageNumbersTop');
	myElement.innerHTML=myHtml;
	myObj[0].style.display='none';
	return false;
}

function fnShowTabs(pnInfoID){
	var myInfo;
	var myTab;
	var re = /_/gi;
	var newStr = pnInfoID.id.split(re);
	myInfo = document.getElementById(newStr[1]);
	myTab = pnInfoID;
	re = /-/gi;
	if(newStr[1].match(re)){//if correctly named
		var testStr = newStr[1].split(re);
		re = new RegExp(testStr[0], "gi");
		for(i=0; i<infoArray.length; i++){
			if(infoArray[i].match(re)){//matches on section
				var re2 = new RegExp(testStr[1], "gi");
				if(!infoArray[i].match(re2)){//checks for match on element
					//hide old
					var tabStr='tab_'+infoArray[i];
					oldTab=document.getElementById(tabStr);
					oldInfo=document.getElementById(infoArray[i]);
					oldTab.className = 'infoMore';
					oldInfo.style.display = 'none';
					oldInfo.className = '';
					
					//show new elements
					if(myInfo.nodeName=='TR'){
						if ((browser == 'Internet Explorer') || (browser == 'Safari')){//for IE..could expand to test for container element type...
							myInfo.style.display = 'block';
						}
						else{//for other browsers, so we can show/hide TR's as a block level element normally...
							myInfo.style.display = 'table-row';
						}
					}
					else{
						myInfo.style.display = 'block';
					}
					myInfo.className = 'infoExpanded';
					myTab.className = 'infoLess';
							
					//assign current to old
					infoArray[i]=newStr[1];
					return;
				}
			}
		}
	}else{
		alert('tabs not correctly named');
	}
}
//------------------------------------------------------------------------------
// Description	: Checks For Numerics [add to onkeypress of button "return fnIsNumberKey(event)"] 
// Parameters	: evt
// Returns		: Boolean
//------------------------------------------------------------------------------
function fnIsNumberKey(evt)
{
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
        
        return true;
}

//------------------------------------------------------------------------------
// Description	: Radio Button Select
// Parameters	: psParam, psValue
// Returns		: Nothing
//------------------------------------------------------------------------------
function fnSelect(psParam, psValue)
{
	var nCount;
	var oObject = document.forms[0].elements[psParam];

	for(nCount = 0; nCount < oObject.length; nCount++)
	{
		if (oObject[nCount].value == psValue)
		{
			oObject[nCount].checked = true
		}
	}
}

//------------------------------------------------------------------------------
// Description	: Calls Click Event of main Button
// Parameters	: e, buttonid
// Returns		: Boolean
//------------------------------------------------------------------------------
function clickButton(e, buttonid)
{ 
    var evt = e ? e : window.event;
    var bt = document.getElementById(buttonid);
    
    if (bt)
    {
        if (evt.keyCode == 13)
        { 
            bt.click(); 
            return false;   
        } 
    } 
}

//------------------------------------------------------------------------------
// Description	: Calls Click Event of main Button
// Parameters	: control id, state [true,false]
// Returns		: Boolean
//------------------------------------------------------------------------------
function fnCheckBoxListSelect(cbControl, state)
    {   
           var chkBoxList = document.getElementById(cbControl);
            var chkBoxCount= chkBoxList.getElementsByTagName("input");
            for(var i=0;i<chkBoxCount.length;i++)
            {
                chkBoxCount[i].checked = state;
            }
           
            return false; 
    }
 
//------------------------------------------------------------------------------
// Description	: Converts date string to DateTime
// Parameters	: val
// Returns		: Date
//------------------------------------------------------------------------------
function fnParseDate(val) 
        {
	        var preferEuro=(arguments.length==2)?arguments[1]:false;
	        generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
	        monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
	        dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
	        var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
	        var d=null;
	        
	        for (var i=0; i<checkList.length; i++)
	        {
		        var l=window[checkList[i]];
		        for (var j=0; j<l.length; j++) 
		            {
			            d=getDateFromFormat(val,l[j]);
			            if (d!=0) 
			            { 
			                return new Date(d); 
			            }
			        }
		     }
	        return null;
        }
        
//------------------------------------------------------------------------------
// Description	: Calculated Difference Between 2 Dates
// Parameters	: StarteDate, EndDate, Interval, Rounding
// Returns		: Number
//------------------------------------------------------------------------------
function fnDateDiff( start, end, interval, rounding ) {
    
    var iOut = 0;

    // Create 2 error messages, 1 for each argument. 
    var startMsg = "Check the Start Date and End Date\n"
        startMsg += "must be a valid date format.\n\n"
        startMsg += "Please try again." ;                        

    var intervalMsg = "Sorry the dateAdd function only accepts\n"
        intervalMsg += "d, h, m OR s intervals.\n\n"
        intervalMsg += "Please try again." ; 

    var bufferA = Date.parse( start ) ;
    var bufferB = Date.parse( end ) ;          

    // check that the start parameter is a valid Date. 
    if ( isNaN (bufferA) || isNaN (bufferB) ) 
    {
        alert( startMsg ) ;
        return null ;
    }            

    // check that an interval parameter was not numeric. 
    if ( interval.charAt == 'undefined' ) 
    {
        // the user specified an incorrect interval, handle the error. 
        alert( intervalMsg ) ;
        return null ;
    }

    var number = bufferB-bufferA ;    

    // what kind of add to do? 
    switch (interval.charAt(0))
    {
        case 'd': case 'D': 
            iOut = parseInt(number / 86400000) ;
            if(rounding) iOut += parseInt((number % 86400000)/43200001) ;
            break ;
        case 'h': case 'H':
            iOut = parseInt(number / 3600000 ) ;
            if(rounding) iOut += parseInt((number % 3600000)/1800001) ;
            break ;
        case 'm': case 'M':
            iOut = parseInt(number / 60000 ) ;
            if(rounding) iOut += parseInt((number % 60000)/30001) ;
            break ;
        case 's': case 'S':
            iOut = parseInt(number / 1000 ) ;
            if(rounding) iOut += parseInt((number % 1000)/501) ;
            break ;
        default:

        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error.    
        alert(intervalMsg) ;
        return null ;
    }
    return iOut ;
}

function doBoxFocus(divId, nClass, elementId) {

    document.getElementById(divId).className = nClass;
}

function doBoxBlur(divId, nClass, elementId) {
    
    if( document.getElementById(elementId).value == ''){
    
        document.getElementById(divId).className = nClass;
    }
}

