SKYPE.namespace("www");
SKYPE.www.ReportBrowserStatistics = function()
{
    //var reportingUrl = "http://c.skype.com/i/images/buttons/green/green_comp_right.png";
    var reportingUrl = "/apps/analytics/report.gif";
    var reportingFlashUrl = "/apps/analytics/report.swf?2";
    
    var _reportingFlashDivId = "reportingFlashDiv";
    var _reportingImageId = "reportingImage";
    
    //startup
    YAHOO.util.Event.onDOMReady(init);
    
    function init(){
        var reportId = getUniqueId();
        
        writeReportingFlash(reportId);
        
        var report = {
            'id': reportId,
            'js_ver': getJSVersion(),
            'cookies_enabled': getCookiesEnabled(),
            'fl_ver_js': getFlashVersion(),
            'silverlight_ver': getSilverlightVersion(),
            'scr_w': window.screen.width,
            'scr_h': window.screen.height,
            'view_w': YAHOO.util.Dom.getViewportWidth(),
            'view_h': YAHOO.util.Dom.getViewportHeight(),
            'gears_enabled': getGoogleGearsEnabled(),
            'sqlite_enabled': getWebkitSqliteEnabled(),
            'page_lang': getPageLanguage()
        };
        sendReport(report);
    }    
    
    function writeReportingFlash(reportId) {
	    var so = new SWFObject(reportingFlashUrl, "reportFlash", "3", "3", 6, "#FFFFFF");
	    so.addVariable("reportingUrl", reportingUrl);
	    so.addVariable("reportId", reportId);
	    so.addParam("wmode", "transparent");
	    
	    var container = getReportinFlashContainer();
        so.write(container.id);
    }
    function getReportinFlashContainer() {
        // Load SWF temporarily in page corner
        var D = YAHOO.util.Dom;
        var container = D.get(_reportingFlashDivId);
        
        if (!container) {
            container = document.createElement("DIV");
            container.id = _reportingFlashDivId;
            D.setStyle(container, "position", "absolute");
            D.setStyle(container, "width", "3px");
            D.setStyle(container, "height", "3px");
            D.setStyle(container, "font", "1px monospace");
            D.setStyle(container, "top", "0px");
            D.setStyle(container, "left", "0px");
            document.body.appendChild(container);
        }
        return container;
    }
    
    
    function sendReport(report){
        var url = reportingUrl +"?JAVASCRIPT"+ reportToUrlParams(report);
        
        var img = getReportingImage();
    	img.src = url;
    }
    function getReportingImage(){
        var D = YAHOO.util.Dom;
    	var image = D.get(_reportingImageId);
    	
        if(!image) {
            image = document.createElement("IMG");
            image.id = _reportingImageId;
            
            D.setStyle(image, "position", "absolute");
            D.setStyle(image, "left", "-100px");
            D.setStyle(image, "width", "3px");
            D.setStyle(image, "height", "1px");
            
            document.body.appendChild(image);
        }
        return image;
    }
    
    
    
    function reportToUrlParams(report) {
    	var url = "";
    	//console.log("ReportJS:")
    	for(var param in report){
    	    //console.log(param+"="+report[param]);
    	    url += "&"+param+"="+report[param];
    	}
    	return url;
    }
    
    function getUniqueId(){
        var id;
        
        if(getCookiesEnabled())
            id = getSessionId();
            
        if(!id)
            id = String(Math.random()).substring(2,13);   
        
        return id;
    }
    function getSessionId() {
        var id=""
        try {
            id = document.cookie.match(/session#(.*?)#/)[1]
        } catch(e){}
        return id;
     }
    

    function getCookiesEnabled(){
        var cookieEnabled=(navigator.cookieEnabled)? true : false

        //if not IE4+ nor NS6+
        if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
            if(document.cookie.lenght > 0){
                cookieEnabled = true
            } else {
                document.cookie = "testcookie";
                cookieEnabled = (document.cookie.indexOf("testcookie")!=-1) ? true : false
            }
        }
        return cookieEnabled;
    }
    function getJSVersion(){
        var jsVer = "1.0";
        if (typeof(isNaN) == "function") jsVer = "1.1";
        if (typeof(isFinite) == "function") jsVer = "1.2";
        if (typeof(NaN) == "number") jsVer = "1.3";
        if (typeof(decodeURI) == "function") jsVer = "1.5";
        if (typeof(Array.forEach) == "function") jsVer = "1.6";
        if (typeof(Iterator) == "function") jsVer = "1.7";
        if (typeof(Array.reduceRight) == "function") jsVer = "1.8";
        
        return jsVer;
    }
    function getFlashVersion() {
    	var ver = deconcept.SWFObjectUtil.getPlayerVersion();

    	return ver['major']+"."+ ver['minor'] +"."+ ver['rev'];
    }
    
    function getSilverlightVersion() {
        var version = null;
        try {
            try {
                var control = new ActiveXObject('AgControl.AgControl');
                if(control)
                    version = "1.0.0.0";
                
                if(control.isVersionSupported('2.0'))
                    version = '2.0.0.0';
                
                control = null;
            }
            catch (e) {
                var plugin = navigator.plugins["Silverlight Plug-In"] ;
                if ( plugin ) {
                    version = plugin.description;
                    //some weird stuff
                    if (version === "1.0.30226.2")
                        version = "2.0.30226.2";
                }
            }
        } catch(e){}
        
        return version;
    }
    
    function getGoogleGearsEnabled() {
        var gearsFound = false;
        try{
        	gearsFound = !!(typeof GearsFactory != 'undefined' || navigator.mimeTypes['application/x-googlegears'] || new ActiveXObject('Gears.Factory'));
        }catch(e){}
        
        return gearsFound;
    }
    
    function getWebkitSqliteEnabled() {
        var sqliteFound = false;
        try {
            sqliteFound = !!(window.openDatabase);
        }catch(e){}
        
        return sqliteFound;
    }
    
    function getPageLanguage() {
        var lang = "";
        try {
            if(location.href.indexOf("/intl/") < 0)
                lang = "en-us"
            else
                lang = location.href.split("/")[4];
        }catch(e){}
        
        return lang;
    }
    
    //NO public API
    return {};
}();
