// Max settingObj size 4K
// Maintains filter settings across browser session page reloads
var filterSettings = {};
filterSettings.defaultDate = null;



// dayOfWk: sun(0)-thurs(4), set to up-coming friday
// 			saturday(6) set to next friday
// 			otherwise its friday(5) do nothing 
// NEW Func: this is commented out below per craig's request
filterSettings.initDefaultDate = function(){
	if(filterSettings.defaultDate === null){
		filterSettings.defaultDate = new Date(currDate.toLocaleString());
//		var increment = 0, dayOfWk = filterSettings.defaultDate.getDay();
//		if(dayOfWk < 5){
//			increment = 5 - dayOfWk;
//		} else if(dayOfWk === 6){ 
//			increment = 6;
//		} 
//		filterSettings.defaultDate.setDate(filterSettings.defaultDate.getDate() + increment);
	}
};


// @param filter The filter settings to retrieve (entrance, lodging, packages, tickets, lessons, or rentals).
// @returns the filters default settings hashmap or null if the filter doesn't exist
filterSettings.getDefaultSettings = function(filter){
	filterSettings.initDefaultDate();
	var settingsMap = new HashMap();
	switch(filter.toUpperCase()){
		case 'ENTRANCE':
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#daysSelection', 2);
			settingsMap.put('#lodging', true);
			settingsMap.put('#tickets', false);
			settingsMap.put('#rentals', false);
			settingsMap.put('#lessons', false);
			settingsMap.put('#packages', false);
			settingsMap.put('#searchButton', '');
			break;
		case 'LODGING':
			settingsMap.put('#OTP5tariffSelection', true);
			settingsMap.put('#BESTtariffSelection', true);
			settingsMap.put('#AAAtariffSelection', false);
			settingsMap.put('#MMCLUBtariffSelection', false);
			settingsMap.put('#daysSelection', 2);
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#MMIlodgingFilter',true);
			settingsMap.put('#JSLlodgingFilter',true);
			settingsMap.put('#TAMlodgingFilter',true);
			settingsMap.put('#VILlodgingFilter', true);
			settingsMap.put('#hotellodgingFilter',true);
			settingsMap.put('#b1lodgingFilter', true);
			settingsMap.put('#suitelodgingFilter', true);
			settingsMap.put('#b2lodgingFilter', true);
			settingsMap.put('#studiolodgingFilter', true);
			settingsMap.put('#b3lodgingFilter', true);
			settingsMap.put('#cabinlodgingFilter', true);
			break;
		case 'LESSONS':
			settingsMap.put('#SkiingCB', true);
			settingsMap.put('#SnowboardingCB', true);
			settingsMap.put('#main', true);
			settingsMap.put('#woollywood', false);
			settingsMap.put('#canyon', false);
			settingsMap.put('#canyonKids', false);
			settingsMap.put('#mtnCenter', false);
			settingsMap.put('#eagle', false);
			settingsMap.put('#morningCB', true);
			settingsMap.put('#afternoonCB', true);
			settingsMap.put('#allDayCB', true);
			settingsMap.put('#multiDayCB', true);
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#adultLessonsCB',true);
			settingsMap.put('#sevenTwelveLessonsCB',true);
			settingsMap.put('#fiveSixLessonsCB',true);
			settingsMap.put('#threeFourLessonsCB', true);
			settingsMap.put('#alacarteCB', true);
			settingsMap.put('#packageCB', true);
			break;
		case 'TICKETS':
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#daysSelection', 2);
			settingsMap.put('#lift', true);
			settingsMap.put('#scenic', false);
			// settingsMap.put('#snowmobiles', false);
			// settingsMap.put('#events', false);
			settingsMap.put('#adultCB', true);
			settingsMap.put('#seniorCB', true);
			settingsMap.put('#youthCB', true);
			settingsMap.put('#childCB', true); 
			settingsMap.put('#compareCB', true);
			break;
		case 'JMTICKETS':
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#daysSelection', 2);
			settingsMap.put('#lift', true);
			settingsMap.put('#adultCB', true);
			settingsMap.put('#seniorCB', true);
			settingsMap.put('#youthCB', true);
			settingsMap.put('#childCB', true);
			settingsMap.put('#youngAdultCB', true);
			settingsMap.put('#compareCB', true);
			break;
		case 'FRIEND':
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#daysSelection', 1);
			settingsMap.put('#lift', true);
			settingsMap.put('#adultCB', true);
			settingsMap.put('#seniorCB', true);
			settingsMap.put('#youthCB', true);
			settingsMap.put('#childCB', true);
			break;
		case 'RENTALS':
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#daysSelection', 1);
			settingsMap.put('#adultCB', true);
			settingsMap.put('#childCB', true);
			settingsMap.put('#seniorCB', true);
			settingsMap.put('#standardCB', true);
			settingsMap.put('#sportCB', true);
			settingsMap.put('#demoCB', true);
			settingsMap.put('#mainRental', true);
			settingsMap.put('#woollywoodRental', false);
			settingsMap.put('#mmiRental', false);
			settingsMap.put('#canyonRental', false);
			settingsMap.put('#canyonkidsRental', false);
			settingsMap.put('#eagleRental', false);
			settingsMap.put('#jsrRental', false);
			settingsMap.put('#mountaincenterRental', false);
			settingsMap.put('#skiingRentalFilter', true);
			settingsMap.put('#sbRentalFilter', true);
			settingsMap.put('#alacarteCB', true);
			settingsMap.put('#packageCB', true);
			break;
		case 'DEAL':
		case 'PACKAGE':
			settingsMap.put('#daysSelection', 1);
			settingsMap.put('#startDate',  filterSettings.defaultDate.getMonth() + 1 + '/' + filterSettings.defaultDate.getDate() + '/' + filterSettings.defaultDate.getFullYear());
			settingsMap.put('#adultSelection', 1);
			settingsMap.put('#youthSelection', 0);
			settingsMap.put('#childrenSelection', 0);
			settingsMap.put('#freeChildrenSelection', 0);
			settingsMap.put('#seniorSelection', 0);
			settingsMap.put('#freeSeniorSelection', 0);
			settingsMap.put('#MMIlodgingFilter',true);
			settingsMap.put('#JSLlodgingFilter',true);
			settingsMap.put('#TAMlodgingFilter',true);
			settingsMap.put('#VILlodgingFilter', true);
			settingsMap.put('#hotellodgingFilter',true);
			settingsMap.put('#b1lodgingFilter', true);
			settingsMap.put('#suitelodgingFilter', true);
			settingsMap.put('#b2lodgingFilter', true);
			settingsMap.put('#studiolodgingFilter', true);
			settingsMap.put('#b3lodgingFilter', true);
			settingsMap.put('#cabinlodgingFilter', true);
			break;
		default:
			settingsMap = null;
			break;
	}
	return settingsMap;
};


// @param filter The filter settings to store (global, lodging, packages, tickets, lessons, or rentals).
// @param settingsMap object to store.
filterSettings.setSettings = function (filter, settingsMap){
	var storeObj = {};
	storeObj.values = [];
	var keys = settingsMap.keySet();
	var debugStr = 'filterSettings setSettings() filter:' + filter+ ' [';
	for(var i = 0, len = keys.length; i < len; i++){
		if(i != 0){
			debugStr += ',';
		}
		debugStr += ' key:' + keys[i] + ' value:' + settingsMap.get(keys[i]);
		storeObj.values.push(settingsMap.get(keys[i]));
	}
	debugStr += ']';
//alert(debugStr);
	$.cookie(filter.toUpperCase(), $.toJSON(storeObj), {path: '/'});
	
//	jquery.ecommwidget.js rev. 920 changes prevent this functionality, now handled in ecomm entrance ticket
//	if(filter.toUpperCase() === 'ENTRANCE'){
//		$.cookie('globalStartDate', settingsMap.get('#startDate'), {path: '/'});
//		$.cookie('globalDaysSelection', settingsMap.get('#daysSelection'), {path: '/'});
//	}
	
};


// @param filter The filter settings to retrieve (global, lodging, packages, tickets, lessons, or rentals).
// @returns the stored settings or default settings hashmap
filterSettings.getSettings = function (filter){
	var encodedSettingsObj = $.cookie(filter.toUpperCase());
	var settingsMap = null;
	// saved settings
	if(encodedSettingsObj != null){
		var settingsObj = $.evalJSON(encodedSettingsObj);
		// convert settingsObj into settings hashmap and return
		settingsMap = this.getDefaultSettings(filter);
		var keys = settingsMap.keySet();
		var debugStr = 'filterSettings getSettings() filter:'+ filter +' [';
		for(var i = 0, len = keys.length; i < len; i++){
			if(i != 0){
				debugStr += ',';
			}
			debugStr += ' key:' + keys[i] + ' value:' +  settingsObj.values[i];
			settingsMap.put(keys[i], settingsObj.values[i]);
		}
		debugStr += ']';
//alert(debugStr);
	} else{
		settingsMap = filterSettings.initDefaultSettingsMap(filter);
	}
	return settingsMap;
};


// @param filter The filter settings to initialize
filterSettings.initDefaultSettingsMap = function(filter){
	// First time the widget is being visited, manipulate defaultsettings i.a.
	var settingsMap = this.getDefaultSettings(filter);
// todo: jquery.ecommwidget.js rev. 920 changes prevent this functionality, now handled other places?
//	// 1) Set filter startDate to Global startDate and days i.a. and save updated settings
//	var gStartDate = $.cookie('globalStartDate'), 
//		gDays = $.cookie('globalDaysSelection');
//	if(gStartDate !== null && gDays !== null){
//		var gSD = new Date(gStartDate);
//		if(gSD.getTime() !== filterSettings.defaultDate.getTime() || gDays !== settingsMap.get('#daysSelection')){
//			var newGStartDate = new Date(gStartDate);
//			settingsMap.put('#startDate', newGStartDate.getMonth() + 1 + '/' + newGStartDate.getDate() + '/' + newGStartDate.getFullYear());
//			if(filter.search(/(lodging|deal|package)/i) > -1 && gDays > 1){
//				gDays -= 1; // i.e. nights not days
//			}
//			settingsMap.put('#daysSelection', gDays);
//		}
//		filterSettings.setSettings(filter, settingsMap);
//	}
	// 2) when start date is today/friday manipulate dates so lodging/deals may be 
	// available same day and everything else next day.
	var startDate = new Date(settingsMap.get('#startDate'));
	if(startDate.getTime() === currDate.getTime() && filter.search(/(lodging|deal|package)/i) === -1){
		startDate.setDate(startDate.getDate() + 1);
		settingsMap.put('#startDate', startDate.getMonth() + 1 + '/' + startDate.getDate() + '/' + startDate.getFullYear());
		filterSettings.setSettings(filter, settingsMap);
	}
	return settingsMap;
};

