﻿/* make all links with rel=facebox load in the facebox window */
jQuery(document).ready(function($) {
	// Sets all facebox links to open with facebox
	$('a[rel*=facebox]').facebox();
	
	// Adds the class manageAdd to all a tags with an id containing Add
	$('a[id*=Add]').addClass('manageAdd');
	
	// Makes sure that all confirmation messages disapear after a set period
	setTimeout(function() {
		$("#helperMessage").fadeOut(2000);
	}, 3000);
});

$(document).bind('reveal.facebox', function() {
	// In windows that open in facebox need to include the facebox script to use its API
	$('#form1').append('<script language="javascript" src="/Scripts/facebox.js"></script>');
	$('input').unEscapeHtml();
	$('textarea').unEscapeHtml();
});

/*
	Sets up the ajax request and sends it to the server 
*/
function makeRequest(data, url) {
	$.ajax({
		type: "POST",
		url: url,
		data: "{" + data + "}",
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: onSuccess
	});
}

/*
	Replaces all single and double quotes with their HTML Encoded brothers
	Usage: $(item).escapeHtml();
*/
$.fn.escapeHtml = function() {
	this.each(function() {
		$(this).val(
                $(this).val()
                    .replace(/'/g, "&#39;")
            );
	});
	return $(this);
}

/*
	Replaces encoded forms of single quotes with human readable ones.
	This is useful when displaying data thats in a textbox that contains escaped characters.
	Usage: $(item).unEscapeHtml();
*/
$.fn.unEscapeHtml = function() {
	this.each(function() {
		$(this).val(
                $(this).val()
                    .replace(/&#39;/g, "\'")
            );
	});
	return $(this);
}

function cleanHtml() {
	$.facebox.loadingAjax();

	$('input').escapeHtml();
	$('textarea').escapeHtml();
}


/* 
	Called upon the successful completion of an ajax request 
*/
function onSuccess(msg) {
	var resp = msg.d;

	switch (resp.Status) {
		case "ValidationError":
			validateErrors(resp);
			$.facebox.revealAjax();
			break;
		case "Redirect":
			$.facebox.close();
			window.location = resp.Site;
			break;
		case "TagEditSuccess":
			var targetTag = "#" + resp.TagId;
			$(targetTag).toggleClass("tagIsAssociated").toggleClass("tagIsNotAssociated");
			break;
		default: console.error(resp);
			break;
	}
}

/* 
	Runs under the assumption that all properties will have Txt_ appended to them. 
	Will go through all of the properties in the error and find the corresponding 
	field and add an error class to them.
*/
function validateErrors(msg) {

	var properties = msg.Properties;
	var errors = msg.Errors;

	$(".validateError").removeClass("validateError");

	for (var i = 0; i < properties.length; i++) {
		$("#Txt_" + properties[i]).addClass("validateError");

	}

	$("#div_error").text(errors);
}


/*****************
	News
******************/

/* 
	Called when adding a news article
*/
function addNews() {
	var serviceMethod = "/Manage/ManageNews.aspx/AddNewsWeb";
	manageNews(serviceMethod);
}

/*
	Called when updating a news article
*/
function updateNews() {
	var serviceMethod = "/Manage/ManageNews.aspx/UpdateNewsWeb";
	var id = $("#Hidden_NewsId").val();
	manageNews(serviceMethod, id);
}

function manageNews(url, id) {
	cleanHtml();
	
	var content = $("#Txt_Content").val();
	var title = $("#Txt_Title").val();

	var data = "title:'" + title + "',content:'" + content + "'";
	if (id != null) {
		data += ",newsId:'" + id + "'";
	}

	makeRequest(data, url);
}

/*****************
	Events
******************/

/*
	Called when adding an event
*/
function addEvent() {
	var serviceMethod = "/Manage/ManageEvent.aspx/AddEventWeb";
	manageEvent(serviceMethod);
}

/*
	Called when updating an event
*/
function updateEvent() {
	var serviceMethod = "/Manage/ManageEvent.aspx/UpdateEventWeb";
	var id = $("#Hidden_EventId").val();
	manageEvent(serviceMethod, id);
}

function manageEvent(url, id) {
	cleanHtml();
	
	var content = $("#Txt_Content").val();
	var title = $("#Txt_Title").val();
	var date = $("#Txt_EventDate").val();

	var data = "title:'" + title + "',content:'" + content + "',eventDate:'" + date + "'";
	if (id != null) {
		data += ",eventId:'" + id + "'";
	}

	makeRequest(data, url);

}

/*****************
	Groups
******************/

/* 
Called when adding a Group
*/
function addGroup() {
	var serviceMethod = "/Manage/ManageGroup.aspx/AddGroupWeb";
	manageGroup(serviceMethod);
}

/*
Called when updating a Group
*/
function updateGroup() {
	var serviceMethod = "/Manage/ManageGroup.aspx/UpdateGroupWeb";
	var id = $("#Hidden_GroupId").val();
	manageGroup(serviceMethod, id);
}

function manageGroup(url, id) {
	cleanHtml();
	
	var name = $("#Txt_Name").val();
	var notes = $("#Txt_Notes").val();

	var data = "name:'" + name + "',notes:'" + notes + "'";
	if (id != null) {
		data += ",groupId:'" + id + "'";
	}

	makeRequest(data, url);
}

/*****************
	Members
******************/

/* 
Called when adding a Member
*/
function addMember() {
	var serviceMethod = "/Manage/ManageMember.aspx/AddMemberWeb";
	manageMember(serviceMethod);
}

/*
Called when updating a Member
*/
function updateMember() {
	var serviceMethod = "/Manage/ManageMember.aspx/UpdateMemberWeb";
	var id = $("#Hidden_MemberId").val();
	manageMember(serviceMethod, id);
}

function manageMember(url, id) {
	cleanHtml();

	var firstName = $("#Txt_FirstName").val();
	var lastName = $("#Txt_LastName").val();
	var groupId = $("#Drop_Groups").val();
	var title = $("#Txt_Title").val();
	var image = $("#Txt_Image").val();
	var email = $("#Txt_Email").val();
	var summary = $("#Txt_Summary").val();

	var data = "firstName:'" + firstName + "',lastName:'" + lastName + "',image:'" + image + "',groupId:'" + groupId + "',title:'" + title + "',email:'" + email + "',summary:'" + summary + "'";
	if (id != null) {
		data += ",memberId:'" + id + "'";
	}

	makeRequest(data, url);
}

/*****************
	Sponsors
******************/

/* 
Called when adding a Sponsor
*/
function addSponsor() {
	var serviceMethod = "/Manage/ManageSponsor.aspx/AddSponsorWeb";
	manageSponsor(serviceMethod);
}

/*
Called when updating a Sponsor
*/
function updateSponsor() {
	var serviceMethod = "/Manage/ManageSponsor.aspx/UpdateSponsorWeb";
	var id = $("#Hidden_SponsorId").val();
	manageSponsor(serviceMethod, id);
}

function manageSponsor(url, id) {
	cleanHtml();

	var name = $("#Txt_Name").val();
	var website = $("#Txt_Website").val();
	var image = $("#Txt_Image").val();
	var rank = $("#Txt_Rank").val();
	var summary = $("#Txt_Summary").val();
	var content = $("#Txt_Content").val();

	var data = "name:'" + name + "',website:'" + website + "',image:'" + image + "',rank:'" + rank + "',summary:'" + summary + "',content:'" + content + "'";
	if (id != null) {
		data += ",sponsorId:'" + id + "'";
	}

	makeRequest(data, url);
}




/*****************
	Programs
******************/

/* 
Called when adding a Program
*/
function addProgram() {
	var serviceMethod = "/Manage/ManageProgram.aspx/AddProgramWeb";
	manageProgram(serviceMethod);
}

/*
Called when updating a Program
*/
function updateProgram() {
	var serviceMethod = "/Manage/ManageProgram.aspx/UpdateProgramWeb";
	var id = $("#Hidden_ProgramId").val();
	manageProgram(serviceMethod, id);
}

function manageProgram(url, id) {
	cleanHtml();

	var title = $("#Txt_Title").val();
	var image = $("#Txt_Image").val();
	var summary = $("#Txt_Summary").val();
	var content = $("#Txt_Content").val();
	var email = $("#Txt_Email").val();

	var data = "title:'" + title + "',image:'" + image + "',summary:'" + summary + "',content:'" + content + "',email:'" + email + "'";
	if (id != null) {
		data += ",programId:'" + id + "'";
	}

	makeRequest(data, url);
}

/*****************
	Program Tags
******************/

/* Called when adding or removing a tag from a program */
function toggleProgramTag(programid, tagid)
{
	var serviceMethod;
	if ($('#tagId'+tagid).hasClass('tagIsAssociated'))
	{
		serviceMethod = "/Manage/ManageProgramTags.aspx/RemoveProgramTag";
	}
	else
	{
		serviceMethod = "/Manage/ManageProgramTags.aspx/AddProgramTag";
	}
	manageProgramTag(serviceMethod, programid, tagid);
}

function manageProgramTag(url, programid, tagid)
{
	var data = "programId:'" + programid + "',tagId:'" + tagid + "'";
	
	makeRequest(data,url);
}

/*****************
	Tags
******************/

/* 
Called when adding a Tag
*/
function addTag() {
	var serviceMethod = "/Manage/ManageTag.aspx/AddTagWeb";
	manageTag(serviceMethod);
}

/*
Called when updating a Tag
*/
function updateTag() {
	var serviceMethod = "/Manage/ManageTag.aspx/UpdateTagWeb";
	var id = $("#Hidden_TagId").val();
	manageTag(serviceMethod, id);
}

function manageTag(url, id) {
	cleanHtml();

	var name = $("#Txt_TagName").val();

	var data = "name:'" + name + "'";
	if (id != null) {
		data += ",tagId:'" + id + "'";
	}

	makeRequest(data, url);
}


/*****************
About Us
******************/

/* 
Called when adding About Us
*/
function addAboutUs() {
	var serviceMethod = "/Manage/ManageAboutUs.aspx/AddAboutUsWeb";
	manageAboutUs(serviceMethod);
}

/*
Called when updating About Us
*/
function updateAboutUs() {
	var serviceMethod = "/Manage/ManageAboutUs.aspx/UpdateAboutUsWeb";
	var id = $("#Hidden_ContentId").val();
	manageAboutUs(serviceMethod, id);
}

function manageAboutUs(url, id) {
	cleanHtml();

	var title = $("#Txt_Title").val();
	var content = $("#Txt_Content").val();

	var data = "title:'" + title + "',content:'" + content + "'";
	if (id != null) {
		data += ",contentId:'" + id + "'";
	}

	makeRequest(data, url);
}


/*****************
	Contact
******************/

/* 
Called when adding a Contact
*/
function addContact() {
	var serviceMethod = "/Manage/ManageContact.aspx/AddContactWeb";
	manageContact(serviceMethod);
}

/*
Called when updating a Contact
*/
function updateContact() {
	var serviceMethod = "/Manage/ManageContact.aspx/UpdateContactWeb";
	var id = $("#Hidden_ContentId").val();
	manageContact(serviceMethod, id);
}

function manageContact(url, id) {
	cleanHtml();

	var title = $("#Txt_Title").val();
	var content = $("#Txt_Content").val();

	var data = "title:'" + title + "',content:'" + content + "'";
	if (id != null) {
		data += ",contentId:'" + id + "'";
	}

	makeRequest(data, url);
}