/*

Tour Calendar
Copyright adamantean ltd. 2010

*/

// set defaults (start month, year)
var startyear = 2009;
var startmonth = 2;
var currenttourdateid = 0;

// setup reference arrays
var monthnamearray = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var daynamearray = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");

// initialise vars
var calendardisplaydiv = '';
var calendarmonth = 0;
var calendaryear = 0;

// implement indexOf for browsers that do not support it (ie IE)
if (!Array.indexOf) {
  Array.prototype.indexOf = function(obj) {
    for(var i=0; i<this.length; i++) {
      if(this[i]==obj) {
        return i;
      }
    }
    return -1;
  }
}

function getPosition(obj){
  var topValue= 0,leftValue= 0;
  while(obj){
    leftValue+= obj.offsetLeft;
    topValue+= obj.offsetTop;
    obj= obj.offsetParent;
  }
  finalvalue = new Array(leftValue,topValue);
  return finalvalue;
}

function calendarSubmit(numberseats,tourid,tourdateid) {

  document.getElementById('tourid').value = tourid;
  document.getElementById('tourdateid').value = tourdateid;
  document.getElementById('numberofseats').value = numberseats;

  document.getElementById('tourcalendar').submit();

}

function calendarShowPopout(link,content) {

  // set popout
  var popout = document.getElementById('calendarpopout');

  // set content
  popout.innerHTML = content;

  // set position
  var positionarray = getPosition(link);
  popout.style.top = positionarray[1]+15;
  popout.style.left = positionarray[0]-popout.offsetWidth+10;

  // make visible
  popout.style.visibility = 'visible';

}

function calendarHidePopout() {

  // set popout
  var popout = document.getElementById('calendarpopout');

  // make invisible
  popout.style.visibility = 'hidden';

}

function calendarSetTourDateId(link,tourdateid,dateid) {

  // set selected class
  var selectedclass = ' selected';

  // set tuor date id in form variable
  document.getElementById('tourdateid').value = tourdateid;

  if (currenttourdateid != '') {
    if(currenttourdateid.substr(0,7) == dateid.substr(0,7)) {
      var elementid = 'date'+currenttourdateid;
      document.getElementById(elementid).className = document.getElementById(elementid).className.replace(selectedclass,'');
    }
  }

  // set tour date id in javascript
  currenttourdateid = dateid;

  link.className += selectedclass;

}

function createRequestObject() {
  var ro;
  var browser = navigator.appName;
  if (browser == "Microsoft Internet Explorer") {
    ro = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
    ro = new XMLHttpRequest();
  }
  return ro;
}

var http = createRequestObject();

function sndReq(displaydiv,year,month) {
  month = month+1;
  http.open('get', 'rpc.php?tourid='+tourid+'&year='+year+'&month='+month);
  http.onreadystatechange = handleResponse;
  http.send(null);
}

function handleResponse() {
  if (http.readyState == 4) {
    var response = http.responseText;
    var return_data = new Array();
    var tour_date_details_array = new Array();
    var tourdatesref = new Array();
    var tourdates = new Array();
    if (response.indexOf('|' != -1) && response.length > 0) {
      return_data = response.split('|');
      for(i=0;i<return_data.length;i++) {
        if (return_data[i].indexOf('}') == -1) {
          var tour_date_details = return_data[i].split(',');
          var tourdateid = tour_date_details[1];
          tourdates[tourdateid] = calendarCreateDateArray(tour_date_details);
          tourdatesref[i] = tour_date_details[1];
        } else {
          var tour_date_tour_id_array = return_data[i].split('}');
          for(ii=0;ii<tour_date_tour_id_array.length;ii++) {
            var tour_date_details = tour_date_tour_id_array[ii].split(',');
            var tourdateid = tour_date_details[1];
            if (ii == 0) {
              tourdates[tourdateid] = new Array();
            }
            tourdates[tourdateid][ii] = calendarCreateDateArray(tour_date_details);
            tourdatesref[i] = tour_date_details[1];
          }
        }
      }
      calendarUpdate(calendardisplaydiv,calendaryear,calendarmonth,tourdates,tourdatesref);
    } else {
      calendarUpdate(calendardisplaydiv,calendaryear,calendarmonth,tourdates,tourdatesref);
    }
  }
}

function calendarCreateDateArray(tour_date_details) {

  var tour_date_details_array = new Array();

  tour_date_details_array['id'] = tour_date_details[0];
  tour_date_details_array['event_id'] = tour_date_details[5];
  tour_date_details_array['event_date'] = tour_date_details[1];
  tour_date_details_array['price'] = tour_date_details[2];
  tour_date_details_array['price_c'] = tour_date_details[3];
  tour_date_details_array['seats_status'] = tour_date_details[4];
  tour_date_details_array['event_title'] = tour_date_details[6];

  return tour_date_details_array;
}

function calendarGetTourDates(displaydiv,year,month) {

  calendarmonth = month;
  calendaryear = year;
  calendardisplaydiv = displaydiv;

  sndReq(displaydiv,year,month);

}

// function to display calendar (accepts name of div to use)
function calendarUpdate(displaydiv,year,month,tourdates,tourdatesref) {

  // hide popout
  calendarHidePopout();

  // initiaise html
  var html = '';

  // set date
  var myDate=new Date();
  myDate.setFullYear(year);
  myDate.setDate(1);
  myDate.setMonth(month);

  // get current month/year
  var monthcurrent = myDate.getMonth();
  var yearcurrent = myDate.getFullYear();
  var monthname = monthnamearray[monthcurrent];

  // get the day of the week for the first day of the month
  var firstday = myDate.getDay();

  // get number of days in month
  myDate.setMonth(myDate.getMonth()+1);
  myDate.setDate(myDate.getDate()-1);
  var numberdays = myDate.getDate();

  // set next/prev month and year
  var monthnext = monthcurrent+1;
  var monthprev = monthcurrent-1;

  // header
  html = '<div id="calendarheader"><a class="floatleft" href="#" onClick="javascript:calendarGetTourDates(\''+displaydiv+'\','+yearcurrent+','+monthprev+');return false;"><img src="/images/arrow-left.gif" border="0"></a><a class="floatright" href="#" onClick="javascript:calendarGetTourDates(\''+displaydiv+'\','+yearcurrent+','+monthnext+');return false;"><img src="/images/arrow-right.gif" border="0"></a><strong>'+monthname+' '+yearcurrent+'</strong></div>';

  html += '<ul class="calendar">';

  // iterate over weekdays
  for(i=0;i<daynamearray.length;i++) {
    html += '<li class="heading">'+daynamearray[i].substring(0,3)+'</li>';
  }

  // iterate over days
  var daynumber = 1;
  for (i=1;i<=numberdays+firstday;i++) {
    var cellcontent = '';
    if (i <= firstday) {
      cellcontent += '&nbsp;';
    } else {
      var dateid = yearcurrent+'-'+(monthcurrent+1)+'-'+daynumber;
      if (tourdatesref.indexOf(dateid) != '-1') {
        if (displaydiv == 'calendarboxout') {
          popoutcontent = '<a class=\\\'floatright\\\' href=\\\'#\\\' onClick=\\\'calendarHidePopout();return false;\\\'>[close]</a><strong>Tours on '+daynumber+' '+monthnamearray[monthcurrent]+' '+yearcurrent+'</strong>&nbsp;&nbsp;<br><br>';
          for (ii=0;ii<tourdates[dateid].length;ii++) {
            if (tourdates[dateid][ii]['seats_status'] != 0) {
              popoutcontent += '<div class=\\\'floatright\\\'>Book <select onChange=\\\'javascript:calendarSubmit(this.value,'+tourdates[dateid][ii]['event_id']+','+tourdates[dateid][ii]['id']+');\\\'name=\\\'selectseats\\\'><option value=\\\'\\\'>0</option><option value=\\\'1\\\'>1</option><option value=\\\'2\\\'>2</option><option value=\\\'3\\\'>3</option><option value=\\\'4\\\'>4</option><option value=\\\'5\\\'>5</option></select> seats</div>';
            } else {
              popoutcontent += '<div class=\\\'floatright\\\'>SOLD OUT</div>';
            }
            popoutcontent += '<a href=\\\'tour-information.html?tourid='+tourdates[dateid][ii]['event_id']+'\\\'>'+tourdates[dateid][ii]['event_title']+'</a>&nbsp;&nbsp;&nbsp;<br>';
            popoutcontent += '<em>Adults: '+tourdates[dateid][ii]['price']+', Concessions '+tourdates[dateid][ii]['price_c']+'</em><br>';
          }
          cellcontent += '<a';
          cellcontent += ' href="#" onMouseOver="javascript:calendarShowPopout(this,\''+popoutcontent+'\');return false;"';
          cellcontent += '><span>'+daynumber+'</span></a>';
        } else {
          var tourdateid = tourdates[dateid]['id'];
          var cellclass = 'status'+tourdates[dateid]['seats_status'];
          if (currenttourdateid == dateid) {
            cellclass += ' selected';
          }
          cellcontent += '<a id="date'+dateid+'" class="'+cellclass+'"';
          if(tourdates[dateid]['seats_status'] != 0) {
            popoutcontent = '<a class=\\\'floatright\\\' href=\\\'#\\\' onClick=\\\'calendarHidePopout();return false;\\\'>[close]</a><strong>'+daynumber+' '+monthnamearray[monthcurrent]+' '+yearcurrent+'</strong>&nbsp;&nbsp;<br><br>';
            popoutcontent += 'Adults: '+tourdates[dateid]['price']+'<br>';
            popoutcontent += 'Concessions: '+tourdates[dateid]['price_c']+'<br>';
            cellcontent += ' href="#" onMouseOver="javascript:calendarShowPopout(this,\''+popoutcontent+'\');return false;" onClick="javascript:calendarSetTourDateId(this,'+tourdateid+',\''+dateid+'\');return false;"';
          }
          cellcontent += '><span>'+daynumber+'</span></a>';
        }
      } else {
        cellcontent += '<span>'+daynumber+'</span>';
      }
      daynumber++;
    }
    var cellclass = '';
    if ((i-1)/7 == Math.floor((i-1)/7)) {
      cellclass += ' rowstart';
      html += '<div class="cleardiv">&nbsp;</div>';
    }
    html += '<li class="'+cellclass+'">'+cellcontent+'</li>';
  }
  html += '</ul>';


  // add clearing div
  html += '<div class="cleardiv">&nbsp;</div>';

  // update calendar
  document.getElementById(displaydiv).innerHTML = html;

}
