function toggleEtc(typeStr, action){
      var elements = getElementsByClassName(typeStr);

    for ( var i = 0 ; i<elements.length ; i++ ) {
        elements[i].style.display=action;
    }
}
function xstooltip_findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function xstooltip_findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


function xstooltip_show(tooltipId, parentId, posX, posY) {
	it = document.getElementById(tooltipId);

	if ((it.style.top == '' || it.style.top == 0)
			&& (it.style.left == '' || it.style.left == 0)) {
		//                         need to fixate default size (MSIE problem)
		it.style.width = it.offsetWidth + 'px';
		it.style.height = it.offsetHeight + 'px';

		img = document.getElementById(parentId);

		// if tooltip is too wide, shift left to be within parent
		if (posX + it.offsetWidth > img.offsetWidth) posX = img.offsetWidth - it.offsetWidth;
		if (posX < 0) posX = 0;

		x = xstooltip_findPosX(img) + posX;
		y = xstooltip_findPosY(img) + posY;

		it.style.top = y + 'px';
		it.style.left = x + 'px';
	} else {
		img = document.getElementById(parentId);

		// if tooltip is too wide, shift left to be within parent
		if (posX + it.offsetWidth > img.offsetWidth) posX = img.offsetWidth - it.offsetWidth;
		if (posX < 0) posX = 0;

		x = xstooltip_findPosX(img) + posX;
		y = xstooltip_findPosY(img) + posY;

		it.style.top = y + 'px';
		it.style.left = x + 'px';
	}

	it.style.visibility = 'visible';
}

function xstooltip_hide(id) {
	it = document.getElementById(id);
	it.style.visibility = 'hidden';
}
function imageSwap(aImage)
			{
			var imageSrc = aImage.src;
			if (imageSrc.indexOf("_f2") != -1)
				{
				aImage.src = imageSrc.replace("_f2", "");
				}
			else
				{
				aImage.src = imageSrc.replace(".png", "_f2.png");
				//			aImage.src = imageSrc.replace(".gif", "_f2.gif");
				}
			}
		function imageSwapGif(aImage)
			{
			var imageSrc = aImage.src;
			if (imageSrc.indexOf("_f2") != -1)
				{
				aImage.src = imageSrc.replace("_f2", "");
				}
			else
				{
				aImage.src = imageSrc.replace(".gif", "_f2.gif");
				}
			}

		function action(aAction)
			{

			var doAction = true;
			//brings up a warning dialog if there is a second argument - which is the warning message
			//used in the "remove me" action on the myDetails page
			if (arguments.length > 1)
				doAction = confirm(arguments[1]);

			if (doAction)
				{
				//a second form exists for the engineering works period
				if (aAction.indexOf("changeEngWorksPeriod") != -1)
					{
					document.formEngWorks.action.value = aAction;
					var select = document.getElementById("realengperiod");
					document.formEngWorks.period.value = select.options[select.selectedIndex].value;
                    pageTracker._trackEvent('Scope Change Event', aAction);
                    document.formEngWorks.submit();
					}
				else if (aAction.indexOf("changeTubeIncident") != -1)
					{
					document.formTubeDisruption.action.value = aAction;
					var select = document.getElementById("tubeUpdateLocation");
                    document.formTubeDisruption.formTubeUpdateLocation.value = select.options[select.selectedIndex].value;
					select = document.getElementById("tubeUpdatePeriod");
					document.formTubeDisruption.formTubeUpdatePeriod.value = select.options[select.selectedIndex].value;
                    pageTracker._trackEvent('Scope Change Event', aAction);
                    document.formTubeDisruption.submit();
					}
				else
					{
					//cforms
					var widget = document.form[aAction];
					if (widget != null)
						{
						widget.value = aAction;
						}
					//journeycheck
					document.form.action.value = aAction;
                    pageTracker._trackEvent('Route Event', aAction);
					document.form.submit();
					}
				}
			}


		function changeTubeIncident(aType)
			{
			var doAction = true;
			//brings up a warning dialog if there is a second argument - which is the warning message
			//used in the "remove me" action on the myDetails page
			if (arguments.length > 1)
				doAction = confirm(arguments[1]);

			if (doAction)
				{
                document.formTubeDisruption.action.value = "changeTubeIncident";
                var select = document.getElementById(aType + "TubeUpdateLocation");
                document.formTubeDisruption.formTubeUpdateLocation.value = select.options[select.selectedIndex].value;
                select = document.getElementById(aType + "TubeUpdatePeriod");
                document.formTubeDisruption.formTubeUpdatePeriod.value = select.options[select.selectedIndex].value;
                document.formTubeDisruption.formTubeUpdateType.value = aType;
                pageTracker._trackEvent('Scope Change Event cTI', aType);
                document.formTubeDisruption.submit();
                }
            }


		function showHideFI(divId, linkId)
			{
			var div = document.getElementById(divId);
			var link = document.getElementById(linkId);

			if (div.style.display == 'block')
				{
				div.style.display = 'none';
				link.innerHTML = 'Show Further Information';
				}
			else
				{
				div.style.display = 'block';
				link.innerHTML = 'Hide Further Information';
				}
			}

		function showHideServiceCallingStations(aAction,aId)
			{
				if(aAction=="show"){
					//hide show calling stations button
					document.getElementById("serviceCallingStationsLink-" + aId).style.display = "none";

					//show calling stations table for the service id
					document.getElementById("serviceCallingStations-" + aId).style.display = "block";
					var buttonImg;
					if(!((version >= 5.5) && (document.body.filters))){
						// get the hide calling stations button for the service id
						buttonImg = document.getElementById("hideServiceCallingStationsButton-"+aId);
						//check to see if the image button is in a mouseover state and remove the _f2 from source
						if(buttonImg.src.indexOf("_f2")!=-1){
							var imgSrc = buttonImg.src;
							buttonImg.src = imgSrc.replace("_f2","");
						}
					}
					else{
						var images = document.getElementsByTagName("img");
						for(i=0;i<images.length;i++){
								if(images[i].id=="hideServiceCallingStationsButton-"+aId){
									buttonImg = images[i];
							}
						}
					}
					//for some browsers the height and width of the hidden image must be reset
					//			if(browser.PNGTransSupport!=1){
					//				buttonImg.height = "18";
					//				buttonImg.width = "46";
					//				buttonImg.style.display = "block";
					//			}
				}
				// hide calling stations
				else{
					if(!((version >= 5.5) && (document.body.filters))){
						//get the show calling stations button for the service id
						var buttonImg = document.getElementById("serviceCallingStationsButton-"+aId);
						//check to see if the image button is in a mouseover state and remove the _f2 from source
						if(buttonImg.src.indexOf("_f2")!=-1){
							var imgSrc = buttonImg.src;
							buttonImg.src = imgSrc.replace("_f2","");
						}
					}
					//display the show calling stations button
					document.getElementById("serviceCallingStationsLink-" + aId).style.display = "block";
					//hide the calling stations table
					document.getElementById("serviceCallingStations-" + aId).style.display = "none";
				}
			}

		function showElement(aName) {
			var elements = document.getElementsByName(aName);
			document.getElementById(aName).style.display="inline";
				for(i=0;i<elements.length;i++) {
					elements.item(i).style.display="inline";
				}
		}

		function hideElement(aName) {
			elements = document.getElementsByName(aName);
			document.getElementById(aName).style.display="none";
				for(i=0;i<elements.length;i++) {
					elements.item(i).style.display="none";
				}
		}

		function showDivHideButton(aDiv, aShowButton, aHideButton) {
			//showElement(aDiv);
			hideElement(aShowButton);
			showElement(aHideButton);
		}

		function hideDivShowButton(aDiv, aShowButton, aHideButton) {
			//hideElement(aDiv);
			showElement(aShowButton);
			hideElement(aHideButton);
		}
		function showBox(){
			var showBoxId = document.getElementById('box_i');
			if(showBoxId.style.display=='none'){
				showBoxId.style.display='block';
			}
			if ((version >= 5.5) && (version < 7) && (document.body.filters))
				{
					setImgForMessageBox();
				}
		}
		function hide(aId)
			{
			var element = document.getElementById(aId);
			element.style.display = "none";
			}

		function beginDrag(elementToDrag, event) {
			// Compute the distance between the upper-left corner of the element
			// and the mouse-click. The moveHandler function below needs these values.
			var deltaX = event.clientX - parseInt(elementToDrag.style.left);
			var deltaY = event.clientY - parseInt(elementToDrag.style.top);
			// Register the event handlers that will respond to the mousemove events
			// and the mouseup event that follow this mousedown event.
			if (document.addEventListener) {  // DOM Level 2 Event Model
				// Register capturing event handlers
				document.addEventListener("mousemove", moveHandler, true);
				document.addEventListener("mouseup", upHandler, true);
			}
			else if (document.attachEvent) {  // IE 5+ Event Model
				// In the IE event model, we capture events by calling
				// setCapture() on the element to capture them.

				elementToDrag.attachEvent("onmousemove", moveHandler);
				elementToDrag.attachEvent("onmouseup", upHandler);
				elementToDrag.setCapture();
			}
			else {  // IE 4 Event Model
				// In IE 4 we can't use attachEvent(  ), so assign the event handlers
				// directly after storing any previously assigned handlers, so they
				// can be restored. Note that this also relies on event bubbling.
				var oldmovehandler = document.onmousemove;
				var olduphandler = document.onmouseup;
				document.onmousemove = moveHandler;
				document.onmouseup = upHandler;
			}

			// We've handled this event. Don't let anybody else see it.
			if (event.stopPropagation) event.stopPropagation(  );  // DOM Level 2
			else event.cancelBubble = true;                      // IE

			// Now prevent any default action.
			if (event.preventDefault) event.preventDefault(  );   // DOM Level 2
			else event.returnValue = false;                     // IE

			/**
			 * This is the handler that captures mousemove events when an element
			 * is being dragged. It is responsible for moving the element.
			 **/
			function moveHandler(e)
				{
				if (!e) e = window.event;  // IE Event Model
				// Move the element to the current mouse position, adjusted as
				// necessary by the offset of the initial mouse-click.

				var posX = e.clientX - deltaX;
				var posY = e.clientY - deltaY;

				if(posX < 0)
					posX = 0;

				if(posY < 0)
					posY = 0;


				if(posX + 300 > document.body.clientWidth)
					posX = document.body.clientWidth - 300;

				if(posY + 303 > document.body.clientHeight)
					posY = document.body.clientHeight - 303;

				elementToDrag.style.left = posX + "px";
				elementToDrag.style.top = posY + "px";
				// And don't let anyone else see this event.
				if (e.stopPropagation) e.stopPropagation();  // DOM Level 2
				else e.cancelBubble = true;
				// IE
				}

		/**
		 * This is the handler that captures the final mouseup event that
		 * occurs at the end of a drag.
		 **/
		function upHandler(e) {
			if (!e) e = window.event;  // IE Event Model

			// Unregister the capturing event handlers.
			if (document.removeEventListener) {  // DOM Event Model
				document.removeEventListener("mouseup", upHandler, true);
				document.removeEventListener("mousemove", moveHandler, true);
			}
			else if (document.detachEvent) {  // IE 5+ Event Model
				elementToDrag.detachEvent("onmouseup", upHandler);
				elementToDrag.detachEvent("onmousemove", moveHandler);
				elementToDrag.releaseCapture();
			}
			else {  // IE 4 Event Model
				document.onmouseup = olduphandler;
				document.onmousemove = oldmovehandler;
			}

			// And don't let the event propagate any further.
			if (e.stopPropagation) e.stopPropagation(  );  // DOM Level 2
			else e.cancelBubble = true;                  // IE
			}
		}

		function formSubmit(aForm, aAction, aElement, aValue)
			{
			var form = getFormObject(aForm);
			if(form!=null)
				{
				var element = getElement(form, aElement);
				if(element!=null)
					element.value = aValue;
				form.action.value=aAction;
				//			debugForms();
				form.submit();
				}
			}

        /*a gneric method to submit a form with n elements
        * aForm: name of form to submit
        * nameArr: Name of constituent params to populate
        * valueArr: Associative array with name mapped to value*
        * elements in nameArr and valueArr should be smae in number*/
        function genericFormSubmit(aForm,nameArr, valueArr ){
			var form = getFormObject(aForm);
			if(form!=null){
                for(var i=0; i<nameArr.length;i++){
                     var element = getElement(form, nameArr[i]);
                    if(element!=null)
					    element.value = valueArr[i];
                }
				form.submit();
            }
        }

        function getFormObject(aFormName)
			{
			var forms = document.forms;
			for(i=0;i<forms.length;i++)
				if(forms[i].name == aFormName)
					return forms[i];
			return null;
			}

		function getElement(aForm, aElementName)
			{
			var elements = aForm.elements
			for(i=0;i<elements.length;i++)
				if(elements[i].name == aElementName)
					return elements[i];
			return null;
			}

		function debugForms()
			{
			var forms = document.forms;
			for(i=0;i<forms.length;i++)
				debugForm(forms[i]);
			}

		function debugForm(aForm)
			{
			var s = "";
			var elements = aForm.elements
			s += "form.name = " + aForm.name + "\nform.action = " + aForm.action.value;
			for(j=0;j<elements.length;j++)
				s += "\n\telements["+j+"].name = " + elements[j].name + ", value = " + elements[j].value;
			alert(s);
			}



		function setImgForMessageBox()
			{
			//set the image heights and widths for IE 6 and IE 5.5
			var elements = document.all;
			for(i=0;i<elements.length;i++)
				{
				if(elements[i].className=="helpBox-tr")
					{
					elements[i].style.height = "33";
					elements[i].style.width = "26";
					}
				else if(elements[i].className=="helpBox-tl")
					{
					elements[i].style.height = "33";
					elements[i].style.width = "20";
					}
				else if(elements[i].className=="helpBox-br")
					{
					elements[i].style.height = "20";
					elements[i].style.width = "26";
					}
				else if(elements[i].className=="helpBox-bl")
					{
					elements[i].style.height = "20";
					elements[i].style.width = "20";
					}
				else if(elements[i].className=="helpBox-closeButton")
					{
					elements[i].style.height = "20";
					elements[i].style.width = "87";
					}
				}
			}

function clearSavedRouteIfNoCookies(cookieName, selectElement, message)
	{
	var cookies = getCookie(cookieName);
	if(cookies==null)
		{
		var savedRoute = selectElement;

		if(savedRoute.length < 2)
			return;

		for(i=0; i<savedRoute.length; i++)
			{
			savedRoute[i]= null;
			}
		savedRoute[0] = new Option(message, '-1');
		}
	}

function getCookie(name)
	{
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1)
		{
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
		}
	else
		begin += 2;
	var end = document.cookie.indexOf(";", begin);
		if (end == -1)
			end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
	}


function showMyRow(elementID)
			{
			var row = document.getElementById("ID_"+elementID);
			var image = document.getElementById("ID_"+elementID + "_button");

			if (row.style.display == 'block')
				{
				row.style.display = 'none';
				image.src = image.src.replace("minus", "plus");
				}
			else
				{
				row.style.display = 'block';
				image.src = image.src.replace("plus", "minus");
				}
			}

function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}
