var fadeDuration = 333;
var currentBikeList;

var email, password, action;
action = "/gateway/";

$().ready(function() {
	
	// force all links to be http (not https)
	var links = $("a");
	var href;
	$.each(links, function() {
		href = $(this).attr("href");
		if ((href !== undefined) && (href.slice(0, 1) == "/")) {
			//$(this).attr("href", "http://" + serverName + href);
		}
	});	
	
	// force search to be http
	$("form#siteSearch").attr("action", "http://" + serverName + $("form#siteSearch").attr("action"));
	
	
	$(".modal .closeModal").click(function() {
		$(this).parent().hide();
		return false;
	});
	
	$("a.closeModal img").hover(function() {
		$(this).attr("src", "/images/projectone/home/modalCloseOver.gif");
	}, function() {
		$(this).attr("src", "/images/projectone/home/modalClose.gif");
	});
	
	$(".loginModal a.closeModal").click(function() { $(this).parent().parent().hide(); return false; });
	$("#selectBike1 a.closeModal").click(function() { $(this).parent().parent().hide(); return false; });
	$("#selectBike2 a.closeModal").click(function() { $(this).parent().parent().hide(); return false; });
	
	$("#bikeFramesetModal").css("opacity", 0.97);
	$("#learnMoreModal").css("opacity", 0.97);
	$("#loginForgotReset").css("opacity", 0.97);
	$("#selectBike1").css("opacity", 0.97);
	$("#selectBike2").css("opacity", 0.97);
	
	$("#showCompleteBikeList").click(function() {
		if (currentBikeList != "complete") {
			currentBikeList = "complete";
			$("#frameModelList").hide();
			$("#bikeModelList").fadeIn(fadeDuration);
		}
		return false;
	});
	
	$("#showFramesetList").click(function() {
		if (currentBikeList != "frameset") {
			currentBikeList = "frameset";
			$("#bikeModelList").hide();
			$("#frameModelList").fadeIn(fadeDuration);
		}
		return false;
	});
	
	$("#buildBike1").click(function() {
		$(".modal").hide();
		$("div.modelList").hide();
		$("#selectBike2").hide();
		currentBikeList = "";
		$("#bikeFramesetModal").show(); // bikes and framesets
		$("#selectBike1").show(); // bike only
		return false;
	});
	$("#buildBike2").click(function() {
		$(".modal").hide();
		$("div.modelList").hide();
		$("#selectBike1").hide();
		currentBikeList = "";
		$("#bikeFramesetModal").show(); // bikes and framesets
		$("#selectBike2").show(); // bike only
		return false;
	});
	$(".learnMore").click(function() {
		$(".modal").hide();
		$("#learnMoreModal").show();
		return false;
	});
	
	$("#loginLink").click(function() { 
		$("#selectBike").hide(); // kill stock modal
		$(this).blur();
		// show fresh login modal
		$("#loginForm").show();
		$("#bikeRack").hide();
		$("#bikeRackInstructions").hide();
		$("#forgotPassword").hide();
		$("#resetPassword").hide();
		$("#loginForgotReset").show(); 
		return false; 
	});
	
	$("#forgotP a").click(function() { 
		$("#forgotPassword").toggle();
		$("#loginForm").toggle();
		$("#loginErrorMessage").hide();
		$("#forgotEmail").val($("#loginEmail").val());
		return false;
	});
	
	$("#p1Login").click(function() { 
		loginEvent();
	});
	
	$("#p1Forgot").click(function() { 
		forgotEvent();
	});
	
	$("#p1Reset").click(function() {
		resetEvent();
	});
	
	// enable IE users to submit forms by pressing enter
    $('#loginForm input').keydown(function(e){
        if (e.keyCode == 13) {
			loginEvent();
            return false;
    	}
	});
	
	$('#forgotPassword input').keydown(function(e){
        if (e.keyCode == 13) {
			forgotEvent();
            return false;
    	}
	});
	
	$('#resetPassword input').keydown(function(e){
        if (e.keyCode == 13) {
			resetEvent();
            return false;
    	}
	});
	
	// mouseover effect for submit buttons
	$(".submitButton").hover(function() {
		$(this).attr("src", overSubmitButtonPath);
	}, function() {
		$(this).attr("src", submitButtonPath);
	});
	
	// for build your bike buttons
	$(".buildYourDreamBikeButton").hover(function() {
		$(this).attr("src", overBuildYourDreamBikeButtonPath);
	}, function() {
		$(this).attr("src", buildYourBikeButtonPath);
	});
		
});



function validateEmail(email) {
	// check email address
	var myEmailRegExp = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
	return email.match(myEmailRegExp);
}

function validatePassword(password) {
	var myPasswordRegExp = new RegExp("^[A-Za-z0-9!@#\$]{6,100}$");
	return password.match(myPasswordRegExp);
}

function saveSessionCookie(name, value) {
	// set session cookie
	$.cookie(name, value, {
		expires: 0,
		path: '/',
		domain: cookieDomain,
		secure: secureCookie
	});
}

function getAndShowBikeRack(session) {
	// hide the login form
	$("#loginForm").hide();
	//$("#forgotP").hide();
	$("#forgotPassword").hide();
	$("#loginErrorMessage").hide();
	$("#register").hide();
	$("#bikeRackInstructions").show();
	$("#loginForm").after("<div id='bikeRack'><ul id='rackItems'></ul></div>");
	
	gateway = "bikerack";
	
	$.post(action, {email: email, sessionKey: session, gateway: gateway}, function(data) {
		if (data.packageSummaries.length) {
			data.packageSummaries.reverse(); // reverse order before looping
			$.each(data.packageSummaries, function(){
				$("#rackItems").append("<li><a href='" + bikerackUrl + this.configId + "'>" + this.customSpecifiedName + "</a></li>");
			});
		} else {
			$("#bikeRackInstructions").html(bikerack_no_bikes);
			$("#bikeRackInstructions").addClass("errorMessage");
		}
	}, "json");
}

function triggerResetPassword() {
	$("#loginForm").hide();
	$("#forgotP").hide();
	$("#forgotPassword").hide();
	$("#resetPassword").show();
}

function fadeEffect(elementId) {
	$("#" + elementId).fadeTo(2, .25).css({ 'backgroundColor' : '#ffffff' });
	$("#" + elementId).fadeTo(250, 1).css({ 'backgroundColor' : 'transparent' });
}


function convertStringToStub(string) {
	
	var stub = string;
	stub = stub.replace(/ /g, "");
	stub = stub.replace(/\./g, "");
	stub = stub.toLowerCase();
	return stub;
}

function getBaseUrl() {
	return 'http://' + serverName + '/' + countryId + '/' + languageId + '/';
}

function getP1ModelUrl(modelString) {
	return getBaseUrl() + 'projectone/model/' + convertStringToStub(modelString) + '/';
}

function getMadoneUrl(modelString) {
	return getBaseUrl() + 'bikes/road/madone/' + convertStringToStub(modelString) + '/';
}

function getEquinoxUrl(modelString) {
	return getBaseUrl() + 'bikes/triathlon/equinox_ttx/' + convertStringToStub(modelString) + '/';
}

function loginEvent() {
	email = $("#loginEmail").val();
		password = $("#loginPassword").val();
		
		if (validateEmail(email) && validatePassword(password)) {
			gateway = "pauth";
	
			$.post(action, {email: email, password: password, gateway: gateway}, function(data){
				switch (data.status.code) {
					case 200:
						saveSessionCookie('session', data.session);
						saveSessionCookie('email', email);
						getAndShowBikeRack(data.session);
						break;
					case "600":
						triggerResetPassword();
						break;
					case "610":
						$("#loginErrorMessage").html(login_610);
						$("#loginErrorMessage").show();
						fadeEffect("loginErrorMessage");
						break;
					case "620":
						$("#loginErrorMessage").html(login_620);
						$("#loginErrorMessage").show();
						fadeEffect("loginErrorMessage");
						break;
					default:
						$("#loginErrorMessage").html(login_other);
						$("#loginErrorMessage").show();
						fadeEffect("loginErrorMessage");
				}
			}, "json");
			return false;
		} else {
			// we have a validation error - recheck to get correct message(s)
			tempMessage = "";
			if (!validateEmail(email)) {
				tempMessage += invalid_email + "<br />";
			}
			if (!validatePassword(password)) {
				tempMessage += login_password + "<br />";
			}
			
			$("#loginErrorMessage").html(tempMessage);
			$("#loginErrorMessage").show();
			fadeEffect("loginErrorMessage");
			return false;
		}
}

function forgotEvent() {
	email = $("#forgotEmail").val();
	gateway = "pforgot";
	if (validateEmail(email)) {
		// good email address - post request
		$.post(action, {email: email, gateway: gateway}, function(data) {
			switch (data.status.code) {
				case "200":
					$("#loginErrorMessage").html(password_reset);
					$("#loginErrorMessage").show();
					$("#forgotPassword").hide();
					$("#loginForm").show();
					$("#loginEmail").val($("#forgotEmail").val());
					fadeEffect("loginErrorMessage");
					break;
				case "600":
					$("#forgotErrorMessage").html(forgot_600);
					$("#forgotErrorMessage").show();
					fadeEffect("forgotErrorMessage");
					break;
				default:
					$("#forgotErrorMessage").html(forgot_other);
					$("#forgotErrorMessage").show();
					fadeEffect("forgotErrorMessage");
			}
		}, "json");
	} else {
		$("#forgotErrorMessage").html(invalid_email);
		$("#forgotErrorMessage").show();
		fadeEffect("forgotErrorMessage");
	}
	return false;
}

function resetEvent() {
	email = $("#forgotEmail").val();
	// backup plan -- if email string is empty, try pulling it from loginEmail
	// one of the two might be empty, but there should never be a situation where both are empty
	if (email.length <= 1) {
		email = $("#loginEmail").val();
	}

	oldPassword = $("#loginPassword").val();
	password1 = $("#resetPassword1").val();
	password2 = $("#resetPassword2").val();
	gateway = "preset";
	
	if (password1 != password2) {
		// passwords are different
		$("#resetErrorMessage").html(passwords_dont_match);
		fadeEffect("resetErrorMessage");
	} else if (!validatePassword(password1) || !validatePassword(password2)) {
		// validation problem
		$("#resetErrorMessage").html(login_password);
		fadeEffect("resetErrorMessage");
	} else {
		// hide reset password panel
		$.post(action, {email: email, oldPassword: oldPassword, newPassword: password1, gateway: gateway}, function(data) {
			switch (data.status.code) {
				case "200":
					$("#resetPassword").hide();
					saveSessionCookie('session', data.session);
					saveSessionCookie('email', email);
					getAndShowBikeRack(data.session);
					break;
				case "610":
				default:
					// generic error message
					$("#resetErrorMessage").html(reset_password_problem);
					fadeEffect("resetErrorMessage");
			}
		}, "json");
	}
	return false;
}
