var DISPLAY_TYPE_NONE = 'none';
var CONTENT_ID_SUFFIX = 'c';
var TAB_PREFIX = 'ut';
var HOVER_SUFFIX = '_o';
var HOVER_TIMEOUT = 200;
var hoverDisplayAfterTimer;
var activeTabId;
var pageLoaded;

function GetElem(elemId) {
	return document.getElementById(elemId);
}

function SetActiveTabId(tabId) {
	activeTabId = tabId;
	SetTabStyle(GetElem(tabId), true);
}

function TabOver(tabObj) {
	hoverDisplayAfterTimer = window.setTimeout('ShowTabContent("' + tabObj.id + '")', HOVER_TIMEOUT);
}

function TabOut(tabObj) {
	window.clearTimeout(hoverDisplayAfterTimer);
}

function ShowTabContent(tabId) {
	if (tabId != activeTabId && pageLoaded) {
		var tabElem = GetElem(activeTabId);
		SetTabStyle(tabElem, false);

		tabElem = GetElem(tabId);
		SetTabStyle(tabElem, true);

		SetTabContentDisplay(activeTabId, DISPLAY_TYPE_NONE);

		SetTabContentDisplay(tabId, '');

		if (typeof(pngfix) != 'undefined') {
			pngfix();
		}

		activeTabId = tabId;
	}
}

function SetTabContentDisplay(tabId, tabContentDisplay) {
	var tabContentElem = GetElem(tabId + CONTENT_ID_SUFFIX);
	if (tabContentElem) {
		tabContentElem.style.display = tabContentDisplay;
	}
}

function SetTabStyle(tabElem, isActive) {
	if (tabElem) {
		if (isActive) {
			tabElem.className += HOVER_SUFFIX;
			var compId = tabElem.id.substring(TAB_PREFIX.length);
			if (compId.indexOf('Ultimate') == -1) {
				SetImgSrc('img' + compId + 'Box', '/Images/ProductBox/' + compId + '_box.png');
			}
			else {
				var compIdShort = compId.replace('Ultimate', '');
				SetImgSrc('img' + compId + 'Icon', '/Images/ProductIcon/' + compIdShort + '_icon.png');
				SetImgSrc('img' + compId + 'Screenshot', '/Images/Screenshot/' + compIdShort + '_screenshot.png');
			}
		}
		else {
			tabElem.className = tabElem.className.substring(0, tabElem.className.length - HOVER_SUFFIX.length);
		}
	}
}

function SetImgSrc(imgId, imgSrc) {
	var imgElem = GetElem(imgId);
	if (imgElem && imgElem.src.indexOf(imgSrc) == -1) {
		imgElem.src = imgSrc;
	}
}
function Body_Onload(compId) {
	pageLoaded = true;
	SetActiveTabId(TAB_PREFIX + compId);
	DoCallback("/Analytics.asmx/AddAnalytics", document.referrer);
}
var pendingCallbacks = new Array();

function DoCallback(serverPage, eventArgument, eventCallback) {
	var xmlRequest = GetXMLHTTPObj();
	if (xmlRequest) {
		var callback = new Object();
		callback.eventCallback = eventCallback;
		var callbackIndex = FillFirstAvailableSlot(pendingCallbacks, callback);

		callback.xmlRequest = xmlRequest;
		xmlRequest.open('POST', serverPage, true);
		xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlRequest.onreadystatechange = CallbackComplete;
		xmlRequest.send('CALLBACKPARAM=' + EncodeCallback(eventArgument));
	}
}

function GetXMLHTTPObj() {
	var XMLHTTPObj = null;
	if (window.XMLHttpRequest) {
		try {
			XMLHTTPObj = new XMLHttpRequest();
		}
		catch (e) {
			XMLHTTPObj = null;
		}
	}
	else if (window.ActiveXObject) {
		try {
			XMLHTTPObj = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e) {
			try {
				XMLHTTPObj = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch (e) {
				XMLHTTPObj = null;
			}
		}
	}
	return XMLHTTPObj;
}

function CallbackComplete() {
	for (i = 0; i < pendingCallbacks.length; i++) {
		callbackObject = pendingCallbacks[i];
		if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
			ExecuteCallback(callbackObject);
			pendingCallbacks[i] = null;
		}
	}
}

function ExecuteCallback(callbackObject) {
	if ((typeof(callbackObject.eventCallback) != 'undefined') && (callbackObject.eventCallback != null)) {
		callbackObject.eventCallback(callbackObject.xmlRequest.responseText);
	}
}

function FillFirstAvailableSlot(arr, obj) {
	var i;
	for (i = 0, loopCnt = arr.length; i < loopCnt; i++) {
		if (!arr[i]) break;
	}
	arr[i] = obj;
	return i;
}

function EncodeCallback(parameter) {
	if (encodeURIComponent) {
		return encodeURIComponent(parameter);
	}
	else {
		return escape(parameter);
	}
}
