/*-------------------------------
---------------------------------

To send a omniture call
<script src="s_code.js" language="JavaScript"></script>
<script src="genOmniture.js" language="JavaScript"></script>
genOmn.init("events:eventVal1, campaign:campaignVal, pageName:new page name, eVar33:newEvar", {trackDef:"page/link",obj:this,linkType:'e/d/o',linkName:'linkName'}, "dinosaurs!!!!!1");
---------------------------------
Edits:
4/13/2011 - Recreated
-------------------------------*/

var genOmn = {
	inputString: null,
	typeObj: {}, // optional; from a passed object
	customMetricArray: null, // will be an array of each var to send
	linkTrackVars: '', // comma separated list of custom metrics
	linkTrackEvents: '', // comma separated list of custom events
	linkTrackVarsArray: [], // array of linkTrackVars
	clearArray: [], // disregard; used to blow all objects away
	init: function(inputString, typeObj, suiteName){
		//if(suiteName)
		if(typeObj && typeof typeObj == 'object')
			this.typeObj = typeObj;
		this.typeObjParse();
		this.inputString = inputString;
		this.customMetricArray = this.parseInputString(); // set customMetricArray to an array object
		this.parseMetrics();
		this.writeMetrics();
		//this.debug();
		this.send();
		this.remove();
	},
	typeObjParse: function(){
		// set necessary defaults
		var data = this.typeObj;
		if(!data.trackDef)
			this.typeObj.trackDef = 'link';
		if(!data.obj)
			this.typeObj.obj = 'true';
		if(!data.linkType)
			this.typeObj.linkType = 'o';
		if(!data.linkName)
			this.typeObj.linkName = 'Custom Link';
		
		//for(var i in this.typeObj){ document.write('<br>'+i+':'+this.typeObj[i]); } // debug
	},
	parseInputString: function(){
		var data = this.inputString;
		var objArray = [];
		var firstSplit = data.split(',');
		for(var i=0; i<firstSplit.length; i++){
			var secondSplit = firstSplit[i].split(':'); // variables broken out and comma separated
			var newObj = {n:secondSplit[0],v:secondSplit[1]};
			// n:prop1, v:Cars
			//document.write('<br />NEW OBJECT: n:' + secondSplit[0] + ', v:'+secondSplit[1]);
			objArray.push(newObj);
		}
		return objArray;
	},
	parseMetrics: function(){
		var data = this.customMetricArray;
		for(var i=0; i<data.length; i++){
			var n = data[i].n.toString().replace(' ','');
			// filter multiple events
			if(!data[i].v && n.indexOf('event') != -1){
				this.linkTrackEvents += n + ',';
				n = null;
			}
			if(n){
				//document.write('<br />'+n+':'+s[n]); // view all your vars
				this.linkTrackVars += n + ',';
				var isEvent = (n.indexOf('event') != -1) ? true : false;
				if(isEvent){
					this.linkTrackEvents += data[i].v + ',';
				} else {
					this.clearArray.push('s.'+n);
					this.linkTrackVarsArray.push('s.' +n+ '="' +data[i].v+ '"');
				}
			}
		}
	},
	writeMetrics: function(){
		// write each s
		for(var i = 0; i<this.linkTrackVarsArray.length; i++){ eval(this.linkTrackVarsArray[i]+';'); }
		this.linkTrackVars = this.linkTrackVars.slice(0,-1);
		this.linkTrackEvents = this.linkTrackEvents.slice(0,-1);
		eval('s.linkTrackVars="'+this.linkTrackVars+'"');
		eval('s.linkTrackEvents="'+this.linkTrackEvents+'"');
		eval('s.events="'+this.linkTrackEvents+'"');
	},
	debug: function(){
		// debug and check
		var debug = '';
		debug += 'DEBUG VALUES:<br>';
		debug += '<br>s.linkTrackVars = '+s.linkTrackVars;
		debug += '<br>s.linkTrackEvents = '+s.linkTrackEvents;
		for(var j = 0; j<this.clearArray.length; j++){
			var k = eval(this.clearArray[j]);
			debug += '<br>'+this.clearArray[j]+' = '+k;
		}
		debug += '<br>s.events = '+s.events;
		$('#debugText').html(debug);
	},
	remove: function(){
		while (this.clearArray.length>0){ eval(this.clearArray.pop()+'=null;'); }
		s.events = null;
		s.linkTrackVars	= '';
		s.linkTrackEvents = '';
		this.linkTrackVars = '';
		this.linkTrackEvents = '';
		this.linkTrackVarsArray = [];
		this.clearArray = [];
		// clear init vars
		this.inputString = null;
		this.typeObj = {};
		this.customMetricArray = null;
		this.linkTrackVarsArray = [];
	},
	send: function(){
		var data = this.typeObj;
		if(data.trackDef && data.trackDef.toLowerCase() == 'page')
			s.t();
		else
			s.tl(data.obj, data.linkType, data.linkName);
		return false;
	}
}
