/* author: Andrew Sohn */


/****
 * user variables
 */

var file_path = 'content/';
var file_file;
var nav_first_time = true;
var nav_history = new Array();

//alert if the Ajax response contains JavaScript with errors
var debug = false;

/*
 * end user variables
 ****/


/****
 * globals (do not alter)
 */

var xmlhttp = '';     //Ajax object
var jsError = false;  //did we encounter an error?

/*
 * end globals
 ****/


function noCache(params) {
  return params.concat((params.length>=1)?'&':'?', 'noCache=', (new Date).getTime(), '.', Math.random() * 1234567);
}


/**
 * check for javascript in Ajax response
 */
function ajaxResponseJavascript(target) {
  var scripts = document.getElementById(target).getElementsByTagName('script');
  for (var i = 0; i < scripts.length; i++) {
    if (debug === true) {
      // try to evaluate new javascript. catch and report any errors
      try {
        // invoke any new javascript
        if (jsError === false) {
          eval(scripts[i].innerHTML);
        }
      } catch(err) {
        // sometimes it reports the same error more than once so we're only gonna report the first one
        if (jsError === false) {
          // report error found
          alert("(At least one) JavaScript error in Ajax response.\nError:\n" + err);
        }
        jsError = true;
      }
    } else {
      // invoke any new javascript
      eval(scripts[i].innerHTML);
    }
  }
}


/**
 * Create new Ajax request object (browser detect)
 *
 * @return
 *   Ajax request object
 */
function getXmlHttpRequest() {
  jsError = false;
  
  var http_request = false;
  if (window.XMLHttpRequest) {   // Mozilla, Safari, etc ...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  }
  else if (window.ActiveXObject) {   // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(err) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(err) {
        http_request = false;
      }
    }
  }
  return http_request;
}


/**
 * send GET to <file>
 *
 * @param file
 *   the path to the menu (as it is stored in the database)
 * @param evnt
 *   event
 *
 * @return
 *   void if not false
 */
function ajaxGet(file, evnt) {
  //console.log('current: ' + file);
  //console.log('history: ' + nav_history.join(','));
  if (nav_first_time === true) {
    nav_first_time = false;
    nav_history.push(file);
  } else {
    var backspace = nav_history[nav_history.length-1];
    nav_history.push(file);
    if (typeof window.event == 'undefined'){
      document.onkeypress = function(evnt) {
        var tag = evnt.target.nodeName.toUpperCase();
        if (evnt.target.type) {
          var type = evnt.target.type.toUpperCase();
        }
        if (((tag == 'INPUT') && (type == 'TEXT')) || ((tag == 'INPUT') && (type == 'PASSWORD')) || (tag == 'TEXTAREA')) {
          return evnt.keyCode;
        } else if (evnt.keyCode == 8) {
          if (typeof backspace != 'undefined') {
            nav_history.length -= 2;
            ajaxGet(backspace);
            evnt.preventDefault();
          } else {
            nav_first_time = true;
            nav_history.length = 0;
          }
        }
      };
    } else {
      document.onkeydown = function() {
        var tag = event.srcElement.tagName.toUpperCase();
        if (event.srcElement.type) {
          var type = event.srcElement.type.toUpperCase();
        }
        if (((tag == 'INPUT') && (type == 'TEXT')) || ((tag == 'INPUT') && (type == 'PASSWORD')) || (tag == 'TEXTAREA')) {
          return event.keyCode;
        } else if (event.keyCode == 8) {
          if (typeof backspace != 'undefined') {
            nav_history.length -= 2;
            ajaxGet(backspace);
            event.returnValue = false;
          } else {
            nav_first_time = true;
            nav_history.length = 0;
          }
        }
      };
    }
  }
  
  var navs = document.getElementById('nav').getElementsByTagName('td');
  for (var nav = 0; nav < navs.length; nav++) {
    remClassName(navs[nav], 'nav_active');
  }
  if (document.getElementById('nav_' + file)) {
    addClassName(document.getElementById('nav_' + file), 'nav_active');
  }
  
  xmlhttp = getXmlHttpRequest();
  if (!xmlhttp) return;
  
  file_file = file;
  file = file+'.html';
  
  xmlhttp.open("GET", file_path+file+noCache(''), true);
  xmlhttp.onreadystatechange = printContent;
  xmlhttp.send(null);
  
  if (evnt && evnt.preventDefault()) evnt.preventDefault();
  
  return false;
}


/**
 * handle the response from ajaxGet() or ajaxPost()
 */
function printContent() {
  if (xmlhttp.readyState == 4) {
    try {
      // customizable status handling
      switch (xmlhttp.status) {
        
        // request fulfilled (do not edit this one)
        case 200:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // no content
        case 204:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // bad request
        case 400:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // unauthorized
        case 401:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // forbidden
        case 403:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // page not found
        case 404:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // timeout
        case 408:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
        
        // internal server error
        case 500:
          document.getElementById('content').innerHTML = xmlhttp.responseText;
          break;
      }
    } catch(err) {
      document.getElementById('content').innerHTML = '<center>A problem occured while processing your request.</center>';
      return;
    }
  } else {
    return;
  }
  
  // check for javascript in response
  //ajaxResponseJavascript('content');
  switch (file_file) {
    case 'about':
      showOurBrands(true);
      document.getElementById('content_title').innerHTML = "About Us";
      break;
    case 'contact':
      showOurBrands(false);
      document.getElementById('content_title').innerHTML = "Contact Us";
       break;

    case 'coverage':
      showOurBrands(false);
      document.getElementById('content_title').innerHTML = "Coverage Area";
      coverageHover();
      break;
    case 'investors':
      showOurBrands(false);
      document.getElementById('content_title').innerHTML = "Investors";
      break;
    case 'main':
      showOurBrands(true);
      document.getElementById('content_title').innerHTML = "Welcome";
      break;
    case 'management':
      showOurBrands(false);
      document.getElementById('content_title').innerHTML = "Management";
      break;
    case 'products_services':
      showOurBrands(true);
      document.getElementById('content_title').innerHTML = "Products &amp; Services";
      break;
  }
}

