LIFEWAY.worship.worshipplanlist = new function(){
	var yuiTable;
	var yuiDataSource;
	var epTable;
	var epDataSource;
	var deadTable;
	
	YAHOO.widget.DataTable.prototype.onEventSortColumn = function(oArgs) {		
		removeExpandedPlanElements();
	    var evt = oArgs.event;
	    var target = oArgs.target;
	    YAHOO.util.Event.stopEvent(evt);
	    
	    var el = this.getThEl(target) || this.getTdEl(target);
	    if(el && el.yuiColumnKey) {
	        var oColumn = this.getColumn(el.yuiColumnKey);
	        if(oColumn.sortable) {
	            this.sortColumn(oColumn);
	        }
	        else {
	        }
	    }
	    else {
	    }
	};
	
	return {
		doEmptySearch : function() {
			if ($('worship_plan_search_text').value.length == 0){
				LIFEWAY.worship.worshipplanlist.doPlanSearch();
			}
		},
		
		buildResultsTable : function() {
			createResultsTable('middle_mid', "/worshipPlan/worshipPlanSearch", "");
		},
			
		doPlanSearch : function() {
			removeExpandedPlanElements();
			if ($('worship_plan_search_text').value.length == 0){
				LIFEWAY.common.toggleVisibility('worship_plan_search_3', true);
			} else {
				LIFEWAY.common.toggleVisibility('worship_plan_search_3', false);
			}
			var searchText = $('worship_plan_search_text').value;
			var paramsForRequest = "searchTag=" + searchText;
			getData(paramsForRequest);
		},
		
		searchForAllWorshipPlans : function() {
			LIFEWAY.common.toggleVisibility('worship_plan_search_3', false);
			$('worship_plan_search_text').value = "";
			getData($('worship_plan_search_text').value);
		},
		
		toggleWorshipPlan : function(el, planId) {
			var toggled = toggleElementImage(el);
			if(toggled) {
				buildExpandedElements(el, planId);			
			} else {
				removeExpandedElements(planId);			
			}
		},
		
		duplicatePlan : function(planId){
			var url = '/worshipPlan/duplicatePlan/' + planId;
		   	sendAjaxRequest(url, 'POST', true, null, duplicateSuccess, ajaxFailure);	
		}
	};

	function removeExpandedPlanElements() {
		var expandedNodes = document.getElementsByClassName("yui_expanded_bdrow");
		for(i=0;i<expandedNodes.length;i++) {
			removeExpandedElement(expandedNodes[i]);
		}
	};
	function duplicateSuccess() {
		createResultsTable('middle_mid', "/worshipPlan/worshipPlanSearch", "");
	};

	function removeExpandedElements(planId) {
		var selectedElement = 'yui_expanded_bdrow_'+planId;
		removeExpandedElement($(selectedElement));		
	};
	
	function removeExpandedElement(selectedElement) {
		var previousElement = selectedElement.previousSibling;
		Element.remove(selectedElement);
		previousElement.removeClassName("library_plans_selected");
	};
	
	function buildExpandedElements(el, planId) {
		var tdElement = el.parentNode;
		var selectedElement = tdElement.parentNode;
		
		var element = $(selectedElement);
		element.addClassName("library_plans_selected");	

		trElement = document.createElement('tr');
		trElement.id = "yui_expanded_bdrow_" + planId;
		trElement.className = "yui_expanded_bdrow";
		
		tdElement = document.createElement('td');
		tdElement.id = "expanded_table_td";
		tdElement.setAttribute("colSpan","5");
		
		divElement = document.createElement('div');
		divElement.id = "expanded_div_" + planId;
		divElement.className = "expanded_plan_elements";
		
		tdElement.appendChild(divElement);
		trElement.appendChild(tdElement);
		Element.insert(element, { after: trElement });

		createExpandedWorshipPlanTable("expanded_div_" + planId, "/worshipPlan/viewPlanElements/" + planId);
		
	};

	function toggleElementImage(img) {
		var srcName = img.src;
		if (srcName.indexOf('arrow_right.gif') != -1){
			LIFEWAY.common.toggleElementWithImage(img, "/images/arrow_down.gif");
			return true;
		} else {
			LIFEWAY.common.toggleElementWithImage(img, "/images/arrow_right.gif");
			return false;
		}
	};
		
	function getData(paramsForRequest) {
		if(deadTable) {
			createResultsTable('middle_mid', "/worshipPlan/worshipPlanSearch", $('worship_plan_search_text').value);
		} else {
			yuiDataSource.sendRequest(paramsForRequest,
	                yuiTable.onDataReturnInitializeTable, yuiTable);
        } 
	};

	function createExpandedWorshipPlanTable(divName, url) {
		try{
			var expandedColumnHeaders = buildExpandedColumnHeaders();
			epDataSource = buildExpandedDataSource(url);
			YAHOO.widget.DataTable.CLASS_EVEN = " ";
			YAHOO.widget.DataTable.CLASS_ODD = "library_expanded_plans_odd";
			YAHOO.widget.DataTable.CLASS_TABLE = "wp_expanded_plan";
			YAHOO.widget.DataTable.MSG_LOADING = "";

			epTable = new YAHOO.widget.DataTable(divName, expandedColumnHeaders, epDataSource, 
				{initialRequest : url});
		}catch(e){
			alert(e.message);
		}
	};
	
	function buildExpandedColumnHeaders(){
		var columnHeaders = [ 
			{key:"element.Element.Title", label: " ", width:"50%", className:"element_title"},
		    {key:"element.Element.elementType", label: " ", width:"50%", className:"element_type" }
		]; 
		var columnSet = new YAHOO.widget.ColumnSet(columnHeaders);
		return columnSet; 
	};
	
	function buildExpandedDataSource(baseUrl){
		epDataSource = new YAHOO.util.DataSource(baseUrl); 
		epDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
		epDataSource.connXhrMode = "queueRequests";
		epDataSource.connMethodPost = "true";
		epDataSource.responseSchema = { 
			resultsList : "WorshipPlan.elements.WorshipPlanElementImpl", 
		    fields: ["element.Element.Title", "element.Element.elementType"] 
		}; 
		return epDataSource; 
	};
	
	function createResultsTable(divName, baseUrl, value) {
		try{
			var columnHeaders = buildColumnHeaders();
			yuiDataSource = buildDataSource(baseUrl);
			YAHOO.widget.DataTable.CLASS_EVEN = " ";
			YAHOO.widget.DataTable.CLASS_ODD = "library_plans_odd";
			YAHOO.widget.DataTable.CLASS_TABLE = "yui-dt-table";
			YAHOO.widget.DataTable.MSG_LOADING = "";
			var initParams = "searchTag=" + value;
			yuiTable = new YAHOO.widget.DataTable(divName, columnHeaders, yuiDataSource, 
				{initialRequest : initParams});
				
			yuiTable.doBeforeLoadData = function(sRequest, oResponse) 
			{
				if(oResponse.error || !oResponse.results || oResponse.results.length == 0){
					noResultsMessage();
					oResponse.error = false;
					return false;
				} else {
					deadTable = false;
					return true;
				}
			};
		}catch(e){
			alert(e.message);
		}
	};
		
	function noResultsMessage() {
		var resultMessage = "<p class='orange' style='font-weight:bold;font-size:16px;padding-left: 10px;'>No Worship Plan Data Found</p>";
		Element.update('middle_mid', resultMessage);
		deadTable = true;
	};
	
	//added mysterious sixth column in this method because on sorting it for some reason was 
	//pushing last column over one column causing insane column spacing.... if you find a 
	//better way feel free to find another way
	function buildColumnHeaders(){
		var columnHeaders = [ 
			{label:" ", width:"5%", formatter:addToggleButtons},
			{key:"displayDate", label:"Date", width:"15%", sortable:true},
		    {key:"planName", label: "Worship Plan Name", formatter:formatPlanName, width:"60%", sortable:true},
		    {label: " ", width:"10%", formatter:formatCopyButton},
		    {label: " ", width:"10%", formatter:formatEditButton}
		]; 
		var columnSet = new YAHOO.widget.ColumnSet(columnHeaders);
		return columnSet; 
	};
	
	function buildDataSource(baseUrl){
		yuiDataSource = new YAHOO.util.DataSource(baseUrl); 
		yuiDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
		yuiDataSource.connXhrMode = "queueRequests";
		yuiDataSource.connMethodPost = "true";
		yuiDataSource.responseSchema = { 
			resultsList : "WorshipPlan", 
		    fields: ["displayDate", "planName", "id", "isChildless"] 
		}; 
		return yuiDataSource; 
	};
	
	function addToggleButtons(elCell, oRecord, oColumn, oData) {
		var planId = oRecord.getData('id');
		if ((oRecord.getData('isChildless')) == "false") {
				elCell.innerHTML = "<img border='0' id='wp_toggle_" + planId + "' src='/images/arrow_right.gif'" +
						   "onclick='LIFEWAY.worship.worshipplanlist.toggleWorshipPlan(this, " + planId + ");'" +  
						   " align='left' alt='Toggle'/> ";
		} else {
				elCell.innerHTML = "<img border='0' id='wp_toggle_" + planId + "' src='/images/arrow_right.gif'" +
				   		   " align='left' alt='Toggle'/> ";
		}
	}
	
	function formatPlanName(elCell, oRecord, oColumn, oData){
		var planId = oRecord.getData('id');
		var planName = oRecord.getData('planName');
		elCell.innerHTML = "<span id='planName_" + planId + "'>" + planName + "</span>";
		buildInPlaceEditor(planId);
	};
	
	function formatCopyButton(elCell, oRecord, oColumn, oData){
		var planId = oRecord.getData('id');
		elCell.innerHTML = "<span class='library_plan_button'>" + 
			"<a id='btnCopy_" +  planId + "' onclick='LIFEWAY.worship.worshipplanlist.duplicatePlan(" +  planId + ");'>copy</a></span>";
	};
	
	function formatEditButton(elCell, oRecord, oColumn, oData){
		var planId = oRecord.getData('id');
		elCell.innerHTML = "<span class='library_plan_button'>" + 
			"<a  name='btn_editor' id='btnEdit_" +  planId + "' onclick=location.href='/worshipPlan/showWorshipPlan/" + planId + "'>open</a></span>";
	
	};
		
	function buildInPlaceEditor(id) {
		var planId = "planName_" + id;
		new Ajax.InPlaceEditor(planId, '/worshipPlan/updateName/' + id, 
			{ajaxOptions:{onFailure:LIFEWAY.worshipplan.editPlanNameFailure, onSuccess:LIFEWAY.worshipplan.editPlanNameSuccess},
			 okButton:false,cancelLink:false,submitOnBlur:true, highlightcolor: '#CECECE',
			 callback:LIFEWAY.worshipplan.createWorshipPlanEditParams});
	}
};
