// Javascript utilities

  // ****************************
  // Declarations
  // ****************************

  var dimages = new Array();
  var curImage = -1;
  var restPosn = 0;
  var aniLength = new Array(1100,2100,3500,5100);
  var core = "/onlinereservations/Dispatcher?controller=";
  //var domain = "localhost:8080";
  var domain = "www.chambresdhotes.org";
  //var domain = "www.awonderfulchoice.com";
  var dtCh= "/";
  var minYear=1900;
  var maxYear=2100;
  var dateFromStr = '';
  var dateToStr = '';
  var test = false;
  var referrer = '';
  var todayDate = new Date();
  //defined todayVar this way to get date without time element
  var todayVar = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate());
  // Parameter splitting
  var qsParm = new Array();


   // ****************************
  // Help Text Utilities
  // ****************************
  function writeHT(refr,htext) {
	  document.write('<a href="#" id="anchorht"><img src="images/ht.gif" class="htImg" id="' + refr + 'Img" onMouseOver="mouseOverHT(\''+ refr +'\');" onMouseOut="mouseOutHT(\''+ refr +'\');" /></a>');
	  document.write('<div class="ht" id="' + refr + '"><table class="htTable"><tr><td>' + htext +'</td></tr></table></div>');
  }
  
  function hideHT() {
	//$.each($('.ht'), function(i,v) {
	//    var theTag = v.tagName;
	//    var theElement = $(v);
	//    var theValue = theElement.val();
	//});
	$('.ht').hide();
  }
  
  function mouseOutHT(refr) {
	 $(document).ready(function() {
		var refr1 = '#' + refr;
		var refr2 = refr1 + 'Img';
		hideHT();
		$(refr2).attr("src", "images/ht.gif");
	});	
 }
  
  function mouseOverHT(refr) {
	var refr1 = '#' + refr;
	var refr2 = refr1 + 'Img';
	 $(document).ready(function() {
		$(refr1).show();
		$(refr2).attr("src", "images/htOver.gif");
	});	
 	
  }
  
  // ****************************
  // General Navigation Utilities
  // ****************************
  
  function isTest() {
	  return test;
  }

  function setTest(testing) {
	  if (testing) {
		  test = true;
		  //domain = "localhost:8080";
	  } else {
		  test = false;
		  //domain = "www.awonderfulchoice.com";
		  //domain = "www.chambresdhotes.org";
	  }
  }

  function openResizableWin(fileName, title) {
     myFloater = window.open('',title);
     myFloater.location.href = fileName;
  }
  
  function openWin(fileName, title) {
    myFloater = window.open('', title, 'width = 700, height= 500');
    myFloater.location.href = fileName;
  }
  
  function openVerySmallWin(fileName, title) {
    myFloater = window.open('', title, 'width = 1, height= 1');
    myFloater.location.href = "http://" + domain + fileName;
  }

  function closeMe() {
     window.close();
  }
  
  function go() {
	setTest(test);
  	window.document.location = 'http://' + domain;
  }
  
  function goBack() {
      window.history.back();
  }

  function redirectBack(timeOut) {
      setTimeout(goBack(), timeOut);
  }
  
  function setStatus(statusText) {
     status = statusText;
     return true;
  }
  
  function redirectHome(timeOut) {
      setTimeout(go(), timeOut);
  }
  
  function redisplayList() {
      parent.entries.location.reload();
  }
  
  

  function loadIntoParent() {
	  if (window.parent.frames.length != 0) {
		  //window.parent.location = window.location;
		  window.top.location = window.location;
	  }
  }

  function writeStandardElements(messages) { 
 	document.write('<div id="leftsidebar">');
	writeStandardElementCells(messages);	
	document.write('</div>');
  }
  
  function writeStandardElementsWithLangs(messages, target, messageHT) {
	  document.write('<div id="leftsidebar">');
	  writeToggleLangCells(target);
	  writeStandardElementsCells(messages, messagesHT);
	document.write('</div>');
  }
  
  function writeStandardElementsCells(messages, messagesHT) { 
	setTest(test);    
	document.write('<table  id="menuTab" name="menuTab" class="memberTable">');
	//home page link
	document.write('<tr>');
	document.write('<td class="menuCell">');
	document.write('<a href="' + core + '/ORLoginController" alt="' + messages[1] + '">');
	document.write(messages[1]);
	document.write('</a>');
	writeHT('menuItem1', messagesHT[1]);
	document.write('</td>');
	document.write('</tr>');
	
	//faq link
	//document.write('<tr>');
	//document.write('<td class="menuCell">');
	//document.write('<a href="faq.html" alt="' + messages[2] + '">');
	//document.write(messages[2]);
	//document.write('</a>');
	//writeHT('menuItem2', '"' + messagesHT[2] + '"');
	//document.write('</td>');
	//document.write('</tr>');
	
	//registration link client
	//document.write('<tr>');
	//document.write('<td class="menuCell">');
	//document.write('<a href="' + core + '/ORClientController" alt="' + messages[3] + '">');
	//document.write(messages[3]);
	//document.write('</a>');
	//writeHT('menuItem3', messagesHT[3]);
	//document.write('</td>');
	//document.write('</tr>');
	//registration link client via Community
	document.write('<tr>');
	document.write('<td class="menuCell">');
	document.write('<a href="http://www.chambresdhotes.org/cgi-bin/community.cgi?do=user_home&t=or" alt="' + messages[3] + '">');
	document.write(messages[3]);
	document.write('</a>');
	writeHT('menuItem3', messagesHT[3]);
	document.write('</td>');
	document.write('</tr>');
	
	//registration link customer
	//document.write('<tr>');
	//document.write('<td class="menuCell">');
	//document.write('<a href="' + core + '/or/orCustomerMaintenance.jsp" alt="">');
	//document.write('<a href="' + core + '/ORCustomerController&target=/or/orCustomerMaintenance.jsp" alt="' + messages[3] + '">');
	//document.write(messages[5]);
	//document.write('</a>');
	//writeHT('menuItem5', '"' + messagesHT[5] + '"');
	//document.write('</td>');
	//document.write('</tr>');

	//booking
	//document.write('<tr>');
	//document.write('<td class="menuCell">');
	//document.write('<a href="' + core + '/ORMapController" alt="' + messages[6] + '">');
	//document.write(messages[6]);
	//document.write('</a>');
	//writeHT('menuItem6', '"' + messagesHT[6] + '"');
	//document.write('</td>');
	//document.write('</tr>');
	
	//contact link
	//document.write('<tr>');
	//document.write('<td class="menuCell">');
	//document.write('<a href="contact.html" alt="' + messages[4] + '">');
	//document.write(messages[4]);
	//document.write('</a>');
	//writeHT('menuItem4', '"' + messagesHT[4] + '"');
	//document.write('</td>');
	//document.write('</tr>');
	document.write('</table>');
  }
  
  function writeLoginStandardElementsWithRoleAndLangs(messages, role, target, messagesHT) {
	document.write('<div id="leftsidebar">');
	  writeToggleLangCells(target);
	  writeLoginStandardElementsWithRoleCells(messages, role, messagesHT);
	document.write('</div>');
  }
  
  function writeLoginStandardElementsWithRole(messages, role, messagesHT) {  
	writeLoginStandardElementsInternal(messages, role, messagesHT);    
  }
  
  function writeLoginStandardElements(messages, messagesHT) {  
	writeLoginStandardElementsInternal(messages, 'client_role', messagesHT);    
  }
  function writeLoginStandardElementsInternal(messages, role, messagesHT) {
  	langLink = "";
	//menu
	document.write('<div class="leftsidebar">');
	writeLoginStandardElementsWithRoleCells(messages, role, messagesHT)
	document.write('</div>');
  }
  
  function writeLoginStandardElementsWithRoleCells(messages, role, messagesHT) {
  	langLink = "";
	//menu
	document.write('<p class="offer">');
	document.write('<table id="menuTab" name="menuTab" class="menuTabClass">');
	document.write('<tr>');
	//Home link
	document.write('<td class="menuButton">');
	document.write('<a href="' + core + '/or/orLoginResult.jsp" alt="' + messages[1] + '">');
	document.write(messages[1]);
	document.write('</a>');
	writeHT('menuItem1', messagesHT[1]);
	document.write('</td>');
	document.write('</tr>');
	document.write('<tr>');
	//Amend details link
	document.write('<td class="menuButton">');
	if (role == 'customer_role') {
		document.write('<a href="' + core + '/ORCustomerController&target=/or/orCustomerMaintenance.jsp" alt="' + messages[2] + '">');	
		document.write(messages[2]);
		document.write('</a>');
	} else {
		document.write('<a href="' + core + '/or/orAmendDetails.jsp" alt="' + messages[2] + '">');	
		document.write(messages[2]);
		document.write('</a>');
		writeHT('menuItem2', messagesHT[2]);	
	}
	document.write('</td>');
	document.write('</tr>');
	//Reports link for admin role only
	if (role == 'admin_role') {
		document.write('<tr>');
		document.write('<td class="menuButton">');
		document.write('<a href="' + core + '/or/orReports.jsp" alt="' + messages[3] + '">');		
		document.write(messages[3]);
		document.write('</a>');
		writeHT('menuItem3', messagesHT[3]);	
		document.write('</td>');
		document.write('</tr>');
		document.write('<tr>');
	}
	//Rental Unit link
	if (role != 'customer_role') {
		document.write('<tr>');
		document.write('<td class="menuButton">');
		document.write('<a href="/onlinereservations/Dispatcher?controller=/ORRentalUnitController&actionFlag=multiQry" alt="' + messages[4] + '">');
		//document.write('<a href="' + core + '/or/orRenUnitMenu.jsp" alt="' + messages[4] + '">');	
		document.write(messages[4]);
		document.write('</a>');
		writeHT('menuItem4', messagesHT[4]);	
		document.write('</td>');
		document.write('</tr>');
	}
	//Cut and Paste link and Manual booking
	if (role != 'customer_role') {
		document.write('<tr>');
		document.write('<td class="menuButton">');
		document.write('<a href="' + core + '/or/orLinks.jsp" alt="' + messages[7] + '">');	
		document.write(messages[7]);
		document.write('</a>');
		writeHT('menuItem5', messagesHT[7]);	
		document.write('</td>');
		document.write('</tr>');
	//	document.write('<tr>');
	//	document.write('<td class="menuButton">');
	//	document.write('<a href="' + core + '/or/orManualBooking.jsp" alt="' + messages[9] + '">');	
	//	document.write(messages[9]);
	//	document.write('</a>');
	//	document.write('</td>');
	//	document.write('</tr>');
	}
	//View bookings link
	document.write('<tr>');
	document.write('<td class="menuButton">');
	document.write('<a href="' + core + '/ORViewBookingsController&actionFlag=multiQry" alt="' + messages[6] + '">');	
	document.write(messages[6]);
	document.write('</a>');
	writeHT('menuItem6', messagesHT[6]);	
	document.write('</td>');
	document.write('</tr>');
	
	//Security details link
	//document.write('<tr>');
	//document.write('<td class="menuButton">');
	//document.write('<a href="' + core + '/ORSecurityController&actionFlag=qry" alt="' + messages[8] + '">');	
	//document.write(messages[8]);
	//document.write('</a>');
	//document.write('</td>');
	//document.write('</tr>');
	//Logout link
	document.write('<tr>');
	document.write('<td class="menuButton">');
	document.write('<a href="' + core + '/ORLoginController?logout=true" alt="' + messages[5] + '">');
	document.write(messages[5]);
	document.write('</a>');
	writeHT('menuItem7', messagesHT[5]);	
	document.write('</td>');
	document.write('</tr>');
	document.write('</table>');
	document.write('</p>');	
  }
  
  function writeToggleLangSection(target) {
	// bottom left language selection
  	document.write('<div class="lhsbot">');
	writeToggleLangCells(target);
  	document.write('</div>');
  }
  
   function writeToggleLangSectionTop(target) {
	// bottom left language selection
  	document.write('<div class="topLang">');
	writeToggleLangCells(target);
  	document.write('</div>');
  }
  
  function writeToggleLangCells(target) {
  	document.write('<p align="left">');
  	//English pigs
	document.write('<a href="' + core + '/ORRedirector&lang=en-gb&target=/onlinereservations/or/' + target + '" alt=""');
	document.write('onClick="setStatus(\' \');"');
	document.write('onmouseover="return setStatus(\'In English\');"');
	document.write('onmouseout="setStatus(\' \');">');
	document.write('<IMG class="langButImg" src="http://www.chambresdhotes.org/ukflag.gif" name="engBut" alt="In English">');
	document.write('</a>');
	document.write('&nbsp;');
  	//Cheese-eating surrender monkeys	
	document.write('<a href="' + core + '/ORRedirector&lang=fr&target=/onlinereservations/or/' + target + '" alt=""');
	document.write('onClick="setStatus(\' \');"');
	document.write('onmouseover="return setStatus(\'En Francais\');"');
	document.write('onmouseout="setStatus(\' \');">');
	document.write('<IMG class="langButImg" src="http://www.chambresdhotes.org/frenchflag.gif" name="freBut" alt="En Francas">');
	document.write('</a>');
	document.write('</p>');
  }
  
  function writeArrow(direction, active, messages) {
	  setTest(test);  
	  if (direction == 'up') {
		  if (active == 'true') {
			  document.write('<a href="http://' + domain + core + '/ORRentalUnitController&actionFlag=up" alt="">');
			  document.write('<img class="arrowImg" src="images/actarrowup.gif" name="uparrow" alt="' + messages[0]  + '"></img>');
			  document.write('</a>');
		  } else {
			  document.write('<img class="arrowImg" src="images/restarrowup.gif" name="uparrow"></img>');
		  }
	  } else {
		  if (active == 'true') {
			  document.write('<a href="http://' + domain + core + '/ORRentalUnitController&actionFlag=down" alt="">');
			  document.write('<img class="arrowImg" src="images/actarrowdown.gif" name="downarrow" alt="' + messages[1]  + '"></img>');
			  document.write('</a>');
		  } else {
			  document.write('<img class="arrowImg" src="images/restarrowdown.gif" name="downarrow"></img>');
		  }
	  }
  }
  
  function writeRUTabs(arrTabs, current) 
  	{
	var x;
	var tabWidth = arrTabs.length*120;
	document.write('<table id="ruTabs" name="ruTabs" width="' + tabWidth + '">');
	document.write('<tr>');
	for (x in arrTabs) {
		var arrDets = arrTabs[x];
		if (arrDets[1] == current) {
			document.write('<td class="tabCurrent">');
			// Special case for wizard
			//if (arrDets[1] == 0) {
			//	document.write('<a href="javascript:toggleRUWizardDisplay(0);" onClick="javascript:tabMouseCtrl(0, ' + x + ', ' + current + ',\'ruTabs\', ' + arrTabs.length + ');" onmouseover="javascript:tabMouseCtrl(1, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')" onmouseout="javascript:tabMouseCtrl(2, ' + x + ', 0,\'ruTabs\',' + arrTabs.length + ')">' + arrDets[0] + '</a>');	
			//} else {
				document.write('<a href="/onlinereservations/Dispatcher?controller=/ORRentalUnitController&actionFlag=multiQry&renIdNav=' + arrDets[1] + '&currentMainTab='+ x + '" onClick="javascript:tabMouseCtrl(0, ' + x + ', ' + current + ',\'ruTabs\', ' + arrTabs.length + ');" onmouseover="javascript:tabMouseCtrl(1, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')" onmouseout="javascript:tabMouseCtrl(2, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')">' + arrDets[0] + '</a>');	
			//}
		} else {
			document.write('<td class="tabRest">');
			//if  (arrDets[1] == 0) {
			//	document.write('<a href="javascript:toggleRUWizardDisplay(0);" onClick="javascript:tabMouseCtrl(0, ' + x + ', ' + current + ',\'ruTabs\', ' + arrTabs.length + ');" onmouseover="javascript:tabMouseCtrl(1, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')" onmouseout="javascript:tabMouseCtrl(2, ' + x + ', 0,\'ruTabs\',' + arrTabs.length + ')">' + arrDets[0] + '</a>');					
			//} else {
				document.write('<a href="/onlinereservations/Dispatcher?controller=/ORRentalUnitController&actionFlag=multiQry&renIdNav=' + arrDets[1] + '&currentMainTab='+ x + '" onClick="javascript:tabMouseCtrl(0, ' + x + ', ' + current + ',\'ruTabs\', ' + arrTabs.length + ');" onmouseover="javascript:tabMouseCtrl(1, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')" onmouseout="javascript:tabMouseCtrl(2, ' + x + ', ' + current + ',\'ruTabs\',' + arrTabs.length + ')">' + arrDets[0] + '</a>');	
			//}
		}
		document.write('</td>');
	}
	document.write('</tr>');
	document.write('</table>');
	tabMouseCtrl(0, current, current, "ruTabs");
	
 	}
  
  function writeTabs(tab1, tab2, tab3, tab4, current, currentMainTab) {
	document.write('<table class="tabs" name="tabs" id="tabs">');
	document.write('<tr>');
	if (current == 1) {
		document.write('<td class="tabCurrent">');
	} else {
		document.write('<td class="tabRest">');
	}
	document.write('<a href="javascript:changeContentsCurrentTab(\'prices\', 0, ' + currentMainTab + ')" name="tab1" onClick="javascript:tabMouseCtrl(0, 0, ' + current + ',\'tabs\', 4);" onmouseover="javascript:tabMouseCtrl(1, 0, ' + current + ',\'tabs\', 4)" onmouseout="javascript:tabMouseCtrl(2, 0, ' + current + ',\'tabs\', 4)">' + tab1 + '</a>');	
	document.write('</td>');
	if (current == 2) {
		document.write('<td class="tabCurrent">');
	} else {
		document.write('<td class="tabRest">');
	}	
	document.write('<a href="javascript:changeContentsCurrentTab(\'bookings\', 1, ' + currentMainTab + ')" name="tab2" onClick="javascript:tabMouseCtrl(0, 1, ' + current + ',\'tabs\', 4);" onmouseover="javascript:tabMouseCtrl(1, 1, ' + current + ',\'tabs\', 4)" onmouseout="javascript:tabMouseCtrl(2, 1, ' + current + ',\'tabs\', 4)">' + tab2 + '</a>');	
	document.write('</td>');
	if (current == 3) {
		document.write('<td class="tabCurrent">');
	} else {
		document.write('<td class="tabRest">');
	}	
	document.write('<a href="javascript:changeContentsCurrentTab(\'unavail\', 2, ' + currentMainTab + ')" name="tab3" onClick="javascript:tabMouseCtrl(0, 2, ' + current + ',\'tabs\', 4);" onmouseover="javascript:tabMouseCtrl(1, 2, ' + current + ',\'tabs\', 4)" onmouseout="javascript:tabMouseCtrl(2, 2, ' + current + ',\'tabs\', 4)">' + tab3 + '</a>');	
	document.write('</td>');
	if (current == 4) {
		document.write('<td class="tabCurrent">');
	} else {
		document.write('<td class="tabRest">');
	}	
	document.write('<a href="javascript:changeContentsCurrentTab(\'descs\', 3, ' + currentMainTab + ')" name="tab4" onClick="javascript:tabMouseCtrl(0, 3, ' + current + ',\'tabs\', 4);" onmouseover="javascript:tabMouseCtrl(1, 3, ' + current + ',\'tabs\', 4)" onmouseout="javascript:tabMouseCtrl(2, 3, ' + current + ',\'tabs\', 4)">' + tab4 + '</a>');	
	document.write('</td>');
	document.write('</tr>');
	document.write('</table>');
	tabMouseCtrl(0, current, current, "tabs", 4);
  }
    
  function changeContents(subject) {
	 document.location.href = 'http://' + domain + '/onlinereservations/or/orRenUnitMaintenance.jsp?subject=' + subject; 
	 //document.location.href = core + '/ORRentalUnitController&actionFlag=multiQry&subject=' + subject;
	 
  }

function changeRenUnit(subject, renId) {
	 document.location.href = 'http://' + domain + '/onlinereservations/or/orRenUnitMaintenance.jsp?subject=' + subject + '&renIdNav=' + renId; 
	 //document.location.href = core + '/ORRentalUnitController&actionFlag=multiQry&subject=' + subject;
	 
  }
  
  function changeContentsCurrentTab(subject, current, currentMainTab) {
	 //document.location.href = 'http://' + domain + '/onlinereservations/or/orRenUnitMaintenance.jsp?subject=' + subject + '&currentTab=' + current; 
	 document.location.href = core + '/ORRentalUnitController&actionFlag=multiQry&subject=' + subject + '&currentTab=' + current + '&currentMainTab=' + currentMainTab; 
  }
  
  function displayWorking(button, wrkMsg) {
	  alert(wrkMsg);
  }
  
  function tabMouseCtrl(action, cell, selected, tableName, cellCount) {
	  // 0 is click, 1 is hover, 2, is out
	  var x = document.getElementById(tableName).rows[0].cells[cell];
	  if (action == 0) {
		  // cell selected
		  x.style.background = 'url(images/tabover.gif)'; 
		  x.style.backgroundRepeat = 'no-repeat';
		  for (counter=0; counter < cellCount; counter++) {
			var y = document.getElementById(tableName).rows[0].cells[counter];
			if (counter != cell) {
				y.style.background = 'url(images/tabrest.gif)'; 
				y.style.backgroundRepeat = 'no-repeat';
			}
		  }
	  }
	  else if (action == 1) {
		  // Hovering  
		  if (cell != selected) {
			  x.style.background = 'url(images/tabhover.gif)'; 
			  x.style.backgroundRepeat = 'no-repeat';
			  for (counter=0; counter < cellCount; counter++) {
				var y = document.getElementById(tableName).rows[0].cells[counter];
				if ((counter != cell)&&(counter != selected)) {
					y.style.background = 'url(images/tabrest.gif)'; 
					y.style.backgroundRepeat = 'no-repeat';
				}
			  }
		  }
	  }
	  else {
		  // leaving cell
		  if (cell != selected) {
			  x.style.background = 'url(images/tabrest.gif)'; 
			  x.style.backgroundRepeat = 'no-repeat';
		  }
	  }
	  // Stuff specific for ruTabs control dispaly of div ruWIZ
	  if ((tableName == 'ruTabs')&&(action == 0)) {
		toggleRUWizardDisplay(cell); 
	  }
  }
  
  function toggleRUWizardDisplay(currentMainTab) {
	if (currentMainTab==0) {
		document.getElementById("ruWiz").style.display = "block";
		document.getElementById("ruDetails").style.display = "none";
	} else {
		document.getElementById("ruWiz").style.display = "none";
		document.getElementById("ruDetails").style.display = "block";
	}	  
  }
  
  function writeMinMaxScroller(start, end, initVal, fieldName, cfld, minFieldName, maxFieldName, errMsg) { 
  	document.write('<SELECT name="' + fieldName + '" onChange="javascript:validateMinMax(this.form.' + cfld + ', this.form.' + minFieldName + ', this.form.' + maxFieldName + ', \'' + errMsg +'\')">');
	for(x=start;x<(end+1);x++) {
        	if (x==initVal) {
  			document.write('<OPTION value="' + x + '" SELECTED>' + x);
  		}
  		else {
  			document.write('<OPTION value="' + x + '">' + x);
  		}
        }
  	document.write('</SELECT>');
  }

  function writeWeekdayPicker(initVal, fieldName, cfld, dayNames) { 
  	document.write('<SELECT name="' + fieldName + '" onChange="javascript:markChange(this.form.' + cfld + ')">');
        for(x=0;x<8;x++) {
        	if (x==initVal) {
  			document.write('<OPTION value="' + x + '" SELECTED>' + dayNames[x]);
  		}
  		else {
  			document.write('<OPTION value="' + x + '">' + dayNames[x]);
  		}
        }
  	document.write('</SELECT>');
  }
  
  function writeNumberScroller(start, end, initVal, fieldName, cfld) { 
  	writeNumberScrollerWithStep(start, end, 1, initVal, fieldName, cfld);
  }
  
  function writeNumberScrollerWithStep(start, end, step, initVal, fieldName, cfld) { 
  	document.write('<SELECT name="' + fieldName + '" id="' + fieldName + '" onChange="javascript:markChange(this.form.' + cfld + ')">');
        for(x=start;x<(end+1);x=x+step) {
        	if (x==initVal) {
  			document.write('<OPTION value="' + x + '" SELECTED>' + x);
  		}
  		else {
  			document.write('<OPTION value="' + x + '">' + x);
  		}
        }
  	document.write('</SELECT>');
  }
    
  function writeNumberScrollerWithoutFlag(start, end, initVal, fieldName, step, onChangeTrigger) { 
  	document.write('<SELECT name="' + fieldName + '" id= "' + fieldName + '" onChange="javascript:' + onChangeTrigger +'">');
        for(x=start;x<(end+1);x+=step) {
        	if (x==initVal) {
  			document.write('<OPTION value="' + x + '" SELECTED>' + x);
  		}
  		else {
  			document.write('<OPTION value="' + x + '">' + x);
  		}
        }
  	document.write('</SELECT>');
  }
  
  function getFrameSize(ruCount, calType) {
	  var singleSize = 100;
	  // month view
	  if (calType == 1) {
		  singleSize = 100;
	  // 2 month view
	  } else if (calType == 2) {
		  singleSize = 200;
	  // Month view but with OK buttons
	  } else if (calType == 3) {
		  singleSize = 135;
	  }
	  var iFrameSize = singleSize;
	  if (ruCount > 0) {
		  iFrameSize = singleSize * ruCount;
	  }
	  return iFrameSize;
  }
  
  function getAvailabilityLink(cliId, lang, viewType, dateFrom, dateTo) {
	  
	  var link = "http://" + domain + core + "/ORAvailabilityDisplayer" + "&cliId=" + cliId + "&viewType=" + viewType + "&ling=" + lang;
	  if ((typeof(dateFrom) != "undefined")&&(dateFrom.length > 2)) {
		  link = link + "&dateFrom=" + dateFrom + "&dateTo=" + dateTo;
	  }
	  return link;
  }
  
  function getAvailabilityLinkWithFrame(link, id, ruCount, viewType) {
	  var iFrameSize = getFrameSize(ruCount, viewType);
	  return "<iframe src='" + link + "' id='" + id + "' width='650' height='" + iFrameSize + "' scrolling='auto' frameborder='0'>Frames not supported <a href='" + link + "'>go to booking form here</a></iframe><br><font face='Trebuchet MS' size='0.7'>Powered by|Fourni par <a href='http://www.chambresdhotes.org'>Chambres D&acute;Hotes.org</a></font>";
  }

 function getCalIFrameCode(cliId, calType, lang, width, ruCount, dateFrom, dateTo) {
	  var iFrameSize = getFrameSize(ruCount, calType);
	  var link = getAvailabilityLink(cliId, lang, calType, dateFrom, dateTo);
	  var frameLinkText = getAvailabilityLinkWithFrame(link, 'calFrame', ruCount, calType);
	  //return '<iframe src="/onlinereservations/Dispatcher?controller=/ORAvailabilityDisplayer&cliId=' + cliId + '&viewType=' + calType + '&ling=' + lang + '" id="calFrame" width="' + width + '" height="' + iFrameSize + '", "' + calType + '" scrolling="auto" frameborder="0"></iframe>';
	  return frameLinkText;
 }
  
  function writeCalIFrame(cliId, calType, lang, width, ruCount, dateFrom, dateTo) {
	  document.write(getCalIFrameCode(cliId, calType, lang, width, ruCount, dateFrom, dateTo));
  }
  
  function redoButtons(cfld, cliId, altText, ruCount) {
	  setTest(test);
	  document.images['conBut'].src = 'images/contactBut' + cfld.value.substring(0, 2) + '.gif';
	  document.images['bookBut'].src = 'images/bookBut' + cfld.value.substring(0, 2) + '.gif';
	  document.images['bookBut'].onmouseover = new Function('bookBut.src="images/bookBut' + cfld.value.substring(0, 2) + 'Over.gif;"');
	  document.images['bookBut'].onmouseout = new Function('bookBut.src="images/bookBut' + cfld.value.substring(0, 2) + '.gif;"');
	  document.images['bookBut'].onclick = new Function('bookBut.src="images/bookBut' + cfld.value.substring(0, 2) + '.gif;"');
	  document.images['datePickerImg'].src = 'images/datePickerExample' + cfld.value.substring(0, 2) + '.jpg';
	  //document.images['datePickerImg'].onmouseover = new Function('datePickerImg.src="images/datePickerExample' + cfld.value.substring(0, 2) + 'Over.jpg;"');
	  //document.images['datePickerImg'].onmouseout = new Function('datePickerImg.src="images/datePickerExample' + cfld.value.substring(0, 2) + '.jpg;"');
	  //document.images['datePickerImg'].onclick = new Function('datePickerImg.src="images/datePickerExample' + cfld.value.substring(0, 2) + '.jpg;"');

	  document.images['conBut'].onmouseover = new Function('conBut.src="images/contactBut' + cfld.value.substring(0, 2) + 'Over.gif;"');
	  document.images['conBut'].onmouseout = new Function('conBut.src="images/contactBut' + cfld.value.substring(0, 2) + '.gif;"');
	  document.images['conBut'].onclick = new Function('conBut.src="images/contactBut' + cfld.value.substring(0, 2) + '.gif;"');

	  var link = "http://" + domain + core + "/ORDatePickController" + "&cliId=" + cliId + "&ling=" + cfld.value+"&new_window=false";
	  var conLink = "http://" + domain + core + "/ORContactController" + "&cliId=" + cliId + "&ling=" + cfld.value;
	  var linkText = "<a id='clientAnchor' href='"+ link + "'>" + 
				"<img src='http://" + domain + "/onlinereservations/or/images/bookBut" + cfld.value.substring(0, 2) + ".gif' id='bookBut' " +  
				"border=\"0\" " +
				"onMouseOver=\"bookBut.src='http://" + domain + "/onlinereservations/or/images/bookBut" + cfld.value.substring(0, 2) + "Over.gif';\" " +
				"onMouseOut=\"bookBut.src='http://" + domain + "/onlinereservations/or/images/bookBut" + cfld.value.substring(0, 2) + ".gif';\" " +
				"onClick=\"bookBut.src='http://" + domain + "/onlinereservations/or/images/bookBut" + cfld.value.substring(0, 2) + ".gif';\"" +
				" alt='" + altText + "' /></a>";
	  var conLinkText = "<a id='clientContactAnchor' href='"+ conLink + "'>" + 
				"<img src='http://" + domain + "/onlinereservations/or/images/contactBut" + cfld.value.substring(0, 2) + ".gif' id='conBut' " +  
				"border=\"0\" " +
				"onMouseOver=\"conBut.src='http://" + domain + "/onlinereservations/or/images/contactBut" + cfld.value.substring(0, 2) + "Over.gif';\" " +
				"onMouseOut=\"conBut.src='http://" + domain + "/onlinereservations/or/images/contactBut" + cfld.value.substring(0, 2) + ".gif';\" " +
				"onClick=\"conBut.src='http://" + domain + "/onlinereservations/or/images/contactBut" + cfld.value.substring(0, 2) + ".gif';\"" +
				" alt='" + altText + "' /></a>";
	  var frameLinkText = "<iframe src='" + link + "' id='bookFrame' width='900' height='270' scrolling='auto' frameborder='0'>Frames not supported <a href='" + link + "'>go to booking form here</a></iframe><br><font face='Trebuchet MS' size='0.7'>Powered by|Fourni par <a href='http://www.chambresdhotes.org'>Chambres D&acute;Hotes.org</a></font>";
	  document.getElementById('clientButtonLink').value = linkText;
	  document.getElementById('clientAnchor').href = link;
	  document.getElementById('datePickerLink').href = "javascript:openResizableWin('" + link + "', 'datePicker')";
	  document.getElementById('clientContactButtonLink').value = conLinkText;
	  document.getElementById('clientContactAnchor').href = conLink;
	  document.getElementById('clientFrameLink').value = frameLinkText;
	  //bookFrame.location.href = link;
	  //redoRUButtons(document.getElementById('butRU').value, cliId, altText);
	  redoPriButtons(cfld, cliId);
	  redoCalButtons(cfld, cliId, ruCount);
  }
  
  function redoRUButtons(cfld, cliId, altText) {
	  setTest(test);
	  var lang = document.getElementById('butLang').value;
	  document.images['ruBookBut'].src = 'images/bookBut' + lang.substring(0, 2) + '.gif';
	  document.images['ruBookBut'].onmouseover = new Function('ruBookBut.src="images/bookBut' + lang.substring(0, 2) + 'Over.gif;"');
	  document.images['ruBookBut'].onmouseout = new Function('ruBookBut.src="images/bookBut' + lang.substring(0, 2) + '.gif;"');
	  document.images['ruBookBut'].onclick = new Function('ruBookBut.src="images/bookBut' + lang.substring(0, 2) + '.gif;"');
	  var link = "http://" + domain + core + "/ORDatePickController" + "&renId=" + document.getElementById('butRU').value + "&ling=" + lang+"&new_window=false";
	  var linkText = "<a id='ruAnchor' href='"+ link + "'>" + 
				"<img src='http://" + domain + "/onlinereservations/or/images/ruBookBut" + lang.substring(0, 2) + ".gif' id='ruBookBut' " + 
				"border=\"0\" " +
				"onMouseOver=\"ruBookBut.src='http://" + domain + "/onlinereservations/or/images/ruBookBut" + lang.substring(0, 2) + "Over.gif';\" " +
				"onMouseOut=\"ruBookBut.src='http://" + domain + "/onlinereservations/or/images/ruBookBut" + lang.substring(0, 2) + ".gif';\" " +
				"onClick=\"ruBookBut.src='http://" + domain + "/onlinereservations/or/images/ruBookBut" + lang.substring(0, 2) + ".gif';\"" +
				" alt='" + altText + "' /></a>";
	  var frameLinkText = "<iframe src='" + link + "' id='bookFrame' width='400' height='200' scrolling='auto' frameborder='0'>Frames not supported <a href='" + link + "'>go to booking form here</a></iframe><br><font face='Trebuchet MS' size='0.7'>Powered by|Fourni par <a href='http://www.chambresdhotes.org'>Chambres D&acute;Hotes.org</a></font>";
	  document.getElementById('ruButtonLink').value = linkText;
	  document.getElementById('ruAnchor').href = link;
	  document.getElementById('ruFrameLink').value = frameLinkText;
	  bookRUFrame.location.href = link;
	  redoCalButtons(cfld, cliId, 1);
	  redoPriButtons(cfld, cliId);
	  
  }
    
  function redoCalButtons(cfld, cliId, ruCount) {
	  setTest(test);
	  var now = todayVar;
	  var lang = document.getElementById('butLang').value;
	  var viewType = document.getElementById('butCalType').value;
	  //var ru = document.getElementById('butRU').value;
	  var link = getAvailabilityLink(cliId, lang, viewType, now, now);
	  var frameLinkText = getAvailabilityLinkWithFrame(link, 'calFrame', ruCount, viewType);
	  document.getElementById('clientCalendarLink').value = frameLinkText;
	  //calFrame.location.href = link;

	  //var ruLink = getAvailabilityLink(cliId, lang) + "&renId=" + ru;
	  var ruLink = getAvailabilityLink(cliId, lang, viewType, now, now);
	  var ruLinkText = getAvailabilityLinkWithFrame(ruLink, 'calFrame', ruCount, viewType);
	  //document.getElementById('ruCalendarLink').value = ruLinkText;
	  //calRUFrame.location.href = ruLink;
	  document.images['calendarImg'].src = 'images/calendarExample' + viewType + document.getElementById('butLang').value.substring(0, 2) + '.jpg';
	  document.getElementById('calendarLink').href = "javascript:openResizableWin('" + ruLink + "', 'availabilityDisplayer')";
	  
  }
  
  function redoPriButtons(cfld, cliId) {
	  setTest(test);
	  var now = todayVar;
	  var lang = document.getElementById('butLang').value;
	  //var ru = document.getElementById('butRU').value;

	  //var rulink = "http://" + domain + core + "/ORPriceDisplayer" + "&cliId=" + cliId + "&renId=" + ru + "&dateFrom=" + convertDateToString(now) + "&dateTo=" + convertDateToString(addDays(now, 365)) + "&viewType=0&ling=" + lang;
	  var ruLink = "http://" + domain + core + "/ORPriceDisplayer" + "&cliId=" + cliId + "&dateFrom=" + convertDateToString(now) + "&dateTo=" + convertDateToString(addDays(now, 365)) + "&viewType=0&ling=" + lang;
	  var ruLinkText = "<iframe src='" + ruLink + "' id='priRUFrame' width='600' height='200' scrolling='auto' frameborder='0'>Frames not supported <a href='" + ruLink + "'>go to prices here</a></iframe><br><font face='Trebuchet MS' size='0.7'>Powered by|Fourni par <a href='http://www.chambresdhotes.org'>Chambres D&acute;Hotes.org</a></font>";
	  document.getElementById('ruPricesLink').value = ruLinkText;
	  document.images['priceDisplayImg'].src = 'images/priceDisplayExample' + cfld.value.substring(0, 2) + '.jpg';
	  document.getElementById('priceDisplayLink').href = "javascript:openResizableWin('" + ruLink + "', 'priceDisplayer')";

	  //priRUFrame.location.href = rulink;
	  
  }
  
  // Functions to display the calendar
  function displayAvailabilityCalendar(renId, viewType, cliId, lang) {
	  dateFromStr = document.getElementById('dateFrom').value;
	  dateToStr = document.getElementById('dateTo').value;
	  startDate = createDateObject(dateFromStr);
	  endDate = createDateObject(dateToStr);
	  // Reset the start date to go from the start of the month
	  startDate.setDate(1);
	  
	  var julianStart = getRoundedJulian(startDate);
	  var julianEnd = getRoundedJulian(endDate);
	  var cells = julianEnd - julianStart;
	  // Have a minimum period to look at (around 1 month)
	  if (cells < 31) {
		  endDate =  addDays(startDate, 31);

		  julianEnd = getRoundedJulian(endDate);
		  cells = julianEnd - julianStart;
	  }
	  // Have a max period to look at (2 month)
	  if (cells > 62) {
		  endDate =  addDays(startDate, 62);
		  julianEnd = getRoundedJulian(endDate);
		  cells = julianEnd - julianStart;
	  }
	  dateFromStr = convertDateToString(startDate);
	  dateToStr = convertDateToString(endDate);
	  redoCalendarLink(renId, cliId, dateFromStr, dateToStr, viewType, lang);
  }
  
  function moveCalendar(renId, cliId, movementFactor, viewType, lang) {
	  dateStartStr = document.getElementById('dateFrom').value;
	  dateEndStr = document.getElementById('dateTo').value;
	  startDate = createDateObject(dateStartStr);
	  endDate = createDateObject(dateEndStr);
	  // Move in units of one week for viewType 0, one month for viewTypes 1 and 2
	  if (viewType == 0) {
		  movementMultiple = 7;
	  } else {
		  movementMultiple = 31;
	  }
	  movementPeriod = movementMultiple * movementFactor;
	  //newStartDate = addDays(startDate, movementPeriod);
	  if (movementFactor < 1) {
		  newStartDate = addDays(startDate, movementPeriod);
	  } else {
		  newStartDate = addDays(endDate, 1);
	  }
	  // Adjust end date viewType 2 as 2 months displayed at same time
	  if (viewType == 2) {
		  newEndDate = addDays(newStartDate, 62);
	  } else {
		  newEndDate = addDays(endDate, movementPeriod);
	  }
	  newStartDateStr = convertDateToString(newStartDate);
	  newEndDateStr = convertDateToString(newEndDate);
	  // Write back into document
	  resetStartAndEndDates(newStartDateStr, newEndDateStr);
	  displayAvailabilityCalendar(renId, viewType, cliId, lang);
  }
  
  function redoCalendarLink(renId, cliId, dateFrom, dateTo, viewType, lang) {
	  setTest(test);
	  var link = "http://" + domain + core + "/ORAvailabilityDisplayer" + "&renId=" + renId + "&cliId=" + cliId + "&dateFrom=" + dateFrom + "&dateTo=" + dateTo + "&viewType=" + viewType+ "&ling=" + lang;
	  document.location = link;
}
  
  
  function removeEscapes(cfld, nFld, charIn, charOut) {
	  var temp = "" + cfld.value;
	  while (temp.indexOf(charIn) > -1) {
		  pos = temp.indexOf(charIn);
		  temp = "" + (temp.substring(0, pos) + charOut + temp.substring((pos + out.length), temp.length));
	  }
	  nFld.value = temp;
  }
  
  function validateMinMax(cfld, minField, maxField, errMsg) {
	  markChange(cfld);
	  if (maxField.value < minField.value) {
		  msg(errMsg);
		  maxField.value = minField.value;
	  }
  }
  
  function defaultFXPrice(form, source, rate, target, cfld) {
	  if (validateNumber(source, cfld)) {
		  var sourceVal = source.value;
		  if ((sourceVal != 0)&&(rate != 0)) {
			  target.value = sourceVal * rate;
		  }
	  }
  }
  
  function submitInnerForms(renId) {
	  if (renId > 0) {
		  for (var i=0; i<iframe.document.forms.length; i++) {
			  iframe.document.forms[i].submit();
		  }
	  }
  }
  
  function addLangElement(lang) {
	//return "http://" + domain + core + "/ORLoginController&ling="+lang
	splitParameters(window.location);
	return window.location + "&ling="+lang
  }
    
  // ****************************
  // Form Utilities 
  // ****************************  
  
  function validateRUForm(errMsg) {
    var errs=0;
    if ((document.forms.frmRUWiz.name.value != null)&&(document.forms.frmRUWiz.name.value.length > 0)) {
	    errs=0;
    } else {
	    msg(errMsg);
	    errs += 1; 
    }
    return (errs==0);	  
  }
  
  function validateForm(emailErrMsg, tAndCErrMsg) {
    var errs=0;
    if (document.forms.frmReg.email != null) {
	    if (!validateEmail(document.forms.frmReg.email, emailErrMsg)) errs += 1; 
    }
    if (document.forms.frmReg.tc != null) {
	    if (!validateTandC(document.forms.frmReg.tc, tAndCErrMsg)) errs += 1; 
    }
    return (errs==0);
  };
  
  function validateSecurityForm(emailErrMsg, passMsg) {
    var errs=0;
    if (document.forms.frmReg.email != null) {
	    if (!validateEmail(document.forms.frmReg.email, emailErrMsg)) errs += 1; 
    }
    if (!validatePass(document.forms.frmReg.password, document.forms.frmReg.repeatPassword, passMsg)) errs += 1; 

    return (errs==0);
  };
 
  function validateCustomerForm(tAndCErrMsg, emailErrMsg, repeatEmailErrMsg, custId) {
    var errs=0;
    if (!(custId > 0)) {
	    if (!validateTandC(document.forms.frmReg.tc, tAndCErrMsg)) errs += 1; 
    }
    if (!validatePass(document.forms.frmReg.email, document.forms.frmReg.repeatEmail, repeatEmailErrMsg)) errs += 1; 
    if (!validateEmail(document.forms.frmReg.email, emailErrMsg)) errs += 1; 
    return (errs==0);
  };

  function validateWithdrawForm(errMsg) {
    var errs=0;
     if (!validateCheckBox(document.forms.withdrawForm.confirm, errMsg)) errs += 1; 
    return (errs==0);
  };
  
  function validateReinstateForm(errMsg) {
    var errs=0;
     if (!validateCheckBox(document.forms.reinstateForm.enableAccount, errMsg)) errs += 1; 

    return (errs==0);
  };
  
  function splitParameters(url) {
	  urlquery=location.href.split("?");
	  if (urlquery[1]) {
		  urlterms=urlquery[1].split("&");
		  for (i = 0; i < urlterms.length; i++) {
			  //alert('param ' + i + ': ' + urlterms[i]);
		  }
	  }
   }
   
 function splitStringDelim(strIn, delim) {
	  return strIn.split(delim);
   }
   
function qs() {
	var query = window.location.search.substring(1);
	var parms = query.split('&');
	for (var i=0; i<parms.length; i++) {
		var pos = parms[i].indexOf('=');
		if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			qsParm[key] = val;
		}
	}
}

function getParameter(paramName) {
	// Replace every occurrence of %2F for /
	if (qsParm[paramName] != undefined)
	{
		return qsParm[paramName].replace(/%2F/gi,'/'); 
	} else {
		return ''; 
	}
}
  
  // ****************************
  // Other Field Utilities 
  // ****************************

  function trim(str)
	{
	  return str.replace(/^\s+|\s+$/g, '')
  };
	
  function msg(message)
	{
		alert(message);
  };
 
  function validateWizardNumbers(vfld, errMsg) {
	   vfld = document.forms.frmRUWiz2.normalCapacity;
	   tfld = trim(vfld.value);
	   var success = true;
	   if (tfld < 1) {
		   msg(errMsg);
		   success = false;
	   }
	   vfld = document.forms.frmRUWiz2.defaultPrice;
	   tfld = trim(vfld.value);
	   if (tfld < 1) {
		   msg(errMsg);
		   success = false;
	   }
	   return success;
  }
   function validateNumberNotZero(vfld, cfld, errMsg, errMsg2) {
	 var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	 if (!(validateNumber(vfld, cfld, errMsg))) {
		 return false;
	 }
	 if (!(validateWholeNumber(vfld, cfld, errMsg2))) {
		 return false;
	 }
	 if (tfld == 0) {
		 msg(errMsg);
		 return false;
	 }
	 return true;
  }
  function validateNumber(vfld, cfld, errMsg) {
	 var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	 if (((tfld/tfld) != 1) && (tfld != 0)) {
		 msg(errMsg);
		 return false;
	 }
	 markChange(cfld);
	 return true;
  }
 
  function validateWholeNumber(vfld, cfld, errMsg) {
	 var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	 if ((tfld%1) != 0) {
		 msg(errMsg);
		 return false;
	 }
	 markChange(cfld);
	 return true;
  }

  function validateNote(vfld, cfld, lfld, errMsg) {
	 // Check the language has been set
	 var tfld = lfld.value;
	 if (tfld == 0) {
		 msg(errMsg);
		 return false;
	 }
	 markChange(cfld);
	 return true;
  }
	
  function validateEmail(vfld, errMsg)
	{
	
	  var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
	  if (!email.test(tfld)) {
	    msg (errMsg);
	    return false;
	  }
	  return true;
  };
	
  function validateCheckBox(vfld, errMsg)
	{
	  var tfld = vfld.checked;
	  if (!tfld) {
		msg(errMsg);
	  }
	  return tfld;
  };

  function validateTandC(vfld, errMsg)
  {
	  var tfld = vfld.checked;
	  if (!tfld) {
		msg(errMsg);
	  }
	  return tfld;
  };
  
  function validateRadio(errMsg) {
	  vfld = document.forms.accomSelectForm.accomSelect;
	  chosen = "";
	  len = vfld.length;
	  if (vfld.checked) {
		  chosen = "done";
	  } else {
		  for (i = 0; i <len; i++) {
			  if (vfld[i].checked) {
				  chosen = vfld[i].value;
			  }
		  }
	  }
	  if (chosen == "") {
		  msg(errMsg);
		  return false;
	  } else {
		  return true;
	  }
	  
  }
  
  function validatePass(vfld, rfld, errMsg)
  {
	  var success = true;
	  if (vfld.value != rfld.value) {
		msg(errMsg);
		success = false;
	  }
	  return success;
  };
  
  function markChange(cfld) {
	  //msg("Changed marked for " + cfld.name);
	  cfld.value = "changed";
  }
  
  function validateDate(dfld, minDfld, maxDfld, cfld,  errMsg1, errMsg2, errMsg3, errMsg4, errMsg5, errMsg6, errMsg7) {
	  var success = isDate(dfld, errMsg1, errMsg2, errMsg3, errMsg4, errMsg5, errMsg7);
	  if (success) {
		  if ((minDfld != null)&&(!("undefined" == typeof(minDfld)))) { 
			startDate = createDateObject(minDfld.value);
			endDate = createDateObject(maxDfld.value);
			today =todayVar;
			//today.setHours(0);
			//today.setMinutes(0);
			if (endDate - startDate < 0) {
				success = false;
				msg(errMsg6);
			} else {
				markChange(cfld);  
			}
		  } else {
			markChange(cfld);  
		  }
	  }
	  return success;
  }
  
  function validateRentalDate(dfld, minDfld, errMsg1, errMsg2, errMsg3, errMsg4, errMsg5, errMsg6, errMsg7, dateMsg) {
	  var success = isDate(dfld, errMsg1, errMsg2, errMsg3, errMsg4, errMsg5, errMsg7);
	  //Update dateTo if appropriate fields found found
	  if (success) {
		   updateDateTo(dateMsg);
	  }
	  
	  return success;
  }
  
  function updateDateTo(dateMsg) {
	  dateStartStr = document.getElementById('dateFrom').value;
	  dateEndStr = document.getElementById('dateTo').value;
	  nights = document.getElementById('nights').value;
	  startDate = createDateObject(dateStartStr);
	  endDate = createDateObject(dateEndStr);
	  endDate = addDays(startDate, nights);
	  dateEndStr = convertDateToString(endDate);
	  document.getElementById('dateTo').value = dateEndStr;
	  var dateToMessage = document.getElementById('dateToMessage');
	  dateToMessage.firstChild.nodeValue=dateMsg + " " +dateEndStr;
  }

  // ***************
  // Pswd utilites
  // ***************
  function generatePswd(minLen, maxLen, fld1, fld2) {
	 var lowerLetters = 'abcdefghijkmnopqrstuvwxyz';
	 var upperLetters = 'ABCDEFGHIJKLMNPQRSTUVWXYZ';
	 var numbers = '23456789';
	 var pswd = '';
	 var continueFlag = true;
	 var pswdLength = 0;
	 var characterType = 1;
	 var character = '';
	 var randomPosition = 0;
	 while (continueFlag) {
		 pswdLength = getRandom(maxLen);
		 if (pswdLength >= minLen) {
			 continueFlag = false;
		 }
	 }
	 for (i = 0; i < pswdLength; i++){ 
		 //decide the type of character to use
		 characterType = getRandom(3);
		 character = '';
		 if (characterType == 1) {
			 randomPosition = getRandom(lowerLetters.length-1);
			 character = lowerLetters.substring(randomPosition, randomPosition+1);
		 }
		 else if (characterType == 2) {
			 randomPosition = getRandom(upperLetters.length-1);
			 character = upperLetters.substring(randomPosition, randomPosition+1);
		 } 
		 else {
			 randomPosition = getRandom(numbers.length-1);
			 character = numbers.substring(randomPosition, randomPosition+1);
		 }
		 // Be careful not to add numbers together
		 pswd = pswd + '' + character;
		 
	 }
	 fld1.value = pswd;
	 fld2.value = pswd;
	 
  }
  
  // ***************
  // Number utilites
  // ***************
  function checkFormat(input) {
    output = parseInt(input);
    if (output == "NaN") {
      output = 1;
    }
    return output;
  }

  function getRandom(num) {
    return Math.floor(Math.random() * num) + 1;
  }
  
  // ***************
  // Date utilities
  // ***************
  
  function createDateObject(dateStrIn) {
	var strDay=dateStrIn.substring(0,2);
	var strMonth=dateStrIn.substring(3,5);
	var strYear=dateStrIn.substring(6);
	return new Date (strYear, (strMonth-1), strDay);
  }
  
  function getRoundedJulian(dateIn) {
	return Math.floor((dateIn.valueOf()/86400000) + 2440587); 
  }
  
  function convertDateToString(dateIn) {
	  var returnStr = addLeadingZeros(dateIn.getDate(), 2) + '/' + addLeadingZeros((dateIn.getMonth()+1), 2) + '/' + dateIn.getFullYear();
	  return returnStr;
  }
  
  function addLeadingZeros(inVar, places) {
	  var inStr = inVar.toString();
	  if (inStr.length == 1) {
		  inStr = '0' + inStr;
	  }
        return inStr;
  }
  
  // addDays function allowing for daylight saving
  // springtime (forward) seems not to be a problem
  function addDays(dateIn, days) {
	  var newDate = new Date(dateIn.getTime() + (days*24*60*60*1000));
	  if (newDate.getHours() == 23) {
		  newDate.setHours(newDate.getHours()+1);
	  }
	  return newDate;
  }
  
  function findPastDateForGivenDay(dateIn, day) {
	  var currDate = dateIn;
	  for (i = 0; i > -7; i--) {
		   var newCurrDate = addDays(currDate, i);
		  if (newCurrDate.getDay()== day) {
			  return newCurrDate;
		  }
	  }
	  // Shouldn't get here
	  return dateIn;
  }
  
  function writeCalendar(dateStartStr, dateEndStr, renId, cliId, resultType, keyPrompt, availablePrompt, seasonalPricePrompt, discountPricePrompt, unavailablePrompt, bookedPrompt, renScreenName, textArray, renPriceRatio, changeOverDay, viewType, lang, OKPrompt, resetPrompt, source) {
	  setTest(test);
	  var startDate = createDateObject(dateStartStr);
	  var endDate = createDateObject(dateEndStr);
	  // Javascript days 0 Sun - 6 Sat, we have 0 none, 1 Sun - 7 Sat
	  var day = changeOverDay - 1;
	  if (day == -1) {
		  // If none set set to Monday
		  day = 1;
	  }
	  //Check we have viewTye defined
	  //View type 0 week view starting on changeover day for customer (gite)
	  //View type 1 month view for customer
	  //View type 2 week view over 2 months for customer (gite)
	  //View type 3 month view for client (toggleable)
	  if ((viewType != 0)&& (viewType != 1)&& (viewType != 2)&& (viewType != 3)) {
		  viewType = 0;
	  }
	  // Reset the start date to go from the start of the month if viewType 1, 2 or 3
	  // or from given day if viewType 0
	  if ((viewType == 1)||(viewType == 2)||(viewType == 3)) {
		  startDate.setDate(1);
	  } else {
		  startDate = findPastDateForGivenDay(startDate, day);
	  }
	  
	  var julianStart = getRoundedJulian(startDate);
	  var julianEnd = getRoundedJulian(endDate);
	  var cells = julianEnd - julianStart;
	  // Have a minimum period to look at (1 month for viewTypes 1,2,3 and one week for viewType 0)
	  if ((viewType == 1)||(viewType == 2)||(viewType == 3)) {
		// Try setting to 2 months
		//endDate.setMonth(startDate.getMonth() + 2);
		//julianEnd = getRoundedJulian(endDate);
		//cells = julianEnd - julianStart;
	  	if ((cells < 31)&&(resultType=='A')) {
			  endDate.setMonth(endDate.getMonth() + 1);
			  julianEnd = getRoundedJulian(endDate);
			  cells = julianEnd - julianStart;
		  }
	  } else {
	  	if ((cells < 7)&&(resultType=='A')) {
			  endDate = addDays(startDate, 6);
			  julianEnd = getRoundedJulian(endDate);
			  cells = julianEnd - julianStart;
		  }		  
	  }
	  	  
	  var currentDate = todayVar;
	  var now = todayVar;
	  var link = "http://" + domain + core + "/ORDatePickController" + "&renId=" + renId + "&ling=" + lang + "&cliId=" + cliId + "&target=/or/orDatePicker.jsp&dateFrom=";

	  //Start of ren unit results
	  if (resultType=='A') {
		  document.write('<table class="calendarTable">');
		  document.write('<tr>');
		  if (viewType == 2) {
			  document.write('<td colspan="2" class="top">' + renScreenName + '<br />' + startDate.getFullYear() + '</td>');
		  } else {
			  document.write('<td colspan="2" class="top">' + renScreenName + '</td>');
		  }
		  // Month views
		  if ((viewType == 1)||(viewType == 3)) {
			  for (i = 0; i < 31; i++){
			//	  if (i <10) {
			//		  document.write('<td class="center">&nbsp;' + i + '</td>');
			//	  } else {
			//		  document.write('<td class="center">' + i + '</td>');
			//	  }
			// Add the day ids
				currentDate = addDays(startDate, i);
				var dayText = textArray[12 + currentDate.getDay()];
				document.write('<td class="center">' + dayText + '</td>');
			  }
	          // Calendar view
	          } else if (viewType == 2) {
			  currentDate = startDate;
			  document.write('<td>');
			  document.write('<table>');
			  document.write('<tr>');
			  document.write('<td class="top">');
			  document.write('<table class="calendarMonthTable">');
			  document.write('<tr>');
			  document.write('<td colspan="7" class="center">' + textArray[currentDate.getMonth()] + '</td>');
			  document.write('</tr>');
			  document.write('<tr>');
			  for (i = 0; i < 7; i++){
			// Add the day ids for first month
				var dayText = textArray[12 + i];
				document.write('<td class="center">' + dayText + '</td>');
			  }
			  document.write('</tr>');
			  document.write('<tr>');
			  
			  offset = 0;
			  for (i = 0; i < 35; i++){
				  if ((i > 0)&&((i+offset)%7==0)) {
					document.write('</tr><tr>');
				  }
				  currentDate = addDays(startDate, i);
				  // At start test day is in correct column
				  if (i == 0) {
					  for (j = 0; j < 7; j++) {
						  if (currentDate.getDay() > j) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');
							offset++;
						  }
					  }
				  }
				  // Test for change of month
				  if ((i > 0)&&(currentDate.getDate() == 1)) {
					  // Fill remain cells with non days
					  for (k = 0; k < (35-(i+offset)); k++) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');  
					  }
					  // Finish with this loop
					  break;
				  }
				  //document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="'+ window.location + '">' + currentDate.getDate() + '</a></td>');
				  //Don't write a link if date past
				  if (now <= currentDate) {
					  document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="'+ link + convertDateToString(currentDate) + '" target="_top">' + currentDate.getDate() + '</a></td>');
				  } else {
					  document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="' + window.location + '" target="_top">' + currentDate.getDate() + '</a></td>');
				  }

			  }
			  //Take a note of value of i
			  prevMonthCount = i;
			  document.write('</tr>');
			  document.write('</table>');
			  document.write('</td>');
			  
			  // Start of second month processing
			  document.write('<td class="top">');
			  newStartDate = startDate;			  
			  newStartDate.setMonth(startDate.getMonth() + 1);
			  document.write('<table class="calendarMonthTable">');
			  document.write('<tr>');
			  document.write('<td colspan="7" class="center">' + textArray[newStartDate.getMonth()] + '</td>');
			  document.write('</tr>');
			  document.write('<tr>');
			  for (i = 0; i < 7; i++){
			// Add the day ids for second month
				var dayText = textArray[12 + i];
				document.write('<td class="center">' + dayText + '</td>');
			  }
			  document.write('</tr>');
			  document.write('<tr>');
			  offset = 0;
			  for (i = 0; i < 35; i++){
				  if ((i > 0)&&((i+offset)%7==0)) {
					document.write('</tr><tr>');
				  }
				  currentDate = addDays(newStartDate, i);
				  // At start test day is in correct column
				  if (i == 0) {
					  for (j = 0; j < 7; j++) {
						  if (currentDate.getDay() > j) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');
							offset++;
						  }
					  }
				  }
				  // Test for change of month
				  if ((i > 0)&&(currentDate.getDate() == 1)) {
					  // Fill remain cells with non days
					  for (k = 0; k < (35-(i+offset)); k++) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');  
					  }
					  // Finish with this loop
					  break;
				  }
				  //document.write('<td id="' + renId + '_' + (julianStart + i + prevMonthCount) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i + prevMonthCount) + '" href="'+ window.location + '">' + currentDate.getDate() + '</a></td>');
				  // Don't write link if in past
				  if (now <= currentDate) {
					  document.write('<td id="' + renId + '_' + (julianStart + i + prevMonthCount) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i + prevMonthCount) + '" href="'+ link + convertDateToString(currentDate) + '" target="_top">' + currentDate.getDate() + '</a></td>');
				  } else {
					  document.write('<td id="' + renId + '_' + (julianStart + i + prevMonthCount) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i + prevMonthCount) + '" href="' + window.location + '" target="_top">' + currentDate.getDate() + '</a></td>');
				  }
			  }
			  document.write('</tr>');
			  document.write('</table>');
			  document.write('</td>');
			  document.write('</tr>');
			  document.write('</table>');
			  document.write('</td>');
		  // Week view respecting change over days
		  } else {
			  // From textArray positions 12-18 are days of week starting Sunday
			  for (i = day; i < day+7; i++){
				  var startPt = 12;
				  // If not started on Sunday need to cycle round to start of day names
				  if ((startPt + i) > 18) {
					  startPt = 5;
				  }
				  //startPt = startPt + i;
				var dayText = textArray[startPt + i];
				document.write('<td class="center">' + dayText + '</td>');
			  }			  
		  }
			 
		  document.write('</tr>');
		  if (viewType != 2) {
			  document.write('<tr>');
			  document.write('<td class="calendarRentalUnitName">'+ startDate.getFullYear() +'</td>');
			  if ((viewType == 1)||(viewType == 3)) {
				  document.write('<td class="right calendarMonthCell">' + textArray[startDate.getMonth()] + '</td>');
			  } else if (viewType == 0) {
				  document.write('<td class="right calendarMonthCell">' + startDate.getDate() + " " + textArray[startDate.getMonth()] + '</td>');
			  }
		  }
		  var oldDate = 0;
		  offset = 0;
		  var maxDataLines = 2;
		  if (viewType == 0) {
			  maxDataLines = 5;
		  }
		  var currentDataLines = 1;
		  if (viewType != 2) {
			  for (i = 0; i < cells; i++){
				previousDay = currentDate.getDay();
				if (previousDay == 0) {
					previousDay = 7;
				}
				var fudgeFactor = 2;
				if (startDate.getDay() > previousDay) {
					fudgeFactor = 1;
				}
				currentDate = addDays(startDate, i);
				// Test for start of next month if viewType 1 or 3 or start of week otherwise
				if (i != 0) {
					if (((viewType == 1)||(viewType == 3))&&(currentDate.getDate() == 1)) {
						for (j = 0; j < (31-oldDate-offset); j++) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');
						}
						currentDataLines++;
						if (currentDataLines > maxDataLines) {
							break;
						}
						// Now write new row catering for offset in days
						document.write('<tr>');
						document.write('<td>&nbsp;</td>');
						document.write('<td class="right calendarMonthCell">' + textArray[currentDate.getMonth()] + '</td>');
						for (k = 1; k < Math.abs((previousDay+fudgeFactor)-startDate.getDay()); k++) {
							document.write('<td class="calendarNonDay">&nbsp;</td>');
						}
						offset = k-1;
					} 
					if ((viewType == 0)&&(currentDate.getDay() == day)) {
						// Now write new row
						document.write('<tr>');
						document.write('<td>&nbsp;</td>');
						document.write('<td class="right" width="30">' + currentDate.getDate() + " " + textArray[currentDate.getMonth()] + '</td>');
					}
				} 
				// Only have active link to book if not in the past
				//*********************************************
				// Set all links to inactive for present!!!!!
				//**********************************************
				if (i + offset < cells) {
					if (now <= currentDate) {			
						// Mark Saturday and Sunday and write cell
						if ((currentDate.getDay()==0)||(currentDate.getDay()==6)) {
							if (viewType == 3) {
								document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell calendarWeekend center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="javascript:;" onclick="toggleCell(this);">' + currentDate.getDate() + '</a></td>');				
								document.write('<input type="hidden" name="R_' + renId + '_' + (julianStart + i) + '" id="R_' + renId + '_' + (julianStart + i) + '" value="A">');
							} else {
								document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell calendarWeekend center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="'+ link + convertDateToString(currentDate) + '" target="_top">' + currentDate.getDate() + '</a></td>');				
							}
						} else {
							if (viewType == 3) {
								document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="javascript:;" onclick="toggleCell(this);">' + currentDate.getDate() + '</a></td>');
								document.write('<input type="hidden" name="R_' + renId + '_' + (julianStart + i) + '" id="R_' + renId + '_' + (julianStart + i) + '" value="A">');
							} else {
								document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="'+ link + convertDateToString(currentDate) + '" target="_top">' + currentDate.getDate() + '</a></td>');
							}
						}
					} else {
						// Mark Saturday and Sunday and write cell with no active link
						if ((currentDate.getDay()==0)||(currentDate.getDay()==6)) {
							document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell calendarWeekend center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="javascript:">' + currentDate.getDate() + '</a></td>');				
						} else {
							document.write('<td id="' + renId + '_' + (julianStart + i) + '" class="calendarCell center middle"><a id="link_' + renId + '_' + (julianStart + i) + '" href="javascript:;">' + currentDate.getDate() + '</a></td>');
						}				
					}
				} 
	
				oldDate = currentDate.getDate();
			  }
			  document.write('</tr>');
		  }
		  // This is done for all viewTypes!!!
		  document.write('</table>');
		  if (viewType == 3) {
			document.write('<input type="hidden" name="controller" value="/ORToggleController">');
			document.write('<input class="ok" type="submit" value="' + OKPrompt + '">');
			//document.write('<input class="reset" type="reset" value="' + resetPrompt + '">');
		  }
		  //document.write('<br />');
		  //document.write('<table class="calendarTable"><tr><td>' + keyPrompt + ':</td><td class="right">' + availablePrompt + '</td><td class="calendarCell">&nbsp;</td><td class="right">' + seasonalPricePrompt + '</td><td class="calendarCellPriceChange">&nbsp;</td><td class="right">' + discountPricePrompt + '</td><td class="calendarDiscount">&nbsp;</td><td class="right">' + bookedPrompt + '</td><td class="calendarCellBooked">&nbsp;</td><td class="right">' + unavailablePrompt + '</td><td class="calendarCellUnavailable">&nbsp;</td></tr></table>');
		  dateFromStr = convertDateToString(startDate);
		  dateToStr = convertDateToString(endDate);

	  } else {
		 // Update cells have checked they exist, get handle on cell first
		 startDate = createDateObject(dateStartStr);
		 julianStart = getRoundedJulian(startDate);
		 // Correcting error whereby display is one day short
		 var cells = julianEnd + 1 - julianStart;
		 for (i = 0; i < cells; i++){
			 var cell = document.getElementById(renId + '_' + (julianStart + i));
			 if (cell != null) {
				 var cellLink = document.getElementById('link_' + renId + '_' + (julianStart + i));
				 if (resultType=='B') {
					 cell.className = 'calendarCell calendarCellBooked';
					 // If not manually recorded Set link back to itself i.e. do nothing 
					 if ((viewType == 3)&&(source=='manual')) {
						 // Dont change anything
					 } else {
						 cellLink.href =  window.location;
						 //cellLink.href = 'javascript:;';
						 cellLink.onclick = "";
					 }
				 } else if (resultType=='P'){
					 //cell.className = 'calendarCell calendarCellPriceChange';
					 // Change opacity depending on price difference with normal
					 // Take away from 1 to make more intense the greater the diff
					 // Commented out as this may be a bit too complex!!
					 //var opacity = (1-renPriceRatio) * 10;
					 //if (opacity > 10) {
					//	 opacity = 10;
					 //}
					 //if (opacity < 0) {
						 // Rep price less than normal i.e. discount time
					//	 opacity = -opacity;
					//	 cell.className = 'calendarCell calendarDiscount';
					// }
					// cell.style.opacity = opacity/10;
					// cell.style.filter = 'alpha(opacity=' + opacity*10 + ')';
				 } else if (resultType=='U'){
					 if (viewType == 3) {
						 cell.className = 'calendarCell calendarCellUnavailable';
					 } else {
						 cell.className = 'calendarCell calendarCellBooked';
					 }
					 // If not manually recorded Set link back to itself i.e. do nothing 
					 if ((viewType == 3)&&(source=="manual")) {
						 // Dont change anything
					 } else {
						 cellLink.href =  window.location;
						 //cellLink.href = 'javascript:;';
						 cellLink.onclick = "";
					 }
				 }
					
			 }
		 }
	  }
	  resetStartAndEndDates(dateFromStr, dateToStr);

  }
  
  function toggleCell(obj) {
	  var cellName = obj.id.substring(5);
	  var cell = document.getElementById(cellName);
	  var className = cell.className;
	  var input_cell = document.getElementById("R_" + cellName);
	  if (className.indexOf('calendarCellUnavailable') > 0) {
		  cell.className = 'calendarCell center middle';
		  input_cell.value = 'changed_A';
	  } else if (className.indexOf('calendarCellBooked') > 0) {
		  cell.className = 'calendarCell calendarCellUnavailable';
		  input_cell.value = 'changed_U';
	  } else {
		  cell.className = 'calendarCell calendarCellBooked';
		  input_cell.value = 'changed_B';
	  }
  }
  
  function resetStartAndEndDates(dateFromStr, dateToStr) {
	  if ((typeof(dateFromStr) != "undefined")&&(document.getElementById('dateFrom') != null)) {
		  document.getElementById('dateFrom').value = dateFromStr;
		  document.getElementById('dateTo').value = dateToStr;
	  }

  }
  
  function displayDate() {
    document.write(todayVar.toGMTString().substring(0, 16));
  }
  
  function isInteger(s){
	  var i;
	  for (i = 0; i < s.length; i++){   
		  // Check that current character is number.
		  var c = s.charAt(i);
		  if (((c < "0") || (c > "9"))) return false;
	  }
    // All characters are numbers.
    return true;
  }

  function stripCharsInBag(s, bag){
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
  }

  function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
  }
  
  function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
	} 
	return this
  }

  function isDate(dfld, errMsg1, errMsg2, errMsg3, errMsg4, errMsg5, errMsg7){
	var dtStr = dfld.value;
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		msg(errMsg1)
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		msg(errMsg2)
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		msg(errMsg3)
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		msg(errMsg4)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		msg(errMsg5)
		return false
	}
	jDate = createDateObject(dtStr);
	//today = new Date((new Date()).getFullYear(), (new Date()).getMonth()+1, 0).getDate();
	today = new Date();
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	today.setMilliseconds(0);
	if ((jDate - today) < 0) {
		msg(errMsg7);
		return false;
	}

	return true
  }
  
  function promptYesNo(frm, promptQuestion, promptYes, promptNo) {
	var answer = confirm (promptQuestion);
	if (answer) {
		return true;
	} else {
		return false;
	}
  }


  // *****************
  // Browser utilities
  // *****************
  function getAppVersion() {
    return navigator.appVersion;
  }

  function getAppName() {
    return navigator.appName;
  }

  function getCodeName() {
    return navigator.appCodeName;
  }

  function getLanguage() {
    return navigator.appLanguage;
  }

  function getPlatform() {
    return navigator.platform;
  }
  
  function getScreenWidth() {
    return screen.width;
  }

  function getScreenHeight() {
    return screen.height;
  }
  
  function is800x600() {
    if ((getScreenWidth() == 800)&&(getScreenHeight()== 600)) {
      return true;
    }
    else {
      return false;
    }
  }
    
  function getUserAgent() {
    return navigator.userAgent;
  }
  
  function getBrowser() {
    if (getUserAgent().indexOf("Opera") > -1) {
      return "Opera";
    }
    else if (getAppVersion().indexOf("IE") > -1) {
      return "IE";
    } 
    else {
      return getAppVersion();
    }
  }
  
  function showBrowser() {
    alert("Browser is " + getBrowser());
    return true;
  }



