
function tracker(prodid){
  	sendRequest( 'POST', '/htbtrack/tracker', null ,null, null, null,'prodid='+prodid,false );
}


// Basic oncomplete/onerror functions
function oncomplete(request, target) {
//donothing
}	 

/*
Core Mongoose functionality
author: Steve Hall Novell, Inc. 2006
*/


// Core request object
var request = new Request();


// Core activity object
var activity = new Array();


// Request object
function Request() {
	this.newInstance = function(method, source, target, displayonerror, onerror, oncomplete, ontimeout) {
		var request = null;
		if(window.XMLHttpRequest) {
			try {
				request = new XMLHttpRequest();
			}
			catch(e) {
				request = null;
			}
		}
		else {
			try {
				request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e) {
				try {
					request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e) {
					request = null;
				}
			}
		}
		if(request != null) {
			try {
				var activityObject = new Object();
				activityObject.ontimeout = ontimeout;
				activityObject.target = target;
				activityObject.timestamp = new Date().getTime();
				activityObject.request = request;
				var identifier = activity.push(activityObject) - 1;
				request.open(method, source);
				if(method.toLowerCase() == 'post') {		
					request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
					request.setRequestHeader("x-Referer",document.location);
					request.setRequestHeader("x-webidsynchid",9876);
				}
				request.onreadystatechange = new Callback().newInstance(identifier, request, target, displayonerror, onerror, oncomplete);
			}
			catch(e) {
				request = null;
			}
		}
		return request;
	}	
}


// Callback object
function Callback() {	
	this.newInstance = function(identifier, request, target, displayonerror, onerror, oncomplete) {
		var callback = null;
		callback = function() {
			if(request.readyState == 4) {
				activity[identifier] = null;
				if(request.status == 200) {
					if(target != null) {
						if(document.getElementById(target) != null) {
							document.getElementById(target).innerHTML = request.responseText;
						}
					}
					if(oncomplete != null) {
						if(!hasActivity()) {
							oncomplete(request, target);
						}
					}
				}
				else {
					if(displayonerror) {
						if(target != null) {
							document.getElementById(target).innerHTML = request.responseText;
						}
					}
					if(onerror != null) {
						onerror(request, target);
					}
				}
			}
		}
		callback.identifier = identifier;
		callback.request = request;
		callback.onerror = onerror;
		callback.oncomplete = oncomplete;
		return callback;
	}	
}


// Activity check
function hasActivity() {
	for(counter=0; counter < activity.length; counter++) {
		if(activity[counter] != null) {
			return true;
		}
	}
	activity.splice(0, activity.length);
	return false;
}

function monitorActivity() {
	for(counter=0; counter < activity.length; counter++) {
		if(activity[counter] != null) {
			var currentTimestamp = new Date().getTime();
			var activityObject = activity[counter];
			var activityObjectTimeout = activityObject.ontimeout;
			var activityObjectTarget = activityObject.target;
			var activityObjectTimestamp = activityObject.timestamp;
			if((currentTimestamp - activityObjectTimestamp) > 30000) {
				var activityObjectRequest = activityObject.request;
				activityObjectRequest.abort();
				activity[counter] = null;
				activityObjectTimeout(activityObjectRequest, activityObjectTarget);
			}
		}
	}
}


// Generic action function
function sendRequest(method, source, target, displayonerror, onerror, oncomplete, payload, toggleStatus) {
	var method = method;
	var source = source;
	var target = target;
	var displayonerror = displayonerror;
	var onerror = onerror;
	var oncomplete = oncomplete;
	var ontimeout = 100; //onTimeoutRequest;
	var payload = payload;
	var toggleStatus = toggleStatus;
	var process = request.newInstance(method, source, target, displayonerror, onerror, oncomplete, ontimeout);
	if(process != null) {
			process.send(encodeFormData(payload));
		if(toggleStatus) {
		}
	}
	else {
		if(toggleStatus) {
			statusRequestError();
		}
	}
}

// from utils.js
// URL encode/decode utilities
function encodeFormData(value) {
	var mystring = encodeURI(value);
	var regexp = /\+/g;
	return mystring.replace(regexp,"%2B");
}

function showElementById(id) {
	var element = document.getElementById(id);
	if(element != null) {
		element.style.display = 'block';
	}
}

// Swap image source utilities
function setImageSourceById(id, source) {
	var element = document.getElementById(id);
	if(element != null) {
		element.src = source;
	}
}

// Swap image alt/title utilities
function setImageAltById(id, text) {
	var element = document.getElementById(id);
	if(element != null) {
		element.alt = text;
	}
}

function setImageTitleById(id, text) {
	var element = document.getElementById(id);
	if(element != null) {
		element.title = text;
	}
}

// Set element text utilities
function setTextById(id, text) {
	var element = document.getElementById(id);
	if(element != null) {
		element.innerHTML = text;
	}
}


// From mogoose.js
// Basic status functions
function statusLoading() {
	showElementById('statusContainer');
	setImageSourceById('statusImg', '../images/status_loading.gif');
	setImageAltById('statusImg', 'Content Loading...');
	setImageTitleById('statusImg', 'Content Loading...');
	setTextById('statusText', 'Content Loading...');
}
// From mogoose.js
function statusRequestError() {
	showElementById('statusContainer');
	setImageSourceById('statusImg', '../images/status_error.gif');
	setImageAltById('statusImg', 'Error with Request');
	setImageTitleById('statusImg', 'Error with Request');
	setTextById('statusText', 'Error with Request');
}


