if(!window.console)
{
	window.console = new function() {
		this.log = function(str) {};
		this.dir = function(str) {};
	};
}

function debug(message)
{
	console.log(message);
}

$.fn.insertAtCaret = function (myValue) {
	return this.each(function(){
		//IE support
		if (document.selection) {
			this.focus();
			sel = document.selection.createRange();
			sel.text = myValue;
			this.focus();
		}
		//MOZILLA/NETSCAPE support
		else if (this.selectionStart || this.selectionStart == '0') {
			var startPos = this.selectionStart;
			var endPos = this.selectionEnd;
			var scrollTop = this.scrollTop;
			this.value = this.value.substring(0, startPos)
                + myValue
				+ this.value.substring(endPos,
									   this.value.length);
			this.focus();
			this.selectionStart = startPos + myValue.length;
			this.selectionEnd = startPos + myValue.length;
			this.scrollTop = scrollTop;
		} else {
			this.value += myValue;
			this.focus();
		}
		$(this).keyup();
    });
}

var enableSubmitConditions = [];

var enterDisabled = false;

function toggleSubmitButtons(selector)
{
	var enable = true;
	for(i in enableSubmitConditions)
	{
		var callback = enableSubmitConditions[i]
		if(typeof callback == 'function')
			enable = enable && callback();
	}
	if(enable)
	{
		$(selector).removeAttr('disabled');
	}
	else
	{
		$(selector).attr('disabled', true);
	}
}

function showError(message)
{
	alert(message);
}

function notify(title, message, time)
{
	if (typeof(time) == 'undefined' || time == null)
	{
		time = $.gritter.options.time;
	}

	var sticky = (time > 0 ? false : true);

	$.gritter.add({
		title: title,
		text: message,
		time: time,
		sticky: sticky
	});
}

function verify(element, message, callback)
{
	var wireMe = $(element);
	var links = wireMe.children('a');
	var url = links.attr('href');
	var title = links.attr('title');

	if(url == '#')
		url = $(element).closest('li').attr('data-url');

	links.click(function(){
		verifyDialog(url, title, message, callback);
		return false;
	});

	wireMe.click(function(){
		verifyDialog(url, title, message, callback);
	});
}

function verifyDialog(url, title, message, callback)
{
	var dialogBox = $('#dialog');
	dialogBox.text(message);
	dialogBox.dialog({
		bgiframe: true,
		resizable: false,
		modal: true,
		title: title,
		position: ['center', 150],
		buttons: {
			'Yes': function() {
				$(this).dialog('destroy');
				if(callback == undefined || callback === '')
				{
					window.location = url;
				}
				else
				{
					if(url === null)
					{
						callback();
					}
					else
					{
						$.getJSON(url, {format: 'json'}, function(data){
							processJson(data, callback);
						});
					}
				}
			},
			'No': function() {
				$(this).dialog('destroy');
			}
		},
		close: function(event, ui) {
			$(this).dialog('destroy');
		}
	});
}

function deleteOptions(element, message, callback)
{
	var wireMe = $(element);
	var links = wireMe.children('a');
	var url = links.attr('href');
	var title = links.attr('title');

	if(url == '#')
		url = $(element).closest('li').attr('data-url');

	links.click(function(){
		deleteOptionsDialog(url, title, message, callback);
		return false;
	});

	wireMe.click(function(){
		deleteOptionsDialog(url, title, message, callback);
	});
}

function deleteOptionsDialog(url, title, message, callback)
{
	var dialogBox = $('#dialog');
	dialogBox.text(message);
	dialogBox.dialog({
		bgiframe: true,
		resizable: false,
		modal: true,
		title: title,
		position: ['center', 150],
		width: 685,
		buttons: {
			'Cancel': function() {
				$(this).dialog('destroy');
			},
			'Remove from Spredfast only': function() {
				$(this).dialog('destroy');
				if(callback == undefined || callback === '')
				{
					window.location = url;
				}
				else
				{
					if(url === null)
					{
						callback();
					}
					else
					{
						$.getJSON(url, {format: 'json'}, function(data){
							processJson(data, callback);
						});
					}
				}
			},
			'Remove from Spredfast and social channels': function() {
				$(this).dialog('destroy');
				if(callback == undefined || callback === '')
				{
					window.location = url;
				}
				else
				{
					if(url === null)
					{
						callback();
					}
					else
					{
						url += '/delete_content/true';
						$.getJSON(url, {format: 'json'}, function(data){
							processJson(data, callback);
						});
					}
				}
			}
		},
		close: function(event, ui) {
			$(this).dialog('destroy');
		}
	});
}

function form(element, callback, extraHandlers, submitName, extraButtons, modal)
{
	if(modal == undefined)
		modal = true;

	var wireMe = $(element);
	var links = wireMe.children('a');
	var url = links.attr('href');
	var title = links.attr('title');

	if(url == '#')
	{
		url = $(element).closest('li').attr('data-url');
		if(url == undefined)
		{
			url = $(element).children('a').attr('data-url');
		}
	}

	links.click(function(){
		formDialog(url, title, callback, extraHandlers, submitName, extraButtons, '', modal);
		return false;
	});

	wireMe.click(function(){
		 formDialog(url, title, callback, extraHandlers, submitName, extraButtons, '', modal);
	});
}

	function wireForm(dialogBox, data, url, callback)
	{
		dialogBox.find('form').each(function() {
				runFormHandlers(this);
				$(this).validate({
			rules: data.validation,
			submitHandler: function(form) {
				var formElement = $(form);
				var formData = formElement.serialize();
				var postUrl = url;
				if(formElement.attr('action') !== '')
				{
				postUrl = formElement.attr('action');
				}
				$.post(postUrl, formData, function(data){
				if(data.form != undefined && data.form !== '')
				{
					dialogBox.html(data.form);
					wireDatePickers();
					if( typeof extraHandlers == 'function' )
					{
					extraHandlers();
					}
					wireForm(dialogBox, data, url, callback);
					return;
				}

				dialogBox.dialog('destroy');
				processJson(data, callback);
				}, 'json');
				return false;
			}
				});
		});
	}


	function exception(message)
	{
		var dialogBox = $('#dialog');
		dialogBox.html(message);
			dialogBox.dialog({
				bgiframe: true,
				resizable: true,
				width: 500,
				modal: true,
				title: 'Error',
				position: ['center', 150],
				buttons: {
					'OK': function() {
						$(this).dialog('destroy');
					},
					'Send Feedback': function() {
						$(this).dialog('destroy');
						$(".feedback-tab a").click();
					}
				},
				close: function(event, ui) {
					$(this).dialog('destroy');
				}
			});
	}


function formExecute(url, title, callback, extraHandlers, submitName, extraButtons, dialogBox, data, modal)
{
	if(submitName == undefined)
	{
		submitName = 'Save';
	}

	if(modal == undefined)
		modal = true;

	var buttons = {};

		buttons[submitName] = function() {
		$(this).find('form').submit();
	};

	if( typeof extraButtons == 'object' )
	{
		for(i in extraButtons)
		{
			buttons[i] = extraButtons[i];
		}
	}

	buttons.Cancel = function() {
		$(this).dialog('destroy');
	};


	dialogBox.html(data.form);
	wireDatePickers();
	wireEnterKey();
	if( typeof extraHandlers == 'function' )
	{
		extraHandlers();
	}

	wireForm(dialogBox, data, url, callback);
		dialogBox.dialog({
		bgiframe: true,
		resizable: true,
		width: 550,
		modal: modal,
		title: title,
		position: ['center', 150],
		buttons: buttons,
		close: function(event, ui) {
				$(this).dialog('destroy');
		}
		});


		var postLoad = dialogBox.find("form").attr('data-post-load-handler');
		if(postLoad)
		{
			eval(postLoad);
		}
}

function formDialog(url, title, callback, extraHandlers, submitName, extraButtons, ddiv, modal)
{
	if(ddiv == undefined || ddiv == '')
	{
		ddiv = '#dialog';
	}
	var dialogBox = $(ddiv);

	$.getJSON(url, 'format=json', function(data){
		if(data.form == undefined)
		{
		processJson(data);
		return;
		}

  	    formExecute(url, title, callback, extraHandlers, submitName, extraButtons, dialogBox, data, modal);
	});
}

function eventChoice(element, type, callback)
{
	var wireMe = $(element);
	var links = wireMe.children('a');
	var title = links.attr('title');
	var json = wireMe.children('div.json');
	var urls = eval( "(" + json.text() + ")" );

	if(urls.all == undefined || urls.all === '')
	{
		if(type == 'edit')
		{
			links.click(function(){
				formDialog(urls.event, title, callback);
				return false;
			});

			wireMe.click(function(){
				formDialog(urls.event, title, callback);
			});
		}
		else if(type == 'delete')
		{
			var message = 'Are you sure you want to delete this action?';
			var url = urls.event + '?delete_all=1';
			links.click(function(){
				verifyDialog(url, title, message, callback);
				return false;
			});

			wireMe.click(function(){
				verifyDialog(url, title, message, callback);
			});
		}
	}
	else
	{
		links.click(function(){
				eventChoiceDialog(urls, title, type, callback);
			return false;
		});

		wireMe.click(function(){
				eventChoiceDialog(urls, title, type, callback);
		});
	}
}

function eventChoiceDialog(urls, title, type, callback)
{
	var message = 'This action has multiple occurences.  Would you like to ' + type + ' just this one or all of them?';
	var dialogBox = $('#dialog');
	dialogBox.text(message);
	dialogBox.dialog({
		bgiframe: true,
		resizable: false,
		width: 400,
		modal: true,
		title: title,
		position: ['center', 150],
		buttons: {
			'Cancel': function() {
				$(this).dialog('destroy');
			},
			'All Occurences': function() {
				$(this).dialog('destroy');
				if(type == 'edit')
				{
					formDialog(urls.all, title, callback);
				}
				else if(type == 'delete')
				{
					formDialog(urls.all, title, callback, '', 'Delete');
				}
			},
			'This Occurence': function() {
				$(this).dialog('destroy');
				if(type == 'edit')
				{
					formDialog(urls.event, title, callback);
				}
				else if(type == 'delete')
				{
					message = 'Are you sure you want to delete this action?';
					verifyDialog(urls.event, title, message, callback);
				}
			}
		},
		close: function(event, ui) {
			$(this).dialog('destroy');
		}
	});
}

function processJson(data, callback)
{
	if(data.exception)
	{
		exception(data.exception);
		return;
	}

	if(data.error != undefined && data.error !== '')
	{
		showError(data.error);
		if(!data.noreturn)
		{
			return;
		}
	}

	if(data.showCredentialChoiceDialog)
	{
		multiCredentialDialog(callback);
		return;
	}


	if( typeof callback == 'function' )
	{
		callback(data);
	}
	else
	{
		if(data.redirect != undefined && data.redirect !== '')
		{
			window.location = data.redirect;
		}
	}

	if(data.notify != undefined && data.notify.length > 0)
	{
		for( i in data.notify)
		{
			notify(data.notify[i].title, data.notify[i].message, data.notify[i].time);
		}
	}
}

function refreshElement(id, url, callback)
{
	queryData = {
		format: 'html'
	};

	$.ajax({
		url: url,
		type: 'GET',
		data: queryData,
		dataType: 'html',
		async: false,
		success: function(data){
			$('#'+id).html(data);
			if( typeof callback == 'function' )
			{
				callback(data);
			}
		}
	});
}

function wireDatePickers()
{
	$('.ui-datepicker').datepicker({
		beforeShow: function (i, e) {
			var z = jQuery(i).closest(".ui-dialog").css("z-index") + 4;
					if(!isNaN(z))
						e.dpDiv.css('z-index', z);
		},
		dateFormat: 'MM d, yy',
		showOn: 'button',
		buttonImageOnly: true,
		buttonImage: '/images/cal.gif',
		minDate: 0
	});

	if($('input.timepicker').length) {

		$("input.timepicker").timepicker();
		try
		{
			defaults = eval($("input.timepicker").val());
		} catch(e) {
			defaults = [$('input.timepicker').val()];
		}

		if(!$('input.timepicker.single').length)
			$(".time-element").dynamicForm('#plus', '#minus', {limit: 3, values: defaults});
		else
		{
			$("input.timepicker").val(defaults[0]);
			$("input.timepicker").change();
			$(".time-element .buttons").hide();
		}
	}
}

function wireEnterKey()
{
	$('form input:text').keypress(function(e) {
	if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
	{
		if ($('#dialog').dialog('isOpen') && $("*:focus").attr('id') != 'internal_tags')
		{
			$('[aria-labelledby$=dialog]').find(":button:contains('Save')").click();
		}
		return false;
	}
	});
}

function split(val) {
    return val.split(/,\s*/);
}
function extractLast(term) {
    return split(term).pop();
}


function eventFormHandlers()
{
	toggleEventRepeatOptions();

	$('#repeat_mode').change(function() {
		toggleEventRepeatOptions();
		var mode = $(this).val();
		if(mode == 'weekly')
		{
			var date = $('#date').datepicker('getDate');
			$('input[id^=weekly_repeat_period]').val([date.getDay() + '']);
		}
	});

	if($('input.ui-datepicker').val() === '')
	{
		var daterange = $('#daterange:visible');
		var calendar = $('#calendar:visible');
		var now = new Date();
		if(daterange.length)
		{
			var range = daterange.val();
			var dates = range.split(' - ', 2);
			var date = new Date(dates[0]);
			if(date > now)
				$('#date').datepicker('setDate', date);
			else
				$('#date').datepicker('setDate', now);
		}
		else if(calendar.length)
		{
			var date = new Date();
			var year = $.cookie('calendar_year');
			var month = $.cookie('calendar_month');
			if(year != '' && year != null && month != '' && month != null)
			{
				date.setFullYear(year);
				date.setMonth(month);
				date.setDate(1);
				if(date > now)
				{
					$('#date').datepicker('setDate', date);
				}
				else
				{
					$('#date').datepicker('setDate', now);
				}
			}
			else
			{
				$('#date').datepicker('setDate', now);
			}
		}
		else
		{
			$('#date').datepicker('setDate', now);
		}
	}

}

function tagsHandler(availableTags)
{
	$(".ui-dialog-content #internal_tags").autocomplete({
		minLength: 0,
		source: function(request, response) {
			// delegate back to autocomplete, but extract the last term
			response($.ui.autocomplete.filter(availableTags, extractLast(request.term)));
		},
		focus: function() {
			// prevent value inserted on focus
			return false;
		},
		select: function(event, ui) {
			var terms = split( this.value );
			// remove the current input
			terms.pop();
			// add the selected item
			terms.push( ui.item.value );
			// add placeholder to get the comma-and-space at the end
			terms.push("");
			this.value = terms.join(", ");
			return false;
		}
	});
}

function toggleEventRepeatOptions()
{
	var mode = $('#repeat_mode').val();
	var divId = 'form-element-' + mode + '_repeat_period';
	var periodDivs = $('div[id$=_repeat_period]');
	periodDivs.each(function(i){
		if(this.id == divId)
		{
			$(this).show();
		}
		else
		{
			$(this).hide();
		}
	});

	if( mode == 'none')
	{
		$('#form-element-end_date').hide();
	}
	else
	{
		$('#form-element-end_date').show();
	}
}

function eventSelectHandlers()
{
	toggleEventSelectors();

	$('#choose_event input:radio').change(function(){
		toggleEventSelectors();
	});
}

function toggleEventSelectors()
{
	var type = $('#choose_event input:radio[name=type]:checked').val();
	var divId = 'form-element-' + type + '_event';
	var eventDivs = $('#choose_event div.form-element[id$=_event]');
	eventDivs.each(function(i){
		if(this.id == divId)
		{
			$(this).show();
		}
		else
		{
			$(this).hide();
		}
	});
}

function makeSortable(listElement, url, callback)
{
	$(listElement).sortable({
		update: function(event, ui) {
			var formData = "format=json&" + $(this).sortable('serialize', {key: 'order[]'});

			$.post(url, formData, function(data){
				processJson(data, callback);
			}, 'json');
		}
	});
}

function noRedirect()
{
	//This can be used as a callback when you don't want to follow redirects
}

function popup(element)
{
	var wireMe = $(element);
	var links = wireMe.children('a');
	var url = links.attr('href');
	var title = links.attr('title');

	links.click(function(){
		popupDialog(url, title);
		return false;
	});

	wireMe.click(function(){
		popupDialog(url, title);
	});
}

function popupDialog(url, title)
{
	var dialogBox = $('#dialog');

	dialogBox.load(url, 'format=html', function(data){
		dialogBox.html(data);
		dialogBox.dialog({
			bgiframe: true,
			resizable: true,
			width: 500,
			modal: true,
			title: title,
			position: ['center', 150],
			close: function(event, ui) {
				$(this).dialog('destroy');
			}
		});
	});
}

function filteredEvents()
{
	element = $("#filtered-feed");
	if(element.length === 0)
	return;
	url = "/event/feed";

	url += "/campaign_id/" + element.attr('campaign');
	if(element.attr('persona')) {
	url += "/persona_id/" + element.attr('persona');
	}
	if(element.attr('credential')) {
	url += "/credential_id/" + element.attr('credential');
	}
	if(element.attr('service')) {
	url += "/service/" + element.attr('service');
	}

	refreshElement('filtered-feed', url);
}

var highlightDays = [];

function getHighlightDays(url, month, year)
{
	queryData = {
		format: 'json',
		month: month,
		year: year
	};

	$.ajax({
		url: url,
		type: 'GET',
		data: queryData,
		dataType: 'json',
		async: false,
		success: function(data){
				highlightDays = data.days;
		}
	});
}

function wireEvents()
{
	$('.event-edit').each(function(){
		eventChoice(this, 'edit', function() { getEventsOnDay(onDayUrl, $('#filtered-calendar #calendar').datepicker('getDate'));});
	});
	$('.event-delete').each(function(){
		eventChoice(this, 'delete', function() { getEventsOnDay(onDayUrl, $('#filtered-calendar #calendar').datepicker('getDate'));});
	});
}

function wireCredentialVoices()
{
	$('.credentials-checkboxes h3.collapsible').each(function (){
		wireCollapsible(this);
	});
}

function wireCollapsible(item)
{
	var element = $(item);
	element.find('a').click(function(event){ event.stopPropagation(); return true; });
	element.click(function(){
		toggleCollapsible(element);
	});
}

function toggleCollapsible(item)
{
	var element = $(item);
	target = element.attr('data-target');
	$(target).toggle('blind');
	element.toggleClass('open');
}

function facebook_login()
{
	window.location = '/user/fb-login';
}

function campaignFormHandlers()
{
	$('#subform-client_info').hide();

	$('#fieldset-client_info').one('click', function(){
		$('#subform-client_info').show();
	});
}

function bloggerCredentialsHandler()
{
	toggleBloggerCredentialFieldset();
	$('form#blogger_credentials input:radio').change(function(){
		toggleBloggerCredentialFieldset();
	});
}

function toggleBloggerCredentialFieldset()
{
	var type = $('input:radio[name=type]:checked').val();
	if(type == 'blogger' || type == undefined)
	{
		$('fieldset#fieldset-xmlrpc').hide();
	}
	else
	{
		$('fieldset#fieldset-xmlrpc').show();
	}
}

function wireStateHover(element)
{
	$(element).mouseenter(function(){
		$(this).addClass('ui-state-hover');
	}).mouseleave(function(){
		$(this).removeClass('ui-state-hover');
	});
}

function microblogFormHandler(id)
{
	addCounter(id);
	setCount(id);
	wireCredentialVoices();
	var textarea = $('#' + id);
	var microblogForm = textarea.closest('form#microblog');
	var link = microblogForm.find('#insert_link');
	var campaignId = microblogForm.find('#campaign_id').val();
	var div = $('<div class="buttons"><ul><li data-url="/microblog/shorten-url/campaign_id/' + campaignId + '" class="button ui-state-default ui-corner-all" id="new-link"><a title="Insert Link" href="#"><span class="button-icon ui-icon ui-icon-link"></span></a></li></ul></div>');
	div.find('#new-link').click(function(){
		var wireMe = $(this);
		var url = wireMe.attr('data-url');
		var links = wireMe.children('a');
		var title = links.attr('title');
		
		if(link.val() == '')
		{
			formDialog(url, title, function(data){shortLinkCallback(data, id)}, '', 'Insert', '', '#dialog2', true);
		}
		else
		{
			$.post(url, {url: link.val(), noForm: 1, format: 'json'}, function(data){
				if(typeof data.form == 'string')
				{
			  	    formExecute(url, title, function(data){shortLinkCallback(data, id)}, '', 'Insert', '', $('#dialog2'), data, true);
				}
				else
				{
					shortLinkCallback(data, id);
				}
			}, 'json');
		}
		return false;
	});
	microblogForm.find('#form-element-insert_link').prepend(div);
}

function shortLinkCallback(data, id)
{
	var textarea = $('#' + id);
	var microblogForm = textarea.closest('form#microblog');
	var link = microblogForm.find('#insert_link');
	if(data.link != undefined && data.link != '')
	{
		insertLinkDiv(data.link, id);
	}

	textarea.insertAtCaret(data.short);
	textarea.change();
	link.val('');
}

function insertLinkDiv(data, id)
{
	var textarea = $('#' + id);
	var newDiv = $(data);
	textarea.closest('#microblog').find('#form-element-credentials').before(newDiv);
	newDiv.find('.delete-link').click(function(){
		newDiv.remove();
		var shorturl = newDiv.find('.short').text();
		var current = textarea.val();
		var newText = current.replace(shorturl, '');
		textarea.val(newText);
		setCount(textarea.attr('id'));
		textarea.change();
		return false;
	});
}

function addCounter(id)
{
	if(id == undefined)
		id="text";
	span = $("<span></span>").attr("id", "character-count");
	div = $("<div></div>").attr("class", "character-count");
	respan = $("<span></span>").attr('id', 'retweet-character-count');
	reText = $("<span></span>").attr('class', 'retweet-characters');
	reText.text('(').append(respan).append(' retweetable characters left) ');
	div.html(reText).append(span).append(" characters left");

	$("textarea#" + id).after(div);

	$("textarea#" + id).keyup(function() {
		setCount(id);
	});
	$("textarea#" + id).closest('form').find('input').change(function() {
		setCount(id);
	});

	var reg = new RegExp('microblog','i');
	var pos = id.search(reg);
	//we are not in a microblog form
	if(pos == -1)
	{
		enableSubmitConditions.push(function(){
			var counter = $("textarea#" + id).closest('form').find("#character-count");
			left = counter.text();
			return left > 0;
		});
	}
}

function setCount(id)
{
	if(id == undefined)
		id="text";


	var current = $("textarea#" + id).val().length;

	var limit = null;
	var retweetLimit = null;
	var credentials = $("textarea#" + id).closest('form').find("input:checked").each(function() {
		var newLimit = $(this).attr('data-limit');
		if(newLimit !== undefined  && (limit === null || newLimit < limit))
			limit = newLimit;

		var newLimit = $(this).attr('data-retweet-limit');
		if(newLimit !== undefined  && (retweetLimit === null || newLimit < retweetLimit))
			retweetLimit = newLimit;
	});

	if(limit === null)
		limit = 140;

	$("textarea#" + id).closest('form[data-limit]').each(function() {
		limit = $(this).attr('data-limit');
	});

	$("textarea#" + id).closest('form[data-retweet-limit]').each(function() {
		retweetLimit = $(this).attr('retweet-data-limit');
	});

	var left = limit - current;

	var counter = $("textarea#" + id).closest('form').find("#character-count");
	counter.text(left);
	over = left < 0;
	counter.toggleClass("over-limit", over);

	var reg = new RegExp('microblog','i');
	var pos = id.search(reg);
	//we are not in a microblog form
	if(pos == -1)
	{
		toggleSubmitButtons("button.fake-submit, .ui-dialog-buttonpane button:first");
	}
	else
	{
		if(over)
			$("button.fake-submit, .ui-dialog-buttonpane button:first").attr("disabled", "disabled");
		else
			$("button.fake-submit, .ui-dialog-buttonpane button:first").removeAttr("disabled");
	}


	counter = $("textarea#" + id).closest('form').find("#retweet-character-count");
	if(retweetLimit === null || isNaN(retweetLimit))
	{
		counter.parent().hide();
	}
	else
	{
		left = retweetLimit - current;
		counter.text(left);
		counter.parent().show();

		over = left < 0;
		counter.toggleClass("over-limit", over);
	}
}

function refreshPage()
{
	location.reload(true);
}

function feedback(index, element)
{
	form(element, noRedirect,null,'Send');
}

function runFormHandlers(element)
{
	var handler = $(element).attr('jshandler');
	if(typeof handler == 'string')
	{
		eval(handler);
	}
}

function keepEventLock(id)
{
	if(id == undefined)
		return;

	//get the event lock in 4 minutes
	setTimeout("renewEventLock(" + id + ")", 240000);
}

function renewEventLock(id)
{
	$.ajax({
		dataType: 'json',
		data: {
			id: id,
			format: 'json'
		},
		url: '/event/renew-lock',
		success: function(data, textStatus) {
			keepEventLock(id);
		}
	});
}

function tagFormHandler()
{
	toggleTagTypes();
	updateTemplateValues();
	$('#tag #type').change(toggleTagTypes);
	$("select[name^='value_parameter_']").change(updateTemplateValues);
}

function toggleTagTypes()
{
	var selected = $('#tag #type').val();
	$('#tag fieldset').each(function(){
		var id = $(this).attr('id');
		id = id.replace('fieldset-', '');
		if(id == selected)
			$(this).show();
		else
			$(this).hide();
	});
}

function updateTemplateValues()
{
	$("fieldset[id^='fieldset-template_']").each(function(){
		var fieldset = $(this);
		var id = fieldset.attr('id').split('_');
		var separator = $("#value_separator_" + id[1]).val();
		var value = [];
		fieldset.find("select").each(function(){
			var name = $(this).val();
			value.push(name);
		});
		$("#value_" + id[1]).val(value.join(separator));
	});
}

function linkTaggingToggle(e, domains, select, multiOptions, tagging)
{
	var value = $(e).val();
	var matched = false;

	for(i in domains)
	{
		var pattern = new RegExp(domains[i], 'i');
		var matches = value.match(pattern);
		if(matches != null)
		{
			matched = true;
			break;
		}
	}
	
	if(matched)
	{
		if(!tagging.is(':visible'))
		{
			tagging.show();
			select.removeAttr('disabled');
			select.multiselect(multiOptions);
		}
	}
	else
	{
		if(tagging.is(':visible'))
		{
			tagging.hide();
			select.attr('disabled', true);
			select.multiselect('destroy');
		}
	}
}

function linkFormHandler()
{
	var form = $('#shorten_url');
	var data = form.attr('data-domains');
	if( data != undefined)
	{
		var domains =  form.attr('data-domains').split(',');
		var multiOptions = {sortable: false, dividerLocation: 0.5};
		var tagging = $('#shorten_url #fieldset-tagging');
		var select = $('#shorten_url #tags');

		$('#shorten_url #url').bind("change keyup focus click mouseenter mouseleave",
			function()
			{
				linkTaggingToggle($('#shorten_url #url'),domains, select, multiOptions, tagging);
			}
		);

		linkTaggingToggle($('#shorten_url #url'),domains, select, multiOptions, tagging);

		$('#shorten_url #new_tag').click(function(){
			formDialog(form.attr('data-new-tag'), 'New Tag', function(data){
				var newOption = new Option(data.tag.name, data.tag.id, true, true);
				select.append(newOption);
				select.multiselect('destroy');
				select.multiselect(multiOptions);
			}, null, null, null, '#dialog3');
		});
	}
}

function multiCredentialDialog(callback)
{
	formDialog('/credential/choice', "Accounts to add to this voice", callback);
}

function facebookProcess(callback)
{
	displayBusyDialog('Facebook authorization in progress.');
	$.get('/credential/facebook-process', {format: 'json'}, function(data){
		closeBusyDialog();
		processJson(data, callback);
	}, 'json');
}

var intelligenceLoaded = false;

function displayBusyDialog(message)
{
	if(message != '')
		$('#busy-dialog .message').text(message);

	$('#busy-dialog').dialog({
		closeOnEscape: false,
		modal: true,
		resizable: false,
		dialogClass: 'no-close',
		draggable: false,
		position: ['center', 150],
		close: function(){
			$(this).dialog('destroy');
		}
	});
}

function closeBusyDialog()
{
	$('#busy-dialog').dialog('close');
}

function showStream(campaign_id, campaign_group_id, date, metric, name, value, service, tag)
{
	url = "/stream/metric";
	
	if(dialogBox !== null)
	{
		$(dialogBox).dialog('close');
	}

	dialogBox = $('#dialog').clone();
	$('#dialog').after(dialogBox);
	dialogBox.dialog({
		bgiframe: true,
		resizable: true,
		modal: false,
		width: 235,
		height: 600,
		position: 'right',
		dialogClass: 'stream dialog-stream',
		title: 'Loading...',
		close: function(event, ui) {
			$(this).dialog('destroy');
			dialogBox = null;
		},
		open: function(event, ui) {
			debug('open');
			$(dialogBox).addClass('loading');
		}
	});

	$.get(url,{format: 'html',
			   name: name,
			   value: value,
			   date: date,
			   metric: metric,
			   service: service,
			   campaign_id: campaign_id,
			   campaign_group_id: campaign_group_id,
			   tag: tag
			  }, function(data){
				  $(dialogBox).removeClass('loading');
				  dialogBox.html(data);
				  populateTitle();
			  }, 'html');
}


function viewStreamItem(url, width, callback)
{
	if(width == undefined || width == '')
	{
		width = 700;
	}
	else
	{
		width = parseInt(width);
	}

	$.get(url, 'format=html', function(data){
		var dialogBox = $('#dialog');
		dialogBox.html(data);
		dialogBox.dialog({
			bgiframe: true,
			resizable: true,
			width: width,
			modal: true,
			title: 'Detail &amp; Actions',
			position: ['center', 100],
			dialogClass: 'dialog-view-item',
			close: function(event, ui) {
				if(callback != undefined)
					callback();
				$(this).dialog('destroy');
			}
		}, 'html');
	});
}

function processChoice(data)
{
	state = data.state;
	$(button).attr('data-state', state);
	label = $(button).attr('data-choice-' + state);
	$(button).find("span.button-text").text(label);
	processJson(data);
}

//Datepicker
function runDatePicker(callBack)
{

	if($('#dateStr').html() == "")
	{
		var initEndDate = new Date();
		var endMilSecs = initEndDate.getTime();
		var endMilSecs = endMilSecs - 1000 * 60 * 60 * 24 * 1;
		initEndDate = new Date(endMilSecs);
		initEndDate = $.datepicker.formatDate('MM dd, yy', initEndDate);
		
		
		var initStartDate = new Date();
		var startMilSecs = initStartDate.getTime();
		var startMilSecs = startMilSecs - 1000 * 60 * 60 * 24 * 7;
		initStartDate = new Date(startMilSecs);
		initStartDate = $.datepicker.formatDate('MM dd, yy', initStartDate);
		
		var range = initStartDate+" - "+initEndDate;
		$('#dateStr').html(range)	
	}

	if($('#dateStore').val() != "")
	{
		$('#dateStr').html($('#dateStore').val());
	}
	var dates = new Array();

	dates = $("#dateStr").text().split(" - ");

	$('#widgetCalendar').DatePicker({
		flat: true,
		format: 'B d, Y',
		date: [new Date(dates[0]), new Date(dates[1])],
		calendars: 3,
		mode: 'range',
		starts: 1,
		onChange: function(formated) {
			$('#widgetField span').get(0).innerHTML = formated.join(' - ');
		}
	});


	var state = false;
	$('#widgetCalendar div.datepicker').css('position', 'absolute');
	$('#widgetField>a').bind('click', function(){
		$('#widgetCalendar').stop().animate({height: state ? 0 : $('#widgetCalendar div.datepicker').get(0).offsetHeight}, 500);
		state = !state;

		if(!state){
			if(typeof callBack == 'function'){
				callBack();
			}
		}

	});
}
function reverseDates(callBack)
{
	var currentRange = $('#dateStr').html();
	var arrayStr=currentRange.split(" - ");

	var range = (Date.parse(arrayStr[1]) - Date.parse(arrayStr[0])) / 86400 / 1000;
	var nextEndDateTime = Date.parse(arrayStr[0]) - 1000 / 60 / 60 / 24 / 1;
	var nextEndDate = new Date(nextEndDateTime);

	var nextStartDateTime = Date.parse(arrayStr[0]) - 1000 * 60 * 60 * 24 * (range + 1) ;
	var nextStartDate = new Date(nextStartDateTime);
	var dateArray =[nextStartDate,nextEndDate];

	nextStartDate = $.datepicker.formatDate('MM dd, yy', nextStartDate);
	nextEndDate = $.datepicker.formatDate('MM dd, yy', nextEndDate);

	$('#dateStr').html(nextStartDate+" - "+nextEndDate);
	$('#dateStore').val($('#dateStr').html());
	$('#widgetCalendar').DatePickerSetDate(dateArray);
	if(typeof callBack == 'function'){
		callBack();
	}

}

function forwardDates(callBack)
{
	var currentRange = $('#dateStr').html();
	var arrayStr=currentRange.split(" - ");

	var nextStartDateTime = Date.parse(arrayStr[1]) + 1000 * 60 * 60 * 24;
	var nextStartDate = new Date(nextStartDateTime);

	var nextEndDateDist = (Date.parse(arrayStr[1]) - Date.parse(arrayStr[0])) / 86400 / 1000;
	var nextEndDateTime = Date.parse(arrayStr[1]) + 1000 * 60 * 60 * 24 * (nextEndDateDist + 1);
	var nextEndDate = new Date(nextEndDateTime);
	var dateArray =[nextStartDate,nextEndDate];

	nextStartDate = $.datepicker.formatDate('MM dd, yy', nextStartDate);
	nextEndDate = $.datepicker.formatDate('MM dd, yy', nextEndDate);

	$('#dateStr').html(nextStartDate+" - "+nextEndDate);
	$('#dateStore').val($('#dateStr').html());
	$('#widgetCalendar').DatePickerSetDate(dateArray);
	if(typeof callBack == 'function'){
		callBack();
	}

}

$(document).ready(function (){
	$('html').bind("ajaxStart", function(){
		$(this).addClass('busy');
	}).bind("ajaxStop", function(){
		$(this).removeClass('busy');
	}).bind("ajaxError", function(ajaxEvent, request, settings){
		debug('error');
		if(request.status > 0)
		{
			closeBusyDialog();
			var url = settings.url;
			var ignoreErrors = ['/stream/view/','/inbox/update/','/inbox/view/'];
			for(i in ignoreErrors)
			{
				var reg = new RegExp(ignoreErrors[i],'i');
				var pos = url.search(reg);
				if(pos > -1)
					return;
			}

			message = 'There was an error communicating with the server. <br />\
			Would you like to fill in the feedback form so we can diagnose the issue?';
			var dialogBox = $('#dialog');
			dialogBox.html(message);
			dialogBox.dialog({
				bgiframe: true,
				resizable: true,
				width: 500,
				modal: true,
				title: 'Error',
				position: ['center', 150],
				buttons: {
					'Yes': function() {
						$(this).dialog('destroy');
						$(".feedback-tab a").click();
					},
					'No': function() {
						$(this).dialog('destroy');
					}
				},
				close: function(event, ui) {
					$(this).dialog('destroy');
				}
			});
		}
	});

	$("li.tooltip-help a, #upgrade-message a.help, #info-plans a.help").cluetip({
		sticky: true,
		closePosition: 'title',
		activation: 'click',
		cluetipClass: 'jtip',
		width: 350,
		onShow: function(ct, c) {
			ct.draggable({ handle: '#cluetip-title' });
			$('#cluetip-title').css('cursor', 'move');
		},
		closeText: '<img src="/js/cluetip/demo/cross.png" alt="close" />'
		});


	filteredEvents();

	$('.ui-state-default').each(function(){
		wireStateHover(this);
	});

	wireDatePickers();

	$(".intelligence-start").click(function() {
	campaign_id = $(this).attr('campaign');
	if(!intelligenceLoaded)
	{
		intelligenceDialog = $("<div></div>").attr('id', 'meme-container').dialog({
		width: 800,
		height: 400,
		autoOpen: false,
		position: ['center', 150],
		title: "<div id=\"intelligence-title\">Social Intelligence</div>"
		});
		intelligenceDialog.load('/meme/container', {campaign_id: campaign_id, format: 'html'});
		intelligenceLoaded = true;
	}
	intelligenceDialog.dialog('open');
	});

	$(".feedback-tab").each(feedback);

	$('form').each(function(){
		runFormHandlers(this);
	});

	$("button#cancel").click(function() {
		if(history.length == 1)
			window.location = '/';
		history.go(-1);
	});

	$(".zoom-view .boxes .graph").each(function() {
		data = $(this).find('.data.json').text();
		data = eval(data);

		baseline = $(this).find('.baseline.json').text();
		baseline = eval(baseline);

		$.plot($(this).find(".arrow"), [ {data: data, bars: {show: true}}, {data: [[0, baseline], [7, baseline]]}], {
			grid: {show: false}
		});
	});

	$(".content-creation form :input").change(function() {
		if($(this).closest("#wizard-new-campaign").length == 0)
		{
			window.onbeforeunload = function() {
				return 'There are unsaved changes to your content.';
			};
		}
	});

	$(".content-creation form").submit(function() {
		window.onbeforeunload = null;
	});

	$(".content-creation form button.fake-submit").click(function() {
		$(this).closest("form").find("select#status").val($(this).attr('data-status'));
		$(this).closest("form").submit();
	});
	
	$(".button a.toggle").live('click', function() {
		url = $(this).closest('li').attr('data-url');
		button = $(this);
		title = $(this).text();
		$.getJSON(url, {current: $(button).attr('data-state'), format: 'json'}, function(data){
			if(data.form)
			{
				var dialogBox = $("#dialog").clone();
				formExecute(url, title, function(data) {
								processChoice(data)
				}, null, null, null, dialogBox, data);
			}
			else
			{
				processChoice(data);
			}
		});
		return false;
	});



	chooser = $("<div>");
	chooser.addClass('campaign-chooser-arrow');
	$("#sub-navigation").before(chooser);
	$(chooser).fgmenu({
		content: $("#hidden-campaign-list ul").html(),
		width: 145,
		positionOpts: {
			posX: 'left',
			posY: 'bottom',
			offsetX: -136,
			offsetY: 0,
			directionH: 'right',
			directionV: 'down',
			detectH: true, // do horizontal collision detection
			detectV: false, // do vertical collision detection
			linkToFront: false,
			width: 20,
			height: 20
		}
	});

	// Make IE handle radio buttons properly
	if ($.browser.msie) {
		$('input:radio').click(function () {
			this.blur();
			this.focus();
		});
	}


	$("#sidebar .navigation .navigation-inbox").each(function() {
		span = $("<span>");
		span.addClass('inbox-new-messages');
		$(this).after(span);
	});

	$("span.inbox-new-messages").html($("#inbox-unread-messages").html());



	$(".user-interaction-action").live('click', function() {
		$.get("/user-interaction/view", {
			format: 'html',
			campaign_id: $(this).attr('data-campaign'),
			stream_id: $(this).attr('data-stream-id'),
			stream_item_id: $(this).attr('data-stream-item-id'),
			stream_item_key: $(this).attr('data-stream-item-key'),
			service: $(this).attr('data-service'),
			user_id: $(this).attr('data-user-id')
		}, function(data){
		
			title = $(data).find(".title").html();
			
			temp = $("#dialog").clone();
			temp.html(data);
			title = temp.find('.title').html();
			temp.remove();
			

			if($("#user-interaction-dialog").length > 0)
			{
				var dialogBox = $("#user-interaction-dialog");
				dialogBox.dialog('option', 'title', title);
			}
			else
			{
				var dialogBox = $('#dialog').clone();
				dialogBox.attr('id', 'user-interaction-dialog');
				dialogBox.dialog({
					bgiframe: true,
					resizable: true,
					width: 420,
					height: 400,
					modal: false,
					title: title,
					position: [$(window).width()-420-20, 20],
					dialogClass: 'dialog-user-interaction',
					open: function (event, ui) {
						$(this).find(".title").remove();
					},
					close: function(event, ui) {
						$(this).dialog('destroy');
						$(this).remove();
					}
				}, 'html');
			}
			dialogBox.html(data);
		});

		return false;
	});

	$('#default-url-checkbox').click(function(){
		var checked = '<span class="ui-icon ui-icon-check"></span>';
		var checkbox = $(this).children('.checkbox');
		if(checkbox.children().length == 0)
		{
			$.post('/user/set-default-url', {defaultUrl: $(this).attr('data-current'), format: 'json'}, function(data){
				processJson(data, function(){
					checkbox.addClass('ui-state-active');
					checkbox.html(checked);
				});
			}, 'json');
		}
		else
		{
			$.post('/user/set-default-url', {defaultUrl: '', format: 'json'}, function(data){
				processJson(data,function(data){
					checkbox.empty();
					checkbox.removeClass('ui-state-active');
				});
			}, 'json');
		}
		return false;
	});

 });
