var signIn = {};

currentDomain = document.domain.toLowerCase();
/* If changes to actions or copy need to be updated, please do so in the objects below: */
var ERROR_COPY = {
	PASSWORD: "Please enter your Password.",
	USERNAME: "Please enter your User Name.",
	MULTIPLE: "We're Sorry. The Username and Password is currently logged in.",
	SESSION: "Your session was timed out."
};


if(currentDomain=="localhost" || currentDomain=="devaix12.scholastic.net" || currentDomain=="devwas05.scholastic.net") {

	var TCOOL = { 
		class_name: "tcool",
		forgotten_password_link_href: "https://my.scholastic.com/sps_my_account/pwmgmt/ForgotPassword.jsp?AppType=COOL&finalSuccessURL=https://clubs.scholastic.com/",
		form: {
				action: "http://devaix12.scholastic.net/cool/SPSLoginServlet",
				successURL: "LoginOptOutServlet",
				failureURL: "sign_in.jsp",
				cancelURL: "",
				appid: "",
				AppType: "",
				finalSuccessURL: "",
				redirectURL: "",
				JUST_LOGGED_IN: "JUST_LOGGED_IN",
				username_field: "LOGIN_ID_KEY",
				password_field: "PASSWORD_KEY"
			},
		link_copy: "Sign In as a Teacher"
	};
	var PCOOL = {
		class_name: "pcool",
		forgotten_password_link_href: "http://pcool.scholastic.com/parentordering/reminder.jsp",
		form: {
			action: "http://devaix12.scholastic.net/parentordering/servlet/ParentLogin",
			successURL: "login.jsp",
			failureURL: "sign_in.jsp",
			cancelURL: "http://devaix12.scholastic.net/parentordering/sign_in.jsp",
			appid: "",
			AppType: "",
			finalSuccessURL: "http://devwas06.scholastic.net/clubparents",
			redirectURL: "",
			username_field: "web_classroomId",
			password_field: "web_password"
		},
		link_copy: "Sign In as a Parent"
	};
	/* TCOOL + Track Orders = OOS */
	var OOS = {
		class_name: TCOOL.class_name,
		forgotten_password_link_href: TCOOL.forgotten_password_link_href,
		form: {
			action: "http://devwas05.scholastic.net/OOSWeb/LoginServlet",
			successURL: "/login.oos",
			failureURL: "/sign_in.jsp",
			cancelURL: "",
			appid: "",
			AppType: "",
			finalSuccessURL: "",
			redirectURL: "",
			JUST_LOGGED_IN: "JUST_LOGGED_IN",
			username_field: "LOGIN_ID_KEY",
			password_field: "PASSWORD_KEY"
		},
		link_copy: TCOOL.link_copy
	};
	
	/* TEMP OOS FIX */
	$("input:radio[id=track-order]").click(function() { 
	  location.href = "http://devwas05.scholastic.net/OOSWeb/sign_in.jsp";
	});


} else if(currentDomain=="cooltestwas.scholastic.com" || currentDomain=="scewriaps18.scholastic.net" || currentDomain=="stg-oos.scholastic.com") {

	var TCOOL = { 
		class_name: "tcool",
		forgotten_password_link_href: "https://my.scholastic.com/sps_my_account/pwmgmt/ForgotPassword.jsp?AppType=COOL&finalSuccessURL=https://clubs.scholastic.com/",
		form: {
				action: "http://cooltestwas.scholastic.com/cool/SPSLoginServlet",
				successURL: "LoginOptOutServlet",
				failureURL: "sign_in.jsp",
				cancelURL: "",
				appid: "",
				AppType: "",
				finalSuccessURL: "",
				redirectURL: "",
				JUST_LOGGED_IN: "JUST_LOGGED_IN",
				username_field: "LOGIN_ID_KEY",
				password_field: "PASSWORD_KEY"
			},
		link_copy: "Sign In as a Teacher"
	};
	var PCOOL = {
		class_name: "pcool",
		forgotten_password_link_href: "http://pcool.scholastic.com/parentordering/reminder.jsp",
		form: {
			action: "http://cooltestwas.scholastic.com/parentordering/servlet/ParentLogin",
			successURL: "login.jsp",
			failureURL: "sign_in.jsp",
			cancelURL: "http://cooltestwas.scholastic.com.scholastic.net/parentordering/sign_in.jsp",
			appid: "",
			AppType: "",
			finalSuccessURL: "/webapp/wcs/stores/servlet/StoreView?storeId=10601&amp;catalogId=10001",
			redirectURL: "",
			username_field: "web_classroomId",
			password_field: "web_password"
		},
		link_copy: "Sign In as a Parent"
	};
	/* TCOOL + Track Orders = OOS */
	var OOS = {
		class_name: TCOOL.class_name,
		forgotten_password_link_href: TCOOL.forgotten_password_link_href,
		form: {
			action: "http://stg-oos.scholastic.com/OOSWeb/LoginServlet",
			successURL: "/login.oos",
			failureURL: "/sign_in.jsp",
			cancelURL: "",
			appid: "",
			AppType: "",
			finalSuccessURL: "",
			redirectURL: "",
			JUST_LOGGED_IN: "JUST_LOGGED_IN",
			username_field: "LOGIN_ID_KEY",
			password_field: "PASSWORD_KEY"
		},
		link_copy: TCOOL.link_copy
	};
	
	 /* TEMP OOS FIX */
	$("input:radio[id=track-order]").click(function() { 
	  location.href = "http://stg-oos.scholastic.com/OOSWeb/sign_in.jsp";
	});

} else if(currentDomain=="clubs.scholastic.com" || currentDomain=="prod-oos.scholastic.com") {

	var TCOOL = { 
		class_name: "tcool",
		forgotten_password_link_href: "https://my.scholastic.com/sps_my_account/pwmgmt/ForgotPassword.jsp?AppType=COOL&finalSuccessURL=https://clubs.scholastic.com/",
		form: {
				action: "https://clubs.scholastic.com/cool/SPSLoginServlet",
				successURL: "LoginOptOutServlet",
				failureURL: "sign_in.jsp",
				cancelURL: "",
				appid: "",
				AppType: "",
				finalSuccessURL: "",
				redirectURL: "",
				JUST_LOGGED_IN: "JUST_LOGGED_IN",
				username_field: "LOGIN_ID_KEY",
				password_field: "PASSWORD_KEY"
			},
		link_copy: "Sign In as a Teacher"
	};
	var PCOOL = {
		class_name: "pcool",
		forgotten_password_link_href: "http://pcool.scholastic.com/parentordering/reminder.jsp",
		form: {
			action: "https://clubs.scholastic.com/parentordering/servlet/ParentLogin",
			successURL: "login.jsp",
			failureURL: "sign_in.jsp",
			cancelURL: "http://clubs.scholastic.com/parentordering/sign_in.jsp",
			appid: "",
			AppType: "",
			finalSuccessURL: "/webapp/wcs/stores/servlet/StoreView?storeId=10601&amp;catalogId=10001",
			redirectURL: "",
			username_field: "web_classroomId",
			password_field: "web_password"
		},
		link_copy: "Sign In as a Parent"
	};
	/* TCOOL + Track Orders = OOS */
	var OOS = {
		class_name: TCOOL.class_name,
		forgotten_password_link_href: TCOOL.forgotten_password_link_href,
		form: {
			action: "https://prod-oos.scholastic.com/OOSWeb/LoginServlet",
			successURL: "/login.oos",
			failureURL: "/sign_in.jsp",
			cancelURL: "",
			appid: "",
			AppType: "",
			finalSuccessURL: "",
			redirectURL: "",
			JUST_LOGGED_IN: "JUST_LOGGED_IN",
			username_field: "LOGIN_ID_KEY",
			password_field: "PASSWORD_KEY"
		},
		link_copy: TCOOL.link_copy
	};
	
	 /* TEMP OOS FIX */
	$("input:radio[id=track-order]").click(function() { 
	  location.href = "http://prod-oos.scholastic.com/OOSWeb/sign_in.jsp";
	});

}

(function(){
	
	
	function validateForm(/*Object*/obj) {
		var form = obj.form;
		var username = $('form input[type="text"]')[0];
		var password = $('form input[type="password"]')[0];
		var formName = form.name;
		var error = {};
		if (typeof username.value === "undefined" || username.value == ""){
			error.copy = ERROR_COPY.USERNAME;
			error.field = username;
		}
		else if (typeof password.value === "undefined" || password.value == ""){
			error.copy = ERROR_COPY.PASSWORD;
			error.field = password;
		}
		
		if (!$.isEmptyObject(error)) {
			updateError(error);
			return false;
		}
		
		form.submit();
	}
	function updateError(/*Object*/error) {
		removeAllInputErrors();
		updateErrorDisplay(error);
		highlightErrorField(error);
	}
	function updateErrorDisplay(/*Object*/error){
		$(signIn.config.errorMessagingContainer).html(error.copy).show();
		$("#" + signIn.config.moduleId).addClass("error");
	}
	function removeErrorDisplay(){
		$(signIn.config.errorMessagingContainer).hide();
	}
	function removeAllInputErrors(){
		$(signIn.config.errorElementTag).removeClass(signIn.config.errorClassName);
	}
	function highlightErrorField(/*Object*/error){
		$(error.field).parent().addClass(signIn.config.errorClassName);
	}
	function enableOOSLogIn() {
		var module = {
			club: "OOS"
		};
		updateLogIn(module);
		updateForgottenPasswordLink(OOS.forgotten_password_link_href);
		resetForm();
	}
	function resetForm(){
		removeAllInputErrors();
		removeErrorDisplay();
		clearFields();
	}
	function clearFields(){
		$('form input[type="text"]').each(function(){
			$(this).val('');
		});
		$('form input[type="password"]').each(function(){
			$(this).val('');
		});
	}
	function enableTCOOLLogIn() {
		updateForm(TCOOL);
		updateForgottenPasswordLink(TCOOL.forgotten_password_link_href);
		resetForm();
	}
	function enableAlternateLogIn(/*Object*/signInAsLink){
		var module = {
			club: signInAsLink.getAttribute("club"),
			id: signIn.config.moduleId,
			link: signInAsLink
		};
		resetForm();
		updateLogIn(module);
		
		return false;
	}
	function initializeLogIn(/*Object*/module) {
		var currentClub = module.club;
		var link = module.link;
		
		module.from_class_name = "all";
		
		switch(currentClub) {
			case PCOOL.class_name:
				if (link) {
					link.setAttribute("club", TCOOL.class_name);
				} 
				module.to_class_name = TCOOL.class_name;
				module.link_copy = TCOOL.link_copy;
				
				updateFormDisplay(module);
				updateForm(PCOOL);
				updateForgottenPasswordLink(PCOOL.forgotten_password_link_href);
				setCookieValue("cool_s", "p", 180);
				break;
			case TCOOL.class_name:
				if (link) {
					link.setAttribute("club", PCOOL.class_name);
				}
				module.to_class_name = PCOOL.class_name;
				module.link_copy = PCOOL.link_copy;
				
				updateFormDisplay(module);
				updateForm(TCOOL);
				updateForgottenPasswordLink(TCOOL.forgotten_password_link_href);
				
				enableDefaultFields();
				setCookieValue("cool_s", "t", 180);
				break;
			case "OOS": /* Hardcoding for this specific case */
				updateForm(OOS);
			default:
				break;
		};
	}
	function updateLogIn(/*Object*/module) {
		var currentClub = module.club;
		var link = module.link;
		
		switch(currentClub) {
			case PCOOL.class_name:
				if (link) {
					link.setAttribute("club", TCOOL.class_name);
				}
				module.from_class_name = TCOOL.class_name;
				module.to_class_name = PCOOL.class_name;
				module.link_copy = TCOOL.link_copy;
				updateFormDisplay(module);
				updateForm(PCOOL);
				updateForgottenPasswordLink(TCOOL.forgotten_password_link_href);
				setCookieValue("cool_s", "p", 180);
				break;
			case TCOOL.class_name:
				if (link) {
					link.setAttribute("club", PCOOL.class_name);
				}
				module.from_class_name = PCOOL.class_name;
				module.to_class_name = TCOOL.class_name;
				module.link_copy = PCOOL.link_copy; 
				updateFormDisplay(module);
				updateForm(TCOOL);
				updateForgottenPasswordLink(PCOOL.forgotten_password_link_href);
				
				if (module.club === TCOOL.class_name) {
					enableDefaultFields();
				}
				setCookieValue("cool_s", "t", 180);
				break;
			case "OOS": /* Hardcoding for this specific case */
				updateForm(OOS);
			default:
				break;
		};
	}
	function setCookieValue(/*String*/name, /*String*/value, /*Int*/expiration) {
		var expires = (expiration > 0 ? expiration : 1); /*Set the default to one day*/
		$.cookie(name, value,{ expires: expires });
	} 
	function updateForm(/*Object*/target){
		var form = document.getElementsByName(signIn.config.formName)[0];
		updateFormAction(form, target.form);
		updateInputFields(form, target.form);
	}
	function enableDefaultFields(){
		document.getElementById("place-order").checked = "checked";
	}
	function updateFormAction(/*Object*/form, /*Object*/target_form){
		form.action = target_form.action;
	}
	function updateInputFields(/*Object*/form, /*Object*/target_form){
		$(form).find('input').each(function(){
			var el = $(this)[0];
			attribute_name = el.name;
			if (target_form[attribute_name]) {
				el.value = target_form[attribute_name];
			} else if (el.type === "text") {
				el.name = target_form.username_field;
			} else if (el.type === "password") {
				el.name = target_form.password_field;
			} 
		});
	}
	function updateForgottenPasswordLink(/*String*/href){
		var link = document.getElementById(signIn.config.forgottenLinkId);
		link.href = href;
	}
	function updateFormDisplay(/*Object*/module) {
		$("#" + module.id).removeClass(module.from_class_name).addClass(module.to_class_name);
		$(module.link).html(module.link_copy);
		enableTCOOLFields(module.club);
	}
	function enableTCOOLFields(/*String*/current_club) {
		if (current_club == TCOOL.class_name) {
			$("fieldset.tcool-specific").show();
		} else {
			$("fieldset.tcool-specific").hide();
		}
	}
	function appendLoadingScreen(/*Object*/element) {
		var el = element;
		
		var width = el.width();
	    var height = el.height();
	    el.append('<div id="triggerLoading"><div class="ajaxLoading"></div></div>');
	    $("#triggerLoading").css({'width':width, 'height':height}).show();
	};
	function displayLogin(/*String*/club) {
		hideRoutingForm();
		displayForm(club);
		removeErrorDisplay();
	}
	function hideRoutingForm() {
		$("dt.route").hide();
		$("dt.route + dd").hide();
		$("dt.route + dd + dd").hide();
		$("#" + signIn.config.moduleId).removeClass("all");
	}
	function showRoutingForm() {
		$("dt.route").show();
		$("dt.route + dd").show();
		$("dt.route + dd + dd").show();
	}
	function displayForm(/*String*/club) {
		var module = {
			club: club,
			link: document.getElementById("signInAs")
		};
		initializeLogIn(module);
		$("dt.club.form").show();
		$("dt.club.form + dd").show();
		$("dt.club.form + dd + dd").show();
		$("#" + signIn.config.moduleId).addClass(club);
	}
	function setReturnFormDisplay(){
		var returning_cookie = $.cookie("cool_s"); 
		if (returning_cookie == "t") {
			displayLogin(TCOOL.class_name);
		} else if (returning_cookie == "p") {
			displayLogin(PCOOL.class_name);
		} else {
			showRoutingForm();
		}
	}
	function getUrlParam(/*String*/name){
		var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
		return (results ? results[1] : 0);
	}
	function reasonCodeCheck(/*String*/reasonCode){
		var errorCode = getUrlParam(reasonCode);
		var error = {};
		switch (errorCode) {
			case "cc":
				error.copy = ERROR_COPY.MULTIPLE;
				break;
			case "to":
				error.copy = ERROR_COPY.SESSION;
				break;
			default:
				break;	
		};
		
		if (!$.isEmptyObject(error)){
			error.field = $('form input[type="text"]')[0];
			
			displayLogin(TCOOL.class_name);
			updateError(error);
		} else {
			showRoutingForm();
		}
	}
	signIn = {
		config: {
			errorElementTag: "label",
			errorClassName: "error",
			errorMessagingContainer: "dd.error",
			forgottenLinkId: "forgotten",
			formName: "LogonForm",
			moduleId: "sign-in"
		},
		validate: function(obj){
			validateForm(obj);
		},
		as: function(obj){
			enableAlternateLogIn(obj)
		},
		enableTrackForm: function(){
			enableOOSLogIn();
		},
		enablePlaceForm: function(){
			enableTCOOLLogIn();
		},
		asReturningParent: function() {
			displayLogin("pcool");
		},
		asReturningTeacher: function() {
			displayLogin("tcool");
		},
		init: function() {
			reasonCodeCheck('r');
		}
	};
})();
/*
For argument sake, let's pretend it's only for definition lists. Can abstract later if I get the chance...
My CSS classes rule!
*/
var clubSlider = {};
(function(){
	
	
	function initialize(/*Object*/container){
		$(container).find('dt').live('click', displayClub);
	}
	function displayClub() {
		var club = this;
		
		hideAllVisibleClubs(club);
		displaySelectedClub(club);
	}
	function hideAllVisibleClubs(/*Object*/club) {
		/* I hate IE */
		var visibleClub = $('#flyer dl dd:visible');
		var clone = visibleClub.html();
		visibleClub.html(clone);
		/* /I hate IE */
		$("#flyer dl dt.active").removeClass("active");
		$("#flyer dl dd").hide();
	}	
	function displaySelectedClub(/*Object*/club){
		$(club).next('dd').show();
		$(club).addClass('active');
	}
	
	clubSlider = {
		init: function(obj){
			initialize(obj);
		}
	};

})();
