function NA(){return new Array();}

var objNumberA=NA();
var countAccoTypes=16;
var AccoTypes=NA();
AccoTypes[0] = "bg";
AccoTypes[1] = "vi";
AccoTypes[2] = "bu";
AccoTypes[3] = "ch";
AccoTypes[4] = "hc";
AccoTypes[5] = "ap";
AccoTypes[6] = "kp";
AccoTypes[7] = "hk";
AccoTypes[8] = "vt";
AccoTypes[9] = "vw";
AccoTypes[10] = "fb";
AccoTypes[11] = "th";
AccoTypes[12] = "htl";
AccoTypes[13] = "wv";
AccoTypes[14] = "vi";
AccoTypes[15] = "gv";

var txt_nachten="nachten";
objNumberA["vi"]="a"; // villa
objNumberA["bg"]="b"; // bungalow
objNumberA["bu"]="c"; // buitenhuis
objNumberA["ch"]="d"; // chalet
objNumberA["hc"]="e"; // stacaravan
objNumberA["ap"]="f"; // appartement
objNumberA["kp"]="g"; // kampeerplaats
objNumberA["hk"]="h"; // hotelkamer
objNumberA["vt"]="k"; // vakantietent
objNumberA["vw"]="l"; // vakantiewoning
objNumberA["fb"]="m"; // groepsaccommodatie
objNumberA["th"]="n"; // trekkershutten
objNumberA["htl"]="p"; // hotelchalet
objNumberA["wv"]="z"; // watervilla
objNumberA["vi"]="v"; // watervilla
objNumberA["gv"]="q"; // Groepsaccommodatie


//jmmin, jmmax
function fillmonthinput(default_monthyear,default_day,default_nights)
{
  if (jmmax.length ==3)
    jmmax = "0" + jmmax;
  var selected_item = 0;
  var currentDate = jmmin;
  var previousDate = "-1";
  var currentMonth, currentYear, currentFullYear;
  var tmp_currentYear = "";
  var tmp_currentMonth = "";
  var today = new Date()
  var lastminute = new Date(today.getFullYear(),today.getMonth(),today.getDate()+21)

  currentYear = currentDate.substr(0,2) -0; // cast to int
  currentFullYear = (currentYear + 2000).toString();
  currentMonth = currentDate.substr(2,2) -0; // cast to int

  var hasMonth, lookInVar;
  jmmax = jmmax - 0;
  var teller = 0;

  with (document.bookingform.maandjaar)
  {
    for (var i = options.length; i >= 0; i--) options[i] = null;
  }
  document.bookingform.maandjaar.options[document.bookingform.maandjaar.options.length] = new Option(txt_y_later, "0000");

  var debugInfo = " has month:\n";
  while (previousDate <= jmmax && teller < 100)
  {
    var hasMonth = false;
    debugInfo +="Month: " + currentMonth + "Year: " + currentYear + "showMonth " + showMonth(currentMonth, currentYear) + "\n";
    //alert("Currentdate: " + currentDate);
    if (showMonth(currentMonth, currentYear))
    {
      if (typeof(lm) == "string")
      {
        if (lm != '')
        {
          if ((currentMonth == (today.getMonth()+1) && (currentFullYear) == today.getFullYear()) || (currentMonth == (lastminute.getMonth()+1) && (currentFullYear) == lastminute.getFullYear()))
          {
            document.bookingform.maandjaar.options[document.bookingform.maandjaar.options.length] = new Option(txt_y[currentMonth] + " " + currentFullYear, currentDate);
            if(currentDate==default_monthyear) selected_item=document.bookingform.maandjaar.options.length;
          }
        }
        else
        {
          document.bookingform.maandjaar.options[document.bookingform.maandjaar.options.length] =
          new Option(txt_y[currentMonth] + " " + currentFullYear, currentDate);
         if(currentDate==default_monthyear) selected_item=document.bookingform.maandjaar.options.length;
        }
      }
      else
      {
        document.bookingform.maandjaar.options[document.bookingform.maandjaar.options.length] =
        new Option(txt_y[currentMonth] + " " + currentFullYear, currentDate);
       if(currentDate==default_monthyear) selected_item=document.bookingform.maandjaar.options.length;
      }
    }

    previousDate = currentDate -0;
    if (currentMonth ==12)
    {
      currentYear++;
      currentFullYear = (currentYear + 2000).toString();
      currentMonth = 1;
    }
    else
      currentMonth++;

    if (currentYear.toString().length<2)
    {
      tmp_currentYear = "0" + currentYear.toString();
    }
    else
    {
      tmp_currentYear = currentYear.toString();
    }
    if (currentMonth.toString().length<2)
    {
      tmp_currentMonth = "0" + currentMonth.toString();
    }
    else
    {
      tmp_currentMonth = currentMonth.toString();
    }

    currentDate = tmp_currentYear + "" + tmp_currentMonth;

    //alert(currentMonth+" = "+currentYear.length+"|"+currentYear+"|"+currentDate);
    if (previousDate.length ==3)
    {
      if (teller < 3) //alert("SLKFJDSLFJDLK!!!");
      previousDate = "0" + previousDate;
    }

    if (teller < 3)
    {
      //alert("LENGTH:" + previousDate.length);
      //alert("prevdate:" + previousDate);
    }
    teller++;
  }

  if (teller > 99)
    alert ("TELLER TO HIGH!" + previousDate + ":" + jmmax);
  else
    //alert("teller:" + teller);
  //alert(debugInfo);
  if(selected_item>0) selected_item=selected_item-1;
  document.bookingform.maandjaar.options[selected_item].selected=true;
  filldayinput(document.bookingform.maandjaar.options[selected_item].value,default_day,default_nights);
}

/**
* @param sjm selected maandjaar
*/
function filldayinput(sjm,default_day,default_nights)
{
  var optionArr=NA();
  var tmpArr;
  var tmpOptionArr=NA();
  var selected_item = 0;

  if (sjm.length ==3)
  sjm = "0" + sjm;
  //alert("Filldayinput: sjm "+sjm);

  for(var i=0;i<countAccoTypes;i++)
  {
    var name='accotype['+AccoTypes[i]+']'; // this way of requesting, because the name contains brackets ([ & ])
    if(typeof(document.bookingform[name])!="undefined"&&document.bookingform[name].type=="hidden")
    {
      if(document.bookingform[name].value == '1' || document.bookingform[name].value == 'true')
      {
        tmpArr=getdaysforobject(sjm,eval(objNumberA[AccoTypes[i]]));
        for(var j=0;j<tmpArr.length;j++)
          tmpOptionArr[tmpArr[j]]=1;
      }
    }
    else if(typeof(document.bookingform[name])!="undefined"&&document.bookingform[name].type=="checkbox")
    {
      if(document.bookingform[name].checked == 1 || document.bookingform[name].checked == true)
      {
        tmpArr=getdaysforobject(sjm,eval(objNumberA[AccoTypes[i]]));
        for(var j=0;j<tmpArr.length;j++)
          tmpOptionArr[tmpArr[j]]=1;
      }
     }

  	//if(typeof(document.bookingform[name])!="undefined"&&
    //      (document.bookingform[name].checked==1||document.bookingform[name].checked==true))
   // {
    //  tmpArr=getdaysforobject(sjm,eval(objNumberA[i]));
     // for(var j=0;j<tmpArr.length;j++)
    //    tmpOptionArr[tmpArr[j]]=1;
    //} //EI(cb)
  } //EF(FE)

  //tmpArr = getdaysforobject(sjm, f);
  //for(var j = 0; j < tmpArr.length; j++)
  //  tmpOptionArr[tmpArr[j]] = 1;

  for(var i in tmpOptionArr)
    optionArr[optionArr.length] = i -0;

  optionArr = optionArr.sort(sort_numeric);

  with(document.bookingform.ad)
  {
    for (var i = options.length; i >= 0; i--) options[i] = null;
    if (optionArr.length)
    {
      for(var i in optionArr)
      {
        var date = new Date('20'+sjm.substr(0,2), (sjm.substr(2,2))-1, optionArr[i]); // jaar, maand, dag
        options[options.length] = new Option(wd[date.getDay()]+' '+optionArr[i], optionArr[i]);
        if(optionArr[i]==default_day) selected_item=i;
      }
    }
    else
      options[0] = new Option('--', 0);

    options[selected_item].selected=true;
    fillnumnightsinput(options[selected_item].value,default_nights);
  }
}

function fillnumnightsinput(selday,default_nights)
{
  var optionArr = NA();
  var tmpArr = NA();
  var tmpOptionArr = NA();
  var selected_item = 0;

  for(var i =0; i < countAccoTypes; i++)
  {
    var name = 'accotype['+AccoTypes[i]+']';

    if(typeof(document.bookingform[name]) != "undefined" && document.bookingform[name].type == "hidden")
    {
  	  if(document.bookingform[name].value == '1' || document.bookingform[name].value == 'true')
  	  {
        tmpArr = getnumnightsinput(selday, eval(objNumberA[AccoTypes[i]]));
        for(var j = 0; j < tmpArr.length; j++)
          tmpOptionArr[tmpArr[j]] = 1;
  	  }
    }
    else if(typeof(document.bookingform[name]) != "undefined" && document.bookingform[name].type == "checkbox")
    {
  	  if(document.bookingform[name].checked == 1 || document.bookingform[name].checked == true)
  	  {
  	    tmpArr = getnumnightsinput(selday, eval(objNumberA[AccoTypes[i]]));
        for(var j = 0; j < tmpArr.length; j++)
          tmpOptionArr[tmpArr[j]] = 1;
      }
    }


    //} // end if (checkboxisset)
  } // end for

  //tmpArr = getnumnightsinput(selday, f);
  //for(var j = 0; j < tmpArr.length; j++)
  //  tmpOptionArr[tmpArr[j]] = 1;

  for(var i in tmpOptionArr)
    optionArr[optionArr.length] = i - 0;

  optionArr = optionArr.sort(sort_numeric);

  with(document.bookingform.numdagen)
  {
    for (var i = options.length; i >= 0; i--) options[i] = null;

    if (optionArr.length)
    {
      for(var i in optionArr)
      {
        options[options.length] = new Option(optionArr[i]+' '+txt_nachten, optionArr[i]);
        if(optionArr[i]==default_nights) selected_item=i;
      }

    }
    else
      options[0] = new Option('--', 0);

    options[selected_item].selected=true;
  }
}

/**
* @param int month
* @param int year (1 or 2 digits)
* @param int type
* @return bool showMonth
*/
function showMonth(month, year)
{
  var returnResult = false;
  var varElement, acoTypeName;

  if (month < 10)
    month = "0" + month;

  if (year < 10)
    year = "0" + year;

  for(var i=0; i < countAccoTypes; i++)
  {
    varElement = objNumberA[AccoTypes[i]] + "['" + year + month + "']";
    acoTypeName = 'accotype['+AccoTypes[i]+']';

    // if the acotype exists and is checked, and the (month, year) exists for that acotype (accomodatietype)
  	if(typeof(document.bookingform[acoTypeName])!='undefined' && document.bookingform[acoTypeName].type=='hidden')
  	{
      if((document.bookingform[acoTypeName].value=='1'||document.bookingform[acoTypeName].value=='true')
         && eval("typeof("+varElement+") != 'undefined'"))
           returnResult = true;
  	}
  	else if(typeof(document.bookingform[acoTypeName])!="undefined" && document.bookingform[acoTypeName].type=="checkbox")
  	{
      if((document.bookingform[acoTypeName].checked==1||document.bookingform[acoTypeName].checked==true)
         && eval("typeof("+varElement+") != 'undefined'"))
           returnResult = true;
    }
    else
    {
      //alert("Unknow Type: "+typeof(document.bookingform[acoTypeName]))
    }
  }

  return returnResult;
}

function getdaysforobject(sjm, x)
{
  var returnArr = NA();

  //alert("getdaysforobject: sjm :"+sjm);
  if (x[sjm]!=null)
  {
    var today = new Date();
    var lastminute = new Date(today.getFullYear(),today.getMonth(),today.getDate()+21)

    for (var i=0;i<x[sjm].length;i++)
    {
      // if there is a value for this entry, then people can arrive on this day
      if (x[sjm][i]!=null && x[sjm][i]!=0)
      {
        // we need to prepend '20' to the year, otherwise MSIE will make 19.. of the year.
        var date = new Date('20'+sjm.substr(0,2), (sjm.substr(2,2))-1, i); // jaar, maand, dag
        // only add option if date is after today.
        if (typeof(lm)=="string")
        {
          if (lm != '')
          {
            if (today.getTime() <= date && lastminute.getTime() >= date)
            {
              if (today.getTime() <= date)
              {
                returnArr[returnArr.length] = i;
              }
            }
          }
          else
          {
            if (today.getTime() <= date)
            {
              returnArr[returnArr.length] = i;
            }
          }
        }
        else
        {
          if (today.getTime() <= date)
          {
            returnArr[returnArr.length] = i;
          }
        }
      }
    }
  }
  var tmp = "";
  return returnArr;
}


function getnumnightsinput(selday, x)
{
  var returnArr = NA();
  // de geselecteerde maand halen we uit het form.
  selmonth = document.bookingform.maandjaar.options[document.bookingform.maandjaar.selectedIndex].value;
  if (selmonth.length ==3)
    selmonth = "0" + selmonth;

  if (selday!=0 && x[selmonth]!=null && x[selmonth][selday]!=null)
  {
    for (var j = 0; j < x[selmonth][selday].length; j++)
    {
      for (var i = 1; i <= 31; i++)
      {
        // i-1 is nodig, omdat het eerste bitje (bitje 0), 1 nacht representeert.
        if (((x[selmonth][selday][j])>>>(i-1)) & 1 == 1)
        {
          returnArr[returnArr.length] = (j*31)+i;
        }
      }
    }
  }

  return returnArr;
}

function sort_numeric(a,b)
{
  a = a - 0;
  b = b - 0;
  if(a > b)
      return 1
   if(a < b)
      return -1
   return 0
}