function OnSizeMouseOver(e, mainTable, disabledClassName, selectedClassName, hoverClassName, sizeStructureID, oldClassFieldID, callOutStructureID, showCallOuts, divCallOutPointerID, divCallOutMessageID, handlingMessageLabelID, alternateHandlingMessage, currentHandlingMessageFieldID, originalHandlingMessageFieldID)
{
    
	var sizeStructure = document.getElementById(sizeStructureID);
	
	var activePageWidth = sizeListActivePageWidth; // Usable page width in pixels
	var isLeftJustified = sizeListIsLeftJustified; // Indicates whether the site is left justified.
	
	if(sizeStructure && sizeStructure.className != disabledClassName && sizeStructure.className != selectedClassName)
	{
		var oldClassField = document.getElementById(oldClassFieldID);
		
		if(oldClassField)
		{
			oldClassField.value = sizeStructure.className;
			sizeStructure.className = hoverClassName;
		}
	}
	
	var callOutStructure = document.getElementById(callOutStructureID);
		
	if(callOutStructure && showCallOuts == "true")
	{
		// In IE, the callOutStructure, a tr, will reserve 1px for itself when visible.
		// It will not in FireFox, so there is no need to adjust the margin
		if(navigator.appVersion.indexOf("MSIE") > -1)
		{
			mainTable.style.marginTop = "0px";
		}
		
		callOutStructure.style.visibility = "visible";
		callOutStructure.style.display = "";
		
		var divCallOutPointer = document.getElementById(divCallOutPointerID);
		var divCallOutMessage = document.getElementById(divCallOutMessageID);
		
		if(divCallOutPointer && divCallOutMessage)
		{
		
		    // Move the top of the call out message box up based on the message height, plus 11 px for the pointer.
			divCallOutMessage.style.marginTop = (-1 * (11 + divCallOutMessage.offsetHeight)) + "px";
			
			// Make sure that the edge of the callout message box doesn't leave the product size list box.
			if ( isLeftJustified )
			{
			    // If the site is left justified, then the calculation is a little different -- simpler.
			    if ( ( divCallOutMessage.offsetLeft + divCallOutMessage.offsetWidth + 12 ) > activePageWidth )
		        {
		            divCallOutMessage.style.marginLeft = (-1 * ( ( divCallOutMessage.offsetLeft + divCallOutMessage.offsetWidth + 12 ) - activePageWidth ) ) + "px";
		        }
		    }
		    else
		    {
		         // This site isn't left justified, so we do have to take the center of the page into account in our calculations.
		        var windowWidth = (window.innerWidth) ? window.innerWidth : document.body.clientWidth;
		        if((divCallOutMessage.offsetLeft + divCallOutMessage.offsetWidth + 12) > (((windowWidth - activePageWidth) / 2) + activePageWidth))
		        {
    		    
		            // This if a Firefox fix. It seems that FF caches the position of the box between hides and shows.  Therefore, if the
		            // position of the box is less than 1, then we can assume that the box has already been moved, and it shouldn't 
		            // be moved again. 
		            if ( ((divCallOutMessage.offsetLeft + divCallOutMessage.offsetWidth + 12) - (((windowWidth - activePageWidth) / 2) + activePageWidth)) > 1 )
		            {
			            divCallOutMessage.style.marginLeft = (-1 * ((divCallOutMessage.offsetLeft + divCallOutMessage.offsetWidth + 12) - (((windowWidth - activePageWidth) / 2) + activePageWidth))) + "px";
			        }
		        }
		    }
		    
		}
	}
	
	var handlingMessageLabel = document.getElementById(handlingMessageLabelID);
	
	if(handlingMessageLabel)
	{
		var originalHandlingMessageField = document.getElementById(originalHandlingMessageFieldID);
		var currentHandlingMessageField = document.getElementById(currentHandlingMessageFieldID);
		
		//This capture the original and current handling messages on the first mouseover
		if(originalHandlingMessageField && originalHandlingMessageField.value.length == 0 && currentHandlingMessageField && currentHandlingMessageField.value.length == 0)
		{
			originalHandlingMessageField.value = handlingMessageLabel.innerHTML;
			currentHandlingMessageField.value = handlingMessageLabel.innerHTML;
		}
		
		if(alternateHandlingMessage && alternateHandlingMessage.length > 0)
		{
			handlingMessageLabel.innerHTML = alternateHandlingMessage;
		}
		else
		{
			handlingMessageLabel.innerHTML = originalHandlingMessageField.value;
		}
	}
}

function OnSizeMouseOut(e, mainTable, selectedClassName, sizeStructureID, oldClassFieldID, callOutStructureID, handlingMessageLabelID, currentHandlingMessageFieldID)
{
	var element = e.relatedTarget || e.toElement;
	
	var sizeStructure = document.getElementById(sizeStructureID);
	
	if(IsChildOf(element, sizeStructure))
	{
		return;
	}
	
	var oldClassField = document.getElementById(oldClassFieldID);
	
	if(sizeStructure && oldClassField)
	{
		if(sizeStructure.className != selectedClassName)
		{
			sizeStructure.className = oldClassField.value;
		}
	}
	
	var callOutStructure = document.getElementById(callOutStructureID);
		
	if(callOutStructure)
	{
		// In IE, the callOutStructure, a tr, will reserve 1px for itself ONLY when visible.
		// It will not in FireFox, so there is no need to adjust the margin
		if(navigator.appVersion.indexOf("MSIE") > -1)
		{
			mainTable.style.marginTop = "1px";
		}
		
		callOutStructure.style.visibility = "hidden";
		callOutStructure.style.display = "none";
	}
	
	var handlingMessageLabel = document.getElementById(handlingMessageLabelID);
		
	if(handlingMessageLabel)
	{
		var currentHandlingMessageField = document.getElementById(currentHandlingMessageFieldID);
		
		if(currentHandlingMessageField)
		{
			handlingMessageLabel.innerHTML = currentHandlingMessageField.value;
		}
	}
}

function OnSizeClick(e, disabledClassName, selectedClassName, sizeStructureID, selectedSizeLongNameLabelID, longName, selectedSkuFieldID, sizeSku, sizeSkuCode, skuCodeContainer, selectedSkuRequiredFieldValidatorID, alternateHandlingMessage, handlingMessageLabelID, currentHandlingMessageFieldID, originalHandlingMessageFieldID, addToCartHandlingMessageID, addToCartHandlingMessage)
{
	var sizeStructure = document.getElementById(sizeStructureID);
	
	if(sizeStructure && sizeStructure.className != disabledClassName && sizeStructure.className != selectedClassName)
	{
		sizeStructure.className = selectedClassName;
		
		var selectedSkuField = document.getElementById(selectedSkuFieldID);
		
		if(selectedSkuField)
		{
			if(typeof(OmnitureSelectedSkuCodeContainer) != 'undefined' && skuCodeContainer)
			{
				eval(skuCodeContainer + ' = sizeSkuCode');
			}
			
			selectedSkuField.value = sizeSku;
			
			var selectedSizeLongNameLabel = document.getElementById(selectedSizeLongNameLabelID);
			
			if(selectedSizeLongNameLabel)
			{
				selectedSizeLongNameLabel.innerHTML = longName
				
				var selectedSkuRequiredFieldValidator = document.getElementById(selectedSkuRequiredFieldValidatorID);
				
				if(selectedSkuRequiredFieldValidator)
				{
					selectedSkuRequiredFieldValidator.style.visibility = "hidden";
					
					var handlingMessageLabel = document.getElementById(handlingMessageLabelID);
					var currentHandlingMessageField = document.getElementById(currentHandlingMessageFieldID);
					
					if(handlingMessageLabel)
					{
						if(alternateHandlingMessage && alternateHandlingMessage.length > 0)
						{
							if(currentHandlingMessageField)
							{
								currentHandlingMessageField.value = alternateHandlingMessage;
							}
						
							handlingMessageLabel.innerHTML = alternateHandlingMessage;
						}
						else
						{
							var originalHandlingMessageField = document.getElementById(originalHandlingMessageFieldID);
							
							if(currentHandlingMessageField)
							{
								currentHandlingMessageField.value = originalHandlingMessageField.value;
							}
							
							handlingMessageLabel.innerHTML = originalHandlingMessageField.value;
						}
					}
					
					var addToCartHandlingMessageLabel = document.getElementById(addToCartHandlingMessageID);
					
					if ( addToCartHandlingMessageLabel )
					{
					    if(addToCartHandlingMessage && addToCartHandlingMessage.length > 0)
						{
							addToCartHandlingMessageLabel.innerHTML = addToCartHandlingMessage;
						}
					}
				}
			}
		}
	}
}

function OnRadioSizeClick(selectedSkuFieldID, skuId, skuCode, skuCodeContainer)
{
	var selectedSkuField = document.getElementById(selectedSkuFieldID);

	if(selectedSkuField)
	{
		selectedSkuField.value = skuId;
		if(typeof(OmnitureSelectedSkuCodeContainer) != 'undefined' && skuCodeContainer)
		{
			eval(skuCodeContainer + ' = skuCode');
		}
	}
}

function SizeReset(sizeStructureID, oldClassFieldID)
{
	var sizeStructure = document.getElementById(sizeStructureID);
	var oldClassField = document.getElementById(oldClassFieldID);
	
	if(sizeStructure && oldClassField)
	{
		sizeStructure.className = oldClassField.value;
	}
}

function IsChildOf(target, container)
{
	var count = 0;
	
	while(target)
	{
		if(target == container)
		{
			if(count == 0)
			{
				return false
			}
			else
			{
				return true;
			}
		}
		
		target = target.parentNode;
	}
	
	return false;
}
