// global variables for timeout and for current menu
var inputcount=0, IsDirty=false;
var backup = false;
function SetDirty(obj)
{
	var msg = document.getElementById("SaveMessage");
	msg.innerHTML = '<span class='+'"'+'errortitle'+'"'+'><b>This data has not been saved</b></span>';
	IsDirty = true;

    var objid = obj.id;
    var rec = objid.indexOf(" ");
    if (rec != -1)
    {
        var recno = objid.slice(rec+1);
        if (document.getElementById("changed"+recno))
        {
            document.getElementById("changed"+recno).value = 1;
        }
    }
}

function PrintIt(){
	if (window.print) {
	    window.print() ;
	} else {
	    var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
	document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
	    WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box    WebBrowser1.outerHTML = "";
	}
}

function NoPrint()
{
    history.back(1);
}

function CheckIsDirty(e)
{
      if (IsDirty)
      {
            IsDirty = false;
            alert('Save your work?');


            var frm = window.event? window.event.srcElement: e ? e.target: null;
            if (!frm) return;
            
            frm.submitAllowed = false;
            if (e && e.stopPropagation && e.preventDefault)
            {
                  e.stopPropagation();
                  e.preventDefault();
            }
            if (window.event)
            {
                  window.event.cancelBubble = true;
                  window.event.returnValue = false;
                  return false;
            }
      }
      IsDirty = false;

}

function RemoveDirty()
{
      IsDirty = false;
}

function addEvent(elem, evType, fn, useCapture)
{
      // cross browser event handling 
      // by Scott Andrew
      if (document.addEventListener)
      {
            elem.addEventListener(evType,fn,useCapture);
            return true;
      } 
      else if (elem.attachEvent)
      {
            var r = elem.attachEvent('on' + evType, fn);
            return r;
      }
      else
      {
            elem('on' + evType) = fn;
      }
}

sfHover = function() {
    var sfEls = document.getElementById("navBar").getElementsByTagName("LI");
    for (var i=0; i<sfEls.length; i++) {
        sfEls[i].onmouseover=function() {
            this.className+=" sfhover";
        }
        sfEls[i].onmouseout=function() {
            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
        }
    }
}

function SetupMenu() {
    //sfHover();
    backup = false;
/*
    items=document.getElementsByTagName("li");
    for (i=0; i<items.length; i++) {
      if (items[i].className != "menu") continue;
      //set up event handlers
      thelink=findChild(items[i],"A");
      thelink.onmouseover=ShowMenu;
      thelink.onmouseout=StartTimer;
      //is there a submenu?
      if (ul=findChild(items[i],"UL")) {
         ul.style.display="none";
         for (j=0; j<ul.childNodes.length; j++) {
            ul.childNodes[j].onmouseover=ResetTimer;
            ul.childNodes[j].onmouseout=StartTimer;
         }
      }
   }
*/ 

   if (document.getElementById('savebutton'))
   {
      cfield = document.getElementById('savebutton');
      addEvent(cfield,'click',RemoveDirty,false);
   }
   // similarly set all the button elements so that they CheckIsDirty 
   if (document.getElementById('buttoncount'))
   {   
	   for (i = 0; i < 8; i++)
	   {
	   	if (document.getElementById('button'+i))
	   	{
	      	cfield = document.getElementById('button'+i);
	      	addEvent(cfield,'click',CheckIsDirty,false);
	      }
	   }
   }
   
   if (document.getElementById("swapavailable"))
   {
   	cfield = document.getElementById("swapavailable");
   	addEvent(cfield,'click',swapAvailable,false);
   	cfield = document.getElementById("swapoccupied");
   	addEvent(cfield,'click',swapOccupied,false);
   }

	// check to see if we are processing a booking1.php
/*
	if (document.getElementById("booking1"))
	{
		// set up the click event to do a doRequest to transfer
		// information from the host via Ajax
		cfield = document.getElementById('bookingid');
		if (cfield.value == 0)
		{
			for (i = 2; i < 5; i++)
			{
				cfield = document.getElementById('step'+i);
				cfield.disabled = true;
			}
		}
	}
*/

/*
	if (document.getElementById("booking2"))
	{
		cnt = document.getElementById("roomcount").value;
		for (i = 0; i < cnt; i++)
		{
			cfield = document.getElementById("selroom"+i);
			addEvent(cfield,'change',doRequest2,false);
		}

		cnt = document.getElementById("partycount").value;
		for (i = 0; i < cnt; i++)
		{
			cfield = document.getElementById("useroom"+i);
			addEvent(cfield,'change',doRequest2,false);
			//cfield.style.visibility = "hidden";
			//cfield = document.getElementById("dobyear"+i);
			//addEvent(cfield,'change',doRequest2,false);
		}

//		addEvent(document.book2,'click',doFinish2,false);

	}
*/

/*
	if (document.getElementById("booking3"))
	{
		cnt = document.getElementById("namecount").value;
		for (i = 0; i < cnt; i++)
		{
			cfield = document.getElementById("insurance"+i);
			addEvent(cfield,'change',doRequest3,false);

			cfield = document.getElementById("skilesson"+i);
			addEvent(cfield,'change',doRequest3,false);

			cfield = document.getElementById("snowboard"+i);
			addEvent(cfield,'change',doRequest3,false);

			cfield = document.getElementById("passupgra"+i);
			addEvent(cfield,'change',doRequest3,false);

//			cfield = document.getElementById("selfdrive"+i);
//			addEvent(cfield,'change',doRequest3,false);

			cfield = document.getElementById("prestigee"+i);
			addEvent(cfield,'change',doRequest3,false);
		}
	}
*/
}

// find the first child object of a particular type
function findChild(obj,tag) {
   cn = obj.childNodes;
   for (k=0; k<cn.length; k++) {
     if (cn[k].nodeName==tag) return cn[k];
   }
   return false;
}


  function addOption(dd,val,txt)
  {
      // add an option to a dropdown box (dd) with 
      // value val and text txt
      var opt = document.createElement("option");

      opt.appendChild(document.createTextNode(txt));
      opt.setAttribute("value",val);
      dd.appendChild(opt);
  }

  function clearOptions(dd)
  {
      // remove all the options from a drop down
      if (dd.options)
      {
	      for (var i = dd.options.length-1; i >= 0; i--)
	      {
	            dd.remove(i);
	      }
      }
  }

function doSwap(trg,obj,keys,okeys)
{
    var ix = trg.selectedIndex;  // get the index the user selected
    var val = trg.options[ix].value;  // get the value at the option selected
    var txt = trg.options[ix].text;

	trg.remove(ix);
	addOption(obj,val,txt);
	
	// remove object from keys
	var keyval = keys.value;
      var j = keyval.indexOf(val);
      var i = keyval.indexOf(";",j);
      if (j >= 0)
      {
      	if (j == 0)
      		keyval = keyval.slice(i+1);
      	else
			keyval = keyval.slice(0,j) + keyval.slice(i+1);
		keys.value = keyval;
	}      	
	// add object to okeys
	okeys.value = okeys.value + val + ";";  
  }

  function swapAvailable(e)
  {
      var trg = document.getElementById("swapavailable");
      var obj = document.getElementById("swapoccupied");
      var keys = document.getElementById("swapavailablekeys");
      var okeys = document.getElementById("swapoccupiedkeys");
            
  	doSwap(trg,obj,keys,okeys);
  }
  
  function swapOccupied(e)
  {
      var trg = document.getElementById("swapoccupied");
      var obj = document.getElementById("swapavailable");
      var keys = document.getElementById("swapoccupiedkeys");
      var okeys = document.getElementById("swapavailablekeys");
            
  	doSwap(trg,obj,keys,okeys);
  }
  function ajaxRequest()
  {
      var activexmodes = ["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

      if (window.XMLHttpRequest) // if Mozilla, Safari etc
            return new XMLHttpRequest();
      
      if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
            for (var i=0; i<activexmodes.length; i++)
            {
                  try
                  {
                        return new ActiveXObject(activexmodes[i]);
                  }
                  catch(e)
                  {
                  //suppress error
                  }
            }
      }
      else
            return false;
  }

  function setupOptions(trgObj,t)
  {
      var i = t.indexOf(":");
      var j = t.indexOf(";");
  	
      clearOptions(trgObj);
      addOption(trgObj,'0','-');
      while (j > 0)
      {
            addOption(trgObj,t.slice(0,i),t.slice(i+1,j));
            t = t.slice(j+1);
            i = t.indexOf(":");
            j = t.indexOf(";");
      }
  }

function Lookup(obj)
{
	SetDirty(obj);

	var trgid = obj.id;   // we need the id to get the number of the step
	var ix = trgid.slice(11); // get the step number
	var params;
	var mygetrequest=new ajaxRequest();

	if (mygetrequest === false)
	{
	    alert('Failed to create ajaxRequest');
	    exit;
	}

	params = "lookupdata.php?FieldId=" + obj.value;
	mygetrequest.onreadystatechange=function()
	{
	if (mygetrequest.readyState==4)
	{
		if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1)
		{
			var t = mygetrequest.responseText;
			var i = t.indexOf(":");
			var j = t.indexOf(";");
			var trgObj = document.getElementById('LookupValue'+ix);

			clearOptions(trgObj);
			while (j > 0)
			{
			    addOption(trgObj,t.slice(0,i),t.slice(i+1,j));
			    t = t.slice(j+1);
			    i = t.indexOf(":");
			    j = t.indexOf(";");
			}

		}
		else
		{
            alert("An error has occured making the request");
		}
	}
	}

	mygetrequest.open("GET", params, true);
	mygetrequest.send(null);

}
  function doRequest(trg)
  {
	// process booking 1
      var trgid = trg.id;   // we need the id to get the number of the step
      var majorstep;
      var params;
      var val = trg.value;  // get the value at the option selected
      if (val <= 0)
	  {
		if (trgid == "adults")
		{
			for (i = 2; i < 5; i++)
			{
				cfield = document.getElementById('step'+i);
				cfield.disabled = true;
			}
		}
		return;
	  }

	// remember the step number can be 1 to 5 plus 42, 43, ... and 52, 53, ...
	var mygetrequest=new ajaxRequest();

	if (mygetrequest === false)
	{
	    alert('Failed to create ajaxRequest');
	    exit;
	}

	params = "customerbookingdata.php?StepId=";
	if (trgid == "adults" || trgid == "children")
	{
		var bid = document.getElementById('bookingid').value;

		majorstep = "1";
		children = document.getElementById("children").value;
		adults = document.getElementById("adults").value;
		val = parseInt(children) + parseInt(adults);
		params += '1&Number=' + val + '&bookingid=' + bid;
		cfield = document.getElementById('step2');
		cfield.disabled = false;
		addEvent(cfield,'change',doRequest,false);
	}
	else if (trgid == "step2")
	{
		majorstep = "2";
		params += '2&AvailableDateId=' + val;
	}
	else
	    return;
    mygetrequest.onreadystatechange=function()
	{
		if (mygetrequest.readyState==4)
		{
		      if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1)
		      {
		            var t = mygetrequest.responseText;
		            if (t.slice(0,3)=='Err')
		            {
						alert(t.slice(6));
						exit;
		            }
		            var i;
		            var trgObj;

		            switch(majorstep)
		            {
		            	case "1":
		            		trgObj = document.getElementById('step2');
							setupOptions(trgObj,t);
		            		return;
		            	case "2":
		            	    document.getElementById("step3").disabled = false;
		            	    document.getElementById("step4").disabled = false;
		            		i = t.indexOf('^')
							trgObj = document.getElementById('step3');
							setupOptions(trgObj,t.slice(0,i));
							t = t.slice(i+1);
							trgObj = document.getElementById('step4');
							setupOptions(trgObj,t);
							return;
		            }
		      }
		      else
		      {
		            alert("An error has occured making the request");
		      }
		}
      }

      mygetrequest.open("GET", params, true);
      mygetrequest.send(null);
  }

  function doFinish1()
  {
	if (document.getElementById('adults').value == 0)
	{
		alert('Adults must be l or more');
		return false;
	}
	if (document.getElementById('step2').value == 0)
	{
		alert('You must select a departure date');
		return false;
	}
	if (document.getElementById('step3').value == 0)
	{
		alert('You must select accommodation');
		return false;
	}
	if (document.getElementById('step4').value == 0)
	{
		var goforward = Confirm("You have not selected a flight.\nDo you wish to continue without selecting a flight?");
		return goforward;
	}
	
	return true;
  }

  function IsOverBooked(checkforunderbooking)
  {
	// false = rooms are fully booked or at least one room is underbooked room and user DOES accept supplement charge
	// true = at least one room is overbooked or least one room is underbooked and user does NOT accept supplement charge
	roomcount = document.getElementById("roomcount").value;
	partycount = document.getElementById("partycount").value;
	usedby = new Array();  // keep tract of how many are in a room
	roomsize = new Array();  // keep track of how many can be put in a room
	infantuse = new Array(); // can't put an infant in a room on its own
	for (i = 0; i < roomcount; i++)
	{
	    usedby[i] = 0;
	    roomsize[i] = document.getElementById("roomsize"+i).value;
	    infantuse[i] = false;
	}
	for (i = 0; i < partycount; i++)
	{
		contacttype = document.getElementById("contacttype"+i).value;
		useroom = document.getElementById("useroom"+i);
		if (useroom.value >0 && useroom.options.length>0)
		{
			// the room selection is enabled
			roomix = useroom.value;
			if (contacttype != 7)
				usedby[roomix-1]++;  // infants don't count towards room occupancy
			else
			    infantuse[roomix-1] = true;
		}
	}
	for (i = 0; i < roomcount; i++)
	{
	    if (usedby[i] > roomsize[i])
		{
			alert(document.getElementById("roomname"+1).value+' is overbooked');
			return true;
		}
		else if (usedby[i] < roomsize[i] && usedby[i] != 0)
		{
			if (checkforunderbooking)
			{
				roomname = document.getElementById("roomname"+i).value
				if (!confirm(roomname+" is not full.  Click Ok to continue and accept supplement charge.  Click Cancel to reselect rooms."))	return true;
			}
		}
		else if (usedby[i] == 0 && infantuse[i] && checkforunderbooking)
		{
			alert('Cannot have infant in room on its own');
			return true;
		}

	}
	return false;
  }

  function doRequest2(trg)
  {
	var trgid = trg.id;   // we need the id to get the number of the entry
	var number = trgid.slice(7,trgid.length); // get the number of the entry
	var name = trgid.slice(0,7); // get the name
	var params;
	var val = trg.value;  // get the value at the option selected

	switch(name)
	{
		case "selroom":
			val = trg.checked;
			if (val)
			{
				// we need to add the room to all the selections
				roomname = document.getElementById("roomname"+number).value;
				partycount = document.getElementById("partycount").value;
				val = document.getElementById("roomid"+number).value;
				for (i = 0; i < partycount; i++)
				{
					useroom = document.getElementById("useroom"+i);
					addOption(useroom,val,roomname);
				}
			}
			else
			{
				// remove the name from all the selections
				roomname = document.getElementById("roomname"+number).value;
				partycount = document.getElementById("partycount").value;
				val = document.getElementById("roomid"+number).value;
				for (i = 0; i < partycount; i++)
				{
					useroom = document.getElementById("useroom"+i);
			      	for (j = useroom.options.length-1; j >= 0; j--)
			      	{
	        			if (useroom.options[j].value == val)
	                    {
							useroom.remove(j);
							break;
						}
			      	}
				}
				//
				// bookingid = document.getElementById("bookingid").value;
				// val = document.getElementById("roomid"+number).value;
				// params = "customerbookingdata.php?StepId=6&roomid="+val+"&bookingid="+bookingid;
			}
			break;
	    case "useroom":
			// is the room overbooked
			if (IsOverBooked(false)) return;
			break;
			params = "customerbookingdata.php?StepId=4";
			roomid = document.getElementById("roomid"+(val-1)).value;
			contactid = document.getElementById("contactid"+number).value;
			bookingid = document.getElementById("bookingid").value;
			params = params+"&roomid="+roomid+"&contactid="+contactid+"&bookingid="+bookingid;
			break;
/* 
		case "dobyear":
		    break;
			cfield = document.getElementById("useroom"+number);
			params = "customerbookingdata.php?StepId=3";
			contactid = document.getElementById("contactid"+number).value;
			bookingid = document.getElementById("bookingid").value;
			params = params+"&dob="+document.getElementById("dobyear"+number).value+"-"+document.getElementById("dobmonth"+number).value+"-"+document.getElementById("dobday"+number).value+"&contactid="+contactid+"&bookingid="+bookingid;
			break;
*/
	}
	return;

	var mygetrequest=new ajaxRequest();
	if (mygetrequest === false)
	{
	    alert('Failed to create ajaxRequest');
	    exit;
	}

    mygetrequest.onreadystatechange=function()
	{
		if (mygetrequest.readyState==4)
		{
		      if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1)
		      {
		            var t = mygetrequest.responseText;
		            if (t.slice(0,3)=='Err')
		            {
						alert(t);
						exit;
		            }
		            switch(name)
		            {
		            	case "dobyear":
		            	    document.getElementById("contacttypeid"+number).value = t.slice(0,1);
		            	    document.getElementById("selectionfees").innerHTML = t.slice(2);
							return;
		            	case "useroom":
						case "selroom":
		            	    document.getElementById("selectionfees").innerHTML = t;
							return;
		            }
					return;
		      }
		      else
		      {
		            alert("An error has occured making the request");
		      }
		}
      }

      mygetrequest.open("GET", params, true);
      mygetrequest.send(null);
  }

function noteBack()
{
    backup = true;  
    var frm = document.getElementById("booking2");
    frm.Action = "booking1.php";
}
function doFinish2(e)
{
	// click event of booking2
	// we need to check that everyone has a room selected
    if (backup) return true;

	var partycount = document.getElementById("partycount").value;
	var goforward = true;
	for (i = 0; i < partycount; i++)
	{
		useroom = document.getElementById("useroom"+i);
		if (useroom.value <= 0 || useroom.options.length < 1)
		{
			// the dob hasn't been set
			alert('No room selected for '+document.getElementById("contactname"+i).value);
			goforward = false;
			break;
		}
	}

	if (IsOverBooked(true)) goforward = false;
	return goforward;
}

  function doRequest3(e)
  {
	return;
	var trg;
	if (window.event)
	    trg = window.event.srcElement;
	else
	    trg = e.target;

	var trgid = trg.id;   // we need the id to get the number of the entry
	var number = trgid.slice(9,trgid.length); // get the number of the entry
	var name = trgid.slice(0,9); // get the name
	var params;
	var val = trg.checked;  // get the value at the option selected

	switch(name)
	{
		case "skilesson":
		    fieldname="Lessons";
		    break;
		case "insurance":
		    fieldname="Insurance";
		    break;
		case "snowboard":
		    fieldname="Snowboard";
		    break;
		case "passupgra":
		    fieldname="PassUpgrades";
		    break;
		case "prestigee":
		    fieldname="PrestigeEquipment";
		    break;
		case "selfdrive":
		    fieldname="SelfDrive";
		    break;
	}

	if (val)
	    useval=1;
	else
	    useval=0;

	params = "customerbookingdata.php?StepId=5&bookingid="+document.getElementById("bookingid").value+"&contactid="+document.getElementById("contactid"+number).value+"&fieldname="+fieldname+"&val="+useval;

	var mygetrequest=new ajaxRequest();

	if (mygetrequest === false)
	{
	    alert('Failed to create ajaxRequest');
	    exit;
	}

    mygetrequest.onreadystatechange=function()
	{
		if (mygetrequest.readyState==4)
		{
		      if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1)
		      {
		            var t = mygetrequest.responseText;
		            if (t.slice(0,3)=='Err')
		            {
						alert(t);
						exit;
		            }
            	    document.getElementById("selectionfees").innerHTML = t;
					return;
		      }
		      else
		      {
		            alert("An error has occured making the request");
		      }
		}
      }

      mygetrequest.open("GET", params, true);
      mygetrequest.send(null);
}

function doFinish3(e)
{
	return true;
}

// Set up the menu when the page loads
window.onload=SetupMenu;
