	/********************************************************************************************** /
	/ Yodel&trade; Prices JavaScript Animaition Driver							 		 /
	/ =========================================									 		 /
	/ This is one of two JavaScript documents which the prices page of the Yodel&trade; website	 /
	/ uses. This script provides a few auxilliary functions to the Calculation/Communication        /													 /
	/ script.																		 /
	/ 																	 		 /
	/ Developed by Kashi Samarweera for Yodel&trade; Australia, 2009.						 /
	/ © FulfilNET | Yodel&trade; Australia 2009											 /
	/ **********************************************************************************************/

	var animationSpeed = 20;

	var startWatch = false;
	var iteration = 0;
	var fadeTargets = new Array();
	var selectedPkg = null;
	
	var pkgFadeTarget = 0;
	var pkgFade = 65;
	var pkgSelected = 0;
	
	var targetSaving = 0;
	var packageBoxHeight = 83;
	
	var formContents;


	window.onload = function () {
		if (String(navigator.appVersion).indexOf('MSIE 7.0') > 0) {
			animationSpeed = 15;
			document.getElementById('packageHighlight').innerHTML = "";
			document.getElementById('packageHighlight').style.border = '1px solid #454545';
		}
		startWatch = true;
		watchFade();
		document.getElementById("packageHighlight").style.top = "0px";
		formContents = document.getElementById('formDiv').innerHTML;					
	}
	
	if (overAlpha == undefined) {
		var overAlpha = 100;
	}
	
	if (outAlpha == undefined) {
		var outAlpha = 65;
	}
	
	
	function fade() {
		if (startWatch == true) {
			var evt = window.event || arguments.callee.caller.arguments[0];
			var callerElement = evt.target || evt.srcElement;
			
			if (getSaving(callerElement) > 0) {
				document.getElementById('savingDiv').innerHTML = "Saving " + currencySymbol + getSaving(callerElement);
				document.getElementById('savingDiv').className = 'savingFigure';
			} else {
				document.getElementById('savingDiv').innerHTML = 'Minimum Spend';
				document.getElementById('savingDiv').className = 'savingText';
			}
			
			switch ( String(callerElement.className).substring(0,String(callerElement.className).indexOf('Pkg')) ) {
				case "green" : pkgSelected = 0; break;
				case "yellow" : pkgSelected = 1; break;
				case "blue" : pkgSelected = 2; break;
				case "gold" : pkgSelected = 3; break;
				default : pkgSelected = -1;
			}
			
			if (fadeTargets[callerElement.id] == undefined) {
				fadeTargets[callerElement.id] = overAlpha;
				pkgFadeTarget = 100;
			
				changeOpacity(outAlpha, callerElement.id);
				callerElement.onmouseout = function () {
					fadeTargets[callerElement.id] = outAlpha;
					if (startWatch == true) {
						if (document.getElementById('savingDiv').innerHTML = "Saving " + currencySymbol + getSaving(callerElement)) {
							document.getElementById('savingDiv').innerHTML = '';
						}
					}
						
				}
				callerElement.onclick = function () {
					if (getPkgDetails != undefined) {
						if (startWatch == true) {
							getPkgDetails(callerElement);
							selectedPkg = callerElement;
							startWatch = false;
						}
						
					}
				}
			} else {
				fadeTargets[callerElement.id] = overAlpha;
			}
		}
	}
	
	function watchFade() {
		if (startWatch == true) {
			keyCounter = 0;
			for (key in fadeTargets) {
				keyCounter++;
				if (getOpacity(key) > -1) {
					currentA = getOpacity(key);
					targetA = fadeTargets[key];
					if (targetA >= currentA) {
						progress = Math.round( ((currentA) + (targetA))/ 2);
					} else {
						progress = Math.round( ((currentA*3) + (targetA))/ 4);
					}
					if ( Math.abs(currentA - targetA) <= 5) {
						changeOpacity(fadeTargets[key], key);
						if (targetA == outAlpha) {
							delete fadeTargets[key];
						}					
					} else {
						changeOpacity(progress, key);
					}
				}
				
			}
			if (keyCounter == 0) {
				pkgFadeTarget = 0;
			}
			
			// Adjust the package highlighter
			pkgSelectId = "packageHighlight";
			var newFade = (pkgFade > pkgFadeTarget) ? Math.floor(((pkgFade*9) + pkgFadeTarget) / 10) : Math.ceil(((pkgFade*9) + pkgFadeTarget) / 10 );
			//var newFade = Math.round( ((pkgFade*9) + pkgFadeTarget) / 10 );
			changeOpacity(newFade, pkgSelectId);
			pkgFade = newFade;
			
			document.getElementById(pkgSelectId).style.display = (pkgFade > 0) ? "block" : "none";
			
			
			

		}
		
		// This is the only animated portion that doesn't freeze when the fade effects are disabled.
		
		// Adjust the position to suit the selected pakage.
		pkgSelectId = "packageHighlight";
		currentPos = String(document.getElementById(pkgSelectId).style.top).replace(/[^0-9.,]/g, "");
		targetPos = String((currentPos > (pkgSelected*packageBoxHeight)) ? Math.floor( ( (currentPos*9) + pkgSelected*packageBoxHeight) / 10) : Math.ceil( ( (currentPos*9) + pkgSelected*packageBoxHeight) / 10 ));
		pkgSlider = document.getElementById("packageHighlight").style.top = targetPos + "px";
		//document.title = "pkgSlider.style.top: " + pkgSlider.style.top + " | currentPos: " + currentPos + "px |  targetPos: " + targetPos + "px";
		
		setTimeout("watchFade()", animationSpeed);
	}

	
	function changeOpacity(newOpacity, elementToChangeId) { 
		var elementToChange = document.getElementById(elementToChangeId).style; 
		elementToChange.opacity = (newOpacity / 100); 
		elementToChange.MozOpacity = (newOpacity / 100); 
		elementToChange.KhtmlOpacity = (newOpacity / 100); 
		elementToChange.filter = "alpha(opacity=" + newOpacity + ")"; 
	}


	function getOpacity(elementId) {
		if (elementId != undefined) {
			callerElement = document.getElementById(elementId);
		} else {
			if (window.event == undefined && arguments.callee.caller.arguments[0] == undefined) {
				window.alert("function getOpacity([elementId])\nError: You must either specify an element or call upon a specific event.");
			} else {
				var evt = window.event || arguments.callee.caller.arguments[0];
				var callerElement = evt.target || evt.srcElement;
			}
		}
		
		if (callerElement != undefined) {
			if (fadeTargets[callerElement.id] != undefined) {
				if (!isNaN(Number(callerElement.style.opacity)) ) {
					return Math.round(callerElement.style.opacity * 100);
				}
				if (!isNaN(Number(callerElement.style.MozOpacity)) ) {
					return Math.round(callerElement.style.MozOpacity * 100);
				}
				if (!isNaN(Number(callerElement.style.KhtmlOpacity)) ) {
					return Math.round(callerElement.style.KhtmlOpacity * 100);
				}
				ieOpacity = callerElement.style.filter;
				ieOpacity = ieOpacity.substring(14,ieOpacity.indexOf(')'));
				if (!isNaN(Number(ieOpacity)) ) {
					return Number(ieOpacity);
				}
			}
		}
		return -1;
	}

	// Chrome, because of its scarily fast JS interpreting
	if (String(navigator.appVersion).indexOf('Chrome') > 0) {
		animationSpeed = 30;
	}
	// IE6 Doesn't support PNG Transparency out-of-the-box
	if (String(navigator.appVersion).indexOf('MSIE 6.0') > 0) {
		document.writeln('<style type="text/css">#highlightImg { behavior: url(../js/iepngfix.htc); }</style>');
		animationSpeed = 1;
	}