function changeMonth(mAct){

	if(mAct == 'Next'){

		cMonth += 3;

		if(cMonth > 12){

			cMonth -= 12;

			cYear++;

		}

	}

	else{

		cMonth -= 3;

		if(cMonth < 1){

			cMonth = 12 + cMonth;

			cYear--;

		}

	}



	cAct = mAct;

	var spid = getElementById('space_id').value;

	requestMonth(cMonth, cYear, spid);

}



function changeSpace(sID){

	requestMonth(cMonth, cYear, sID);

}



function requestMonth(rMonth, rYear, sID){

	disableInt();

	makePOSTRequest(aScript, 'Action=ChangeMonth&month='+rMonth+'&year='+rYear+'&space_id='+sID, 'loadMonth', 'text/html');

}



function disableInt(){

	getElementById('space_id').disabled = true;

	oCal = getElementById('calBox').innerHTML;

	getElementById('calBox').innerHTML = '<table width="100%" height="100%"><tr><td valign="middle" align="center"><b>Loading please wait ...</b></td></tr></table>';

}



function enableInt(){

	getElementById('space_id').disabled = false;

	getElementById('calBox').innerHTML = '';

}



function findUserSelected(){

	var rs = document.getElementsByClassName('resEntBox');

	var rid = getElementById('space_id').value;

	var tmp, tmp2;

	for(var i=0;i < rs.length;i++){

		tmp = rs[i].id.toString().split('_');

   	tmp2 = tmp[1].toString().split('-');

		if(tmp2[0])

			if(tmp2[1] == rid)

				setDayClass(tmp2[0], 'cal_pend');

	}

}



function setDayClass(dId, dClass){

	var tmp = getElementById('calday_' + dId);

	if(tmp){

		if(!cClasses[dId])

			cClasses[dId] = tmp.className;



		if(!dClass)

			dClass = cClasses[dId];



		tmp.className = dClass;

	}

}



function loadMonth(htreq){

	var rT = htreq.responseText;



	enableInt();

	if(rT == 'false'){

		getElementById('calBox').innerHTML = oCal;

		alert('Reservation should be made ' + rsvp_time + ' weeks prior to event to ensure space availability.');

		if(cAct == 'Next'){

			cMonth -= 3;

			if(cMonth < 1){

				cMonth = 12 + cMonth;

				cYear--;

			}

		}

		else{

			cMonth += 3;

			if(cMonth > 12){

				cMonth -= 12;

				cYear++;

			}

		}

	}

	else{

		getElementById('calBox').innerHTML = rT;

		findUserSelected();

	}

}



function selectDay(dDay){

	var dIDt = dDay.id.split('_');

	var dID = dIDt[1];

	var spObj = getElementById('space_id');

	var sID = spObj.value;

	var fID = dID + '-' + sID;



	if(!getElementById('rsvp_'+fID)){

		if(!dTimes[fID])

			requestTime(dID, sID, fID, 1);

		else

			createDay(dID, sID, fID);

	}

	else{

		addTime(fID);

	}

		/*alert('You cannot book this room twice in a day.');*/

}



function createDay(dID, sID, fID){

	var resBox = getElementById('resBox');

	var spObj = getElementById('space_id');

	var sID = spObj.value;

	var fID = dID + '-' + sID;



	var dv = createElement('div', 'id', 'rsvp_' + fID, 'class', 'resEntBox');

	var spT = spObj.options[spObj.selectedIndex].text;



	var wm = getElementById('rsvp_-1');

	if(wm){

		resBox.removeChild(wm);

	}



	resBox.appendChild(dv);

	var dvStr = '<div class="calLegTxt">' + spT + ' - ' + getDateString(dID) + '<input type="hidden" name="rsvp[]" value="'+fID+'" /></div>';

	dv.innerHTML = dvStr;

	dv2 = createElement('div', 'class', 'resTimeBox', 'id', 'rsvpadd_' + fID);

	dv.appendChild(dv2);

	dvStr = '<span style="color:green">+</span> <a href="" onclick="return addTime(\'' + fID + '\')">Add an additional time period for this date</a>';

	dv2.innerHTML = dvStr;

	dCounts[fID] = 0;

	addTime(fID);

	rCount++;

	setDayClass(dID, 'cal_pend');

}



function addTime(fID){

	var rsa = getElementById('rsvpadd_' + fID);

	if(rsa){

		if(!dTimes[fID]){

			var sID, dID, tmp;

			tmp = fID.toString().split('-');

			sID = tmp[1];

			dID = tmp[0];

			requestTime(dID, sID, fID, 2);

			return false;

		}



		if(!dCounts[fID])

		  dCounts[fID] = 0;



		var dv2 = createElement('div', 'class', 'resTimeBox', 'id', 'rsvptime_' + fID);

		dv2.appendChild(createText('Start Time: '));

		var ddt = createTimeDD('rsvpStart_', fID, dCounts[fID], 730, "dStartChanged('"+fID+"', " + dCounts[fID] + ")", 0);

		dv2.appendChild(ddt);

		dv2.appendChild(createText(' Stop Time: '));

		ddt = createTimeDD('rsvpEnd_', fID, dCounts[fID], 1330, "dEndChanged('"+fID+"', " + dCounts[fID] + ")", 1);

		dv2.appendChild(ddt);

		dv2.appendChild(createText(' '));

		dv2.appendChild(createElement('input', 'type', 'button', 'value', 'Remove', 'onclick', "removeTime(this.parentNode, '"+fID+"', "+dCounts[fID]+")"));

		rsa.parentNode.insertBefore(dv2, rsa);



		if(!dTimeObjs[fID])

			dTimeObjs[fID] = ',';



		dTimeObjs[fID] += dCounts[fID] + ',';

		dCounts[fID]++;

	}



	return false;

}



function removeTime(Obj, fID, ObjId){

	if(confirm('Are you sure you want to remove this from your reservations?')){

		if(Obj){

			Obj.parentNode.removeChild(Obj);

			if(ObjId != -1)

				dTimeObjs[fID] = dTimeObjs[fID].replace(',' + ObjId + ',' , ',');



			var tmp = getElementById('rsvptime_' + fID);

			if(!tmp)

				removeDay(fID);

		}

	}

}



function removeDay(fID){

	var f = getElementById('rsvp_' + fID);

	var t = fID.toString().split('-');

	var d = t[0];

	if(f)

		f.parentNode.removeChild(f);



	rCount--;

	setDayClass(d);



	if(!rCount){

		var rB = getElementById('resBox');

		if(rB){

			rB.innerHTML = '<div class="resEntBox" id="rsvp_-1"><span class="calLegTxt" style="font-style:italic">No Pending Reservations.</span></div>';

		}

	}

}



function requestTime(dID, sID, fID, aID){

	makePOSTRequest('index.php', 'Action=RequestTime&dID=' + dID + '&sID=' + sID + '&fID=' + fID + '&aID=' + aID, 'getTimes', 'text/xml');

}



function getTimes(htreq){

	var xmldoc = htreq.responseXML;

	var root_node = xmldoc.getElementsByTagName('times').item(0);

	var obNode = root_node.getElementsByTagName('dID').item(0);

	var dID = obNode.firstChild.data;

	obNode = root_node.getElementsByTagName('sID').item(0);

	var sID = obNode.firstChild.data;

	obNode = root_node.getElementsByTagName('fID').item(0);

	var fID = obNode.firstChild.data;

	obNode = root_node.getElementsByTagName('aID').item(0);

	var aID = parseInt(obNode.firstChild.data, 10);



	if(!dTimes[fID]){

		dTimes[fID] = [];

		dTimes[fID][0] = [];

		dTimes[fID][1] = [];

		obNode = root_node.getElementsByTagName('stime');

		for(var i=0;i < obNode.length;i++){

			dTimes[fID][0][dTimes[fID][0].length] = parseInt(obNode[i].firstChild.data, 10);

		}



		obNode = root_node.getElementsByTagName('etime');

		for(var i=0;i < obNode.length;i++){

			dTimes[fID][1][dTimes[fID][1].length] = parseInt(obNode[i].firstChild.data, 10);

		}

	}



	if(aID == 2)

		addTime(fID);

	else if(aID == 1)

		createDay(dID, sID, fID);

}



function getUnavailableTimes(fID, aID){

	var aT = [];

	var sT;

	var stt = false;

	var tmp;

	for(var i=0;i < 24;i += 0.5){

		tmp = findTime(i, fID);

		if(!tmp && !stt){

			sT = i;

			stt = true;

		}



		if(tmp && stt){

			stt = false;

			aT[aT.length] = [sT, i];

		}

	}



	return aT;

}



function findTime(fTime, fID){

	for(var i=0;i < dTimes[fID][0].length;i++)

		if(convertToHours(dTimes[fID][0][i]) == fTime)

			return true;



	return false;

}



function convertToHours(sTime){

	var iT = parseInt(sTime.toString(), 10);

	var h = Math.floor(iT / 100);

	var m = (iT % 100) / 60;



	return h + m;

}



function addOptions(Obj, fID, dTime, dIndx){

	var dOpts = dTimes[fID][dIndx];

	var h, hh, m, ap;



	Obj.length = dOpts.length + 1;

	Obj.options[0].value = '';

	Obj.options[0].text = '';

	for(var i=0;i < dOpts.length;i++){

		Obj.options[i+1].value = dOpts[i];

		h = Math.floor(dOpts[i] / 100);

		m = dOpts[i] % 100;



		h = (!h) ? 0 : h;

		m = (!m) ? 0 : m;

		if(h > 11)

			ap = 'PM';

		else

			ap = 'AM';



		h = h % 12;

		if(!h)

			h = 12;



		Obj.options[i+1].text = sprintf('%02d:%02d %s', h, m, ap);

		/*

		if(dTime == dOpts[i])

			Obj.options[i].selected = true;

		*/

	}

}



function createTimeDD(ddPref, ddID, dCount, dTime, onChange, dEnd){

	var ddObj = createElement('select', 'name', ddPref+ddID+'['+dCount+']', 'id', ddPref+ddID+'['+dCount+']', 'onchange', onChange);



	addOptions(ddObj, ddID, dTime, dEnd);

	return ddObj;

}



function getDateString(myDate){

	var dDate = new Date();

	dDate.setFullYear(parseInt(myDate.substr(0, 4), 10));

	dDate.setMonth(parseInt(myDate.substr(4, 2), 10) - 1);

	dDate.setDate(parseInt(myDate.substr(6, 2), 10));



	var sD = dDate.getDate() + ' ' + dMonths[dDate.getMonth()];

	var yr = dDate.getYear();

	if(yr >= 70)

		yr += 1900;

	else

		yr += 2000;



	sD += ' ' + yr;



	return sD;

}



function dStartChanged(fID, dCount){

	var dS = getElementById('rsvpStart_' + fID + '[' + dCount + ']');

	var dE = getElementById('rsvpEnd_' + fID + '[' + dCount + ']');

	var sV, eV;



	if(dS.selectedIndex && dE.selectedIndex){

	  sV = parseInt(dS.value, 10);

	  eV = parseInt(dE.value, 10);



  	if(eV <= sV){

  		alert('Start Time should be less than End Time.');

  		mark_by_value(dS, '');

  	  return;

  	}



  	if(!checkTimeAvailability(sV, eV, fID, dCount)){

  		alert('You have selected a start and stop time that overlaps unavailable time already reserved. Please select a different, continuous time period.');

  		mark_by_value(dS, '');

  	}

  }

}



function dEndChanged(fID, dCount){

	var dS = getElementById('rsvpStart_' + fID + '[' + dCount + ']');

	var dE = getElementById('rsvpEnd_' + fID + '[' + dCount + ']');

	var sV, eV;



	if(dS.selectedIndex && dE.selectedIndex){

  	sV = parseInt(dS.value, 10);

  	eV = parseInt(dE.value, 10);



  	if(eV <= sV){

  		alert('Stop Time should be greater than Start Time.');

  		mark_by_value(dE, '');

  		return;

  	}



  	if(!checkTimeAvailability(sV, eV, fID, dCount)){

  		alert('You have selected a start and stop time that overlaps unavailable time already reserved. Please select a different, continuous time period.');

  		mark_by_value(dE, '');

  	}

  }

}



function checkTimeAvailability(sT, eT, fID, aID){

	var uT = getUnavailableTimes(fID, aID);

	var sTH = convertToHours(sT);

	var eTH = convertToHours(eT);

	var osT, oeT, osH, oeH;



	if(dTimeObjs[fID] != ','){

		var t = dTimeObjs[fID].substr(1, dTimeObjs[fID].length - 2);

		var ta = t.toString().split(',');

		for(var i=0;i < ta.length;i++){

		  if(ta[i] != aID){

		    osT = parseInt(getElementById('rsvpStart_' + fID + '[' + ta[i] + ']').value, 10);

		    oeT = parseInt(getElementById('rsvpEnd_' + fID + '[' + ta[i] + ']').value, 10);

		    osH = convertToHours(osT);

		    oeH = convertToHours(oeT);



		    if(sTH < oeH && eTH > osH)

		      return false;

		  }

		}

	}



	if(uT.length)

	  for(var i=0;i < uT.length;i++)

	    if(sTH < uT[i][1] && eTH > uT[i][0])

	      return false;



	return true;

}



function CheckForm(Form){

	if(!rCount){

		alert('Please book atleast 1 room before you continue.');

		return false;

	}



	for(var i=0;i < Form.elements.length;i++){

	  if(Form.elements[i].type == 'select-one')

	    if(Form.elements[i].name.indexOf('rsvp') != -1)

	      if(!Form.elements[i].selectedIndex){

	        alert('Please complete the times before you continue.');

	        return false;

	      }

	}



	return true;

}

