// Global object to store values needed for the page
function Page() {
	this.sport = "";
	this.statSports = StatSportsGet();
	this.errorImage = ImgCodeGet("/sportswebsites/images/signup/redX.gif", 16, 16);
	this.validImage = ImgCodeGet("/sportswebsites/images/signup/greenCheck.gif", 16, 16);
	this.loadImage = ImgCodeGet("/Templates/base/images/status/status.gif", 16, 16);
	
	this.GlobalDefaultSettings();
}

// Get the list of sports that have stats (also use the image at top)
function StatSportsGet() {
	var statSports = new Array();
	statSports["baseball"] = 1;
	statSports["basketball"] = 1;
	statSports["football"] = 1;
	statSports["hockey"] = 1;
	statSports["lacrosse"] = 1;
	statSports["soccer"] = 1;
	statSports["softball"] = 1;
	return statSports;
}

// Get the xhtml code for an image by passsing its src, width, and height
function ImgCodeGet(src, width, height) {
	var imgCode = "";
	if(!src) return imgCode;
	if(!width) width = "";
	else width = " width=\"" + width + "\"";
	if(!height) height = "";
	else height = " height=\"" + height + "\"";
	
	imgCode = "<img src=\"" + src + "\"" + width + height + " />";
	
	return imgCode;
}

// Global error setting to standardize how its done
Page.prototype.ErrorSet = function(id, msg) {
	// Function also used to clear errors
	if(!msg) msg = "";
	else msg = this.errorImage + msg;
	$("#" + id + "Err").html(msg);
};

// Global settings for jquery objects used
Page.prototype.GlobalDefaultSettings = function() {
	$.ajaxSetup ({
		cache: false, 
		// If a server error occurs it will display the message in the username error box
		error:function(XMLHttpRequest,textStatus, errorThrown) {  
			page.ErrorSet("usernameDesired", "Connection Problem: Contact Support");
			/*
			alert(textStatus);      
			alert(errorThrown);      
			alert(XMLHttpRequest.responseText); 
			*/
		}
	});
};

// Highlight the image for the sport and set the number of periods
Page.prototype.SportValidate = function() {	
	// Check if sport selected
	if(!this.sport) {
		page.ErrorSet("sport", "Sport Required");
		return false;
	}
	page.ErrorSet("sport");
	return true;
};

// Validate full form
Page.prototype.Validate = function() {
	var errMsg = "";
	
	// Disable button to prevent double clicking
	$("#submitButton").attr("disabled", "disabled");
	$("#submitButton").attr("value", "Validating Data...");
	
	if(!this.TeamNameValidate()) errMsg += "\n- Name of Team or Organization is Required";
	if(!this.SportValidate()) errMsg += "\n- Sport is Required";
	if(!$("#usernameDesiredValid").text()) {
		if(!$("#usernameDesiredErr").text()) page.ErrorSet("usernameDesired", "Username is Required");
		errMsg += "\n- A Valid Username is Required";
	}
	if(!page.FirstNameValidate() || !page.LastNameValidate()) {
		errMsg += "\n- Admin Name is Required";
	}
	if(!page.EmailValidate()) errMsg += "\n- Email is Required";
	if(!page.AdminPasswordValidate() || !page.AdminPasswordConfirmValidate()) errMsg += "\n- Admin Password is Required";
	if(!page.TeampassValidate() || !page.TeampassConfirmValidate()) errMsg += "\n- Visitor Password is Required";

	if(errMsg) {
		alert("The following errors have occured:" + errMsg);
		$("#submitButton").removeAttr("disabled");
		$("#submitButton").attr("value", "Create My Website");
		return false;
	}
	$("#submitButton").attr("value", "Creating Website...");
	return true;
};
	
// Validate the confirm password is properly filled out
Page.prototype.TeampassConfirmValidate = function() {
	var teampasstog = $("#teampasstogYes").attr("checked");
	if(!teampasstog) {
		page.ErrorSet("teampass");
		return true;
	}
	
	var teampass = $("#teampass").val();
	var teampassConfirm = $("#teampassConfirm").val();
	
	if(teampass && teampassConfirm && (teampass == teampassConfirm)) {
		page.ErrorSet("teampass");
		return true;
	} else if(!teampassConfirm) {
		page.ErrorSet("teampass", "Password Required");
		return false;
	} else if(teampass != teampassConfirm) {
		page.ErrorSet("teampass", "Fields Do Not Match");
		return false;
	}
};

// validate the team password
Page.prototype.TeampassValidate = function() {
	var teampasstog = $("#teampasstogYes").attr("checked");
	if(!teampasstog) {
		page.ErrorSet("teampass");
		return true;
	}
	
	var teampass = $("#teampass").val();
	var teampassConfirm = $("#teampassConfirm").val();
	
	if(teampass && teampassConfirm && (teampass == teampassConfirm)) {
		page.ErrorSet("teampass");
		return true;
	} else if(!teampass) {		
		page.ErrorSet("teampass", "Password Required");
		return false;
	}
};

// Toggle the visitor password boxes as editable or not
Page.prototype.TeamPassTogClick = function() {
	var teampasstog = $("#teampasstogYes").attr("checked");
	if(teampasstog) {
		$("#teampass").removeAttr("disabled");
		$("#teampassConfirm").removeAttr("disabled");
	} else {
		$("#teampass").attr("disabled", "disabled");
		$("#teampassConfirm").attr("disabled", "disabled");
	}
	page.TeampassValidate();
	page.TeampassConfirmValidate();
};

// validate the admin password was repeated correctly
Page.prototype.AdminPasswordConfirmValidate = function() {
	var adminPassword = $("#adminPassword").val();
	var adminPasswordConfirm = $("#adminPasswordConfirm").val();
	
	if(adminPassword && adminPasswordConfirm && (adminPassword == adminPasswordConfirm)) {
		page.ErrorSet("adminPassword");
		return true;
	} else if(!adminPasswordConfirm) {
		page.ErrorSet("adminPassword", "Password Confirm Required");
		return false;
	} else if(adminPassword != adminPasswordConfirm) {
		page.ErrorSet("adminPassword", "Passwords Do Not Match!");
		return false;
	}
};

// validate the admin password
Page.prototype.AdminPasswordValidate = function() {
	var adminPassword = $("#adminPassword").val();
	var adminPasswordConfirm = $("#adminPasswordConfirm").val();
	
	if(adminPassword && adminPasswordConfirm && (adminPassword == adminPasswordConfirm)) {
		page.ErrorSet("adminPassword");
		return true;
	} else if(!adminPassword) {
		page.ErrorSet("adminPassword", "Password Required");
		return false;
	}
};

// validate the email
Page.prototype.EmailValidate = function() {	
	var email = $("#email").val()
	if(!email) {
		page.ErrorSet("email", "Email Required");
		return false;
	}
	
	var err = false;
	if( ((tmp=Number(String(email).indexOf("@"))) == -1) || (tmp < 1) ) {
		err = true;
	}
	if(!err) {
		tmp = String(email).substring(tmp, String(email).length);
		if( (tmp.length < 4) ||  (tmp.indexOf(".") == -1) ) {
			err = true;			
		}
	}
	
	if(err) {
		page.ErrorSet("email", "Must contain valid email");
	} else {
		page.ErrorSet("email");
	}

	return !err;				
};

// validate last name
Page.prototype.LastNameValidate = function() {	
	if($("#FirstName").val() && $("#LastName").val()) {
		page.ErrorSet("name");
		return true;
	} else if(!$("#LastName").val()) {
		page.ErrorSet("name", "Admin Name Required");
		return false;
	}
};

// validate first name
Page.prototype.FirstNameValidate = function() {	
	if($("#FirstName").val() && $("#LastName").val()) {
		page.ErrorSet("name");
		return true;
	} else if(!$("#FirstName").val()) {
		page.ErrorSet("name", "Admin Name Required");
		return false;
	}
};

// reset the message in the username
Page.prototype.UsernameMessagesReset = function() {	
	page.ErrorSet("usernameDesired");
	$("#usernameDesiredValid").text("");
};

// ajax callback function after checking to see if username is available on the server
Page.prototype.UsernameAvailableCheckCallback = function(usernameInfo) {	
	page.UsernameMessagesReset();
	
	if(!usernameInfo) {
		page.ErrorSet("usernameDesired", "Connection Problem: Contact Support");
	} else if("INVALID" == usernameInfo.available) {
		page.ErrorSet("usernameDesired", "No spaces. Use letters, numbers, -, _");
	} else if("YES" == usernameInfo.available) {
		$("#usernameDesiredValid").html(page.validImage + "Username Available!");
	} else if("NO" == usernameInfo.available) {
		page.ErrorSet("usernameDesired", "Username already in use");
	} else {
		page.ErrorSet("usernameDesired", "Connection Problem: Contact Support");
	}	
};

// confirm username has valid UsernameCharactersValidate
Page.prototype.UsernameCharactersValidate = function(usernameToBeChecked) {	
	var validCharsRegExp = /\w|\_|-/g;
	var usernameBadChars = String(usernameToBeChecked).replace(validCharsRegExp, "");
	if(usernameBadChars) {
		return false;
	}
	return true;
};

// Make sure the username is valid, then check the server if available
Page.prototype.UsernameAvailableCheck = function(usernameWhenCalled) {	
	// check if no more characters have been typed, and ready to validate	
	if($("#usernameDesired").val() != usernameWhenCalled) return;	
	page.UsernameMessagesReset();
	
	if(!usernameWhenCalled) {
		page.ErrorSet("usernameDesired", "Username is Required");
		return;
	} 
	if(!page.UsernameCharactersValidate(usernameWhenCalled)) {
		page.ErrorSet("usernameDesired", "No spaces. Use letters, numbers, -, _");
		return;
	}
	
	$.getJSON("/sportswebsites/ajax/UsernameCheck.asp", {username:usernameWhenCalled}, page.UsernameAvailableCheckCallback);
};

// Creaet a timer to check the username after a brief pause in typing
Page.prototype.UsernameValidateTimer = function() {	
	page.UsernameMessagesReset();
	$("#usernameDesiredErr").html(page.loadImage);

	// esacpe single quotes to make sure it does not break the function call
	var usernameDesired = String(document.signupForm.usernameDesired.value).replace(/\'/g, "\\'");
	setTimeout("page.UsernameAvailableCheck('" + usernameDesired + "')", 1300);
};

// update the period select
Page.prototype.PeriodSelectSet = function() {	
	if("Organization" == page.sport) {
		$("#periodLabels").addClass("hidden");
		$("#inningLabels").addClass("hidden");
		document.signupForm.norminning[1].disabled  = true;
		document.signupForm.norminning[2].disabled  = true;
		$("#emptyPeriodLabels").removeClass("hidden");
	} else if(("baseball" == page.sport) || ("softball" == page.sport)) {
        $("#periodLabels").addClass("hidden");
		$("#emptyPeriodLabels").addClass("hidden");
		document.signupForm.norminning[1].disabled  = true;
		$("#inningLabels").removeClass("hidden");
		document.signupForm.norminning[2].disabled  = false;
		switch(page.sport) {
		case "baseball":
			document.signupForm.norminning[2].selectedIndex = 5;     
			break;
		case "softball":
			document.signupForm.norminning[2].selectedIndex = 3;     
			break;
		}
    } else {
		$("#inningLabels").addClass("hidden");
		$("#emptyPeriodLabels").addClass("hidden");
		document.signupForm.norminning[1].disabled  = false;
		$("#periodLabels").removeClass("hidden");
		document.signupForm.norminning[2].disabled  = true;
		switch(page.sport) {
		case "htosports":
			document.signupForm.norminning[1].selectedIndex = 0;
			break;
		case "basketball":
		case "soccer":         
			document.signupForm.norminning[1].selectedIndex = 1;  
			break;
		case "hockey":
			document.signupForm.norminning[1].selectedIndex = 2;
			break;
		case "football":
			document.signupForm.norminning[1].selectedIndex = 3;
			break;
		default:
			document.signupForm.norminning[1].selectedIndex = 1;
			break;  
		}
    }	
};

// update the period select
Page.prototype.SportImageHighlight = function() {		
	// Unhilight the old image
	var prevSelectedImg = $(".selectedSportImg").attr("alt");
	if(prevSelectedImg) {
		var notSelectedSrc = "/sportswebsites/images/signup/A" + prevSelectedImg + ".gif";
		$(".selectedSportImg").attr("src", notSelectedSrc).removeClass("selectedSportImg");	
	}
	
	// Swap out the main and secondary sport images
	if(page.statSports[page.sport]) {
		var sportImg = $("#sportImg" + page.sport);
		var selectedSrc = "/sportswebsites/images/signup/P" + page.sport + ".gif"
		sportImg.attr("src", selectedSrc).addClass("selectedSportImg");
		$("#sportIconSmall").html("<img src=\"/images/sports/" + page.sport + "16.gif\" width=\"16\" height=\"16\">");
	// special case for organization small image
	} else if("Organization" == page.sport) {
		$("#sportIconSmall").html("<img src=\"/images/sports/org16.gif\" width=\"16\" height=\"16\">");
	// other sports small image
	} else if(page.sport) {
		$("#sportIconSmall").html("<img src=\"/images/sports/htosports16.gif\" width=\"16\" height=\"16\">");
	// nothing selected
	} else {
		$("#sportIconSmall").html("<img src=\"/images/spacer.gif\" width=\"16\" height=\"16\">");
	}
};

// Highlight the image for the sport and set the number of periods
Page.prototype.SportChange = function() {	
	var validCheck = false;
	if($("#sport").attr("disabled"))  page.sport = "Organization";
	else page.sport = $("#sport option:selected").val();
	
	// Check if sport selected
	if(!page.sport) {
		page.ErrorSet("sport", "Sport Required");
	} else {
		page.ErrorSet("sport");
		validCheck = true;
	}
	
	page.SportImageHighlight();
	page.PeriodSelectSet();  
	
	if("Organization" == page.sport) page.MultiSportClicked("skip");
	
	return validCheck;
};

// update the display if an org is picked
Page.prototype.MultiSportClicked = function(skipSportChangeTog) {	
	var multiIx = document.signupForm.sport.options.length - 1;
	$("#sport").attr("selectedIndex", multiIx).attr("disabled", "disabled");
	
	$("#accounttypet, #accounttypel").removeAttr("checked");
	$("#accounttypeo").attr("checked", "checked");
	
	if("skip" != skipSportChangeTog) page.SportChange();
};

// udpate the display if team or league is picked when org was picked last
Page.prototype.TeamLeagueClicked = function() {
	var orgTog = $("#sport").attr("disabled");
	if(!orgTog) return;
	
	$("#sport").removeAttr("disabled").attr("selectedIndex", 0);
	page.SportChange();
};

// validate the team name was filled out
Page.prototype.TeamNameValidate = function() {
	if($("#teamname").val()) {
		page.ErrorSet("teamname");
		return true;
	} else {
		page.ErrorSet("teamname", "Name Required");
		return false;
	}
};

// Define all event handlers
Page.prototype.EventHandlersSet = function() {
	$("#teamname").blur(this.TeamNameValidate);
	$("#accounttypet, #accounttypel").click(this.TeamLeagueClicked);
	$("#accounttypeo").click(this.MultiSportClicked);
	$("#sport").change(this.SportChange);
	$("#usernameDesired").keyup(this.UsernameValidateTimer).blur(this.UsernameValidateTimer);
	$("#FirstName").blur(this.FirstNameValidate);
	$("#LastName").blur(this.LastNameValidate);
	$("#email").blur(this.EmailValidate);
	$("#adminPassword").blur(this.AdminPasswordValidate);
	$("#adminPasswordConfirm").blur(this.AdminPasswordConfirmValidate);
	$(".radioCell input").click(this.TeamPassTogClick);
	$("#teampass").blur(this.TeampassValidate);
	$("#teampassConfirm").blur(this.TeampassConfirmValidate);
};

// Run when the page loads
Page.prototype.Run = function() {
	this.EventHandlersSet();
};

var page = new Page();
$(function() { page.Run(); });