/*
browser_check.js.php

Copyright (c) Gareth Hadfield 2008
*/

var IS_IE = IS_IE();
var IS_OPERA = IS_OPERA();
var IS_SAFARI = IS_SAFARI();
var IS_FF = IS_FF();
var IS_CHROME = IS_CHROME();

var IS_SAFARI_MAC = IS_SAFARI_MAC();
var IS_FF_MAC = IS_FF_MAC();

function browser_check(){
  if(IS_IE){

  }
  else if(IS_FF){

  }
  else if(IS_OPERA){

  }
  else if(IS_SAFARI){

  }
}


// version finding functions

function I_VERSION(aSearchString){
  // return the char position in navigator.userAgent of the aSearchString
  var aPos = navigator.userAgent.indexOf(aSearchString);
  var iVersion = -1;
  if(aPos != -1){
    var iVersion = aPos + aSearchString.length;
  }
  return(iVersion);
}

function isNumeric(aString){
  var result = (!isNaN(parseFloat(aString))) || (aString == ".");
  return(result);
}

function find_version(aVersion){
  // return the head of the string aVersion until a non-numeric character is found
  var result = "";
  var aChar;
  for(var i=0; i<aVersion.length; i++){
    aChar = aVersion.substr(i, 1);
    if(isNumeric(aChar)){
      result += aChar;
    }
    else{
      break;
    }
  }
  return(result);
}

// Internet Explorer

function IE_I_VERSION(){
  return(I_VERSION("compatible; MSIE "));
}

function IE_VERSION(){
  return(find_version(navigator.userAgent.substr(IE_I_VERSION())));
}

function IS_IE(){
  return(navigator.appName == "Microsoft Internet Explorer");
}

// Firefox

function FF_I_VERSION(){
  return(I_VERSION("Firefox/"));
}

function FF_VERSION(){
  return(find_version(navigator.userAgent.substr(FF_I_VERSION())));
}

function IS_FF(){
  return(FF_I_VERSION() != -1);
}

// Opera

function OPERA_I_VERSION(){
  return(I_VERSION("Opera/"));
}

function OPERA_VERSION(){
  return(find_version(navigator.userAgent.substr(OPERA_I_VERSION())));
}

function IS_OPERA(){
  return(navigator.appName == "Opera");
}

// Safari

function SAFARI_I_VERSION(){
  return(I_VERSION("Version/"));
}

function SAFARI_VERSION(){
  return(find_version(navigator.userAgent.substr(SAFARI_I_VERSION())));
}

function IS_SAFARI(){
  return((navigator.appName == "Netscape") && (navigator.vendor == "Apple Computer, Inc."));
}

function IS_MAC(){
  var result = (navigator.userAgent.indexOf("Macintosh") != -1);
  return(result);  
}

function IS_SAFARI_MAC(){
  var result = IS_SAFARI && IS_MAC();
  return(result);
}

function IS_FF_MAC(){
  var result = IS_FF && IS_MAC();
  return(result);
}

// Chromium

function CHROME_I_VERSION(){
  return(I_VERSION("Chrome/"));
}

function CHROME_VERSION(){
  return(find_version(navigator.userAgent.substr(CHROME_I_VERSION())));
}

function IS_CHROME(){
  return((navigator.userAgent.indexOf("Chrome/") != -1));
}


// Capability testing

var GLOBAL_CAPABILITY_MESSAGE = "This website requires some JavaScript features that your browser does not support. \nDetails: ";
var GLOBAL_CAPABILITY_ERROR = "";

var CAPABILITY_LIST = new Array(
  "window != undefined",
  "document != undefined",
  "document.createElement != undefined",
  "document.getElementById != undefined",
  "document.body != undefined",
  "document.body.innerHTML != undefined",
  "document.body.setAttribute != undefined",
  "(window.XMLHttpRequest != undefined) || (window.ActiveXObject != undefined)",
  "true"
  );

function check_capability(){
  var result = true;
  for(var i=0; i<CAPABILITY_LIST.length; i++){
    if(!eval(CAPABILITY_LIST[i])){
      result = false;
      GLOBAL_CAPABILITY_ERROR = CAPABILITY_LIST[i];
    }
  }
  return(result);
}

function capability_message(){
  return("" + GLOBAL_CAPABILITY_ERROR + "");
}

function capability_test(){
  // ensure that all the required capabilities are present
  // if not then forward to browser_refer.php

  if(!check_capability()){
    alert(GLOBAL_CAPABILITY_MESSAGE + capability_message());
    document.location = "browser_refer.php";
  }
}
