
var icamo = function() {

        var UNDEF = "undefined",
                OBJECT = "object",
                FUNC = "function",
                STR = "string",
                SHOCKWAVE_FLASH = "Shockwave Flash",
                SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
                FLASH_MIME_TYPE = "application/x-shockwave-flash",

                AGCONTROL = "AgControl.AgControl",
                SLV_PLUGIN = "Silverlight Plug-In",

                win = window,
                doc = document,
                nav = navigator,

                dc = doc.cookie,
                dh = doc.getElementsByTagName('head')[0],
                dl = new String(doc.location),
                dlo = doc.location,
                listenersArr = [],

                iDATA = [],
                iexited = 0,
                onLoadTime = null,
                addedLibs = [],
                lastLib = null,
                onLoadCallbacks = [],
                loadedLibs = [],
                isLoaded = false

                speedCookie = '!camoSpd',
                newVisitor = 0,

                dynamicStylesheet = null,
                dynamicStylesheetMedia = null,

                ufS = '',

                domLoadFnArr = [],
                ON_READY_STATE_CHANGE = "onreadystatechange",
                isDomLoaded = false,
                id = null,

        ua = function() {
                var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
                        u = nav.userAgent.toLowerCase(),
                        p = nav.platform.toLowerCase(),
                        windows = p ? /win/.test(p) : /win/.test(u),
                        mac = p ? /mac/.test(p) : /mac/.test(u),
                        webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
                        ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
                        playerVersion = [0,0,0],
                        d = null;
                if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
                        d = nav.plugins[SHOCKWAVE_FLASH].description;
                        if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                                plugin = true;
                                ie = false; // cascaded feature detection for Internet Explorer
                                d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                                playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
                                playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
                                playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                        }
                }
                else if (typeof win.ActiveXObject != UNDEF) {
                        try {
                                var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
                                if (a) { // a will return null when ActiveX is disabled
                                        d = a.GetVariable("$version");
                                        if (d) {
                                                ie = true; // cascaded feature detection for Internet Explorer
                                                d = d.split(" ")[1].split(",");
                                                playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                                        }
                                }
                        }
                        catch(e) {}
                }

                var silverLight = getSilverLight();
                var jv = getJava();

                return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac, slv:silverLight, java:jv };
        }(),

        onDomLoad = function() {
                if (!ua.w3) { return; }
                if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
                        callDomLoadFunctions();
                }
                if (!isDomLoaded) {
                        if (typeof doc.addEventListener != UNDEF) {
                                doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
                        }
                        if (ua.ie && ua.win) {
                                doc.attachEvent(ON_READY_STATE_CHANGE, function() {
                                        if (doc.readyState == "complete") {
                                                doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
                                                callDomLoadFunctions();
                                        }
                                });
                                if (win == top) { // if not inside an iframe
                                        (function(){
                                                if (isDomLoaded) { return; }
                                                try {
                                                        doc.documentElement.doScroll("left");
                                                }
                                                catch(e) {
                                                        setTimeout(arguments.callee, 0);
                                                        return;
                                                }
                                                callDomLoadFunctions();
                                        })();
                                }
                        }
                        if (ua.wk) {
                                (function(){
                                        if (isDomLoaded) { return; }
                                        if (!/loaded|complete/.test(doc.readyState)) {
                                                setTimeout(arguments.callee, 0);
                                                return;
                                        }
                                        callDomLoadFunctions();
                                })();
                        }
                        addLoadEvent(callDomLoadFunctions);
                }
        }(),

        icamoCookie = function() {
    
        }(),

        icamoSiteCookie = function() {
  
        }(),

        icamoSessionCookie = function() {
  
        }(),

        init = function() {
                if(doc.referrer) {
                        appendData('re',doc.referrer);
                }

                addLoadEvent(function(){isLoaded = true});

                var speed = getCookie(speedCookie);
                if(speed) {
                        appendData('sp',speed);
                }
                else {
                        addLoadEvent(iload);
                }

                appendData('fl',ua.pv[0]);
                appendData('nv',newVisitor);
                appendData('sv',ua.slv);
                appendData('tl',doc.title);
                appendData('ho',dlo.host);
                appendData('pa',dlo.pathname+dlo.search);
                appendData('tp',dc ? 'js' : 'jsnocookie');
                appendData('aw',screen.availWidth);
                appendData('ah',screen.availHeight);
                appendData('sw',screen.width);
                appendData('sh',screen.height);
                appendData('ww',self.innerWidth || (doc.documentElement.clientWidth || doc.body.clientWidth));
                appendData('wh',self.innerHeight || (doc.documentElement.clientHeight || doc.body.clientHeight));
                appendData('cd',screen.colorDepth);
                appendData('jv',ua.java);
                sendData();
                newVisitor=0;
                appendData('nv',newVisitor);

                addUnloadEvent(unload);
        }(),

        cleanup = function() {
                if (ua.ie && ua.win) {
                        addUnloadEvent(function() {
                                // remove listeners to avoid memory leaks
                                var ll = listenersArr.length;
                                for (var i = 0; i < ll; i++) {
                                        listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
                                }
                                // cleanup library's main closures to avoid memory leaks
                                for (var k in ua) {
                                        ua[k] = null;
                                }
                                ua = null;
                                for (var l in icamo) {
                                        icamo[l] = null;
                                }
                                icamo = null;
                        });
                }
        }();

        function createElement(el) {
                return doc.createElement(el);
        }

        function getJava() {
                return nav.javaEnabled() ? 1 : 0;
        }

        function getSilverLight(){
                slVersion = -1;

                if (win.ActiveXObject){
                        try {
                                var c =  new ActiveXObject(AGCONTROL);
                                var t = 5;
                                while(!c.IsVersionSupported(t+".0") && t>-1){
                                        t--;
                                }
                                c=null;
                                slVersion=t+".0";
                        }
                        catch(err){}
                }
                else {
                 var plugin = nav.plugins[SLV_PLUGIN];
                 if (plugin){
                        var p = plugin.description.split(".");
                        slVersion=p[0]+"."+p[1];
                 }
                }
                return slVersion;
        }

        /* cookie handlers */
        function setCookie(name, value, expires,domain) {
                var today=new Date();
            var expiredate = new Date();
            expiredate.setTime(today.getTime() + (expires * 1000));
            doc.cookie= name + "=" + escape(value) +
                ((expires) ? "; expires=" + expiredate.toGMTString() : "")+
                ((domain) ? "; domain="+domain : "");
        }

        function getCookie( name ) {
                var start = dc.indexOf( name + "=" );
                var len = start + name.length + 1;
                if ( ( !start ) && ( name != dc.substring( 0, name.length ) ) ) {
                return null;
        }
        if ( start == -1 ) return null;
        var end = dc.indexOf( ';', len );
        if ( end == -1 ) end = dc.length;

        var v = unescape( dc.substring( len, end ) );

        return v;
        }

        function appendData(id,val) {
                iDATA[id]=val;
        }

        function updateSpeed(speed) {
                var data = [];
                data['sp'] = speed;
                socket('update',data,'icamouf');
        }

        function sendData(_socket) {
                var act = typeof(_socket) == UNDEF ? 'update' : 'socket';
                socket(act,iDATA,'icamouf');
        }

        function addListener(target, eventType, fn) {
                target.attachEvent(eventType, fn);
                listenersArr[listenersArr.length] = [target, eventType, fn];
        }

        function callDomLoadFunctions() {
                if (isDomLoaded) { return; }
                try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
                        var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
                        t.parentNode.removeChild(t);
                }
                catch (e) { return; }
                isDomLoaded = true;
                var dl = domLoadFnArr.length;
                for (var i = 0; i < dl; i++) {
                        domLoadFnArr[i]();
                }
        }

        function addDomLoadEvent(fn) {
                if (isDomLoaded) {
                        fn();
                }
                else {
                        domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
                }
        }

        function addLoadEvent(fn) {
                if (typeof win.addEventListener != UNDEF) {
                        win.addEventListener("load", fn, false);
                }
                else if (typeof doc.addEventListener != UNDEF) {
                        doc.addEventListener("load", fn, false);
                }
                else if (typeof win.attachEvent != UNDEF) {
                        addListener(win, "onload", fn);
                }
                else if (typeof win.onload == "function") {
                        var fnOld = win.onload;
                        win.onload = function() {
                                fnOld();
                                fn();
                        };
                }
                else {
                        win.onload = fn;
                }
        }

        function addUnloadEvent(fn) {
                                if (typeof win.addEventListener != UNDEF) {
                        win.addEventListener("unload", fn, false);
                }
                else if (typeof doc.addEventListener != UNDEF) {
                        doc.addEventListener("unload", fn, false);
                }
                else if (typeof win.attachEvent != UNDEF) {
                        addListener(win, "onunload", fn);
                        addListener(win, "onbeforeunload", function() {
                        // Is there things still loading, then fake the unload event
                        if (doc.readyState == 'interactive') {
                                stop = function () {
                                        // Prevent memory leak
                                        doc.detachEvent('onstop', stop);
                                        // Call unload handler
                                        fn();
                                };

                                // Fire unload when the currently loading page is stopped
                                doc.attachEvent('onstop', stop);

                                // Remove onstop listener after a while to prevent the unload function
                                // to execute if the user presses cancel in an onbeforeunload
                                // confirm dialog and then presses the stop button in the browser
                                win.setTimeout(function() {
                                        doc.detachEvent('onstop', stop);
                                }, 0);
                        }
                        });
                }
                else if (typeof win.unonload == "function") {
                        var fnOld = win.unonload;
                        win.unonload = function() {
                                fnOld();
                                fn();
                        };
                }
                else {
                        win.onunload = fn;
                }
        }

        function iload() {
                onLoadTime = new Date().getTime();
                socket('dummy');
        }

        function iexit(load){
                if(!iexited) {
                        socket(load != 'unload' ? 'exit' : 'unload',null,null,1);
                        iexited=1;
                }
        }

        function unload() {
                iexit('unload');
        }

        function socket(_load,_data,_socketId,loadImage) {
                return false;
        }

        function removeScriptObject(objId) {
                var obj = getElementById(objId);
                if (obj && obj.nodeName && obj.nodeName.toUpperCase() == "SCRIPT") {
                        if (ua.ie && ua.win) {
                                if (obj.readyState == 4 || obj.readyState == 'complete') {
                                        removeObjectInIE(objId);
                                }
                                else {
                                        win.attachEvent("onload", function() {
                                                removeObjectInIE(objId);
                                        });
                                }
                        }
                        else {
                                obj.parentNode.removeChild(obj);
                        }
                }
        }


        function removeObjectInIE(objId) {
                var obj = getElementById(objId);
                if (obj) {
                        for (var i in obj) {
                                if (typeof obj[i] == "function") {
                                        obj[i] = null;
                                }
                        }
                        obj.parentNode.removeChild(obj);
                }
        }

        function load(jsFile,objId,noWrite) {

                removeScriptObject(objId);
                if(typeof(objId) == UNDEF) objId = '__lib'+Math.round(Math.random()*10000);
                noWrite = (typeof(noWrite) != UNDEF && noWrite ? true : false);

                if(ua.ie && !isLoaded && !isDomLoaded && !noWrite) {
                        doc.write('<scr'+ 'ipt src="'+jsFile+'" type="text/javascript" language="javascript" id="'+objId+'"></scr'+'ipt>');
                }
                else {
                        var s = doc.createElement('script');
                        s.setAttribute('id',objId);
                        s.setAttribute('type','text/javascript');
                        s.setAttribute('language','javascript');
                        s.setAttribute('src',jsFile);
                        dh.appendChild(s);
                }
        }

        function callOnLoadCallback(key) {           
                loadedLibs[key] = key;
                if(typeof(onLoadCallbacks[key]) == FUNC) {
                        onLoadCallbacks[key]();
                        onLoadCallbacks[key]=null;
                }
        };

        function getElementById(id) {
                var el = null;
                try {
                        el = doc.getElementById(id);
                }
                catch (e) {}
                return el;
        }

        return {

                _spdT: function(dSize){
                        /*var _s = onLoadTime;
                        var _e = new Date().getTime();
                        var _spd = parseInt(dSize/((_e-_s)/1000));
                        if(_spd>0){
                                updateSpeed(_spd);
                                setCookie(speedCookie,_spd,60*60*24);
                        }*/
                },

                setId : function(_id) {
                        id = _id;
                },

                track : function(p,params) {
                          
                },

                load : function(lib) {
                        if(typeof(lib) != OBJECT || lib.length < 1) {
                                return false;
                        }

                        var dynamic = '';
                        for(var l in lib){
                                var ver = lib[l];
                                if(typeof(addedLibs[l]) == UNDEF || l != addedLibs[l]) {
                                        if(dynamic != '') dynamic += ',';
                                        dynamic += l+':'+ver;
                                }
                        }

                        if(dynamic != '') {
                                lastLib = l;
                                addedLibs[lib] = lib;
                                var rnd = Math.random()*10000;
                                var jsFile = window.location.protocol+'//fi.icamo.com/dynamic/?lib='+dynamic+'&rnd='+rnd;
                                load(jsFile,lib);
                        }

                },

                setOnLoadCallback: function(func) {
                        if(typeof(func) != FUNC) {
                                return;
                        }

                        var key = lastLib;
                        if(typeof(onLoadCallbacks[key]) == FUNC && loadedLibs[key] != key) {
                                oldfunc = onLoadCallbacks[key];
                                onLoadCallbacks[key] = function() {
                                        oldfunc();
                                        func();
                                }
                        }
                        else {
                                onLoadCallbacks[key] = func;
                        }

                        if(loadedLibs[key] == key) {
                                callOnLoadCallback(key);
                        }
                },

                callOnLoadCallback: callOnLoadCallback,

                ua : ua,
                dl : dl,
                getElementById: getElementById,
                iDATA : iDATA,

                addLoadEvent : addLoadEvent,
                addDomLoadEvent: addDomLoadEvent,
                addUnloadEvent: addUnloadEvent,

                setVisibility: function(id, isVisible) {
                        var v = isVisible ? "visible" : "hidden";
                        if (isDomLoaded && getElementById(id)) {
                                getElementById(id).style.visibility = v;
                        }
                        else {
                                this.createCSS("#" + id, "visibility:" + v);
                        }
                },

                createCSS: function(sel, decl, media, newStyle) {
                        if (!ua.w3 || (ua.ie && ua.mac)) {
                                return;
                        }

                        if (ua.ie && ua.mac) { return; }
                        var h = doc.getElementsByTagName("head")[0];
                        if (!h) { return; } // to also support badly authored HTML pages that lack a head element
                        var m = (media && typeof media == "string") ? media : "screen";
                        if (newStyle) {
                                dynamicStylesheet = null;
                                dynamicStylesheetMedia = null;
                        }
                        if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
                                // create dynamic stylesheet + get a global reference to it
                                var s = createElement("style");
                                s.setAttribute("type", "text/css");
                                s.setAttribute("media", m);
                                dynamicStylesheet = h.appendChild(s);
                                if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
                                        dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
                                }
                                dynamicStylesheetMedia = m;
                        }
                        // add style rule
                        if (ua.ie && ua.win) {
                                if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
                                        dynamicStylesheet.addRule(sel, decl);
                                }
                        }
                        else {
                                if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
                                        dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
                                }
                        }
                },

                registeredSwfObjects: [],
                getNextRegisteredSwfObject: function() {
                        for (var k in this.registeredSwfObjects) {
                                var swfdiv = this.registeredSwfObjects[k];
                                delete this.registeredSwfObjects[k];
                                return swfdiv;
                        }
                },
                registerSwfObject: function(swfdiv) {

                        if(!swfdiv) {
                                var swfdiv = 'genFlashContent'+Math.round(Math.random()*10000);
                                document.write('<div id="'+swfdiv+'"></div>');
                        }

                        this.setVisibility(swfdiv,false);
                        this.registeredSwfObjects[this.registeredSwfObjects.length] = swfdiv;
                }
        };

}();

var inoob = icamo;

function ifl(p,t){ 
        icamo.track(p);
}

var f_ver = icamo.ua.pv[0];

function writeFlash(p1,p2,p3,p4,p5) {
        icamo.load({swfobject:'2.1'});
        
        var params = {};
        if(p4 != '') params.wmode = p4;
        if(p5 != '') params.bgcolor = p5;       
        var v = (typeof(r_version) != "undefined" ? ""+r_version : "8");
        
        var replaceElemIdStr = 'genFlashContent'+Math.round(Math.random()*10000);
        document.write('<div id="'+replaceElemIdStr+'"></div>');        
                
        icamo.setOnLoadCallback(function() {            
        swfobject.iembedSWF(p3, replaceElemIdStr, p1, p2, v, null, params);
        });
        
}

