var clickStream = function(){
	this.client = {
		_timezone: function(){
		 	var reg = /GMT|UTC/i;
			var dateStr   = new Date().toString();
			var zoneStart = dateStr.search(reg);
			return dateStr.substring(zoneStart).split(" ")[0];
		},
		_browser: function(){
			var userAgent = navigator.userAgent.toLowerCase();
			var version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1];
			var type;
			if( /webkit/.test( userAgent ) )
				type = "Safari";
			else if( /opera/.test( userAgent ) )
				type = "Opera";
			else if( /msie/.test( userAgent ) && !/opera/.test( userAgent ) )
				type = "MSIE";
			else if( /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) )
				type = "Firefox";
			else type = "Unknown";
			return {
				type: type, version: version
			}
		},
		_currentpage: function(){
			return window.location.href;
		},
		_screen: function(){
			return {
				width: screen.width, height: screen.height 
			}
		}
	}
	
};

clickStream.SitesKey  = null;
clickStream.UserId	  = null;
var getPostValue;

clickStream.prototype.getJumpURL = function( clickElem ){
	var tname = clickElem.tagName.toLowerCase();
	var etype = clickElem.type;
	if(tname == "a"){
		if( (clickElem.href.indexOf("://") == -1) && (clickElem.onclick) )
			return clickElem.onclick.toString();
		else
			return clickElem.href;
	}
	else if(tname == "input" && (etype == "submit" || etype == "button" || etype == "image")){
		var inputType = clickElem.type;
		if($(document).submit() && (inputType == "submit" || inputType == "image")){
			var isForm = $(clickElem);
			while(isForm.is("form") != true){
				isForm = isForm.parent();
			}
			getPostValue = getParameters( clickElem.form );
			
			return isForm.attr("action")?isForm.attr("action"):isForm.attr("onsubmit");
		}
		else
			return clickElem.onclick.toString();
	}
	else if(tname == "img" && clickElem.parentNode.tagName.toLowerCase() == "a"){
		return clickElem.parentNode.href;
	}
	else 
		return false;
};
var ce = document.cookie;
var sidExpr = /JSESSIONID=(\w+)/i;
var exprMatch = sidExpr.exec( ce );

clickStream.prototype.toSend = function( jumpUrl, clickElem ){
	var requrl="http://home.bundlerank.com/weba/cs?jsoncallback=?";
	
	$.getJSON(
		requrl,
		{
			skey : 	this.SitesKey, 
			uid: 	this.UserId?this.UserId:"",
			tname : clickElem.tagName,
			eid  : 	clickElem.getAttribute("id"),
			etype: 	clickElem.type,
			ex  : 	$(clickElem).offset().left,
			ey  : 	$(clickElem).offset().top,
			cpage: 	this.client._currentpage(),
			jpage: 	jumpUrl,
			uzone: 	this.client._timezone(),
			sw: 	this.client._screen().width,
			sh: 	this.client._screen().height,
			bt: 	this.client._browser().type,
			bv: 	this.client._browser().version,
			ce:		document.cookie,
			sid:	exprMatch[1],
			pp:		getPostValue
		}
	);
};
clickStream.prototype.inPageSend = function(){
	$.getJSON(
		"http://home.bundlerank.com/weba/wl?jsoncallback=?",
		{
			skey : 	this.SitesKey, 
			uid: 	this.UserId?this.UserId:"",
			cpage: 	this.client._currentpage(),
			uzone: 	this.client._timezone(),
			sw: 	this.client._screen().width,
			sh: 	this.client._screen().height,
			bt: 	this.client._browser().type,
			bv: 	this.client._browser().version,
			ce:		document.cookie,
			sid:	exprMatch[1]
		}
	);
};
clickStream.prototype.listener = function(){
	var cs = this;
	if( this.SitesKey ){
		this.inPageSend();

		$(document).click(function( e ){
			var clickElem = e.target || e.srcElement;
			var jumpUrl = cs.getJumpURL( clickElem );
			if( jumpUrl ){
				cs.toSend( jumpUrl, clickElem );
			}
		});
	}
};
function getParameters( form ) {
   var obj = form;
   var getstr = "";
   for (i=0; i<obj.elements.length; i++) {
    if (obj.elements[i].tagName == "INPUT") {
         if (obj.elements[i].type == "text" ) {
            getstr += obj.elements[i].name + "=" + encodeURIComponent(obj.elements[i].value) + "&";
         }
         if (obj.elements[i].type == "checkbox") {
            if (obj.elements[i].checked) {
               getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
            } else {
               getstr += obj.elements[i].name + "=&";
            }
         }
         if (obj.elements[i].type == "radio") {
            if (obj.elements[i].checked) {
               getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
            }
         }
      }   
      if (obj.elements[i].tagName == "SELECT") {
         var sel = obj.elements[i];
         getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
      }
   }
   return getstr;
}
(function(){
	var cs = window.clickStream = window.cs = new clickStream();
})();

