/**
    Livewell pre-alpha 0.1
    All rights reserved
    Copyright 2005 - Kelly Norton
    A later version will be released under creative
    commons non-commercial, share-alike, attribution
    license. stay tuned.
**/
var gDebug = false;
var gNotifyURL = "/php/lw/lw.php";
var gConsoleID = "debug-console";

var vbFlashInstalled=0;

//browser stuff
var isMac = (navigator.appVersion.indexOf("Mac")>=0);
var isNS4 = (document.layers)?true:false;
var isIEMac = ((document.all)&&isMac);
var isIE4 = ((document.all)&&navigator.appVersion.indexOf("MSIE 4."));
var isIE5 = ((document.all)&&navigator.appVersion.indexOf("MSIE 5."));

var gLWDebugFunc = null;
var gLoadTasks = new Array();
var gXMLHttpReq = null;
var gLWDays = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var gLWMons = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

XHR_READYSTATE_UNINIT       = 0;
XHR_READYSTATE_LOADING      = 1;
XHR_READYSTATE_LOADED       = 2;
XHR_READYSTATE_INTERACTIVE  = 3;
XHR_READYSTATE_COMPLETE     = 4;

function debug(msg) {
    if (!document.getElementById)
        return;

    var c = document.getElementById(gConsoleID);
    if (!c || c.nodeName != 'OL')
        return;

    var li = c.appendChild(
        document.createElement('li'));
    li.appendChild(
        document.createTextNode(msg));
    
}

function debug_openConsole() {
    if (!document.getElementsByTagName)
        return;

    var b = document.getElementsByTagName("body");
    if (b.length!=1)
        return;
    b = b[0];

    var u = b.appendChild(
        document.createElement("ol"));

    u.setAttribute('id',gConsoleID);
    u.style.backgroundColor = '#ffffff';
    u.style.position = 'absolute';
    u.style.top = '20px';
    u.style.left = '20px';
    u.style.border = '1px solid black';
    u.style.width = '50%';
}

function _safeLoader() {
    if (gDebug)
        debug_openConsole();

    for (i=0;i<gLoadTasks.length;i++)
        gLoadTasks[i]();
}

function runOnLoad(js) {
    //TODO: Don't worry about this crappy old browser.
    /*
    if (isIEMac && isIE4) {
        window.onload = _safeLoader;
        gLoadTasks[gLoadTasks.length]=js;
        return;
    }
    */

    if ((gLoadTasks.length==0) && window.onload)
        gLoadTasks[gLoadTasks.length]=window.onload;
    window.onload = _safeLoader;
    gLoadTasks[gLoadTasks.length]=js;
}

function getRFC822Date(date) {
    var tzh = date.getTimezoneOffset()/60;
    var tzm = date.getTimezoneOffset()%60;
    return gLWDays[date.getDay()] + ", "
        + date.getDate() + " "
        + gLWMons[date.getMonth()] + " "
        + date.getFullYear() + " "
        + date.getHours() + ":"
        + date.getMinutes() + ":"
        + date.getSeconds() + " "
        + ((tzh>0)?"-":"+") + ((Math.abs(tzh)<10)?"0"+Math.abs(tzh):Math.abs(tzh))
        + ((tzm<10)?"0"+tzm:tzm);
}

function gatherFlashData() {
    var isInstalled=0;
    var version=0;
    if (navigator.plugins && navigator.plugins.length) {
        var plg = navigator.plugins["Shockwave Flash"];
        if (plg) {
            isInstalled=2;
            var des = plg.description;
            if (des)
                version=des.charAt(des.indexOf('.')-1);
        }
        else {
            isInstalled=1;
        }

        if (navigator.plugins["Shockwave Flash 2.0"]) {
            isInstalled=2;
            version = 2;
        }
    }
    else if (navigator.mimeTypes && navigator.mimeTypes.length) {
        var mim = navigator.mimeTypes['application/x-shockwave-flash'];
        if (mim && mim.enabledPlugin)
            isInstalled=2;
        else
            isInstalled=1;
    }
    else if (eval("vbFlashInstalled")>0) {
        isInstalled=vbFlashInstalled;
        version=vbFlashVersion;
    }

    return "flash_is_detected="+(isInstalled>0)+"&flash_version="+version;
}

function gatherData() {
    var _referrer = (document.referrer)?document.referrer:"";
    var _location = (document.location)?document.location:"";

    var _winWidth = (window.outerWidth)
        ?window.outerWidth
        :(document.body && document.body.clientWidth)
                ?document.body.clientWidth
                :0;
    var _winHeight = (window.outerHeight)
        ?window.outerHeight
        :(document.body && document.body.clientHeight)
                ?document.body.clientHeight
                :(document.documentElement && document.documentElement.clientHeight)
                        ?document.documentElement.clientHeight
                        :0;

    var _availWidth = (screen.availWidth)?screen.availWidth:0;
    var _availHeight = (screen.availHeight)?screen.availHeight:0;

    var _scrWidth = (screen.width)?screen.width:0;
    var _scrHeight = (screen.height)?screen.height:0;

    var _scrColorDepth = (screen.colorDepth)?screen.colorDepth:0;

    var _navCodeName = (navigator.appCodeName)?navigator.appCodeName:"";
    var _navAppName = (navigator.appName)?navigator.appName:"";

    var _navLanguage = (navigator.browserLanguage)
        ?navigator.browserLanguage
        :(navigator.language)
                ?navigator.language
                :"";
    var _navCookiesEnabled = (navigator.cookieEnabled)?navigator.cookieEnabled:"";
    var _navPlatform = (navigator.platform)?navigator.platform:"";

    var _navTime = getRFC822Date(new Date());
    /* unused */
    //navMinorVersion = (navigator.appMinorVersion)?navigator.appMinorVersion:"-";
    //navMajorVersion = (navigator.appMajorVersion)?navigator.appMajorVersion:"-";
    //navCPUClass = (navigator.cpuClass)?navigator.cpuClass:"-";
    //navSysLanguage = (navigator.systemLanguage)?navigator.systemLanguage:"-";
    //navUserLanguage = (navigator.userLanguage)?navigator.userLanguage:"-";
    //navVersion = (navigator.appVersion)?navigator.appVersion:"-";

    //debug(_navTime);
    //debug(urlencode(_location));
    //debug(urlencode(_referrer));

    return "version="+"0.1"
        + "&debug="+((gDebug)?"1":"0")
        + "&date="+_navTime
        + "&date_tz="+new Date().getTimezoneOffset()
        + "&referrer="+_referrer
        + "&location="+_location
        + "&window_width="+_winWidth
        + "&window_height="+_winHeight
        + "&screen_avail_width="+_availWidth
        + "&screen_avail_height="+_availHeight
        + "&screen_width="+_scrWidth
        + "&screen_height="+_scrHeight
        + "&screen_color_depth="+_scrColorDepth
        + "&browser_codename="+_navCodeName
        + "&browser_appname="+_navAppName
        + "&browser_language="+_navLanguage
        + "&browser_cookies_are_enabled="+_navCookiesEnabled
        + "&browser_user_agent="+navigator.userAgent
        + "&platform="+_navPlatform
        + "&"+gatherFlashData();
}

function notify() {
    var req=null;
    /* gather info */
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (!req)
        return;

    debug("Notify: " + getRFC822Date(new Date()));
    req.open("POST",gNotifyURL);
    req.onreadystatechange = function() {
        if (req.readyState == XHR_READYSTATE_COMPLETE) {
            var xml = req.responseXML;
            if (!xml) {
                debug("(ERROR) Server response was invalid");
                debug(req.responseText);
            }
            if (xml && xml.documentElement) {
                var d = xml.documentElement.getAttribute("debug");
                if (d=='true'||d=='yes' || d=='1') {
                    d = xml.documentElement;
                    for (var i=0;i<d.childNodes.length;i++) {
                        if (d.childNodes[i].nodeName == 'message')
                            debug(d.childNodes[i].childNodes[0].nodeValue);
                    }
                }
            }
            debug("Done");
        }
    }
    req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    req.send(gatherData());
}
runOnLoad(function() { notify(); });

