numDays=28;
idproduct = false;
idrate_option = false;
start_date = false;
end_date = '';
start_set = false;
range = new Object();
SelectionLocked = false;
propertyRows = new Array();
ViewDate = '';

LockedStart = false;
LockedEnd = false;

function Selection(elem) {
  LockedStart = false;
  LockedEnd = false;

  if(idproduct == false || idproduct != elem.p) {
    greyRows(elem.p);
  }
  if(idproduct !== false && (idproduct != elem.p || idrate_option!=elem.ro)) {
    for(var i=0;i<numDays;i++) {
      cell = document.getElementById('d-p'+idproduct+'ro'+idrate_option+'d'+i);
      if(cell) {
        cell.style.backgroundColor='#8DCA19';     //- Reset Row Color
        cell.style.color='#000';
      }
    }
    start_date = false;
  }
  if(!start_date!==false) {
    start_date = elem.d;
  }
  start_set = true;
  idproduct = elem.p;
  idrate_option = elem.ro;

  badcell = false;

  for(var i=0;i<numDays;i++) {
    cell = document.getElementById('d-p'+idproduct+'ro'+idrate_option+'d'+i);
    if(!cell && !badcell && i>=start_date) {
      badcell = true;
    }
    if(cell) {
      if(i==start_date) {
        cell.style.backgroundColor='#A7EF1E'; //- Set Cell Color when Selected.
        cell.style.color='#000';
        LockedStart=i;
        LockedEnd=i;
      }
      else if(i>=start_date && i<=elem.d && !badcell) {
        cell.style.backgroundColor='#A7EF1E'; //- Set Color for Days in between Start and End
        cell.style.color='#000';
        range[i] = true;
      }
      else {
        cell.style.backgroundColor='#8DCA19'; //- Reset Row Color
        cell.style.color='#000';
        range[i] = false;
      }
    }
  }
}

function LockSelection() {
  for(var i=0;i<numDays;i++) {
    if(range[i]) {
      cell = document.getElementById('d-p'+idproduct+'ro'+idrate_option+'d'+i);
      cell.style.backgroundColor='#A7EF1E';   //- Set Color for Selected Days
      cell.style.color='#000';
      if(LockedStart===false) {
        LockedStart=i;
      }
      if(LockedEnd===false || i>LockedEnd) {
        LockedEnd=i;
      }
    }
  }
  SelectionLocked = true;;
}

function greyRows(exclude) {
  /* for(var i=0; i<propertyRows.length; i++) {
    id = 'p'+propertyRows[i];
    elem = document.getElementById(id);
    if(id != exclude) {
      elem.style.backgroundColor='#cccccc';
    } else {
      elem.style.backgroundColor='#ffffff';
    }
  } */
}

function SelectionEnd(elem) {

}

function same_property(elem) {
  if(idproduct == elem.p && idrate_option == elem.ro)
    return true;
  else false;
}

function GenerateCode() {
  var atags = document.getElementsByTagName('a');
  for(var i in atags) {
    elem = atags[i];
    if(elem.id && elem.id.substring(0,3) == "d-p") {
      elem.p = elem.id.substring(elem.id.indexOf('p')+1, elem.id.indexOf('ro',3));
      elem.ro = elem.id.substring(elem.id.indexOf('ro')+2, elem.id.indexOf('d',3));
      elem.d = elem.id.substring(elem.id.indexOf('d',+3)+1);
      
      propertyRows[propertyRows.length] = elem.p+'|'+elem.ro;

      elem.onmouseover = function() { if(start_set==true && same_property(this) && SelectionLocked==false && GetProductType() != 'tours') Selection(this); };
      elem.onclick = function() {
        if(range[this.d]==false || !same_property(this)) {
          start_date = false;
          result = Selection(this);
          SelectionLocked=false;
        } else {
          LockSelection();
        }
        if (GetProductType() == 'tours') {
          LockSelection();
        }
/*
        if (GetProductType() == 'tours') {
          start_date = false;
          SelectionLocked=true;
          result = Selection(this);
          LockSelection();
          alert(result);
        }
*/

        if(typeof(window.event)!='undefined')
          window.event.returnValue = false;
        return false;
      };
    }
  }
  ViewDate = document.getElementById('viewing_date').value;
}

//window.onload = GenerateCode;
events['onLoad'].push('GenerateCode();');

//Convert YYYYMMDD to a js date object
function strToDate(dateStr) {
  var dateRegex = new RegExp('([0-9]{4})([0-9]{2})([0-9]{2})');
  var bits = dateRegex.exec(dateStr);
  if(!bits)
    return false;
  var day=parseInt(bits[3]);
  var month=parseInt(bits[2]);
  var year=parseInt(bits[1]);
  //The order below is critical, date after month will fail sometimes, skipping a month ahead.
  //The date object initialiser also fails
  var d=new Date();
  d.setDate(day);
  d.setMonth(month-1);
  d.setYear(year);
  return d;
}

// Left padding
function padleft(string, pad, newlength) {
  var left = "";
  var len = newlength-String(string).length;
  var i;
  for (i = 0; i<len; i++) {
    left+=pad;
  }
  return left+string;
}

function dateToStr(d) {
  return d.getFullYear()
         +padleft((d.getMonth()+1),'0',2)
         +padleft(d.getDate(),'0',2);
}

function addDaysDate(myDate,days) {
    return new Date(myDate.getTime() + days*24*60*60*1000);
}

function addDaysStr(dateStr,days) {
  var d=addDaysDate(strToDate(dateStr),days);
  return dateToStr(d);
}



function book() {
  
  var StartDateStr=addDaysStr(ViewDate,LockedStart);
  //alert("min_nights["+idproduct+"]["+LockedStart+"]=" + min_nights[idproduct][LockedStart]);
  if(LockedStart===false || LockedEnd===false) {
    alert('Make sure you have selected your dates');
  }
  else if(min_nights[idproduct] &&
          min_nights[idproduct][LockedStart] &&
          (min_nights[idproduct][LockedStart]-1) > (LockedEnd-LockedStart)) {
    alert("Sorry, this special has a "+min_nights[idproduct][LockedStart]+" night minimum stay.");
  }
  else {
    if(isNaN($('referrer').value)) {
      document.location.href=BASE_URL+'booking.php?idproduct='+idproduct+'&idrate_option='+idrate_option+'&view_date='+ViewDate+'&s='+LockedStart+'&e='+LockedEnd+'&r='+$('referrer').value;
    }else {
      document.location.href=BASE_URL+'booking.php?idproduct='+idproduct+'&idrate_option='+idrate_option+'&view_date='+ViewDate+'&s='+LockedStart+'&e='+LockedEnd;
    }
    return true;
  }

  //Cancel
  if(typeof(window.event)!='undefined')
    window.event.returnValue = false;
  return false;
  
}

function GetProductType() {
  var t = document.getElementById('p' + idproduct + '_type').innerHTML;
  return t;
}

function nolink() {
}

function adjustCellWidth() {
  var minPaneWidth=240;
  var cellID='ratesDiv';
  var otherPartsWidth=500;
  var sideBarID='sideNav'
  var cell = document.getElementById(cellID);
  if(cell == null) return;
  
  var browseWidth = document.documentElement.clientWidth;
  var sidebar=document.getElementById(sideBarID);
  var ratesWidth=document.getElementById('ratesTable').clientWidth;
  var sidebarWidth = (sidebar==null) ? 0 : document.getElementById(sideBarID).clientWidth;
  var ratesPaneWidth=browseWidth - sidebarWidth - otherPartsWidth;
  if(ratesPaneWidth > ratesWidth) ratesPaneWidth=ratesWidth;
  if(ratesPaneWidth < minPaneWidth) ratesPaneWidth=minPaneWidth;
  cell.style.width = ratesPaneWidth+'px';
  //alert((browseWidth - sidebarWidth - otherPartsWidth) + ' : ' + cell.style.width);
}
