function MM_openBrWindow(theURL, winName, features) { 
  window.open(theURL,winName,features);
  return false;
}


function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {
      if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
          document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; 
      }
  }
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function expandTable(param1, param2, flag) {
	if (flag == true) {
		document.getElementById(param1).style.display='none';
		document.getElementById(param2).style.display='block';
	} 
	else{
		document.getElementById(param1).style.display='block';
		document.getElementById(param2).style.display='none';
	}
}

function copyText(from, to) {
	document.getElementById(to).value = document.getElementById(from).value;
}
function setElementById(id, val) {
	var elem = document.getElementById(id);
	elem.value = val;
}

function toggleLinkDiv(divId, linkId, openClass, closeClass){
	
	var divObj = document.getElementById(divId);
	if(divObj != null){
		if(divObj.style.display == 'block'){
			divObj.style.display='none';
		}
		else{
			divObj.style.display = 'block';
		}
	}
	
	var linkObj = document.getElementById(linkId);
	if(linkObj != null){
		if(linkObj.className == openClass){
			linkObj.className = closeClass;	//openClass 'info_open'
		}
		else{
			linkObj.className = openClass;	//closeClass 'info_closed'
		}
	}
	
}



//Sets the value of the elements to an empty string.
function clearFieldValues(listOfElementsToSet){
	//alert("in clearFieldValues " + listOfElementsToSet);
	arrElements =listOfElementsToSet.split(",");
	for(i=0;i<arrElements.length;i++){
		//alert("setting " + arrElements[i] + " arrlength " + arrElements.length + " i " + i);
		element = document.getElementById(arrElements[i]);
		if (element != null) {
			element.value='';
		}
	}
}

/**
 * Resets the given form control elements to their default values.
 *
 * @param elementsToReset [ArrayOrCollection] - The form control elements to reset.
 * @return void
 */
function resetFieldValues(elementsToReset) {
	// Hidden, password, text & textarea fields
	var reTextInputType = /(hidden|password|text)/;
	// Checkbox & radio fields
	var reCheckInputType = /(checkbox|radio)/;
	// Select one & select multiple fields
	var reSelectInputType = /select/;

    for (var i = 0, elementsToResetLength = elementsToReset.length; i < elementsToResetLength; i++) {
    	var currentEl = elementsToReset[i];
        var inputType = currentEl.type;
        
        if (reCheckInputType.test(inputType)) {
            currentEl.checked = currentEl.defaultChecked;
        } else if (reTextInputType.test(inputType)) {
            currentEl.value = currentEl.defaultValue;
        } else if (reSelectInputType.test(inputType)) {
            for (var j = 0, optsLength = currentEl.options.length; j < optsLength; j++) {
                currentEl.options[j].selected = currentEl.options[j].defaultSelected;
            }
        }
    }
}

/**
 * Resets form control elements contained in an element.
 *
 * @param elId [String] - Id of the container element.
 * @return void
 */
function resetFieldValuesInElement(elId) {
	var el = document.getElementById(elId);
	if (el) {
		resetFieldValues(el.getElementsByTagName('input'));
		resetFieldValues(el.getElementsByTagName('textarea'));
		resetFieldValues(el.getElementsByTagName('select'));
	}
}

//Checks that a list of parameters (pointing to form elements) contain values.
//Triggers the calendar if they are, does nothing if not.
function checkValuesSetBeforeTriggeringCalendar(contextPath,dayRef,monthRef,windowName ){
/*	alert("contextPath " + contextPath +
	"dayRef " + dayRef,
	"monthRef " + monthRef,
	"windowName " + windowName);*/
	if(dayRef.value != '' && monthRef.value != ''){
		//alert("firing calendar");
		openCalendar(contextPath, dayRef, monthRef, windowName);
	}else{
		//Populate calendar values and then fire.		
		//alert("one of the values is empty ");
	}

}

//Requires the yearAndMonthString to be in YYYYMM format.
function setNumberOfDaysInMonthInDropdown(yearAndMonthStringElement,idOfDayOptions){

//	alert("yearAndMonthStringElement " + yearAndMonthStringElement);
	yearAndMonthString = document.getElementById(yearAndMonthStringElement).value;

	month = yearAndMonthString.substring( 4, 6 ) - 1; //0 based
	year = yearAndMonthString.substring( 0, 4 );
	numberOfDaysInMonth = 32 - new Date(year, month, 32).getDate();
//	alert("Number of days in "  + yearAndMonthString + " is " + numberOfDaysInMonth);
	
	//Get the currently selected value
	currentlySelectedDay = document.getElementById(idOfDayOptions).value;
//	alert("Currently selected day " + currentlySelectedDay);
	
	//Get options
	dayOptions = document.getElementById(idOfDayOptions);

	
	//Set length of the optionbox, first to 0 to clear it then to its actual length
	dayOptions.options.length = 0;
	dayOptions.options.length = numberOfDaysInMonth;	
	
	for (i=0;i<numberOfDaysInMonth;i++){
		valueToSet = i + 1; //0-based
		var valueToSetLength = valueToSet.length;
		//alert("valuetoset "  + valueToSet + " valueToSet.length " + valueToSetLength);
		if(valueToSet < 10){
			//Single digit, add leading zero
			valueToSet = "0" + valueToSet;
			//alert("valuetoset "  + valueToSet);
		}	
		
		dayOptions.options[i].text = valueToSet;
		dayOptions.options[i].value = valueToSet;
	}
	
	//Set the selected day to the same day the user had selected before. 
	//If this isn't possible (when the user selected the 30th of jan and then changed to feb for instance)
	//Set the selected date to the last entry.
	
	if(currentlySelectedDay > numberOfDaysInMonth){
		dayOptions.selectedIndex = numberOfDaysInMonth - 1; //Index is 0-based
	}else{
		dayOptions.selectedIndex = currentlySelectedDay - 1; //Index is 0-based
	}
	
	//alert("currentlySelectedDay " + currentlySelectedDay);
	
	
}


function expandInfoTable(param1, param2, flag, numOfInfoLink, divNamePrefix) {
	
	// First close all div(s)
	for(i=0;i<=numOfInfoLink;i++) {
		currentDivName = divNamePrefix + i;
		document.getElementById(currentDivName).style.display='none';
	}
	
	if (flag == true) {
		document.getElementById(param1).style.display='none';
		document.getElementById(param2).style.display='block';
	} 
	else{
		document.getElementById(param1).style.display='block';
		document.getElementById(param2).style.display='none';
	}
}

function setHiddenFieldAndExpandTable(param1, param2, flag, idToToggle, viewNightTrainCheckbox) {
	document.getElementById(idToToggle).value = flag;
	if(viewNightTrainCheckbox !=  null) {
		document.getElementById(viewNightTrainCheckbox).checked = flag;
	}
	expandTable(param1,param2,flag);
}

//Disables elements mentioned in the listOfElementsToSet if their values are set to nothing (usually the top-option).
function disableIfSetToEmptyValue(listOfElementsToSet){
	arrElements =listOfElementsToSet.split(",");
	for (i=0;i<arrElements.length;i++){
		if(document.getElementById(arrElements[i]).value == ""){
			//alert("disabling " +  document.getElementById(arrElements[i]).name);
			document.getElementById(arrElements[i]).disabled=true;
			
		}		
	
	}
	//alert("leaving disable");
}

//sets the value of the elements in the inputlist to empty (usually the top-option)
function setToEmpty(listOfElementsToSet){
	arrElements =listOfElementsToSet.split(",");
	for (i=0;i<arrElements.length;i++){
		document.getElementById(arrElements[i]).value="";
	}
}

function setCheckBoxToValue(elementName,valueToSet){
	//alert("value "  + document.getElementById(elementName).checked);	
	document.getElementById(elementName).checked=valueToSet;
	//alert("value "  + document.getElementById(elementName).checked);
}

function setCheckBoxesToValue(elementIdPrefix, elementCount, valueToSet) {
	for (i=0;i<elementCount;i++) {
		document.getElementById(elementIdPrefix + i).checked=valueToSet;
	}
}

function isCheckBoxesUnchecked(elementIdPrefix, elementCount) {
	for (i=0;i<elementCount;i++) {
		if (document.getElementById(elementIdPrefix + i).checked == true) return false;
	}
	return true;
}

//Checks the value of elementToCheck. If it isn't empty the elements in list of elementsToSet are all enabled
//Otherwise they are disabled.
function enableIfValueNotEmptyDisableOtherwise(elementToCheck, listOfElementsToSet){

	//alert("document.getElementById(elementToCheck).value " + document.getElementById(elementToCheck).value);
	if(document.getElementById(elementToCheck).value==""){
		//alert("setting to empty");
		setToEmpty(listOfElementsToSet);
		disableIfSetToEmptyValue(listOfElementsToSet);
	}
	else{
		arrElements =listOfElementsToSet.split(",");
		for (i=0;i<arrElements.length;i++){
			if(document.getElementById(arrElements[i]).value == ""){
				//alert("enabling " +  document.getElementById(arrElements[i]).name);
				document.getElementById(arrElements[i]).disabled=false;
			}		
		}	
	}	
	//alert("leaving disable");
}

function enableSeatSelection(elementToCheck, listOfElementsToSet){
	
	elem = document.getElementById(elementToCheck);
	if(elem != null){
		selectMode = false;
		if(elem.value == ""){
			selectMode = true; // speca plats ej valt
		}
		
		arrElements = listOfElementsToSet.split(",");
		for (i=0; i<arrElements.length; i++){
			elem = document.getElementById(arrElements[i]);
			
			if(elem != null){
				elem.readonly = selectMode;
				elem.disabled = selectMode;
				
				if(selectMode == true){
					elem.value = "";
				}
			}
		}
	}
	
}

//Copies the values of elements in array elementsToCopy to the elements in array elementsToCopyTo
//IF the elements in array elementsToCopyTo are enabled.
//Values are copied on an index basis and the arrays must be of equal length.
function copyValuesIfEnabled(elementsToCopy, elementsToCopyTo){

	//alert("copyValuesIfEnabled(elementsToCopy="  + elementsToCopy + ". elementsToCopyTo=" + elementsToCopyTo + ")");
	
	arrElementsToCopy = elementsToCopy.split(",");
	arrElementsToCopyTo = elementsToCopyTo.split(",");	
	
	for (i=0;i<arrElementsToCopyTo.length;i++){
	
		targetElem = document.getElementById(arrElementsToCopyTo[i]);
		//alert(targetElem + " is disabled? " + targetElem.disabled);
		
		if(!targetElem.disabled && targetElem.value == ""){
			sourceElem = document.getElementById(arrElementsToCopy[i])
			//alert("copying value from " + sourceElem.name + " to" + targetElem.name);
			targetElem.value = sourceElem.value;
		}
	}	
}




function expandAll(flag) {
	noOfOutBouondElements = parseInt(document.getElementById("numberOfOutBoundTravels").title);
	noOfInBouondElements = parseInt(document.getElementById("numberOfInBoundTravels").title);			
	if (flag == true) {
		document.getElementById("More_info").style.display='none';
		document.getElementById("Less_info").style.display='block';
		for (i=0;i<=noOfOutBouondElements;i++){
			document.getElementById("OutBoundDetails" + i).style.display='none';
			document.getElementById("OutBoundDetails" + i + "_expand").style.display='block';
		}
		for (i=0;i<=noOfInBouondElements;i++){
			document.getElementById("InBoundDetails" + i).style.display='none';
			document.getElementById("InBoundDetails" + i + "_expand").style.display='block';
		}				
	} 
	else {
		document.getElementById("More_info").style.display='block';
		document.getElementById("Less_info").style.display='none';
		for (i=0;i<=noOfOutBouondElements;i++) {
			document.getElementById("OutBoundDetails" + i).style.display='block';
			document.getElementById("OutBoundDetails" + i + "_expand").style.display='none';
		}
		for (i=0;i<=noOfInBouondElements;i++) {
			document.getElementById("InBoundDetails" + i).style.display='block';
			document.getElementById("InBoundDetails" + i + "_expand").style.display='none';
		}
	}
}
	
function expandAllTicketInfo() {
	// Away tickets
	i = 0;
	while(true)
	{
		ticket = document.getElementById("Away_ticket_" + i);
		ticketInfo = document.getElementById("Away_ticket_" + i + "_expand");
		
		if(ticket != null && ticketInfo !=  null) {
			ticket.style.display = "none";
			ticketInfo.style.display = "block";
			
			// Away extra services
			j = 0;
			while(true)
			{
				extra = document.getElementById("Away_extra_dep_" + i + "-" + j);
				extraInfo = document.getElementById("Away_extra_dep_" + i + "-" + j + "_expand");
				if(extra != null && extraInfo !=  null) {
					extra.style.display = "none";
					extraInfo.style.display = "block";
					j++;
				} else {
					break;
				}
			}
			
			i++;
		} else {
			break;
		}
	}
	
	// Return tickets
	i = 0;
	while(true)
	{
		ticket = document.getElementById("Return_ticket_" + i);
		ticketInfo = document.getElementById("Return_ticket_" + i + "_expand");
		
		if(ticket != null && ticketInfo !=  null) {
			ticket.style.display = "none";
			ticketInfo.style.display = "block";
			
			// Return extra services
			j = 0;
			while(true)
			{
				extra = document.getElementById("Return_extra_dep_" + i + "-" + j);
				extraInfo = document.getElementById("Return_extra_dep_" + i + "-" + j + "_expand");
				if(extra != null && extraInfo !=  null) {
					extra.style.display = "none";
					extraInfo.style.display = "block";
					j++;
				} else {
					break;
				}
			}
		
			i++;
		} else {
			break;
		}
	}
	
	document.getElementById("More_info").style.display = "none";
	document.getElementById("Less_info").style.display = "block";
}

function collapseAllTicketInfo() {
	// Away tickets
	i = 0;
	while(true)
	{
		ticket = document.getElementById("Away_ticket_" + i);
		ticketInfo = document.getElementById("Away_ticket_" + i + "_expand");
		
		if(ticket != null && ticketInfo !=  null) {
			ticket.style.display = "block";
			ticketInfo.style.display = "none";
			
			// Away extra services
			j = 0;
			while(true)
			{
				extra = document.getElementById("Away_extra_dep_" + i + "-" + j);
				extraInfo = document.getElementById("Away_extra_dep_" + i + "-" + j + "_expand");
				if(extra != null && extraInfo !=  null) {
					extra.style.display = "block";
					extraInfo.style.display = "none";
					j++;
				}
				else {
					break;
				}
			}
			
			i++;
		}
		else {
			break;
		}
	}
	
	// Return tickets
	i = 0;
	while(true)
	{
		ticket = document.getElementById("Return_ticket_" + i);
		ticketInfo = document.getElementById("Return_ticket_" + i + "_expand");
		
		if(ticket != null && ticketInfo !=  null) {
			ticket.style.display = "block";
			ticketInfo.style.display = "none";
			
			// Return extra services
			j = 0;
			while(true)
			{
				extra = document.getElementById("Return_extra_dep_" + i + "-" + j);
				extraInfo = document.getElementById("Return_extra_dep_" + i + "-" + j + "_expand");
				if(extra != null && extraInfo !=  null) {
					extra.style.display = "block";
					extraInfo.style.display = "none";
					j++;
				}
				else {
					break;
				}
			}
		
			i++;
		}
		else {
			break;
		}
	}
	
	document.getElementById("More_info").style.display = "block";
	document.getElementById("Less_info").style.display = "none";
}

	
// submit form with confirm message
function submitForm(form, methodValue, message, showWaitPage, hiddenName, hiddenValue, showWaitDiv) {
	if (message == null || (message != null && confirm(message))) {
		form.method.value = methodValue;
		
		if((hiddenName != null) && (hiddenValue != null)) {
				
			elements = form.elements;
			
			for (i=0; i<elements.length; i++) {
				if (elements[i].name == hiddenName) {
					elements[i].value = hiddenValue;
					break;
				}
			}
		}
		
		form.submit();
		
		// display wait message. Must be called after form.submit() for Netscape 6.1 browsers.
		if (showWaitPage == true) {
			if(showWaitDiv != null) {
		    	expandTable('ShowBody', showWaitDiv, true);
	}
	else {
				expandTable('ShowBody', 'ShowWait', true);		    
	}
}
	}
	else {
		return false;
	}
}

function setSelectionId(form, selectedId){
	
	form.selectedId.value = selectedId;
}
function setDropListId(formm, selectedIndex){
	alert("setDropListId");
	form.selectedIndex.value = selectedIndex;
}

function submitHotelChoiceForm(formId, methodValue, hotelIndexValue) {
	// Check if the submit was triggered by a openHotelUrl click.
	if(!openHotelUrlFlag) {
		// If not then submit.
		var form = document.getElementById(formId);
		form.hotelIndex.value = hotelIndexValue;
		submitForm(form, methodValue, null, false);
	}
	else {
		// If then reset the openHotelUrlFlag since the URL is now open
		// and subsequent clicks should be treated as submits unless the
		// URL is reactivated.
		openHotelUrlFlag = false;
	}
}

function submitOrderListChoiceForm(formId, methodValue, orderNumber) {
	var form = document.getElementById(formId);
	form['orderNumber.orderOrTicketNumber'].value = orderNumber;
	submitForm(form, methodValue, null, true);
}

function deleteCreditCard(formId, methodValue, cardNumber, message) {
	var form = document.getElementById(formId);
	form['cardNumber'].value = cardNumber;
	if (!submitForm(form, methodValue, message + cardNumber + "?", true)) {
		form['cardNumber'].value = '';
	}
}

// submit form with confirm message
function submitFormAndDisableControl(form, methodValue, message, showWaitPage, controlId) {
	if (message == null || (message != null && confirm(message))) {
	    
		if(controlId != null) {
			document.getElementById(controlId).disabled = true;
		}	    
	    
		form.method.value = methodValue;
		form.submit();
		
		
		// display wait message. Must be called after form.submit() for Netscape 6.1 browsers.
		if (showWaitPage == true) {
		    	expandTable('ShowBody', 'ShowWait', true);
		   	}
	    
	    
	}
	else {
		return false;
	}
}



function setAllElementsWithIdenticalNameToValue(elements,elementId,valueToSet){
	for (i=0; i<elements.length; i++) {
		if (elements[i].name == elementId) {
			elements[i].value = valueToSet;
		}
	}

}







//used by "tripProfileAdminTab3Tile.jsp"
//The function sets the 'readonly' attribute on 2 text boxes depending on the value of a dropdown list
function setStatusOnBoxes(dropdownListName,box1, box2){

	if(document.getElementById(dropdownListName).value == ""){
		document.getElementById(box1).className = "searchfield4";
		document.getElementById(box1).readOnly = true;
		document.getElementById(box1).value = "";
	
		document.getElementById(box2).className = "searchfield4";
		document.getElementById(box2).readOnly = true;
		document.getElementById(box2).value = "";
		
	} else{
		document.getElementById(box1).className = "sd_search_field";
		document.getElementById(box1).readOnly = false;
		
		document.getElementById(box2).className = "sd_search_field";
		document.getElementById(box2).readOnly = false;
	}

}

//used by "tripProfileAdminTabControlTile.jsp"
function viewTripProfileTab(formName, tabToBeShown, showWaitPage){
	//since the forms have differnet names/ids we need to get the correct 'form' depending on which tab the user has pressed
	form = document.getElementById(formName);
	submitForm(form, tabToBeShown, null, showWaitPage);
}

//This is used when a user clicks on a image, " <input type='image'... ", to submit a form. 
//Since its an image dont use: "form.submit()" because a image will do a submit by default. 
//If "form.submit()" was used it would result in a 'double submit'!
function submitFormBasedOnImage(form, methodValue, id) {
	form.theProfileId.value = id;
	form.method.value = methodValue;
}
	

function submitFormBasedOnImageWithConfirm(form, methodValue, id, confirmText) {

	if (confirmText == null || confirm(confirmText)) {
		form.theProfileId.value = id;
		form.method.value = methodValue;
		
		return true;
	}
	
		return false;
	}

	


//used by "tripProfileAdminTab5Tile.jsp"
function renderPayment(){

	paymentType = document.getElementById("paymentType").value;
		
	if(paymentType == ""){//i.e. "v?lj betals?tt"
		document.getElementById("div_payment_socialSecurity_field_properties").style.display='none';
		document.getElementById("div_payment_sjinvoice_field_properties").style.display='none';
		document.getElementById("div_payment_card_field_properties").style.display='none';
		
		document.getElementById("Reference_total").style.display='none';
		document.getElementById("div_reference_field_properties").style.display='none';//1
		
		document.getElementById("deliveryTypeNormal").style.display='none';
		document.getElementById("deliveryTypeLetter").style.display='none';
		
		document.getElementById("div_reference_email_field_properties").style.display='none';//2
		document.getElementById("div_reference_address_field_properties").style.display='none';//3
	} else if(paymentType == "P05"){//i.e. "Kontokort CVV"
		document.getElementById("div_payment_socialSecurity_field_properties").style.display='none';
		document.getElementById("div_payment_sjinvoice_field_properties").style.display='none';
		document.getElementById("div_payment_card_field_properties").style.display='block';
		
		document.getElementById("Reference_total").style.display='block';
		document.getElementById("div_reference_field_properties").style.display='block';
		
		document.getElementById("deliveryTypeNormal").style.display='block';
		document.getElementById("deliveryTypeLetter").style.display='none';
	
		//we need to render the payment type as well
		renderDeliveryType();				
	} else if(paymentType == "P04"){//i.e. "Faktura brev"
		document.getElementById("div_payment_socialSecurity_field_properties").style.display='block';
		document.getElementById("div_payment_sjinvoice_field_properties").style.display='none';
		document.getElementById("div_payment_card_field_properties").style.display='none';
		
		document.getElementById("Reference_total").style.display='block';
		document.getElementById("div_reference_field_properties").style.display='block';
		
		document.getElementById("deliveryTypeNormal").style.display='none';
		document.getElementById("deliveryTypeLetter").style.display='block';
		
		document.getElementById("div_reference_email_field_properties").style.display='none';//2
		document.getElementById("div_reference_address_field_properties").style.display='none';//3
	} else if(paymentType == "P01"){//i.e. "SJ Faktura"
		document.getElementById("div_payment_socialSecurity_field_properties").style.display='none';
		document.getElementById("div_payment_sjinvoice_field_properties").style.display='block';
		document.getElementById("div_payment_card_field_properties").style.display='none';
		
		document.getElementById("Reference_total").style.display='block';
		document.getElementById("div_reference_field_properties").style.display='block';

		document.getElementById("deliveryTypeNormal").style.display='block';
		document.getElementById("deliveryTypeLetter").style.display='none';
		
		//we need to render the payment type as well
		renderDeliveryType();
	} else if( (paymentType == "P06") || //i.e. "Zero debit payment"
				(paymentType == "P07") || //i.e. "Paynova"
				(paymentType == "P08") || //i.e. "Internetbank"				
				(paymentType == "P03")) { //i.e. "Resekonto"	
		document.getElementById("div_payment_socialSecurity_field_properties").style.display='none';
		document.getElementById("div_payment_sjinvoice_field_properties").style.display='none';
		document.getElementById("div_payment_card_field_properties").style.display='none';
		
		document.getElementById("Reference_total").style.display='block';
		document.getElementById("div_reference_field_properties").style.display='block';

		document.getElementById("deliveryTypeNormal").style.display='block';
		document.getElementById("deliveryTypeLetter").style.display='none';
		
		//we need to render the payment type as well
		renderDeliveryType();	
	}

}

//used by "tripProfileAdminTab5Tile.jsp"
function renderDeliveryType() {
	deliveryType = document.getElementById("deliveryType").value;
	
	if(deliveryType == "D01"){//i.e. "H?mta ut"
		document.getElementById("div_reference_email_field_properties").style.display='none';//2
		document.getElementById("div_reference_address_field_properties").style.display='none';//3
	} else if(deliveryType == "D02"){//i.e. "brev"
		document.getElementById("div_reference_email_field_properties").style.display='none';//2
		document.getElementById("div_reference_address_field_properties").style.display='block';//3
	}  else if(deliveryType == "D05"){//i.e. "email"
		document.getElementById("div_reference_email_field_properties").style.display='block';//2
		document.getElementById("div_reference_address_field_properties").style.display='none';//3
	}  else if(deliveryType == "D06"){//i.e. "sms"
		document.getElementById("div_reference_email_field_properties").style.display='none';//2
		document.getElementById("div_reference_address_field_properties").style.display='none';//3
	}
	
}


//used by "tripProfileAdminTab1Tile.jsp"
//The function changes the 'disabled' status depending on the value of a dropdown list
function setStatusOnDropdownList(dropdownListName1,dropdownListName2){

	if(document.getElementById(dropdownListName1).selectedIndex == 0){
		document.getElementById(dropdownListName2).disabled = true;
		document.getElementById(dropdownListName2).value = "";
	} else{
		document.getElementById(dropdownListName2).disabled = false;
	}
	
}

//used by "tripProfileAdminTab1Tile.jsp"
//Check if some areas on the page should be visible, depending on the customer type.
function hideOrShowForCustomer(isCommeoLoggedIn){

	if(isCommeoLoggedIn == true){
		document.getElementById("Person_header").style.display='none';
		document.getElementById("Person_help").style.display='none';
		document.getElementById("div_person_field_properties").style.display='none';
	} else{
		document.getElementById("Person_header").style.display='block';
		document.getElementById("div_person_field_properties").style.display='block';
	}

}

//used by "tripProfileAdminTab1Tile.jsp"
//The function is used when the page is loading to check if the nighttrain area should be visible or not.
//We cannot use the function "showOrHideNighttrain", because there is no form when the page is loading.
function renderNighttrainAreas(hiddenNighttrainName, shownNighttrainName, nightTrainHiddenFieldId){
	
	if(document.getElementById(nightTrainHiddenFieldId).value  == "true"){	
		setHiddenFieldAndExpandTable(hiddenNighttrainName, shownNighttrainName, true, nightTrainHiddenFieldId);
	}
}


//used by "tripProfileAdminTab1Tile.jsp"
//The function displays different areas, depending on the status/values of the current tripprofile
function renderAll(advanced, advanced_header, route, route_expand, extra_time, extra_time_expand, 
					displayAdvancedOptions, displayVia, viewX2000AndBusses, displayTimeBetweenTrains){
					

	if( document.getElementById(viewX2000AndBusses).value == "true" || document.getElementById(displayVia).value == "true" ||
		document.getElementById(displayTimeBetweenTrains).value == "true"){
		
			setHiddenFieldAndExpandTable(advanced_header, advanced, true, displayAdvancedOptions);
			
			if(document.getElementById(displayVia).value == "true" ){
				setHiddenFieldAndExpandTable(route, route_expand,  true, displayVia);
			} else{
				setHiddenFieldAndExpandTable(route, route_expand,  false, displayVia);
			}
			
			if(document.getElementById(displayTimeBetweenTrains).value == "true"){
				setHiddenFieldAndExpandTable(extra_time, extra_time_expand, true, displayTimeBetweenTrains);
			} else{
				setHiddenFieldAndExpandTable(extra_time, extra_time_expand, false, displayTimeBetweenTrains);
			}
		
	} else{
		setHiddenFieldAndExpandTable(advanced_header, advanced, false, displayAdvancedOptions);
	}

}
			



//Decides whether to show the nighttrain dropdown or not. Also always sets the dropdown which is currently hidden to the same value as
//The one being shown.
function showOrHideNighttrain(form, dayTrainListBoxName, nightTrainListBoxName, valueToShowNighttrainOn, hiddenNighttrainName, shownNighttrainName,nightTrainHiddenFieldId, showNightTrainPriceGroups) {
//alert("showOrHideNighttrain " + form + "dayTrainListBoxName " + dayTrainListBoxName  	+ "valueToShowNighttrainOn " + valueToShowNighttrainOn 	+ "hiddenNighttrainName " + hiddenNighttrainName 	+ "shownNighttrainName " + shownNighttrainName + "nightTrainHiddenFieldId" + nightTrainHiddenFieldId);
	var previousElementFound = 'false';	
	var sectionExpanded = document.getElementById(nightTrainHiddenFieldId).value;
	var elements = form.elements;
	for (i=0; i<elements.length; i++) {
		if (elements[i].name == dayTrainListBoxName) {

//			alert("sectionExpanded " + sectionExpanded);
			if(sectionExpanded == 'true'){
//				alert("1 elements[i].value " + elements[i].value +" valueToShowNighttrainOn " + valueToShowNighttrainOn);
				if(previousElementFound == 'true'){
					//This is the second occurrance, set values
					if(elements[i].value == valueToShowNighttrainOn){
						//Show nighttrain div
//						alert("hidden value " + document.getElementById(nightTrainHiddenFieldId).value);
//						alert("show nighttrain");
						//Set the value of the section to be expanded.
						setHiddenFieldAndExpandTable(hiddenNighttrainName, shownNighttrainName, true, nightTrainHiddenFieldId, showNightTrainPriceGroups);
					}else{
//						alert("hidden value " + document.getElementById(nightTrainHiddenFieldId).value);
//						alert("hide nighttrain");
						setHiddenFieldAndExpandTable(hiddenNighttrainName, shownNighttrainName, false, nightTrainHiddenFieldId, showNightTrainPriceGroups);
					}	
					setAllElementsWithIdenticalNameToValue(elements,dayTrainListBoxName,elements[i].value);					
					
					//Exit so that we don't reset for the second dropdown.
					break;							
				}
				else{
					//First occurrance, only track that we've seen it.
					previousElementFound = 'true';
				}
			}
			else{
			//the section isn't expanded. The first hit is the value to be used. Expand, set value of the expanded version to the same as this, and exit loop
//				alert("2 elements[i].value " + elements[i].value +" valueToShowNighttrainOn " + valueToShowNighttrainOn);
				
				if(elements[i].value == valueToShowNighttrainOn){
					//Show nighttrain div
					//alert("hidden value " + document.getElementById(nightTrainHiddenFieldId).value);
					//alert("show nighttrain");
					setHiddenFieldAndExpandTable(hiddenNighttrainName, shownNighttrainName, true, nightTrainHiddenFieldId, showNightTrainPriceGroups);
					
					document.getElementById(nightTrainListBoxName).focus();
					
				}else{
//					alert("hidden value " + document.getElementById(nightTrainHiddenFieldId).value);
//					alert("hide nighttrain");
					setHiddenFieldAndExpandTable(hiddenNighttrainName, shownNighttrainName, false, nightTrainHiddenFieldId, showNightTrainPriceGroups);
				}	
				setAllElementsWithIdenticalNameToValue(elements,dayTrainListBoxName,elements[i].value);				
				//Exit so that we don't reset for the second dropdown.
				break;		
			
			}
			
		}
	}
}
	
function toggleShowNightTrains(priceGroupElementId, showNightTrainElementId) {
	// Get all the price group elements (2 exists).
	var dayTrainPriceGroupList = document.getElementsByName(priceGroupElementId);
	
	// Get the state holder for showing night train options.
	var showNightTrainState = document.getElementById(showNightTrainElementId);
	
	// Iterator over the price group elements
	var i = 0;
	
	var dayTrainPriceGroup = null;
	for (i=0; i<dayTrainPriceGroupList.length;i++) {
		dayTrainPriceGroup = dayTrainPriceGroupList[i];
		if(showNightTrainState.value == "true") {
			dayTrainPriceGroup.selectedIndex = 0;
		}
		else {
			dayTrainPriceGroup.selectedIndex = dayTrainPriceGroup.length - 1;
		}
	}
	if(dayTrainPriceGroup != null) {
		dayTrainPriceGroup.onchange();
	}
}
	
/*
 * This function synchronizes the content of 2 text fields. Is primarily used to syncrhonize between
 * text fields that exist in double in 2 different divs but the value is really one and the same. 
 * For example: campaignCode in normal and nighttrain div in searchTravelPassengersAndAdvancedOptionsTile.jsp.
 * This can be used with onchange="...".
 */
function syncFields(oSrcElement, oDestElement) {
    //alert("In syncFields: oSrcElement.value=" + oSrcElement.value + "\noDestElement.value=" + oDestElement.value);
    if (oSrcElement.value != oDestElement.value) {
        oDestElement.value = oSrcElement.value;
    }
}

//Submit form with new target window
function submitFormNewTarget(form, methodValue) {
	form.method.value = methodValue;
	form.target = "_blank"
	form.submit();
}
	
function setHiddenFieldAndSubmitForm(form, methodValue, message, showWaitPage, flag, idToToggle) {
	document.getElementById(idToToggle).value = flag;
	submitForm(form, methodValue, message, showWaitPage);
}

function textCounter(field, countfield, maxlimit, message) {
	if (field.value.length > maxlimit ) {
    	field.value = field.value.substring( 0, maxlimit );
    	return false;
  	}
  	else {
  		countfield.value = maxlimit - field.value.length;
  	}
}

function setCommeoCompany(companyParam, memberParam) {
	document.getElementById("companyId").value = companyParam;
	document.getElementById("memberId").value = memberParam;	
}

function setSystemIdentity(systemIdentity) {
	document.getElementById("systemIdentity").value = systemIdentity;
}

function setBookCarParameters(travelParam, departureParam) {
	document.getElementById("bookRentalCarTravelId").value = travelParam;
	document.getElementById("bookRentalCarDeparture").value = departureParam;
}

function setBookTaxiParameters(travelParam, departureParam) {
	document.getElementById("bookTaxiTravelId").value = travelParam;
	document.getElementById("bookTaxiDeparture").value = departureParam;
}

function setBookHotelParameters(travelParam, departureParam) {
	document.getElementById("bookHotelTravelId").value = travelParam;
	document.getElementById("bookHotelDeparture").value = departureParam;
}

function setBookInternetAccessParameters(travelParam, departureParam) {
	document.getElementById("bookInternetAccessTravelId").value = travelParam;

}

function expandPayment(selection, creditCardPayment, dbInvoicePayment, zeroDebitPayment, sjInternalPayment, sjInvoicePayment, travelAccountPayment, paynovaPayment, internetBankPayment, addressLetterDelivery, letterDelivery, pickupDelivery, creditCardPickupDelivery, ticketlessSMSDelivery, ticketlessEmailDelivery, idContractDelivery){

	document.getElementById("fullDisplay").style.display='block';
	document.getElementById("Payment_" + creditCardPayment).style.display='none';
	document.getElementById("Payment_" + dbInvoicePayment).style.display='none';
	document.getElementById("Payment_" + zeroDebitPayment).style.display='none';
	document.getElementById("Payment_" + sjInternalPayment).style.display='none';
	document.getElementById("Payment_" + sjInvoicePayment).style.display='none';
	document.getElementById("Payment_" + travelAccountPayment).style.display='none';
	document.getElementById("Payment_" + paynovaPayment).style.display='none';
	document.getElementById("Payment_" + internetBankPayment).style.display='none';
	
	document.getElementById("Payment_" + selection).style.display='block';
	
	// handle div tag displaying current Invoice Fee
	var infoRef = document.getElementById("invoiceInfo");
	if(infoRef != null){
		if(selection == dbInvoicePayment){
			infoRef.style.display='block';
		}
		else{
			infoRef.style.display='none';
		}
	}
	
	document.getElementById("Delivery_selection_" + creditCardPayment).style.display='none';
	document.getElementById("Delivery_selection_" + dbInvoicePayment).style.display='none';
	document.getElementById("Delivery_selection_" + zeroDebitPayment).style.display='none';
	document.getElementById("Delivery_selection_" + sjInternalPayment).style.display='none';
	document.getElementById("Delivery_selection_" + sjInvoicePayment).style.display='none';
	document.getElementById("Delivery_selection_" + travelAccountPayment).style.display='none';
	document.getElementById("Delivery_selection_" + paynovaPayment).style.display='none';
	document.getElementById("Delivery_selection_" + internetBankPayment).style.display='none';	
	
	document.getElementById("Delivery_selection_" + selection).style.display='block';

	var showMandatoryHeader = (selection == paynovaPayment) || (selection == internetBankPayment);
	showElementsByPrefix('mandatory_email_header-', showMandatoryHeader);
	showElementsByPrefix('optional_email_header-', !showMandatoryHeader);
	// Save state so expandDelivery() can use this information
	expandPayment.SHOW_MANDATORY_HEADER = showMandatoryHeader;
	
	var deliverySelection;
	if (selection == creditCardPayment) {
		deliverySelection = "creditCard" + document.getElementById('creditCardDeliveryType').value;
	}
	if (selection == dbInvoicePayment) {
		deliverySelection = document.getElementById('dbInvoiceDeliveryType').value;
	}
	if (selection == zeroDebitPayment) {
		deliverySelection = document.getElementById('zeroDebitDeliveryType').value;
	}
	if (selection == sjInternalPayment) {
		deliverySelection = document.getElementById('sjInternalDeliveryType').value;
	}
	if (selection == sjInvoicePayment) {
		deliverySelection = document.getElementById('sjInvoiceDeliveryType').value;
	}
	if (selection == travelAccountPayment) {
		deliverySelection = document.getElementById('travelAccountDeliveryType').value;
	}
	if (selection == paynovaPayment) {
		deliverySelection = document.getElementById('paynovaPaymentDeliveryType').value;
	}
	if (selection == internetBankPayment) {
		deliverySelection = document.getElementById('internetBankPaymentDeliveryType').value;
	}
	expandDelivery.CREDIT_CARD_PAYMENT_SELECTED = (selection == creditCardPayment);
	expandDelivery(deliverySelection, addressLetterDelivery, letterDelivery, pickupDelivery, creditCardPickupDelivery, ticketlessSMSDelivery, ticketlessEmailDelivery, idContractDelivery);
}

// State variable to track which header is shown by the expandPayment function
expandPayment.SHOW_MANDATORY_HEADER = false;

function expandDelivery(selection, addressLetterDelivery, letterDelivery, pickupDelivery, creditCardPickupDelivery, ticketlessSMSDelivery, ticketlessEmailDelivery, idContractDelivery) {

	document.getElementById("Delivery_" + addressLetterDelivery).style.display='none';
	document.getElementById("Delivery_" + letterDelivery).style.display='none';
	document.getElementById("Delivery_" + pickupDelivery).style.display='none';
	document.getElementById("Delivery_" + creditCardPickupDelivery).style.display='none';
	document.getElementById("Delivery_" + ticketlessSMSDelivery).style.display='none';
	document.getElementById("Delivery_" + ticketlessEmailDelivery).style.display='none';
    document.getElementById("Delivery_" + idContractDelivery).style.display='none';

	if(expandDelivery.CREDIT_CARD_PAYMENT_SELECTED && selection == pickupDelivery) {
		selection = "creditCard" + selection;
	}
	document.getElementById("Delivery_" + selection).style.display='block';
	
	// handle div tag displaying contact phonenumber
	var ref = document.getElementById("Contact_info_phone");
	if(ref != null){
		if(selection == ticketlessSMSDelivery){
			ref.style.display='none';
			expandTable('contactPhoneNumber','contactMobilePhoneNumber',true);
		}
		else{
			ref.style.display='block';
			expandTable('contactPhoneNumber','contactMobilePhoneNumber',false);
		}
	}

	var showMandatoryHeader = (selection == idContractDelivery) || expandPayment.SHOW_MANDATORY_HEADER;
	showElementsByPrefix('mandatory_email_header-', showMandatoryHeader);
	showElementsByPrefix('optional_email_header-', !showMandatoryHeader);
}
expandDelivery.CREDIT_CARD_PAYMENT_SELECTED = false;

function showContactUserOptions(contactClosed, contactExpand, optionContactTypeId) {
  	var selected = getSelectedValue(optionContactTypeId);
  	
  	if (selected == 1 || selected == 3) {
  		document.getElementById(contactClosed).style.display='none';
		document.getElementById(contactExpand).style.display='block';
	} 
	else {
		document.getElementById(contactClosed).style.display='block';
		document.getElementById(contactExpand).style.display='none';
	}
}

function setElementChecked(form, elementName, elementValue, elementChecked) {
	elements = form.elements;
	
	for (i=0; i<elements.length; i++) {
		if (elements[i].name == elementName && elements[i].value == elementValue) {
			elements[i].checked=elementChecked;
		}
	}
}
//Sets the "hidden" checkbox for all visible multibox-values that have been set.
//Requires that the hidden be named <multiboxName.value>dummyPrefix in order to work
function setHiddenMultiboxValues(form, multiboxName, dummyPrefix){
	elements = form.elements;
	
	for (i=0; i<elements.length; i++) {
		if (elements[i].name == multiboxName) {
			//alert("element " + i + " matched " + multiboxName);
			for(j=0; j<elements.length; j++){
				if(elements[i].value + dummyPrefix == elements[j].name){
					//alert("Setting " + elements[j].name + " to " + elements[i].checked);
					elements[j].checked = elements[i].checked;
				}
			}
			
		}
	}
	
}

function setCopyByName(elementNameToSet,elementValueToCopy){
	//alert("in setcopy");
	//alert("setting element value "  + document.getElementById(elementNameToSet).value + " to " + document.getElementById(elementValueToCopy).value);	
	
	document.getElementById(elementNameToSet).value=	document.getElementById(elementValueToCopy).value;
}


function setElementValue(form, elementName, elementValue) {
	//alert("setting element " + elementName + " to "  + elementValue);	
	elements = form.elements;
	for (i=0; i<elements.length; i++) {
		if (elements[i].name == elementName) {
			elements[i].value=elementValue;
		}
	}
}

function getListitemExtendedInfo(str, delimiter) {
	myString = new String(str);
	splitString = myString.split(delimiter);
	if (splitString[1] != null) {
		return splitString[1];
	}
	else {
		return "";
	}
}

function disableFieldIfIdPresentInList(idOfListToSearchIn, idOfItemToFind, idOfItemToDisable){
	listToSearchIn = document.getElementById(idOfListToSearchIn).value;
	itemToFind = document.getElementById(idOfItemToFind).value;
	//alert("list to search in " + listToSearchIn + " listid " + idOfListToSearchIn + " " + itemToFind);
	//alert("instr " + listToSearchIn.indexOf(itemToFind));
	
	//May contain a ; Split on delimiter and set correct value.
	if(itemToFind.indexOf(';') > 0){
		myString = new String(itemToFind);
		splitString = myString.split(';');
		itemToFind = splitString[0];
		//alert("set itemtofind to " + itemToFind);
	
	}
	
	if (listToSearchIn.indexOf(itemToFind) <= 0){
		itemToDisable = document.getElementById(idOfItemToDisable);
		itemToDisable.disabled = true;
	}else{
		itemToDisable = document.getElementById(idOfItemToDisable);
		itemToDisable.disabled = false;
	}

}

function setSelectedLineItemListboxValue(lineItemName, lineItemProperty, numberOfLineItems, selectedValue) {
	for (i=0; i<numberOfLineItems; i++) {
		element = document.getElementById(lineItemName + '[' + i + '].' + lineItemProperty);
		if (element != null) {
			for (j=0; j<element.length; j++) {
				var tmpValue = element.options[j].value;
				if (tmpValue == selectedValue) {
					element.selectedIndex = j;
					break;
				}
			}
		}
	}
}

// Script for Calendar
var calendarWindow = null;
var mouseXPos = null;
var mouseYPos = null;
	
function openCalendar(url, optionDayId, optionMonthYearId, windowName) {
	var selectedDay = getSelectedValue(optionDayId);
	var selectedMonthYear = getSelectedValue(optionMonthYearId);			
	var urlWithSelectedDate = url + selectedMonthYear + selectedDay;
	
	// Set calendars x, y position above and to the left of mouse clicked position
	var calendarXPos = (mouseXPos - 271);
	var calendarYPos = (mouseYPos - 295);

	// Set x and y position both for Netscape and IE
	features = 'width=221px' + ',height=211px' + ',left=' + calendarXPos + 'px,top=' + calendarYPos + 'px,screenX=' + calendarXPos + 'px,screenY=' + calendarYPos;

	calendarWindow = window.open(urlWithSelectedDate, windowName, features);
	calendarWindow.focus();
	return false;
}

function getSelectedValue(formId) { 
	var selectedItem = formId.selectedIndex;
	var selectedValue = formId.options[selectedItem].value;
	return selectedValue;
}

function setMouseClickedPosition(evt) {
	// Get event both for Netscape and IE
	var evt = (evt) ? evt : ((window.event) ? event : null);
	if (evt) {
		mouseXPos = evt.screenX;
		mouseYPos = evt.screenY;
	}
	return false;
}

function closeCalendar() {
	if (calendarWindow) {
		calendarWindow.close();
	}
}	
// End Script for Calendar

function setFocus(elemId){
	elem = document.getElementById(elemId);
	
	if(elem != null && elem.type != "hidden"){
		elem.focus();
	}
}

function setFocusAndInputSubmitEvent(formId, inputFocusId, methodValue, message, showWaitPage, hiddenName, hiddenValue, showWaitDiv) {
	setFocus(inputFocusId);
	addInputSubmitEvent(formId, methodValue, message, showWaitPage, hiddenName, hiddenValue, showWaitDiv);
}

function addInputSubmitEvent(formId, methodValue, message, showWaitPage, hiddenName, hiddenValue, showWaitDiv) {

	var form = document.getElementById(formId);
	var inputs = form.getElementsByTagName('input');

	for (var i=0; i < inputs.length; i++)	 {

	    inputs[i].onkeydown = function(e) {
			e = e || window.event;
			if (e.keyCode == 13) {
				return submitForm(form, methodValue, message, showWaitPage, hiddenName, hiddenValue, showWaitDiv)	        
			}
	    };
	}
}

function openHelpWindow(url) {
	window.open(url, '__help', 'width=800,height=600,scrollbars');
	return false;
}

function openHotelInfo(url) {
	openHotelUrlFlag = true;
	window.open(url, '__hotelInfo', 'height=400,width=670,resizable,scrollbars');
	return false;
}

function openHotelInfoInstadia(url) {
	openHotelUrlFlag = true;
	if(typeof Instadia_sendEvent =='function') {
		Instadia_sendEvent('011CI','Exit #' + url);
	}
	window.open(url, '__hotelInfo', 'height=400,width=670,resizable,scrollbars');
	return false;
}

function openWindowNoReturn(theURL, winName, features) {
  window.open(theURL,winName,features);
}

function showChildAgeInfo(divId, childrenCtrlId, youthCtrlId, studentCtrlId) {
  
  var elemChildren = document.getElementById(childrenCtrlId);
  var elemYouth = document.getElementById(youthCtrlId);
  var elemStudent = document.getElementById(studentCtrlId);
  
  if(elemChildren != null && elemYouth != null && elemStudent != null){

	  var childrenCount = getSelectedValue(elemChildren);
	  var youthCount = getSelectedValue(elemYouth);
	  var studentCount = getSelectedValue(elemStudent);
	  
	  if(childrenCount > 0 && (youthCount > 0 || studentCount > 0) ){
	  	document.getElementById(divId).style.display = 'block';
	  }
	  else{
	  	document.getElementById(divId).style.display = 'none';
	  }
  }
}
  
var myWin;

function paynovaPopup(form, method, showWait){
	submitForm(form, method, null, showWait);
	
	// POPUP removed, using iframe instead
  }
  
function paynovaPopdown(form, method, messages, showWait){
	submitForm(form, method, messages, showWait);
	
	// POPUP removed, using iframe instead
}

function expandTreeNode(node, expand, expandChildren, siblings) {
	if (siblings != '') {
		var nodes = siblings.split(",");
		for(i=0;i<nodes.length;i++){
			if (expand) {
				document.getElementById(nodes[i]).style.display='none';
			} else {
				document.getElementById(nodes[i]).style.display='block';
			}
		}
	}
	if (expand == true) { 
		document.getElementById(node + '_x').style.display='inline';
		document.getElementById(node + '_c').style.display='none';
		if (expandChildren == true) 
			document.getElementById(node + '_s').style.display='block';
	} else {
		document.getElementById(node + '_x').style.display='none';
		document.getElementById(node + '_c').style.display='inline';
		if (expandChildren == true) 
			document.getElementById(node + '_s').style.display='none';
	}
} 
		
function checkTreeNode(node, check, value) {
	document.getElementById(node + '_i').value=value;
	if (check == true) {
		document.getElementById(node + '_1').style.display='inline';
		document.getElementById(node + '_0').style.display='none';
	} else {
		document.getElementById(node + '_1').style.display='none';
		document.getElementById(node + '_0').style.display='inline';
	}
}

var StyleUtil = new Object();

StyleUtil.HIDDEN_CLASSNAME = 'hidden';

StyleUtil.tryShowElement = 
	function (oEl) {
		if(oEl) {
			StyleUtil.removeClass(oEl, StyleUtil.HIDDEN_CLASSNAME);
		}
	};


StyleUtil.showElement = 
	function (oEl) {
		StyleUtil.removeClass(oEl, StyleUtil.HIDDEN_CLASSNAME);
	};

StyleUtil.tryHideElement = 
	function (oEl) {
		if(oEl) {
			StyleUtil.addClass(oEl, StyleUtil.HIDDEN_CLASSNAME);
		}
	};

StyleUtil.hideElement = 
	function (oEl) {
		StyleUtil.addClass(oEl, StyleUtil.HIDDEN_CLASSNAME);
	};
		
StyleUtil.isHiddenElement = 
	function (oEl) {		
		return StyleUtil.hasClass(oEl, StyleUtil.HIDDEN_CLASSNAME);
	};	

StyleUtil.hasClass = 
	function (oEl, sClass) {
		if (!oEl) {
			return false;
		}

		return StyleUtil._getRegExp(sClass).test(oEl.className);
	};

StyleUtil.addClass = 
	function (oEl, sClass) {
		if (StyleUtil.hasClass(oEl, sClass)) {
			return false;
		}
	
		if (oEl.className) {
			oEl.className += (' ' + sClass);
		} else {
			oEl.className = sClass;
		}
		
		return true;
	};

StyleUtil.removeClass = 
	function (oEl, sClass) {
		if (!StyleUtil.hasClass(oEl, sClass)) {
			return false;
		}
		
		var reTrimWS = /(^\s+|\s+$)/g;
		oEl.className = oEl.className.replace(StyleUtil._getRegExp(sClass), ' ').replace(reTrimWS, '');
		
		return true;
	};

StyleUtil._getRegExp = 
	function (sClass) {
		return new RegExp('(^|\\s+)(' + sClass + ')(\\s+|$)', 'g');
	};

function expandAllMoreInfoByPrefix(sInfoLinkIdPrefix, sLongTextCommonIdPrefix) {
	var i = 0;
	var tempElement = null;
	
	document.getElementById("More_info").style.display = "none";
	document.getElementById("Less_info").style.display = "block";
	
	while(tempElement = document.getElementById(sInfoLinkIdPrefix + i)) {
		var sLongTextIdPrefix = sLongTextCommonIdPrefix + i + "_";
		expandMoreInfoByPrefix(tempElement.id, sLongTextIdPrefix);
		i++;
	}
}

function collapseAllMoreInfoByPrefix(sInfoLinkIdPrefix, sLongTextCommonIdPrefix) {
	var i = 0;
	var tempElement = null;
	
	document.getElementById("More_info").style.display = "block";
	document.getElementById("Less_info").style.display = "none";
	
	while(tempElement = document.getElementById(sInfoLinkIdPrefix + i)) {
		var sLongTextIdPrefix = sLongTextCommonIdPrefix + i + "_";
		collapseMoreInfoByPrefix(tempElement.id, sLongTextIdPrefix);
		i++;
	}
}

function expandMoreInfoByPrefix(sInfoLinkId, sLongTextIdPrefix) { 
 	var infoLinkEl = document.getElementById(sInfoLinkId);
        
	StyleUtil.removeClass(infoLinkEl, 'more_closed');
	StyleUtil.addClass(infoLinkEl, 'more_open');
	// Find all by prefix and show them
	showElementsByPrefix(sLongTextIdPrefix, true);
}

function collapseMoreInfoByPrefix(sInfoLinkId, sLongTextIdPrefix) { 
 	var infoLinkEl = document.getElementById(sInfoLinkId);
        
	StyleUtil.removeClass(infoLinkEl, 'more_open');
	StyleUtil.addClass(infoLinkEl, 'more_closed');
	// Find all by prefix and show them
	showElementsByPrefix(sLongTextIdPrefix, false);
}
	
function toggleMoreInfoByPrefix(sInfoLinkId, sLongTextIdPrefix) { 
 	var infoLinkEl = document.getElementById(sInfoLinkId);
        
	if (StyleUtil.hasClass(infoLinkEl, 'more_closed')) {	
		StyleUtil.removeClass(infoLinkEl, 'more_closed');
		StyleUtil.addClass(infoLinkEl, 'more_open');
		// Find all by prefix and show them
		showElementsByPrefix(sLongTextIdPrefix, true);
	} else {
		StyleUtil.removeClass(infoLinkEl, 'more_open');
		StyleUtil.addClass(infoLinkEl, 'more_closed');
		// Find all by prefix and show them
		showElementsByPrefix(sLongTextIdPrefix, false);
	}
}

function showCustomerCardsByPrefix(sIdPrefix, visibleIndex) {
	showElementsByPrefix(sIdPrefix, true, 1, visibleIndex);
	showElementsByPrefix(sIdPrefix, false, visibleIndex + 1);	
}

function showElementsByPrefix(sIdPrefix, bShow, startIndex, stopIndex) {
	var i = startIndex || 0;
	var tempElement;
	while (tempElement = document.getElementById(sIdPrefix + i)){
		if (bShow) {
			StyleUtil.showElement(tempElement);	
		} else {
			StyleUtil.hideElement(tempElement);	
		}
		i++;
		
		if ((stopIndex != null) && (stopIndex < i)) {
			break;
		}
	}
}	

function toggleElementVisibility(elemId) { 
 	var elem = document.getElementById(elemId);        

	if (StyleUtil.isHiddenElement(elem)) {	
		StyleUtil.showElement(elem);	
	} else {
		StyleUtil.hideElement(elem);	
	}
}

function toggleElement(show, elemId) { 
 	var elem = document.getElementById(elemId);        

	if (show) {
		StyleUtil.showElement(elem);
	} else {
		StyleUtil.hideElement(elem);
	}
}

function setElementDisplayValue(elemId, value) {
	var elem = document.getElementById(elemId);
	elem.style.display = value;
}

function getElementDisplayValue(elemId) {
	var elem = document.getElementById(elemId);
	return elem.style.display;
}

//  added for dynamic text 1.1 start
function setFontSize(textSizeValue){
   
    if(textSizeValue=="value1")
        fontSize="1.0em";
    else if(textSizeValue=="value2")
        fontSize="1.2em";
    else if(textSizeValue=="value3")
        fontSize="1.4em";
    else
        fontSize="1.0em";
   
    document.getElementById("div_body_article_2col_font_special").style.fontSize=fontSize;
}
// added for dynamic text 1.1 end

function openHotelPopup(urlToOpen) {
  var wnd = window.open(urlToOpen,'hotelInfoWindow', 'height=400,width=670,resizable,scrollbars');
  wnd.focus();
}


//used by forms
function manageRadiobuttonForms(strTobBeSplit, numbOfSubFields, name, label){

	//set all field to readonly first, i.e. lock em' up!
	arrElements =strTobBeSplit.split(",");
	for(i=0;i<arrElements.length;i++){
			
		var element = document.getElementById(arrElements[i]);
		if(element != null){		
			
			if(element.readOnly == false){
                element._valueTmp = element.value;
            } 
            
			element.readOnly = true;		
			element.value = "";	
			element.style.backgroundColor = "#C1C1C1"; 
			
			//change the color of the label
			labelToSet = label + "_" + arrElements[i];
            document.getElementById(labelToSet).style.color = "#C1C1C1";
		}
	}
		
	//set the connected field to readonly=false, i.e. unlock
	for(i=0;i<numbOfSubFields;i++){
		nameToShow = name + "_" + i;
		var element = document.getElementById(nameToShow);
		
		element.readOnly = false;
		element.value = element._valueTmp || "";
		element.style.backgroundColor = "#FFFFFF"; 
		
		//change the color of the label
		labelToSet = label + "_" + nameToShow;
        document.getElementById(labelToSet).style.color = "#000000"; 
	}
}

//used by forms
function manageCheckboxForm(numbOfSubFields, name, label){
	
	if(document.getElementById(name).checked == true){

		//set the connected field to readonly=false
		for(i=0;i<numbOfSubFields;i++){
			nameToShow = name + "_" + i;
			var element = document.getElementById(nameToShow);
			
			element.readOnly = false;
			element.value = element._valueTmp || "";
			element.style.backgroundColor = "#FFFFFF"; 
			
			//change the color of the label
			labelToSet = label + "_" + nameToShow;
            document.getElementById(labelToSet).style.color = "#000000"; 
		}
		
	} else{

		for(i=0;i<numbOfSubFields;i++){
			nameToHide = name + "_" + i;
			var element = document.getElementById(nameToHide);
			
			element.readOnly = true;
			element._valueTmp = element.value;
			element.value = "";
			element.style.backgroundColor = "#C1C1C1"; 
			
			//change the color of the label
			labelToSet = label + "_" + nameToHide;
            document.getElementById(labelToSet).style.color = "#C1C1C1"; 
		}
	}
}

//used by forms
function setLabelColor(strTobBeSplit, label){

	arrElements =strTobBeSplit.split(",");
	for(i=0;i<arrElements.length;i++){
		if(document.getElementById(arrElements[i]) != null){	
		
			labelToSetColor = label + "_" + arrElements[i];	
			if(document.getElementById(arrElements[i]).readOnly == false){
            	document.getElementById(labelToSetColor).style.color = "#000000";
			} else {
				document.getElementById(labelToSetColor).style.color = "#C1C1C1";
			} 
		}
	}
}


// Method is used by the creditcardfield in the payment section to ignore
// any character that is not a number.
function ignoreSpaces(event, field) {
	var keyNum;
	var keyChar;
	var spaceChar = " ";
	if(window.event) // IE (use keyCode to obtain value)
	{
		keyNum = event.keyCode;
	}
	else if(event.which) // Netscape/Firefox/Opera (user which to obtain value)
	{
		keyNum = event.which;
	}
	keyChar = String.fromCharCode(keyNum);
	return keyChar != spaceChar;
}

function showReservCoupeNotification(compartmentElemId, compartmentValue, notificationElemId) {
	var compartmentElem = document.getElementById(compartmentElemId);
	var _none = "none";
	var _block = "block";
	if(compartmentElem.options[compartmentElem.selectedIndex].value == compartmentValue) {
		setElementDisplayValue(notificationElemId, _block);
	}
	else {
		setElementDisplayValue(notificationElemId, _none);
	}
}

function toggleRegistrationProgress(showProgressElementId,hideProgressElementId, focusOnCheckboxId, showFormElementId) {

	var showProgessElement = document.getElementById(showProgressElementId);
	var hideProgressElement = document.getElementById(hideProgressElementId);			
		
	StyleUtil.showElement(showProgessElement);	
	StyleUtil.hideElement(hideProgressElement);			
	
	if(showFormElementId != null) {
		expandTable(showFormElementId,showFormElementId,true);
	}
	
	var focusOnCheckbox = document.getElementById(focusOnCheckboxId);
	
	if(focusOnCheckbox != null)	 {
		focusOnCheckbox.checked = true;
		focusOnCheckbox.focus(true);
	}
}	

function clearForm(form) {

  var els = form.elements;
    for (var i = 0; i < els.length; i++) {
        var el = els[i];
        
        if(el.type == 'text' || el.type == 'textarea'){
          	el.value = '';
        } else if(el.type == 'radio'){
          	clearRadioButton(el);
        } else if(el.type == 'checkbox'){
			el.checked = false;
        } 
    }  
}
 
function clearRadioButton(radioBtn) {
	var radioBtnGroup = document.getElementsByName(radioBtn.name);
	radioBtnGroup[0].checked = true;
}


/* RPS */

function setHiddenFieldAndSubmit(form, ids, values, text) {

	arrIds = ids.split(",");	
	arrValues = values.split(",");	
	
	for (i=0;i<arrIds.length;i++){
		document.getElementById(arrIds[i]).value = arrValues[i];
	}
	
	var ans=window.confirm(text); 
	if (ans == true) { 
		form.submit();
		return true;
	} else { 
		return false;
	} 

}

function disableField(mode, passivateFiled){

	if(mode == 1){
        document.getElementById(passivateFiled).className = "fieldDisabled";
		document.getElementById(passivateFiled).readOnly = true;
          document.getElementById(passivateFiled).value = "";
		
	} else{
      document.getElementById(passivateFiled).className = "fieldEnabled";
		document.getElementById(passivateFiled).readOnly = false;
	}
		
}
/*RPS END */



/* select box start */
var dynamicOptionListCount=0;var dynamicOptionListObjects = new Array();
function initDynamicOptionLists(){for(var i=0;i<dynamicOptionListObjects.length;i++){var dol = dynamicOptionListObjects[i];if(dol.formName!=null){dol.form = document.forms[dol.formName];}else if(dol.formIndex!=null){dol.form = document.forms[dol.formIndex];}else{var name = dol.fieldNames[0][0];for(var f=0;f<document.forms.length;f++){if(typeof(document.forms[f][name])!="undefined"){dol.form = document.forms[f];break;}}if(dol.form==null){alert("ERROR: Couldn't find form element "+name+" in any form on the page! Init aborted");return;}}for(var j=0;j<dol.fieldNames.length;j++){for(var k=0;k<dol.fieldNames[j].length-1;k++){var selObj = dol.form[dol.fieldNames[j][k]];if(typeof(selObj)=="undefined"){alert("Select box named "+dol.fieldNames[j][k]+" could not be found in the form. Init aborted");return;}if(k==0){if(selObj.options!=null){for(l=0;l<selObj.options.length;l++){var sopt = selObj.options[l];var m = dol.findMatchingOptionInArray(dol.options,sopt.text,sopt.value,false);if(m!=null){var reselectForNN6 = sopt.selected;var m2 = new Option(sopt.text, sopt.value, sopt.defaultSelected, sopt.selected);m2.selected = sopt.selected;m2.defaultSelected = sopt.defaultSelected;m2.DOLOption = m;selObj.options[l] = m2;selObj.options[l].selected = reselectForNN6;}}}}if(selObj.onchange==null){selObj.onchange = new Function("dynamicOptionListObjects["+dol.index+"].change(this)");}}}}resetDynamicOptionLists();}
function resetDynamicOptionLists(theform){for(var i=0;i<dynamicOptionListObjects.length;i++){var dol = dynamicOptionListObjects[i];if(typeof(theform)=="undefined" || theform==null || theform==dol.form){for(var j=0;j<dol.fieldNames.length;j++){dol.change(dol.form[dol.fieldNames[j][0]],true);}}}}
function DOLOption(text,value,defaultSelected,selected){this.text = text;this.value = value;this.defaultSelected = defaultSelected;this.selected = selected;this.options = new Array();return this;}
function DynamicOptionList(){this.form = null;this.options = new Array();this.longestString = new Array();this.numberOfOptions = new Array();this.currentNode = null;this.currentField = null;this.currentNodeDepth = 0;this.fieldNames = new Array();this.formIndex = null;this.formName = null;this.fieldListIndexes = new Object();this.fieldIndexes = new Object();this.selectFirstOption = true;this.numberOfOptions = new Array();this.longestString = new Array();this.values = new Object();this.forValue = DOL_forValue;this.forText = DOL_forText;this.forField = DOL_forField;this.forX = DOL_forX;this.addOptions = DOL_addOptions;this.addOptionsTextValue = DOL_addOptionsTextValue;this.setDefaultOptions = DOL_setDefaultOptions;this.setValues = DOL_setValues;this.setValue = DOL_setValues;this.setFormIndex = DOL_setFormIndex;this.setFormName = DOL_setFormName;this.printOptions = DOL_printOptions;this.addDependentFields = DOL_addDependentFields;this.change = DOL_change;this.child = DOL_child;this.selectChildOptions = DOL_selectChildOptions;this.populateChild = DOL_populateChild;this.change = DOL_change;this.addNewOptionToList = DOL_addNewOptionToList;this.findMatchingOptionInArray = DOL_findMatchingOptionInArray;if(arguments.length > 0){for(var i=0;i<arguments.length;i++){this.fieldListIndexes[arguments[i].toString()] = this.fieldNames.length;this.fieldIndexes[arguments[i].toString()] = i;}this.fieldNames[this.fieldNames.length] = arguments;}this.index = window.dynamicOptionListCount++;window["dynamicOptionListObjects"][this.index] = this;}
function DOL_findMatchingOptionInArray(a,text,value,exactMatchRequired){if(a==null || typeof(a)=="undefined"){return null;}var value_match = null;var text_match = null;for(var i=0;i<a.length;i++){var opt = a[i];if(opt.value==value && opt.text==text){return opt;}if(!exactMatchRequired){if(value_match==null && value!=null && opt.value==value){value_match = opt;}if(text_match==null && text!=null && opt.text==text){text_match = opt;}}}return(value_match!=null)?value_match:text_match;}
function DOL_forX(s,type){if(this.currentNode==null){this.currentNodeDepth=0;}var useNode =(this.currentNode==null)?this:this.currentNode;var o = this.findMatchingOptionInArray(useNode["options"],(type=="text")?s:null,(type=="value")?s:null,false);if(o==null){o = new DOLOption(null,null,false,false);o[type] = s;useNode.options[useNode.options.length] = o;}this.currentNode = o;this.currentNodeDepth++;return this;}
function DOL_forValue(s){return this.forX(s,"value");}
function DOL_forText(s){return this.forX(s,"text");}
function DOL_forField(f){this.currentField = f;return this;}
function DOL_addNewOptionToList(a, text, value, defaultSelected){var o = new DOLOption(text,value,defaultSelected,false);if(a==null){a = new Array();}for(var i=0;i<a.length;i++){if(a[i].text==o.text && a[i].value==o.value){if(o.selected){a[i].selected=true;}if(o.defaultSelected){a[i].defaultSelected = true;}return a;}}a[a.length] = o;}
function DOL_addOptions(){if(this.currentNode==null){this.currentNode = this;}if(this.currentNode["options"] == null){this.currentNode["options"] = new Array();}for(var i=0;i<arguments.length;i++){var text = arguments[i];this.addNewOptionToList(this.currentNode.options,text,text,false);if(typeof(this.numberOfOptions[this.currentNodeDepth])=="undefined"){this.numberOfOptions[this.currentNodeDepth]=0;}if(this.currentNode.options.length > this.numberOfOptions[this.currentNodeDepth]){this.numberOfOptions[this.currentNodeDepth] = this.currentNode.options.length;}if(typeof(this.longestString[this.currentNodeDepth])=="undefined" ||(text.length > this.longestString[this.currentNodeDepth].length)){this.longestString[this.currentNodeDepth] = text;}}this.currentNode = null;this.currentNodeDepth = 0;}
function DOL_addOptionsTextValue(){if(this.currentNode==null){this.currentNode = this;}if(this.currentNode["options"] == null){this.currentNode["options"] = new Array();}for(var i=0;i<arguments.length;i++){var text = arguments[i++];var value = arguments[i];this.addNewOptionToList(this.currentNode.options,text,value,false);if(typeof(this.numberOfOptions[this.currentNodeDepth])=="undefined"){this.numberOfOptions[this.currentNodeDepth]=0;}if(this.currentNode.options.length > this.numberOfOptions[this.currentNodeDepth]){this.numberOfOptions[this.currentNodeDepth] = this.currentNode.options.length;}if(typeof(this.longestString[this.currentNodeDepth])=="undefined" ||(text.length > this.longestString[this.currentNodeDepth].length)){this.longestString[this.currentNodeDepth] = text;}}this.currentNode = null;this.currentNodeDepth = 0;}
function DOL_child(obj){var listIndex = this.fieldListIndexes[obj.name];var index = this.fieldIndexes[obj.name];if(index <(this.fieldNames[listIndex].length-1)){return this.form[this.fieldNames[listIndex][index+1]];}return null;}
function DOL_setDefaultOptions(){if(this.currentNode==null){this.currentNode = this;}for(var i=0;i<arguments.length;i++){var o = this.findMatchingOptionInArray(this.currentNode.options,null,arguments[i],false);if(o!=null){o.defaultSelected = true;}}this.currentNode = null;}
function DOL_setValues(){if(this.currentField==null){alert("Can't call setValues() without using forField() first!");return;}if(typeof(this.values[this.currentField])=="undefined"){this.values[this.currentField] = new Object();}for(var i=0;i<arguments.length;i++){this.values[this.currentField][arguments[i]] = true;}this.currentField = null;}
function DOL_setFormIndex(i){this.formIndex = i;}
function DOL_setFormName(n){this.formName = n;}
function DOL_printOptions(name){if((navigator.appName == 'Netscape') &&(parseInt(navigator.appVersion) <= 4)){var index = this.fieldIndexes[name];var ret = "";if(typeof(this.numberOfOptions[index])!="undefined"){for(var i=0;i<this.numberOfOptions[index];i++){ret += "<OPTION>";}}ret += "<OPTION>";if(typeof(this.longestString[index])!="undefined"){for(var i=0;i<this.longestString[index].length;i++){ret += "_";}}document.writeln(ret);}}
function DOL_addDependentFields(){for(var i=0;i<arguments.length;i++){this.fieldListIndexes[arguments[i].toString()] = this.fieldNames.length;this.fieldIndexes[arguments[i].toString()] = i;}this.fieldNames[this.fieldNames.length] = arguments;}
function DOL_change(obj, usePreselected){if(usePreselected==null || typeof(usePreselected)=="undefined"){usePreselected = false;}var changedListIndex = this.fieldListIndexes[obj.name];var changedIndex = this.fieldIndexes[obj.name];var child = this.child(obj);if(child == null){return;}if(obj.type == "select-one"){if(child.options!=null){child.options.length=0;}if(obj.options!=null && obj.options.length>0 && obj.selectedIndex>=0){var o = obj.options[obj.selectedIndex];this.populateChild(o.DOLOption,child,usePreselected);this.selectChildOptions(child,usePreselected);}}else if(obj.type == "select-multiple"){var currentlySelectedOptions = new Array();if(!usePreselected){for(var i=0;i<child.options.length;i++){var co = child.options[i];if(co.selected){this.addNewOptionToList(currentlySelectedOptions, co.text, co.value, co.defaultSelected);}}}child.options.length=0;if(obj.options!=null){var obj_o = obj.options;for(var i=0;i<obj_o.length;i++){if(obj_o[i].selected){this.populateChild(obj_o[i].DOLOption,child,usePreselected);}}var atLeastOneSelected = false;if(!usePreselected){for(var i=0;i<child.options.length;i++){var m = this.findMatchingOptionInArray(currentlySelectedOptions,child.options[i].text,child.options[i].value,true);if(m!=null){child.options[i].selected = true;atLeastOneSelected = true;}}}if(!atLeastOneSelected){this.selectChildOptions(child,usePreselected);}}}this.change(child,usePreselected);}
function DOL_populateChild(dolOption,childSelectObj,usePreselected){if(dolOption!=null && dolOption.options!=null){for(var j=0;j<dolOption.options.length;j++){var srcOpt = dolOption.options[j];if(childSelectObj.options==null){childSelectObj.options = new Array();}var duplicate = false;var preSelectedExists = false;for(var k=0;k<childSelectObj.options.length;k++){var csi = childSelectObj.options[k];if(csi.text==srcOpt.text && csi.value==srcOpt.value){duplicate = true;break;}}if(!duplicate){var newopt = new Option(srcOpt.text, srcOpt.value, false, false);newopt.selected = false;newopt.defaultSelected = false;newopt.DOLOption = srcOpt;childSelectObj.options[childSelectObj.options.length] = newopt;}}}}
function DOL_selectChildOptions(obj,usePreselected){var values = this.values[obj.name];var preselectedExists = false;if(usePreselected && values!=null && typeof(values)!="undefined"){for(var i=0;i<obj.options.length;i++){var v = obj.options[i].value;if(v!=null && values[v]!=null && typeof(values[v])!="undefined"){preselectedExists = true;break;}}}var atLeastOneSelected = false;for(var i=0;i<obj.options.length;i++){var o = obj.options[i];if(preselectedExists && o.value!=null && values[o.value]!=null && typeof(values[o.value])!="undefined"){o.selected = true;atLeastOneSelected = true;}else if(!preselectedExists && o.DOLOption!=null && o.DOLOption.defaultSelected){o.selected = true;atLeastOneSelected = true;}else{o.selected = false;}}if(this.selectFirstOption && !atLeastOneSelected && obj.options.length>0){obj.options[0].selected = true;}else if(!atLeastOneSelected &&  obj.type=="select-one"){obj.selectedIndex = -1;}}
/* select box end */




/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}	
	}
	return returnElements;
}

function getElementsRemoveByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(!testClass.test(current.className)){
			returnElements.push(current);
		}	
	}
	return returnElements;
}

/*
 * For some reason the div_body_left and the div_body_right are not the same length.
 * They differ by a magic number of pixels which is also different in the different
 * browsers.
 */
function getMagicNumber() {
	
	    var magicNumber = 6;
 		if (navigator.appName == "Netscape" || navigator.appName == "Opera") {
		    if (navigator.vendor != null && navigator.vendor.length > 0 && navigator.vendor.toLowerCase().indexOf("apple") > -1) {
                magicNumber = 11; 
		    } else {
                magicNumber = 11; 
		    }
		}
 		else if(navigator.appName == "Microsoft Internet Explorer") {
		    magicNumber = 10;
		}
		//alert("mn:" + magicNumber);
        return magicNumber;
}

  /*
  * Function that will remove "teasers" (sv:puffs) from the right hand column if there inclusion would mean that
  * the right hand column would otherwise protrude further downwards than any teasers in the left hand column.
  * It also pads the right hand column (if necessary) so that the bottom of the right hand teaser column is in
  * line with the bottom of the left hand teaser.
  */
  function resizeRightColumn() {

      var divBody = getElementsByClassName('div_body', 'div', document)[0];
      var divBodyLeft = getElementsByClassName('div_body_left', 'div', document)[0];
      var divBodyRight = getElementsByClassName('div_body_right', 'div', divBody)[0];

      if (divBodyLeft != null && divBodyRight != null) {
	      var bottomLine = getElementsByClassName('div_body_right_bottom_line', 'div', divBodyRight)[0];
	      
		  // In case there is now more room since "last time" (reset right teasers to visible).
		  //
		  var arrayOfTeaserElements = getElementsRemoveByClassName('div_body_right_bottom_line', 'div', divBodyRight);
		  if (arrayOfTeaserElements != null && arrayOfTeaserElements.length > 0) {
		      for (i = 0; i < arrayOfTeaserElements.length; i++) {
		         var elementToReinit = arrayOfTeaserElements[i];
		         elementToReinit.style.display='';
		      }
		  }
	
	      // firefox workaround - begin
	      // required so that the offsetHeight read will work!
	      divBodyLeft.style.height="auto";
	      divBodyRight.style.height="auto";
	      bottomLine.style.height="auto";
	      // firefox workaround - end
	      
		  var leftH = divBodyLeft.offsetHeight;
		  var rightH = divBodyRight.offsetHeight;
		  var bottomLineH = bottomLine.offsetHeight;
	
		  var diff = leftH - rightH;
	
		  if (diff < 0) {
		     // right div is longer than left div, we must adjust (by hiding some teasers in the right div).
		     // begin at the end of the right div column (that is, last teaser in column)
		     //
		     if (arrayOfTeaserElements != null && arrayOfTeaserElements.length > 0) {
		         for (i = arrayOfTeaserElements.length -1; (i>0 && diff < 0); i--) {
		             var elementToHide = arrayOfTeaserElements[i];
		             elementToHide.style.display='none';
		             // check new height (and new difference - between right and left div) after
		             // we have "removed" teaser
		             //
		             rightH = divBodyRight.offsetHeight;
		             diff = leftH - rightH;
		         }
		     }
		  }
		  bottomLine.style.height = (bottomLineH + diff - getMagicNumber()) + 'px';
		  //alert("adjusted");
      }
  }

/*
 *
 * davidflanagan.com/javascript5
 * Example 17-7 from JavaScript: The Definitive Guide, Fifth Edition 
 *
 * runOnLoad.js: portable registration for onload event handlers.
 * 
 * This module defines a single runOnLoad() function for portably registering
 * functions that can be safely invoked only when the document is fully loaded
 * and the DOM is available.
 *
 * Functions registered with runOnLoad() will not be passed any arguments when
 * invoked. They will not be invoked as a method of any meaningful object, and
 * the this keyword should not be used.  Functions registered with runOnLoad()
 * will be invoked in the order in which they were registered.  There is no
 * way to deregister a function once it has been passed to runOnLoad().
 *
 * In old browsers that do not support addEventListener() or attachEvent(),
 * this function relies on the DOM Level 0 window.onload property and will not
 * work correctly when used in documents that set the onload attribute
 * of their <body> or <frameset> tags.
 */
function runOnLoad(f) {
    if (runOnLoad.loaded) f();    // If already loaded, just invoke f() now.
    else runOnLoad.funcs.push(f); // Otherwise, store it for later
}

runOnLoad.funcs = []; // The array of functions to call when the document loads
runOnLoad.loaded = false; // The functions have not been run yet.

// Run all registered functions in the order in which they were registered.
// It is safe to call runOnLoad.run() more than once: invocations after the
// first do nothing. It is safe for an initialization function to call
// runOnLoad() to register another function.
runOnLoad.run = function() {
    if (runOnLoad.loaded) return;  // If we've already run, do nothing

    for(var i = 0; i < runOnLoad.funcs.length; i++) {
        try { runOnLoad.funcs[i](); }
        catch(e) { /* An exception in one function shouldn't stop the rest */ }
    }
    
    runOnLoad.loaded = true; // Remember that we've already run once.
    delete runOnLoad.funcs;  // But don't remember the functions themselves.
    delete runOnLoad.run;    // And forget about this function too!
};

// Register runOnLoad.run() as the onload event handler for the window
if (window.addEventListener)
    window.addEventListener("load", runOnLoad.run, false);
else if (window.attachEvent) window.attachEvent("onload", runOnLoad.run);
else window.onload = runOnLoad.run;

function setNumberOfDays(year, month, day) {
	if (year.value != "-1" && month.value != "-1") {
		var d = new Date(year.value, month.value-1, 32);
		var howManyDaysShorterThan31 = d.getDate() - 1;
		
		var currentDay = day.value
		
		for (i = 3; i >= howManyDaysShorterThan31; i--) {
			var newIndex = 31 - i;
			day.options.length = newIndex;
			day.options[newIndex] = new Option(newIndex, newIndex, false, false);
		}
		
		if (currentDay >= day.options.length) {
			day.value = day.options.length - 1;
		} else {
			day.value = currentDay;
		}
	}
}

	function personIdentityValidator(event, fieldToCount, fieldToGetFocus) {
	if (event.keyCode != 16 && event.keyCode != 9 && event.keyCode != 37
			&& event.keyCode != 39)
		if (document.getElementById(fieldToCount).value.length > 7) {
			document.getElementById(fieldToGetFocus).focus();
		}
}

function block(h1, p) {
	jQuery.blockUI( {
		css : {
			width :'250px',
			backgroundColor :'#eeeeee',
			border :'3px solid #bbbbbb'
		},
		overlayCSS : {
			backgroundColor :'#ffffff'
		},
		message :'<div class="blockSiteMessage">' + '<p>' + '<strong>' + h1
				+ '</strong><br/>' + p + '</p>' + '</div>'
	});
}

function unblock() {
	jQuery.unblockUI();
}

function blockImagePreload(containerId) {
	jQuery.blockUI( {
		css : {
			width :'250px',
			backgroundColor :'#eeeeee',
			border :'3px solid #bbbbbb'
		},
		overlayCSS : {
			backgroundColor :'#ffffff'
		},
		message : jQuery(containerId)
	});
}
