var CANVAS_ID = 'canvas';
var _key = null; var _submitting = false;

function serializeCanvas(canvasId, targetFieldId, requireInput) {
	if (_submitting) return false;
    if (!top.frames[CANVAS_ID] || !top.frames[CANVAS_ID].serializeSchedule) {
        alert("Couldn't read from the Scheduling interface.");
        return false;
    }
    else {
		obj = g(targetFieldId)
    	if (!obj) {
    	   alert('Error while submitting schedule data.');
    	   return false;
    	}
		sr = top.frames[canvasId].serializeSchedule();
		if (sr == null && requireInput) {
			alert('Please indicate when you are available before continuing.');
			return false;
		}
		else {
			try {
				
				obj.value = sr;
				
				setElementValue("dr", top.frames[CANVAS_ID].getDr());
				setElementValue("st", top.frames[CANVAS_ID].getSt());
				setElementValue("tz_offset", top.frames[CANVAS_ID].getUserTimezoneOffset());
				
				var chk = g('chk_privacy', top.frames[CANVAS_ID]);
				if (chk) setElementValue('privacy', chk.checked ? '1' : '0');

				var tz = g('tz_string', top.frames[CANVAS_ID]);
				if (tz) setElementValue('tz_string', tz.value);

				if (g('multibox')) {
					if (isVisible('multibox')) {
						setElementValue('attendee_name', '');
						setElementValue('attendee_email', '');
					}
				}
			}
			catch(x) { _submitting = false; return false; }
			_submitting = true;
			return true;
    	}
    }
	
}
function candidateClicked(index) {
	top.frames[CANVAS_ID].selectCandidate(index);
	updateCandidateSelection(index);
}
var currSelectedCandidate = null;
function selectTopCandidate(index) {
	updateCandidateSelection(index);
}
function updateCandidateSelection(index) {
	if (index == -1) {
		if (currSelectedCandidate)
			currSelectedCandidate.className = 'candidate';
		currSelectedCandidate = null;
	}
	else {
		obj = g('cn' + index);
		if (!obj) return;
		if (currSelectedCandidate)
			currSelectedCandidate.className = 'candidate';
		obj.className = 'selected-candidate';
		currSelectedCandidate = obj;
	}
}

var currCandHover = null;
function candOver(obj) {
	if (currCandHover) candOut(currCandHover);
	
	if (obj == currSelectedCandidate) {
		obj.className = 'selected-candidate';
	}
	else {
		obj.className = 'candidate-hover';
	}
	currCandHover = obj;
}
function clearCandHover() {
	if (currCandHover) {
		candOut(currCandHover);
		currCandHover = null;
	}
}
function candOut(obj) {
	if (obj == currSelectedCandidate) {
		obj.className = 'selected-candidate';
	}
	else {
		obj.className = 'candidate';
	}
}

function serialize(arr, id) {
	if (!arr[id]) return;
	obj = g(id);
	if (!obj) return;
	day = arr[id];
	if (day.length && day.length > 0) {
		obj.value = ""; 
		for (i = 0; i < day.length; i++) {
			obj.value += day[i] + ";";
		}
	}
}



function clearField(obj, initVal) {
	if (obj && obj.value == initVal) {
		obj.value = '';
	}
	obj.className = obj.className.replace(/dimmed/, '');
}


function updateCandidateLabel(txt, dtstart, dtend) {
	lbl = g('lblCurrentCandidate');
	if (!lbl) return;
	lbl.innerHTML = txt;
	
	var frm_dtstart = g('confirmed_start');
	var frm_dtend = g('confirmed_end');
	
	if (frm_dtstart && frm_dtend) {

		frm_dtstart.value = dtstart;
		frm_dtend.value = dtend;
		
	}
}

function loadTimes(attendee_key) {
	if (window.frames["canvas"] && window.frames["canvas"].cantMakeIt) {
		toggle('pnlEdit');toggle('pnlCancel');
		window.frames["canvas"].loadTimes(attendee_key);
	}
}

function cantMakeIt(dateStr) {
	if (window.frames["canvas"] && window.frames["canvas"].cantMakeIt) {
		toggle('pnlEdit');toggle('pnlCancel');
		window.frames["canvas"].cantMakeIt(dateStr);
	}
}

function serializeConfirmed() {
	return true;
}
function toggleMulti(){
	toggle('multibuttons');toggle('multibox');toggle('duobox');toggle('duobuttons');toggle('modebox');
	if (isVisible('multibox')) {
		setMeetingSetupMode(VIA_EMAIL);
	}
}
function undoGroup() {
    setElementValue('multi', '(Separate multiple entries with a comma)');
	setMeetingSetupMode(VIA_EMAIL);
}
function initMeetingForm() {
	obj = g('tz_info');
	if (obj) obj.innerHTML = get_tz_name();
}
function toggleMessages() {
	var obj = g('messages');
	if (!obj) return;
	var text = 'Hide Messages';
	if (obj.style.display != 'none') {
		text = 'Show Messages';
	}
	obj = g('lnkShowMessages');
	if (obj) obj.innerHTML = text;
	toggle('messages');
}

function addReferenceTimezone() {
	var ref = g('addt_tz_ref');
	var cnt = g('addt_tz_container');
	var obj = document.createElement('div');
	obj.innerHTML = ref.innerHTML;
	cnt.appendChild(obj);
	selectAlternateReferenceTimeZone();
	setVisible('lnkRemoveRefTz', true);
	updateTimeZoneReferenceDisplay();
}
function removeReferenceTimezone() {
	var ref = g('addt_tz_ref');
	var cnt = g('addt_tz_container');
	var divs = cnt.getElementsByTagName('div');

	if (divs != null && divs.length > 0) {
		var orgLength = divs.length;
		cnt.removeChild(divs[orgLength - 1]);
		if (orgLength - 1 == 0) {
			setVisible('lnkRemoveRefTz', false);
		}
	}
	updateTimeZoneReferenceDisplay();
}
function selectAlternateReferenceTimeZone() {
	var cnt = g('addt_tz_container');
	var selects = cnt.getElementsByTagName('select');
	var mainTzSelect = g('tz_select');
	if (selects == null || selects.length == 0) {
		cnt = g('addt_tz_ref');
		selects = cnt .getElementsByTagName('select');
		if (selects && selects.length == 1) {
			if (mainTzSelect.selectedIndex != mainTzSelect.options.length - 1)
				selects[0].selectedIndex = mainTzSelect.selectedIndex + 1;
			else
				selects[0].selectedIndex = 0;
		}
	}
	else {
		var refSelect = null;
		if (selects.length == 1) {
			var obj = g('addt_tz_ref');
			if (obj) refSelect = obj.getElementsByTagName('select')[0];
		}
		else {
			refSelect = selects[selects.length - 2];
		}
		var index =  ((refSelect.selectedIndex + 1) % refSelect.options.length);
		selects[selects.length - 1].selectedIndex = index;
	}
}

function updateTimeZoneReferenceDisplay() {
	
	var canvas = top.frames[CANVAS_ID];
	if (!canvas || !canvas.setTimeZoneReferenceDisplay) {
		setTimeout('updateTimeZoneReferenceDisplay()', 1000);
		return;
	}
	
	var _other_tz = null;
	var _user_tz = null;
	if (has_timezones) {
		var mainTzSelect = g('tz_select');
		var cnt = g('addt_tz');
		var selects = cnt.getElementsByTagName('select');
		if (selects != null) {
			var arr = new Array();
			for (var i = 0; i < selects.length; i++) {
				var curr = selects[i];
				arr.push(curr.options[curr.selectedIndex].value);
			}
			if (arr.length > 0) {
				_user_tz = mainTzSelect.options[mainTzSelect.selectedIndex].value;
				_other_tz = arr;
			}
		}
	}
	canvas.setTimeZoneReferenceDisplay(_user_tz, _other_tz);
}

var has_timezones = false;
function enableTimezones() {
	has_timezones = true;
	updateTimezoneValues();
}
function disableTimezones() {
	has_timezones = false;
	updateTimezoneValues();
}

function showSecretaryTimeZone(local_user_tz, target_tz) {
	
	if (target_tz == null || target_tz == '')
		return;
	
	has_timezones = true;
	var canvas = top.frames[CANVAS_ID];
	if (!canvas || !canvas.setTimeZoneReferenceDisplay) {
		setTimeout("showSecretaryTimeZone('"+ local_user_tz+ "', '"+target_tz + "')", 1000);
		return;
	}
	
	var _other_tz = new Array(target_tz);// 'Europe/Berlin';
	var _user_tz = local_user_tz; // 'America/Berlin';
	
	canvas.setTimeZoneReferenceDisplay(_user_tz, _other_tz);
	
}

function updateTimezoneValues() {
	setElementValue('meeting_has_timezones', has_timezones ? '1' : '0');
	if (has_timezones) {
		setDisplay('options-without-tz', false);
		setDisplay('options-with-tz', true);
		setDisplay('enable-tz-button', false);
		selectAlternateReferenceTimeZone();
	}
	else {
		setDisplay('options-without-tz', true);
		setDisplay('options-with-tz', false);
		setDisplay('enable-tz-button', true);
		changeCanvasTimezone(null);
	}
	updateTimeZoneReferenceDisplay();
}
function changeCanvasTimezone(value, index) {
	top.frames[CANVAS_ID].setCustomTimezoneOffset(value, index);
}
function selectedTimezoneChanged(obj) {
	if (!obj) return;
	if (top.frames[CANVAS_ID] && top.frames[CANVAS_ID].setCustomTimezoneOffset) {
		if (obj.selectedIndex == -1) return;
		var selectedOffset = obj.options[obj.selectedIndex].value;
		changeCanvasTimezone(selectedOffset, obj.selectedIndex);
	}
}

function showContactUpdate() {
	if (isVisible('update-contact-box')) {
		closeContactUpdate();
	}
	else {
		toggle('update-contact-box');
		var txtName = g('me_name');
		if (txtName) {
			txtName.focus();
			if (txtName.select) txtName.select();
		}
	}
}

var _contactUpdated = false;
function submitContactUpdate() {
	var txtName = g('me_name');
	var txtEmail = g('me_email');
	if (!txtName || !txtEmail) return false;
	var newName = txtName.value = txtName.value.trim();
	var newEmail = txtEmail.value = txtEmail.value.trim();
	if (newName.length == 0 || newEmail.length == 0) {
		alert("Please make sure that you've entered both your name and a valid email address.");
		return false;
	}
	if (newEmail.indexOf('@') == -1) {
		alert("Please verify that you've entered a valid email address.");
		return false;
	}
	if (top.frames[CANVAS_ID] && top.frames[CANVAS_ID].updateContactInfo) {
		setVisible('update-contact-wait', true);
		top.frames[CANVAS_ID].updateContactInfo(newName, newEmail);
	}
	return false;
}
function contactInfoUpdated(json) {
	setVisible('update-contact-wait', false);
	if (json) {
		// success
		setDisplay('update-contact-input', false);
		setDisplay('update-contact-thanks', true);
		_contactUpdated = true;
		
		var obj = g('my-email');
		if (obj) {
			obj.innerHTML = '(' + json.email + ')';
		}
		else {
			obj = g('my-contact-info');
			if (obj) {
				obj.innerHTML = '(' + json.name + ', ' + json.email + ')';
			}
		}
		
		var obj = g('update-contact-close');
		if (obj && obj.focus) obj.focus();
	}
	else {
		alert("Please verify that you've entered a valid name and email address.");
	}
}
function closeContactUpdate() {
	setDisplay('update-contact-box', false);
	setDisplay('update-contact-input', true);
	setDisplay('update-contact-thanks', false);
}

function cancelContactUpdate() {
	closeContactUpdate();
	if (_contactUpdated) return;
	var frm = g('update-contact-form');
	if (frm) frm.reset();
}

function setKey(key) {
	_key = key;
}

var _mtgWindow = null;
function addAttendees() {
	if (!_key) return;
	if (_mtgWindow && _mtgWindow.close) {
		_mtgWindow.close();
	}
	_mtgWindow = window.open('/add-attendees/' + _key, 'addattendee', 'menubar=no,width=660,height=450,resizable=yes,scrollbars=1');	
	if (!_mtgWindow) {
		alert("Please disable your browser's popup blocker.");
	}
}
function editDetails() {
	if (!_key) return;
	if (_mtgWindow && _mtgWindow.close) {
		_mtgWindow.close();
	}
	_mtgWindow = window.open('/edit-details/' + _key, 'addattendee', 'menubar=no,width=660,height=450,resizable=yes,scrollbars=1');	
	if (!_mtgWindow) {
		alert("Please disable your browser's popup blocker.");
	}
}
function sendMessage() {
	if (_key) window.open('/send-message/' + _key, 'sendmessage', 'menubar=no,width=500,height=380,resizable=yes');	
}
function hidePreview() {
	setDisplay('preview', false);
}
function preview() {
	var obj = g('preview_content'); if  (!obj) return;
	obj.innerHTML = '';
	setDisplay('preview_loading', true);
	setDisplay('preview', true);
	
	var isMulti = isVisible('multibox');
	
	var params = new Array();
	
	params.push('msg=' + encodeURIComponent(getValue('message')));
	params.push('name=' + encodeURIComponent(getValue('me_name')));
	params.push('email=' + encodeURIComponent(getValue('me_email')));
	
	params.push('attendee[name]=' + encodeURIComponent(getValue('attendee_name')));
	params.push('attendee[email]=' + encodeURIComponent(getValue('attendee_email')));
	
	params.push('multi=' + encodeURIComponent(getValue('multi')));
	
	params.push('is_multi=' + (isMulti ? '1' : '0'));
	params.push('with=' + getValue('alias') );
	
	
	var post = params.join('&');
	
	new ajax ('/app/meeting/message-preview/', {
		postBody: post, 
		update: $('preview_content'),
		onComplete: previewLoaded
	});
}
function previewLoaded() {
	setDisplay('preview_loading', false);
	setTimeout('window.scrollTo(0, 10000)', 300);
}
var srcRadioX = '/images/radio-x.gif';
var srcRadioO = '/images/radio-o.gif';
function setMeetingSetupMode(m) {
	var rdoMail = g('rdo_sendnow'); if (!rdoMail) return;
	var rdoLink = g('rdo_genlink'); if (!rdoLink) return;
	var objSetup = g('setup'); if (!objSetup) return;
	if (m == VIA_LINK) {
		objSetup.value = VIA_LINK;
		rdoLink.src = srcRadioX;
		rdoMail.src = srcRadioO;
		setDisplay('pnlSendNowButtons', false);
		setDisplay('pnlMessage', false);
		setDisplay('pnlGenLinkButton', true);
	}
	else {
		objSetup.value = VIA_EMAIL;
		rdoLink.src = srcRadioO;
		rdoMail.src = srcRadioX;
		setDisplay('pnlSendNowButtons', true);
		setDisplay('pnlMessage', true);
		setDisplay('pnlGenLinkButton', false);		
	}
}
function hideNewMtgSplash() {
	setCookie('new-mtg-splash');
	setDisplay('splash_newmtg', false);
}
function hideWelcomeAttendeeSplash() {
	setCookie('welcome-att-splash');
	setDisplay('splash_welcome', false);
}
function hideNewSecSplash() {
	setCookie('new-sec-splash');
	setDisplay('splash_new_sec', false);
}
function demo() {
	if (isVisible('multibox')) {
		toggleMulti();
		undoGroup();
	}
	setElementValue('attendee_name', 'the TimeToMeet Demo Operator');
	setElementValue('attendee_email', 'demo@timetomeet.info');
	setElementValue('meeting_subject', 'Do you have time... for a test?');
	clearField(g('attendee_name'));
	clearField(g('attendee_email'));
	clearField(g('meeting_subject'));
	setElementFocus('meeting_subject');
	window.scrollTo(0, 360);
}
function setUpdatedSubject(newSubject) {
	var obj = g('SubjectHeader');
	if (obj) obj.innerHTML = newSubject;
}