/*****************************************************************************
 * Copyright(C) 2006-2007 The E-Book Systems Pte Ltd.  All rights reserved.  *
 * ------------------------------------------------------------------------- *
 * This software is published under the terms of the E-Book Systems Pte Ltd. *
 * FlipViewer BV Version 1.1.6                                               *
 *****************************************************************************/

var windows_browser;
var macintosh_browser;

var internet_explorer;
var netscape;
var safari;
var mozilla;
var firefox;
var unknown_browser;

var version;
var service_pack_2;

// Global Utilities

function contextMenuDisabled()
{
   return false;
}

function selfURLDirectory()
{
   // selfURLDirectory() is here for seeing every reference as absolute path accesses.  Why?  This is how prestreaming and indexing to the cache can be effective.
   // The whole FlipViewer BV project and the offlined resources can be placed together and mounted on a server and are retrieved by a faraway client.  We still
   // need absolute path accesses of every reference so that we can take full advantages on prestreaming and indexing to the cache to smooth retrieval.

   var window_location_href = window.location.href;

   while (window_location_href.lastIndexOf("?") != -1) window_location_href = window_location_href.substring(0, window_location_href.lastIndexOf("?"));

   if (window_location_href.lastIndexOf("/") != -1) return (window_location_href.substring(0, window_location_href.lastIndexOf("/")) + "/");
   // It should never reach here.
   // Defensive Programming Technique
   else return "./";
}

// Make the browser version be comparable to avoid every code change for every browser upgrade.

function versionComparableCore(version_slim)
{
   if (version_slim.lastIndexOf('.') != -1)
   {
      var regressive = versionComparableCore(version_slim.substring(0, version_slim.lastIndexOf('.')));

      if (regressive == -1) return version_slim;
      else return regressive;
   }
   else return -1;
}

function versionComparable(version_slim)
{
   if (version_slim.lastIndexOf('.') != -1) return versionComparableCore(version_slim);
   else return version_slim;
}

function mouseX(evt)
{
   if (windows_browser && (internet_explorer && (version >= 5.5))) return window.event.x;
   else
   // This will work on Internet Explorer 5.2-, Netscape 4+, Firefox, and Opera 7+.
   {
      if (evt.pageX) return evt.pageX;
      else if (evt.clientX) return (evt.clientX + (document.documentElement.scrollLeft? document.documentElement.scrollLeft:document.body.scrollLeft));
   }
}

function mouseY(evt)
{
   if (windows_browser && (internet_explorer && (version >= 5.5))) return window.event.y;
   else
   // This will work on Internet Explorer 5.2-, Netscape 4+, Firefox, and Opera 7+.
   {
      if (evt.pageY) return evt.pageY;
      else if (evt.clientY) return (evt.clientY + (document.documentElement.scrollTop? document.documentElement.scrollTop:document.body.scrollTop));
   }
}

function appendWithStroke(folder_name)
{
   if (folder_name.lastIndexOf('/') != -1)
   {
      // It has not been pre-appended by '/', assuming that this is the right divider.  '\' cannot be the right divider because of Javascript's limitation.
      if (folder_name.lastIndexOf('/') < (folder_name.length - 1)) folder_name = folder_name + '/';
   }
   // No embedded divider, use '/' as the default.
   else folder_name = folder_name + '/';

   return folder_name;
}

function removeStrokeAppendix(folder_name)
{
   if (folder_name.lastIndexOf('/') != -1)
   {
      // It has been pre-appended by '/', assuming that this is the right divider.  '\' cannot be the right divider because of Javascript's limitation.
      if (folder_name.lastIndexOf('/') == (folder_name.length - 1)) folder_name = folder_name.substring(0, (folder_name.length - 1));
   }

   return folder_name;
}

function detectBrowser()
{
   windows_browser = false;
   macintosh_browser = false;

   internet_explorer = false;
   netscape = false;
   safari = false;
   mozilla = false;
   firefox = false;
   // For unknown browsers, we provide the least possible features.
   unknown_browser = true;

   service_pack_2 = false;

   var user_agent = navigator.userAgent.toLowerCase();

   // Windows Browsers
   if (user_agent.indexOf("windows") >= 0)
   {
      windows_browser = true;
      // We have installed Windows XP Service Pack 2.
      if (user_agent.indexOf("sv1") >= 0) service_pack_2 = true;
   }

   // Macintosh Browsers
   if (user_agent.indexOf("mac") >= 0) macintosh_browser = true;

   // Internet Explorers
   if (user_agent.indexOf("msie") >= 0)
   {
      internet_explorer = true;
      unknown_browser = false;

      if (user_agent.match(/msie ([\d\.]+);/)) version = RegExp.$1;
      else version = 3.0;
   }

   // Netscapes
   if (user_agent.indexOf("netscape") >= 0)
   {
      netscape = true;
      unknown_browser = false;

      if (user_agent.match(/netscape\/([\d\.]+)/)) version = RegExp.$1;
   }

   // Safaries
   if (user_agent.indexOf("safari") >= 0)
   {
      safari = true;
      unknown_browser = false;

      if (user_agent.match(/safari\/([\d\.]+)/)) version = RegExp.$1;
   }

   // Firefoxes
   if (user_agent.indexOf("firefox") >= 0)
   {
      firefox = true;
      unknown_browser = false;

      if (user_agent.match(/firefox\/([\d\.]+)/)) version = RegExp.$1;
   }

   // Mozillaes
   if ((user_agent.indexOf("gecko") >= 0) && !netscape && !safari && !firefox)
   {
      mozilla = true;
      unknown_browser = false;

      if (user_agent.match(/gecko\/([\d]+)/)) version = RegExp.$1;
   }

   // To avoid every code change for every browser upgrade, the version should be truncated into a decimal to be comparable.
   version = versionComparable(version);
}

function getPageElement(name)
{
   if (internet_explorer)
   {
      if (document.layers) return document.layers[name];
      else return document.all[name];
   }

   if (macintosh_browser && safari) return document.getElementById(name);

   if (netscape) return document.getElementById(name);

   if (mozilla) return document.getElementById(name);

   if (firefox) return document.getElementById(name);

   if (unknown_browser)
   {
      if (document.getElementById(name) != undefined) return document.getElementById(name);
      else if (document.layers) return document.layers[name];
      else return document.all[name];
   }
}
