﻿
// Common functions used throughout the application

function showDiv(id)
{    
    var elem = document.getElementById(id);
    if (elem!=null)
        elem.style.display = "block";
}

function hideDiv(id)
{    
    var elem = document.getElementById(id);
    if (elem!=null)
        elem.style.display = "none";
}

function clearDD(id)
{    
     var elem = findElement(id);
     if (elem!=null)
        elem[0].selected=true;
}

function clearText(id)
{    
     var elem = findElement(id);
     if (elem!=null)
        elem.value="";
}

function toggleClearTxt(thisId, div, relatedId)
{
    var thisElem = findElement(thisId);
    if ((thisElem!=null) && (thisElem.checked))
    {
        showDiv(div);
    }
    else
    {
        hideDiv(div);
        clearText(relatedId);
    }    
}

function toggleTxt(thisId, relatedId)
{
    var thisElem = findElement(thisId);
    if (thisElem!=null)
    {
        if (!thisElem.checked)
            clearText(relatedId);
    }    
}

function toggleCheck(thisId, relatedId)
{
    var thisElem = findElement(thisId);
    if (thisElem!=null)
    {
        if (!thisElem.checked)
            clearCheck(relatedId);
    }    
}

function toggleClearList(thisId, div, relatedId)
{
    var thisElem = findElement(thisId);
    var list = findElement(relatedId);
    if ((thisElem!=null) && (thisElem.checked))
    {
        showDiv(div);
    }
    else
    {
        hideDiv(div);
        for (i=0;i<list.length;++i)
            list[i].selected = false;
    }    
}

function clearRadio(id)
{
    var elem = findRadio(id);
    var list = document.getElementsByName(elem.name);
    for (i=0;i<list.length;++i)
        list[i].checked = false;
}

function toggleClearRadio(thisId, div, relatedId)
{
    var thisElem = findElement(thisId);
    if ((thisElem!=null) && (thisElem.checked))
    {
        showDiv(div);
    }
    else
    {
        hideDiv(div);
        clearRadio(relatedId);
    }    
}

function toggleDiv(toggledElementId,divIdToToggle)
{
    var elem = findElement(toggledElementId); 
    if (elem!=null)
    {
	    if (elem.checked) 
	        showDiv(divIdToToggle);
	    else
	        hideDiv(divIdToToggle);
    }
}

function findElement(element)
{
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($n(arguments[i]));
    return elements;
  }
  if (typeof element == 'string') {
    var el = document.getElementById(element);
    if( el ) 
      return el;
  }
  else
    return element;
 
  var regExp = new RegExp('_' + element + '$');
  var formsLength = document.forms.length;  
  for( var i=0; i<formsLength; i++ ) {
    var form = document.forms[i];
    var elementsLength = form.elements.length;
    for( var j=0; j<elementsLength; j++ ) {
      element = form.elements[j];
      if( element.id && element.id.match(regExp) )
      { 
        return element;
        }
    }
  }
 
  return null;
}


function findRadio(element)
{
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($n(arguments[i]));
    return elements;
  }
  if (typeof element == 'string') {
    var el = document.getElementById(element);
    if( el ) 
      return el;
  }
  else
    return element;
 
  var regExp = new RegExp(element + '$');
  var formsLength = document.forms.length;  
  for( var i=0; i<formsLength; i++ ) {
    var form = document.forms[i];
    var elementsLength = form.elements.length;
    for( var j=0; j<elementsLength; j++ ) {        
      element = form.elements[j];
      if( element.name && element.name.match(regExp) )
      { 
        return element;
        }
    }
  }
 
  return null;
}

function clearCheck(elementId)
{
    var elem = findElement(elementId);
    if (elem!=null)
    {   	    
	    elem.checked=false;
	}
}

function clearCheckboxList(elementId, total)
{
    for (var i = 0; i < total; i++) 
     {
    var elem = findElement(elementId + '_' + i);
    if (elem!=null)
    {   	    
	        elem.checked=false;
	}
	}
}

function toggleClearCBList(thisId, div, relatedId, total)
{
    var thisElem = findElement(thisId);
    if ((thisElem!=null) && (thisElem.checked))
    {
        showDiv(div);
    }
    else
    {
        hideDiv(div);
        clearCheckboxList(relatedId, total);
    }    
}

function clearOtherValue(elementId,elementIdTextToClear)
{
   	findElement(elementId).checked=false;
	findElement(elementIdTextToClear).value='';
}

function clearSingleCheck(elementId)
{
	findElement(elementId).checked=false;
}

function openWindow(url,name,height,width,left,top)
{
    if(!width) {width = 625};
    if(!height){height = 625}; 
    if(!left) {left = 60};
    if(!top){top = 60};    
    if (!name) {name='mk'};
    
    name = name.replace(" ","");
   
    if ((window.showModalDialog) && (navigator.appName!="Microsoft Internet Explorer"))
    {
            grayOut(true);
        
            newWindow = window.showModalDialog(url,"name","dialogWidth: " + width + "px;dialogHeight:  " + height + "px;resizable: 1;status: 0;scrollbars: 1;dialogLeft: " + left +"px;dialogTop: " + top + "px");
        
            if (newWindow)
                newWindow.focus();
            
            grayOut(false);
        
    }
    else
    {
        newWindow = window.open(url,name,'width=' + width + ',height='+ height + 
        ',resizable=1,status=0,scrollbars=1,left=' + left +',top=' + top);
            
        if (newWindow)
            newWindow.focus();
        else 
            window.Name.focus();
            
     }
}

function grayOut(vis, options) {
    // Pass true to gray out screen, false to ungray
    // options are optional.  This is a JSON object with the following (optional) properties
    // opacity:0-100         // Lower number = less grayout higher = more of a blackout 
    // zindex: #             // HTML elements with a higher zindex appear on top of the gray out
    // bgcolor: (#xxxxxx)    // Standard RGB Hex color code
    // grayOut(true, {'zindex':'50', 'bgcolor':'#0000FF', 'opacity':'70'});
    // Because options is JSON opacity/zindex/bgcolor are all optional and can appear
    // in any order.  Pass only the properties you need to set.
    var options = options || {}; 
    var zindex = options.zindex || 50;
    var opacity = options.opacity || 70;
    var opaque = (opacity / 100);
    var bgcolor = options.bgcolor || '#000000';
    var dark=document.getElementById('darkenScreenObject');
        var tbody = document.getElementsByTagName("body")[0];
    if (!dark) 
    {
        // The dark layer doesn't exist, it's never been created.  So we'll
        // create it here and apply some basic styles.
        // If you are getting errors in IE see: http://support.microsoft.com/default.aspx/kb/927917
        var tnode = document.createElement('div');           // Create the layer.
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top='0px';                           // In the top
        tnode.style.left='0px';                          // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars            
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='darkenScreenObject';                   // Name it so we can find it later
        tbody.appendChild(tnode);                            // Add it to the web page
        dark=document.getElementById('darkenScreenObject');  // Get the object.
    }
    

    if (vis) 
    {
        var pageWidth="100%";
        var pageHeight=getPageHeightWithScroll();
	if (window.innerHeight>pageHeight)
		pageHeight = window.innerHeight;
	pageHeight = pageHeight + "px";

        //set the shader to cover the entire page and make it visible.
        dark.style.opacity=opaque;                      
        dark.style.MozOpacity=opaque;                   
        dark.style.filter='alpha(opacity='+opacity+')'; 
        dark.style.zIndex=zindex;        
        dark.style.backgroundColor=bgcolor;  
        dark.style.width= pageWidth;
        dark.style.height= pageHeight;
        dark.style.display='block';                          
    } 
    else 
    {
        dark.style.display='none';
    }
}

function showHideDiv(id)
{
    var elem = document.getElementById(id);
    if (elem!=null)
    {
        if (elem.style.display=="none")
            showDiv(id);
        else
            hideDiv(id);
    }
}
 
function getPageHeightWithScroll(){
	if (window.innerHeight && window.scrollMaxY) {// Firefox
		yWithScroll = window.innerHeight + window.scrollMaxY;
//		xWithScroll = window.innerWidth + window.scrollMaxX;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yWithScroll = document.body.scrollHeight;
//		xWithScroll = document.body.scrollWidth;
	} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
		yWithScroll = document.body.offsetHeight;
//		xWithScroll = document.body.offsetWidth;
  	}
//	arrayPageSizeWithScroll = new Array(xWithScroll,yWithScroll);
	//alert( 'The height is ' + yWithScroll + ' and the width is ' + xWithScroll );
//	return arrayPageSizeWithScroll;
    return yWithScroll;
}
    
function saveChart(id)
{
    //Get chart from its ID
    var chartToPrint = getChartFromId(id);
    chartToPrint.saveAsImage();
}    

function PageQuery(q) {
    if(q.length > 1) 
        this.q = q.substring(1, q.length);
    else 
        this.q = null;
    this.keyValuePairs = new Array();
    if(q) {
        for(var i=0; i < this.q.split("&").length; i++) {
            this.keyValuePairs[i] = this.q.split("&")[i];
        }
    }
    this.getKeyValuePairs = function() { return this.keyValuePairs; }
    this.getValue = function(s) {
        for(var j=0; j < this.keyValuePairs.length; j++) {
            if(this.keyValuePairs[j].split("=")[0] == s)
                return this.keyValuePairs[j].split("=")[1];
        }
        return false;
    }

    this.getParameters = function() {
        var a = new Array(this.getLength());
        for(var j=0; j < this.keyValuePairs.length; j++) {
            a[j] = this.keyValuePairs[j].split("=")[0];
        }
        return a;
    }
    this.getLength = function() { return this.keyValuePairs.length; }
}

function queryString(key){
    var page = new PageQuery(window.location.search);
    return unescape(page.getValue(key));
}

function getQueryString(key){
    if(queryString(key)=='false')
    {
        return "";
    }
    else{
        return(queryString(key));
    }
}
    
function autoCompletePopulated(sender, e)
{
  var target = sender.get_completionList();
  var children = target.childNodes;
  var searchText = sender.get_element().value;
  
  for (var i = 0; i < children.length; i++) 
  {
    var child = children[i];
    var values = child._value.split(";");
    
    // Bold the searchText part of the value
    child.innerHTML = "<div class='autocomplete-item'>" + eval("child.innerHTML.replace(/(" + searchText + ")/i, '<b>$1</b>')") + "</div>";
  }
}      

function autoCompleteSelected(sender, e)
{
  var value = e.get_value();
  if (!value) 
  {
    if (e._item.parentElement && e._item.parentElement.tagName == "LI")
      value = e._item.parentElement.attributes["_value"].value;
    else if (e._item.parentElement && e._item.parentElement.parentElement.tagName == "LI")
      value = e._item.parentElement.parentElement.attributes["_value"].value;
    else if (e._item.parentNode && e._item.parentNode.tagName == "LI")
      value = e._item.parentNode._value;
    else if (e._item.parentNode && e._item.parentNode.parentNode.tagName == "LI")
      value = e._item.parentNode.parentNode._value;
    else
      value = "";
  }
  sender.get_element().value = value;
}

//Added functions for displaying grayed text message inside a textbox
var click_track = new Array();
function clickedOnce(text_box) {
  if(click_track[text_box] == undefined) {
    setStyle(text_box, 'color', '#000');
    click_track[text_box] = true;
    text_box.value = "";
  }
}
function setStyle(obj,style,value){
  getRef(obj).style[style]= value;
}
function getRef(obj){
  return (typeof obj == "string") ?
  document.getElementById(obj) : obj;
}