var timeStart = 0;
var kamMap = null;
var modalReference = null;
var usingMobileInterface = false; 

window.addEvent('domready', function(e){
	Locale.use('en-GB');
	
	usingMobileInterface = Browser.Platform.android === true || Browser.Platform.ios === true;
	Cookie.write('isMobileInterface', usingMobileInterface);
	
	var installAirApp = document.id('downloadAirApp');
	if ( usingMobileInterface ){
		var diaryLink = document.id('topNavDiary');
		if ( diaryLink ) diaryLink.set('href', '/diary/list-events/');
	} else {
		if ( installAirApp ){
			installAirApp.addEvent('click', function(event){
				event.preventDefault();
							
				modalReference = new kamModal({
					title: 'Download AIR application',
					resizeToContent: false,
					width: 300,
					height: 250,
					onClose: function(){
						hideLoadingMask();
					}
				});
				modalReference.setContent( new Element('iframe', {
					src: installAirApp.get('href'),
					width: 300,
					height: 200
				}));
				modalReference.show();
			});
		}
	}
	
	if ( installAirApp && (usingMobileInterface || usingAirInterface) ){
		installAirApp.destroy();
	}
	
	timeStart = new Date();
	kamUi.disableAnimations('ie', 8);
	kamUi.setInitialiseOptions({									 
		kamForm : {	
			errorReporting : 'modal',
			ajaxCompleteHandler: jsonResponseHandler,
			errorModalOptions: {
				width: "450"
			},
			autoHandleJavascriptResponses: false
		}
	});
	kamUi.initialise();			 	
	datepickers();
	calInit();
//	ajaxLinks();		
	
	formInputs();	
	initUi();
//	addJob();
	collapsibleTable();	
	
//	initUi(element);
	addJob();
	addExpense();
	addFields();
//	datepickers();		
	reminderShow();
	disableDates();
	addDiary();
	addInvoiceWindow();
	addInvoiceAdjustmentWindow();
	
	if ( usingAirInterface ){
		var sharedFiles = document.id('sharedFiles');
		if ( sharedFiles ){
			sharedFiles.removeClass('hasDefaultAction');
			
			
			sharedFiles.getElements('tr').each( function(element){
				var defaultLink = document.id(element).getElement('a[class*=default]');
				if ( defaultLink ){
					element.addEvent('click', function(event){
						event.preventDefault();
						window.airDownloadFile(defaultLink.get('href'), defaultLink.get('title'));
					});
				}
			});
				
		}
	}
	
	// add the company sub type handlers
	companyTypeDropdownHandler(); 
//	defaultTableActions(element);
	
	disableDates();
	defaultTableActions();

	// set the search form to display a loading mask on submit
	var form = document.id('keywordSearchForm');
	if ( form ) form.addEvent('submit', showLoadingMask);
	
	var bodyId = document.body.get('id');
	if ( bodyId ){
		switch ( bodyId ){
			case 'reportTime':
				document.getElements('#mainContent table').each( function(table){
					table.toggleClass('noHoverHighlight', true);
					table.getElements('a').each( function(aElement){
						new Element('span', {
							html: aElement.get('html')
						}).replaces(aElement);
					});
				});
				break;
		}
	}
	
	

	// setup a select listener for the timesheet date
	var timesheetControls = document.id('timesheetControls');
	if ( timesheetControls ){
		timesheetControls.getElements('.extendedPicker').each( function(element){
			// retrieve the picker instance
			var picker = element.retrieve('kamDatePicker');
			if ( picker ){
				// add an event which listeners for the "select" event and store its value 
				picker.addEvent('select', function(date, element){
					var form = element.getElement('! form');
					if ( form ) form.submit();
				});
			}
		});
	}
	
	jsSortableTables();
});

function jsSortableTables(){
	document.getElements('table.jsSortable').each( function(element){
		new SortingTable(element);
	});
}

function addInvoiceWindow(){
	var invoiceForm = document.id('addInvoiceForm');
	if ( ! invoiceForm ) invoiceForm = document.id('editInvoiceForm');
	if( invoiceForm ){
		var timeBilledInput = document.id('timeBilled');
		var expensesBilledInput = document.id('expensesBilled');
		var totalBilledInput = document.id('totalBilled');
		
		var updateHandler = function(){
			var total = timeBilledInput.get('value').toFloat() + expensesBilledInput.get('value').toFloat();
			totalBilledInput.set('value', total.toFixed(2));
		};
		
		timeBilledInput.addEvent('change', updateHandler);
		timeBilledInput.addEvent('keyup', updateHandler);
		expensesBilledInput.addEvent('change', updateHandler);
		expensesBilledInput.addEvent('keyup', updateHandler);
		updateHandler();
	}
}

function addInvoiceAdjustmentWindow(){
	var invoiceForm = document.id('addInvoiceAdjustmentForm');
	if ( ! invoiceForm ) invoiceForm = document.id('editInvoiceAdjustmentForm');
	if( invoiceForm ){
		var timeBilledInput = document.id('timeAdjustment');
		var expensesBilledInput = document.id('expensesAdjustment');
		var totalBilledInput = document.id('totalAdjustment');
		
		var updateHandler = function(){
			var total = timeBilledInput.get('value').toFloat() + expensesBilledInput.get('value').toFloat();
			totalBilledInput.set('value', total.toFixed(2));
		};
		
		timeBilledInput.addEvent('change', updateHandler);
		timeBilledInput.addEvent('keyup', updateHandler);
		expensesBilledInput.addEvent('change', updateHandler);
		expensesBilledInput.addEvent('keyup', updateHandler);
		updateHandler();
	}
}

function defaultTableActions(element){
	if ( ! element ) element = document;
	element.getElements('table.hasDefaultAction').each(function(table){
		if ( ! table.hasClass('defaultTableActionsApplied') && (! usingMobileInterface || table.hasClass('allowMobile')) ){
			table.addClass('defaultTableActionsApplied',true);
			table.getElements('tr').each( function(element){
				var defaultLink = document.id(element).getElement('a[class*=default]');
				if ( defaultLink ){
					addActionClickHandler(element, defaultLink);
				}
			});
		}
	});
}

function openAjaxModalFromLink(link){
	// check to see whether these is any config present in the element's rel attribute and apply
	var relAttribute = link.get('rel');
	alert(link.get("title"));
	var modalOptions = {
		title: link.get("title")	
	};
	if ( relAttribute ){
		Object.each( kamUi.parseCssString(relAttribute), function(value, key) {
			switch ( key ){
				case 'id':
					modalOptions.id = value;
					break;
				case 'height':
					modalOptions.height = value;
					modalOptions.resizeOnLoad = false;
					break;
			}
		});
	}
	
	openAjaxModal(link.get('href'), modalOptions);
}

//disable the inputs for the dates to stop users inputing invalidate formats
function disableDates(){
	document.getElements('input.date').each( function(input){
		input.addEvent('keydown', function(e){
			e.stop();											  
		});
	});
}

function reminderShow(){
	var reminder = document.id('reminderArea');
	if(reminder){
		var triggers  = document.getElements('.createReminder');
		var fx = new Fx.Morph(reminder,{
			onComplete: function(){
				if(modalReference){	modalReference.resizeToContent();}	
			}
		});
		triggers.each( function(trigger){
			trigger.addEvent('click', function(e){
				if(trigger.value == 1){					
					fx.start({'height':420, 'display':'block'});	
				}else{
					fx.start({'height': 0});	
				}
			});
		});
	}
}

var datePicker;
var dateIdCounter = 0;
function datepickers(){
	
	var dates = document.getElements('.date');
	var dateTogglers = document.getElements('.dateToggler');
	var dateTogglerCount = dateTogglers.length - 1;
	dates.each(function(element, index){
		if ( ! element.hasClass('extendedPicker') ){
			element.addClass('extendedPicker');
			var picker = new Picker.Date(element, {
				format: '%d-%m-%Y',
				timePicker: false,
				positionOffset: {x: 5, y: 0},
				pickerClass: 'datepicker',
				useFadeInOut: false,
				onShow: function(){
					document.getElements('.datepicker').each( function(picker){
						picker.setStyle('z-index', 999999999999);
					});		
				},
				onShow: function(test){
					// ensure that the picker isnt being displayed offscreen
					var pickerCoords = this.picker.getCoordinates();
					var windowSize = window.getSize();				
					if ( pickerCoords.right > windowSize.x ){
						var offset = pickerCoords.right - windowSize.x; 
						this.picker.setStyle('left', pickerCoords.left - offset);
					}
					
					// setting this listener seems to drop the calendar behind modals so set the
					// zIndex to something mentally high
					this.picker.setStyle('zIndex', 9999999999999);
				}
			});
			picker.attach(dateTogglers[index]);
			element.store('kamDatePicker', picker);
		}
	});
	
	
	
	
	
	
	
//	if ( datePicker ){
//		datePicker.attach();
//	} else {
//		datePicker = new DatePicker('.date',{
//			pickerClass: 'datepicker',
//			toggleElements: '.dateToggler',	
//			format: 'd-m-Y',
//			inputOutputFormat: 'd-m-Y',
//			onShow: function(){
//				document.getElements('.datepicker').each( function(picker){
//					picker.setStyle('z-index', 999999999999);
//				});		
//			},
//			onSelect: function(e){
//				if(kamCal) kamCal.goto(e);	
//			}
//		});	
//	}
	
//	document.getElements('.date').each( function(element){
//		element.addEvent('click', function(event){ 
//			event.stop();
//			alert("CLICK");
//		});
//	});
	
	
//	document.getElements('.date').each( function(element){
//		var id = element.get('id');
//		if( ! id ){
//			id = 'date' + ++dateIdCounter;
//			element.set('id', id);
//		}
//		
//		var maskElement = document.getElement('.'+id);
//		if ( ! maskElement ){
//			new Mask(element,{
//				'class': id + ' dateMask',
//				hideOnClick: false,
//				style:{
//					'background-color': '#FFF',
//					'margin-left': '5px' 
//				}
//			}).show();
//		}
//	});
}

function collapsibleTable(){
	document.getElements('.collapsibleTable').each(function(table){
		table.getElements('.rootItem').each( function (rootItem){
			var toggle = rootItem.getElement('td.first');
			if ( toggle ){
				toggle.addEvent('click', function(){
					if ( toggle.hasClass('collapsed') ){
						toggle.removeClass('collapsed');
						toggle.addClass('expanded');
						var display = '';
					} else {
						toggle.addClass('collapsed');
						toggle.removeClass('expanded');
						var display = 'none';
					}
					
					table.getElements('.'+rootItem.get('id')).each(function(file){
						file.setStyle('display', display);
					});
					
				});
			}
		});
	});
}

function addFields(){
	// try to find the add web input and add the http handler
	var webChangeHandler = function(event){
		var input = document.id(event.target);
		if ( input.get('value').substr(0, 7) !== 'http://' ){
			input.set('value', 'http://'+input.get('value'));
		}
	};
	document.getElements('.addWeb input').each(function(element){
		element.addEvent('change', webChangeHandler);
	});
	
	// Adds fields when user click on the add link
	document.getElements('.addElement').each( function(a){
		a.addEvent('click', function(e){
			e.preventDefault();
			var rel = a.get('rel');
			var els = document.getElements('.' + rel);							
			
			var cloned = els[els.length - 1].clone();
			cloned.inject(this.getParent('.' + rel),'after');
				
			//undate the number and reset values
			cloned.getElements('input').each( function(el){	el.set('value',''); });			
			cloned.getElement('.addElement').cloneEvents(a);
			
			//set numbers
			document.id(rel).getElements('.number').each( function(number,key){
				number.set('html', key+ 1);																				 
			});
			
			// add the change handler if this is a web input
			if ( rel == 'addWeb' ) cloned.addEvent('change', webChangeHandler);
			
			// try to find the parent modal
			var modalElement = a.getElement('! .kamModal');
			if ( modalElement ){
				var modalWindow = kamModal.getModalInstance(modalElement);
				if ( modalWindow ){
					// resize the modal to the new content size
					modalWindow.resizeToContent();
				}
			}
			
			// hide the clicked a tag (only show the plus next to the last listed item)
			document.id(e.target).setStyle('display', 'none');
		});
	});
}

function initUi(target){
	// if no target has been supplied use the document
	if ( ! target ){
		target = document;
	}
	
	// apply events to all A elements
	document.id(target).getElements('a').each(function(element){
		addActionClickHandler(element);
	});
}

function addActionClickHandler(element, link){
	if ( ! link ) link = element;
	
	var clickHandler = function(event){
		if ( ! document.id(event.target).getElement('! span.noClickHandler') ){
			// check to see whether this link requires confirmation before proceeding
			if ( link.hasClass('confirmation') ){
				var response = confirm(link.get('title'));
				if ( ! response ){
					event.preventDefault();
					return false;
				}
			}
			
			// check to see whether this link is an RPC link
			var customHandled = false;
			if ( link.hasClass('rpc') ){
				customHandled = true;
				event.preventDefault();	
				rpcCall(link.get('href'));
			} 
			// alternatively check to see whether this is a AJAX (modal) link
			else if ( link.hasClass('ajax') ){
				customHandled = true;
				event.preventDefault();	
				// check to see whether these is any config present in the element's rel attribute and apply
				var relAttribute = link.get('rel');
				var modalOptions = {
					title: link.get('title')
				};
				if ( relAttribute ){
					Object.each( kamUi.parseCssString(relAttribute), function(value, key) {
						switch ( key ){
							case 'id':
								modalOptions.id = value;
								break;
							case 'height':
								modalOptions.height = value;
								modalOptions.resizeOnLoad = false;
								break;
						}
					});
				}
				
				openAjaxModal(link.get('href'), modalOptions);
			} else if ( link.hasClass('navigateAjaxModal') ){
				customHandled = true;
				event.preventDefault();	
				
				if ( usingMobileInterface ){
					new URI(link.get('href')).go();
				} else {
					// try to find the parent modal
					var modalElement = link.getElement('! .kamModal');
					if ( modalElement ){
						var id = modalElement.get('id');
						if( id ){
							var modal = kamModal.getModalInstance(id);
							modal.load(link.get('href'));
						}
					}
				}
			} else if ( link.hasClass('navigateBrowser') ){
				customHandled = true;
				event.stop();
				
				// show the loading mask, UNLESS, it is a shared file request
				if ( link.get('href').indexOf('downloadSharedFile') < 0 && (link.get('href').indexOf('mailto:') < 0) ) {
					showLoadingMask();
				}
				
				new URI(link.get('href')).go();
			} else {
				// show the loading mask, UNLESS, it is a shared file request
				if ( link.get('href')!= "#" ){
					if ( (link.get('href').indexOf('downloadSharedFile') < 0) ){
						showLoadingMask();
					}
				}
			}
			if ( customHandled ) event.stop();
		}
	};
	
	// ensure this element hasn't already been extended
	if ( element.hasClass('clickHandlerApplied') == false ){
		element.addClass('clickHandlerApplied');
		element.addEvent('click', clickHandler);
	}
}

var loadingMask;
function showLoadingMask(){
	
//	if ( loadingMask ) loadingMask.destroy();
	loadingMask = new Mask(document.body, {
		hideOnClick: false,
		style:{
			opacity: 0.5,
			'background-color': '#FFF'
		}
	}).show();
}

function hideLoadingMask(){
	if ( loadingMask ) loadingMask.destroy();
}


function rpcCall(url){
	new Request.HTML({
		url: url,
		method: 'get',
		evalScripts: false,
		onComplete: jsonResponseHandler
	}).send();
}

function openAjaxModal(url, additionalOptions){
	if ( usingMobileInterface ){
		new URI(url).go();
	} else {
		// create the base modal config
		var modalOptions = {
			contentRequestOptions: {
				evalScripts: true,
				autoHandleJavascriptResponses: false
			},
			resizeToContent: true,
			width: 840,
			onContentSet: function(element){						
				initUi(element);
				kamUi.initialise(element);
				addJob();
				addExpense();
				addFields();
				datepickers();		
				reminderShow();
				disableDates();
				addDiary();
				addInvoiceWindow();
				addInvoiceAdjustmentWindow();
				initEditTimesheetForm();
				
				// add the company sub type handlers
				companyTypeDropdownHandler(); 
				defaultTableActions(element);
			}.bind(this)
		};
		Object.merge(modalOptions, additionalOptions);			
		modalReference = new kamAjaxContentModal(url, modalOptions);
		modalReference.show();
	}
}

function initEditTimesheetForm(){
	var form = document.id('editTimesheetForm');
	if ( ! form ) form = document.id('addTimesheetForm');
	
	if ( form ){
		var formController = kamForm.getFormInstance(form);
		if ( formController ){
			formController.addEvent('submitting', function(response){
				// ensure there a time has been set
				if ( document.id('hours').get('value') == '0' && document.id('minutes').get('value') == '0' ){
					response.cancel = true;
					
					alert("Please set a time for the entry");
				}
			});
		}
	}
}

function addDiary(){	
	var allChk = document.id('all');

	if(allChk){
					
		var checks = document.id('userChecks').getElements('input');
		
	/*	var changeHandler = function(){
			var checked = allChk.checked;
			document.id('userChecks').getElements('input').each( function(input){
				input.checked = checked;
				input.set('checked', (checked ? 'checked' : ''));
			});
		}
		allChk.addEvent('click', changeHandler);
		//allChk.addEvent('change', changeHandler);
*/
		
//		checks.each( function(chk){
//			if(chk.checked){
//				chk.store('original',true);			
//			}else{
//				chk.store('original',false);	
//			}
//		});
		
		allChk.addEvent('click', function(e){
			var checked = (document.id(e.target).get('checked') !== false);
			checks.each( function(chk) {
				chk.checked = checked;
			});
//			checks.each( function(chk){
//				chk.checked = checked ? true : chk.retrieve('original'); 
//			});
		});
		
		
//		allChk.addEvent('click', function(e){
//alert("CLICK")			;
//			checks.each( function(chk){
//			 	if(chk.retrieve('original') != true)	chk.checked = this.checked;
//			
//			}.bind(this));
//		});
		
	}
}

function companyTypeDropdownHandler(){
	var companyTypeDropdown = document.id('companyTypeId');
	var companySubTypeDropdown = document.id('companySubTypeId');
	if ( companyTypeDropdown && companySubTypeDropdown ){
		var originalSubTypeValue = companySubTypeDropdown.get('value');
		var companyTypeHandler = function(){
			companySubTypeDropdown.getElements('option').each(function(option){
				option.destroy();
			});
			
			var companyTypeId = companyTypeDropdown.get('value');
			var subTypesAvailable = false;
			companySubTypes.each( function(subType){									
				if ( subType.companyTypeId == companyTypeId ){
					subTypesAvailable = true;
					var option = new Element('option', {
						value: subType.id,
						html: subType.name
					});
					
					if ( subType.id == originalSubTypeValue ){
						option.set('selected', 'selected');
					}
					
					option.inject(companySubTypeDropdown)
				}
			});
			
			companySubTypeDropdown.setStyle('display', (subTypesAvailable ? 'block' : 'none' ) );
		};
		
		companyTypeDropdown.addEvent('change', companyTypeHandler);
		companyTypeHandler();
	} 
}

function jsonResponseHandler(responseTree, responseElements, responseHTML, responseJavaScript){
	var kamResponse = null;
	eval(responseJavaScript == '' ? responseHTML : responseJavaScript);
	if ( kamResponse ){
		if ( kamResponse.notification ){
			alert(kamResponse.notification);
		}
		
		if ( kamResponse.instructions ){
			kamResponse.instructions.each( function(instruction){
				switch ( instruction.type ){
					case 'refreshWindow':
						new URI(window.location).go();
						break;
					case 'navigateAjaxModal' :
						if ( instruction.target && instruction.url ){
							var modal = kamModal.getModalInstance(instruction.target);
							modal.load(instruction.url);
						}
						break;
					case 'refreshAjaxModal' :
						if ( instruction.target ){
							var modal = kamModal.getModalInstance(instruction.target);
							modal.reload();
						}
						break;
					case 'closeAjaxModal' :
						if ( instruction.target ){
							var modal = kamModal.getModalInstance(instruction.target);
							if ( modal ) modal.close();
						}
						break;
					case 'refreshCalendar' :		
						if(kamCal) kamCal.refresh();						
						break;
					case 'airCloseWindow' :						
						window.airCloseWindow();						
						break;
					case 'airUpdateLoginHash' :		
						window.airUpdateLoginHash(instruction.data);						
						break;
					case 'navigateBrowserBack' :		
						history.back();						
						break;
					case 'navigateBrowser' :
						new URI(instruction.url).go();					
						break;
				}
			});
		}
	}
}

function formInputs(){
	var inputs = document.getElements('input');	
	inputs.each( function(input){
		if(input.get('value')){
			// check to see whether the form has disabled overtext
			var allowOverText = true;
			var form = input.getElement('! form');
			if( form && form.hasClass('kamNoOverText') ) allowOverText = false;
			
			if ( allowOverText ){
				if(input.get('type') == 'text')	input.store('default',input.get('value'));	
				input.addEvent('focus', function(e){ if(input.get('value') == input.retrieve('default'))	input.set('value', '');	});
				input.addEvent('blur', function(e){	if(input.get('value') == '') input.set('value',input.retrieve('default'));	});
			}
		}
	});
}

var kamCal = null;
function calInit(){
	// 30 Jun 2011 - JS : Setup handlers for persistent diary filter bar values
	var startDate = null;
	var diary = 'myDiary'; 
	var office = ' ';
	var diaryControls = document.id('diaryControls');
	
	var weeks = new URI(window.location).getData('weeksInView');
	if( ! weeks ) weeks = 1;
	
	if ( diaryControls ){
		// check to see whether there is a "loaded" cookie present so we can determine whether
		// this is the first load of the system
		var systemLoaded = Cookie.read('systemLoaded');
		var firstLoad = ! systemLoaded;
		if ( firstLoad ) Cookie.write('systemLoaded', 'true');
		
		// initialise and load the cookie (if available)
		trackingCookie = new Hash.Cookie('diaryControls', {
			duration: 10000
		});
		trackingCookie.load();
		if ( trackingCookie.getLength() ){
			// if this is the first load, erase the date from the tracking cookie so that the 
			// calendars start on today
			if ( firstLoad ){
				trackingCookie.erase('gotoDate');
				trackingCookie.save();
			}
			
			// there are stored values available. apply them to the bar
			trackingCookie.each( function(value,key){
				// try to retrieve the relevant input and apply the value
				var input = diaryControls.getElement('*[name='+key+']');		
				if ( input ) {
					if ( input.get('type') == 'radio' ){
						diaryControls.getElements('input[name='+key+']').each(function(radio){
							radio.set('checked', (radio.get('value') == value ? 'checked' : '' ));
						});
					} else {
						input.set( 'value', value);
					}
				}
				
				// update the tracking variables if appropriate
				switch( key ){
					case 'diary': diary = value; break;
					case 'office': office = value; break;
					case 'officeFilter': office = value; break;
					case 'weeksInView': weeks = value; break;
					case 'gotoDate': startDate = value; break;
					
					default : "TRACK 1: "+alert(key); break;
				}
			});
		}
		
		// setup the listeners for the inputs so we can record the values on change
		diaryControls.addEvent('change:relay(input,select)', function(e){
			// update the input's cookie value
			var element = document.id(e.target);
			trackingCookie.set(element.get('name'), element.get('value'));
			trackingCookie.save();
		});
		
		// setup listeners for date pickers
		diaryControls.getElements('.extendedPicker').each( function(element){
			// retrieve the picker instance
			var picker = element.retrieve('kamDatePicker');
			if ( picker ){
				// add an event which listeners for the "select" event and store its value 
				picker.addEvent('select', function(date, element){
					trackingCookie.set(element.get('name'), date.format('%d-%m-%Y'));
					trackingCookie.save();
					
					// navigate the calendar
					if ( kamCal ){
						kamCal.goto(date);
					} else {
						element.getElement('! form').submit();
					}
				});
			}
		});
	}
	
	var calWeek = document.id('calendarWeek');
	var calMonth = document.id('calendarMonth');	
	if(calWeek){
		var weeksInView = document.id('weeksInView')		
		weeksInView.addEvent('change', function(e){
			var uri = new URI(window.location)																	 
			uri.setData('weeksInView',this.value);
			uri.go();
		});
		weeksInView.set('value',weeks);
		
		// 30 Jun 2011 - JS : Added the start date parameter to the constructor and disabled auto 
		// loading in the calendar so now a filter call must be made
		kamCal = new kamCalendarWeekView(calWeek, {weeksInView : parseInt(weeks)}, startDate);
		kamCal.filter(diary, office, startDate);
		
		kamCal.addEvent('kamAddEntry' , function(date){
			var uri = new URI('/diary/add-diary/');
			uri.setData({
				'date': date
			},true);
			
			openAjaxModal(uri.toString(),{
				title: 'Add diary entry'
			});								  
		});
	}
	if(calMonth){
		// 30 Jun 2011 - JS : Added the start date parameter to the constructor and disabled auto 
		// loading in the calendar so now a filter call must be made
		kamCal = new kamCalendarMonthView(calMonth, null, startDate);
		kamCal.filter(diary, office);
		
		kamCal.addEvent('kamAddEntry' , function(date){
			
			var uri = new URI('/diary/add-diary/');
			uri.setData({
				'date': date
			},true);
			
			openAjaxModal(uri.toString(), {
				title: 'Add diary entry'
			});								  
		});
	}
	if(kamCal){		
		
		var prev = document.id('prev');
		if(prev) prev.addEvent('click', function(e){ timeStart = new Date(); e.preventDefault(); kamCal.previous(); });
		var next = document.id('next');
		if(next)	next.addEvent('click', function(e){ timeStart = new Date();	e.preventDefault(); kamCal.next();	});
		
		// filters	
		var diaryControls = document.id('diaryControls');		
		if(diaryControls){
			var applyFilter = function(){			
				kamCal.filter(diary, office);		
			}		
	
			diaryControls.getElements('.radio').each( function(radio){
				radio.addEvent('click', function(e){
					if(radio.value != diary){
						diary = radio.value;						
						applyFilter();
					}
				});
			});
			document.id('officeFilter').addEvent('change',function(e){
				office = this.value;
				applyFilter();
			});																																			
		}
	}
}

function addExpense(){
	return false;
	var expenseSelect = document.id('expenseCat');
	if(expenseSelect){
		var cost = document.id('cost');
		var quantity = document.id('quantity');
		var unitValue = 0;
		
		expenseSelect.addEvent('change', function(e){
			unitValue = expenseCatUnits[this.value];
			(unitValue) ? cost.value = unitValue : cost.value = 0.0;
			quantity.value = 1;			
		});
		
		quantity.addEvent('keydown', function(e){		
			if(e.code > 31 && (e.code < 48 || e.code > 57) && (e.code < 96 || e.code > 105) && e.code != 8) return false				
		});
		quantity.addEvent('keyup', function(e){
			var value = parseFloat(this.value);
			if(value > 0 ) cost.value = value * unitValue;
		});
		quantity.addEvent('blur', function(e){ if(this.value == '') this.value = 1; });
	}
}

function addJob(){
// Handles drop downs on the add job modals	
	var hiddenInput = document.id('originalSelects');	
	var jobNo = document.id('jobNumber');
	var jobSuffix = document.id('jobSuffix');
	
	var setJobNumber = function(){
		jobNo.set('html', selectInput.value+jobSuffix.value);
	};
	
	//if there drop down is hidden - add-job template uses this
	if(hiddenInput){
		var triggers = document.getElements('input[name=jobType]');
		var selectInput = hiddenInput.getElement('select');
		var fx = new Fx.Morph(hiddenInput, { 
			link : 'cancel',
			onComplete: function(){
				var modal = kamModal.getModalInstance('addJob');
				if ( modal ){
					modal.resizeToContent();
				}
			}
		});		
		jobNo.store('originalValue', jobNo.get('html'));
		
		triggers.each(function(trigger){
			var visible = null;
			if(trigger.get('id') == 'existing') visible = trigger;
			trigger.addEvent('click', function(e){			
				if(this == visible){
					fx.start({height : 100});	
//					jobNo.set('html', selectInput.value);
					setJobNumber(selectInput.value);
					jobSuffix.toggleClass('required', true);
				}else{
					fx.start({height : 0 });
					jobNo.set('html', jobNo.retrieve('originalValue'));
					selectInput.set('value', '');
					jobSuffix.toggleClass('required', false);
				}
			});
		});
		
		if(selectInput){
			selectInput.addEvent('change', function(e){
				if(this.value != null && this.value != ''){
//					jobNo.set('html', this.value);
					setJobNumber(this.value);
				}
			});
		}

		if(jobSuffix) jobSuffix.addEvent('change', setJobNumber);
		if(jobSuffix) jobSuffix.addEvent('keyup', setJobNumber);
	}else{
		var selectInput = document.id('originalJob');
		if(selectInput){
			selectInput.addEvent('change', function(e){																 
				if(this.value != null && this.value != ''){
//					jobNo.set('html',this.value);
					setJobNumber(this.value);
				}
			});
		}
	}
}

//function injectMap(){
//	var pc = document.id('postcode').get('html');
//	if(pc != ''){
//		kamMap = new kamMaps();
//		kamMap.addPostCode(pc);	
//	}
//}


























