/* **** PM Browser and Environment Client-Side Sniffer Script External Code, version v3.1.4.2-basic 

 * ********* THE VARIABLES BELOW SHOULD BE REPLACED BY CUSTOMIZED CODE ** */

var exclusionOption = 5
var restrictStyle = 0
var restrictScreenSize = 0
var restrictScreenColor = 0
var restrictTrident = 5.1
var restrictGecko = 0.0904
var restrictScript = "ecma"
var level2Option = "dhtml"
var level2AddOS = "OS"
var Genver = 3.1; var sniffAction = ""; var sniffSAction = "";

/* ********* THE REPLACED SECTION ENDS ********************************** */

/* Recent versions changelog:
   3.1.4 2008-02-18 - updating to sync with uaexami v3.1.4, adding function 
                      getVersionLimit, fixing navigator properties version and 
                      prettyVersion for the gecko family
   3.1.3 2006-05-20 - combining the ua.js and uaexami.js files to form this file 
  
  
   **** */

function getVersionLimit(sPV){
//NOTE: This function requires JS1.1
//deciding on the end of a version string
var L = new Array(';',')',' ','(');
   for (var l=0;l<4;l++){
    var q=L[l];
    if (sPV.indexOf(q) > -1){sPV=sPV.substring(0, sPV.indexOf(q))}
    }
return sPV;
}

//declaring a simple function
function F(){};

//NOTE: the xbDetectBrowser function should be safe on js language versions 1.0+
function xbDetectBrowser()
{
  var oldOnError = window.onerror;

  window.onerror = null;
  
  var nVersion = 0.01 , sPVersion = '0.01';
  var appV = window.navigator.appVersion;
  navigator['version']  = parseFloat(appV);
  navigator['family']  = '';

  var i = 0;
  var appuA = window.navigator.userAgent;
  var ua = appuA.toLowerCase();
  
  var sPName = navigator['prettyName'] = appuA.substring(0,appuA.indexOf('/'));
  navigator['prettyVersion'] = parseFloat('0'+appuA.substring(appuA.indexOf('/')+1));
  var appN = window.navigator.appName;
  //decision on the browser kinship, simplifying Internet Explorer for safer checkings
  if (appN == 'Microsoft Internet Explorer') navigator['kin'] = 'MSIE/'+parseInt(appV, 10);
  else navigator['kin'] = appN+'/'+parseInt(appV, 10);
  //preliminary decision on the browser engine, trying to use navigator.product
  if (navigator.product) navigator.family = navigator.product.toLowerCase();
  if (navigator.productSub) navigator.version = parseFloat(navigator.productSub.substring(0,8), 10);
  navigator['rversion'] = 0; navigator['rv'] = '';
  navigator['js'] = 0; var JScript = '';
  navigator['examined'] = new Object();

  if (ua.indexOf('opera') != -1)
  { //Opera products
    i = ua.indexOf('opera');
    navigator.family  = 'opera';
    sPName    = 'opera';
    sPVersion = ua.substring(i+6);
    navigator.version  = parseFloat('0' + sPVersion);
    if (navigator.version >= 7) navigator.family = 'presto';
  }

  else if (ua.indexOf("khtml") != -1 || ua.indexOf("konqueror") != -1 || ua.indexOf("applewebkit") != -1)
  { //KDE products
    if( ua.indexOf('applewebkit') != -1 )
    { //OmniWeb and Safari is part of the AppleWebKit family
        i = ua.indexOf('applewebkit');
        navigator.family = 'applewebkit'; 
        navigator.version = parseFloat('0' + ua.substring(i+12));
    	if( ua.indexOf("omniweb") != -1 )
    	{
        sPName = 'omniWeb';
        sPVersion = ua.substring(ua.lastIndexOf('/')+2); 
    	}
    	else if( ua.indexOf('safari/') != -1 )
    	{
        sPName = 'safari';
        sPVersion = ua.substring(ua.lastIndexOf('/')+1); 
    	}
    }
    else if( ua.indexOf("konqueror") != -1 )
    { //Konqueror
        i = ua.indexOf('konqueror');
        sPName = 'konqueror'; 
    	sPVersion = ua.substring(i+10);
    }
  }

  else if (navigator.family == 'gecko')
  { //Gecko products
    	if (ua.indexOf("rv:") != -1)
    	{
    	var rvStart = ua.indexOf('rv:');
    	var rvEnd   = ua.indexOf(')', rvStart);
    	var rv      = ua.substring(rvStart+3, rvEnd);
    	//navigator.rv is the original string (e.g. "1.9.0.1")
    	navigator.rv = sPVersion = rv;
    	var rvParts = rv.split('.');
    	var rvValue = 0;
   	 var exp     = 1;

    	for (var i = 0; i < rvParts.length; i++)
    	{
      	var val = parseInt(rvParts[i]);
      	rvValue += val / exp;
      	exp *= 100;
    	}
    	//navigator.rversion is the /rv/ converted to double floating points (e.g. 1.090001)
    	navigator.rversion = (Math.round(rvValue*1000000)/1000000);
    	}

    	if (ua.indexOf("galeon") != -1 )
    	{
        sPName = 'galeon';
        sPVersion = ua.substring(ua.indexOf('galeon') + 7);
    	}
    	//according to the proposal at http://www.mozilla.org/build/revised-user-agent-strings.html
    	else if (ua.indexOf('mozilla') != -1 && ua.lastIndexOf('/')-5 != ua.indexOf('gecko') && ua.lastIndexOf('/')-7 != 0)
    	{ //branded browsers based on Mozilla
          var gecko_r = appuA.substring(ua.indexOf('gecko')+6);
          var nPName_begins=getVersionLimit(gecko_r).length;
          sPName = gecko_r.substring(nPName_begins+1,gecko_r.indexOf('/'));
          sPVersion = gecko_r.substring(gecko_r.indexOf('/')+1);
          if (gecko_r.indexOf('/') != gecko_r.lastIndexOf('/') && gecko_r.indexOf('Firefox')!=-1)
	  { //grabbing the second vendor name if 'Firefox' is in the ua
	    var svendor = gecko_r.substring(gecko_r.indexOf('/')+1);
            var nvendor_begins=getVersionLimit(svendor).length;
            if (svendor.charAt(nvendor_begins+1)=='(' && svendor.indexOf(')')>0)
	    	{ // if a VendorComment is applied
	    	  nvendor_begins=svendor.indexOf(')');
	    	}
            sPName = svendor.substring(nvendor_begins+1,svendor.indexOf('/'));
            sPVersion = svendor.substring(svendor.indexOf('/')+1); 
	  }
    	}
	else if (ua.indexOf("msie") != -1) 
	{ //making version number spoof friendly 	
	navigator.prettyVersion=ua.substring(ua.indexOf("msie") + 5, ua.indexOf("msie") + 8)
	} 
  }

  else if (ua.indexOf('compatible') != -1 && ua.indexOf('msie') != -1)
  { //Internet Explorer and the Trident rendering engine
    i = ua.indexOf('msie')
    sPName = 'internet Explorer'; 
    sPVersion = ua.substring(i+5);
    if (navigator.version < 4)
    	{ //IE 3
      	navigator.family = 'ie3';
    	navigator.version  = parseFloat('0' + sPVersion);
    	navigator.js = 1.0;
    	JScript = '1.0';
    	}
    else 
    	{ //IE 4
      	navigator.family = 'trident';
    	navigator.version  = parseFloat('0' + sPVersion);
	JScript = '2.0'; //preliminary low estimate
    	if 	(ua.indexOf('netscape') != -1) 
    		{ //Netscape Browser
      		sPName = 'netscape'; 
      		sPVersion = ua.substring(ua.indexOf('netscape')+9);
      		}
    	else if (ua.indexOf('america online browser') != -1)
    		{ //AOL
    		sPName = 'aOL Explorer';
    		sPVersion = ua.substring(ua.indexOf('rev')+3);
    		}
      	}
  }

  else if (ua.indexOf("icab") != -1 )
  {
    sPName = " iCab";
    sPVersion = ua.substring(ua.indexOf("icab") + 5);
  }
  
  else if (ua.indexOf('java') != -1 )
  { //NOTE: no corresponding version set to the java family
    navigator.family  = 'java';
    if (ua.indexOf('ice') != -1 )
    { // ICEbrowser
    sPName = appN;
    sPVersion = ua.substring(ua.indexOf('/') + 2);
    }
  }

  else if ((ua.indexOf('mozilla') == 0) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv')==-1))
  { //Netscape Navigator and Communicator
    i = ua.lastIndexOf('/');
    navigator.family = 'nn' + parseInt(appV, 10);
    sPName = 'netscape';
    sPVersion = ua.substring(i+1);
    if (navigator.version < 3) navigator.js = 1.0;
  }

if (navigator.js == 0) { //NOTE: breaks js 1.0
//We need to get the version numbers from the version strings, thereby simply putting possible maintenance (third)
//release numbers to the minor (second) version number, and treating the first dot as a decimal point. 
if(sPVersion.charAt(1)=='_') var sParts = sPVersion.split('_',3);
else var sParts = sPVersion.split('.',3);
var sMajor = sParts[0];
var sMinor = sParts[1];
var sThird = sParts[2];
nVersion = parseFloat('0'+sMajor+'.'+sMinor+sThird);

//JavaScript Client-Side language and ECMAScript Core language check  
//NOTE: js1_1 *intentionally* undeclared
js1_1 = (typeof(Date.prototype.getTimezoneOffset));  //checking core syntax

//setting JScript version
  if (typeof(ScriptEngine) =='function'){
   JScript = ScriptEngineMajorVersion() + ".";
   JScript += ScriptEngineMinorVersion();
   }
navigator.examined['jscript'] = parseFloat('0'+JScript);

if (js1_1 && ((navigator.examined.jscript >= 2) || (typeof(navigator.javaEnabled) !='undefined')) &&
        (typeof(navigator.mimeTypes) !='undefined') && (typeof(navigator.plugins) !='undefined')){
        navigator.js = 1.1;
        }  //checking client-side scripting

if (navigator.js == 1.1 && 
        (typeof(navigator.language) != 'undefined' || typeof(navigator.userLanguage) != 'undefined'
        || typeof(navigator.browserLanguage) != 'undefined') &&
        (typeof(navigator.platform) != 'undefined') && (typeof(screen) != 'undefined')){
        navigator.js = 1.2;
        }  //checking client-side scripting and if appliable for the envir object

navigator.examined['ecma'] = false;  //preparing to check ECMAScript edition 1
navigator.examined['ecma3'] = false; //preparing to check ECMAScript edition 3
if (js1_1){ delete js1_1; navigator.examined.ecma = /* checking core scripting */
        (typeof(js1_1) == 'undefined' && (typeof(Infinity) =='number') && (typeof(NaN) =='number') && 
        (typeof(isFinite) !='undefined') && (typeof(Date.prototype.getMilliseconds) !='undefined') && 
        (typeof(Date.prototype.setFullYear) !='undefined') && (typeof(Date.prototype.toUTCString) !='undefined'));
        }  

        //checking advanced methods of functions; NOTE that F was defined far above
var FMethods = (typeof(F.call) !='undefined' && typeof(F.apply) !='undefined');
if (FMethods && navigator.examined.ecma){ navigator.examined.ecma3 = /* checking core scripting */
        (typeof(Error) != 'undefined') && (typeof(Number.prototype.toExponential) =='function') &&
        (typeof(Number.prototype.toFixed) =='function') && (typeof(Number.prototype.toPrecision) =='function');
        if (navigator.js == 1.2) navigator.js = 1.3;    
        }  //checking client-side scripting
}  //The check for js 1.5 might cause a syntax error with old browsers and is not included

//pretty names
var prettyfirst=sPName.charAt(0).toUpperCase();
navigator.prettyName=prettyfirst+sPName.substring(1);
//decision on the pretty version string
var R = new Array(';',')',' ','(');
   for (var j=0;j<4;j++){
    var x=R[j];
    if (sPVersion.indexOf(x) > -1){sPVersion=sPVersion.substring(0, sPVersion.indexOf(x))}
    }
if (nVersion == 0.01 && appN=='Netscape')
	{ //correcting pretty names and versions
	if (navigator.rv.length > 0){navigator.prettyVersion = navigator.rv}
 	else if (ua.indexOf("msie") != -1){navigator.prettyName='Internet Explorer'}
 	}
else navigator.prettyVersion = sPVersion;

  window.onerror = oldOnError;
}
  // function call
xbDetectBrowser();

/* So we need to do some checks related to the document object model only if 
 * the document is fully loaded. Therefore storing them in another function to be
 * initiated by an event handler such as onload, and parsed by no less than js 1.1.
 */
 
//___________start of uaexami.js file code____________________________________________________________
function Exami(){ 
  var appuA = window.navigator.userAgent;
  var ua = appuA.toLowerCase(); var i = 0;
  //first decision on the compatibility version: navigator.appCodeNameSub
  var appcn = window.navigator.appCodeName.toLowerCase(); var appCNS;
  //browser *not* identifying by the code name "Mozilla", so making empty string
  if (appcn != 'mozilla') appCNS = '';
  else 	{ i = ua.indexOf(appcn); 
  //code name "Mozilla" but *not* using that name in the ua string, so *temporarily* making it to version 1
     	if (i!=0) appCNS = 1; 
  //ua string version accepted
        else 	{ appCNS = parseFloat('0' + ua.substring(8));
  //recognising only five compatibility versions, if more, *temporarily* resetting it to version 1
   		if (appCNS >= 6) appCNS = 1;
 		if (appCNS <3 && navigator.js >= 1.1) appCNS=3;
 		else if (appCNS <2 && navigator.js >= 1.0) appCNS=2;
 		}
	}  //first decision ends
  navigator['appCodeNameSub'] = appCNS;

//DOM COMPLIANCE

//traditional competitors - classic sniffing -
        //environment is typical Netscape Navigator 4.x 
  navigator.examined['nc4api'] = (navigator.kin == "Netscape/4" && (typeof(document.layers) != 'undefined'));
        //environment is typical Microsoft Internet Explorer 4+ 
  navigator.examined['msieapi'] = (navigator.kin == "MSIE/4" && (typeof(document.all) != 'undefined'));
        //DOM standards (W3C recommendations)
  navigator.examined['w3cdom']  = (typeof(document.getElementsByTagName) != 'undefined' && typeof(document.getElementsByTagName) != 'null' &&
        typeof(document.createElement) != 'undefined' && typeof(document.getElementById) != 'undefined');

//some additional capabilities - but there will be complete DOM coverage with the envir.dom object
navigator.examined.domelementstyle=false;
navigator.examined.domcreateevent=false;
if (navigator.examined.w3cdom && navigator.examined.ecma3)  {
        var elem = document.createElement('p');
  navigator.examined['domelementstyle'] = (typeof(elem.style) == 'object');
  navigator.examined['domcreateevent'] = (typeof(document.createEvent) != 'undefined');  
  }
  
/* Second decision on the *general* user agent version: adjusting navigator.appCodeNameSub 
 * in accordance with the DHTML capabilities, and turning its value into a string. 
 */

 var aCNS = parseFloat(navigator.appCodeNameSub);
//checking DHTML capabilities
 if (aCNS <5 && navigator.examined.ecma3 && navigator.examined.w3cdom) aCNS = 5;
 else if (aCNS <4 && navigator.examined.ecma && (navigator.examined.w3cdom || navigator.examined.nc4api || navigator.examined.msieapi)) aCNS=4;
//converting it to a good-looking string value
 var saCNS = aCNS.toString();  
 if(saCNS.indexOf(".")==-1) saCNS=saCNS+'.0';
 navigator.appCodeNameSub = saCNS;
// second decision ends

//setting a generation number, possible values: NaN, 0, 1, 2, 3, 4, 5
var SendGen = parseInt(navigator.appCodeNameSub); 

//NOTE: The read-only properties navigator.product(Sub) and navigator.vendor(Sub) is better left alone!
//The section below is DEPRECATED ***
var productfirst=navigator.family.charAt(0).toUpperCase();
if(!navigator.product){
        if (navigator.family.indexOf('nn') !=-1) {
        //Netscape versions 3 or 4
        navigator.product = 'Netscape'; } 
        else if (ua.indexOf("konqueror") != -1 || ua.indexOf("khtml") != -1) navigator.product = 'KDE' 
        else if (navigator.family == 'gecko') navigator.product = 'Gecko_spoofer' 
        else navigator.product = productfirst+navigator.family.substring(1);
        }
// *** deprecated section ends

//checking and calling the Envir function
if (typeof(Envir)=='function'){
        envir = new Envir(SendGen,'v3.1.3');
        }
else {envir = new Object;
        envir['noenvir']=true;
        }

}  //Exami ends.
var exami;

var soekvaeg=location.pathname; var Dir1long, Dir2long, pardonvillkoret;
var filnamn=soekvaeg.substring(soekvaeg.lastIndexOf('/')+1,soekvaeg.length);
var exact1villkoret='envir.screensize >='+restrictScreenSize
 +' && envir.screencolor >='+restrictScreenColor+' && envir.CSS1 >='+restrictStyle;
var exact2villkoret='envir.'+level2AddOS+' && envir.'+level2Option;
function Relocate(l,d){(l=='HS')? location.replace(d): location = d;}
function CheckStatic(){(Dir1!='n/a' && sniffAction == 'pardon')?
 Relocate(Dir0,Dir1long): Relocate(Dir0,fbURL);}
function CheckCustomScript(){
 if (navigator.kin =='MSIE/4' && navigator.examined.jscript > 0)
   {pardonvillkoret='navigator.examined.jscript >='+restrictTrident
   +' && navigator.examined.'+restrictScript;}
 else if (navigator.kin =='Netscape/5' && navigator.rversion > 0)
   {pardonvillkoret='navigator.rversion >='+restrictGecko
   +' && navigator.examined.'+restrictScript;}
 else pardonvillkoret='navigator.appCodeNameSub >='+exclusionOption
   +' && navigator.examined.'+restrictScript;
 var customSA=(typeof(ScriptAction)!='undefined' && sniffSAction=='custom');
 (Dir1.substring(Dir1.lastIndexOf('/'),Dir1.length)=='/')? 
 Dir1long=Dir1+filnamn:Dir1long=Dir1; 
 exami = new Exami(); var pv=eval(pardonvillkoret);
 if (pv && !(envir.noenvir)){
  (Dir2.substring(Dir2.lastIndexOf('/'),Dir2.length)=='/')? 
  Dir2long=Dir2+filnamn:Dir2long=Dir2; 
  var e1=eval(exact1villkoret); var e2=eval(exact2villkoret);
  if (Dir2!='n/a' && (e2 && sniffAction =='pardon' || e2 && e1)) Relocate(Dir0,Dir2long);
  else if (e1 && customSA) ScriptAction('e');
  else if (e1 && Dir1!='n/a') Relocate(Dir0,Dir1long);
  else if (customSA){ ScriptAction('p');} else CheckStatic();}
 else if (pv && customSA) ScriptAction('p');
 else if (customSA) ScriptAction(''); else CheckStatic();}
//___________end of uaexami.js file code_____________________________________________________________
