// compress with yuicompressor
// something like:
// java -jar yuicompressor-2.4.2.jar ~/workspace/ninja_ar/WEB-INF/collector.js > out.js
// will work

var ninja_analyze = function(userId, userZone, userHash) {
	
	//var server = 'localhost:8080';
	var server = 'code.dumbo.shinobi.jp';
	var id = userId;
	var zone = userZone;
	var hash = userHash;
        var processed = false;

	return {
		userDefaults : function () {
		    var userData = new Array;
		    userData["last_access"] = 0;
		    userData["first_access"] = 0;
		    userData["session_start"] = 0;
		    userData["access_count"] = 0;
		    
		    return userData;
		},
		
		navigatorVals : function () {
		    var navData = new Array;
		    var scr = screen;
                    var ref;
		    navData["nav_width"] = scr.width;
		    navData["nav_height"] = scr.height;
		    navData["col_count"] = scr.colorDepth;
		    
		    var r=document.referrer;
			if(r==parent.document.URL)ref=top.document.referrer;
			if((r=='undefined')||(r=='')||(r=='[unknown origin]')||(r.search(/\.shinobi\.jp\/Rin\?$/)!=-1))	{
				r='X';
			}
			if(r=='bookmarks') {
				r='b';
			}
		    navData["referrer"] = r;
		
		    return navData;
		},
		
		GetCookie : function (name) {
			var content='', tmpstr=document.cookie+';', start = tmpstr.indexOf(name+'=');
			if(start!=-1)
			{
				start += (name.length+1);
				var end = tmpstr.indexOf(';', start);
				content=tmpstr.substring(start,end);
			}
			return content;	
		},
		
		StoreUserData : function (cookieName, prevAcc, firstAcc, sessStart, accCount, sessCount) {
		    if(!navigator.cookieEnabled) return 0;
		    
		    var cookie_string = cookieName + id + "=";
		    cookie_string += prevAcc + " ";
		    cookie_string += firstAcc + " ";
		    cookie_string += sessStart + " ";
		    cookie_string += accCount + " ";
		    cookie_string += sessCount;
		    
		    var d = new Date();
		    d.setTime(d.getTime() + 1000 * 60 * 60 * 24 * 365);
		    cookie_string += ";path=/;expires=" + d.toUTCString();
		    
		    document.cookie = cookie_string;
                    return 1;
		},
		
		// simple initial mockup. A proper implementation would decode a compressed
		// cookie
		ExtractUserData : function(cookieName, userData) {
		    var cookieData = this.GetCookie(cookieName+id);
		    if(!cookieData) return userData;
		    
		    splitData = cookieData.split(" ");
		    if(splitData.length < 5) return userData;
		    
		    userData["last_access"] = splitData[0];
		    userData["first_access"] = splitData[1];
		    userData["session_start"] = splitData[2];
		    userData["access_count"] = splitData[3];
		    userData["sess_count"] = splitData[4];
		        
		    return userData;
		},

		Process: function() {
                    // only run once
                    if(processed) {
                        return;
                    }
		    var d = new Date();
		    var now = d.getTime();
		    var userData = this.userDefaults();
		    var navigatorData = this.navigatorVals();
		    
		    
		    if(navigator.cookieEnabled != false)
		    {
		        // Be sure to modify the cookie name as the script changes to avoid
		        // version incompatibilities
		        userData = this.ExtractUserData("NinjaAccessUser", userData);
		    }
		
		    document.write('<scri','pt  src="http://', server ,'/ninja_ar/Receive?');
		    document.write('id=',id,'&last=',userData["last_access"]);
		    document.write('&hash=',userHash);
		    if(typeof zone ===  'number') {
		    	document.write('&zone=',zone);
		    } else {
		    	document.write('&zone=36'); // default to japan zone
		    }
		    document.write('&first=',userData["first_access"]);
		    document.write('&sess_start=',userData["session_start"]);
		    if(navigatorData["referrer"] != 'X') {
		    	document.write('&referrer=',encodeURIComponent(navigatorData["referrer"]));
		    }
		    if(userData["access_count"]) {
		    	document.write('&access_count=',userData["access_count"]);
		    }
		    if(userData["sess_count"]) {
		    	document.write('&sess_count=',userData["sess_count"]);
		    }
		    if(navigatorData["nav_width"]) {
		    	document.write('&nav_width=',navigatorData["nav_width"]);
		    }
		    if(navigatorData["nav_height"]) {
		    	document.write('&nav_height=',navigatorData["nav_height"]);
		    }
		    if(navigatorData["col_count"]) {
		    	document.write('&col_count=',navigatorData["col_count"]);
		    }
		    
		    document.write('" defer><\/scr','ipt>');
                    processed = true;
		}
	}
}


