
/*=============================================================================================================================
/
/     Browser Identification
/
/=============================================================================================================================*/

function Browser() {

  var ua, s, i;

  this.isIE    = false;  // Internet Explorer
  this.isOP    = false;  // Opera
  this.isNS    = false;  // Netscape
  this.version = null;

  ua = navigator.userAgent;

  s = "Opera";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isOP = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as Netscape 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }

  s = "MSIE";
  if ((i = ua.indexOf(s))) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }
}

var browser = new Browser();




/*=============================================================================================================================
/
/     Page Size, Scroll Offsets, Element Offsets relative to page, etc
/
/=============================================================================================================================*/


// Return the x coordinate of an element relative to the page.
function getPageOffsetLeft(el) {

      var x = el.offsetLeft;
      if (el.offsetParent != null)
        x += getPageOffsetLeft(el.offsetParent);
      return x;
}

// Return the y coordinate of an element relative to the page.
function getPageOffsetTop(el) {

  var y = el.offsetTop;
  
  if(isNaN(y))
    y=0;
  if (el.offsetParent != null)
    y += getPageOffsetTop(el.offsetParent);
  
    
  return y;
}


//  Width, Height in pixels of the usable part of the web page
//  Will change as user resizes window but not as user scolls within
function pageWidth() {
    return window.innerWidth != null? window.innerWidth: document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth:document.body != null? document.body.clientWidth:null;
}
function pageHeight() {
    return window.innerHeight != null? window.innerHeight: document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight:document.body != null? document.body.clientHeight:null;
}


//  The number of pixels horizontally/vertically that the window has been scrolled
//  An unscrolled window will always yield 0/0
function posLeft() {
    return typeof window.pageXOffset != 'undefined' ? window.pageXOffset:document.documentElement && document.documentElement.scrollLeft? document.documentElement.scrollLeft:document.body.scrollLeft? document.body.scrollLeft:0;
}
function posTop() {
    return typeof window.pageYOffset != 'undefined' ? window.pageYOffset:document.documentElement && document.documentElement.scrollTop? document.documentElement.scrollTop: document.body.scrollTop?document.body.scrollTop:0;
}


/*=============================================================================================================================
/
/     Date Functions: isDate();  dateVal();  dateNext(); dateFormat();
/
/=============================================================================================================================*/


function isDate(dateStr) {

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
    //alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
    return false;}

    month = matchArray[1]; // p@rse date into variables
    day = matchArray[3];
    year = matchArray[5];

    if (month < 1 || month > 12) { // check month range
        //alert("Month must be between 1 and 12.");
        return false;}

    if (day < 1 || day > 31) {
        //alert("Day must be between 1 and 31.");
        return false;}

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        //alert("Month "+month+" doesn`t have 31 days!")
        return false;}

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            //alert("February " + year + " doesn`t have " + day + " days!");
            return false;}
        }
        
    return true; // date is valid

}


function dateVal(dateStr) {

    var dateArr = dateStr.split('/');
    if(dateArr.length==3)
    {
        var dVal = parseInt(dateArr[2],10)*10000 + parseInt(dateArr[0],10)*100 + parseInt(dateArr[1],10);
        return dVal;
    }
    
}


function dateNext(dateStr) {

    var dateArr = dateStr.split('/');
    if(dateArr.length==3)
    {
        var dVal = parseInt(dateArr[1],10);
        var mVal = parseInt(dateArr[0],10);
        var yVal = parseInt(dateArr[2],10);
        
        var dNext, mNext, yNext;

        if(dVal==31 && (mVal==1 || mVal==3 || mVal==5  || mVal==7 || mVal==8 || mVal==10 || mVal==12)) {
            dNext=1;
            mNext=(mVal==12 ? 1 : mVal+1);
            yNext=(mVal==12 ? yVal+1 : yVal);
        }    
        else if(dVal==30 && (mVal==4 || mVal==6 || mVal==9  || mVal==11)) {
            dNext=1;
            mNext=(mVal==12 ? 1 : mVal+1);
            yNext=yVal
        }
        else if((dVal==28 || dVal==29) && mVal==2) {
            dNext=1;
            mNext=3;
            yNext=yVal;
        }
        else {
            dNext=dVal+1;
            mNext=mVal;
            yNext=yVal;
        }

        //return mNext + '/' + dNext + '/' + yNext;
        return right('0'+mNext,2) + '/' + right('0'+dNext,2) + '/' + yNext;
        

    }
    
}


function dateFormat(dateStr) {


    var dateArr = dateStr.split('/');
    if(dateArr.length==3)
    {
        var dVal = parseInt(dateArr[1],10);
        var mVal = parseInt(dateArr[0],10);
        var yVal = parseInt(dateArr[2],10);

        return right('0'+mVal,2) + '/' + right('0'+dVal,2) + '/' + yVal;
    }


}



//-----------------------------------------
// isTime
//-----------------------------------------

function isTime(timeStr){


    var strLen = String(timeStr).length
    
    if (strLen==4 && isInteger(timeStr) && timeStr<2400)
    {

        var hh = left(timeStr,2)    
        var mm = right(timeStr,2)
        
        if ((hh>=0 && hh <=24) && (mm>=0 && mm <=59))
            return true;
        else 
            return false;
    }
    else 
    {
        return false;
    }
    
}







function collectionToArray(col) {
	a = new Array();
	for (i = 0; i < col.length; i++)
		a[a.length] = col[i];
	return a;
}
 
function showData() {
	inputs = collectionToArray(document.getElementsByTagName("input"));
	inputs = inputs.concat(collectionToArray(document.getElementsByTagName("select")));
	buffer = "";
	for (i = 0; i < inputs.length; i++)
		buffer += inputs[i].name + "=" + inputs[i].value + "\n";
	
	alert(buffer);
}

function objContent(obj,txt){

    if (document.all)  //ie
        obj.innerText = txt;
    else //ff
        obj.textContent = txt;   

}

function objContentGet(obj){

    if (document.all)  //ie
        return obj.innerText;
    else //ff
        return obj.textContent;   

}


function left(str, n) {

    if(n<=0)
        return "";
    else if (n>String(str).length)
        return str;
    else
        return String(str).substring(0,n);
      
}      


function right(str, n) {

    if(n<=0)
        return "";
    else if (n>String(str).length)
        return str;
    else
        var iLen=String(str).length;
        return String(str).substring(iLen,iLen-n);
      
}      



//-----------------------------------------
// isNumeric
//-----------------------------------------

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;
   
}


//-----------------------------------------
// isInteger
//-----------------------------------------

function isInteger(sText)
{
   var ValidChars = "0123456789";
   var IsInt=true;
   var Char;

 
   for (i = 0; i < sText.length && IsInt == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsInt = false;
         }
      }
   return IsInt;
   
}




//---------------------------------------------------------------
// rbValue (returns undefined if not radio button is checked)
//---------------------------------------------------------------

function rbValue(objName){


    var rbVal, rbName=objName + '_0', i=0;
    var rbObj = document.getElementById(rbName);
    
    while (rbObj!=undefined)
    {
        if(rbObj.checked)
            rbVal = rbObj.value;    
        
        i=i+1;
        rbName = objName + '_' + i;
        rbObj = document.getElementById(rbName);
    }
    return rbVal;

}


function setCtrVal(objCtrl, ctrlVal) {


    switch(objCtrl.type) {
    
        case 'checkbox':
            
            if(ctrlVal=='' || ctrlVal=='false')
                ctrlVal=false;
            else
                ctrlVal=true;
            objCtrl.checked=ctrlVal;
            break;
            
        case 'text': case 'select-one':
            
            objCtrl.value=ctrlVal;
            break;
            
        
        default:
            
            var rbName, i=0;
            var rbObj=document.getElementById(objCtrl.id + '_0');
            
            while (rbObj!=undefined)
            {
                if(rbObj.value==ctrlVal)
                    rbObj.checked=true;    
                else
                    rbObj.checked=false;

                i=i+1;
                rbName = objCtrl.id + '_' + i;
                rbObj = document.getElementById(rbName);
            }
    }          
}



var submitted = 0;

function DisableButton(buttonID) {
    
        
    if(submitted==0) {
        submitted = 1;
        document.forms[0].submit();
        window.setTimeout("disableButton('" + buttonID + "')", 0);
    }
}

function disableButton(buttonID) {
    document.getElementById(buttonID).disabled=true;
    //document.getElementById(buttonID).text='Submitted...';
}



function ddFilterHide(h){
    tag=document.getElementsByTagName('select');
    for(i=tag.length-1;i>=0;i--)
        if(tag[i].getAttribute('propName')!=undefined)
            tag[i].style.visibility=h;
}



var lastTab=0; 
var nextLinkURL='', prevLinkURL='';

function toggleTabs() {


    var tabNum = 1;
    var ckView = document.getElementById('ckToggleView');
    var tabsOn = ckView.checked;
    var tabObj = document.getElementById('tabs' + tabNum);
    var tbyObj;
    
    var navLinks = document.getElementById('navLinks');
    if(navLinks!=undefined) {
        var nextLink=document.getElementById('nextPID');
        var prevLink=document.getElementById('prevPID');
        if(nextLinkURL=='') {
            nextLinkURL=nextLink.href;
            prevLinkURL=prevLink.href;
        }
        nextLink.href=nextLinkURL + '&cView=' + tabsOn;
        prevLink.href=prevLinkURL + '&cView=' + tabsOn;
    }
        
    
    
    
    while (tabObj!=undefined)
    {
        
        tbyObj = document.getElementById('tbody' + tabNum);
        if(tbyObj!=undefined)
        {
            if(tabsOn)
            {
                tbyObj.style.visibility='hidden';
                tbyObj.style.display='none';
            }
            else
            {
                tbyObj.style.visibility='visible';
                tbyObj.style.display='';
            }
        }
        tabNum=tabNum+1;
        tabObj = document.getElementById('tabs' + tabNum);
    }

    tbyObj = document.getElementById('tbodyTabs');
    if(tabsOn)
    {
        tbyObj.style.visibility='visible';
        tbyObj.style.display='';
        tabClick('tabs' + lastTab);
    }
    else
    {
        tbyObj.style.visibility='hidden';
        tbyObj.style.display='none';
    }

}




function tabClick(tabID) {


    var tabNumSel = parseInt(tabID.substring(4),10);
    lastTab = tabNumSel;
    
    var tabNum = 1;
    var tabObj = document.getElementById(left(tabID,4) + tabNum);
    var tbyObj;
    
    while (tabObj!=undefined)
    {
        
        if(tabObj.className=='spanTabSelected' || tabNumSel==0) {
            tabObj.className='spanTab';
            tbyObj = document.getElementById('tbody' + tabNum);
            if(tbyObj!=undefined){
                //tbyObj.style.display='collapse';  //Does not work in IE
                tbyObj.style.visibility='hidden';
                tbyObj.style.display='none';
            }
        }    
        tabNum=tabNum+1;
        tabObj = document.getElementById(left(tabID,4) + tabNum);
    }
    
    //tabNumSel=0 means initialize, set first tab to selected
    if(tabNumSel==0){
        tabNumSel=1;
        tabID='tabs1';
    }
    
    var tabObjSel = document.getElementById(tabID);
    var tbyObjSel = document.getElementById('tbody' + tabNumSel);

    if(tabObjSel!=undefined)    
        tabObjSel.className='spanTabSelected';    
    if(tbyObjSel!=undefined){
        tbyObjSel.style.visibility='visible';
        tbyObjSel.style.display='';
    }
}




function sumCtrls(ctrlStr) {

    var ctrl, ctrlVal, ctrlSum = 0
    var ctrlArr = ctrlStr.split('~');
    
    for(var i=0;i<ctrlArr.length;i++){
        ctrl = document.getElementById(ctrlArr[i]);
        if(ctrl!=undefined) {
            ctrlVal=parseInt(ctrl.value,10);
            if(!isNaN(ctrlVal) && ctrlVal!=-888)
                ctrlSum=ctrlSum+ctrlVal;
        }   
    }

   return ctrlSum; 
    
    
}    


function ArrLen(arrObj) {

    var len=0;
    for (prop in arrObj) 
        len++;
    return len;

}



function QueryString(key)
{
	var value = null;
	for (var i=0;i<QueryString.keys.length;i++)
	{
		if (QueryString.keys[i]==key)
		{
			value = QueryString.values[i];
			break;
		}
	}
	return value;
}
QueryString.keys = new Array();
QueryString.values = new Array();

function QueryString_Parse()
{
	var query = window.location.search.substring(1);
	var pairs = query.split("&");
	
	for (var i=0;i<pairs.length;i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos >= 0)
		{
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			QueryString.keys[QueryString.keys.length] = argname;
			QueryString.values[QueryString.values.length] = value;	
		}
	}

}
function replaceString(exp1,exp2,exp3){
	while (exp1.indexOf(exp2)!=-1){
		exp1=exp1.replace(exp2,exp3);
	}
	return exp1;
}
QueryString_Parse();
