
var CalendarDlg = jQuery.Class.create({
	init: function(calendar) {
		this.curId = '';
		this.calendarM = calendar;
		this.quickEditDlg = document.createElement('DIV');
		this.quickEditDlg.style.display = 'none';
		//this.quickEditDlg.style.position = 'absolute';
		$j(this.quickEditDlg).addClass('quckEditDlg');
		document.body.appendChild(this.quickEditDlg);
		this.quickEditDlg = $j('#formEditDlg')[0];
		var parent = this;
		var dlgSettings = {
			width: 540,
			height: 450,
			modal: true,
			position: 'center',
			title: 'Quick Edit Form',
			zIndex: 3999,
			autoOpen: false,
			buttons: {
				'Save' : function() {

					var data = parent.getData();

					if(data!==false) {

						$j(parent).trigger("activityQuickSave", [parent.activityId.val(), data, parent.oldType]);
						parent.hide();
					}
				},
				'Cancel' : function(e) {
					parent.hide();
				}

			}
		};
		$j(this.quickEditDlg).dialog(dlgSettings);
		/*var buttons = $j(this.quickEditDlg).find('.taskEditButton');
		this.saveBtn = buttons[0];
		this.cancelBtn = buttons[1];*/
		//console.log(buttons);
		/*$j(this.saveBtn).bind('click', {parent: this },
			function(e) {
				var data = e.data.parent.getData();
				if(data!==false) {
					$j(e.data.parent).trigger("activityQuickSave", [e.data.parent.activityId.val(), data]);
					e.data.parent.hide();
				}
			}
		);
		$j(this.cancelBtn).bind('click', {parent: this },
			function(e) {
				e.data.parent.hide();
			}
		);*/

		// Find fields

		this.title =$j(this.quickEditDlg).find('input[name=title]');
		this.description = $j(this.quickEditDlg).find('input[name=description]');
		this.loclink = $j('#loclink');
		//this.description = $j(this.quickEditDlg).find('textarea[name=description]');

		this.startTimeSelector = $j(this.quickEditDlg).find('select[name=start_time]');
		this.activityId = $j(this.quickEditDlg).find('input[name=activity_id]');

		// recurrence selector
		this.recurrenceRadioBtn= $j(this.quickEditDlg).find('input[name=recurr]');
		// single
		this.eventDate = $j(this.quickEditDlg).find('input[name=start_date]');
		this.eventDatePicker = new DateField('.quickDlgDatePicker');

		// daily
		this.startDateDaily = $j(this.quickEditDlg).find('input[name=start_date_daily]');
		this.dailyStartDatePicker = new DateField('.dailyStartDatePicker');
		this.endDateDaily = $j(this.quickEditDlg).find('input[name=end_date_daily]');
		this.dailyEndDatePicker = new DateField('.dailyEndDatePicker');
		// weekly
		this.startDateWeekly = $j(this.quickEditDlg).find('input[name=start_date_weekly]');
		this.weeklyStartDatePicker = new DateField('.weeklyStartDatePicker');
		this.endDateWeekly = $j(this.quickEditDlg).find('input[name=end_date_weekly]');
		this.weeklyEndDatePicker = new DateField('.weeklyEndDatePicker');
		this.dayOfWeek = $j(this.quickEditDlg).find('select[name=day_of_week]');
		// expire
		this.needExpire = $j(this.quickEditDlg).find('input[name=need_expire]');
		this.expireDate = $j(this.quickEditDlg).find('input[name=expiration_date]');
		this.expireDatePicker = new DateField('.expireDatePicker');

		// ministry
		this.ministry = $j(this.quickEditDlg).find('select[name=ministry]');
		this.displayOnMinistry = $j(this.quickEditDlg).find('input[name=display_on_ministry]');
		//display_on_homepage
		this.displayOnHomePage = $j(this.quickEditDlg).find('input[name=display_on_homepage]');
		//display_on_main_calendar
		this.displayOnMaincalendar= $j(this.quickEditDlg).find('input[name=display_on_main_calendar]');




		this.needExpire.bind('change', {parent:this}, function(e) {
			e.data.parent.expireDate.attr('disabled', !this.checked);
		});
		this.ministry.bind('change', {parent:this}, function(e) {
			e.data.parent.updateConnectedControls(this);
		});

	},

	updateConnectedControls: function (element) {
		var noneMinistry = ($j(element).val()=='None');
		this.displayOnMaincalendar.attr('disabled', noneMinistry);
		if(noneMinistry) {
			this.displayOnMaincalendar.attr('checked', false);
		}
	},

	getProjectUrl: function (url) {
		$.get('/admin/panel/calendar/getProjectUrl', function(urldata){
			var projectUrl = urldata;
		});
	},

	show: function(data) {

		if(typeof(data.type)!='undefined') {
			this.oldType = data.type;
		}
		$j(this.quickEditDlg).dialog('open');
		this.quickEditDlg.style.display = 'block';
		if(typeof(data.series_id)!='undefined') {

			if(data.type=='single') {
				this.activityId.val(data.itemid);
			} else {
				this.activityId.val(data.series_id);
			}
			this.curId = this.activityId.val();
			$('#sendblock').show();
			$('#curid').val(this.activityId.val()+'_'+data.type);
			$('#sendbutton').show();


		} else {
			this.curId = '';
			this.curType = '';
			this.activityId.val('');
			$('#sendblock').hide();
			$('#sendbutton').hide();
			$('#curid').val('');
		}

		if(typeof(data.title) == 'undefined') {
			this.title.val(data.title);
		}
		if(typeof(data.eventdescription) == 'undefined') {
			data.eventdescription = '';
		}
		this.description.val(data.eventdescription);
		//console.log('aid', data.aid);
		//console.log(this.loclink);
		if(typeof(data.aid)=='undefined') {
			this.loclink.html("You can edit the location notes after the event has been saved.");
		} else {
			this.loclink.html("<a target='locnotes' href='/admin/panel/article/getarticle/"+data.aid+"'>Click here to edit Location notes</a>");
		}

		//console.log('type=', data.type)
		switch(data.type) {
			case 'weekly':
			this.recurrenceRadioBtn[2].checked = true;
			this.dayOfWeek.val(data.day_of_week);
			break;
			case 'daily':
			this.recurrenceRadioBtn[1].checked = true;
			break;
			case 'single':
			default:
			this.recurrenceRadioBtn[0].checked = true;
		}
		//Poe change 6-2-2010 to fix FH1 sites.  Event link did not work because projecturl was not set.  Added ?domain=projectUrl to link, so that projecturl is set.
		$.get('/admin/panel/calendar/getProjectUrl', function(url) {
			var projectUrl = url;
			//alert(projectUrl);
			$('textarea#eventurl').val('http://'+window.location.host+'/admin/panel/calendar/showEventDisplay/'+data.itemid+'/'+data.type+projectUrl);
		}); 
		//$('textarea#eventurl').val("http://"+window.location.host+"/admin/panel/calendar/showEventDisplay/"+data.itemid+"/"+data.type);
		var mainEventDate = data.startdate;
		var eventDate = strToDate(mainEventDate);
		// single
		this.eventDate.val(mainEventDate);
		// daily
		this.startDateDaily.val(mainEventDate);
		if((data.type!='daily') || typeof(data.enddate)=='undefined') {
			var endDate = strToDate(dateToStr(eventDate));
			endDate.setDate(endDate.getDate()+7);
		} else {
			var endDate = strToDate(data.enddate);
		}
		this.endDateDaily.val(dateToStr(endDate));

		//weekly
		this.startDateWeekly.val(mainEventDate);
		if((data.type!='weekly') || typeof(data.enddate)=='undefined') {
			endDate = strToDate(dateToStr(eventDate));
			endDate.setMonth(endDate.getMonth()+1);
		} else {
			var endDate = strToDate(data.enddate);
		}
		this.endDateWeekly.val(dateToStr(endDate));
		// dates and *****


		var startTimeArray = data.eventtime.split(':');
		var hh = startTimeArray[0];
		var mm = startTimeArray[1];
		var currTime = hh+':'+mm;
		var startTimeSelectorEl = this.startTimeSelector.val(currTime)[0];

		// if option not found, then we add new option
		if(this.startTimeSelector.val()!=currTime) {
			var newOption = document.createElement('option');
			newOption.value = currTime;
			newOption.innerHTML = currTime;
			startTimeSelectorEl.appendChild(newOption);
			this.startTimeSelector.val(currTime)
		}

		// init bottom controls
		if(typeof(data.weekday)!='undefined') {
			var selectedVale = 0;
			this.dayOfWeek.find('option').each(function() {
				if(this.innerHTML==data.weekday) {
					selectedVale = this.value;
				}
			});
			this.dayOfWeek.val(selectedVale);
		} else {
			this.dayOfWeek.val(0);
		}
		if((typeof(data.expiredate) != 'undefined') && (data.expiredate!='') && (data.expiredate!='2222-12-25')) {
			this.needExpire[0].checked = true;
			this.expireDate.val(data.expiredate);
			this.expireDate.attr('disabled', false);
		} else {
			this.needExpire[0].checked = false;
			this.expireDate.val('');
			this.expireDate.attr('disabled', true);
		}
		this.ministry.val(data.ministryname);
		this.displayOnMinistry[0].checked = (data.showfrontministry);

		this.displayOnHomePage[0].checked = ((data.showfrontsite!="false") && (data.showfrontsite!==false));
		this.displayOnMaincalendar[0].checked = (data.maincalendar=="1");
		this.updateConnectedControls(this.ministry[0]);

	},

	hide : function() {
		$j(this.quickEditDlg).dialog('close');
	},

	getData: function () {
		var data = {};

		data.name = this.title.val();
		data.eventdescription = this.description.val();
		data.sendevent = true;
		if(!this.isMainInfoCorrect(data)) {

			return false;
		}

		data.eventtime = this.startTimeSelector.val();
		data.type = this.recurrenceRadioBtn.filter(":checked").val();
		switch(data.type) {
			case 'daily':
				data.startdate = this.startDateDaily.val();
				data.enddate = this.endDateDaily.val();
				if(!this.areDatesCorrect(data)) {
					return false;
				}
			break;
			case 'weekly':
				data.startdate = this.startDateWeekly.val();
				data.enddate = this.endDateWeekly.val();
				data.day_of_week = this.dayOfWeek.val();
				if(!this.areDatesCorrect(data)) {
					return false;
				}
			break;
			case 'single':
			default:
				data.eventdate = this.eventDate.val(); // eventdate == startdate
				data.startdate = this.eventDate.val();
				if(!this.isDateCorrect(data.startdate)) {
					alert('Date should be in YYYY-MM-DD  format.');
					return false;
				}
		}
		if(this.needExpire.attr('checked')) {
			data.expiredate = this.expireDate.val();
			if(!this.isDateCorrect(data.expiredate)) {
				alert('Expire date should be in YYYY-MM-DD  format.');
				return false;
			}
		} else {
			data.expiredate =  '2222-12-25';
		}
		data.ministryname = this.ministry.val();
		data.showfrontministry = (this.displayOnMinistry.attr('checked'));
		data.showfrontsite = (this.displayOnHomePage.attr('checked'));
		data.maincalendar = (this.displayOnMaincalendar.attr('checked')) ? '1' : '0';

		return data;
	},

	isMainInfoCorrect: function (data) {
		if(data.eventdescription=='') {
			alert('Event details should not be empty.');
			return false;
		}
		return true;
	},

	areDatesCorrect: function (data) {
		if(!this.isDateCorrect(data.startdate) || !this.isDateCorrect(data.enddate)) {
			alert('Dates should be in YYYY-MM-DD  format.');
			return false;
		}
		var startDate = strToDate(data.startdate);
		var endDate = strToDate(data.enddate);
		if(startDate>endDate) {
			alert('Incorrect dates. "From" date should be earlier than "To" date.');
			return false;
		}
		return true;
	},

	isDateCorrect: function(date) {
		var re = /^\d{4}-\d{2}-\d{2}$/;
		return re.test(date);
	}
});
