/**
 * @author EPotapova
 */

NewMind.registerNameSpace("NewMind.SlfCatAvailUI");

NewMind.SlfCatAvailUI = function(){
	var objSlfCatCalAvailUI;
	var objSlfCatCal;
	var objAvailStays = {};
	var strBookPostUrl = '';
	//Set the sitebuilder ajax url as default
	//will be overriden it in Init() for ETWP 
	var sBaseUrl = '/sitebuilder/ajax/slfcatavailcal.asp';
	//ETWP partilal render control key list
	var sPartRenderCtlList = '';

	var InitSlfCatUI = function(){
		InitNextPrevMonthLinks();
		InitBookableStayLinks();
		InitAvailSearchForm();
	};
	
	var ReInitSlfCatUI = function(){
		InitNextPrevMonthLinks();
		InitBookableStayLinks();
	};
	
	var UpdateSlfCatUI = function (sUrl,objToUpdate,bReInitUI,e){
		//alert(objToUpdate.attr('class'));
		//tidy up the url, remove all appart from query string variables
		sUrl = sUrl.substring(sUrl.indexOf("?"),sUrl.length);
		$.get(sBaseUrl+sUrl+sPartRenderCtlList, {}, function(data){ 
			objToUpdate.html(data);
			if (bReInitUI){ReInitSlfCatUI();}
			if (objToUpdate.attr('id') === 'SelectedStaySummary'){
				//ensure the action is set on the booking form
				objToUpdate.find('form.FrmUnitOptions').attr('action',strBookPostUrl);
			}
		});		
	};
	
	// Update requirement summary generated by RequirementSummary control
	// Applicable to ETWP only
	var UpdateRequirementSummary = function(objSearchForm){
		var reqSummary = $('div.ctl_RequirementSummary  dl#reqsummary');
		if (reqSummary.length > 0) {
			
			var iNights = parseInt(objSearchForm.find('select#nights').attr('value'), 10);
			reqSummary.find('dd#nonights').text(iNights);
			
			var sArrivalDate = objSearchForm.find('input#isostartdate').attr('value');
			var dayfield = sArrivalDate.split("/")[0];
			var monthfield = sArrivalDate.split("/")[1];
			var yearfield = sArrivalDate.split("/")[2];
			var d = new Date(yearfield, monthfield - 1, dayfield);
		
			reqSummary.find('dd#arrivaldate').text(d.toDateString());
			d.setDate(d.getDate() + iNights);
			reqSummary.find('dd#departuredate').text(d.toDateString());
		}
	};
	
	var InitNextPrevMonthLinks = function(){
		//alert(objSlfCatCal.find('div.SC_CalNavLinks a').length);
		objSlfCatCal.find('div.SC_CalNavLinks a').one('click',function(e){
			e.preventDefault();
			//alert('next'+'div.'+$(this).attr('class'));
			var objCal = objSlfCatCal.find('div.'+$(this).attr('class')); 
			if (objCal.css('display')==='none'){
				objCal.show();
			}
			else{
				UpdateSlfCatUI($(this).attr('href'),objSlfCatCalAvailUI.find('div.SlfCatAvailCalWrapper'),true,e);
			}
			
		});
	};
	
	var InitAvailSearchForm = function(){
		$('div.SlfCatAvailUI form#SC_CalendarForm').submit(function(e){
			e.preventDefault();
			var sUrl = '?' + $(this).serialize();
			UpdateSlfCatUI(sUrl,objSlfCatCalAvailUI.find('div.SlfCatAvailCalWrapper'),true,e);
			UpdateRequirementSummary($(this));
		});
	};
	
	var InitBookableStayLinks = function(){
		var objAvailStayTDs = objSlfCatCal.find('td.i,td.a');
		//alert('objTds.length = '+objTds.length);
		var objAvailStayStartTDs = objSlfCatCal.find('td.i:has(a),td.a:has(a)');
		var objAvailStmtTDs = objSlfCatCal.find('td.availstmt_week');
		var objSelectedStayDetails = objSlfCatCal.find('div#SelectedStaySummary');
		var objSummary;
		
		var GetWeekAvailStmtData = function(obj){
			//alert(objStayLink);
			var sDate = obj.attr('id').replace('AvailStmt_', '');
			var objWeekAvailStmtData = objAvailStays.WeekAvailStmtData;
			for (var i = 0, n = objWeekAvailStmtData.length; i < n; ++i) {
				if (objWeekAvailStmtData[i].isostartdate === sDate) {
					var objThisWeekAvailStmt = objWeekAvailStmtData[i];
					break;
				}
			}
			//alert(objThisWeekAvailStmt.isostartdate);
			return objThisWeekAvailStmt;
		};
		
		
		var GetStayData = function(objStayLink){
			//alert(objStayLink);
			var sDate = objStayLink.attr('id').replace('Stay_', '');
			var objAvailStaysData = objAvailStays.AvailStaysData;
			for (var i = 0, n = objAvailStaysData.length; i < n; ++i) {
				if (objAvailStaysData[i].isostartdate === sDate) {
					var objThisStayData = objAvailStaysData[i];
					break;
				}
			}
			//alert(objThisStayData.nights);
			return objThisStayData;
		};
			
		objAvailStayStartTDs.click(function(e){
			e.preventDefault();
			$('td.selected').removeClass('selected');
			$(this).addClass('selected');
			if (objSummary.length > 0) {
				objSummary.remove();
			}
			var objLink = $(this).find('a');
			if (objLink.length > 0) {
				var objThisStayData = GetStayData(objLink);
				var sUrl = objLink.attr('href');
				UpdateStaySummary(sUrl, objThisStayData, e);
			}
			
		});
		
		objAvailStmtTDs.hover(
			function (e) {
				var objThisWeekAvailStmtData = GetWeekAvailStmtData($(this));
				var sSummary = BuildSummary(objThisWeekAvailStmtData, true , e);
				DrawSummary(sSummary, this ,e);	
				}, 
	      	function (e) {
	        				
	      	}		
		);
		
		objAvailStayStartTDs.hover(
			function (e) {
				
				$('td.highlighted').removeClass('highlighted');
				var objLink = $(this).find('a');
				var objThisStayData = GetStayData(objLink);
				var sSummary = BuildSummary(objThisStayData, false, e);
				
				//sSummary = '<span class="title">Available stay 3 nights for £69.00</span><span class="staydates">Saturday, 9th May 2009 - Tuesday, 12th May 2009</span><span class="unitname">Blue Cottage (£23.00 per room/unit per night)</span>';
				
				DrawSummary(sSummary, this,e);
				
				var iNights = parseInt(objThisStayData.nights,10);
				var iCount = 0;
				for (var i = 0, n = objAvailStayTDs.length; i < n; ++i) {
					//$(objAvailStayTDs[i]).removeClass('highlighted');
				
					if (objAvailStayTDs[i] === this){iCount = 1;} 
					if((iCount>=1)&&(iCount<=iNights)){
				 		$(objAvailStayTDs[i]).addClass('highlighted');
						iCount = iCount + 1;
					}
					if (iCount>iNights){break;}
				}
				
				
			}, 
	      	function (e) {
	        	//$('td.highlighted').removeClass('highlighted');
				
	      	}
	    );
		
		var HighlightStay = function(objItems,iQty,sClass){
			var iCount = 0;
			for (var i = 0, n = objAvailStayTDs.length; i < n; ++i) {
				//$(objAvailStayTDs[i]).removeClass('highlighted');
				
				if (objAvailStayTDs[i] === this) {
					iCount = 1;
				}
				if ((iCount >= 1) && (iCount <= iNights)) {
					$(objAvailStayTDs[i]).addClass('highlighted');
					iCount = iCount + 1;
				}
				if (iCount > iNights) {
					break;
				}
			}
		};		
		var BuildSummary = function(objStayData, bAvailStmt, e){
			var objUnitData = objStayData.unitdata;
			var sUnitName = '';
			var sAvailStatement = '';
			
			for (var i = 0, n = objUnitData.length; i < n; ++i) {
				sUnitName = sUnitName + '<span class="unitname">'+objUnitData[i].unitname;
				if (bAvailStmt) {
					sUnitName = sUnitName + ' - ' + objUnitData[i].unitavailstmt;
				} 
				if (i<n-1){
					sUnitName = sUnitName + '<br/>';
				}
				sUnitName = sUnitName + '</span>';
				
			}
			
			var sSummary = '';
			var sTittle = '';
			if (bAvailStmt) {
				sTittle = 'Availability information:';
			}
			else {
				sTittle = 'Available stay: ';
				var sNights = objStayData.nights;
				var sPrice = objStayData.price;
				if ((sNights !== undefined)&&(sPrice !== undefined)){sTittle = sTittle + ' '+ sNights + ' nights for ' + sPrice;}
			
			}
			sSummary = sSummary + '<span class="title">'+sTittle+'</span>';
			
			var sIsoStartDate = objStayData.isostartdate;
			var sAvailType = objStayData.availtype;
			
			var sNiceStayDates = objStayData.nicestaydates;
			if (sNiceStayDates!==undefined){sSummary = sSummary + '<span class="staydates">'+sNiceStayDates+'</span>';}
			sSummary = sSummary + sUnitName;
			
			return sSummary;
		};
		
		
		var DrawSummary = function(sSummary,objThis, e){
			objSummary = $('body > div#SlfCatStaySummary');
			if (objSummary.length === 0) {
				objSummary = $('<div id="SlfCatStaySummary">' + sSummary + '</div>');
				$('body').append(objSummary);
			}
			else {
				objSummary.html(sSummary);
			}
				
			var iOffSetTop = AnchorPosition_getPageOffsetTop(objThis);
			var iOffSetLeft = AnchorPosition_getPageOffsetLeft(objThis);
		
			objSummary.css('position', 'absolute');
			objSummary.css('top', (iOffSetTop + 17) + 'px');
			objSummary.css('left', (iOffSetLeft + 9) + 'px');
			
			$('body').children().one('click',function(e){
				if ($(this).attr('id') !== objSummary.attr('id')) {
					objSummary.remove();
				}
			});
			objSummary.one('click',function(e){
				$(this).remove();
			});
			
		};
		
		var UpdateStaySummary = function(sUrl,objThisStayData,e){
			if (objSelectedStayDetails.length === 0) {
				objSelectedStayDetails = $('<div id="SelectedStaySummary"></div>');
				objSelectedStayDetails.insertBefore(objSlfCatCal.find('div.SC_Product'));
				objSelectedStayDetails.hide();
				UpdateSlfCatUI(sUrl,objSelectedStayDetails,false,e);
				objSelectedStayDetails.slideDown("slow");	
			}else{
				//alert(objSelectedStayDetails.length);
				var objStayPrice = objSelectedStayDetails.find('dd.stayprice');
				objStayPrice.html(objThisStayData.price);
				var objStayDates = objSelectedStayDetails.find('dd.staydates');
				objStayDates.html(objThisStayData.nicestaydates);
				var objIsostartdateInput = objSelectedStayDetails.find('input[name="isostartdate"]');
				objIsostartdateInput.attr('value',objThisStayData.isostartdate);
				var objBookable = objSlfCatCalAvailUI.find('div.pnStayButtons');//Update Bookable
				var sUpdateUrl = sBaseUrl+'?bookable='+objThisStayData.bookable;
				//alert(sUrl.indexOf("stage=unitsel"));
				if (sUrl.indexOf("stage=unitsel") !== -1){
					sUpdateUrl = sUpdateUrl + "&stage=unitsel";
				}
				//alert('sUpdateUrl = '+sUpdateUrl);
				UpdateSlfCatUI(sUpdateUrl,objBookable,false,e);
			}
			objSlfCatCal.find('div.SC_CalNavLinks a').each(function (i) {
		   		var sHref = $(this).attr('href');
			  	var objQueryData = NewMind.GetQuerystringData(sHref);
			    objQueryData.set("isodateselected",objThisStayData.isostartdate);
				sHref = objQueryData.toString();
				$(this).attr('href',sHref);
			 });
		      
						
		};	
				
	};
	
		
return {
		
		Init: function(sBookPostUrl){
			objSlfCatCal = $('div.SlfCatAvailCalWrapper');
			objSlfCatCalAvailUI = $('div.SlfCatAvailUI');
			strBookPostUrl = sBookPostUrl;
			if (objSlfCatCalAvailUI.parent().hasClass('SlfCatAvailUIWrapper')){
				sBaseUrl = '';
				var sCtlKey = objSlfCatCalAvailUI.parent().attr('id').replace('c', '');
				sPartRenderCtlList = '&PartialRenderType=data&PartialRenderControlList='+sCtlKey;
			}
			InitSlfCatUI();
		},
		
		AvailStays: function(data){
			objAvailStays = data;
		}
		
		
	};	

}();


//AddEventListener(window, 'load', NewMind.SlfCatAvailUI.Init);



