try {
	try {
		var isSafari = dojo.render.html.safari;
	} catch (e) {
		var isSafari = navigator.vendor.indexOf("Apple") != -1;
	}
}catch (e){
	var isSafari = false;
}

var wevent = null;
var non_calendar_page = false;
var relate_options = new Object();
var event_options = new Object();
var type_select = null;

Array.prototype.indexOf = function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  };

// show duplicate contact information
function show_contact(contact_id, do_show)
{
	var show_style = (isIE) ? "inline" : "table-row";

	if(do_show)
	{
		document.getElementById('agi-contact-info-' + contact_id).style.display = show_style;
		document.getElementById('agi-show-contact-' + contact_id).style.display = "none";
		document.getElementById('agi-hide-contact-' + contact_id).style.display = "inline";
	} else {
		document.getElementById('agi-contact-info-' + contact_id).style.display = "none";
		document.getElementById('agi-show-contact-' + contact_id).style.display = "inline";
		document.getElementById('agi-hide-contact-' + contact_id).style.display = "none";
	}
	lightbox_resize();
}

function lightbox_resize()
{
	try {
		resize_recommendations();
		resizeOverlay();
	} catch (e){}
};

function resize_recommendations()
{
	// rebirth style resize
	try {
		var recommendations = document.getElementById('dynamicheight');
		var rebirth = document.getElementById('agi-rebirth-id');
		var dupes = document.getElementById('duplicate-form');

		if (rebirth != null)
		{
			if (dupes.style.display == "block")
				var event = dupes;
			else
				var event = document.getElementById('agi-rem-event');
			var reminders = document.getElementById('agi-rem-remindme');
			var adjust = (isIE) ? 95 : 65;
			var height = event.scrollHeight + reminders.scrollHeight + adjust;
			recommendations.style.height = height + "px";
			return;
		}
	} catch (e){}

	//classic style resize
	try {
		var event_details = document.getElementById('agi-pop-content2');
		if (!event_details)
			var event_details = document.getElementById('agi-pop-content');

		var recommendations = document.getElementById('dynamicheight');
		var img_title = document.getElementById('agi-poptitle');
		var rec_height = event_details.clientHeight - img_title.scrollHeight;
//		alert(img_title.scrollHeight);
		var adjust = (isIE) ? 20 : 0;
		if (site == "bma")
			rec_height = rec_height - 15 - adjust;
		recommendations.style.height = rec_height + "px";
	} catch (e){}
}

function check_for_phone(this_select)
{
	if (!mobile_phone && this_select.selectedIndex == 1 && document.getElementById("agi-rem-mobile-phone").style.display != "block")
	{
		if (confirm('You do not have a cell phone number stored.\nWould you like to enter one now?'))
		{
			try {
				document.getElementById("agi-rem-mobile-phone").style.display = "block";
			} catch (e) {}
			lightbox_resize();
		} else {
			this_select.selectedIndex = 0;
			this_select.hoverIndex = 0;
			try {
				this_select.set_value(0);
			} catch(e){}
		}
	}
}

function add_calendar_event()
{
	non_calendar_page = false;
	if (add_html != "")	{
        if (is_desktop()) {
            lightbox(ahost + '/desktop/event_add.pd',{width:525,height:428,position:'user',left:0,top:0}, add_html);
        } else {
            lightbox(ahost + '/reminders/event_add.pd',{width:440}, add_html);
        }
	} else {
        if (is_desktop()) {
            lightbox(ahost + '/desktop/event_add.pd',{width:508,height:422,position:'user',left:0,top:0});
        } else {
            lightbox(ahost + '/reminders/event_add.pd',{width:440});
        }
	}
	var date = new Date();
	try {
		wevent.set_date_values(date.getMonth() + 1, date.getDate(), date.getFullYear());
	} catch (e){}
}

function add_event()
{
	non_calendar_page = true;
	if (add_html != "")
	{
		lightbox(ahost + '/reminders/event_add.pd',{width:440}, add_html);
	} else {
		lightbox(ahost + '/reminders/event_add.pd',{width:440});
	}
	var date = new Date();
	try {
		wevent.set_date_values(date.getMonth() + 1, date.getDate(), date.getFullYear());
	} catch(e){}
}

get_event_source = function(ev)
{
	if(ev)			//Moz
		return ev.target;
	else if(window.event)	//IE
		return window.event.srcElement;
};

function hover_edit(e)
{
	var element = get_event_source(e);
	element.className = "agi-fieldchange-on";
	if (element.innerHTML == "&nbsp;")
		element.innerHTML = "Click To Edit";
}

function leave_edit(e)
{
	var element = get_event_source(e);
	element.className = "agi-fieldchange";
	if (element.innerHTML == "Click To Edit")
		element.innerHTML = "&nbsp;";
}

function get_option(strValue, strDisplay)
{
	if (!strDisplay) {strDisplay = strValue;}

	var objOption = document.createElement("option");
	objOption.setAttribute("value", strValue);
	objOption.appendChild(document.createTextNode(strDisplay));

	return objOption;
}

function is_desktop()
{
	try
	{
		if(desktop)
			return true;
		else
			return false;
	} catch(e) {
		return false;
	}
}

function WombatContact(fname, lname, email, male, female, relate)
{
	this.fname = document.getElementById(fname);
	this.lname = document.getElementById(lname);
	this.male = document.getElementById(male);
	this.female = document.getElementById(female);
	this.relationship = document.getElementById(relate);
	this.relationship_type = document.getElementById(relate + "-type");
	this.email = document.getElementById(email);

	this.fname_row = document.getElementById(fname + "-row");
	this.lname_row = document.getElementById(lname + "-row");
	this.email_row = document.getElementById(email + "-row");
	this.gender_row = document.getElementById(male + "-" + female + "-row");
	this.relationship_row = document.getElementById(relate + "-row");

	this.fname_display = document.getElementById(fname + "-display");
	this.lname_display = document.getElementById(lname + "-display");
	this.email_display = document.getElementById(email + "-display");
	this.gender_display = document.getElementById(male + "-" + female + "-display");
	this.relationship_display = document.getElementById(relate + "-display");

	try {
		this.fname_display.onmouseover = hover_edit;
		this.fname_display.onmouseout = leave_edit;
		this.lname_display.onmouseover = hover_edit;
		this.lname_display.onmouseout = leave_edit;
		this.email_display.onmouseover = hover_edit;
		this.email_display.onmouseout = leave_edit;
		this.gender_display.onmouseover = hover_edit;
		this.gender_display.onmouseout = leave_edit;
		this.relationship_display.onmouseover = hover_edit;
		this.relationship_display.onmouseout = leave_edit;
	} catch(e){}

	var wcontact = this;
	this.isIE = navigator.appName.indexOf("Microsoft") != -1;

	try {
		this.relationship_type.onchange = function(e)
		{
			var relationship_type = get_event_source(e);
			var type = relationship_type.options[relationship_type.selectedIndex].value;
			var relationship = document.getElementById(relationship_type.id.substring(0, (relationship_type.id.length - 5)))
			var options = relate_options[type];

			for (var j = relationship.options.length - 1; j > -1; j--)
				relationship.remove(j);

			relationship.appendChild(get_option("", "Relationship"));
			if (options)
				for (var i=0; i < options.length; i++)
				{
					relationship.appendChild(get_option(options[i].id, options[i].description));
				}
		};
	} catch(e) {}

	this.populate_relationship =

	this.reset_form = function()
	{
		this.fname.value = "";
		this.lname.value = "";
		this.email.value = "";
		this.male.checked = false;
		this.female.checked = true;
		this.relationship.selectedIndex = 0;
	};

	this.isEmpty = function()
	{
		return (fname.value.length == 0 && email.value.length == 0 && lname.value.length == 0)
	};

	this.display = function(blnShow)
	{
		var strDisplay = (this.isIE) ? "inline" : "table-row";

		strDisplay = (blnShow) ? strDisplay : "none";
		this.fname_row.style.display = strDisplay;
		this.lname_row.style.display = strDisplay;
		this.email_row.style.display = strDisplay;
		this.gender_row.style.display = strDisplay;
		this.relationship_row.style.display = strDisplay;
			lightbox_resize();
	};

}

function WombatEvent(form_name)
{
	var w_event = this;
	resize_recommendations();
	var wdl = new WombatDataLoader()
	wdl.load_address_data();
	this.debug = false;
	this.form = document.getElementById(form_name);
	this.errors = new Errors("lightbox_message_area");
	this.request = new Requester("", "POST", true, true);

	this.submitting = false;
	this.edit_form = false;
	this.add_another = false;
	this.pony_ok = (ahost.indexOf('beta') > -1);
	this.has_spinners = true;

	this.isIE = navigator.appName.indexOf("Microsoft") != -1;

	// check to see if the edited event is a holiday
	try {
		this.isHoliday = (document.getElementById("holiday").value == 1);
	} catch(e) {
		this.isHoliday = false;
	}

	this.original_date = null;

	// arrays of values for special display cases
	this.arrHideTitle = new Array("Birthday", "Anniversary", "Employment Anniversary");
	this.allowEmptyYear = new Array("Birthday", "Anniversary");
	this.arrDefaultMe = new Array("Other");
	this.arrAnnualRecur = new Array("Birthday", "Anniversary", "Employment Anniversary");
	this.arrTwoContacts = new Array("Wedding", "Anniversary");
	this.arrRecur = new Array("Other", "Party");


	this.contact1 = new WombatContact("fname", "lname", "email", "gender-m", "gender-f", "relationship");
	this.contact2 = new WombatContact("fname-2", "lname-2", "email-2", "gender-m-2", "gender-f-2", "relationship-2");

	this.remindContainer = document.getElementById("agi-rem-remindme");
	this.recur_row = document.getElementById("recur-row");
	this.title_row = document.getElementById("title-row");
	this.time_row = document.getElementById("time-row");
	//this.type_select = document.getElementById("event-type");
	this.type_select = _widget["event-type"];
	this.type_span = document.getElementById("event-type-options");
	this.about_me = document.getElementById("about-me");
	this.about_other = document.getElementById("about-other");
	this.date  = document.getElementById("date");
	this.time  = document.getElementById("time");
	this.all_day = document.getElementById("all_day");
	this.time_span = document.getElementById("time_span");
	this.title = document.getElementById("title");
	this.notes = document.getElementById("notes");
	this.recur = document.getElementById("recur");
	this.cancel =	document.getElementById("cancel");
	this.del = document.getElementById("delete");

	// event detail display fields
	this.notes_display = document.getElementById("notes-display");
	this.title_display = document.getElementById("title-display");
	this.recur_display = document.getElementById("recur-display");
	this.type_display = document.getElementById("event-type-display");
	this.date_display = document.getElementById("date-display");
	this.time_display = document.getElementById("time-display");
	this.about_display = document.getElementById("about-me-about-other-display");

	try {
		if (document.getElementById("date") != null)
		{
			this.date_spin = new DateSpinner('date');
			this.date_spin.set_up_down();
			this.time_spin = new TimeSpinner('time');
			this.time_spin.set_up_down();
			this.has_spinners = true;
		} else {
			this.month = document.getElementById("month")
			this.day = document.getElementById("day")
			this.year = document.getElementById("year")
			this.hour = document.getElementById("hour")
			this.minute = document.getElementById("minute")
			this.ampm = document.getElementById("ampm")
			this.month.onchange = function(){set_days('month', 'day', 'year');};
			this.year.onchange = function(){set_days('month', 'day', 'year');};
			this.has_spinners = false;
		}
	} catch (e){}

	try {
		this.all_day.onclick = function(){
			var strDisplay = (w_event.isIE) ? "inline" : "table-row";
			if (w_event.all_day.checked)
			{
				if (w_event.has_spinners)
					w_event.time_span.style.display = "none";
				else
					w_event.time_row.style.display = "none";

				var new_times = times_no_hours;
				_reminders['agi-reminders'].show_hours = false;
			} else {
				if (w_event.has_spinners)
					w_event.time_span.style.display = "inline";
				else
					w_event.time_row.style.display = strDisplay;

				var new_times = times;
				_reminders['agi-reminders'].show_hours = true;
			}
			lightbox_resize();
			for (i in _widget)
				if (_widget[i].kind == "SELECT" && _widget[i].id.indexOf("remind-day") == 0)
					_widget[i].update_options(new_times);
				else if (_widget[i].tagName == "SELECT" && _widget[i].id.indexOf("remind-day") == 0)
					update_select_options(_widget[i], new_times);
		};
	} catch (e) {}

	try {
		this.save =	document.getElementById("edit-save");
		this.save.onclick = function(){w_event.edit();};
	} catch(e) {
		try {
			this.save =	document.getElementById("save");
			this.save.onclick = function(){w_event.submit();};
			this.save_add =	document.getElementById("save_add");
			this.save_add.onclick = function(){w_event.add_another=true;w_event.submit();};
		} catch (e) {}
	}

	try {
		if (!this.isHoliday)
		{
			this.title_display.onmouseover = hover_edit;
			this.title_display.onmouseout = leave_edit;
			this.recur_display.onmouseover = hover_edit;
			this.recur_display.onmouseout = leave_edit;
			this.type_display.onmouseover = hover_edit;
			this.type_display.onmouseout = leave_edit;
			this.date_display.onmouseover = hover_edit;
			this.date_display.onmouseout = leave_edit;
			this.about_display.onmouseover = hover_edit;
			this.about_display.onmouseout = leave_edit;
			this.time_display.onmouseover = hover_edit;
			this.time_display.onmouseout = leave_edit;
		}
		this.notes_display.onmouseover = hover_edit;
		this.notes_display.onmouseout = leave_edit;
	} catch(e){}

	// add event triggers to form fields
	try {
		this.about_me.onclick = function(){w_event.contact1.display(false);};
		this.about_other.onclick = function(){w_event.contact1.display(true);};
	} catch(e) {
	}

	try {
		this.type_select.onchange = function(){w_event.remindersShowHide(this);};
		this.cancel.onclick = function(){if (!w_event.submitting){hideLightbox();}};

		// autocomplete fields
		new WombatEventComplete('fname', this.contact1);
		new WombatEventComplete('lname', this.contact1);
		new WombatEventComplete('email', this.contact1);

		new WombatEventComplete('fname-2', this.contact2);
		new WombatEventComplete('lname-2', this.contact2);
		new WombatEventComplete('email-2', this.contact2);
		//new TextAreaComplete('notes');
	} catch(e){
	}

	try {
		this.notes.onkeyup = function() { w_event.pony(); }
	} catch (e){}

    this.pony = function(keyup) {
        var x = w_event.notes.value.toLowerCase();
        if (x.search(/i want a pony/) > -1) {
            if(w_event.pony_ok && confirm('O RLY?')) {
                if (w_event.pony_ok) {
                    loc = ahost+'/reminders/pony.pd';
                    lightbox(loc,{'width':440,'hideloading':true});
                }
            } else w_event.pony_ok = false;
        }
    }

	this.remindersShowHide = function(objSelect)
	{
		// set the reminder type on the Reminders object
		if (!this.edit_form)
//			_reminders['agi-reminders'].set_type(objSelect.options[objSelect.selectedIndex].type);
			_reminders['agi-reminders'].set_type(event_options[objSelect.selectedIndex].type);

		// ie doesn't recognize table-row and firefox displays inline incorrectly
		var strDisplay = (this.isIE) ? "inline" : "table-row";

		// show birth date for birthdays
		if (objSelect.options[objSelect.selectedIndex].text == "Birthday")
			document.getElementById("date-error").innerHTML = "*Birth Date:";
		else
			document.getElementById("date-error").innerHTML = "*Event Date:";

		// show or hide the title input
		if (this.arrHideTitle.indexOf(objSelect.options[objSelect.selectedIndex].text) != -1)
		{
			this.title_row.style.display = "none";
			document.getElementById("fname-required").style.display = "inline";
			document.getElementById("fname-title").className = "agi-formtitle agi-required";
		} else {
			this.title_row.style.display = strDisplay;
			document.getElementById("fname-required").style.display = "none";
			document.getElementById("fname-title").className = "agi-formtitle";
		}

		// show or hide the recurrance input
		if (this.arrAnnualRecur.indexOf(objSelect.options[objSelect.selectedIndex].text) != -1 ||
				this.arrRecur.indexOf(objSelect.options[objSelect.selectedIndex].text) == -1 )
			this.recur_row.style.display = "none";
		else
			this.recur_row.style.display = strDisplay;

		// show or hide the second contact inputs
		this.contact2.display(this.arrTwoContacts.indexOf(objSelect.options[objSelect.selectedIndex].text) != -1);

		// don't change contact inputs based on me/other defaults on the edit page
		if (!this.edit_form)
		{
			try
			{
				if (this.arrDefaultMe.indexOf(objSelect.options[objSelect.selectedIndex].text) != -1)
					this.about_me.checked = true;
				else
					this.about_other.checked = true;
			} catch(e) {

			}

			// show or hide the first contact inputs based on me/someone else selection
			this.contact1.display(this.arrDefaultMe.indexOf(objSelect.options[objSelect.selectedIndex].text) == -1);
		}
		lightbox_resize();
	}

	this.disable = function(blnDisable)
	{
		if (!this.form)
			return false;
		for (i = 0; i < this.form.elements.length; i++)
		{
			var e_type = this.form.elements[i].type;
			if (e_type != "hidden")
			{
				this.form.elements[i].disabled = blnDisable;
				if (e_type != "button" && e_type != "submit" && e_type != "checkbox" && e_type != "radio" && blnDisable)
				{
					this.form.elements[i].style.backgroundColor = "InactiveCaption";
					this.form.elements[i].style.color = "InactiveCaptionText";
				}
				else if (e_type != "button" && e_type != "submit" && e_type != "checkbox" && e_type != "radio" && !blnDisable)
				{
					this.form.elements[i].style.backgroundColor = "";
					this.form.elements[i].style.color = "";
				}
			} else {
				try
				{
					_widget[this.form.elements[i].id].set_disabled(blnDisable);
				} catch(e){}
			}
		}
	}

	this.deleteEvent = function(strId)
	{
		if (confirm('Are you sure? This action will delete this event and any associated reminders.'))
		{
			var strQuery = "id=" + strId;
			this.submitEvent(strQuery, "delete");
		}
	}

	this.edit = function()
	{
		if (!this.form)
			return false;

		this.validate()

		if (!this.errors.is_error())
		{
			this.errors.hide();
			this.disable(true);
			var strQuery = new Requester().formToQuery(this.form);
			this.submitEvent(strQuery, "edit");
		} else {
			this.errors.show();
			lightbox_resize();
		}
	}

	this.submit = function()
	{
		if (!this.form)
			return false;

		this.validate()

		if (!this.errors.is_error())
		{
			this.errors.hide();
			this.disable(true);
			var strQuery = new Requester().formToQuery(this.form);
			this.submitEvent(strQuery, "add");
		} else {
			this.errors.show();
			lightbox_resize();
		}
	}

	this.submitEvent = function(strQuery, strAction)
	{
		if (this.submitting)
			return;

		//if (!demo_user)
		if (true)
		{
			this.submitting = true;
			this.request.url = ahost+'/reminders/' + strAction + 'event.pd';
			this.request.onsuccess = this.onsuccess;
			this.request.onerror = this.onerror;
			try {
				var range = get_cached_range();
				if (range.start_year == range.end_year)
					var la = range.end_month - range.start_month;
				else
					var la = (12 - range.start_month) + (12 * (range.end_year - range.start_year -1)) + range.end_month;

				var rangeQuery = "&m=" + range.start_month + "&y=" + range.start_year + "&lb=0&la=" + la
			} catch (e) {
				var rangeQuery = "";
			}

			this.request.sendRequest(strQuery + rangeQuery);
		} else {
			write_demo_message("lightbox_message_area", strAction);
			w_event.disable(false);
		}
	}

	this.onerror = function(req)
	{
		w_event.submitting = false;
		w_event.disable(false);
		w_event.errors.add(new Error("", "There was an error saving this event.<br>Please try again in a few minutes."));
		if (w_event.debug)
			w_event.errors.add(new Error("", req.responseText));
		w_event.errors.display(true);
	}

	this.onsuccess = function(req)
	{
		try {
			if (req.responseText)
				eval("var results = " + req.responseText);
			else
				var results = new Object();
		} catch (e){
			var req = new Object();
			req.responseText = "error eval'ing response";
			w_event.onerror(req);
			return;
		}

		w_event.submitting = false;
		// update the mobile phone status
		if (results.phone_saved)
		{
			if (results.phone_saved == 1)
				mobile_phone = true;
		}

		if (results.contacts)
			append_addresses(results.contacts)
		var index_events = new Object();
		if (results.event_id || results.events)
		{
			index_events.id = results.event_id;
			index_events.events = results.events;
		}

		if (results.status == 0)
		{
			// update flash cookie for birthday module
			try
			{
				if (results.events)
					parseReminderUpdate(req)
				else if (results.event_id)
					parseReminderDelete(req)
			} catch(e) {}

			w_event.closeLightBoxed(index_events);
		} else if (results.status == -2) {
			w_event.disable(false);
			write_demo_message("lightbox_message_area", results.page);
		} else if (results.status == -3) {
			w_event.demo_saved(results);
		} else if (results.status == -4) {
			w_event.duplicate_display(results);
		} else {
			w_event.disable(false);
			if (results.message.indexOf("expat.ExpatError") != -1)
				results.message = "There were unrecognized characters in your event.  Please check your entries and try again.";
			w_event.errors.add(new Error("", results.message));
			if (w_event.debug)
				w_event.errors.add(new Error("", results.error));

			w_event.errors.display(true);
		}
	}

	this.demo_saved = function(results)
	{
		w_event.disable(false);
		document.getElementById("agi-rem-table").style.display = "none";
		try {
			document.getElementById("agi-title").style.display = "none";
		} catch(e){}
		try {
			document.getElementById("agi-pop-title").style.display = "none";
		} catch(e){}
		try {
			document.getElementById("agi-titlemessage").style.display = "none";
		} catch(e){}

		document.getElementById("agi-rem-mobile-phone").style.display = "none";
		document.getElementById("agi-rem-remindme").style.display = "none";
		w_event.save.style.display = "none";
		w_event.save_add.style.display = "none";
		w_event.cancel.style.display = "none";
		write_demo_saved_message("lightbox_message_area", w_event.add_another);
	}

	this.duplicate_display = function(results)
	{
		var two_contacts = false;
		if (this.arrTwoContacts.indexOf(this.type_select.options[this.type_select.selectedIndex].text) != -1 &&
			(this.contact2.fname.value.length > 0 ||
			this.contact2.lname.value.length > 0 ||
			this.contact2.email.value.length > 0))
				two_contacts = true;
		if (two_contacts && results.merge_rows2.length > 0 && results.merge_rows1.length > 0)
		{
			document.getElementById('duplicate-alert').innerHTML = "Potential duplicates found.";
			document.getElementById('new-contact-header').innerHTML = "Please select the contacts you want to use for this event.";
		} else if (results.merge_rows1.length > 0 || (two_contacts && results.merge_rows2.length > 0) ){
			document.getElementById('duplicate-alert').innerHTML = "Potential duplicate found.";
			document.getElementById('new-contact-header').innerHTML = "Please select the contact you want to use for this event.";
		}

		if (!two_contacts)
		{
			document.getElementById('contact-one-head').style.display = "none";
			document.getElementById('agi-pluralize').style.display = "none";
		} else {
			document.getElementById('contact-one-head').style.display = "block";
			document.getElementById('agi-pluralize').style.display = "inline";
		}

		w_event.disable(false);
		document.getElementById("agi-rem-table").style.display = "none";
		try {
			document.getElementById("agi-title").style.display = "none";
		} catch(e){}
		document.getElementById("agi-rem-mobile-phone").style.display = "none";
		document.getElementById("agi-rem-remindme").style.display = "none";
		document.getElementById('agi-pop-title').style.display = "none";
		document.getElementById('duplicate-form').style.display = "block";
		if (two_contacts && results.merge_rows2.length > 0)
		{
			document.getElementById('duplicate-table2').innerHTML = results.merge_rows2;
			document.getElementById('contact_2_dupes').style.display = "inline";
		}
		if (results.merge_rows1.length > 0)
		{
			document.getElementById('contact_1_dupes').style.display = "inline";
			document.getElementById('duplicate-table').innerHTML = results.merge_rows1;
		}
		document.getElementById('dupes_shown').value = "1";
		lightbox_resize();
	}

	this.duplicate_continue = function()
	{
		w_event.disable(false);
		document.getElementById("agi-rem-table").style.display = "block";
		try {
			document.getElementById("agi-title").style.display = "block";
		} catch(e){}
		document.getElementById("agi-rem-mobile-phone").style.display = "none";
		document.getElementById("agi-rem-remindme").style.display = "block";
		w_event.save.style.display = "inline";
		w_event.save_add.style.display = "inline";
		w_event.cancel.style.display = "inline";
		document.getElementById('agi-pop-title').style.display = "block";
		document.getElementById('duplicate-form').style.display = "none";
		if (document.getElementById('duplicate-add').checked)
			w_event.submit();
	}

	this.reset_form = function()
	{
		//var o_date = w_event.date_spin.get_date();
		var o_date = w_event.original_date;

		var lbox = document.getElementById('lightbox');
		lbox.innerHTML = add_html;
		evalScripts(add_html);
		//wevent.date_spin.set_display(o_date);
	};

	this.closeLightBoxed = function(index_events)
	{
		if (!non_calendar_page)
			update_event_list(index_events);
		if (w_event.add_another)
			w_event.reset_form();
		else
			hideLightbox();
	};

	this.validate = function()
	{
		this.errors.reset();

		// check for an event title if the field is displayed
		if ((this.arrHideTitle.indexOf(this.type_select.options[this.type_select.selectedIndex].text) == -1 &&
				this.title.value.length == 0) && !this.isHoliday)
				this.errors.add(new Error("title", "Enter an event title."));
		if ((this.arrHideTitle.indexOf(this.type_select.options[this.type_select.selectedIndex].text) == -1 &&
				unicode_to_entities(this.title.value).length > 255) && !this.isHoliday)
				this.errors.add(new Error("title", "The event title is too long."));

		// if event title is hidden we need at least one contact's first name
		if ((this.arrHideTitle.indexOf(this.type_select.options[this.type_select.selectedIndex].text) != -1 &&
				this.contact1.fname.value.length == 0 && !this.about_me.checked) && !this.isHoliday)
				this.errors.add(new Error("fname", "Enter a contact name."));

		// make sure something is selected for month/day/year
		if (this.has_spinners)
		{
			var o_date = this.date_spin.get_date();
			if ((o_date.year == null && this.allowEmptyYear.indexOf(this.type_select.options[this.type_select.selectedIndex].text) == -1)
					 || o_date.day == 0 || o_date.month == 0)
				this.errors.add(new Error("date", "Select a date."));
		} else {
			if (this.year.selectedIndex == 0 && this.allowEmptyYear.indexOf(this.type_select.options[this.type_select.selectedIndex].text) == -1)
				this.errors.add(new Error("date", "Select a year."));
			if (this.month.selectedIndex == 0)
				this.errors.add(new Error("date", "Select a month."));
			if (this.day.selectedIndex == 0)
				this.errors.add(new Error("date", "Select a day."));
		}

		// check the length of the content of the notes field
		if (this.notes.value.length > 250)
			this.errors.add(new Error("notes", "Notes must be less than 250 characters."));

		this.contact1.email.value = this.contact1.email.value.replace(/\u00A0/g, " ");
		this.contact2.email.value = this.contact2.email.value.replace(/\u00A0/g, " ");
		this.contact1.email.value = trim(this.contact1.email.value);
		this.contact2.email.value = trim(this.contact2.email.value);

		if (!this.about_me.checked && unicode_to_entities(this.contact1.fname.value).length > 50)
			this.errors.add(new Error("fname", "The first name is too long."));
		if (!this.about_me.checked && unicode_to_entities(this.contact1.lname.value).length > 50)
			this.errors.add(new Error("lname", "The last name is too long."));

		if (this.arrTwoContacts.indexOf(this.type_select.options[this.type_select.selectedIndex].text) != -1 &&
			unicode_to_entities(this.contact2.fname.value).length > 50)
				this.errors.add(new Error("fname-2", "The first name is too long."));
		if (this.arrTwoContacts.indexOf(this.type_select.options[this.type_select.selectedIndex].text) != -1 &&
			unicode_to_entities(this.contact2.lname.value).length > 50)
			this.errors.add(new Error("lname-2", "The last name is too long."));

		// check for a valid contact email address
		if (!isEmail("email", true))
			this.errors.add(new Error("email", "Enter a valid email address."));

		// check the values in the second contact fields if needed
		if (this.arrTwoContacts.indexOf(this.type_select.options[this.type_select.selectedIndex].text) != -1 && (!isEmail("email-2", true)))
			this.errors.add(new Error("email-2", "Enter a valid email address."));

		if (this.is_cell_reminder() && document.getElementById("event-phone").value == "" && !mobile_phone)
			this.errors.add(new Error("event-phone", "You must enter a cell number."));
	}

	this.is_cell_reminder = function()
	{
		var methods = document.getElementsByName("remind-by");

		for (var i=0; i < methods.length; i++)
			if (methods[i].value == 2)
				return true;
		return false;
	}

	this.set_date_values = function(month, day, year)
	{
		var o_dates = new Object();
		o_dates.month = month;
		o_dates.day = day;
		o_dates.year = year;
		if (this.has_spinners)
		{
			this.date_spin.set_display(o_dates);
		} else {
			this.month.value = month / 1;
			//this.year.value = year;
			set_days('month', 'day', 'year');
			this.day.value = day / 1;
		}
		this.original_date = o_dates;
	};

	/////////////////////////////////////////////
	// functions used on the event detail page //
	/////////////////////////////////////////////
	this.set_field_events = function()
	{
		this.edit_form = true;

		// the notes field should be the only thing editable on a holiday
		if (this.isHoliday)
			var display = new Array("notes-display");
		else
			var display = new Array("date-display", "event-type-display", "title-display", "recur-display",
									"about-me-about-other-display", "fname-display", "lname-display",
									"email-display", "relationship-display", "gender-m-gender-f-display",
									"fname-2-display", "lname-2-display", "email-2-display", "relationship-2-display",
									"gender-m-2-gender-f-2-display", "notes-display", "time-display");
		for (var i=0; i < display.length; i++)
		{
			document.getElementById(display[i]).onclick = function(e)
			{
				var element = get_event_source(e);
				element.style.display = "none";
				document.getElementById(element.id.substring(0, element.id.length - 7) + "options").style.display = "block";
				if (element.id == "event-type-display")
					try {
						_widget["event-type"].fix_size();
					} catch (e) {}
				lightbox_resize();
			}
		}
	}
}

function unicode_to_entities(myString)
{
        var new_value = "";
        for (var j = 0; j < myString.length; j++)
        {
                if (myString.charCodeAt(j) > 128)
                        new_value += "&#" + myString.charCodeAt(j) + ";";
                else
                        new_value += myString.charAt(j);
        }
        return new_value;
}

function isEmail(strEmailId, blnAllowEmpty)
{
	var objEmail = document.getElementById(strEmailId);

	if (blnAllowEmpty && objEmail.value.length == 0)
		return true;

	var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
	var regex = new RegExp(emailReg);
	return regex.test(objEmail.value);
}

function set_days(month_id, day_id, year_id)
{
	var month_select = document.getElementById(month_id);
	var day_select = document.getElementById(day_id);
	var year_select = document.getElementById(year_id);

	var intMonth = month_select.value;
	var arrOptions = day_select.options;
	var currentValue = day_select.value;
	var year = year_select.value;

	var arrDays = month_days(year);
	for (i = 1; i < arrOptions.length; i++)
		arrOptions[i] = null;
	for (j = 1; j <= arrDays[intMonth]; j++)
	{
		if (j < 10)
			k = "0" + j;
		else
			k = j;

		arrOptions[j] = new Option(k, j);
	}
	if (currentValue <= arrDays[intMonth])
		day_select.value = currentValue;
}

function month_days(year)
{
	if ((document.location.href.indexOf('reminders') != -1) ||
		(document.location.href.indexOf('desktop') != -1))
		x = 1;
	else
		x = 0;

	var days_in_month = new Array(13);
	days_in_month[0 + x] = 31;
	days_in_month[1 + x] = february_days(year);
	days_in_month[2 + x] = 31;
	days_in_month[3 + x] = 30;
	days_in_month[4 + x] = 31;
	days_in_month[5 + x] = 30;
	days_in_month[6 + x] = 31;
	days_in_month[7 + x] = 31;
	days_in_month[8 + x] = 30;
	days_in_month[9 + x] = 31;
	days_in_month[10 + x] = 30;
	days_in_month[11 + x] = 31;
	return days_in_month;
}

function february_days(year)
{
	var num_days = (year%4==0 && ((year%100!=0) || (year%400==0))) ? 29 : 28;
	return num_days;
}

var times;
var times_no_hours;
var types;
var reminders;
var _reminders = new Object();

function Reminders(reminders, pid, type, postfix, show_hours)
{
	if (postfix)
		this.postfix = postfix;
	else
		this.postfix = "";
	if (show_hours)
		this.show_hours = show_hours;
	else
		this.show_hours = false;

	_reminders[pid] = this;
	this.reminders = reminders;
	this.type = type;
	this._parent = document.getElementById(pid);
	this.pid = pid;

	this.limit = 4;

	// element id labels
	this.row_label = "agi-rem-remindme-row" + this.postfix;
	this.time_label = "remind-day" + this.postfix;
	this.method_label = "remind-by" + this.postfix;
	this.container_label = "agi-rem-link-container" + this.postfix;

	// this is an ugly hack to get around the fact that Safari
	// refuses to find the parent div in the lightbox with getElementById
	try {
		var kids = document.getElementById('agi-pop-remcontent').childNodes;
		for (var j = 0; j < kids.length; j++)
		{
			if (kids[j].id && kids[j].id == "agi-rem-remindme")
			{
				sub_kids = kids[j].childNodes;
				for (var k = 0; k < sub_kids.length; k++)
				{
					if (sub_kids[k].id && sub_kids[k].id == this.pid)
						this._parent = sub_kids[k];
				}
			}
		}
	} catch(e) {}

	this.update_reminders = function()
	{
		var row_label = _reminders[pid].row_label;
		var time_label = _reminders[pid].time_label;
		var method_label = _reminders[pid].method_label;
		var container_label = _reminders[pid].container_label;

		var nodes = _reminders[pid]._parent.childNodes;
		var reminder = new Array();

		// loop over all the child nodes in the parent container.
		for (var i=0; i < nodes.length; i++)
		{
			// if the child node is of class "agi-rem-remindme-row" it is a new reminder
			if (nodes[i].className == "agi-rem-remindme-row")
			{
				var children = nodes[i].childNodes;
				var option = new Object();

				// loop over the child nodes of the new reminder row
				for (var j=0; j < children.length; j++)
				{
					child_id = children[j].id;
					// if the node is a HIDDEN and the name begins with "remind-day" it's the time
					if (children[j].nodeName == "INPUT" && children[j].type == "hidden" && children[j].name.indexOf(time_label) == 0)
						option.time = _widget[child_id].options[_widget[child_id].selectedIndex].value;
					// if the node is a HIDDEN and the name begins with "remind-by" it's the method
					else if (children[j].nodeName == "INPUT" && children[j].type == "hidden" && children[j].name.indexOf(method_label) == 0)
						option.method = _widget[child_id].options[_widget[child_id].selectedIndex].value;
				}
				// add the reminder row to the new array
				reminder.push(option);
			}
		}
		// replace the existing array with the newly created one
		_reminders[pid].reminders[_reminders[pid].type] = reminder;
	};

	this.set_type = function(type)
	{
		// only rebuild the reminders if the type has changed
		if (_reminders[pid].type != type)
		{
			_reminders[pid].update_reminders();
			_reminders[pid].type = type;
			var oremind = _reminders[pid].reminders[_reminders[pid].type];
			_reminders[pid].build_reminders();
		}
	};

	this.add_row = function()
	{
		var oremind = _reminders[pid].reminders[_reminders[pid].type];
		if (_reminders[pid].show_hours)
			var init_time = times[0].value;
		else
			var init_time = times_no_hours[0].value;

		oremind.push({time: init_time, method: types[0].value});
		if (oremind.length == 1)
		{
			_reminders[pid].build_reminders();
		} else {
			_reminders[pid].new_row(oremind.length - 1);
			_reminders[pid].replace_links();
		}
		lightbox_resize();
	};

	this.delete_row = function(index)
	{
		var row_label = _reminders[pid].row_label;
		var time_label = _reminders[pid].time_label;
		var method_label = _reminders[pid].method_label;
		var container_label = _reminders[pid].container_label;

		var oremind = _reminders[pid].reminders[_reminders[pid].type];
		var oldsize = oremind.length;
		oremind.splice(index, 1);
		var remove = document.getElementById(row_label + index);
		_reminders[pid]._parent.removeChild(remove);
		for (var i=index+1; i < oldsize; i++)
		{
			var new_index = i - 1;
			document.getElementById(row_label + i).id = row_label + new_index;
        	try {
        		document.getElementById(time_label + i + '-select-element').id = time_label + new_index;
        	} catch (e) {
        		document.getElementById(time_label + i).id = time_label + new_index;
        	}
        	try {
        		document.getElementById(method_label + i + '-select-element').id = method_label + new_index;
        	} catch (e) {
        		document.getElementById(method_label + i).id = method_label + new_index;
        	}
			document.getElementById(container_label + i).id = container_label + new_index;
		}
		_reminders[pid].replace_links();
		lightbox_resize();
	};

	this.replace_links = function()
	{
		var row_label = _reminders[pid].row_label;
		var time_label = _reminders[pid].time_label;
		var method_label = _reminders[pid].method_label;
		var container_label = _reminders[pid].container_label;

		var oremind = _reminders[pid].reminders[_reminders[pid].type];
		for (var i=0; i < oremind.length; i++)
		{
			var do_add = (i == oremind.length -1 && i < _reminders[pid].limit - 1);
			var links = _reminders[pid].get_link_container(do_add, true, i);
			var row = document.getElementById(row_label + i);
			var old_links = document.getElementById(container_label + i);
			row.replaceChild(links, old_links);
		}
		if (oremind.length == 0)
		{
			var row = _reminders[pid].get_div("agi-rem-remindme-row", "");
			var links = _reminders[pid].get_link_container(true, false, -1);
			row.appendChild(links)
			_reminders[pid]._parent.appendChild(row);
		}

	};

	this.build_reminders = function()
	{
		var oremind = _reminders[pid].reminders[_reminders[pid].type];
		this._parent.innerHTML = "";

		for (var i=0; i < oremind.length; i++)
			this.new_row(i);
		if (oremind.length == 0)
		{
			var row = _reminders[pid].get_div("agi-rem-remindme-row", "");
			var links = _reminders[pid].get_link_container(true, false, -1);
			row.appendChild(links)
			_reminders[pid]._parent.appendChild(row);
		}
		lightbox_resize();
	};

	this.new_row = function(idx)
	{
		var row_label = _reminders[pid].row_label;
		var time_label = _reminders[pid].time_label;
		var method_label = _reminders[pid].method_label;
		var container_label = _reminders[pid].container_label;

		var oremind = _reminders[pid].reminders[_reminders[pid].type];
		var row = _reminders[pid].get_div("agi-rem-remindme-row", idx);
		_reminders[pid]._parent.appendChild(row);

		var do_add = (idx == oremind.length -1 && idx < _reminders[pid].limit - 1);

		var time_hide = _reminders[pid].get_hidden(time_label, time_label + idx);
		var method_hide = _reminders[pid].get_hidden(method_label, method_label + idx);
		var links = _reminders[pid].get_link_container(do_add, true, idx);

		row.appendChild(time_hide);

		if (this.show_hours)
			var my_times = times;
		else
			var my_times = times_no_hours;

		if (!isSafari && !is_desktop())
		{
			var time_select = new NewSelect2(time_label + idx);
			time_select.options = my_times;
			time_select.init(oremind[idx].time);
		} else {
			var time_select = new OldSelect(time_label + idx, my_times, oremind[idx].time);
		}
		row.appendChild(document.createTextNode(" "));

		row.appendChild(method_hide);
		if (!isSafari && !is_desktop())
		{
			var method_select = new NewSelect2(method_label + idx);
			method_select.options = types;
			method_select.init(oremind[idx].method);
		} else {
			var method_obj = new OldSelect(method_label + idx, types, oremind[idx].method);
			method_select = method_obj.element;
		}
		method_select.onchange = function(){check_for_phone(method_select);};
		row.appendChild(document.createTextNode(" "));
		row.appendChild(links)
	};

	this.get_div = function(strClass, idx)
	{
		var row_label = _reminders[pid].row_label;

		var objDiv = document.createElement("div");
		objDiv.setAttribute("class", strClass);
		objDiv.setAttribute("id", row_label + idx);

		// attributes to make IE behave
		objDiv.setAttribute("className", strClass);
		return objDiv;
	};

	this.get_input = function(strName, strId, strClass)
	{
		var select = document.createElement("input");
		select.setAttribute("type", "text");
		select.setAttribute("name", strName);
		select.setAttribute("id", strId);
		select.setAttribute("class", strClass);
		// attributes to make IE behave
		select.setAttribute("className", strClass);
		return select;
	};

	this.get_hidden = function(strName, strId)
	{
		var hidden = document.createElement("input");
		hidden.setAttribute("type", "hidden");
		hidden.setAttribute("name", strName);
		hidden.setAttribute("id", strId);
		return hidden;
	};

	this.get_link = function(strClass, strLink, objOnclick)
	{
		var objLink = document.createElement("span");
		objLink.setAttribute("class", strClass);
		objLink.appendChild(document.createTextNode(strLink));
		objLink.setAttribute("style", "cursor: pointer;");
		objLink.onclick = objOnclick;
		// attributes to make IE behave
		objLink.setAttribute("className", strClass);

		return objLink;
	};

	this.get_link_container = function(blnAdd, blnDel, row)
	{
		var container_label = _reminders[pid].container_label;

		var objSpan = document.createElement("span");
		objSpan.setAttribute("id", container_label + row);
		if (blnDel)
			objSpan.appendChild(this.get_link("agi-instr  agi-themedark", "Delete", function(){_reminders[pid].delete_row(row);}));
		if (blnAdd && blnDel)
			objSpan.appendChild(document.createTextNode("\u00A0|\u00A0"));
		if (blnAdd)
			objSpan.appendChild(this.get_link("agi-instr  agi-themedark", "Add\u00A0Reminder", _reminders[pid].add_row));

		return objSpan;
	};
}
