/**
 * Boston Ballet
 * 
 * Subscriptions area javascript class.
 * 
 * @author chicks
 */
BBSUBS = { 
	packageChosen : '',
	numBallets : 0,
	balletsChosen : [],
	subDate : '',
	subWeek : '',
	subsPool : [],
	subscriptions: [],
	availableBallets: [],
	baseUrl: '/storefront'
};

/*
 * Init - Set up all the event handlers..
 */
BBSUBS.init = function () {
	$j('#section-subs .options-layout .choose-package input[name="package"]').click(function () {
		BBSUBS.packageChosen = $j(this).val();
		BBSUBS.handlePackageSelection();
	});
	
	$j('#section-subs .options-layout .choose-number input[name="number"]').click(function () {
		//alert("num ballets chosen:  " + $j(this).val());
		BBSUBS.numBallets = $j(this).val();
		BBSUBS.handleBalletNumberSelection();
	});
	
	$j('#choose-your-section-button').click(function () {
		$j('#chosenBallets').val(BBSUBS.getSelectedBallets());
		//console.log("setting #chosenBallets to " + BBSUBS.getSelectedBallets());
		$j('#chosenProduct').val(BBSUBS.getSelectedProduct());
		//console.log("setting #chosenProduct to " + BBSUBS.getSelectedProduct())
		
		BBSUBS.Validation.validate();
	});
	
	$j('.information-bubble-button').click(function () {
		var modal = $j($j(this).attr('name'));
		var css = {
			"position": "absolute",
			"top": $j(this).offset().top + $j(this).height(),
			"left": $j(this).offset().left - modal.width(),
			"z-index": "2"
		};
		modal.css(css);
		modal.fadeIn();
	});
	
	$j('.modal-note .modal-close-button').click(function () {
		$j(this).parents('.modal-note').fadeOut();
	});
	
	$j('#selectWeek').change(function() {
		BBSUBS.setPoolBySeries($j(this).val());
	});
	
};


/*
 * Validation - The validation for the form
 */
BBSUBS.Validation = {};

BBSUBS.Validation.validate = function () {
	var form = $j('#sub-options-form');
	var foundErrors = false;
	$j('.error-text').remove();
	
	if (!BBSUBS.Validation.validatePackageSelection()) {
		foundErrors = true;
		BBSUBS.showError($j('#section-subs .options-layout .choose-package'), "Please select a package.");
	}
	
	if (BBSUBS.packageChosen === "Premium Seating" || BBSUBS.packageChosen === "Flex Pass") {
		//alert("inside flex pass");
		if (!BBSUBS.Validation.validateBalletNumber()) {
			foundErrors = true;
			BBSUBS.showError($j('#section-subs .options-layout .choose-number'), "Please select the number of ballets you want.");
		}
	}
	
//	if (parseInt(BBSUBS.numBallets) < 5
//			&& (BBSUBS.packageChosen === "Premium Seating" || BBSUBS.packageChosen === "Flex Pass")) {
//		if (!BBSUBS.Validation.validateBalletSelection()) {
//			foundErrors = true;
//			BBSUBS.showError($j('#section-subs .options-layout .choose-ballet'), "Please select the ballets you want to attend.");
//		}
//	}
	
	if (!BBSUBS.Validation.validateSeriesSelection()
			&& BBSUBS.packageChosen === "Premium Seating") {
		foundErrors = true;
		BBSUBS.showError($j('#section-subs .options-layout .choose-series'), "Please date and week you would like to addend the ballet.");
	}
	
	var balletsChosen = $j('#section-subs .options-layout .choose-ballet input[type="checkbox"]:checked');
	var select = $j('#selectWeek');
	
	if(balletsChosen.length != BBSUBS.numBallets) {
		foundErrors = true;
		BBSUBS.showError($j('#section-subs .options-layout .choose-ballet'), "Please select "+ BBSUBS.numBallets +" ballets for this type of subscription.");
	}
	if(BBSUBS.subsPool != null){
		//alert("subs pool length:  " + BBSUBS.subsPool.length)
		//alert("subs pool content: " + BBSUBS.subsPool[0].productUrl);
	}
	
	if(BBSUBS.Validation.validateSeriesSelection() && BBSUBS.subsPool.length != 1) {
		foundErrors = true;
		BBSUBS.showError($j('#section-subs .options-layout .choose-series'), "We encountered an error while determining the subscription that is right for you. Please contact an administrator or call the Box Office.");
	}
	
	
	
	if (!foundErrors) {
		//form.submit();
		window.location = BBSUBS.baseUrl + "/" + BBSUBS.subsPool[0].productUrl;
	}
};

BBSUBS.Validation.validatePackageSelection = function () {	
	return ($j('#section-subs .options-layout .choose-package input:checked').length > 0);
};

BBSUBS.Validation.validateBalletNumber = function () {
	//alert("inside validateBalletNumber: checked length:  " + $j('#section-subs .options-layout .choose-number input:checked').length);
	return ($j('#section-subs .options-layout .choose-number input:checked').length > 0);
};

BBSUBS.Validation.validateBalletSelection = function () {
	return ($j('#section-subs .options-layout .choose-ballet input:checked').length > 0);
};

BBSUBS.Validation.validateSeriesSelection = function () {
	var noError = true;
	//console.log("Package Chosen: " + BBSUBS.packageChosen);
	if(BBSUBS.packageChosen === "Premium Seating" || BBSUBS.packageChosen === "Flex Pass") {
		//console.log("series selection: '"+ $j('#selectWeek').val() +"'");
		//console.log($j('#selectWeek').val() === "")
		if($j('#selectWeek').val() === "") {
			noError = false;
		}
	}
	
	return noError; 
};

BBSUBS.handlePackageSelection = function () {
	$j('#section-subs .options-layout .sub-option').hide();
	BBSUBS.resetBelletNumberSelection();
	BBSUBS.resetBelletSelection();
	
	if (BBSUBS.packageChosen === "Premium Seating" || BBSUBS.packageChosen === "Flex Pass") {
		//alert("inside flex 2");
		$j('#section-subs .options-layout .choose-number').show("slow", function () {
			if (BBSUBS.packageChosen === "Premium Seating") {
				$j('#section-subs .options-layout .choose-series').show("slow");
			}
		});
	}

	BBSUBS.setPoolByPackage(BBSUBS.packageChosen);

};

/*
 * Page animations & controls
 */
BBSUBS.handleBalletNumberSelection = function () {
	
	BBSUBS.resetBelletSelection();
	BBSUBS.populateBalletSelection();
	
	if(parseInt(BBSUBS.numBallets) === 5 && BBSUBS.availableBallets.length == 5) {
		$j('#section-subs .options-layout .choose-ballet input[type="checkbox"]').each(function() {
			$j(this).attr({
				checked: 'checked',
				disabled: 'disabled'
			});
		});
	}
	$j('#section-subs .options-layout .choose-ballet').show("slow");
	
	BBSUBS.setPoolByChooseFactor(parseInt(BBSUBS.numBallets));
	BBSUBS.generateSeriesOptions();
};

BBSUBS.populateBalletSelection = function() {
	var availableDiv = $j('#section-subs .options-layout .choose-ballet .availableBallets');
	availableDiv.html('');
	availableDiv.append('<div class="clear"></div>');
	for(var i = 0; i < BBSUBS.availableBallets.length; i++) {
		var ballet = BBSUBS.availableBallets[i];
		
		var div = $j('<div class="ballet">' +
				'<input type="checkbox" name="chosenBallet" value="'+ ballet.code +'"/>' +
				'<strong>'+ ballet.displayName +'</strong> <br/>' +
				'</div>');
		
		availableDiv.append(div);
	}
	availableDiv.append('<div class="clear"></div>');
}

BBSUBS.resetBelletNumberSelection = function () {
	$j('#section-subs .options-layout .choose-number input').removeAttr('checked');
};

BBSUBS.resetBelletSelection = function () {
	$j('#section-subs .options-layout .choose-ballet input').removeAttr('checked');
};

BBSUBS.showError = function (jqElem, message) {
	if (jqElem.is('ul')) {
		jqElem.find('.header').after('<li class="error-text">' + message + '</li>');
	} else {
		jqElem.prepend('<div class="error-text">' + message + '</div>');
	}
};

BBSUBS.setPoolByPackage = function(packageName) {
	BBSUBS.subsPool = [];
	for(var i = 0; i < BBSUBS.subscriptions.length; i++) {
		if(BBSUBS.subscriptions[i].type === packageName) {
			BBSUBS.subsPool.push(BBSUBS.subscriptions[i]);
		}
	}
}

BBSUBS.setPoolByChooseFactor = function(factor) {
	BBSUBS.subsPool = [];
	BBSUBS.setPoolByPackage(BBSUBS.packageChosen);
	var newPool = [];
	
	for(var i = 0; i < BBSUBS.subsPool.length; i++) {
		var sub = BBSUBS.subsPool[i];
		
		if(factor === sub.chooseFactor) {
			newPool.push(sub);
		}
	}
	
	BBSUBS.subsPool = newPool;
}

BBSUBS.setPoolBySeries = function(series) {
	BBSUBS.subsPool = [];
	
	//alert("BBSUBS.numballets: " + parseInt(BBSUBS.numBallets));
	BBSUBS.setPoolByPackage(BBSUBS.packageChosen);
	BBSUBS.setPoolByChooseFactor(parseInt(BBSUBS.numBallets));
	var newPool = [];
	
	for(var i = 0; i < BBSUBS.subsPool.length; i++) {
		var sub = BBSUBS.subsPool[i];
		//console.log("checking '"+ series +"' against '"+ sub.series +"'");
		if(series === sub.series) {
			newPool.push(sub);
		}
	}
	
	BBSUBS.subsPool = newPool;
	
	
}

BBSUBS.generateSeriesOptions = function() {
	var series = new Array();
	
	LOG("Clearing series list");
	
	for(var i = 0; i < BBSUBS.subsPool.length; i++) {
		var sub = BBSUBS.subsPool[i];
		
		if(sub.series.length > 0 && !series.contains(sub.series)) {
			series.push(sub.series);
			//console.log("adding new series to list: " + sub.series);
			LOG("adding new series to list: " + sub.series);
		}
	}
	
	var select = $j('#selectWeek');
	select.html('<option value="">Select a week</option>');
	
	for(var i = 0; i < series.length; i++) {
		select.append('<option value="'+ series[i] +'">'+ series[i] +'</option>')
	}
}

BBSUBS.getSelectedBallets = function() {
	var ballets = $j('#section-subs .options-layout .choose-ballet input[type="checkbox"]:checked');
	var sBallets = '';
	
	ballets.each(function() {
		sBallets += $j(this).val() + ",";
	});
	//console.log("sBallets (1): " + sBallets);
	sBallets = sBallets.substr(0, sBallets.lastIndexOf(','));
	//console.log("sBallets (2): " + sBallets);
	return sBallets;
}

BBSUBS.getNumberBalletsSelected = function() {
	return $j('#section-subs .options-layout .choose-ballet input[type="checkbox"]:checked').length;
}

BBSUBS.getSelectedProduct = function() {
	if(BBSUBS.packageChosen === "Ballet Pass" && BBSUBS.subsPool.length == 1) {
		return BBSUBS.subsPool[0].productCode;
	}
	
	if(BBSUBS.availableBallets.length == BBSUBS.getNumberBalletsSelected() && BBSUBS.subsPool.length == 1) {
		return BBSUBS.subsPool[0].productCode;
	} else {
		BBSUBS.setPoolByBalletSelection();
		if(BBSUBS.subsPool.length == 1) {
			return BBSUBS.subsPool[0].productCode;
		}
	}
	
	
}

BBSUBS.setPoolByBalletSelection = function() {
	BBSUBS.subsPool = [];
	BBSUBS.setPoolByPackage(BBSUBS.packageChosen);
	BBSUBS.setPoolByChooseFactor(parseInt(BBSUBS.numBallets));
	BBSUBS.setPoolBySeries($j('#selectWeek').val());
	
	var ballets_ary = BBSUBS.getSelectedBallets().split(",");
	var matches;
	var subs = new Array();
	
	for(var subIndex = 0; subIndex < BBSUBS.subsPool.length; subIndex++) {
		matches = 0;
		var sub = BBSUBS.subsPool[subIndex];
		//console.log("checking sub: " + sub.type);
		for(var balletsIndex = 0; balletsIndex < sub.ballets.length; balletsIndex++) {
			var ballet = sub.ballets[balletsIndex];
			//console.log("checking sub ballet: " + ballet);
			if(ballets_ary.contains(BBSUBS.getBalletCode(ballet))) {
				matches += 1;
			}
		}
		
		if(ballets_ary.length === matches) {
			subs.push(sub);
		}
	}
	
	BBSUBS.subsPool = subs;
}

BBSUBS.getBalletCode = function(balletName) {
	for(var i = 0; i < BBSUBS.availableBallets.length; i++) {
		var ballet = BBSUBS.availableBallets[i];
		if(ballet.displayName === balletName) {
			return ballet.code;
		}
	}
}

