/*

GZIP CONTENT DELIVERY
Copyright 2010 Fat Publisher

All rights reserved. Republication, redistribution,
replication or use of Fat Publisher content / scripting
is strictly prohibited without the prior written consent of Fat Publisher.

www.fatpublisher.com.au

Content generated : 07:03:02 am 07 September 2010

*/

/**
 * Calendar JS
 * Requires MOOTOOLS 1.2b2 or above
 * 
 */

var Calendar = {
	/**
	 * 	Calendar fields come in select and text field variations
	 */
	popupId : 'calendar-popup', //calendar popup id
	dateField : {}, 			//Stores the date field. 
	dates : {},					//Stores all sorts of date related stuff.
	dateFieldType :	'select',
	callback : '',
	dateSeparator : '-',
 	initCal : function(formName, dateFieldPrefix, elementID, startYearA, endYearA, obj, parameters) {	
		
		//Callback
		Calendar.callback = Calendar.boundaries = '';
		
		if (typeof(parameters) == 'string') {
			Calendar.callback = parameters;
		} else if (typeof(parameters) == 'object') {
			if (parameters.callback) {
				Calendar.callback = parameters.callback;
			}
			if (parameters.boundaries) {
				eval("Calendar.boundaries = "+parameters.boundaries+'(dateFieldPrefix)');
			}
		}
		
		//remove any instance of a calendar that may already exist.
		var calendarPopup = $('calendar-popup');
		
		if (calendarPopup) {
			calendarPopup.dispose();
		}
		
		//Store form object
		Calendar.myForm = $(formName);
		Calendar.anchor = $(obj);
		//check if its using select or text fields 
		
		
		if (Calendar.myForm.elements[dateFieldPrefix]){
			Calendar.dateFieldType = 'text';
			var fieldId = dateFieldPrefix.replace(/[\[\]]/ig,'_');
			Calendar.dateField.textField = $(fieldId);
			//get day month and year dd/mm/yy
			var bits = Calendar.dateField.textField.value.split(Calendar.dateSeparator);
			
			var curDay = '';
			var curMonth = '';
			var curYear = '';
			
			//for empty and default selections
			var correctFormat = true;
			
			if (bits.length == 3 && Calendar.dateField.textField.value != 'dd/mm/yy') {
				var curDay = Number(bits[0]);
				var curMonth = Number(bits[1]) - 1;
				var curYear = bits[2];
				if (curYear.length != 4) {
					curYear =  (curYear.charAt(0) == '0') ? '20'+curYear : '19'+curYear;	
				}
				curYear = Number(curYear);
				
				if (curDay > 31 || curMonth  > 12 || curYear > endYearA) {
					correctFormat = false;
				}
			}
			if (!correctFormat) {
				var curDay = '';
				var curMonth = '';
				var curYear = '';
			}
			
		} else {
			Calendar.dateFieldType = 'select';
			var dayFieldId = dateFieldPrefix+'[Day]';
			var fieldId = dayFieldId.replace(/[\[\]]/ig,'_');
			Calendar.dateField.year 	= Calendar.myForm.elements[dateFieldPrefix+'[Year]'];
			Calendar.dateField.month 	= Calendar.myForm.elements[dateFieldPrefix+'[Month]'];
			Calendar.dateField.day 		= $(fieldId);
			//Set the Current Date to what is shown on the select
			var curYear 	= Calendar.dateField.year.value;
			var curMonth 	= Calendar.dateField.month.selectedIndex - 1;
			var curDay 		= Calendar.dateField.day.value;
		}
		
		Calendar.processDate = new Date();
		Calendar.dates.todaysDate = Calendar.processDate.getDate();
		Calendar.dates.thisMonth = Calendar.processDate.getMonth();
		Calendar.dates.thisDay = Calendar.processDate.getDay();
		Calendar.dates.thisYear = Calendar.processDate.getFullYear();
	    Calendar.dates.startYear = startYearA;
	    Calendar.dates.endYear = endYearA;
		
		curMonth = curMonth <= 0 ? Calendar.dates.thisMonth : curMonth;
		curYear = curYear == '' ? Calendar.dates.thisYear : curYear;
		curDay = curDay == '' ? Calendar.dates.thisDay : curDay;
		
		
		// hack for ahh: property add/edit
		var tmpStartDate = $('startDate');
		if(tmpStartDate && dateFieldPrefix != 'startDate') {
			if(tmpStartDate.value != 'dd/mm/yy') {
				var tmpStartDateValue = tmpStartDate.value.split(Calendar.dateSeparator);
				curYear = (tmpStartDateValue[2].charAt(0) == '0') ? '20'+tmpStartDateValue[2] : '19'+tmpStartDateValue[2];
				curMonth = Math.floor(tmpStartDateValue[1]-1);
			}
		}
		// hack for ahh: index
		var tmpStartDate = $('dfrom');
		if(tmpStartDate && dateFieldPrefix != 'dfrom') {
			if(tmpStartDate.value != 'dd/mm/yy') {
				var tmpStartDateValue = tmpStartDate.value.split(Calendar.dateSeparator);
				curYear = (tmpStartDateValue[2].charAt(0) == '0') ? '20'+tmpStartDateValue[2] : '19'+tmpStartDateValue[2];
				curMonth = Math.floor(tmpStartDateValue[1]-1);
			}
		}
		
		
		Calendar.processDate.setDate(curDay);
		Calendar.processDate.setYear(curYear);
		Calendar.processDate.setMonth(curMonth);
		Calendar.drawCal();
	},
		
	resetCal : function() {
		Calendar.processDate = new Date();   
		$('today_'+Calendar.popupId).set('text',Calendar.processDate.toLocaleDateString());
	    Calendar.drawCal();
	},
	setToday : function() {
		Calendar.processDate = new Date();   
		Calendar.updateElements(Calendar.processDate.getDate() - 1);
	},
	setYear: function(sVal) {
		Calendar.processDate.setFullYear(Number(sVal.value));
		Calendar.drawCal();
	},
	
	setMonth: function(sVal) {
		Calendar.processDate.setMonth(Number(sVal.value));
		Calendar.drawCal();
	},
	
	incMonth: function(amt) {
		var limitReached = false;
		//Corrects safari bug - cant go back from January	
		if (amt <0 && Calendar.processDate.getMonth() == 0){
	        if (Calendar.processDate.getFullYear() -1 >= Calendar.dates.startYear){
			    Calendar.processDate.setYear(Calendar.processDate.getFullYear() -1);
	    		Calendar.processDate.setMonth(11);
	        } else {
	            limitReached = true;
	        }
		} else {
	        if ((Calendar.processDate.getMonth() == 11) && (Calendar.processDate.getFullYear() == Calendar.dates.endYear) && amt >0){
	            limitReached = true;
	        } else {
	            Calendar.processDate.setMonth(Calendar.processDate.getMonth()+amt);	              
	        }
		}
	    if (!limitReached){
	    	Calendar.drawCal();
	    } else {
	       $(Calendar.popupId+'_msg').set('text','Limit Reached');	
	    }
	},
	
	incYear : function(amt){
		if ((amt < 0 && Calendar.processDate.getFullYear() == Calendar.dates.startYear) || (amt > 0 && Calendar.processDate.getFullYear() == Calendar.dates.endYear)){
	        $(Calendar.popupId+'_msg').set('text','Limit Reached');	
	    } else {
	        Calendar.processDate.setYear(Calendar.processDate.getFullYear() +amt);
	        Calendar.drawCal();	
	    }
	},
	
	buildCalendarHtml : function(calendarHtml){
	    var Months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	    var currentDate = new Date();
	    var string = '';
	    string += '<table class="calendar" cellpadding="0" cellspacing="0"><tr><td colspan="7" style="width:auto !important">';
	    string += '<div id="today_'+Calendar.popupId+'" class="dateField">'+currentDate.toLocaleDateString()+'</div> </td> </tr>';
	    string += '<tr><td colspan="7"><table class="calendarNav" cellpadding="0" cellspacing="0"><tr>';
	    var prevMonth  = '<td rowspan="2" ><a href="javascript:Calendar.incMonth(-1)">&lt;&lt; </a></td>';
	    string += prevMonth+'<td rowspan="2"><select name="cal_month" id="cal_month" onchange="Calendar.setMonth(this)">';
	    
	    var selectedMonth = Calendar.processDate.getMonth();
	    
	    //Highlight selected month
	    for (var j=0 ; j<12 ; j++)
	    {	
	        var selectedOption = (j == selectedMonth) ? ' selected="selected "'  : ''  ;			
	        string += '<option value="'+j+'" '+selectedOption+' >'+Months[j]+'</option>';                
	    }
	    string += '</select></td>';
	    string += '<td rowspan="2"><a href="javascript:Calendar.incMonth(1)">&gt;&gt;</a></td>';
	    string += '<td rowspan="2" style="text-align:right; !important">';
	    
	    //Draw select boxes for year
	    var yearSelection = '<select name="cal_year" id="cal_year" onchange="Calendar.setYear(this)">';
	    var selectedYear = Calendar.processDate.getFullYear();
	
	    for(var p=0; p <= Calendar.dates.endYear - Calendar.dates.startYear ; p++){
	        var theYear = Calendar.dates.endYear - p;
	        var selectedOption = (theYear == selectedYear) ? 'selected="selected"' : '';
	        yearSelection += '<option value="'+theYear+'"  '+selectedOption+'>'+theYear+'</option>'; 
	    }
	
	    yearSelection += '</select>';
	    
	    string += yearSelection;    
	    string += '&nbsp;</td><td><a href="javascript:Calendar.incYear(1)" class="calUpArrow"></a></td></tr>';
	    string += '<tr><td><a href="javascript:Calendar.incYear(-1)" class="calDownArrow"></a></td></tr>';
	    string += '</table></td></tr>';
	    string += calendarHtml;
	    string += '<tr bgcolor="#EEEEEE">';
	    string += '<td colspan="7">';
	    string += '<table class="calendarNav"><tr><td>';
	    string += '<div id="'+Calendar.popupId+'_msg" style="width:90px"></div>';
	    string += '</td>';
	    string += '<td style="text-align:right"><input type="button" name="cancel" value=" cancel " onclick="Calendar.closeCalendar()"/>&nbsp;</td>';
	    string += '<td align="right">';
	    string += '<input type="button" name="today" value=" today "  onclick="Calendar.setToday()"/>&nbsp;';
	    string += '</td></tr></table>';
	    string += '</td></tr></table>'; 
	    
	    return string;
	},
	
	drawCal: function() {	
	    //String stores calendar html string.
	    var string = '';
		
		var MonthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);	
		var daysOfWeek = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');	
		var totalDays;
		Calendar.processDate.setDate(1);
		
		var processedMonth = Calendar.processDate.getMonth();
		var processYear = Calendar.processDate.getFullYear();
		
		if (processedMonth == 1) { // February
	      if (processYear%400==0 || (processYear%4 == 0 && processYear%100!=0) ) MonthDays[1] = 29;
	   	}
		
		var startDay = Calendar.processDate.getDay();
		totalDays = MonthDays[processedMonth];	
		
		theYear = Calendar.processDate.getFullYear();
		//check boundaries
		var boundaryStartDay = 0;
		
		if (Calendar.boundaries.startDate) {
			var startDate = Calendar.boundaries.startDate;
			
			//Check if the start date boundary is valid for what we are displaying
			if (startDate.getFullYear() <= processYear && processedMonth <= startDate.getMonth()) {
				if (processedMonth == startDate.getMonth()) {
					boundaryStartDay = startDate.getDate() - 1;
				} else {
					//This month cannot be selected at all
					boundaryStartDay = 50;
				}
			}
		}
		
		var counter = 1;
		
		string += '<tr>';
		for (var i = 0; i < 7 ; i ++)
			string += '<th>'+daysOfWeek[i]+'</th>';
		string += '</tr>';
	    
		for (var i=0;i<6;i++)
		{
			if (counter-startDay > totalDays) {
				break;
			}
			string += '<tr>';
			for (var j=0;j<7;j++)
			{
				var itsToday = (((counter-startDay)==Calendar.dates.todaysDate) && (Calendar.processDate.getMonth() == Calendar.dates.thisMonth) && (Calendar.processDate.getFullYear() == Calendar.dates.thisYear))? ' class="today" ':' ';					
	            
				string += '<td >';
				if (counter-startDay >0  && (counter-startDay <=totalDays)){
					var theDay = counter-startDay-1;
					
					var href = ' href="javascript:Calendar.updateElements('+theDay+');" ';
					var ancClass = '';
					if (theDay < boundaryStartDay) {
						href = itsToday = '';	
						ancClass = ' class="invalid" ';
					}
	                string += '<a'+itsToday+ancClass+href+'>'+(counter-startDay)+'</a>';
				}
				string += '</td>';
				counter++;
			}		
			string += '</tr>';
		}		
		
		var calendarHtml = '';
		calendarHtml += Calendar.buildCalendarHtml(string);
		
		//Get calendar co-ords (underneath the date field)
		if (Calendar.dateFieldType == 'select') {
			var coords = Calendar.dateField.day.getCoordinates();		
		} else {
			var coords = Calendar.dateField.textField.getCoordinates();
		}
		//Find page size limits
		var windowSize = window.getSize();
		//calc left position
		var leftPos = coords.left+2+83;

		if (coords.left+240+83 > windowSize.x) {
			leftPos = windowSize.x - 240;
		}
		var elementHeight = coords.height;	
		
		var cElement = $(Calendar.popupId);
		
		
		if (!cElement) {
			
			var cElement = new Element('div',{
				'id' : Calendar.popupId,
				'class' : 'calendarBox',
				'styles' : {
					'top' : (coords.top+elementHeight)+'px',
					'left' : leftPos+'px'
				}
			});
			cElement.set('html',calendarHtml);
			cElement.inject(document.body);
		} else {
			cElement.set('html',calendarHtml);
		}
		
		
		//Add iframe behind the calendar
		if (document.all && !window.opera) {
			if (!$('ieIFRAME')) {
				var ieFrame = new Element('iframe', {
					'src' :'',
					'id' : 'ieIFRAME',
					'class' : 'ieCalendarIframe',
					'scrolling' : 'no',
					'frameborder' : '0',
					'styles' : {
						'top' : (coords.top+elementHeight)+'px',
						'left' : leftPos+'px',
						'height' : cElement.getCoordinates().height+'px'
					}
				});
				ieFrame.inject(document.body);
			}
		}
	},
	
	closeCalendar: function(){
		if (document.all && !window.opera) {
			$('ieIFRAME').dispose();	
		}
		$(Calendar.popupId).dispose();
	},
	
	updateElements: function(day){
	    var	valid = true;
		
		var yearIndex = (Calendar.dates.endYear - Calendar.processDate.getFullYear());
	
		if (Calendar.dateFieldType == 'select') {
			Calendar.dateField.year.selectedIndex = yearIndex + 1;
			Calendar.dateField.month.selectedIndex = Calendar.processDate.getMonth() +1;
			Calendar.dateField.day.selectedIndex = day +1; 	
		} else {
			var d = [];
			d.push(String(day +1));
			d.push(String(Calendar.processDate.getMonth()+1));
			d.push(String(Calendar.processDate.getFullYear()));
			if (d[0].length<2) {
				d[0] = '0' + d[0];
			}
			if (d[1].length<2) {
				d[1] = '0' + d[1];
			}
			var dateValue = d.join(Calendar.dateSeparator);
			if (Calendar.callback != '') {
				eval("var valid = "+Calendar.callback+'(Calendar.dateField.textField, dateValue);');
			}
			if (valid) {
				Calendar.dateField.textField.value  = dateValue;
			}
		}	
		
		if (valid) {
			Calendar.closeCalendar();
		}
		
	}
}



//Date selection
var ds = $('date-selection');

var calClass = 'calendar-oth';
if (Browser.Engine.trident5) {
	calClass = 'ie7';
} else if (Browser.Engine.trident4) {
	calClass = 'ie6';
} else if (Browser.Engine.webkit) {
	calClass = 'safari';
}



// attached through the form itself.
function attach_calendars(service_id) {

	//nitCal : function(formName, dateFieldPrefix, elementID, startYearA, endYearA, obj, parameters) {	
	if ((service_id==2) || (service_id==1002)) {
		var calButtonA = new Element('img',{
			'src' : '/images/calendar.gif',
			'class' : 'calendar-icon '+calClass,
			'alt'	: 'calendar',
			'hspace' : '0', 
			'events' : {
					'click' : function(){
						trash = this.parentNode.getAttribute('id').split('-');
						service_id = trash[2];
						return Calendar.initCal('get-price-'+service_id,'fromDate-'+service_id,'',2008,2011,this);
					}
				}
		});
		calButtonA.inject('date-from-'+service_id);
		var calButtonB = new Element('img',{
			'src' : '/images/calendar.gif',
			'class' : 'calendar-icon '+calClass,
			'alt'	: 'calendar',
			'hspace' : '0', 
			'events' : {
					'click' : function(){
						trash = this.parentNode.getAttribute('id').split('-');
						service_id = trash[2];
						return Calendar.initCal('get-price-'+service_id,'toDate-'+service_id,'',2008,2011,this);
					}
				}
		});

		calButtonB.inject('date-to-'+service_id);

		$('fromDate-'+service_id).addEvent('change', function() {
			update_duration();
		});
		$('toDate-'+service_id).addEvent('change', function() {
			update_duration();
		});
		window.update_duration_interval = setInterval("update_duration("+service_id+")", 250);
		return;
	}

	var calButtonA = new Element('img',{
		'src' : '/images/calendar.gif',
		'class' : 'calendar-icon '+calClass,
		'alt'	: 'calendar',
		'hspace' : '0', 
		'events' : {
				'click' : function(){
					trash = this.parentNode.getAttribute('id').split('-');
					service_id = trash[2];
					return Calendar.initCal('get-price-'+service_id,'fromDate-'+service_id,'',2008,2011,this);
				}
			}
	});
	calButtonA.inject('date-from-'+service_id);

}

function update_duration(service_id) {
	$('duration-'+service_id).innerHTML = '';
	fromDateArray = $('fromDate-'+service_id).value.split(Calendar.dateSeparator);
	if (fromDateArray.length!=3) {
		return;
	}
	if ($('toDate-'+service_id).value=='') {
		$('toDate-'+service_id).value = $('fromDate-'+service_id).value;
	}
	toDateArray = $('toDate-'+service_id).value.split(Calendar.dateSeparator);
	if (toDateArray.length!=3) {
		return;
	}
	fromDate = new Date(fromDateArray[2], fromDateArray[1]-1, fromDateArray[0]);
	toDate = new Date(toDateArray[2], toDateArray[1]-1, toDateArray[0]);
	if (toDate<fromDate) {
		$('toDate-'+service_id).value = $('fromDate-'+service_id).value;
		return;
	}
	total_days = Math.ceil(toDate.getTime() - fromDate.getTime())/86400000;
	months = Math.floor(total_days / 30);
	if (months==0) {
		months = '';
	} else if (months==1) {
		months = months + ' month';
	} else {
		months = months + ' months';
	}
	days = (total_days % 30);
	if (days == 0) {
		days = '';
	} else if (days == 1) {
		days = days + ' day';
	} else {
		days = days + ' days';
	}
	comma = '';
	if ((months!='') && (days!='')) {
		comma = ', ';
	}
	$('duration-'+service_id).innerHTML = months + comma + days;
}
