
function MakePJAX (target)
{
	if ($(target).attr("href").indexOf("sessions") == -1) {
		$(target).pjax('#content_holder');
	}
}

function ClickNavLink (e) {
	$('a', $(".sidebar")).each(function (i, a) {
		$(a).removeClass('current');
	});
	
	if ($(this).hasClass('header-find') ||
			$(this).hasClass('header-make') ||
			$(this).hasClass('header-settings') ||
			$(this).hasClass('header-subscribe')) {
		$('.navigation').removeClass('show-find');
		$('.navigation').removeClass('show-make');
		$('.navigation').removeClass('show-settings');
		$('.navigation').removeClass('show-subscribe');
		if ($(this).hasClass('header-find')) {
			$('.navigation').addClass('show-find');
		}
		if ($(this).hasClass('header-make')) {
			$('.navigation').addClass('show-make');
		}
		if ($(this).hasClass('header-settings')) {
			$('.navigation').addClass('show-settings');
		}
		if ($(this).hasClass('header-subscribe')) {
			$('.navigation').addClass('show-subscribe');
		}
	}
	
	$(this).addClass('current');
}

function PJAXStart ()
{
	$('#content_holder').fadeOut(80);
	$('img', $('#pjax_loading')).show();
	$('#pjax_loading').hide();
	$('#pjax_loading').delay(200).fadeIn(500);
}

function PJAXEnd ()
{
	$('img', $('#pjax_loading')).hide();
	$('#pjax_loading').fadeOut(10);
	$('#pjax_loading').hide();
	$('#content_holder').fadeIn();
}


$(document).ready(function () {
	$('body')
	  .bind('pjax:start', PJAXStart)
	  .bind('pjax:end', PJAXEnd)
	$('.nav_link', $(".sidebar")).each(function (index, target) {
		MakePJAX(target);
	});
	$('a', $(".subnav")).each(function (index, target) {
		MakePJAX(target);
	});
	$("a[data-pjax]", $("#content_holder")).pjax("#content_holder");
	$('.nav_link', $(".sidebar")).click(ClickNavLink);
	$('a', $(".subnav")).click(ClickNavLink);
});


function ShowEventBox (id)
{
	$("#event"+id).slideDown(300);
	$("#event"+id+"show").hide();
	$("#event"+id+"hide").show();
}
function HideEventBox (id)
{
	$("#event"+id).slideUp(300);
	$("#event"+id+"show").show();
	$("#event"+id+"hide").hide();
}

function DisplayEventsByDate (year, month, day)
{
	var thisEventItem;
	
	$("#eventdetails").html("<div class=\"upcomingEvent\"><a class=\"title\">Loading...</a><p>This should only take a second!</p></div>");
	
	$.getJSON("/api/events/date?&year="+year+"&month="+month+"&day="+day,
		function(data){
			$("#eventdetails").html("");
			$.each(data.events, function(i,thisEvent){
				thisEventItem = CreateEventItem(thisEvent);
				thisEventItem.appendTo("#eventdetails");
			});
		}
	);
	return false;
}

function CreateEventItem (data)
{
	var eventItem;
	var myHtml = "";
	var desc = "";
	var tagArray = new Array();
	
	$.each(data.tags, function(i, thisTag){
		tagArray.push("<a href=\"/tag/view/"+thisTag.tag_code+"\">"+thisTag.tag_text+"</a>");
	});
	var strTags = tagArray.join(", ");
	
	desc = data.description;
	if (desc.length > 155 && desc.indexOf(" ", 150) > 0)
	{
		desc = desc.substr(0, desc.indexOf(" ", 150)) + " ... <a href=\"/event/view/"+data.event_id+"\">[Read more]</a>"; 
	}
	
	//console.log(data.starttime);
	var starttime = new Date(data.starttime * 1000);
	var endtime = new Date(data.endtime * 1000);
	var time = "";
	var startampm = am_or_pm(starttime);
	var endampm = am_or_pm(endtime);
	time += hours12(starttime.getHours());
	time += ":" + pad_zero(starttime.getMinutes());
	time += startampm != endampm ? startampm : "";
	time += "-";
	time += hours12(endtime.getHours());
	time += ":" + pad_zero(endtime.getMinutes());
	time += endampm;
	time = time.replace(/:00/g, "");
	var weekdays = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
	var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
	var venue = "";
	
	if (data.venue_id > 0)
	{
	   	venue = "<a href=\""+base_url+"venue/view/"+data.venue_id+"/"+data.venue_code+"\">"+data.venue_name+"</a>";
	} else
	{
		venue = data.venue_name;
	}
	
	myHtml = itemTemplate;//"" + $("#displayEventTemplate").html();
	myHtml = myHtml.replace(/{event_id}/g, data.event_id);
	myHtml = myHtml.replace(/{draft}/g, "");
	myHtml = myHtml.replace(/{btns}/g, "");
	myHtml = myHtml.replace(/{name}/g, data.name);
	myHtml = myHtml.replace(/{name_html}/g, $('<div/>').text(data.name).html());
	myHtml = myHtml.replace(/{description}/g, desc);
	myHtml = myHtml.replace(/{formatted_starttime}/g, data.formatted_starttime);
	myHtml = myHtml.replace(/{date_label}/g, weekdays[starttime.getDay()]);
	myHtml = myHtml.replace(/{date_label_class}/g, "Future");
	myHtml = myHtml.replace(/{date}/g, starttime.getDate());
	myHtml = myHtml.replace(/{month}/g, months[starttime.getMonth()]);
	myHtml = myHtml.replace(/{time}/g, time);
	myHtml = myHtml.replace(/{venue}/g, venue);
	myHtml = myHtml.replace(/{event_url}/g, data.event_url);
	myHtml = myHtml.replace(/{tags}/g, strTags);
	myHtml = myHtml.replace(/\n/g, "<br />");
	
	eventItem = $("<div/>").html(myHtml);
	
	return eventItem;
}
function am_or_pm (t)
{
	if (t.getHours() >= 12)
	{
		return "pm";
	} else
	{
		return "am";
	}
}
function hours12 (h)
{
	return h + (h > 12 ? -12 : (h == 0 ? 12 : 0));
}
function pad_zero (n)
{
	if (n < 10)
	{
		return "0" + n;
	} else
	{
		return n;
	}
}

function SubscribeTag (tag_id, doit, aSubscribed, aNotSubscribed)
{
	if (doit)
	{
		aSubscribed.style.display = "";
		aNotSubscribed.style.display = "none";
		
		$.getJSON("/tag/subscribe/"+tag_id+"?foo=bar&format=json",
			function(data){
			}
		);
	} else
	{
		aSubscribed.style.display = "none";
		aNotSubscribed.style.display = "";
		
		$.getJSON("/tag/unsubscribe/"+tag_id+"?foo=bar&format=json",
			function(data){
			}
		);
	}
	return false;
}

function BlockTag (tag_id, doit, aBlocked, aNotBlocked)
{
	if (doit)
	{
		aBlocked.style.display = "";
		aNotBlocked.style.display = "none";
		
		$.getJSON("/tag/block/"+tag_id+"?foo=bar&format=json",
			function(data){
			}
		);
	} else
	{
		aBlocked.style.display = "none";
		aNotBlocked.style.display = "";
		
		$.getJSON("/tag/unblock/"+tag_id+"?foo=bar&format=json",
			function(data){
			}
		);
	}
	return false;
}

function ShowRsvpForm ()
{
	$("#rsvpFormHolder").removeClass("hideRsvpForm");
	$("#rsvpFormHolder").addClass("showRsvpForm");
}
function HideRsvpForm ()
{
	$("#rsvpFormHolder").addClass("hideRsvpForm");
	$("#rsvpFormHolder").removeClass("showRsvpForm");
}

var event_rsvp = "maybe";
var rsvpClasses = new Object();
rsvpClasses.yes = "rsvpStatusYes";
rsvpClasses.maybe = "rsvpStatusMaybe";
rsvpClasses.no = "rsvpStatusNo";

function UpdateRsvp (event_id, my_rsvp)
{
	event_rsvp = my_rsvp;
	$.getJSON("/event/rsvp/"+event_id+"/"+my_rsvp,
		function(data){
		}
	);
	return false;
}

var email_notifications = new Array();
function UpdateEventOverrides (event_id)
{
	email_notifications = new Array();
	if ($("#override_dayof").fieldValue().length == 1)
	{
		email_notifications.push("dayof");
	}
	if ($("#override_daybefore").fieldValue().length == 1)
	{
		email_notifications.push("daybefore");
	}
	if ($("#override_1week").fieldValue().length == 1)
	{
		email_notifications.push("1week");
	}
	
	q = "&";
	q += "override=" + ($("#email_notice_override").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "dayof=" + ($("#override_dayof").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "daybefore=" + ($("#override_daybefore").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "1week=" + ($("#override_1week").fieldValue().length == 1 ? 1 : 0);
	$.getJSON("/event/event_overrides/"+event_id+"?"+q,
		function(data){
			var str = "";
			if (email_notifications.length == 0)
			{
				str = "No notifications for this event";
			} else
			{
				str = "Email notifications: ";
				if (email_notifications.length > 1)
				{
					str += "<br />";
				}
				for (var i=0; i<email_notifications.length; i++)
				{
					if (i > 0)
					{
						if (i == email_notifications.length-1)
						{
							str += " and ";
						} else
						{
							str += ", ";
						}
					}
					
					str += "<strong>";
					if (email_notifications[i] == "dayof") { str += "Day Of"; }
					if (email_notifications[i] == "daybefore") { str += "Day Before"; }
					if (email_notifications[i] == "1week") { str += "Week Before"; }
					str += "</strong>";
				}
			}
			$("#currentEmailNotificationSettings").html(str);
		}
	);
}

function UpdateEventGroupOverrides (event_id, group_id)
{
	q = "&";
	q += "override=" + ($("#group_email_notice_override").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "dayof=" + ($("#group_override_dayof").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "daybefore=" + ($("#group_override_daybefore").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "1week=" + ($("#group_override_1week").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "whenadded=" + ($("#group_override_whenadded").fieldValue().length == 1 ? 1 : 0) + "&";
	q += "group_id=" + group_id;
	
	$.getJSON("/event/event_group_overrides/"+event_id+"?"+q,
		function(data){
		}
	);
}

function ShowHideEventListItem ()
{
	if ($(this).parent().hasClass("expanded"))
	{
		$(this).parent().removeClass("expanded");
	} else
	{
		$(this).parent().addClass("expanded");
	}
}

function ShowLocationOverride (e)
{
	$('#change_city_form').show();
	$('#display_home_city').hide();
	$('.location_override_search').twipsy({html: true, animate: true, trigger: 'manual', offset: 4});
	$('.location_override_search').bind('focus', function (e) {
		$('.location_override_search').twipsy('show');
	});
	$('.location_override_search').bind('blur', function () {
		$('.twipsy').fadeOut(200);
	});
	$('.location_override_search').focus();
	e.preventDefault();
	return false;
}

function CheckForm()
{
	current = {     
		"name": $("#name").val(),
		"description": $("#description").val(),
		"url": $("#url").val(),
		"tag_ids": $("#"+self.tag_ids_id).val(),
		"cost": $("#cost").val()
	};

	changed = false;
	$.each(original, function (k, v) {
		if (current[k] != v)
		{
			changed = true;
		}
	});

	if (changed)
	{
		return confirm('This event has been approved. Submitting changes requires re-approval. Are you sure you want to change this event?');
	}
}





function Nav (_target) {
	this.target = _target;
	this.current_url = "";
	
	var s = new Object();
	s.find = ["find", "dashboard", "browse", "topic", "tag", "event"];
	s.make = ["eventify"];
	s.settings = ["settings", "twitter"];
	s.subscribe = ["subscribe", "rss", "ical", "email"];
	s.sessions = ["sessions"];
	s.moderate = ["moderate"];
	this.sections = s;
	
	var ss = new Object();
	ss.find = ["dashboard", "browse", "tag", "event"];
	ss.make = ["index", "create", "recurring", "ical", "group"];
	ss.settings = ["index", "settings", "password", "email", "twitter", "tags"];
	ss.subscribe = ["rss", "ical", "email"];
	ss.sessions = ["login", "register"];
	ss.moderate = ["index"];
}

Nav.prototype.select = function (section, subsection) {
	if (!subsection || subsection == null)
	{
		subsection = "";
	}
	this.current_section = "find";
	if (this.sections.hasOwnProperty(section))
	{
		this.current_section = section;
		this.current_subsection = "index";
		for (i=0; i<this.sections[this.current_section].length; i++)
		{
			if (this.sections[this.current_section][i] == subsection)
			{
				this.current_subsection = subsection;
			}
		}
	}
	
	$("");
}



function TagSearch () {
	this.tag_entry_id = "tag_entry";
	this.find_button_id = "find_tag";
	this.tag_display_id = "display_tags";
	this.tag_ids_id = "tag_ids";
	this.cached_tags = [];
	this.recommended_tags_id = "recommended_tags";
	this.popular_tags_id = "popular_tags";
	this.recommended_tags_loading_id = "recommended_tags_loading";
	this.autocomplete_url = "/tag/autocomplete";
	this.onChange = null;
	
	this.message_no_tags = "No tags have been added yet. Try adding a tag from the right or type in a keyword below.";
	this.message_few_tags = "<em>Consider adding a couple more tags, but keep them relevant!</em>";
	this.message_too_many_tags = "<strong>NOTE: Only the first 8 tags will be saved.</strong>";
	
	this.tags = [];
}

TagSearch.prototype.AddTag = function (tag_id, tag_text) {
	var self = this;
    var i;
    var found = false;

    for (i=0; i<self.tags.length; i++)
    {
        if (self.tags[i].tag_id == tag_id)
        {
            found = true;
        }
    }

    if (!found)
    {
        self.tags[self.tags.length] = {tag_id: tag_id, tag_text: tag_text};
    }

    self.DrawTags();
}

TagSearch.prototype.RemoveTag = function (tag_id) {
	var self = this;
	var i;
    var new_tags = [];

    for (i=0; i<self.tags.length; i++)
    {
        if (self.tags[i].tag_id != tag_id)
        {
            new_tags[new_tags.length] = self.tags[i];
        }
    }
    self.tags = new_tags;

    self.DrawTags();

    return false;
}

TagSearch.prototype.DrawTags = function () {
	var self = this;
    var i;
    var _tag_ids = [];
	
    $("#"+self.tag_display_id).html('');
	
    for (i=0; i<self.tags.length; i++)
    {
		var div = $("<div>");
		var span = $("<span>");
		var a = $("<a href=\"#\" title=\"Remove tag\">");
		
		span.html(self.tags[i].tag_text+" ");
		if (i >= 8)
		{
			span.css("color", "#999999");
		}
		div.append(span);
		
		a.addClass("finePrint");
		a.html("[x]");
		(function (tag) {
			a.click(function (e) {
				e.preventDefault();
				self.RemoveTag(tag.tag_id);
				return false;
			});
		})(self.tags[i]);
		div.append(a);
        _tag_ids[_tag_ids.length] = self.tags[i].tag_id;
		$("#"+self.tag_display_id).append(div);
    }
	
	var message = $("<div>");
	message.addClass("finePrint");
	var message_text = "";
	if (self.tags.length == 0)
	{
		message_text = self.message_no_tags;
	} else
	if (self.tags.length < 4)
	{
		message.css("margin-top", "12px");
		message_text = self.message_few_tags;
	} else
	if (self.tags.length >= 8)
	{
		message.css("margin-top", "12px");
		message_text = self.message_too_many_tags;
	}
	if (message_text != "")
	{
		message.html(message_text);
		$("#"+self.tag_display_id).append(message);
	}

    //$("#"+self.tag_display_id).html(myhtml);
	$(".remove_tag_link", $("#"+self.tag_display_id)).click(self.RemoveTag);

    $("#"+self.tag_ids_id).val(_tag_ids.join(","));

	$(".tab_selected_tags").html("Tags ("+_tag_ids.length+")");
	$(".tab_link_tags").html("Tags ("+_tag_ids.length+")");
	if (self.tags.length == 0)
	{
		$("#"+self.popular_tags_id).show();
		$("#"+self.recommended_tags_id).hide();
		$("#"+self.recommended_tags_loading_id).hide();
	} else
	{
		$("#"+self.recommended_tags_loading_id).show();
		$("#"+self.recommended_tags_id).hide();
		$("#"+self.popular_tags_id).hide();
		self.GetRecommendedTags();
	}
	
	if (self.onChange)
	{
		self.onChange();
	}
}

TagSearch.prototype.GetRecommendedTags = function () {
	var self = this;
	
	$("#"+self.recommended_tags_loading_id).show();

	var tag_id_str = $("#"+self.tag_ids_id).val() || "";
	var _tag_ids = tag_id_str.split(",");
	var _ids = [];

	for (i=0; i<_tag_ids.length; i++)
	{
		if (parseInt(_tag_ids[i]) > 0)
		{
			_ids[_ids.length] = parseInt(_tag_ids[i]);
		}
	}

	if (_ids.length > 0)
	{
		$.getJSON("/tag/related?tag_id="+_ids.join(","),
			function(data) {
				var html = "";
				$("#"+self.recommended_tags_id).html('');
				for (i=0; i<data.length; i++)
				{
					var div = self.TagRecommendation(data[i]);
					$("#"+self.recommended_tags_id).append(div);
				}
				$("#"+self.recommended_tags_loading_id).hide();
				$("#"+self.recommended_tags_id).show();

				if (!data || !data.length || data.length == 0)
				{
					$("#"+self.popular_tags_id).show();
					$("#"+self.recommended_tags_id).hide();
					$("#"+self.recommended_tags_loading_id).hide();
				}
			}
		);
	} else
	{
		//console.log("No tags?");
	}
}

TagSearch.prototype.TagRecommendation = function (tag) {
	var self = this;
	var div = $("<div>");
	
	var span = $("<span>");
	span.html(tag.tag_text + " ");
	div.append(span);
	
	var a = $("<a href=\"#\">");
	a.html("[add]");
	a.addClass("finePrint");
	a.click(function (e) {
		e.preventDefault();
		self.AddTag(tag.tag_id, tag.tag_text);
		return false;
	});
	div.append(a);
	return div;
}

TagSearch.prototype.FindTag = function () {
	var self = this;
	var tag_text = $("#"+self.tag_entry_id).val();
	
	if (tag_text == "") { return; }

	for (i=0; i<self.cached_tags.length; i++)
	{
		if (self.cached_tags[i].tag_text == tag_text)
		{
			self.AddTag(self.cached_tags[i].tag_id, self.cached_tags[i].tag_text);
			$("#"+self.tag_entry_id).val("");
			$("#"+self.tag_entry_id).focus();
			return;
		}
	}

	$.ajax({
		url: "/tag/newtag",
		type: "POST",
		dataType: "json",
		data: {
			tag_text: $("#"+self.tag_entry_id).val()
		},
		success: function (data) {
			if (data.tag_id)
			{
				self.AddTag(data.tag_id, data.tag_text);
				$("#"+self.tag_entry_id).val("");
				$("#"+self.tag_entry_id).focus();
			}
		}
	});
}

TagSearch.prototype.selectItem = function (li) {
	var self = this;
	
	var tag_id = $(".tag_id", li).val();
	var tag_text = $(".tag_text", li).html();
	self.AddTag(tag_id, tag_text);
	$("#"+self.tag_entry_id).val("");
	$("#"+self.tag_entry_id).focus();
}

TagSearch.prototype.formatItem = function (row) {
	var self = this;
	var tag_id = row[2];
	var tag_text = row[0];
	var found = false;
	
	for (i=0; i<self.cached_tags.length && !found; i++)
	{
		if (self.cached_tags[i].tag_id == tag_id)
		{
			found = true;
		}
	}
	if (!found)
	{
		self.cached_tags[self.cached_tags.length] = {tag_id: tag_id, tag_text: tag_text};
	}
	var html = "";
	html += "<input type=\"hidden\" class=\"tag_id\" value=\"" + tag_id + "\" />";
	html += "<strong class=\"tag_text\">" + tag_text + "</strong>";
	return html;
}

TagSearch.prototype.initialize = function () {
	var self = this;
	
	if (self.recommend) {
		$("#"+self.popular_tags_id).html("");
		$.getJSON("/tag/popular",
			function(data) {
				for (i=0; i<data.length; i++)
				{
					div = self.TagRecommendation(data[i]);
					$("#"+self.popular_tags_id).append(div);
				}
			}
		);
		$("#"+self.recommended_tags_loading_id).hide();
		$("#"+self.popular_tags_id).hide();
		$("#"+self.recommended_tags_id).hide();
		if (self.tags.length == 0)
		{
			$("#"+self.popular_tags_id).show();
		} else
		{
			self.GetRecommendedTags();
		}
	}
	
	
	$("#"+self.tag_entry_id).keydown(function (event) {
		
	});
	$("#"+self.tag_entry_id).autocomplete2(
		self.autocomplete_url, 
		{ 
			minChars:1, 
			matchSubset:false, 
			matchContains:false, 
			cacheLength:10, 
			onItemSelect: function (li) { 
				self.selectItem(li); 
			}, 
			formatItem: function (row) { 
				return self.formatItem(row); 
			}, 
			selectOnly:1 
		}
	);
	
	$("#"+self.find_button_id).click(function (event) {
		self.FindTag();
	});
	$("#"+self.find_button_id).keydown(function(event) {
	  if (event.keyCode == '13' || event.keyCode == '32') {
			self.FindTag();
		}
	});
	self.DrawTags();
}






function GroupSearch () {
	this.group_id = "group";
	this.group_name_id = "group_name";
	this.display_group_name_id = "display_group_name";
	this.group_search_id = "group_search";
	this.find_button_id = "find_group";
	this.autocomplete_url = "/group/autocomplete";
	this.onChange = null;
	
	this.group = 0;
	this.group_name = "";
}

GroupSearch.prototype.SetGroup = function (group_id, group_name) {
	var self = this;
	var i;
	var found = false;
	
	self.group = group_id;
	self.group_name = group_name;
	
    self.Draw();
}

GroupSearch.prototype.UnsetGroup = function (tag_id) {
	var self = this;
	var i;

	self.group = 0;
	self.group_name = "";
    self.Draw();

    return false;
}

GroupSearch.prototype.Draw = function () {
	var self = this;
    var i;
    var _tag_ids = [];
	
	if (self.group > 0)
	{
		$("#"+self.group_id).val(self.group);
		$("#"+self.group_name_id).val(self.group_name);
		//$("#"+self.display_group_name_id).html(group_name);
	} else
	{
		$("#"+self.group_id).val(0);
		$("#"+self.group_name_id).val("");
		//$("#"+self.display_group_name_id).html("");
	}
	
	var div = $("#"+self.display_group_name_id);
	div.html("");
	
	if (self.group > 0)
	{
		var span = $("<span>");
		var a = $("<a href=\"#\" title=\"Remove group\">");
	
		a.addClass("finePrint");
		a.html("[x]");
		a.click(function (e) {
			e.preventDefault();
			self.group = 0;
			self.group_name = "";
			self.Draw();
			return false;
		});
	
		span.html(self.group_name+" ");
		div.append(span);
		div.append(a);
	}
	
	if (self.onChange)
	{
		self.onChange();
	}
}

GroupSearch.prototype.FindGroup = function () {
	var self = this;
}

GroupSearch.prototype.selectItem = function (li) {
	var self = this;
	
	var group_id = $(".group_id", li).val();
	var group_name = $(".group_name", li).html();
	self.group = group_id;
	self.group_name = group_name;
	self.Draw();
	$("#"+self.group_search_id).val("");
	$("#"+self.group_search_id).focus();
}

GroupSearch.prototype.formatItem = function (row) {
	var self = this;
	var group_id = row[1];
	var group_name = row[0];
	
	var html = "";
	html += "<input type=\"hidden\" class=\"group_id\" value=\"" + group_id + "\" />";
	html += "<strong class=\"group_name\">" + group_name + "</strong>";
	return html;
}

GroupSearch.prototype.initialize = function () {
	var self = this;
	
	$("#"+self.group_search_id).autocomplete2(
		self.autocomplete_url, 
		{ 
			minChars:1, 
			matchSubset:false, 
			matchContains:false, 
			cacheLength:10, 
			onItemSelect: function (li) { 
				self.selectItem(li); 
			}, 
			formatItem: function (row) { 
				return self.formatItem(row); 
			}, 
			selectOnly:1 
		}
	);
	
	$("#"+self.find_button_id).click(function (event) {
		self.FindGroup();
	});
	$("#"+self.find_button_id).keydown(function(event) {
	  if (event.keyCode == '13' || event.keyCode == '32') {
			self.FindGroup();
		}
	});
	self.Draw();
}






function VenueSearch () {
	this.venue_id_id = "venue_id";
	this.venue_name_id = "venue_name";
	this.display_venue_name_id = "display_venue_name";
	this.venue_search_id = "venue_search";
	this.find_button_id = "find_venue";
	this.autocomplete_url = "/venue/autocomplete";
	this.onChange = null;
	
	this.venue_id = 0;
	this.venue_name = "";
}

VenueSearch.prototype.SetVenue = function (venue_id, venue_name) {
	var self = this;
	var i;
	var found = false;
	
	self.venue_id = venue_id;
	self.venue_name = venue_name;
	
    self.Draw();
}

VenueSearch.prototype.UnsetVenue = function (tag_id) {
	var self = this;
	var i;

	self.venue_id = 0;
	self.venue_name = "";
    self.Draw();

    return false;
}

VenueSearch.prototype.Draw = function () {
	var self = this;
    var i;
    var _tag_ids = [];
	
	if (self.venue_id > 0)
	{
		$("#"+self.venue_id_id).val(self.venue_id);
		$("#"+self.venue_name_id).val(self.venue_name);
		//$("#"+self.display_venue_name_id).html(venue_name);
	} else
	{
		$("#"+self.venue_id_id).val(0);
		$("#"+self.venue_name_id).val("");
		//$("#"+self.display_venue_name_id).html("");
	}
	
	var div = $("#"+self.display_venue_name_id);
	div.html("");
	
	if (self.venue_id > 0)
	{
		var span = $("<span>");
		var a = $("<a href=\"#\" title=\"Remove venue\">");
	
		a.addClass("finePrint");
		a.html("[x]<br />");
		a.click(function (e) {
			e.preventDefault();
			self.venue_id = 0;
			self.venue_name = "";
			self.Draw();
			return false;
		});
	
		span.html(self.venue_name+" ");
		div.append(span);
		div.append(a);
	}
	
	if (self.onChange)
	{
		self.onChange();
	}
}

VenueSearch.prototype.FindVenue = function () {
	var self = this;
}

VenueSearch.prototype.selectItem = function (li) {
	var self = this;
	
	var venue_id = parseInt($(".venue_id", li).val());
	var venue_name = $(".venue_name", li).html();
	self.venue_id = venue_id;
	self.venue_name = venue_name;
	self.Draw();
	$("#"+self.venue_search_id).val("");
	$("#"+self.venue_search_id).focus();
}

VenueSearch.prototype.formatItem = function (row) {
	var self = this;
	var venue_id = row[2];
	var venue_name = row[0];
	var address = row[1];
	var latitude = row[3];
	var longitude = row[4];
	var event_count = row[5];
	
	var html = "";
	html += "<input type=\"hidden\" class=\"venue_id\" value=\"" + venue_id + "\" />";
	html += "<strong class=\"venue_name\">" + venue_name + "</strong>";
	html += "<br />"+address+" <span style='white-space: nowrap;'>("+event_count+" events)</span>";
	return html;
}

VenueSearch.prototype.initialize = function () {
	var self = this;
	
	$("#"+self.venue_search_id).autocomplete2(
		self.autocomplete_url, 
		{ 
			minChars:1, 
			matchSubset:false, 
			matchContains:false, 
			cacheLength:10, 
			onItemSelect: function (li) { 
				self.selectItem(li); 
			}, 
			formatItem: function (row) { 
				return self.formatItem(row); 
			}, 
			selectOnly:1 
		}
	);
	
	$("#"+self.find_button_id).click(function (event) {
		self.FindVenue();
	});
	$("#"+self.find_button_id).keydown(function(event) {
	  if (event.keyCode == '13' || event.keyCode == '32') {
			self.FindVenue();
		}
	});
	self.Draw();
}


function CitySearch () {
	this.city_display_field = "_display_city";
	this.city_name_field = "_display_city";
	this.city_search_field = "_city_search";
	this.find_button_id = "_find_city";
	this.autocomplete_url = "/venue/city_autocomplete";
	this.onChange = null;
	
	this.city_name = "";
}

CitySearch.prototype.SetCity = function (city_name) {
	var self = this;
	var found = false;
	
	self.city_name = city_name;
	
    self.Draw();
}

CitySearch.prototype.UnsetCity = function () {
	var self = this;

	self.city_name = "";
    self.Draw();

    return false;
}

CitySearch.prototype.Draw = function () {
	var self = this;
	
	if (self.city_name.length > 0)
	{
		$("#"+self.city_search_field).val(self.city_name);
	} else
	{
		$("#"+self.city_search_field).val("");
	}
	$("#"+self.city_display_field).val(self.city_name);
	$("#"+self.city_name_field).val(self.city_name);
	
	var div = $("#"+self.display_city_name_id);
	div.html("");
	
	if (self.onChange)
	{
		self.onChange();
	}
}

CitySearch.prototype.FindCity = function () {
	var self = this;
}

CitySearch.prototype.selectItem = function (li) {
	var self = this;
	
	var city_name = $(".city_name", li).html();
	self.city_name = city_name;
	self.Draw();
	$("#"+self.city_search_field).focus();
}

CitySearch.prototype.formatItem = function (row) {
	var self = this;
	var city_name = row[0] + ", " + row[1];
	
	var html = "";
	html += "<strong class=\"city_name\">" + city_name + "</strong>";
	return html;
}

CitySearch.prototype.initialize = function () {
	var self = this;
	
	if (self.city_name == "")
	{
		self.city_name = $("#"+self.city_search_field).val();
	}
	
	$("#"+self.city_search_field).autocomplete2(
		self.autocomplete_url, 
		{ 
			minChars:1, 
			matchSubset:false, 
			matchContains:false, 
			cacheLength:10, 
			onItemSelect: function (li) { 
				self.selectItem(li); 
			}, 
			formatItem: function (row) { 
				return self.formatItem(row); 
			}, 
			selectOnly:1 
		}
	);
	
	$("#"+self.find_button_id).click(function (event) {
		self.FindCity();
	});
	$("#"+self.find_button_id).keydown(function(event) {
	  if (event.keyCode == '13' || event.keyCode == '32') {
			self.FindCity();
		}
	});
	self.Draw();
}



function UserSearch () {
	this.user_id_field = "user_id";
	this.user_name_field = "user_name";
	this.display_user_name_id = "display_user_name";
	this.search_field_id = "user_search";
	this.find_button_id = "find_user";
	this.autocomplete_url = "/user/autocomplete";
	this.onChange = null;
	this.allow_remove = true;
	
	this.user_id = 0;
	this.name_name = "";
}

UserSearch.prototype.SetUser = function (user_id, user_name) {
	var self = this;
	var i;
	var found = false;
	
	self.user_id = user_id;
	self.user_name = user_name;
	
    self.Draw();
}

UserSearch.prototype.UnsetUser = function () {
	var self = this;
	var i;

	self.user_id = 0;
	self.user_name = "";
    self.Draw();

    return false;
}

UserSearch.prototype.Draw = function () {
	var self = this;
    var i;
    var _tag_ids = [];
	
	if (self.user_id > 0)
	{
		$("#"+self.user_id_field).val(self.user_id);
		$("#"+self.user_name_field).val(self.user_name);
		//$("#"+self.display_user_name_id).html(user_name);
	} else
	{
		$("#"+self.user_id_field).val(0);
		$("#"+self.user_name_field).val("");
		//$("#"+self.display_user_name_id).html("");
	}
	
	var div = $("#"+self.display_user_name_id);
	div.html("");
	
	if (self.user_id > 0)
	{
		var span = $("<span>");
		
		span.html(self.user_name+" ");
		div.append(span);
		
		if (self.allow_remove)
		{
			var a = $("<a href=\"#\" title=\"Remove user\">");
	
			a.addClass("finePrint");
			a.html("[x]");
			a.click(function (e) {
				e.preventDefault();
				self.user_id = 0;
				self.user_name = "";
				self.Draw();
				return false;
			});
			
			div.append(a);
		}
	}
	
	if (self.onChange)
	{
		self.onChange();
	}
}

UserSearch.prototype.FindUser = function () {
	var self = this;
}

UserSearch.prototype.selectItem = function (li) {
	var self = this;
	
	var user_id = $(".user_id", li).val();
	var user_name = $(".user_name", li).html();
	self.user_id = user_id;
	self.user_name = user_name;
	self.Draw();
	$("#"+self.search_field_id).val("");
	$("#"+self.search_field_id).focus();
}

UserSearch.prototype.formatItem = function (row) {
	var self = this;
	var user_id = row[0];
	var user_name = row[1];
	
	var html = "";
	html += "<input type=\"hidden\" class=\"user_id\" value=\"" + user_id + "\" />";
	html += "<strong class=\"user_name\">" + user_name + "</strong>";
	return html;
}

UserSearch.prototype.initialize = function () {
	var self = this;
	
	$("#"+self.search_field_id).autocomplete2(
		self.autocomplete_url, 
		{ 
			minChars:1, 
			matchSubset:false, 
			matchContains:false, 
			cacheLength:10, 
			onItemSelect: function (li) { 
				self.selectItem(li); 
			}, 
			formatItem: function (row) { 
				return self.formatItem(row); 
			}, 
			selectOnly:1 
		}
	);
	
	$("#"+self.find_button_id).click(function (event) {
		self.FindUser();
	});
	$("#"+self.find_button_id).keydown(function(event) {
	  if (event.keyCode == '13' || event.keyCode == '32') {
			self.FindUser();
		}
	});
	self.Draw();
}








function ShowNoteForm ()
{
    $("#showNoteLink").hide();
    $("#noteForm").show();
    $("#note").focus();
    return false;
}







function SelectTab (tab)
{
	$(".eventify_tabs").removeClass("selected_details");
	$(".eventify_tabs").removeClass("selected_venue");
	$(".eventify_tabs").removeClass("selected_tags");
	$(".eventify_tabs").removeClass("selected_history");
	
	$(".eventify_tabs").addClass("selected_"+tab);
	
	var tabs = $(".tabs");
	tabs.removeClass("selected_details");
	tabs.removeClass("selected_venue");
	tabs.removeClass("selected_tags");
	tabs.removeClass("selected_history");
	
	tabs.addClass("selected_"+tab);
	
	return false;
}

function RatingSlider (_target)
{
	var self = this;
	self.target = _target;
	self.value = 0;
	self.tag_id = 0;
	self.currentRatingHandle = null;
	self.ratingMinX = -2;
	self.ratingMaxX = 100;
	self.ratingRange = self.ratingMaxX - self.ratingMinX;
	self.ratingMinValue = -100;
	self.ratingMaxValue = 100;
	self.ratingNeutralPoint = 1/3;
	self.SetWidth(220);
	
	(function (slider) {
		slider.target.mousedown(function (e) {
			e.preventDefault();
			slider.RatingDrag(slider.target);
			return false;
		});
		self.target.click(function (e) {
			e.preventDefault();
			return false;
		});
	})(self);
}

RatingSlider.prototype.SetWidth = function (w)
{
	var self = this;
	w = parseInt(w);
	self.ratingMaxX = w - 21;
	self.ratingRange = self.ratingMaxX - self.ratingMinX;
	self.SetPosition(self.value);
}
RatingSlider.prototype.SetPosition = function (value)
{
	var self = this;
	self.value = value;
	var x = 0;
	if (value <= 0)
	{
		x = self.ratingMinX + (self.ratingRange*self.ratingNeutralPoint) - value/self.ratingMinValue * (self.ratingRange*self.ratingNeutralPoint);
	} else
	if (value > 0)
	{
		x = self.ratingMinX + (self.ratingRange*self.ratingNeutralPoint) + value/self.ratingMaxValue * (self.ratingRange - self.ratingRange*self.ratingNeutralPoint);
	}
	self.target.css('left', x);
}

RatingSlider.prototype.RatingDrag = function ()
{
	var self = this;
	self.dragging = true;
	(function (slider) {
		$(window).bind('mousemove', function (e) { slider.RatingChange(e); });
		$(window).bind('mouseup', function (e) { slider.RatingDrop(e); });
	})(self);
}
RatingSlider.prototype.RatingChange = function (e)
{
	var self = this;
	if (self.dragging)
	{
		var x = e.clientX - self.target.parent().offset().left - 13;
		x = x > self.ratingMinX ? x : self.ratingMinX;
		x = x < self.ratingMaxX ? x : self.ratingMaxX;
		self.target.css('left', x);
	}
}
RatingSlider.prototype.RatingDrop = function (e)
{
	var self = this;
	self.tag_id = parseInt(self.tag_id);
	var x = parseInt(self.target.css('left')) - self.ratingMinX;
	var start = self.ratingRange*self.ratingNeutralPoint;
	var score = 0;
	if (x < start)
	{
		score = (start - x) / (self.ratingRange*self.ratingNeutralPoint) * self.ratingMinValue;
		//console.log("Score: "+Math.round(score)+" ("+Math.round(start)+"-"+x+" / "+ratingMinValue+")");
	} else
	{
		score = (x - start) / (self.ratingRange - self.ratingRange*self.ratingNeutralPoint) * self.ratingMaxValue;
		//console.log("Score: "+Math.round(score)+" ("+x+"-"+Math.round(start)+" / "+ratingMaxValue+")");
	}
	
	self.dragging = false;
	$(window).unbind('mousemove');
	$(window).unbind('mouseup');
	
	if (self.tag_id <= 0) { return; }
	
	$.ajax({
		url: "/tag/ratetag/"+self.tag_id,
		type: "POST",
		dataType: "json",
		data: {
			score: score
		},
		success: function (data) {
			
		}
	});
}



$(document).ready(function() {
	$(".eventListItemHeader").click(ShowHideEventListItem);
	SetFacebox();
	$("#show_location_override_search").click(ShowLocationOverride);
});
function SetFacebox (only_container)
{
	var container;
	if (only_container === true)
	{
		container = $(document);
	} else
	{
		container = $("#content_holder");
	}
	$("a[rel*=facebox]", container).each(function (index, val) {
		var href = $(this).attr("href");
		$(this).attr("href", href + (href.indexOf("?") > 0 ? "&" : "?") + "facebox=true");
		$(this).facebox();
	});
}


