// logger.js 02/2008
// 
// records any line of data inside a chat* session
// results are pulled from server logs
// base should be 'relative path' e.g. /file/bug.data not http://server/file/bug.data

logger = function() {
	var session;
	var transactionID;
	var baseURL;
	var ready=false;
	
	// called to do setup
	this.set=function(base) {
		session=newSession();
		transactionID=0;
		baseURL=base;
		ready=true;
	}
	
	// interal, creates session ID
	newSession=function() {
		var newSession='';
		var alphanum='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		for (var i=0;i<=16;i++) {
			newSession+=alphanum.charAt(rndnum(alphanum.length-1));
		}
		return(newSession);
	}
	
	// called to do a single logging
	this.log=function(user,line,flags) {
		if (ready) {
			transactionID++;
			//alert("logging \nuser["+user+"]\nline["+line+"]\nflags["+flags+"]\nsession["+session+"]\ntransactionID["+transactionID+"]");
			if(window.XMLHttpRequest) {
				try { reqObj = new XMLHttpRequest(); } catch(e) { reqObj = false; }
			} else if(window.ActiveXObject) {
				try { reqObj = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { 
				try { reqObj = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { reqObj = false; } }
			}
			if(reqObj) {
				reqObj.open("GET", buildURL(user,line,flags), true);
				reqObj.onreadystatechange = function() { }; // do not care what happens to it server is loggin HTTP requests
				reqObj.send("");
			}
		}
	}
	
	// internal, builds the url containing all the logable data.
	buildURL=function(user,line,flags) {
		var url = baseURL;
		url+='?sID=' + session;
		url+='&tID=' + transactionID;
		url+='&user=' + escape(user);
		url+='&line=' + escape(line);
		url+='&flags=' + escape(flags);
		return(url);
	}
	
	// returns a random number between 0 and 'limit'
	rndnum=function(limit) {
		return(Math.round((Math.random()*limit)));
	}
}