function treeClick(event) {
    var obj = event.srcElement || event.target;
    var dt = document.getElementById('menukey');
    var selNode = obj;

    selNode.className = 'treenodeselected';
    dt.value = selNode.id;
}   

function getSelectedRblValue(control, bOrdinal) {
    var ctl = document.getElementById(control);
    var value = '';

    if (ctl == null) return;

    var ctlCount = ctl.getElementsByTagName("input");
    for (var i = 0; i < ctlCount.length; i++) {
        if (ctlCount[i].checked == true) {
            if (bOrdinal == undefined) {
                value = ctlCount[i].defaultValue;
            }
            else {
                value = i;
            }
            break;
        }
    }

    return value;
}

function hideRblItem(ctl) {
    ctl.style.display = 'none';
    if (getNextSibling(ctl) != undefined) {
        getNextSibling(ctl).style.display = 'none';
    }
}

function sortByLengthDesc(a, b) {   
    if (a.length > b.length)
        return -1;
    if (a.length < b.length)
        return 1;
    return 0;
}

function sortByLengthAsc(a, b) {
    if (a.length < b.length)
        return -1;
    if (a.length > b.length)
        return 1;
    return 0;    
}

function setItemAccess(ctl, value, disable) {
    var chkBoxList = document.getElementById(ctl);
    var chkBoxCount = chkBoxList.getElementsByTagName("input");

    for (var i = 0; i < chkBoxCount.length; i++) {
        if (chkBoxCount[i].value == value) {
            chkBoxCount[i].disabled = disable;
        }
    }
}   

function getElementsByClassName(className, tag, elm) {
    var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
    var tag = tag || "*";
    var elm = elm || document;
    var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
    var returnElements = [];
    var current;
    var length = elements.length;
    for (var i = 0; i < length; i++) {
        current = elements[i];
        if (testClass.test(current.className)) {
            returnElements.push(current);
        }
    }
    return returnElements;
}

function setLockScreen(str) {
    if (str == undefined) {
        str = 'Processing...';
    }

    var lock = document.getElementById('divLockPane');
    if (lock)
        lock.className = 'LockOn';

    lock.innerHTML = str;

    var div = document.createElement('DIV');
    var img = document.createElement('IMG');
    img.id = 'imgLoading';
    img.src = '/images/loading2.gif';
    img.style.display = 'inline';
    img.style.height = '40px'
    img.style.width = '40px'
    div.appendChild(img);              
    lock.appendChild(div);                       
}

function toggleMenu(div, setState, dataset) {
    if (setState)
        setMenuState(div.id, dataset);

    ctl = getNextSibling(div);

    if (ctl.style.display == '') {
        ctl.style.display = 'none';
        if (div.getElementsByTagName('IMG')[0] != undefined) 
            div.getElementsByTagName('IMG')[0].src = "/images/nolines_plus.gif";
    } else {
        ctl.style.display = '';
        if (div.getElementsByTagName('IMG')[0] != undefined) 
            div.getElementsByTagName('IMG')[0].src = "/images/nolines_minus.gif";
    }
}

function setMenuState(div, dataset) {

    var allcookies = document.cookie;
    var cookies = allcookies.split(';');
    var cookie = null;
    var bCookie = false;

    cookie = getCookieValue('menuState');

    if (!cookie) {
        writePersistentCookie("menuState", 'none|divBenchmark', "days", 60);
        setMenuState();
    }
    else {
        if ((div != null) && (div != undefined)) {

            if (dataset != undefined) {
                div += dataset;
            }

            if (cookie.indexOf('|' + div) == -1) {
                cookie = cookie + '|' + div;
            }
            else {
                cookie = cookie.replace('|' + div, '');
            }

            writePersistentCookie("menuState", cookie, "days", 60);
        }
        else {
            var divs = cookie.replace('menuState=', '').split('|');

            for (var i = 1; i < divs.length; i++) {

                if (divs[i].indexOf('divGroup' + dataset) != -1) {
                    divs[i] = 'divGroup';
                }

                if (divs[i].indexOf('divCC' + dataset) != -1) {
                    divs[i] = 'divCC';
                }

                if (divs[i].indexOf('divCR' + dataset) != -1) {
                    divs[i] = 'divCR';
                }

                var div = document.getElementById(divs[i]);
                if (div != null) {
                    ctl = getNextSibling(div);
                    if (ctl != null) {
                        ctl.style.display = 'none';
                        div.getElementsByTagName('IMG')[0].src = "/images/nolines_plus.gif";
                    }
                }
            }
        }
    }
}

function setSelectedValue(control, value) {
    var ctl = document.getElementById(control);
    if (ctl == null) return;

    var ctlCount = ctl.getElementsByTagName("input");
    for (var i = 0; i < ctlCount.length; i++) {
        if (ctlCount[i].defaultValue == value) {
            ctlCount[i].checked = true;
            break;
        }
    }
}

function msg(message, success) {
    alert(message);
    if (success == undefined) {
        return false;
    }
    else {
        return true;
    }
}

function updateCustomDate(value) {
    if ((value != undefined) && (value != '')) {
        var div = document.getElementById('divDateCustom');

        document.getElementById('divDateRange').style.display = 'none';
        div.innerHTML = 'Last ' + value + ' days';
        div.style.display = '';
    }
}

function updateCurrentDate(value) {
    if (value) {

        document.getElementById('divDateRange').style.display = 'none';
        document.getElementById('M_B_txtDateFrom').value = '';
        document.getElementById('M_B_txtDateTo').value = '';
        document.getElementById('M_B_txtDateEquals').value = '';
        document.getElementById('M_B_txtDateCustom').value = '';
           
        var div = document.getElementById('divDateCustom');
        div.innerHTML = 'Current Date';
        div.style.display = '';
    }
    else {
        document.getElementById('tdDateFrom').innerHTML = 'All Dates';
        document.getElementById('tdDateTo').innerHTML = 'All Dates';
        document.getElementById('divDateRange').style.display  = '';
        document.getElementById('divDateCustom').style.display = 'none';
    }
}

function getDateControlValues(dateFrom, dateTo, dateEquals, dateCustom) {
    var dtValue = '';

    dtValue = document.getElementById(dateFrom).value;
    if (dtValue != '') {
        document.getElementById('tdDateFrom').innerHTML = dtValue;
    }

    dtValue = document.getElementById(dateTo).value;
    if (dtValue != '') {
        document.getElementById('tdDateTo').innerHTML = dtValue;
    }

    dtValue = document.getElementById(dateEquals).value;
    if (dtValue != '') {
        document.getElementById('tdDateFrom').innerHTML = dtValue;
        document.getElementById('tdDateTo').innerHTML = dtValue;
    }

    dtValue = document.getElementById(dateCustom).value;
    if (dtValue != '') {
        updateCustomDate(dtValue);
    }

    if (document.getElementById('M_B_chkDateCurrent') != null ) {
        if (document.getElementById('M_B_chkDateCurrent').checked) {
            updateCurrentDate(true);
        }
    }
    
}

function getCustomDateValue(dateCustom) {
    var ctl = document.getElementById(dateCustom);
    ctl = document.getElementById(dateCustom);

    if (ctl.value != '') {
        updateCustomDate(ctl.value);
    }
}

function days_between(date1, date2) {
    var ONE_DAY = 1000 * 60 * 60 * 24
    var difference_ms = Math.abs(getDate(date1) - getDate(date2))
    return Math.round(difference_ms / ONE_DAY)
}

function getDate(value) {
    var arrDate = value.split('/');
    var year = arrDate[2];
    var month = arrDate[0];
    var day = arrDate[1];
        
    return Date.UTC(year, month, day, 0, 0, 0);
}

function formatDate(datetoformat, adjust) {
    var value;
    
    if (isNaN(datetoformat)) {

        var arrDate = datetoformat.split('/');
        var year = arrDate[2];
        var month = arrDate[0];
        var day = arrDate[1];      

        if (month != 0) {
            month -= 1;
        }
        
        datetoformat = Date.UTC(year, month, day, 0, 0, 0);
    }

    if (isNaN(adjust) == false) {
        var day = 1000 * 60 * 60 * 24;
        datetoformat += day * (adjust-1);
    }

    var adjustDate = new Date();
    adjustDate.setTime(parseInt(datetoformat));

    var year = adjustDate.getFullYear();
    var month = adjustDate.getMonth()+1;
    var day = adjustDate.getDate();

    if (day < 10) { day = '0' + day }
    if (month < 10) { month = '0' + month }
    
    return month + '/' + day + '/' + year;
}



function getNextSibling(n) {
    x = n.nextSibling;
    if (x == null) return null;  
      
    while (x.nodeType != 1) {
        x = x.nextSibling;
    }
    return x;
}

function getPreviousSibling(n) {
    x = n.previousSibling;
    if (x == null) return null;
    
    while (x.nodeType != 1) {
        x = x.previousSibling;
    }
    return x;
}

function getSelectedValue(control, bRadio, text) {
    var re = new RegExp('<(.|\n)+?>');
    var ctl = document.getElementById(control);
    var newtext;
    var value = '';

    if (ctl == null) return;

    if (text == null)
        newtext = '';
    else
        newtext = text;

    if ((ctl.type == "text") || (ctl.type == "hidden")) {
        value = ctl.value;
    }
    else {
        var ctlCount = ctl.getElementsByTagName("input");
        for (var i = 0; i < ctlCount.length; i++) {
            if (ctlCount[i].checked == true) {

                sib = getNextSibling(ctlCount[i]);
                if ((sib.innerText == '') || (sib.innerText == undefined)) {
                    if (sib.innerHTML.match(re)) {
                        var text = sib.innerHTML.replace(re, '');
                        text = text.substring(0, text.indexOf('</'));
                        value += text + newtext + '<br>';
                    }
                    else {
                        value += sib.innerHTML + newtext + '<br>';
                    }
                }
                else {
                    value += sib.innerText + newtext + '<br>';
                }

                if (bRadio == true) break;
            }
        }
    }
    if (value == undefined) value = '';

    return value;
}

function getControlValues(arr) {
    for (var i = 0; i < arr.length; i += 4) {
        str = getSelectedValue(arr[i], arr[i + 2]);

        if (str != undefined) {
            ctl = document.getElementById(arr[i + 1]);

            //if blank, set default value, if any
            if ((str == null) || (str == '')) {
                if (arr[i + 3] != null) str = arr[i + 3];
            }

            if ((ctl.type == "text") || (ctl.type == "hidden")) {
                ctl.value = str;
            }
            else {
                ctl.innerHTML = str;
            }
        }
    }
}

function updateQueryDefault(value, ctl2, str) {
    if (((value == null) || (value == '')) && (str != null)) value = str;

    document.getElementById(ctl2).innerHTML = value;
}

function updateQueryRbl(value, ctl2) {
    document.getElementById(ctl2).innerHTML = value;
}

function toggleDisplayDate(ctl) {
    objLink = document.getElementById(ctl);

    if (objLink.style.display == '') {
        objLink.style.display = 'none';
        hideCalendarControl();

    } else {
        objLink.style.display = '';
    }
}

function hideCalendar() {
    hideMenu('divDate');
    hideCalendarControl();
}

function showMenu(menuName) {
    document.getElementById(menuName).style.display = '';
}

function hideMenu(menuName,element,event) {
    if ( ((element == undefined) && (event == undefined)) || (onParentMouseOut(element,event))) {      
        document.getElementById(menuName).style.display = 'none';
    }
}

function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}


function daysInMonth(month, year) {
    var d = new Date(year, month, 32);
    return 32 - d.getDate();
}

function setCheckBoxList(cbControl, state) {

    var chkBoxList = document.getElementById(cbControl);

    if ((chkBoxList.disabled == undefined) || (chkBoxList.disabled == false)) {
        var chkBoxCount = chkBoxList.getElementsByTagName("input");
        for (var i = 0; i < chkBoxCount.length; i++) {            
            if (chkBoxCount[i].parentNode.parentNode.style.display == '') {
                chkBoxCount[i].checked = state;
            }
        }
    }
}

function CheckLength(length, $message) {

  	var abc=window.event.srcElement.value;
      if (window.event.srcElement.value.length >= length) {
	  		if ($message == null)
	           alert('You have reached the maximum length of ' + length.toString() + ' characters permitted here.');
			else
			   alert($message);
			   
           window.event.srcElement.value=abc.substring(0,length);
           
           return false;                         
       }

 }

function SetFocus(strObjectId) {
	var obj = document.getElementById(strObjectId);
	
	if (obj != null){
		obj.focus();
	}
}

function displayWindow(url, width, height, resizable, scrollbars, status, top, left, params ) {
    if (params != undefined) {
        url += '?' + params;
    }

    var position = '';
    if (top != undefined) {
        position = ',top=' + top;
    }

    if (left != undefined) {
        position += ',left=' + left;
    }

    var Win = window.open(url,"displayWindow",'width=' + width + ',height=' + height + ',resizable=' + resizable + ',scrollbars=' + scrollbars +',status=' +status + 'menubar=no'+position );
    return false;
}

function openWindow(url, left, top, height, width, resize) {

    var win = window.open(url, null, 'left=' + left + ', top=' + top + ', height=' + height + ', width=' + width + ', status=no, resizable=' + resize + ', scrollbars=no, toolbar=no,location=no, menubar= no');
    win.focus();
    return false;
}


/*==============================================================================

    Routines written by John Gardner - 2003 - 2005

    See www.braemoor.co.uk/software for information about more freeware
    available.

================================================================================

Routine to write a session cookie

    Parameters:
        cookieName        Cookie name
        cookieValue       Cookie Value
    
    Return value:
        true              Session cookie written successfullly
        false             Failed - persistent cookies are not enabled

   e.g. if (writeSessionCookie("pans","drizzle") then
           alert ("Session cookie written");
        else
           alert ("Sorry - Session cookies not enabled");
*/

function writeSessionCookie (cookieName, cookieValue) {
  if (testSessionCookie()) {
    document.cookie = escape(cookieName) + "=" + escape(cookieValue) + "; path=/";
    return true;
  }
  else return false;
}

/*==============================================================================

Routine to get the current value of a cookie

    Parameters:
        cookieName        Cookie name
    
    Return value:
        false             Failed - no such cookie
        value             Value of the retrieved cookie

   e.g. if (!getCookieValue("pans") then  {
           cookieValue = getCoookieValue ("pans2);
        }
*/

function getCookieValue (cookieName) {
  var exp = new RegExp (escape(cookieName) + "=([^;]+)");
  if (exp.test (document.cookie + ";")) {
    exp.exec (document.cookie + ";");
    return unescape(RegExp.$1);
  }
  else return false;
}

/*==============================================================================

Routine to see if session cookies are enabled

    Parameters:
        None
    
    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testSessionCookie())
           alert ("Session coookies are enabled");
        else
           alert ("Session coookies are not enabled");
*/

function testSessionCookie () {
  document.cookie ="testSessionCookie=Enabled";
  if (getCookieValue ("testSessionCookie")=="Enabled")
    return true 
  else
    return false;
}

/*==============================================================================

Routine to see of persistent cookies are allowed:

    Parameters:
        None
    
    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testPersistentCookie()) then
           alert ("Persistent coookies are enabled");
        else
           alert ("Persistent coookies are not enabled");
*/

function testPersistentCookie () {
  writePersistentCookie ("testPersistentCookie", "Enabled", "minutes", 1);
  if (getCookieValue ("testPersistentCookie")=="Enabled")
    return true  
  else 
    return false;
}

/*==============================================================================

Routine to write a persistent cookie

    Parameters:
        CookieName        Cookie name
        CookieValue       Cookie Value
        periodType        "years","months","days","hours", "minutes"
        offset            Number of units specified in periodType
    
    Return value:
        true              Persistent cookie written successfullly
        false             Failed - persistent cookies are not enabled
    
    e.g. writePersistentCookie ("Session", id, "years", 1);
*/       

function writePersistentCookie (CookieName, CookieValue, periodType, offset) {

  var expireDate = new Date ();
  offset = offset / 1;
  
  var myPeriodType = periodType;
  switch (myPeriodType.toLowerCase()) {
    case "years": 
     var year = expireDate.getYear();     
     // Note some browsers give only the years since 1900, and some since 0.
     if (year < 1000) year = year + 1900;     
     expireDate.setYear(year + offset);
     break;
    case "months":
      expireDate.setMonth(expireDate.getMonth() + offset);
      break;
    case "days":
      expireDate.setDate(expireDate.getDate() + offset);
      break;
    case "hours":
      expireDate.setHours(expireDate.getHours() + offset);
      break;
    case "minutes":
      expireDate.setMinutes(expireDate.getMinutes() + offset);
      break;
    default:
      alert ("Invalid periodType parameter for writePersistentCookie()");
      break;
  } 
  
  document.cookie = escape(CookieName ) + "=" + escape(CookieValue) + "; expires=" + expireDate.toGMTString() + "; path=/";
}  

/*==============================================================================

Routine to delete a persistent cookie

    Parameters:
        CookieName        Cookie name
    
    Return value:
        true              Persistent cookie marked for deletion
    
    e.g. deleteCookie ("Session");
*/    

function deleteCookie (cookieName) {

  if (getCookieValue (cookieName)) writePersistentCookie (cookieName,"Pending delete","years", -1);  
  return true;     
}

function is_child_of(parent, child) {
    if (child != null) {   
        while (child.parentNode) {
            if ((child = child.parentNode) == parent) {
                return true;
            }
        }
    }
    return false;
}

function onParentMouseOut(element, event, js) {
    var current_mouse_target = null;
    if (event.toElement) {
        current_mouse_target = event.toElement;
    } else if (event.relatedTarget) {
        current_mouse_target = event.relatedTarget;
    }

    if (current_mouse_target == null) {
        return false;
    }

    if (!is_child_of(element, current_mouse_target) && element != current_mouse_target) {
        if (js != undefined) {
            eval (js);            
        } 
        return true;        
    }
    return false;
}

