soundManager.url = '/soundmanager/soundmanager3.swf'; // set URL to load (overriding default)
soundManager.debugMode = false;
soundManager.consoleOnly = false;
soundManager.onload = function() { LIFEWAY.findandbuy.setReadyToGo(true); };

// This is a TEMP hard coded value until we are getting the URL from endeca
var url = "http://boss.streamos.com/download/lifeway/lwsamples/like_a_river_mix.intro_40k.mp3";

LIFEWAY.findandbuy = new function(){
	var readyToGo = false;
	var offset = 0;
	var retrievingResults = false;
	var yuiTable = null;
	var yuiDataSource = null;
	var retrievedAllRecs = false;
	
	return {
		
		alreadyHaveActiveMembership : function() {
			var isActive = this.isActive;	
			if(isActive == "true") {
				var el = document.getElementById("errorHeader");
				el.innerHTML = "<p>Sorry.  You already have an Active WorshipMap Pro Subscription and are unable to purchase another.</p>  <p>Please remove the WorshipMap Pro subscription from your cart to continue</p>";
				Effect.Appear('errorpopup', { duration: 0.3 });
			}
		},
		
		notEligibleForTrial : function() {
			var hasUsedFreeTrial = this.hasUsedFreeTrial;	
			if(hasUsedFreeTrial == "true") {
				var el = document.getElementById("errorHeader");
				el.innerHTML = "<p>This account has already used its free trial to WorshipMap Pro.<br/>" +
								"Your invoice has been adjusted accordingly.</p>";
				Effect.Appear('errorpopup', { duration: 0.3 });
			}
		},
		
		searchForVersions : function() {
			retrievedAllRecs = false;
			offset = 0;
			if($F('searchString') != ' ') {
				if($F('searchString') != '') {
					document.forms['findAndBuy'].initSearch.value = "false";
				}else {
					document.forms['findAndBuy'].initSearch.value = "true";
				}
				
				createResultsTable('findAndBuySearchResults', Form.serialize('findAndBuy'), "/findAndBuy/submitSearch?");
				
			}
		},
		
		doEmptySearch : function() {
			if($F('searchString') == ''){
				LIFEWAY.findandbuy.searchForVersions();
			}
		},
		
		updateEntry : function(versionId, assetId, quantity, orderNumber) {
				var params = 'versionId=' + versionId + '&assetId=' + assetId + '&quantity=' + quantity + '&orderNumber=' + orderNumber;
				var url = '/findAndBuy/updateEntry';
			   	sendAjaxRequest(url, 'POST', true, params, updateEntrySuccess, updateEntryFailure);	
		},
		checkForDuplicateVersion : function(versionId) {
				var params = 'versionId=' +versionId;
				var url = '/findAndBuy/configure';
				Element.show('waitingGif');
			   	sendAjaxRequest(url, 'POST', true, params, addVersionSuccess, addVersionFailure);	
		},

		playPreview : function(id, url) {
			
			if (!isSoundManagerAvailable()){
				setTimeout("LIFEWAY.findandbuy.playPreview(" + id + ", \"" + url + "\")",30);
				return;
			}
			try {
				//see if the sound is already loaded
				var sound = soundManager.getSoundById(id);
				if(sound == undefined){
					LIFEWAY.findandbuy.addSound(id, url);
					sound = soundManager.getSoundById(id);
				}
				
				if(sound.playState == 1) {
					soundManager.stop(id);
				} else {
					soundManager.stopAll();
					soundManager.play(id, 
						{ 
							autoPlay: false,
							onplay : onPlayPreview,
							onfinish: onFinishPreview,
							onstop: onStopPreview,
							multiShot: false
						});
				}
				return;
			} catch(e) {
				alert(e);
				return;
			}
		},
		
		addSound : function(id, url) {
			if (!isSoundManagerAvailable()){
				setTimeout("LIFEWAY.findandbuy.addSound(" + id + ", '" + url + "' )", 1000);
				return; 
			}
			
			soundManager.createSound(
				{
				  	id: id,
				  	url: url,
				  	autoLoad: false,
					multiShot: false,
					onstop: onStopPreview
				})	
		},	
	
		setReadyToGo : function(ready){
			readyToGo = ready;
		},
		
		displayErrorPopup : function(message) {
			var url = "/errorPopup.jsp";
			var params = "message=" + message;
			sendAjaxRequest(url, 'GET', true, params, displayErrorPopupSuccess, displayErrorPopupFailure);
			
		},
		
		createSongMap : function(orderEntryId) {
			var orderEntryArray = $('buy_left').childElements();
			var pos = LIFEWAY.common.retrieveElementPositionByElementId(orderEntryArray, orderEntryId);
			LIFEWAY.dialog.displayAjpDialog("/confirmSongMapDialog.ajp", {position: pos}, "popup");
		},
		
		editSongMap : function(orderEntryId) {
			var orderEntryArray = $('buy_left').childElements();
			var pos = LIFEWAY.common.retrieveElementPositionByElementId(orderEntryArray, orderEntryId);
			location.href = "/findAndBuy/editSongMap/" + pos;
		},
		
		deleteSongMap : function(orderEntryId, pos) {
			var url = '/findAndBuy/deleteSongMap/' + pos;
		   	sendAjaxRequest(url, 'GET', true, null, deleteSongMapSuccess);	
		   	
		   	function deleteSongMapSuccess() {
		   		//var divToTurnOn = $(orderEntryId).getElementsByClassName("buy_mapping1");
		   		//divToTurnOn[0].style.display = "block";	   		
		   		//var divToTurnOff = $(orderEntryId).getElementsByClassName("buy_mapping2");		   		
		   		//divToTurnOff[0].style.display = "none";
		   		
		   		//LIFEWAY.dialog.removeDialog('popup');	 
		   		location.href = "/findAndBuy/displayCart";  
		   	}
		 },
		
		displaySongMapDeleteWarning : function(orderEntryId, versionName) {
			var eId = orderEntryId.split('_')[2];
			var ePos = orderEntryId.split('_')[3];
			var pos = LIFEWAY.common.retrieveElementPositionByElementId($('buy_left').childElements(), orderEntryId);
		   	var ajpParams = {ePos: ePos, eId: eId, versionName: versionName, position : pos, elementId : orderEntryId};
			LIFEWAY.dialog.displayAjpDialog("/deleteSongMapWarningDialog.ajp", ajpParams, "popup");
		},
		
		displayDuplicateErrorDialog : function(versionName) {
			LIFEWAY.dialog.displayAjpDialog("/duplicateVersionDialog.ajp", {versionName: versionName}, "popup");
		},
		
		displayMissingErrorDialog : function() {
			LIFEWAY.dialog.displayAjpDialog("/missingVersionDialog.ajp", null, "popup");
		},

		updateItemTotal: function(quantity, price, destination, versionId, mediaType, assetId, index, orderNumber) {
			if(quantity < 0 || isNaN(quantity) || quantity == "" || (quantity.indexOf('.') > -1)){
				if(quantity != ""){
					alert("Quantity must be greater than zero");
					$('qty_' + assetId + '_0').value = "0";
				}
				quantity = 0;
			}
			
			LIFEWAY.findandbuy.updateEntry(versionId, assetId, quantity, orderNumber);
			LIFEWAY.findandbuy.calculateItemTotal(quantity, price, destination, versionId, mediaType, index);
			
		},

		calculateItemTotal: function(quantity, price, destination, versionId, mediaType, index) {
			var backgroundColor = Element.getStyle($(destination).parentNode.parentNode.parentNode, 'background-color').parseColor();
			$(destination).innerHTML = (quantity * price).toFixed(2);
		 	new Effect.Highlight(destination, {startcolor:'#dfe9a7', 
				endcolor:backgroundColor, restorecolor:backgroundColor, duration: 2.0});
		 	
		 	var assetPriceTotals = $$('.' + mediaType + '_itemTotal_' + versionId + "_" + index);
			LIFEWAY.common.setCartTotal(assetPriceTotals, mediaType + '_' + versionId + "_" + index);
			new Effect.Highlight(mediaType + '_' + versionId + "_" + index, {startcolor:'#dfe9a7', 
				endcolor:'#ffffff', restorecolor:'#ffffff', duration: 2.0});
			
			LIFEWAY.common.setCartTotal($$('.buy_subtotal_'+versionId+'_'+index), 'cart_total_'+versionId+'_'+index);
			new Effect.Highlight('cart_total_'+versionId+'_'+index, {startcolor:'#dfe9a7', 
				endcolor:'#ffffff', restorecolor:'#ffffff', duration: 2.0});
			
		},
		
		toggleEntry: function(divId){
			if($(divId).hasClassName('arrow_down')){
         		$(divId).className ='arrow_right';
         	}else{
         		$(divId).className = 'arrow_down';
         	}
         }, 
		 
		 deleteOrderEntry : function(versionId, index, orderNumber) {
			var url = '/findAndBuy/deleteEntry';
			var params = "versionId="+versionId+"&index=" + index +"&orderNumber=" + orderNumber;
		   	sendAjaxRequest(url, 'POST', true, params, deleteOrderEntrySuccess, deleteOrderEntryFailure);	
		 },		
		 
		 deleteMembership : function(planId) {
			var url = '/advancedPlanner/deleteMembershipFromCart';
			var params = "planId="+planId;
		  	sendAjaxRequest(url, 'POST', true, params, deleteMembershipSuccess, deleteMembershipFailure);	
		 }, 
		 
		 doKeySearch : function(checked){
			if(checked){
				$('key-options').show();
			} else {
				$('key-options').hide();
				this.clearKeyFilter();
				LIFEWAY.findandbuy.searchForVersions();
			}
		 },

		 clearKeyFilter : function(){
			var form = $('findAndBuy');
			var checkboxes = form.getInputs('checkbox', 'keyFilter');
			for (var i=0; i<checkboxes.length; ++i){
				checkboxes[i].checked = false;
			}
			var modeCheckboxes = form.getInputs('checkbox', 'songMode');
			for (var i=0; i<modeCheckboxes.length; ++i){
				modeCheckboxes[i].checked = false;
			}
		 }
	};
	
	function addVersionSuccess(oReq){
		var versionId = eval( '(' + oReq.responseText + ')');
		location.href='/findAndBuy/addToCart/' + versionId;
	};
	
	function addVersionFailure(oReq){
		Element.hide('waitingGif');
		var responseJSON = eval( '(' + oReq.responseText + ')');
		if(responseJSON.type=="Missing"){
			LIFEWAY.findandbuy.displayMissingErrorDialog();
		} else if(responseJSON.type=="Duplicate") {
			LIFEWAY.findandbuy.displayDuplicateErrorDialog(responseJSON.version);
		}
	};
	
	function deleteOrderEntrySuccess(oReq) {
		var responseJSON = eval( '(' + oReq.responseText + ')');
		$('order_entry_'+responseJSON.version).remove();
		if ($$('div[id^=order_entry]').length == 0) {
			$('home_cart').hide();
		}
		updateCartSummary();
	};
	
	function deleteOrderEntryFailure(oReq) {
		alert(oReq.responseText);
	};
	
	function deleteMembershipSuccess(oReq) {
		var responseJSON = eval( '(' + oReq.responseText + ')');
		$('membership_'+responseJSON.planId).remove();
		if ($$('div[id^=membership]').length == 0) {
			$('home_cart').hide();
		}
		updateCartSummary();
	};
	
	function deleteMembershipFailure(oReq) {
		alert(oReq.responseText);
	};
	
	function displayErrorPopupSuccess(oReq) {
		LIFEWAY.dialog.displayDialog(oReq.responseText, 'popup');
	}
	
	function displayErrorPopupFailure(oReq) {
	}
	
	//this is whether soundmanager has been loaded
	function isSoundManagerAvailable(){
		return readyToGo;
	};
	
	function onPlayPreview() {
		$('audioBtn'+this.sID).src="/images/stop.gif";
	};
	
	function onStopPreview() {
		$('audioBtn'+this.sID).src="/images/play.gif";
	};
	
	function onFinishPreview() {
		$('audioBtn'+this.sID).src="/images/play.gif";
	};
	
	function searchForVersionsFailure(oReq) {
		LIFEWAY.common.replaceInnerHTML('findAndBuySearchResults', 
				'<span class="medium_text">No Records Found</span>');
	};
	
	function createResultsTable(divName, params, baseUrl) {
		try{
			var columnHeaders = buildColumnHeaders();
			yuiTable = null;
			yuiDataSource = null;
			yuiDataSource = buildDataSource(baseUrl);
			YAHOO.widget.DataTable.CLASS_EVEN = "buy_song_blue";
			YAHOO.widget.DataTable.CLASS_ODD = " ";
			YAHOO.widget.DataTable.MSG_LOADING = "";
			
			var initParams = params + "&offset=" + offset;
			
			yuiTable = new YAHOO.widget.DataTable(divName, columnHeaders, yuiDataSource, 
				{initialRequest : initParams, scrollable:true});
			
		    yuiTable.doBeforeLoadData = function(sRequest, oResponse) {
				
				if(oResponse.error || !oResponse.results || oResponse.results.length == 0){
					if(offset == 0) {
						noResultsMessage();
					}
					oResponse.error = false;
					retrievedAllRecs = true;
					return false;
				} else {
					if(oResponse.results.length < 50){
						retrievedAllRecs = true;
					}
					loadPreviewAssets(oResponse.results);
					
					return true;
				}	
			
			};
			$(divName).onscroll = scrollEvent;
			
		}catch(e){
			alert(e);
		}
	};

	function noResultsMessage() {
		var resultMessage = "<p class='orange' style='margin-top:36px;font-weight:bold;font-size:16px;'>I've looked everywhere, and I can't find that song right now...</p>" +
							"<div style='padding-left:37px;font-style:italic;font-weight:bold;'>We are adding songs to LifeWay Worship all the time. There is, of course, the potential you might have mistyped something. Try typing fewer words, check your spelling, or try a theme, topic or phrase from a song.</div>";
		Element.update('findAndBuySearchResults', resultMessage);
	};	
	
	function scrollEvent() {
		
			var Dom = YAHOO.util.Dom;
			var position = $('findAndBuySearchResults').scrollTop; 
			var height = $('findAndBuySearchResults').scrollHeight;
			if(!retrievedAllRecs && (Dom.getY($(getMarkerRowDivId())) < Dom.getY($('findAndBuySearchResults')) + $('findAndBuySearchResults').offsetHeight && !retrievingResults)) {
				retrievingResults = true;
				YAHOO.util.Event.onDOMReady(pageForward);
			}
		
	};
	
	function getMarkerRowDivId(){
		var rowCount = yuiTable.getRecordSet().getLength();
		var rowIndex70percent = rowCount * '.7';
		var markerDiv = "yui-dt0-bdrow" + rowIndex70percent;
		return markerDiv;
	}
	
	function pageForward() {
		var paramsForRequest = Form.serialize('findAndBuy');
		paramsForRequest += "&offset=" + ++offset;
		
		yuiDataSource.sendRequest(paramsForRequest,
                yuiTable.onDataReturnAppendRows, yuiTable); 
		retrievingResults = false;
	};
	
	function buildColumnHeaders(){
		var myColumnHeaders = [ 
			{key:"name", label:"Title", width:"32%" , formatter:formatTitle, className:"buy_song_results"},
		    {key:"typeDescription", label: "Version", width:"25%", className:"buy_song_results" },
		    {key:"", label:"Play", formatter:formatPlayButton,width:"7%", className:"buy_song_results"},
		    {key:"", label:"Info", formatter:formatIconButton,width:"7%", className:"buy_song_results"}, 
		    {key:"", label:"Add To Cart", formatter:formatAddButton, width:"10%", className:"buy_song_results"} 
		]; 
		var columnSet = new YAHOO.widget.ColumnSet(myColumnHeaders);
		return columnSet; 
	};
	
	function formatTitle(elCell, oRecord, oColumn, oData){
		var isPurchased = oRecord.getData('isPurchased');
		elCell.innerHTML = oRecord.getData('name');
		if (isPurchased == 'true'){
			elCell.innerHTML += '&nbsp;<img src="/images/star.gif" />';
		}
	};
	function formatPlayButton(elCell, oRecord, oColumn, oData){
		elCell.innerHTML = '<img class="btnPtr" id="audioBtn' + oRecord.getData('versionId') + '" src="/images/play.gif"  onclick="LIFEWAY.worship.previewplayer.playPreview(' + oRecord.getData('versionId') + ');"/>';
	};
	function formatIconButton(elCell, oRecord, oColumn, oData){
		var name = oRecord.getData('name').replace("'", "''");
		elCell.innerHTML = "<img id=\"infoBtn" + oRecord.getData('versionId') 
			+ "\" class=\"btnPtr\"  src=\"/images/info.gif\"  onclick=\"LIFEWAY.worshipplan.displayElementInformation( '" 
			+ oRecord.getData('versionId') + "');\"/>";
	};
	function formatAddButton(elCell, oRecord, oColumn, oData){
		elCell.innerHTML = '<img class="btnPtr" id="addBtn' + oRecord.getData('versionId') 
			+ '"  src="/images/add.gif" onClick="LIFEWAY.findandbuy.checkForDuplicateVersion(' 
			+ oRecord.getData('versionId') + ');"/>';
	};
	
	function updateEntrySuccess(){
		updateCartSummary();
	};
	
	function updateEntryFailure(){
		
	};
	
	function updateCartSummary(){
		var url = '/findAndBuy/updateCartSummary';
		sendAjaxRequest(url, 'POST', true, null, updateCartSummarySuccess, updateCartSummaryFailure);	
	};
	
	function updateCartSummarySuccess(oReq){
		$('cartSummary').innerHTML = oReq.responseText;
	}
	
	function updateCartSummaryFailure(){
		alert("Unable to update the Cart Summary at this time.");
	}

	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 : "NavItemMusic", 
		    fields: ["name", "typeDescription", "versionId","isPurchased"] 
		}; 
		yuiDataSource.subscribe("requestEvent", requestEv);
		yuiDataSource.subscribe("responseEvent", responseEv);
		return yuiDataSource; 
	};
	
	function requestEv() {
		Element.show('waitingGif');
	};
	function responseEv() {
		Element.hide('waitingGif');
	};
	
	function loadPreviewAssets(jsonData) {
       //**************************************
	   //**  GET URL FROM NavItemMusic !!    **
	   //**  Waiting to get this from endeca **
	   //**************************************	
	    var end = jsonData.length > 25?25:jsonData.length;
		for(var i = 0; i < end; i++ ){
			LIFEWAY.findandbuy.addSound(jsonData[i].versionId, url);
		};
	}	
}
