/* -------------------- DOM Methods --------------------*/

function getElement(id)
{
  return document.getElementById(id);
}

function getElementByKeyAndTagName(parent, key, tagName)
{
  var elements = parent.getElementsByTagName(tagName);
  
  for (var k = 0; k < elements.length; k++)
  {
    if (getAttributeValue(elements[k], 'key') == key)
      return elements[k];
  }
  
  if (tagName == 'DIV') // backwards compatiblity because ASP.NET turns DIVs into TABLES.
  {
    elements = parent.getElementsByTagName('TABLE');
    for (var k = 0; k < elements.length; k++)
    {
      if (getAttributeValue(elements[k], 'key') == key)
        return elements[k];
    }
  }
  return null;
}

function getParent(element)
{
  if (element.parentNode)
    return element.parentNode
  else if (element.parentElement)
    return element.parentElement;
  else
    return null;
}

function getAttributeValue(element, attributeName)
{ 
  if (element == null)
    return null;
    
  if (element.attributes)
  {
    var attribute = element.attributes.getNamedItem(attributeName); 
    if (attribute)
      return attribute.value;
  } 
  else if (element.getAttribute)
  {
    return element.getAttribute(attributeName);
  }
  
  return '';
}

function setAttributeValue(element, attributeName, attributeValue)
{
  if (element && element.attributes)
  {
    var attribute = document.createAttribute(attributeName);
    attribute.value = attributeValue;
    element.attributes.setNamedItem(attribute);
  }
}

function getInnerText(element)
{
  if (element.innerText)
    return element.innerText
  else if (document.createRange)
  {
    var range = document.createRange();
    range.selectNodeContents(this);
    return range.toString();
  }
  else
    return '';
}

function setInnerText(element, value)
{
  if (element.innerText)
    element.innerText = value;
  else if (document.createRange)
  {
    var range = document.createRange();
    range.selectNodeContents(element);
    range.deleteContents();
    element.appendChild(document.createTextNode(value));
  }
}

/* -------------------- End DOM Methods -------------------- */

/* -------------------- Event Methods -------------------- */

function addHandler(element, eventName, eventHandler)
{
  if (!element)
    return false;
    
  if (element.addEventListener)
  {
    if (eventName.substring(0,2) == 'on')
      eventName = eventName.substring(2);
    element.addEventListener(eventName, eventHandler, false);
    }
  else if(element.attachEvent)
    element.attachEvent(eventName, eventHandler);
  else
    element[eventName] = eventHandler;
}

function removeHandler(element, eventName, eventHandler)
{
  if (!element)
    return false;
    
  if (element.removeEventListener)
  {
    if (eventName.substring(0,2) == 'on')
      eventName = eventName.substring(2);
    element.removeEventListener(eventName, eventHandler, false);
    }
  else if(element.detachEvent)
    element.detachEvent(eventName, eventHandler);
  else
    element[eventName] = null;
}

function getEvent(e)
{
  if (e)
    return e;
  else
    return window.event;
}

function getSender(e)
{
  if (e.srcElement)
    return e.srcElement
  else
    return e.target;
}

function abortEvent(e)
{
  if (isIE)  
  {  
      e.cancelBubble = true;  
      e.returnValue = false;  
  }  
  else
  { 
    e.stopPropagation();  
    e.preventDefault();  
  }  
}

/* -------------------- End Event Methods -------------------- */

/* --------------------  Style Methods --------------------  */

function getCurrentStyle(element)
{
  if (element == null)
    return null;
    
  if (element.currentStyle)
    return element.currentStyle
  else if (window.getComputedStyle)
    return window.getComputedStyle(element, '');
  else
    return null;
}

/* -------------------- End Style Methods -------------------- */

/* -------------------- Misc Methods -------------------- */

function getQueryStringValue(key)
{
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) 
  {
    var pair = vars[i].split("=");
    if (pair[0] == key) 
      return pair[1];
  } 
  return '';
}

function setFocus(element)
{
  if (element != null && canAcceptFocus(element)) 
  {
     element.focus();
     switch (element.tagName)
     {
       case 'SELECT':
         if (element.options.length > 0)
            element.selectedIndex = 0;
         break;
       
       case 'INPUT':
         switch (getAttributeValue(element, 'type'))
         {
           case '', 'text', 'password':
             element.select();
             break;
         }
         break;
     }
  }
}

function canAcceptFocus(element)
{
  if (element.style.display == 'none' )
    return false;
    
  return true;
}

function isDefined(variableName)
{
  return window[variableName] != null;
}

function toggleVisibility(element, visibleStyle)
{
  if (element == null)
    return;
    
  if (visibleStyle == null)
    visibleStyle = '';
    
  if (getCurrentStyle(element).display == 'none')
    element.style.display = visibleStyle;
  else
    element.style.display = 'none';
}

/* -------------------- End Misc Methods -------------------- */

/* -------------------- String Methods -------------------- */

function trim(text)
{ 
  return text;
  while (text.substring(0,1) == ' ') 
  {
    text = text.substring(1, text.length);
  }
  
  while (text.substring(text.length-1,text.length) == ' ')
  {
    text = text.substring(0, text.length-1);
  }
}

function startsWith(string, value)
{
  if (string == null || value == null)
    return false;
    
  if (string == '' || value == '')
    return false;
    
  if (string.length < value.length)
    return false;
    
  return string.substring(string, value.length) == value;
}

/*
function endsWith(string, value)
{
  if (string == null || value == null)
    return false;
    
  if (string.length < value.length)
    return false;
    
  return (string.substring(string.length - value.length, value.length) == value)
}
*/

/* -------------------- End String Methods -------------------- */

function initValidators() 
{
  if (typeof ValidatorOnLoad == 'undefined' )
    return;
    
  ValidatorOnLoad();
  var i;
  for (i = 0; i < Page_Validators.length; i++) {
      ValidatorValidate(Page_Validators[i]);
  }
  ValidatorUpdateIsValid();
  Page_BlockSubmit = !Page_IsValid;
  
  return Page_IsValid;
}