var jsVer = -1;
http = NorthOfParis_GetHTTPObject();

//******************************
//** TRACKING                 **
//******************************
function NorthOfParisSend(what,what2) {
	//***********************************************
	//** trying to recover id value for user       **
	//***********************************************
	var NorthOfParisCookievalue="";
	NorthOfParisCookievalue=""+NorthOfParisGetcookie("NorthOfParisId")+"";
	if (NorthOfParisCookievalue=="")
		{
		NorthOfParisCookievalue = "user_"+NorthOfParisRandomBetween(1000,9999)+"_"+NorthOfParisRandomBetween(1000,9999);
		if (NorthOfParisSetcookie("NorthOfParisId",NorthOfParisCookievalue)==false) NorthOfParisCookievalue = "user_0000_0000";
		}
	//***********************************************
	//** trying to recover last visit date         **
	//***********************************************
	var NorthOfParisCookieTimeValue="";
	NorthOfParisCookieTimeValue=""+NorthOfParisGetcookie("NorthOfParisLastVisit")+"";
	currentTime = new Date();
	if (NorthOfParisCookieTimeValue=="")
		{
		NorthOfParisCookieTimeValue = ""+currentTime;
		NorthOfParisSetcookie("NorthOfParisLastVisit",NorthOfParisCookieTimeValue);
		}
	else
		{
		NorthOfParisCookiexTempTimeValue = ""+currentTime;
		NorthOfParisSetcookie("NorthOfParisLastVisit",NorthOfParisCookiexTempTimeValue);
		}
	//***********************************************
	//** page location                             **
	//***********************************************
	var NorthOfParisLocation = ""+document.location.href+"";
	NorthOfParisLocation = NorthOfParisLocation.replace(/'/g, "");
	
	//***********************************************
	//** page location                             **
	//***********************************************
	var iframeid = "id"+NorthOfParisRandomBetween(1000,9999)+"i"+NorthOfParisRandomBetween(1000,9999)+"i"+NorthOfParisRandomBetween(1000,9999);
	
	//***********************************************
	//** referrer information                      **
	//***********************************************
	if (document.referrer != '')
		iRef=document.referrer;
	else
		iRef="";
	
	//***********************************************
	//** sniffs the browser                        **
	//***********************************************
	var br=new Array(4);
	var os=new Array(2);
	var flash=new Array(2);
	br=getBrowser();
	os=getOS();
	flash=hasFlashPlugin();
	popups = popupsAllowed();
	jsver = jsVersion();
	Browser_identifier=br[0];
	Browser_version=br[1];
	Browser_engine=br[2];
	Browser_engine_version=br[3];
	Operating_system_identifier=os[0];
	Operating_system_version=os[1];
	if (flash[0]==2)
		Is_Flash_installed="Yes, v."+flash[1];
	else if (flash[0]==1)
		Is_Flash_installed="No";
	else
		Is_Flash_installed="Unknown";
	if (popups)
		Are_popups_allowed='Yes';
	else	
		Are_popups_allowed='No';
	Newest_version_Javascript_supported=jsver;

	//***********************************************
	//** create an iframe for this                 **
	//***********************************************
	//parameters are userSite,xUser,xLastVisit,NorthOfParisCookieTimeValue,xMessage,xlocation,iframeid,referrer,Browser_identifier,Browser_version,Browser_engine,Browser_engine_version,Operating_system_identifier,Operating_system_version,Is_Flash_installed,Are_popups_allowed,Newest_version_Javascript_supported
	NorthOfParisaddIframe(what,NorthOfParisCookievalue,NorthOfParisCookieTimeValue,what2,NorthOfParisLocation,iframeid,iRef,Browser_identifier,Browser_version,Browser_engine,Browser_engine_version,Operating_system_identifier,Operating_system_version,Is_Flash_installed,Are_popups_allowed,Newest_version_Javascript_supported);
	}

//******************************
//** SENDING                  **
//******************************
function NorthOfParis_Send_Ajax(toUrl,params) {
 	var url = toUrl + '?rnd=' + Math.random();
	sendAjaxParams = params.split(":::");	
	for (var i = 0; i < sendAjaxParams.length; i++) 
		{
		url += '&' + sendAjaxParams[i];
		}
	http.open("GET", url, true);
	http.onreadystatechange=NorthOfParis_Receive_Ajax;
 	http.send(null);
	}
 
//******************************
//** RECEIVING                **
//******************************
function NorthOfParis_Receive_Ajax(){
	if(http.readyState == 4)
		{
		//alert(http.responseText);
		eval(http.responseText);
		}
	}

//******************************
//** SUPPORT FUNCTIONS        **
//******************************
function NorthOfParis_GetHTTPObject()
	{
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
	try 	{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch(e){
		try	{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
		catch(e){ xmlhttp = false; }
		}
	@else
		xmlhttp = false;
	@end @*/
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
		{
		try 	{ xmlhttp = new XMLHttpRequest(); }
		catch(e){ xmlhttp = false; }
		}
	if (!xmlhttp && window.createRequest) 
		{
		try 	{ xmlhttp = window.createRequest(); } 
		catch(e){ xmlhttp=false; }
		}
	return xmlhttp;
	}
function NorthOfParis_html_entity_decode_Ajax( string ) {
	// http://kevin.vanzonneveld.net
	// +   original by: john (http://www.jd-tech.net)
	// +      input by: ger
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// *     example 1: html_entity_decode('Kevin &amp; van Zonneveld');
	// *     returns 1: 'Kevin & van Zonneveld'
	var ret, tarea = document.createElement('textarea');
	tarea.innerHTML = string;
	ret = tarea.value;
	return ret;
	}
function NorthOfParisDoNothing() {
	//does nothing
	}
function NorthOfParisGetcookie(cookiename) {
	var NorthOfParisCookiestring=""+document.cookie;
	var index1=NorthOfParisCookiestring.indexOf(cookiename);
	if (index1==-1 || cookiename=="") return ""; 
	var index2=NorthOfParisCookiestring.indexOf(';',index1);
	if (index2==-1) index2=NorthOfParisCookiestring.length; 
	return unescape(NorthOfParisCookiestring.substring(index1+cookiename.length+1,index2));
	}
function NorthOfParisSetcookie(name,value){
	NorthOfParisCookiestring=name+"="+escape(value)+";expires = Thu,31-Dec-2020 00:00:00 GMT;";
	document.cookie=NorthOfParisCookiestring;
	if(!NorthOfParisGetcookie(name))
		return false;
	else 
		return true;
	}
function NorthOfParisRandomBetween(low,high){
	return Math.round((high - low) * Math.random() + 1);
	}
function NorthOfParisaddIframe(qqa,qqb,qqc,qqd,qqe,qqf,qqg,w1,w2,w3,w4,w5,w6,w7,w8,w9) {
	//parameters are userSite,xUser,xLastVisit,NorthOfParisCookieTimeValue,xMessage,xlocation,iframeid,referrer,Browser_identifier,Browser_version,Browser_engine,Browser_engine_version,Operating_system_identifier,Operating_system_version,Is_Flash_installed,Are_popups_allowed,Newest_version_Javascript_supported
	zUrl = "https://www.northofparis.com/newlivelog/newmirlog.php?rnd="+Math.random()+"&userSite="+qqa+"&xUser="+qqb+"&xLastVisit="+encodeURIComponent(qqc)+"&xMessage="+encodeURIComponent(qqd)+"&xLocation="+encodeURIComponent(qqe)+"&xIframeid="+qqf+"&xIref="+encodeURIComponent(qqg)+"&w1="+w1+"&w2="+w2+"&w3="+w3+"&w4="+w4+"&w5="+w5+"&w6="+w6+"&w7="+w7+"&w8="+w8+"&w9="+w9;
	if (w1=="msie")
		{
		try		{
				//you can create any tagName, even customTag like <document:ready />
				var tempNode = document.createElement('document:ready');
	
				//wait until document.readyState === 'complete';
				if(document.readyState != 'complete') return setTimeout("NorthOfParisaddIframe('"+qqa+"','"+qqb+"','"+qqc+"','"+qqd+"','"+qqe+"','"+qqf+"','"+qqg+"','"+w1+"','"+w2+"','"+w3+"','"+w4+"','"+w5+"','"+w6+"','"+w7+"','"+w8+"','"+w9+"');", 500);
				
				//see if it throws errors until after ondocumentready
				tempNode.doScroll('left');
	
				document.body.insertAdjacentHTML('beforeEnd','<iframe style="position:absolute;top:-200px;left:-200px;visibility:hidden;" id="'+qqf+'" src="'+zUrl+'"><\/iframe>');
				}
		catch(err)	{
				setTimeout("NorthOfParisaddIframe('"+qqa+"','"+qqb+"','"+qqc+"','"+qqd+"','"+qqe+"','"+qqf+"','"+qqg+"','"+w1+"','"+w2+"','"+w3+"','"+w4+"','"+w5+"','"+w6+"','"+w7+"','"+w8+"','"+w9+"');", 500);
				}
		}
	else
		{
		var ifr = document.createElement('IFRAME');
		ifr.src = zUrl;
		ifr.id = qqf;
		ifr.style.position = 'absolute';
		ifr.style.top = '-200px';
		ifr.style.left= '-200px';
		ifr.style.visibility= 'hidden';
		document.body.appendChild(ifr);
		}
	}
function NorthOfParisremoveElement(divNum) {
	var olddiv = document.getElementById(divNum);
	document.removeChild(olddiv);
	}
//*************************************************************
//** browser sniffing                                        **
//*************************************************************
/*
 * jsBrwSniff v0.5
 *
 * A browser sniffer library
 * http://jsbrwsniff.sf.net
 *
 * Released under the GNU LGPL license
 * Author: Pau Garcia i Quiles <paugq AT users DOT sourceforge DOT net>
 *
 */


function getBrowser(obj) {
    var b=new Array("unknown", "unknown", "unknown", "unknown");

    (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);

    if (brs.search(/omniweb[\/\s]v?(\d+([\.-]\d)*)/) != -1) {
    // Omniweb
        b[0]="omniweb";
        b[1]=brs.match(/omniweb[\/\s]v?(\d+([\.-]\d)*)/)[1];
        (b[1] > 4.5 ? b[2]="khtml" : b[2]="omniweb");
        (brs.search(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/) == -1 ?       b[3]=brs.match(/omniweb[\/\s](\d+([\.-]\d)*)/)[1] :        b[3]=brs.match(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/)[4]);
        return b;
    } else if (brs.search(/opera[\/\s](\d+(\.?\d)*)/) != -1) {
    // Opera
        b[0]="opera";
        b[1]=brs.match(/opera[\/\s](\d+(\.?\d)*)/)[1];
        b[2]="opera";
        b[3]=b[1];
        return b;
    } else if (brs.search(/crazy\s?browser\s(\d+(\.?\d)*)/) != -1) {
    // Crazy Browser
        b[0]="crazy";
        b[1]=brs.match(/crazy\s?browser\s(\d+(\.?\d)*)/)[1];
        b[2]="msie";
        b[3]=getMSIEVersion();
        return b;
    } else if (brs.search(/myie2/) != -1) {
    // MyIE2
        b[0]="myie2";
        b[2]="msie";
        b[3]=brs.match(/msie\s(\d+(\.?\d)*)/)[1];
        return b;
    } else if (brs.search(/netcaptor/) != -1) {
    // NetCaptor
        b[0]="netcaptor";
        b[1]=brs.match(/netcaptor\s(\d+(\.?\d)*)/)[1];
        b[2]="msie";
        b[3]=getMSIEVersion();
        return b;
    } else if (brs.search(/avant\sbrowser/) != -1) {
    // Avant Browser
        b[0]="avantbrowser";
        b[2]="msie";
        b[3]=getMSIEVersion();
        return b;
    } else if (brs.search(/msn\s(\d+(\.?\d)*)/) != -1) {
    // MSN Explorer
        b[0]="msn";
        b[1]=brs.match(/msn\s(\d+(\.?\d)*)/)[1];
        b[2]="msie";
        b[3]=getMSIEVersion();
        return b;
    } else if (brs.search(/msie\s(\d+(\.?\d)*)/) != -1) {
    // MS Internet Explorer
        b[0]="msie";
        b[1]=getMSIEVersion();
        b[2]="msie";
        b[3]=b[1];
        return b;
    } else if (brs.search(/powermarks\/(\d+(\.?\d)*)/) != -1) {
    // PowerMarks
        b[0]="powermarks";
        b[1]=brs.match(/powermarks\/(\d+(\.?\d)*)/)[1];
        b[2]="msie";
        try {
            b[3]=getMSIEVersion();
        } catch (e) { }
        return b;
} else if (brs.search(/konqueror[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Konqueror
        b[0]="konqueror";
        b[1]=brs.match(/konqueror[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="khtml";
        return b;
    } else if (brs.search(/safari\/(\d)*/) != -1) {
    // Safari
        b[0]="safari";
        b[1]=brs.match(/safari\/(\d+(\.?\d*)*)/)[1];
        b[2]="khtml";
        b[3]=brs.match(/applewebkit\/(\d+(\.?\d*)*)/)[1];
        return b;
    } else if(brs.search(/zyborg/) != -1) {
    // Zyborg (SSD)
        b[0]="zyborg";
        b[1]=brs.match(/zyborg\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else if (brs.search(/netscape6[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Netscape 6.x
        b[0]="netscape";
        b[1]=brs.match(/netscape6[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/netscape\/(7\.\d*)/) != -1) {
    // Netscape 7.x
        b[0]="netscape";
        b[1]=brs.match(/netscape\/(7\.\d*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/galeon[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Galeon
        b[0]="galeon";
        b[1]=brs.match(/galeon[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/nautilus[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Nautilus
        b[0]="nautilus";
        b[1]=brs.match(/nautilus[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/firefox[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Firefox
        b[0]="firefox";
        b[1]=brs.match(/firefox[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/k-meleon[\/\s](\d+([\.-]\d)*)/) != -1) {
    // K-Meleon
        b[0]="kmeleon";
        b[1]=brs.match(/k-meleon[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/playstation\s3/) != -1) {
    // Playstation 3
        b[0]="netfront";
        b[1]="2.81"; // Taken from the Wikipedia article
        b[2]="playstation3"
        b[3]=brs.match(/playstation\s3;\s(\d+\.\d+)/)[1];
        return b;
    } else if (brs.search(/firebird[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Firebird
        b[0]="firebird";
        b[1]=brs.match(/firebird[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/phoenix[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Phoenix
        b[0]="phoenix";
        b[1]=brs.match(/phoenix[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/camino[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Camino
        b[0]="camino";
        b[1]=brs.match(/camino[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/epiphany[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Epiphany
        b[0]="epiphany";
        b[1]=brs.match(/epiphany[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/chimera[\/\s](\d+([\.-]\d)*)/) != -1) {
    // Chimera
        b[0]="chimera";
        b[1]=brs.match(/chimera[\/\s](\d+([\.-]\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/icab[\s\/]?(\d+(\.?\d)*)/) !=-1) {
    // iCab
        b[0]="icab";
        b[1]=brs.match(/icab[\s\/]?(\d+(\.?\d)*)/)[1];
        b[2]="icab";
        b[3]=b[1];
        return b;
    } else if (brs.search(/netfront\/(\d+([\._]\d)*)/) != -1) {
    // NetFront
        b[0]="netfront";
        b[1]=brs.match(/netfront\/(\d+([\._]\d)*)/)[1];
        b[2]="netfront";
        b[3]=b[1];
        return b;
    } else if (brs.search(/netscape4\/(\d+([\.-]\d)*)/) != -1) {
    // Netscape 4.x
        b[0]="netscape";
        b[1]=brs.match(/netscape4\/(\d+([\.-]\d)*)/)[1];
        b[2]="mozold";
        b[3]=b[1];
        return b;
    } else if ( (brs.search(/mozilla\/(4.\d*)/) != -1) && (brs.search(/msie\s(\d+(\.?\d)*)/) == -1) ) {
        b[0]="netscape";
        b[1]=brs.match(/mozilla\/(4.\d*)/)[1];
        b[2]="mozold";
        b[3]=b[1];
        return b;
    } else if ((brs.search(/mozilla\/5.0/) != -1) && (brs.search(/gecko\//) != -1)) {
    // Mozilla Seamonkey
        b[0]="mozsea";
        b[1]=brs.match(/rv\x3a(\d+(\.?\d)*)/)[1];
        b[2]="gecko";
        b[3]=getGeckoVersion();
        return b;
    } else if (brs.search(/elinks/) != -1) {
    // ELinks
        b[0]="elinks";
        (brs.search(/elinks\/(\d+(\.?\d)*)/) == -1 ?
b[1]=brs.match(/elinks\s\x28(\d+(\.?\d)*)/)[1] :
b[1]=brs.match(/elinks\/(\d+(\.?\d)*)/)[1]);
        b[2]="elinks";
        b[3]=b[1];
        return b;
    } else if (brs.search(/w3m\/(\d+(\.?\d)*)/) != -1) {
    // w3m
        b[0]="w3m"
        b[1]=brs.match(/(^w3m|\sw3m)\/(\d+(\.?\d)*)/)[2];
        b[2]="w3m";
        b[3]=b[1];
        return b;
    } else if (brs.search(/links/) != -1) {
    // Links
        b[0]="links";
        (brs.search(/links\/(\d+(\.?\d)*)/) == -1 ? b[1]=brs.match(/links\s\x28(\d+(\.?\d)*)/)[1] : b[1]=brs.match(/links\/(\d+(\.?\d)*)/)[1]);
        b[2]="links";
        b[3]=b[1];
        return b;
    } else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) {
    // Java (as web-browser)
        b[0]="java";
        b[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1];
        b[2]="java";
        b[3]=b[1];
        return b;
    } else if(brs.search(/lynx/) != -1) {
    // Lynx (SSD)
        b[0]="lynx";
        b[1]=brs.match(/lynx\/(\d+(\.?\d)*)/)[1];
        b[2]="libwww-fm";
        b[3]=brs.match(/libwww-fm\/(\d+(\.?\d)*)/)[1];
        return b;
    } else if(brs.search(/dillo/) != -1) {
    // Dillo (SSD)
        b[0]="dillo";
        b[1]=brs.match(/dillo\s*\/*(\d+(\.?\d)*)/)[1];
        b[2]="dillo";
        b[3]=b[1];
        return b;
    } else if(brs.search(/wget/) != -1) {
    // wget (SSD)
        b[0]="wget";
        b[1]=brs.match(/wget\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else if(brs.search(/googlebot\-image/) != -1) {
    // GoogleBot-Image (SSD)
        b[0]="googlebotimg";
        b[1]=brs.match(/googlebot\-image\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else if(brs.search(/googlebot/) != -1) {
    // GoogleBot (SSD)
        b[0]="googlebot";
        b[1]=brs.match(/googlebot\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else if(brs.search(/msnbot/) != -1) {
    // MSNBot (SSD)
        b[0]="msnbot";
        b[1]=brs.match(/msnbot\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else if(brs.search(/turnitinbot/) != -1) {
    // Turnitin (SSD)
        b[0]="turnitinbot";
        b[1]=brs.match(/turnitinbot\/(\d+(\.?\d)*)/)[1];
        b[2]="robot";
        b[3]="-1"
        return b;
    } else {
        b[0]="unknown";
        return b;
    }
}

// Return browser's (actual) major version or -1 if bad version entered
function getMajorVersion(v) {
    return (isEmpty(v) ? -1 : (hasDot(v) ? v : v.match(/(\d*)(\.\d*)*/)[1]))
}

// Return browser's (actual) minor version or -1 if bad version entered
function getMinorVersion(v) {
    return (!isEmpty(v) ? (!hasDot(v) ? v.match(/\.(\d*([-\.]\d*)*)/)[1] : 0) :
-1)
}

// Return operating system we are running on top of
function getOS(obj) {

    var os=new Array("unknown", "unknown");

    (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);

    if (brs.search(/windows\sce/) != -1) {
        os[0]="wince";
        try {
            os[1]=brs.match(/windows\sce\/(\d+(\.?\d)*)/)[1];
        } catch (e) { }
        return os;
    } else if ( (brs.search(/windows/) !=-1) || ((brs.search(/win9\d{1}/) !=-1))
) {
        os[0]="win";
        if (brs.search(/nt\s5\.1/) != -1) {
            os[1]="xp";
        } else if (brs.search(/nt\s5\.0/) != -1) {
            os[1]="2000";
        } else if ( (brs.search(/win98/) != -1) || (brs.search(/windows\s98/)!=
-1 ) ) {
            os[1]="98";
        } else if (brs.search(/windows\sme/) != -1) {
            os[1]="me";
        } else if (brs.search(/nt\s5\.2/) != -1) {
            os[1]="win2k3";
        } else if ( (brs.search(/windows\s95/) != -1) || (brs.search(/win95/)!=
-1 ) ) {
            os[1]="95";
        } else if ( (brs.search(/nt\s4\.0/) != -1) || (brs.search(/nt4\.0/) ) !=
-1) {
            os[1]="nt4";
        }

        return os;
    } else if (brs.search(/linux/) !=-1) {
        os[0]="linux";
        try {
            os[1] = brs.match(/linux\s?(\d+(\.?\d)*)/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/mac\sos\sx/) !=-1) {
        os[0]="macosx";
        return os;
    } else if (brs.search(/freebsd/) !=-1) {
        os[0]="freebsd";
        try {
            os[1] = brs.match(/freebsd\s(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/sunos/) !=-1) {
        os[0]="sunos";
        try {
            os[1]=brs.match(/sunos\s(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/irix/) !=-1) {
        os[0]="irix";
        try {
            os[1]=brs.match(/irix\s(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/openbsd/) !=-1) {
        os[0]="openbsd";
        try {
            os[1] = brs.match(/openbsd\s(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if ( (brs.search(/macintosh/) !=-1) || (brs.search(/mac\x5fpowerpc/)
!= -1) ) {
        os[0]="macclassic";
        return os;
    } else if (brs.search(/os\/2/) !=-1) {
        os[0]="os2";
        try {
            os[1]=brs.match(/warp\s((\d(\.\d)*)*)/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/openvms/) !=-1) {
        os[0]="openvms";
        try {
            os[1]=brs.match(/openvms\sv((\d(\.\d)*)*)/)[1];
        } catch (e)  { }
        return os;
    } else if ( (brs.search(/amigaos/) !=-1) || (brs.search(/amiga/) != -1) ) {
        os[0]="amigaos";
        try {
            os[1]=brs.match(/amigaos\s?(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/hurd/) !=-1) {
        os[0]="hurd";
        return os;
    } else if (brs.search(/hp\-ux/) != -1) {
        os[0]="hpux";
        try {
            os[1]=brs.match(/hp\-ux\sb\.[\/\s]?(\d+([\._]\d)*)/)[1];
        } catch (e) { }
        return os;
    } else if ( (brs.search(/unix/) !=-1) || (brs.search(/x11/) != -1 ) ) {
        os[0]="unix";
        return os;
    } else if (brs.search(/cygwin/) !=-1) {
        os[0]="cygwin";
        return os;
    } else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) {
        os[0]="java";
        try {
            os[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1];
        } catch (e) { }
        return os;
    } else if (brs.search(/palmos/) != -1) {
        os[0]="palmos";
        return os;
    } else if (brs.search(/symbian\s?os\/(\d+([\._]\d)*)/) != -1) {
        os[0]="symbian";
        try {
            os[1]=brs.match(/symbian\s?os\/(\d+([\._]\d)*)/)[1];
        } catch (e) { }
        return os;
    } else {
        os[0]="unknown";
        return os;
    }
}

// Return Gecko version
function getGeckoVersion() {
    return brs.match(/gecko\/([0-9]+)/)[1];
}

// Return MSIE version
function getMSIEVersion() {
    return brs.match(/msie\s(\d+(\.?\d)*)/)[1];
}

// Return full browser UA string
function getFullUAString(obj) {
    (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);
    return brs;
}

// Is Flash plug-in installed?
function hasFlashPlugin(obj) {

    (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);

    var f=new Array("0", "0");
    var brwEng=getBrowser(obj)[2];
    var opSys=getOS(obj)[0]; 

    //if (getBrowser(obj)[2]!="msie") {
    if ( (brwEng=="gecko") || (brwEng=="opera") || (brwEng=="khtml") || (brwEng=="mozold") || (opSys=="macosx") || (opSys=="macclassic") ) {
        // Non-IE Flash plug-in detection

        if (navigator.plugins && navigator.plugins.length) {
            x = navigator.plugins["Shockwave Flash"];
            if (x) {
                f[0] = 2;
                if (x.description) {
                    y = x.description;
                    f[1] = y.charAt(y.indexOf('.')-1);
                }
            } else {
                f[0] = 1;
            }
            if (navigator.plugins["Shockwave Flash 2.0"]) {
                f[0] = 2;
                f[0] = 2;
            }
        } else if (navigator.mimeTypes && navigator.mimeTypes.length) {
            x = navigator.mimeTypes['application/x-shockwave-flash'];
            if (x && x.enabledPlugin) {
                f[0] = 2;
            } else {
                f[0] = 1;
            }
        }

   return f;

  } else if (brwEng=="msie") {
      // IE flash detection.
       for(var i=15; i>0; i--) {
           try {
               var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
               f[1] = i;
               break;
               //return;
           } catch(e) { }
       }

       if (f[1]>0) {
           f[0]=2
       } else {
           f[0]=1
       }
   return f;
   } else {
       f[0]=0;
       f[1]=0;
       return f;
   }
}

// Are pop-up windows allowed for this site? (i. e. has the user a pop-up blocker?)
function popupsAllowed() {
    var allowed = false;
    //var w = window.open("about:blank","","directories=no,height=1,width=1,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,left=0,top=0,location=no");
    //if (w) {
    //    allowed = true;
    //    w.close();
    //}
    return allowed;
}

// Helper function to detect Javascript version
function _jsVersion() {

    document.write('<script language="JavaScript1.0">');
    document.write('var jsVer=1.0;');
    document.write('</script>');

    document.write('<script language="JavaScript1.1">');
    document.write('var jsVer=1.1;');
    document.write('</script>');

    document.write('<script language="JavaScript1.2">');
    document.write('var jsVer=1.2;');
    document.write('</script>');

    document.write('<script language="JavaScript1.3">');
    document.write('var jsVer=1.3;');
    document.write('</script>');

    document.write('<script language="JavaScript1.4">');
    document.write('var jsVer=1.4;');
    document.write('</script>');

    document.write('<script language="JavaScript1.5">');
    document.write('var jsVer=1.5;');
    document.write('</script>');

    document.write('<script language="JavaScript1.6">');
    document.write('var jsVer=1.6;');
    document.write('</script>');

    document.write('<script language="JavaScript1.7">');
    document.write('var jsVer=1.7;');
    document.write('</script>');

    document.write('<script language="JavaScript1.8">');
    document.write('var jsVer=1.8;');
    document.write('</script>');

    document.write('<script language="JavaScript2.0">');
    document.write('var jsVer=2.0;');
    document.write('</script>');

}

// What is the newest version of Javascript does the browser report as supported?
function jsVersion() {
   _jsVersion(); 
   return jsVer;
}

/* FOR INTERNAL USE ONLY. THIS FUNCTIONS ARE SUBJECT TO CHANGE, DON'T TRUST THEM */
// Is input empty?
function isEmpty(input) {
    return (input==null || input =="")
}

// Does this string contain a dot?
function hasDot(input) {
    return (input.search(/\./) == -1)
}
/* END OF FOR INTERNAL USE ONLY FUNCTIONS */
