function MDVEventLog() {
	this.url = 'http://transit.511.org/services/utils/LogEventImg.aspx';
	this.image = [];
	this.event = {
		GENERAL_SECTION_PAGE_GENERATED: 100000,
		GENERAL_PRINTABLE_MAP: 100001,
		
		SECTION1_TRIP_PLANNING_PAGE_GENERATED: 101000,
		SECTION1_NEAR_BY_SERVICES_PAGE_GENERATED: 101001,
		SECTION1_RAIL_SYSTEM_PAGE_GENERATED: 101002,
		SECTION1_ITINERARY_GENERATED: 101003,
		SECTION1_ITINERARY_VIEWED: 101004,
		SECTION1_AGENCY_APPEARS_IN_ITINERARY: 101005,
		SECTION1_ITINERARY_SCHEDULE: 101006,
		SECTION1_EMPTY_ITINERARY_: 101007,
		SECTION1_LOCATION_POP_UP_FORM_SHOWN: 101008,
		SECTION1_PRINTABLE_ITINERARY_WITHOUT_MAP: 101009,
		SECTION1_PRINTABLE_ITINERARY_WITH_MAP: 101010,
		SECTION1_PRINTABLE_NEAR_BY_SERVICES_RESULTS: 101011,
		SECTION1_ADDRESS_LOCATION_FOUND: 101012,
		SECTION1_ADDRESS_LOCATION_AMBIGOUS: 101013,
		SECTION1_ADDRESS_LOCATION_NOT_FOUND: 101014,
		SECTION1_TRIPPLANNER_COVERAGE_MAP: 101015,
		SECTION1_ITINERARY_MAP: 101016,
		SECTION1_NEAR_BY_SERVICE_MAP: 101017,
		SECTION1_RAIL_SYSTEM_MAP: 101018,
		SECTION1_CLEAN_INTERFACE: 101019,
		SECTION1_ITINERARY_EMAILED: 101020,  /*Mantis#2636*/
		SECTION1_ITINERARY_ERROR: 101021,  /*Mantis#3055*/

		CC_HOME_PAGE_GENERATED: 201000,
		CC_ITINERARY_GENERATED: 201003,
		CC_ITINERARY_VIEWED: 201004,
		CC_AGENCY_APPEARS_IN_ITINERARY: 201005,
		CC_ITINERARY_SCHEDULE: 201006,
		CC_EMPTY_ITINERARY_: 201007,
		CC_LOCATION_POP_UP_FORM_SHOWN: 201008,
		CC_PRINTABLE_ITINERARY_WITHOUT_MAP: 201009,
		CC_PRINTABLE_ITINERARY_WITH_MAP: 201010,
		CC_ADDRESS_LOCATION_FOUND: 201012,
		CC_ADDRESS_LOCATION_AMBIGOUS: 201013,
		CC_ADDRESS_LOCATION_NOT_FOUND: 201014,
		CC_ITINERARY_MAP: 201016,
		CC_ITINERARY_EMAILED: 201017   /*Mantis#2636*/
		
	};

	this.image.require = function () {
		var ret = null;
		for (var i=0; i < this.length; i++) {
			if (this[i].vacant && this[i].vacant == true)
				ret = this[i];
		}
		
		if (!ret) {
			ret = new Image();
			this.push(ret);
		}
		
		ret.vacant = false;
		
		ret.onload = function (e) {
			this.vacant = true;
		};
		
		ret.setURL = function (url) {
			this.src = url;
		};
		
		return ret;
	};
	
	this.trigger = function(event, pageid, desc) {
		if (typeof event == 'string')
			event = this.event[event];

		var ext = null;
		if (arguments.length == 4)
			ext = arguments[3];			
	
		var dt  = new Date();
		var img = this.image.require();
		var trg = {};
			trg['eventids'] = event;
			trg['pageid']   = '/tripplanner/' + pageid;
			trg['desc']     = desc;
			trg['ts']     	= dt.getTime();
			trg['Referrer'] = document.referrer;
			
			trg = $H(trg);
			trg = this.url + '?' + trg.toQueryString();
			
			if (ext)
				trg += ext;
				
		img.setURL(trg);
	}
	
	this.onLoad = function (e) {
		var inputs = document.getElementsByTagName('input');

		for (var is in inputs) {
			if (typeof inputs[is] != 'object' || !inputs[is].name || inputs[is].name != 'srcid')
				continue;

			if (typeof inputs[is] == 'object' && inputs[is].value.length > 0) {
				this.trigger(this.event.SECTION1_CLEAN_INTERFACE, 'coverage.html', inputs[is].value);
				break;
			}
		}

		var event_page = document.getElementById('event_page');
		var event_ids = document.getElementById('event_ids');
		var event_desc = document.getElementById('event_desc');

		var location_dm = document.getElementById('location_dm');
		var commands = document.getElementsByName('prevCommand');
		for (var i=0; i < commands.length; i++) {
			var command = commands[i].value;
			if (location_dm != null || command == 'tripRetoure' || command == 'tripGoOn' || command == 'changeRequest')
				return false;
		}
		
		if (!event_page || !event_ids || !event_desc)
			return;
		
		if (event_ids.value != '' && event_ids.value.indexOf(',') != -1) {
			var ids = event_ids.value.split(',');
			
			for (var i=0; i < ids.length; i++) {
				var logevent = this.event[ids[i]];
				if (logevent)
					this.trigger(logevent, event_page.value, event_desc.value, i);
			}			
		} else {		
			if (!event_ids || event_ids.value == '')
				return;
			
			var logevent = this.event[event_ids.value];
			
			if (logevent) {
				this.trigger(logevent, event_page.value, event_desc.value);
			}	
		}
		
		var nameStateOrig = document.getElementById('nameState_origin');
		var nameStateDest = document.getElementById('nameState_destination');
		var nameStateDM = document.getElementById('nameState_dm');
		
		if (nameStateOrig && nameStateOrig.value == 'notidentified') {
			var desc = '';
			var nameOrig = document.getElementById('name_origin');
			var placeOrig = document.getElementById('place_origin');
			
			desc += 'Location: ' + nameOrig.value;
			
			if (placeOrig)
				desc += ' City: ' + placeOrig.value;

			this.trigger(this.event.SECTION1_ADDRESS_LOCATION_NOT_FOUND, 'coverage.html', desc);
		} else if (nameStateOrig && nameStateOrig.value == 'list') {
			var nameOrig = document.getElementById('nInput_origin');

			this.trigger(this.event.SECTION1_ADDRESS_LOCATION_AMBIGOUS, 'coverage.html', nameOrig.value);
		}

		if (nameStateDest && nameStateDest.value == 'notidentified') {
			var desc = '';
			var nameDest = document.getElementById('name_destination');
			var placeDest = document.getElementById('place_destination');
			
			desc = 'Location: ' + nameDest.value;
			if (placeDest)
				desc += ' City: ' + placeDest.value;

			this.trigger(this.event.SECTION1_ADDRESS_LOCATION_NOT_FOUND, 'coverage.html', desc);
		} else if (nameStateDest && nameStateDest.value == 'list') {
			var nameDest = document.getElementById('nInput_destination');
			
			this.trigger(this.event.SECTION1_ADDRESS_LOCATION_AMBIGOUS, 'coverage.html', nameDest.value);
		}

		if (nameStateDM && nameStateDM.value == 'notidentified') {
			var desc = '';
			var nameDM = document.getElementById('name_dm');
			var placeDM = document.getElementById('place_dm');

			desc = 'Location: ' + nameDM.value;
			if (placeDM)
				desc += ' City: ' + placeDM.value;

			if (nameDM)
				this.trigger(this.event.SECTION1_ADDRESS_LOCATION_NOT_FOUND, 'coverage.html', desc);
		} else if (nameStateDM && nameStateDM.value == 'list') {
			var nameDM = document.getElementById('nInput_dm');

			if (nameDM)
				this.trigger(this.event.SECTION1_ADDRESS_LOCATION_AMBIGOUS, 'coverage.html', nameDM.value);
		}
	};	
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
	target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
	target.attachEvent("on" + eventType, functionRef);
  }
  else
  {
	eventType = "on" + eventType;

	if (typeof target[eventType] == "function")
	{
	  var oldListener = target[eventType];

	  target[eventType] = function()
	  {
		oldListener();

		return  functionRef();
	  }
	}
	else
	{
	  target[eventType] = functionRef;
	}
  }

  return true; 
}

/*
 * 
 * PREDEFINED OBJECTS
 * extend only if method is not defined elsewhere.
*/
if (typeof Function.prototype.bind !== 'function') {
 	Function.prototype.bind = function(obj) {
	  var method = this, temp = function() {
	    return method.apply(obj, arguments);
	   };
	  return temp;
	 }; 
}

if (typeof String.prototype.trim !== 'function') {
	String.prototype.trim = function () {
	    return this.replace(/^\s+|\s+$/g, "");
	}; 
}

var mdvEventLog = new MDVEventLog();
attachEventListener(window, 'load', mdvEventLog.onLoad.bind(mdvEventLog), false);