﻿// Show and hide elements //////////////////////////////////////////////////////////////////////////

function setElementVisibility(elementID, displayStatus)
{
  document.getElementById(elementID).style.display = displayStatus;
}

function showElement(elementID, elementContent)
{
  if (document.getElementById(elementID))
  {
    setElementVisibility(elementID, (((ieVersion() != 7) && (document.getElementById(elementID).nodeName != 'DIV')) ? 'table' : 'block'));
  }

  if (elementContent)
  {
    document.getElementById(elementID).innerHTML = elementContent;
  }
}

function hideElement(elementID)
{
  if (document.getElementById(elementID))
  {
    setElementVisibility(elementID, ((ieVersion() != 7) ? 'none' : ''));
  }
}

function hideErrorElements()
{
  var elements = document.getElementsByTagName('div');
  
  for (var i = 0; i < elements.length; i++)
  {
    if (elements[i].id.substr(0, 3) == 'err')
    {
      hideElement(elements[i].id);
    }
  }
}

// Remove leading and trailing spaces //////////////////////////////////////////////////////////////

function trim(value)
{
  return value.replace(/^\s+|\s+$/g, '');
}

// Show a division's e-mail address (anti-SPAMbot) /////////////////////////////////////////////////

function generateEMailAddress(divisionName, showDivisionName, messageSubject, messageBody)
{
  var emailAddress = divisionName.toLowerCase().replace('support', '') + '@experian.co.za';

  while (emailAddress.indexOf(' ') > -1)
  {
    emailAddress = emailAddress.replace(' ', '');
  }
  
  var link = '<a href="mailto:';
  link += divisionName;
  link += ' <';
  link += emailAddress;
  link += '>';

  if (messageSubject)
  {
    link += '&subject=' + messageSubject;
  }

  if (messageBody)
  {
    link += '&body=' + messageBody;
  }

  link += '" title="'
  link += divisionName;
  link += '">';

  if (! showDivisionName)
  {
    link += emailAddress;
  }
  else
  {
    link += divisionName;
  }
  
  link += '</a>';
  
  return link;
}

function showEMailAddress(divisionName, showDivisionName, messageSubject, messageBody)
{
  document.write(generateEMailAddress(divisionName, showDivisionName, messageSubject, messageBody));
}

// Create a XMLHttpRequest object //////////////////////////////////////////////////////////////////

function createXMLHttpRequest()
{
  xmlhttp = null;

  if (window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari
  {
    xmlhttp = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) // IE5, IE6
  {
    var activexmodes = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];

    for (var i = 0; i < activexmodes.length; i++)
    {
      try
      {
        xmlhttp = new ActiveXObject(activexmodes[i]);
      }
      catch (err)
      {
        // ignore
      }
    }
  }
  else
  {
    throw 'Unable to create a XMLHTTP instance';
  }

  return xmlhttp;
}

// Not set variables - similar to SQL Server's isNull //////////////////////////////////////////////

function notSet(value, defaultValue)
{
  if (value)
  {
    return value;
  }
  else if (defaultValue)
  {
    return defaultValue;
  }
  else
  {
    return null;
  }
}

// Get the base URL for a web page /////////////////////////////////////////////////////////////////

function getBaseURL()
{
  var url = location.href;
  var baseURL = url.substring(0, url.indexOf('/', 10));

  if ((baseURL.toLowerCase().indexOf('localhost') == -1) &&
      (baseURL.toLowerCase().indexOf('wcloete-nb') == -1))
  {
    return (baseURL + '/');
  }
  else
  {
    return (baseURL + '/KreditWebXP/');
  }
}

// Add "indexOf()" to Array ////////////////////////////////////////////////////////////////////////

if (! Array.prototype.indexOf)
{
  Array.prototype.indexOf = function (elt /*, from*/)
  {
    var len = this.length;
    
    var from = Number(arguments[1]) || 0;
    from = (from < 0) ? Math.ceil(from) : Math.floor(from);

    if (from < 0)
    {
      from += len;
    }
    
    for (; from < len; from++)
    {
      if (from in this && this[from] === elt)
      {
        return from;
      }
    }
    
    return -1;
  };
}

// Disable the [Enter] button //////////////////////////////////////////////////////////////////////

function disableEnter()
{
  document.onkeypress = enterPressed;
}

function enterPressed(e)
{
  var keynum;
  
  if (! e)
  {
    var e = window.event;
  }
  
  if (e.keyCode)
  {
    keynum = e.keyCode;
  }
  else if (e.which)
  {
    keynum = e.which;
  }
  
  return (keynum != 13);
}

function enableEnter()
{
  document.onkeypress = null;
}

// Set up the getElementsByClassName function //////////////////////////////////////////////////////

if (! document.getElementsByClassName)
{
  document.getElementsByClassName = function (cl)
  {
    var retnode = [];
    var myclass = new RegExp('\\b' + cl + '\\b');
    var elem = this.getElementsByTagName('*');
    
    for (var i = 0; i < elem.length; i++)
    {
      var classes = elem[i].className;
      
      if (myclass.test(classes))
      {
        retnode.push(elem[i]);
      }
    }
    
    return retnode;
  }
}

// Retrieve an element's child nodes with a specific class name ////////////////////////////////////

function getChildElementsByClassName(elem, className)
{
  var retnode = [];
  var myclass = new RegExp('\\b' + className + '\\b');
  var elems = elem.getElementsByTagName('*');

  for (var i = 0; i < elems.length; i++)
  {
    var classes = elems[i].className;
    
    if (myclass.test(classes))
    {
      retnode.push(elems[i]);
    }
  }
  
  return retnode;
}

// Regular Expression Availability Check ///////////////////////////////////////////////////////////

function isRegExpSupported()
{
  if (window.RegExp)
  {
    var tempStr = 'a';
    var tempReg = new RegExp(tempStr);

    if (tempReg.test(tempStr))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
}

// Input Validation Routines ///////////////////////////////////////////////////////////////////////

function isEmailAddress(value)
{
  value = value.toLowerCase();

  if (! isRegExpSupported())
  {
    return (value.indexOf('.') > 2) && (value.indexOf('@') > 0);
  }
  else
  {
    var reg = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");

    return reg.test(value);
  }
}

function isNumeric(value, allowDecimals)
{
  var validCharacters = '-0123456789';
  var isNumber = true;
  var totalDecimals = 0;

  if (allowDecimals)
  {
    validCharacters = (validCharacters + '.');
  }

  value = trim(value);

  for (var counter = 0; ((counter < value.length) && (isNumber == true) && (totalDecimals < 2)); counter++)
  {
    isNumber = (validCharacters.indexOf(value.charAt(counter)) != -1);

    if ((value.charAt(counter) == '-') && (counter != 0))
    {
      isNumber = false;
    }

    if (value.charAt(counter) == '.')
    {
      totalDecimals = (totalDecimals + 1);
    }
  }

  return (isNumber && (totalDecimals < 2));
}

function isValidDate(year, month, day)
{
  return isDate((year + '/' + month + '/' + day), 'yyyy/MM/dd');
}

// Retrieve the page parameter value ///////////////////////////////////////////////////////////////

function getPageParameterValue(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]" + name + "=([^&#]*)";
  var regex = new RegExp(regexS); 
  var results = regex.exec(window.location.href);
  
  if (results == null)
  {
    return "";
  }
  else
  {
    results[1] = unescape(results[1]);
    
    while (results[1].indexOf('+') >= 0)
    {
      results[1] = results[1].replace('+', ' ');
    }
    
    return results[1];
  }
}

// Test if a value is an array /////////////////////////////////////////////////////////////////////

function isArray(value)
{
  return ((typeof(value) == 'object') && (value instanceof Array));
}

// Retrieve the Internet Explorer version (-1 for other browsers) //////////////////////////////////

function ieVersion()
{
  var rv = -1;

  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

    if (re.exec(ua) != null)
    {
      rv = parseFloat(RegExp.$1);
    }
  }

  return Number(rv);
}

