String.prototype.trim = function() {return (this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''));};
function blockEnter(e) {
	if (e.keyCode == 13) {     
		if (e.preventDefault) {
			e.preventDefault();
			return false;
		} 
	}
}

(function(){
  var cache = {};
 
  this.tmpl = function tmpl(str, data){
    // Figure out if we're getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :
        
      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
       
        // Introduce the data as local variables using with(){}
        "with(obj){p.push('" +
       
        // Convert the template into pure JavaScript
				str.replace(/[\r\t\n]/g, " ")
				.replace(/'(?=[^%]*%>)/g,"\t")
				.split("'").join("\\'")
				.split("\t").join("'")
				.replace(/<%=(.+?)%>/g, "',$1,'")
				.split("<%").join("');")
				.split("%>").join("p.push('")
				+ "');}return p.join('');");
				
    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})(); 

(function() {
	if (typeof(jQuery) != 'undefined') {
		if ($.tablesorter) {
			$.tablesorter.addParser({
				id : 'link',
				is : function(s) {
					return false;
				},
				format : function(s) {
					arr = s.split('>');
					arr = arr[1].split('<');
					text = arr[0];
					text = text.trim();
					
					return text;
				},
				type : 'text'
			});
		}
	
		jQuery().ajaxComplete(function(ev, req, settings) {
			if (req.status == 401) {
				settings.success([]);
				alert('You have insufficient privileges to perform this action.');			
			}
		});	
	}
})();

var AJAX = {
	PopulateDropDown : function(src, options) {
		var target = $('#' + options.target);
		var selected = parseInt($(src).children(':selected').val());
		
		$.getJSON(options.url, 
			{
				id : selected
			},
			(function(target) {
				return function(data) {
					var html = [];
					
					for (var i = 0; i < data.length; i++) {
						item = data[i];
						
						html.push('<option value="' + item['key'] + '">' + item['value'] + '</option>');
					}
					
					target.children(':gt(0)').remove();
					target.append(html.join(''));					
				};	
			})(target)
		);
	}
};

var Workflow = {
	Templates : {
		Item : '<tr><td><input type="hidden" name="step_details" step_id="<%= id %>" step_number="<%= number %>"><%= number %></td><td><%= action %></td><td><%= description %></td><td><%= contacts %></td><td><a href="#" onclick="Workflow.ShiftStep(this);">^</a>&nbsp;&nbsp;<a href="#" onclick="Workflow.DeleteStep({id: <%= id %>,workflow_id: <%= workflow_id %>});">Delete</a></td></tr>'
	},
	
	AddStep : function() {
//		var step_number = $('step_number').getValue();
		var step_action = $('step_action').getValue();
		var step_description = $('step_description').getValue();
		var step_contacts = $('step_contacts').getValue();
		var workflow_id = $('workflow_id').getValue();
		
		jQuery.post('index.php?module=ajax&action=addworkflowstep', {
				"workflow_id" : workflow_id,
//				"number" : step_number,
				"action" : step_action,
				"description" : step_description,
				"contacts" : step_contacts
			},
			function(data) {
				if (data.id) {
					Workflow.GetSteps(workflow_id);
					
//					$('step_number').setValue('');
					$('step_action').setValue('');
					$('step_description').setValue('');
					$('step_contacts').setValue('');
				}
				else {
					alert('There was an error trying to save the step');
				}
			},
			'json'		
		);
	},
	GetSteps : function(workflow_id) {
		jQuery.getJSON('index.php?module=ajax&action=getstepsforworkflow&id=' + workflow_id, 
			function(data) {
				var step_table;
				var template = tmpl(Workflow.Templates.Item);
				
				step_table = jQuery('#steps tbody');
				step_table.empty();
				
				if (data.length > 0) {
					var step;
					for (var i = 0; i < data.length; i++) {
						step = data[i];
						step_table.append(template({
							number : step.stage_number, 
							action : step.action, 
							description : step.description.replace(/\\n/g, '<br>'), 
							contacts : step.constituency.Name, 
							id : step.id,
							workflow_id : workflow_id
						}));
					};
				} 
			}
		);
	},
	DeleteStep : function(params) {
		if (confirm("Do you wish to delete this step ?")) {
			jQuery.post('index.php?module=ajax&action=deleteworkflowstep', {
				"workflow_id" : params.workflow_id,
				"step_id" : params.id
				},
				function(data) {
					Workflow.GetSteps(params.workflow_id);
				}
			);
		
		}		
	},
	SetDefault : function(params) {
		if (confirm("Do you want to make this the default workflow for programs ?")) {
			new Ajax.Request('index.php?module=ajax&action=makedefaultworkflow', {
				method : 'post',
				parameters : {
					"workflow_id" : params
				},
				onSuccess : function(transport) {
					data = transport.responseText.evalJSON();
					
					if (data != true) {
						alert("There was a problem setting this workflow as the default.");
					}
				}
			});
		}
	},
	ShiftStep : function(el) {
		workflow_id = jQuery('#workflow_id').val();
		
		el = jQuery(el);
		row = el.parents('tr:first');
		step_details = row.find('input[name="step_details"]');
		
		step_id = step_details.attr('step_id');
		stage_number = step_details.attr('step_number');
			
		if (stage_number > 1) {
			jQuery.getJSON('index.php?module=ajax', 
			{
				action : 'shiftstep',
				workflow_id : workflow_id,
				step_id : step_id, 
				stage_number : stage_number
			},
			function(data) {
				if (data != true) {
					alert("There was a problem trying to move the step.");
				}
				else {
					Workflow.GetSteps(workflow_id);
				}
			});		
		}
		else {
			alert("You can't move that step.");
		}
		
	}
}

/* PROGRAM
------------------------------------------*/

var Program = {
	Delete : function(options) {
		var defaults = {
			confirm : true,
			id : -1
		};

		(function($) {
			options = $.extend(defaults, options);
			
			if (confirm('Would you like to delete?')) {
				$.getJSON('index.php?module=ajax&action=program&sub=delete&id=' + options.id,
				function(data) {
					if (data) {
						if (data.deleted) {
							Program.RemoveLine({id : options.id});
							return;
						}
					}
					alert('There was a problem deleting that program.');
			});
			}
		})(jQuery);
	},
	
	RemoveLine : function(options) {
		var defaults = {
			fade : 'normal',
			id : -1
		};
		
		(function($) {
			options = $.extend(defaults, options);
			
			$('#program_line_' + options.id).addClass('changing').fadeOut(options.fade, function() {$(this).remove();});
			
		})(jQuery);
	},
	
	ToggleEditing : function(options) {
		var defaults = {};
		
		(function($, options) {
			options = $.extend(defaults, options);
			var container = $('#' + options.container_id);
			var el = $('.' + options.edit_link_class);
			var save_template = $('#' + options.save_template_id).children(':first').clone();

			if (container.length > 0 && !options.set_mode) {
				if (container.find(':disabled').length > 0) {
					container.find('input,select,textarea').addClass('editable').removeAttr('disabled').removeAttr('readonly');
					el.html(options.view_text).data('mode', 'editing');
					el.after(save_template);
				}
				else {
					container.find('input,select,textarea').removeClass('editable').attr('disabled', 'true').attr('readonly', 'true');
					el.html(options.edit_text).data('mode', 'viewing');
					el.next().remove();
				}
			}
			else if (options.set_mode) {
				if (options.set_mode == 'edit') {
					container.find('input,select,textarea').addClass('editable').removeAttr('disabled').removeAttr('readonly');
					el.html(options.view_text).data('mode', 'editing');
					el.after(save_template);
				}
				else {
					container.find('input,select,textarea').removeClass('editable').attr('disabled', 'true').attr('readonly', 'true');
					el.html(options.edit_text).data('mode', 'viewing');
					el.next().remove();
				}
			}
			
		})(jQuery, options);
	},
	
	Save : function(options) {
		var defaults = {
			edit_link_class : 'edit_link',
			view_text : 'View',
			save_template_id : 'save_template',
			edit_text : 'Edit'
		};
		
		(function($, options) {
			options = $.extend(defaults, options);
			var form = $('#' + options.form_id);
			var message_area = $('#' + options.message_area_id);
			var edit_links = $('.' + options.edit_link_class);
			
			if (form.length > 0) {
				form.submit(function() {
					$('#program_save_link').css("display", "none");
					$(this).ajaxSubmit({
						success : function(data) {
							$('#program_save_link').css("display", "");
							if (data.success) {
								form.find('[name=id]').val(data.id);
								var action = form.attr('action');
								form.attr('action', action.replace(/\&id\=\d*/, "&id=" + data.id));
								
								$('[href*="index.php?module=springboard&action=programapproval&id="]').each(function() {
									var href = $(this).attr('href') 
									$(this).attr('href', href.replace(/\&id\=\d*/, "&id=" + data.id));
								});
								
								Program.ToggleEditing($.extend(options,{set_mode : 'view'}));
								message_area.removeClass('error').html('Success').fadeTo(1000, 1.0).fadeOut();
							}
							else {
								message_area.html('Failure').addClass('error');
							}
						},
						dataType : 'json'
					});
					return false;
				}).submit().unbind('submit');
			}
		})(jQuery, options);
	},
	
	AddSpeakerForm : function(options) {
		defaults = {
			form_field_prefix : 'presenter_name_',
			readonly : true,
			edit_link_class : 'edit_link'
		};
		
		(function($, options) {
			options = $.extend(defaults, options);
			if ($('.' + options.edit_link_class + ':first').data('mode') != 'editing') {
				alert("You aren't in edit mode.");
			}
			else {
				var number_of_speakers = $('fieldset.speaker[id!="speaker_template_inner"]').length;
				
				if (number_of_speakers >= 50) {
					alert("A program can only contain 50 presenters.");
				}
				else {
					var el = $('[name="' + options.form_field_prefix + (number_of_speakers - 1) + '"]').parents('fieldset:first');
					var template = $('#' + options.template).find('fieldset:first').clone();
									
					var html = template.fillTemplate({num : number_of_speakers});
					if ($('.edit_link:first').data('mode') != 'editing') {
						html.find('input,textarea,select').attr('disabled', 'true').attr('readonly', 'true').removeClass('editable');
					}
					else {
						html.find('input,textarea,select').addClass('editable');
					}
					
					html.removeAttr('id');
					html.hide();
					el.after(html.fadeIn());
				}			
			}
		})(jQuery, options);
		
		return false;
	},
	
 	RemovePresenter : function(src, options) {
 		var defaults = {
 			edit_link_class : 'edit_link'
 		};
 		
 		(function($, options) {
 			options = $.extend(defaults, options);
			if ($('.' + options.edit_link_class + ':first').data('mode') != 'editing') {
				alert("You aren't in edit mode.");
			}
			else {
				el = $(src).parents('fieldset:first');
				el.fadeOut("fast", function() {$(this).remove();}); 		
			}
 		})(jQuery, options);
 		
 		return false
	},
	
	GenerateSpeakers : function(item_callback) {
		(function($, item_callback) {
			$.getJSON('index.php?module=ajax&action=generatespeakers', function(data) {
				var i;
				
				if (data) {
					for(i = 0; i < data.length; i++) {
						if (item_callback) {
							item_callback(data[i]);
						}
					}
				}
			});
		})(jQuery, item_callback);
		
		return false;
	},
	
	Search : function() {
		(function ($) {
			var options = {};

			options.search_parameters = {};
			
			$('#program_search_form').find('input, select').each(function() {
				var el = $(this);
				
				if (el.attr('type') == 'radio' || el.attr('type') == 'checkbox') {
					if (el.is(':selected')) {
						options.search_parameters[el.attr('name')] = el.val();
					}
					if (el.is(':checked')) {
						options.search_parameters[el.attr('name')] = el.val();
					}
				}
				else {
					options.search_parameters[el.attr('name')] = el.val();
				}
			});
						
			Program.List.Load(options);
		})(jQuery);
	},
	
	SaveReview : function(src) {
		(function($, src) {
			var src = $(src);
			var row = src.parents('div.grouping:first');
			var orig = src.clone();
			var ajax_image = $('<img src="/images/common/ajax_16.gif">');
			
			var params = {
				recommendation : row.find('[name="recommendation"]').val(),
				comments : row.find('[name="comments"]').val(),
				program_id : row.find('[name="program_id"]').val()
			};
			
			src.replaceWith(ajax_image);
			
			$.post('index.php?module=ajax&action=program&sub=savereview',
				params,
				(function(src, orig) {
					return function(data) {
						if (data.id > 0) {
							var row = src.parents('tr:first');
							src.replaceWith('<img src="/images/icons/tick.png">');
							row.find(':input').each(function() {$(this).attr('disabled', '1');});
						}
						else {
							src.fadeOut(250, function() {
								$(this).replaceWith(orig);
								var error = $('<br><span class="error">' + data.error_message + '</span>');
								orig.after(error);
								error.animate({opacity : 1}, 2000, function() {$(this).fadeOut('slow');});
							});
						}
					};
				})(ajax_image, orig),
				'json'
			);
		})(jQuery, src)
		
		return false;
	},

	SaveApprovalNotes : function() {
		(function($) {
			var program_id = $('input[name="program_id"]').val();
			var notes = $('#program_approval_notes').val();
			
			$.getJSON('index.php?module=ajax&action=program&sub=saveapprovalnotes', 
				{
					id : program_id,
					notes : notes
				},
				function(data) {
					if (data.error_message) {
						$('#score_result').html(data.error_message);
					}
					else {
						$('#score_result').show().html('Success').fadeTo(1000, 1, function() {$(this).fadeOut('slow');});
						$('input[name="program_id"]').val(data.id);
					}
				}
			);
		})(jQuery);
	},

	SaveStatus : function(el) {
		(function($, el) {
			var program_id = $('input[name="program_id"]').val();
			var status = $(el).val();
			
			$.getJSON('index.php?module=ajax&action=program&sub=savestatus', 
				{
					id : program_id,
					status : status
				},
				function(data) {
					if (data.error_message) {
						$('#score_result').html(data.error_message);
					}
					else {
						$('#score_result').show().html('Success').fadeTo(1000, 1, function() {$(this).fadeOut('slow');});
						$('input[name="program_id"]').val(data.id);
					}
				}
			);
		})(jQuery, el);
	},
	
	// ************************************************
	//
	// Start Program.List Class
	// 
	// ************************************************
	
	List : {
		defaults : {
			list_container_id : 'program_list',
			properties : "id,title,description,date_created,approval_stage,contact_id,total_stages,contact_name,tag_names,overall_score,status"
		},
		
		Loading : '<tr><td colspan="15" align="center">Loading <img src="images/common/ajax_16.gif"></td></tr>',
		
		no_records : '<tr><td colspan="15" align="center">No Records Found</td></tr>',

		Load : function(options) {
			defaults = {
				list_id : 'program_list',
				template_id : 'item_template'
			};
			
			(function($, options) {
				var options = $.extend(defaults, options);
				var template = $('#' + options.template_id).parent();
				var options_json = {};
				
				options_json.search = options.search_parameters;
								
				$('#' + options.list_id).html(Program.List.Loading);

				$.post('index.php?module=ajax&action=program&sub=get',
					{
						properties : Program.List.defaults.properties,
						options_json : $.toJSON(options_json)
					},
					function(data) {
						if (data) {
							var tbody = $('#' + options.list_id);
							var table = tbody.parents('table:first');
							var html;
							var chunk_size = 20;
							var count_element = $('#number_programs').length > 0 ? $('#number_programs') : null;
							var program_ids = [];
							
							for (var i = 0; i < data.length; i++) {
								program_ids.push(data[i].id);
								if (!data[i].approval_stage) {
									data[i].approval_stage = 0;
								}
							}
							
							if (count_element) {
								count_element.html(data.length);
							}
							
							tbody.data('program_ids', program_ids.join(','));
							Program.List.BuildHtml(data, options, tbody, function(tbody, html) {
								tbody.append(html);
							});
						}
					},
					'json'
				);

			})(jQuery, options);
		},
		
		ShowSearch : function() {
			(function($) {
				$('#search_form').toggle();
				if ($('#search_form').is(':visible') && !$('#tag_input').data('tag_suggest')) {
					$('#tag_input').tagSuggest({
						delay: 500,
						container: "tags",
						form_field: "tags_field",
						tag_type : "program"
					});
					
					$('#tag_input').data('tag_suggest', true);
				}
				
			})(jQuery);
		},
		
		BuildHtml : function(data, options, tbody, progressFn) {
			var item_template = tmpl(options.template_id);
			var i = 0;
			var options = $.extend(defaults, options);
			var chunk_size = 50;
			
			if (data.length > 0) {
				(function() {
					var html_stack = [];
					var chunk = data.splice(0, chunk_size);
					
					for (var j = 0; j < chunk.length; j++) {
						html_stack.push(item_template(chunk[j]));
					}
					
					html = html_stack.join('');
					
					i++;
					progressFn(tbody, html);

					if (data.length > 0) {
						setTimeout(arguments.callee, 50);
					}
					else {
						jQuery('#program_list tr:first').remove(); // Remove loading animation.
						tbody.parents('table:first').trigger('update');
					}
				
				})();
			}
			else {
				jQuery('#program_list tr:first').remove(); // Remove loading animation.
				progressFn(tbody, Program.List.no_records);
			}
		},
		
		GetCSV : function(options) {
			(function($, options) {
				var tbody = $('#' + options.list_id);
				var program_ids = tbody.data('program_ids');
				var form = $('#csv_form');
				
				form.find('[name="program_ids"]').val(program_ids);
				form.submit();
				
			})(jQuery, options);
			
			return false;
		}
	}
}

/* Address
----------------------------------------------------*/
var Address = {
	DisplayFromForm : function(el, number, address_template) {
		(function($, el, number) {
			var el = $(el);
			var fieldset = el.parents('fieldset:first');
			var address = {};
			
			fieldset.find('input,select').each(function() {
				var field = $(this);
				var id = field.attr('id');
				var val = field.val();
				var property = id.substring(5, id.length - number.length - 1);
				address[property] = val;
				
			});

			Address.DisplayAddress(address, address_template);
		})(jQuery, el, number, address_template);
	},
	
	DisplayAddress : function(address, address_template) {
		(function($){
			address_template = $(address_template);
			$(address_template.fillTemplate(address).html()).dialog({title : "Address"});
			var html = $(address_template).html();
			html = html.replace(/\,\s\s$/gm, '<br>');
			$(address_template).html(html);
		})(jQuery, address, address_template);
	}
}

/* Religious Drop Downs
-----------------------------------------------------*/
var ReligiousDropDown = {
	AffiliationChanged : function(el, options) {
		var defaults = {};
		
		(function($, el, options) {
			var options = $.extend(defaults, options);
			var el = $(el);
			var val = el.val();
				
			if (val) {
				ReligiousDropDown.GetDenominations(val, options);
			}
		
		})(jQuery, el, options);
		
		return false;
	},
	
	GetDenominations : function(val, options) {
		var defaults = {};
		
		(function($, val, options) {
			var options = $.extend(defaults, options);
			var el = $('#' + options.denomination_element_id);
			el.empty();
			
			$.getJSON('index.php?module=extranet&action=getdenominations&id=' + val,
				function(data) {
					if (data) {
						if (data.length > 0) {
							for (i = 0; i < data.length; i++) {
								var item = data[i];
								var opt = $('<option value="' + item.key + '">' + item.value + '</option>');
								el.append(opt);
							}
						}
						else {
							el.append('<option value="">No Subtraditions</option>');
						}
					}
				}
			);
		})(jQuery, val, options);
	}
}

/* Tags
--------------------------------------------------*/
var Tag = {
	defaults : {
		
	},
	html : '',

	Edit : function(options) {
		var spans = jQuery('#tag_container').find('#tag-td-'+options.id+' span');
		spans[0].hide();
		spans[1].show();
	},

	Update : function(options) {
		tag = jQuery('#tag-input-'+options.id).val();
		var func = (function(options){
			return function() { 
				var span = jQuery('#tag_container').find('#tag-td-'+options.id+' span:first');
				oldTag = span.text().trim();
				var html = span.html().replace(oldTag, tag);
				span.html(html);
				var spans = jQuery('#tag_container').find('#tag-td-'+options.id+' span');
				spans[1].hide();
				spans[0].show();
			}
			
		})(options);
		jQuery.ajax({
			url: 'index.php?module=administration&action=updatetag&id='+options.id+'&type='+jQuery('#select_tag_type').val()+'&tag='+escape(tag), 
			success: func 
		});
	},

	Delete : function(options) {
		var span = jQuery('#tag_container').find('#tag-td-'+options.id+' span:first');
		tag = span.text().trim();
		var func = (function(options){
			return function() { 
				var tr = jQuery('#tag_container').find('#tag-td-'+options.id).parent().remove();
			}
			
		})(options);
		if (confirm('Are you sure you want to delete the tag "'+tag+'"?')) {
		jQuery.ajax({
			url: 'index.php?module=administration&action=deletetag&id='+options.id+'&type='+jQuery('#select_tag_type').val(), 
			success: func 
		});

		}
	},
	
	Form : function(options) {
		var defaults = {
			tag_form_id : 'tag_form_template'
		};
		
		(function($, options) {
			var options = $.extend(Tag.defaults, defaults, options);
			var tag_template = $('#' + options.tag_form_id);
			
			var form = tmpl(options.tag_form_id, {
				parent_tag_id : options.parent_tag_id
			});
			
			options.tag_type = $('[name="tag_type"]').val();
			
			$(form).dialog({
				buttons : {
					'Save' : function() {
						var parent_tag_id = $(this).find('#tag_parent_id').val();
						var tag_text = $(this).find('#tag_text').val();
						
						Tag.Create(options.parent_tag_id, tag_text, options.tag_type, $(this), function(dialog) {dialog.dialog('destroy');});
					},
					'Close' : function() { $(this).dialog('destroy'); }
				}
			});
		})(jQuery, options);
	}, 
	
	MultiSetForm : function(options) {
		(function($, options) {
			var checked = $('[name="' + options.item_field + '"]:checked');
			
			Tag.multi_set = true;
			
			if (checked.length <= 0) {
				alert('You need to select an item to tag.');
			}
			else {
				div = $('<div class="dialog"></div>');
				template = $('#tags_dialog').html();
				
				div.append(template);
				$('body').append(div);
				
				div.dialog({
					height : 400,
					buttons : {
						'Save' : function() {
							var program_ids = '';
							var tag_ids = '';

							for (var i = 0; i < checked.length; i++) {
								program_ids += $(checked[i]).val() + ',';
							}
			
							tag_ids = div.find('#tagids').val();				
						
							$.post('index.php?module=ajax&action=program&sub=multitag', 
								{
									program_ids : program_ids,
									tag_ids : tag_ids
								},
								function(data) {
									if (!data) {
										alert('There was a problem trying to tag your items.');
									}
									else {
										msg = $('<div class="dialog">Items were tagged successfully.</div>');
										$('body').append(msg);
										
										msg.dialog().animate({opacity : 1}, 2000, function() {$(this).dialog('destroy');});
										
										div.dialog('destroy');
									}
								}, 
							'json');
							
							Tag.multi_set = false;
						}
					}
				});
				div.parent().find('#tag_tree').css('overflow-y', 'auto');

			
			}
			
		})(jQuery, options);
		
		return false;
	},
	
	MultiSetAddTag : function (el, options) {
		(function($, el, options) {
			var id = options.id;
			var text = options.text;
			
			var dialog = $(el).parents('div.dialog');
			
			var tag_id_el = dialog.find('#tagids');
			var tag_span_el = dialog.find('#tags').eq(0);
			
			var tag_ids = tag_id_el.val() + id + ',';
			tag_id_el.val(tag_ids);
			
			tag_span_el.append('<span>' + text + '</span>, ');
		})(jQuery, el, options);
		
		return false;
	},
	
	Create : function(parent_id, tag_text, tag_type, dialog, callback) {
		(function($) {
			if (tag_text.length > 0) {
				$.post('index.php?module=ajax&action=addtag', {
					parent_id : parent_id,
					tag : tag_text,
					tag_type : tag_type
				}, 
				function(data) {
					if (data) {
						if (data.id > 0) {
							var el = $('[tag_id=' + parent_id + ']');
							var clicked_row = el.parents('tr:first');
							el.wrap('<strong></strong>');
							callback(dialog);
							
							if (clicked_row.hasClass('expanded')) {
								el.click().animate({opacity : 1}, 200, function() {$(this).click();});
							}
							else {
								el.click();
							}
							
							
						}
					}
				}, 
				'json');			
			}
			else {
				alert('A tag should have a name.');
			}
		
		})(jQuery);
	},
	
	ShowTagTree : function(options) {		
		(function($, options) {
			var defaults = {
				tag_tree_source : '#tag_tree_template'
			}
			
			var options = $.extend(defaults, options);
			
			var tree = $($(options.tag_tree_source).html()).treeview();
			
			var div = $('<div class="dialog"></div>');
			div.append(tree);

			div.dialog({
				title : 'Tags',
				height : '30em'
			});

			div.parent().find('.ui-dialog-content').css('overflow-y', 'auto');
		})(jQuery, options);
		
		return false;
	},
	
	AddTag : function(el, options) {
		if (Tag.multi_set) {
			Tag.MultiSetAddTag(el, options);
		}
		else {
			(function($, el, options) {
				var defaults = {
					input_element : '#taginput'
				}
				
				var options = $.extend(defaults, options);
				
				if (options.type == 'parliamentprogramtag') {
					url = 'index.php?module=ajax&action=findtags&sub=gettag&tag_type=program&id='
				}
							
				$(options.input_element).addTagById(options.id, url);
			})(jQuery, el, options);		
		}
		
		return false;
	},
	
	Save : function(src, options) {
		(function($, options, src) {
			var defaults = {
				tags_element : '#tags_field'
			}
			
			var options = $.extend(defaults, options);
			
			var tags = $(options.tags_element).val();
			
			$.post('index.php?module=ajax&action=tagitem', {
					tags : tags,
					type : options.type,
					id : options.id
				},
				(function(src){
					return function(data) {
						var status = $('<span style="margin-left:1em;" />');
						var el = $(src);

						if (data) {
							el.after(status.addClass('success').append('Success'));
						}
						else {
							el.after(status.addClass('error').append('Error'));
						}
						
						status.animate({opacity : 1}, 1500, function() {
							$(this).fadeOut(function(){
								$(this).remove();
							});
						});
					};	
				})(src),
				'json'
			);
		})(jQuery, options, src);
		
		return false;
	}

}

/* Contacts
-------------------------------------------------------*/
var Contacts =  {
	defaults : {},

	DeleteDocument : function(docID, docTitle) {
		if (confirm('Are you sure you want to delete the document "' + docTitle + '?"')) {
			$.getJSON('index.php?module=ajax&action=deletecontactdocument&id=' + docID,
				{ },
				function(data) {
					if (data) {
						jQuery('#contact_document_'+docID).remove();
					}
				}
			);
		}
	},

	LoadDuplicates : function(options) {
		defaults = {
			list_id : 'contact_list',
			template_id : 'item_template'
		};
		
		(function($, options) {
			var options = $.extend(defaults, options);
			var letter = options.filter;
			var url = document.location.toString();
			var template = $('#' + options.template_id).parent();
			var options_json;
			
			if (url.match('#')) {
				var anchor = url.split('#')[1];
				
				switch(anchor) {
					case 'show_deleted' :
						options = $.extend(options, {deleted : true});
						break;
				}
			}
			
			options_json = $.toJSON(options);
			
			$('#' + options.list_id).html(Contacts.List.Loading);
	
			$.getJSON('index.php?module=ajax&action=getduplicatecontacts&filter=' + letter,
				{
					properties : Contacts.List.defaults.properties,
					options : options_json
				},
				function(data) {
					if (data) {
						var tbody = $('#' + options.list_id);
						var table = tbody.parents('table:first');
						var html;
												
						for (var i = 0; i < data.length; i++) {
							if (data[i].has_correspondence) {
								data[i].has_correspondence = data[i].id;
							}
							data[i].counter = i + 1;
						}
											
						html = Contacts.List.BuildHtml(data, options);	
						tbody.html(html);
						if (html.length > 0) {
							table.tablesorter({
								headers : {
									0 : {sorter : false},
									1 : {sorter : false},
									3 : {sorter : false},
									5 : {sorter : false},
									7 : {sorter : false},
									9 : {sorter : false},
									11 : {sorter : false},
									13 : {sorter : false},
									15 : {sorter : false},
									17 : {sorter : false},
									19 : {sorter : false},
									20 : {sorter : false},
									21 : {sorter : false}
								}
							});
							
							if (table.tablesorterPager && tbody.children().length > 0) {
								table.tablesorterPager({
									container : $('#pager'),
									pagerPositionSet : true
								});
							}						
						}
					}
				}
			);

		})(jQuery, options);
	},
	
	LoadList : function(options) {
		defaults = {
			list_id : 'contact_list',
			template_id : 'item_template'
		};
		
		(function($, options) {
			var options = $.extend(defaults, options);
			var letter = options.filter;
			var url = document.location.toString();
			var template = $('#' + options.template_id).parent();
			var options_json;
			
			if (url.match('#')) {
				var anchor = url.split('#')[1];
				
				switch(anchor) {
					case 'show_deleted' :
						options = $.extend(options, {deleted : true});
						break;
				}
			}
			
			options_json = $.toJSON(options);
			
			$('#' + options.list_id).html(Contacts.List.Loading);
	
			$.getJSON('index.php?module=ajax&action=getcontacts&filter=' + letter,
				{
					properties : Contacts.List.defaults.properties,
					options : options_json
				},
				function(data) {
					if (data) {
						var tbody = $('#' + options.list_id);
						var table = tbody.parents('table:first');
						var html;
												
						for (var i = 0; i < data.length; i++) {
							if (data[i].has_correspondence) {
								data[i].has_correspondence = data[i].id;
							}
							data[i].counter = i + 1;
						}
											
						html = Contacts.List.BuildHtml(data, options);	
						tbody.html(html);
						if (html.length > 0) {
							table.tablesorter({
								headers : {
									0 : {sorter : false},
									1 : {sorter : false},
									3 : {sorter : false},
									5 : {sorter : false},
									7 : {sorter : false},
									9 : {sorter : false},
									11 : {sorter : false},
									13 : {sorter : false},
									15 : {sorter : false},
									17 : {sorter : false},
									19 : {sorter : false},
									20 : {sorter : false},
									21 : {sorter : false}
								}
							});
							
							if (table.tablesorterPager && tbody.children().length > 0) {
								table.tablesorterPager({
									container : $('#pager'),
									pagerPositionSet : true
								});
							}						
						}
					}
				}
			);

		})(jQuery, options);
	},

	AddForm : function(form_type, options) {
		(function($) {
			var formHolder = $('#' + form_type + '_forms');
			var formCount = formHolder.find('fieldset > legend').length;
			var jsonOptions = $.toJSON(options);
			
			formCount++;
	
			$.get('/index.php?module=contacts&action=ajax&subact=gettemplate&type=' + form_type + '&num=' + formCount + '&options=' + jsonOptions, 
				function(html) {
					formHolder.append(html);
					MakeSelectsDynamic();
				}
			);

		})(jQuery);
	},
	
	RemoveForm : function(form_type, number) {
		(function($) {
			$('#' + form_type + '_form_' + number).remove();		
		})(jQuery);

//		each(function(object, index) {
//			object.remove();
//		});
	},
	
	Delete : function(id, options) {
		var defaults = {
			element_prefix : '.contact_item_'
		};
		
		(function($, options) {
			var options = $.extend(defaults, options);
			
			if (confirm('Do you really wish to archive this user?')) {
				$.getJSON('index.php?module=ajax&action=contacts&sub=archive&id=' + id, function(data) {
					if (data == true) {
						var el = $(options.element_prefix + id);
						el.children('td').each(function() {
							$(this).wrapInner('<div></div>').children('div').slideUp(function() {el.remove();})
						});
					}
					else {
						alert((data.message ? data.message : 'There was an unknown error'));
					}
				});
			}
		
		})(jQuery, options);
	},
	
	ConstituencySelected : function(constituency_id) {
		(function($) {
			form_holder = $('#constituency_forms');
			constituencies = [];
			
			//$$('[name=constituencies]').each(function(s, index) {
			
				form = $('#constituency_form_' + constituency_id);
			
				if ($('#constituency_checkbox_' + constituency_id).is(':checked')) {
					if (form.length == 0) {
						Contacts.AddForm('constituency', {"constituency_id" : constituency_id});					
					}
				}
				else {
					if (form.length != 0) {
						$('#constituency_form_' + constituency_id).remove();
					}
				}

		})(jQuery);
	},
	
	FindByName : function(search_text, select) {
		(function($, select) {
			var select_id = $(select).attr('id');
			
			$.getJSON('/index.php?module=contacts&action=ajax&subact=findcontact&search=' + search_text, function(data) {
				var select = $('#' + select_id);
				
				if (data) {
					select.children().each(function() {
						$(this).remove();
					});
	
					var opt = '<option value="" i="0" display="">Please select</option>';
	
					select.append(opt);
	
					for (i = 0; i < data.length; i++) {
						opt = '<option value="' + data[i].id + '" i="' + i + '" display="' + data[i].first_name + ' ' + data[i].last_name + '">' + data[i].first_name + ' ' + data[i].last_name + '</option>';
	
						select.append(opt);
					}
				}
			});
		})(jQuery, select);
	},

	FindSpeakerByName : function(search_text, select) {
		(function($, select) {
			var select_id = $(select).attr('id');
			
			$.getJSON('/index.php?module=contacts&action=ajax&subact=findspeaker&search=' + search_text, function(data) {
				var select = $('#' + select_id);
				select.get(0).innerHTML = '';
				
				if (data) {
					var opt = '<option value="" i="0" display="">Please select</option>';
	
					select.append(opt);
	
					for (i = 0; i < data.length; i++) {
						opt = '<option value="' + data[i].id + '" i="' + i + '" display="' + data[i].name + '">' + data[i].name + ' (ID: ' + data[i].id + ')</option>';
						select.append(opt);
					}
				}
			});
		})(jQuery, select);
	},

	FindProgramByName : function(search_text, select) {
		(function($, select) {
			var select_id = $(select).attr('id');
			
			$.getJSON('/index.php?module=contacts&action=ajax&subact=findprogram&search=' + search_text, function(data) {
				var select = $('#' + select_id);
				select.get(0).innerHTML = '';
				
				if (data) {
					var opt = '<option value="" i="0" display="">Please select</option>';
	
					select.append(opt);
	
					for (i = 0; i < data.length; i++) {
						opt = '<option value="' + data[i].id + '" i="' + i + '" display="' + data[i].title + '">' + data[i].title + ' (ID: ' + data[i].id + ')</option>';
						select.append(opt);
					}
				}
			});
		})(jQuery, select);
	},

	RemoveRelatedSpeaker : function(contactID, speakerID) {
		(function($, contactID, speakerID) {
			$.get('/index.php?module=contacts&action=ajax&subact=removespeaker&contactid=' + contactID + '&speakerid=' + speakerID, function(data) {
				$('#mapped_speaker').html('No related speaker');
			});
		})(jQuery, contactID, speakerID);
	},
	
	RemoveRelatedProgram : function(contactID, programID) {
		(function($, contactID, programID) {
			$.get('/index.php?module=contacts&action=ajax&subact=removeprogram&contactid=' + contactID + '&programid=' + programID, function(data) {
				if ($('#mapped_program_'+programID))
					$('#mapped_program_'+programID).remove();
				if ($('#mapped_contact_'+contactID))
					$('#mapped_contact_'+contactID).remove();
			});
		})(jQuery, contactID, programID);
	},

	SendPassword : function(el, id) {
		(function($, src, id) {
			var el = $(src);
			var img = el.find('img:first');
			
			el.html('<img src="/images/common/ajax_16.gif">');
			
			$.getJSON('index.php?module=ajax&action=contacts&sub=sendpassword', 
				{
					id : id
				},
				(function(src, img) {
					return function(data) {
						if (data) {
							src.find('img:first').fadeOut(2000, 
								function() {									
									var new_image;
									
									if (data.success) {
										new_image = $('<img src="/images/icons/tick.png">');
									}
									else {
										new_image = $('<img src="/images/icons/cross.png">');
									}
									
									$(this).replaceWith(new_image);
									new_image.fadeOut(1500, function() {$(this).replaceWith(img);});
								}
							);
						}
					}
				})(el, img)
			);
			
		})(jQuery, el, id);
		
		return false;
	},
	
	/* START LIST CLASS
	----------------------------------------*/
	List : {
		defaults : {
			list_container_id : 'contact_list',
			properties : "id, title_1, first_name, last_name, city, country, organisation_name, religious_affiliation, country, tags, speaker_program_id, has_correspondence"
		},
		
		Loading : '<tr><td colspan="22" align="center">Loading <img src="images/common/ajax_16.gif"></td></tr>',
		
		Filter : function(s) {
			if (!s) {
				s = 'Unknown';
			}
			
			return s;
		},
		
		ProgramLink : function(s) {
			var number = parseInt(s);
			s = '';
			
			if (number != 'NaN') {
				if (number > 0) {
					s = '<a href="index.php?module=administration&action=program&id=' + number + '"><img src="/images/icons/program_go.png"></a>';
				}		
			}
			
			return s;
		},
		
		CorrespondenceLink : function(s) {
			var number = parseInt(s);
			s = '';
			
			if (number != 'NaN') {
				if (number > 0) {
					s = '<a href="index.php?module=contacts&action=correspondence&contact_id=' + number + '" title="See Correspondence"><img src="/images/icons/correspondence.png" border="0"></a>';
				}		
			}
			
			return s;
		},
		
		FilterTags : function(s) {
			var ret = '';
			var i;
			
			if (s.length <= 0) {
				ret = 'None';
			}
			else {
				for (i = 0; i < s.length; i++) {
					ret += s[i].tag + ', ';
				}
				
				ret = ret.substring(0, ret.length - 2);
			}
			
			return ret;
		},
		
		ArchiveLink : function(s) {
			var number = parseInt(s);
			var ret = '';
			
			if (number != 'NaN') {
				if (number > 0) {
					ret = '<a href="#" onclick="return Contacts.Delete(' + number + ');" title="Delete"><img src="/images/icons/user_delete.png"></a>';
				}
			}
			
			return ret;
		},
		
		BuildHtml : function(data, options) {
			var html = [];

			if (data.length > 0) {
				var counter = 0;
				for (var i = 0; i < data.length; i++) {
					if (data[i].updated <= 0 && data[i].archived <= 0) {
						if (!data[i].counter) {
							data[i].counter = counter++;
						}
						html.push(tmpl(options.template_id, data[i]));					
					}
				}			
			}	
			
			return html.join('');					
		}, 
		
		Check : function(action, options) {
			(function($, action) {
				var options = $.extend(Contacts.defaults, Contacts.List.defaults, options);
				var list_container = $('#' + options.list_container_id);
				var table;
						
				if (list_container.is('table')) {
					table = list_container;
				}
				else {
					table = list_container.parents('table:first');
				}

				switch (action) {
					case 'all' : 
						if (table.length > 0) {
							if (table.tablesorterPager) {
								table.trigger('removepaging');
							}
						}
						
						list_container.find(':checkbox').attr('checked', '1');
						break;
					case 'none' : 
						list_container.find(':checkbox').removeAttr('checked');
						
						if (table.length > 0) {
							if (table.tablesorterPager) {
								table.trigger('addpaging');
							}
						}
						
						break;
				}
				
			})(jQuery, action);
			
			return false;
		}, 
		
		MultiSet : function(options) {
			var defaults = {};
			
			(function($, options) {
				var options = $.extend(Contacts.defaults, Contacts.List.defaults, defaults, options);
				var properties = options.properties;
				var contact_ids = options.contact_ids;
								
				$.post('index.php?module=contacts&action=multiset',
				{
					properties : $.toJSON(properties),
					contact_ids : $.toJSON(contact_ids),
					contact_properties : Contacts.List.defaults.properties + ',old_id, error_message'
				},
				function(data) {
					if (data) {
						options.callback(data);
					}
				},
				'json');
				
			})(jQuery, options);
		},

		GetCSV : function(options) {
			(function($, options) {
				var tbody = $('#' + options.list_id);
				var contact_ids = tbody.data('contact_ids');
				var form = $('#csv_form');
				form.find('[name="contact_ids"]').val(contact_ids);
				form.find('[name="format"]').val(options.format);
				form.submit();
				
			})(jQuery, options);
			
			return false;
		}

	}
	/* END LIST CLASS
	----------------------------------------------*/
}

/* END CONTACT CLASS
--------------------------------------------*/

/* START AJAX CLASS
--------------------------------------------*/
var Ajax = {
	defaults : {
		url : 'index.php?module=ajax'
	},
	
	GetTemplate : function(options) {
		var defaults = {};
		var ret;
		
		(function($, options, ret) {
			var options = $.extend(Ajax.defaults, defaults, options);
			
			ret = $.load(options.url,	{
				action : 'get_template',
				module : options.module,
				template_name : options.template_name
			});

		})(jQuery, options, ret);
		
		return ret;
	}
}

/* END AJAX CLASS
--------------------------------------------*/

function SaveContact() {
	(function($) {
		var form = $('#theform');
		var save = true;
		var save_template = $('#message_template');
		var message;
		
		if (window.stopSave) {
			return false;
		}
		
		window.stopSave = true; // Stop double clicks

		if ($('#old_contact').val() == 1) {
			save = confirm('This contact has already been updated, do you wish to save it?');
		}
		
		if (save) {
			form.ajaxSubmit({
				success : function(data) {
					if (data) {
						
						if (data.error_message) {
							window.stopSave = false;
							
							$('#save_button').show();
							message = tmpl(save_template.html(), {message : data.error_message});
							message = $(message);
							message.hide();
							
							form.before(message);
							message.fadeIn(2000).fadeTo(1000, 1, function() { $(this).fadeOut(); });
						}
						else {
							document.location = 'index.php?module=contacts&action=v2_contact&id='+data.id+'&code='+data.code;
						}
					}
				},
				dataType : 'json'
			});			
		}
		
/*		
		if (save) {
			('input, select, textarea').each(function(object, index) {
		//		if (form.select('[name="' + object.name +']') == null) {
					form.insert(object);
		//		}
			});
		}
*/		
	})(jQuery);
	
	return false;
}

var Menu = {
	SubAction : function(el, action_name) {
		if (typeof(jQuery) != 'undefined') {
			(function($, el) {
				var el = $(el);
				var sub_menu = $('#sub_action_' + action_name);
				
				if (sub_menu.length > 0) {
					$('body').append(sub_menu);
					var offset = el.offset();

					sub_menu
					.css({
						top: offset.top + el.height(),
						left: offset.left,
						position : 'absolute'
					})
					.bind('add_events', function() {
						$(this)
						.bind('mouseover', function() {
							var el = $(this);
							el.toggleClass('hover');
							
							if (el.queue().length > 0) {
								el.stop();
								el.fadeTo(0, 1.0);
							}
							
							if (el.data('timeout')) {
								clearTimeout(el.data('timeout'));
							}
						})
						.bind('mouseout', function() {
							var el = $(this);
							var timeout_id = el.data('timeout');
							
							if (timeout_id) {
								clearTimeout(timeout_id);
								el.removeData('timeout');
							}
	
							timeout_id = setTimeout('(function($) { $(\'#sub_action_' + action_name + '\').trigger(\'die\'); })(jQuery)', 250);						
							
							el.toggleClass('hover');
							el.data('timeout', timeout_id);
						})
						.bind('die', function() {
							var el = $(this);
							var timeout_id = el.data('timeout');
							
							if (timeout_id) {
								clearTimeout(timeout_id);
							}
							
							el.removeData('timeout');
							el.fadeOut();
						});
					})
					.show(function() {$(this).trigger('add_events'); });					
				}
			})(jQuery, el);
		}
	}
}

var GenericTable = {
	New : function(src) {
		(function($, src) {
			var parent = $('[name="parent"]').val();
			var name = $('[name="name"]').val();
			
			$.getJSON('index.php?module=ajax&action=generictableadd', 
				{
					name : name,
					parent : parent
				},
				(function(src) {
					return function(data) {
						var el = $(src);
						var status = $('<span />');
						
							if (data) {
								status.addClass('success').html('Success');
								GenericTable.List.Get();
							}
							else {
								status.addClass('error').html('Error');
							}
							
							status.animate({opacity : 1}, 1500, function() {$(this).remove();});
							el.after(status);
						}
				})(src)
			);
		})(jQuery, src);
	},

	List : {
		Merge : function(src, options) {
			(function($, src, options) {
				var options_html = [];
				var data = GenericTable.List.data;
				var dialog = $('<div class="dialog" />');
				
				for (var i = 0; i < data.length; i++) {
					options_html.push('<option value="' + data[i].key + '"');

					if (options.id == data[i].key && !options.parent_id) {
						options_html.push(' disabled');
					}
					
					options_html.push('>' + data[i].value + '</option>');
					
					if (data[i].children) {
						for (var j = 0; j < data[i].children.length; j++) {
							options_html.push('<option value="' + data[i].key + '|' + data[i].children[j].key + '"');
							
							if (data[i].children[j].key == options.id && options.parent_id == data[i].key) {
								options_html.push(' disabled');
							}
							
							options_html.push('> - ' + data[i].children[j].value + '</option>');
						}	
					}
				}
				
				options_html = options_html.join('');

				dialog.append(tmpl('merge_form', {options : options_html})).dialog({
					buttons : {
						Save : (function(options) {
							return function() {
								var target_element = $(this).find('[name="target"]');
								var target = target_element.val();
								
								var params = {
									type : $('#generic_table_type').val(),
									id : options.id,
									target : target
								}

								if (options.parent_id) {
									params.parent_id = options.parent_id;
								}
								
								$.getJSON('index.php?module=ajax&action=generictablemerge', params,
									(function(dialog) {
										return function(data) {
											if (data == true) {
												dialog.append('<span class="success">Success</span>').animate({opacity : 1}, 1500, function() {$(this).dialog('close');});
												GenericTable.List.Get($('#generic_table_type'));
											}
											else {
												var span = $('<span class="error">Error<p>' + data.error_message + '</p></span>');
												dialog.append(span);
											}
										}									
									})($(this))
								);
							};
						})(options),
						Close : function() {
							$(this).dialog('close');
						}
					}
				});
			
			})(jQuery, src, options);
			
			return false;
		},
		
		Rename : function(src, options) {
			(function($, src, options) {
				var row = $(src).parents('tr:first');
				var current_text = row.find('td:first').text();
				var form = tmpl('rename_form', {value : current_text });
				var dialog = $('<div class="dialog" />');
				
				dialog.append(form).dialog(
					{
						buttons : {
							Save : (function(src, options) {
									return function() {
										var parent_id = (options.parent_id ? options.parent_id : 0);
										var id = options.id;
										var name = $(this).find('[name="name"]').val();
										var table_name = $('#generic_table_type').val();

										$.getJSON('index.php?module=ajax&action=generictablerename', 
											{
												id : id,
												parent_id : parent_id,
												name : name, 
												table : table_name
											},
											function(data) {
												if (data.key > 0) {
													var key = data.key;
													var row = $('#row_' + key);
													var cell = row.find('td:first');
													var tick = $('<img src="/images/icons/tick.png">');
													
													if (cell.find('strong').length > 0) {
														cell.html('<strong>' + data.value + '</strong>');
													}
													else {
														cell.html(data.value);
													}
													
													cell.append(tick);
													
													tick.animate({opacity : 1}, 2000, function() {$(this).fadeOut();});
													
													dialog.dialog('close');
												}
												else {
													alert('There was an error.');
												}
											}
										);
									}
								})(src, options)
							},
							Close : function() {
								$(this).dialog('close');
							}
						}
				);				
			})(jQuery, src, options);
		},
		
		Get : function(el) {
			(function($, el) {
				var $el;
				var params = {};
				
				if (el) {
					$el = $(el);
					params.table = $el.val();
				}

				$.getJSON('index.php?module=ajax&action=gentable&sub=get', 
					params,
					function(data) {
						var html = [];

						GenericTable.List.data = data;
						for (var i = 0; i < data.length; i++) {
							data[i].count = i;
							if (data[i].children) {
								html.push(tmpl('item_template_with_children', data[i]));							
							}
							else {
								html.push(tmpl('item_template_no_children', data[i]));
							}
						}
						
						$('#list_body').replaceWith('<tbody id="list_body">' + html.join('') + '</tbody>');
					}
				);
			})(jQuery, el);

		}
	},
	
	SetProperty : function(src, options) {
		(function($, src, options) {
			$el = $('#generic_table_type');
			
			options.table = $el.val();
			$(src).replaceWith('<img src="/images/common/ajax_16.gif">');
			$.getJSON('index.php?module=ajax&action=gentable&sub=setparam', 
				options,
				(function(src, options) {
					return function(data) {
						GenericTable.List.Get($('#generic_table_type'));
					}
				})(src, options)
			);
		})(jQuery, src, options);
		
		return false;
	}
	
}

var DiscountType = {
	Delete : function() {
		alert('This function is in development.');
	}
}

var DiscountCode = {
	Delete : function(id, name) {
		if (confirm('Are you sure you want to delete ' + name + '?')) {
			window.location = 'index.php?module=springboard&action=discountcodedelete&id=' + id;
		}
	}
}

var General = {
	ToggleNext : function(el) {
		(function($, el) {
			var text = $(el).html();
			
			$(el).html(text == 'Cancel' ? 'New Option' : 'Cancel');
			$(el).next().toggle();
				
		})(jQuery, el);
		
		return false;
	}
}

var ReviewUsers = {
	List : {
		Get : function(options) {
			(function($, options) {
				$.getJSON('index.php?module=ajax&action=reviewers&sub=list', 
					(function(options) {
						return function(data) {
							var options = $.extend({sortable : true}, options);
							if (data.length > 0) {
								html = [];
								
								for (var i = 0; i < data.length; i++) {
									html.push(tmpl('item_template', data[i]));
								}
								
								html = html.join('');
							}
							else {
								html = $('#empty_template').html();
							}
							
							$('#users_list').html(html);
							
							if (options.sortable) {
								$('#users_list').parents('.tablesorter:first').trigger('update');
							}
						};
					})(options)	
				);
			})(jQuery, options);
		},
		
		NewForm : function() {
			(function($) {
				var el = $('#new_form');
				var option_row = el.next();
				
				el.find(':input').val('');
				el.find('.error').html('');
				
				if (el.is(':visible')) {
					el.hide();
					option_row.show();
				}
				else {
					option_row.hide();
					el.show();
				}
			})(jQuery);
		},
		
		Delete : function(id) {
			(function($, id) {
				if (confirm('Do you wish to delete this review user?')) {
					$.getJSON('index.php?module=ajax&action=reviewers&sub=delete', 
						{id : id},
						function(data) {
							if (data) {
								ReviewUsers.List.Get();
							}
							else {
								alert("There was a problem trying to delete the user.");
							}
						}
					);				
				}
			})(jQuery, id);
		}
	},
	
	Save : function() {
		(function($) {
			var name = $('[name="name"]').val();
			var email = $('[name="email"]').val();
			
			$.getJSON('index.php?module=ajax&action=reviewers&sub=save',
				{
					name : name,
					email : email
				},
				function(data) {
					if (data) {
						if (data.error_messages.length == 0) {
							ReviewUsers.List.NewForm();
							ReviewUsers.List.Get();
						}
						else {
							var errors = '';
							
							for(var i = 0; i < data.error_messages.length; i++) {
								errors += '<br>' + data.error_messages[i];
							}
							
							$('#new_form').find('.error').html(errors);
						}
					}
				}
			);
		})(jQuery);
	}
}

