WS.ConsultationTool = Class.create({
	initialize: function(gender) {
		this.gender = gender;

		if (gender == "male") {
			this.isMale = true;
			this.isFemale = false;
		} else {
			this.isMale = false;
			this.isFemale = true;
		}
	},
	begin: function(linkElement) {
		this.next(linkElement, true);
	},
	next: function(linkElement, skipCheck) {
		var screenElement = this.getScreenElement(linkElement);

		if (skipCheck || this.checkForAnswers(screenElement)) {
			var nextScreenElement = this.getNextScreen(screenElement);
			this.switchVisibility(screenElement, nextScreenElement);
		}
	},
	checkForAnswers: function(screenElement) {
		var inputElements = screenElement.select("input");

		var selection = false;

		for(var counter = 0; counter < inputElements.length; counter++) {
			if (inputElements[counter].checked) {
				selection = true;
				break;
			}
		}

		if (!selection) {
			alert("Please select one of the available options.");
		}

		return selection;
	},
	getInputElements: function(containerElement) {
		return containerElement.select("input");
	},
	switchVisibility: function(screenToHide, screenToShow) {
		screenToShow.style.display = "block";
		screenToHide.style.display = "none";
	},
	getScreenElement: function(linkElement) {
		return $(linkElement).up("div.screen");
	},
	getConsultationToolElement: function(containedElement) {
		return $(containedElement).up("div.consultation_tool");
	},
	prepareResults: function(inputElements) {
		var results = new Hash();

		var inputElement = null;

		for(var counter = 0; counter < inputElements.length; counter++) {
			inputElement = inputElements[counter];
			if (inputElement.checked) {
				results.set(inputElement.name, inputElement.value);
			}
		}

		return results;
	},
	getNextScreen: function(screenElement) {
		var consultationToolElement = this.getConsultationToolElement(screenElement);
		var inputElements = this.getInputElements(consultationToolElement);
		var results = this.prepareResults(inputElements);

		if(this.isMale) {
			return this.getNextMaleScreen(screenElement, results);
		}
		if(this.isFemale) {
			return this.getNextFemaleScreen(screenElement, results);
		}
	},
	getNextMaleScreen: function(screenElement, results) {
		if (screenElement.hasClassName("screen_category")) {
			if(results.get("category") == "disposable") {
				return screenElement.next("div.screen_criteria");
			} else {
				return screenElement.next("div.screen_trimmer");
			}
		} else if (screenElement.hasClassName("screen_trimmer")) {
			if(results.get("trimmer") == "yes") {
				this.trackCompletion("men", false, "Quattro Titanium Precision");
				return screenElement.next("div.screen_system_precision");
			} else {
				this.trackCompletion("men", false, "Quattro Titanium");
				return screenElement.next("div.screen_system_quattro");
			}
		} else if (screenElement.hasClassName("screen_criteria")) {
			if(results.get("criteria") == "price") {
				this.trackCompletion("men", true, "Xtreme 3");
				return screenElement.next("div.screen_disposable_xtreme");
			} else {
				this.trackCompletion("men", true, "Quattro Titanium");
				return screenElement.next("div.screen_disposable_quattro");
			}
		} else {
			return screenElement.next("div.screen");
		}
	},
	getNextFemaleScreen: function(screenElement, results) {
		if (screenElement.hasClassName("screen_category")) {
			if(results.get("category") == "disposable") {
				return screenElement.next("div.screen_criteria");
			} else {
				return screenElement.next("div.screen_type");
			}
		} else if (screenElement.hasClassName("screen_type")) {
			if(results.get("type") == "all-in-one") {
				this.trackCompletion("women", false, "Intuition Natural Care");
				return screenElement.next("div.screen_intuition");
			} else if(results.get("type") == "build-in-strip") {
				this.trackCompletion("women", false, "Quattro for Women");
				return screenElement.next("div.screen_quattro_women");
			} else if(results.get("type") == "reasonbly-price-quality"){
				this.trackCompletion("women", false, "Lady Protector");
				return screenElement.next("div.screen_lady_protector");
			}
		} else if (screenElement.hasClassName("screen_criteria")) {
			if(results.get("criteria") == "price") {
				this.trackCompletion("women", true, "Xtreme 3 Beauty");
				return screenElement.next("div.screen_extreme_3_beauty");
			} else {
				this.trackCompletion("women", true, "Quattro for Women");
				return screenElement.next("div.screen_disposable_quattro_women");
			}
		} else {
			return screenElement.next("div.screen");
		}
	},
	trackCompletion: function(gender, disposable, product) {
		if (typeof s_gi == "undefined") {
			return;
		}

		var type = "System";

		if (disposable) {
			type = "Disposable";
		}

		var s = s_gi(s_account);
		s.linkTrackVars = "prop2";
		s.linkTrackEvents = "none";
		s.prop2 = "UK : Consultation : " + gender + " : " + type + " : " + product;
		s.tl(true, "o", "Consultation");
	}
});
