//
// Global settings...
//
// Supported browsers are...
// - Internet Explorer (Win) >= 5.5,
// - Internet Explorer (Mac) >= 5.0,
// - Firefox >= 1.0,
// - Safari >= 1.2, 
// - Konqueror NOT working,
// - Netscape >= 6.1,
// - Mozilla >= 3.0
// - Opera     NOT working
//
var IE_WIN_MIN_VERSION  = 5.5;
var IE_MAC_MIN_VERSION  = 5.0;
var FF_MIN_VERSION      = 1.0;
var SAF_MIN_VERSION     = 1.2;
var KON_MIN_VERSION     = 100.0; // NOT working
var NET_MIN_VERSION     = 8.1;
var MOZ_MIN_VERSION     = 1.0;
var OPERA_MIN_VERSION   = 100.0; // NOT working
var CHROM_MIN_VERSION   = 0.3;

var FLASH_MIN_VERSION   = 8.0;

function printSupportedBrowsers() {
  document.write('<li><b>Firefox</b> (Windows, MacOS, Linux) Versionen >= ' + FF_MIN_VERSION + '</li>');
  document.write('<li><b>Internet Explorer</b> (Windows) Versionen >= ' + IE_WIN_MIN_VERSION + '</li>');
  document.write('<li><b>Internet Explorer</b> (MacOS) Versionen >= ' + IE_MAC_MIN_VERSION + '</li>');
  document.write('<li><b>Mozilla</b> (Windows, MacOS, Linux) Versionen >= ' + MOZ_MIN_VERSION + '</li>');
  document.write('<li><b>Netscape</b> (Windows, MacOS, Linux) Versionen >= ' + NET_MIN_VERSION + '</li>');
  document.write('<li><b>Safari</b> (MacOS) Versionen >= ' + SAF_MIN_VERSION + '</li>');
  document.write('<li><b>Chrome</b> (Windows) Versionen >= ' + CHROM_MIN_VERSION + '</li>');
  //document.write('<li><b>Opera</b> (Windows, MacOS, Linux) Versionen >= ' + OPERA_MIN_VERSION + '</li>');
  //document.write('<li><b>Konqueror</b> (Linux) Versionen >= ' + KON_MIN_VERSION + '</li>');
}

function printTestedBrowsersAuthormode() {
  document.write('<li><b>Internet Explorer</b> (Windows) Versionen >= ' + IE_WIN_MIN_VERSION + '</li>');
  document.write('<li><b>Firefox</b> (Windows, Linux) Versionen >= ' + FF_MIN_VERSION + '</li>');
}

var browserVersionOK = false;

var hasFlash = false;
var flashversion = 0;
var flashversionarr = new Array();

var hasQuicktime = false;
var qtversion = 0;
var qtversionarr = new Array();

// Supported platforms are Windows, Macintosh, Linux/Unix
var platform = "Unknown";
var nav_platform = navigator.platform.toLowerCase();
if (nav_platform.indexOf("win") >= 0)
  platform = "WIN";
else if (nav_platform.indexOf("mac") >= 0)
  platform = "MAC";
else if ((nav_platform.indexOf("lin") >= 0) || (nav_platform.indexOf("unix") >= 0))
  platform = "LIN";

var browserName = navigator.userAgent.toLowerCase();
var isIE    = ((document.all) && (browserName.indexOf("msie"))) ? true : false;
var isNET   = (browserName.indexOf("netscape") >= 0);
var isSAF   = (browserName.indexOf("safari") >= 0);
var isFF    = (browserName.indexOf("firefox") >= 0);
var isKON   = (browserName.indexOf("konqueror") >= 0);
var isOPERA = (browserName.indexOf("opera") >= 0);
var isCHROM = (browserName.indexOf("chrome") >= 0);
var isMOZ   = ((!isIE) && (!isFF) && (!isNET) && (!isSAF) && (!isKON) && (!isOPERA) && (!isCHROM) && (browserName.indexOf("mozilla") >= 0) && (browserName.indexOf("gecko") >= 0)) ? true : false;

var browserVersion = 0;
var browserString="-";

function getBrowserVersion(ch) {
  var endSliceVersion = browserName.length;
  var beginSliceVersion = parseInt(browserName.lastIndexOf(ch)) +1;
  var version = parseFloat(browserName.slice(beginSliceVersion,endSliceVersion));
  if (version == parseInt(version))
    version += ".0";
  return version;
}

function getBrowserVersionByString(str) {
  var arr = browserName.split(" ");
  for (var i = 0; i < arr.length; i++) {
    if (arr[i].indexOf(str) != -1) {
      var arr2 = arr[i].split("/");
      s = arr2[1];
      return s.slice(parseInt(s.indexOf("."))-1, parseInt(s.indexOf("."))+2);
    }
  }
  return "";
}

if (isMOZ) {
  browserString = "Mozilla";
  browserVersion = getBrowserVersion(":");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= MOZ_MIN_VERSION)
    browserVersionOK = true;
}

if (isOPERA) {
  isIE = false;
  browserString = "Opera";
  if (browserName.indexOf("opera/") != -1)
    browserVersion = getBrowserVersion("/");
  else if (browserName.toLowerCase().indexOf("opera ") != -1)
    browserVersion = getBrowserVersion(" ");
  browserString += " " + browserVersion;
  if (browserVersion >= OPERA_MIN_VERSION)
    browserVersionOK = true;
}

if (isIE) {
  browserVersion = parseFloat(navigator.appVersion.substring(21,25));
  if (platform == "WIN" && browserVersion >= IE_WIN_MIN_VERSION)
    browserVersionOK = true;
  else if (platform == "MAC" && browserVersion >= IE_MAC_MIN_VERSION)
    browserVersionOK = true;
  if (browserVersion == parseInt(browserVersion))
    browserVersion += ".0";
  browserString = "Internet Explorer " + browserVersion;
}

if (isNET) {
  browserString = "Netscape";
  browserVersion = getBrowserVersionByString("netscape");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= NET_MIN_VERSION)
    browserVersionOK = true;
}

if (isSAF) {
  browserString = "Safari";
  //browserVersion = getBrowserVersion("/");
  browserVersion = getBrowserVersionByString("safari");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= SAF_MIN_VERSION)
    browserVersionOK = true;
}

if (isCHROM) {
  browserString = "Chrome";
  browserVersion = getBrowserVersionByString("chrome");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= CHROM_MIN_VERSION)
    browserVersionOK = true;
}

if(isFF) {
  browserString = "Firefox";
  browserVersion = getBrowserVersionByString("firefox");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= FF_MIN_VERSION)
    browserVersionOK = true;
}

if (isKON) {
  browserString = "Konqueror";
  browserVersion = getBrowserVersionByString("konqueror");
  browserString += " " + browserVersion;
  if (parseFloat(browserVersion) >= KON_MIN_VERSION)
    browserVersionOK = true;
}

// Cookie Test
function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";",offset);
  if (endstr == -1)
    endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset,endstr));
}

function getCookie(name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i,j) == arg)
      return getCookieVal(j);
    i = document.cookie.indexOf(" ",i) + 1;
    if (i == 0) break;
  }
  return null;
}
                
function setCookie (name,value) {
  var argv = setCookie.arguments;
  var argc = setCookie.arguments.length;
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
  document.cookie = name + "=" + escape (value) + 
  ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
  ((path == null) ? "" : ("; path=" + path)) +
  ((domain == null) ? "" : ("; domain=" + domain)) +
  ((secure == true) ? "; secure" : "");
}

function cookiesEnabled() {
  var expiretime = new Date(); 
  expiretime.setTime(expiretime.getTime() + (60*1000)); // valid: one minute
  setCookie('testcookie','supported',expiretime);
  if (getCookie('testcookie'))
    return true;
  else
    return false;
}

// Flash Tests 
if (navigator.plugins && navigator.plugins.length) {
  if (navigator.plugins["Shockwave Flash"]) 
    hasFlash = true;
  for (a = 0; a < navigator.plugins.length; a++) {
    if (navigator.plugins[a].name.toLowerCase().indexOf("flash") != -1) {
      descr = navigator.plugins[a].description;
      if (descr && descr.indexOf(" ")) {
        arr = descr.split(" ");
        for (i = 0; i < arr.length; i++) {
          if (!isNaN(parseFloat(arr[i]))) {
            flashversionarr.push(parseFloat(arr[i]));
          }
        }
      }
    }
  }
  if (!hasFlash && navigator.plugins["Shockwave Flash 2.0"]) {
    hasFlash = true;
    flashversion = 2.0;
  }
} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
  x = navigator.mimeTypes['application/x-shockwave-flash'];
  if (x && x.enabledPlugin) {
    hasFlash = true;
    flashversion = "?";
  }
}

// Flash Test only for IE
for (i = 0; i < 11; i++) {
  try {
    flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
    if (flash) {
      hasFlash = true;
      flashversionarr.push(i);
    }
  } catch(e) {
  }
}
// Last value is highest version
if (flashversionarr) 
  flashversion = flashversionarr[flashversionarr.length-1];
if (flashversion == parseInt(flashversion))
  flashversion += ".0";
  
// Quicktime
if (navigator.plugins && navigator.plugins.length) {
  for (a = 0; a < navigator.plugins.length; a++) {
    if (navigator.plugins[a].name.indexOf('QuickTime') >= 0) {
      hasQuicktime = true;
      name = navigator.plugins[a].name;
      if (name && name.indexOf(" ")) {
        arr = name.split(" ");
        if (!isNaN(parseFloat(arr[arr.length-1]))) {
          qtversionarr.push(parseFloat(arr[arr.length-1]));
        }
      }
    }
  }
} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
  x = navigator.mimeTypes['video/quicktime'];
  if (x && x.enabledPlugin) {
    hasQuicktime = true;
    qtversion = "?";
  }
}

for (i = 0; i < 11; i++) {
  try {
    qt = new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck." + i);
    if (qt) {
      hasQuicktime = true;
      qtversionarr.push(i);
    }
  } catch(e) {
  }
}

// Last value is highest version
if (qtversionarr[0]) 
  qtversion = qtversionarr[qtversionarr.length-1];
if (qtversion == parseInt(qtversion))
  qtversion += ".0";

// Summary results...
var isCookiesEnabled = cookiesEnabled(); 
var isBrowserOK = browserVersionOK && isCookiesEnabled && ((hasFlash && flashversion >= FLASH_MIN_VERSION && isIE) || (hasFlash && flashversion >= FLASH_MIN_VERSION && !isIE)) && hasQuicktime;
