/*Generic AJAX Data call */
function callAjax(dataUrl, destDiv, method) {
	var req = new Request.HTML({url:dataUrl, 
		onSuccess: function(html) {
			$(destDiv).set('text', '');
			$(destDiv).adopt(html);
		},
		//Our request will most likely succeed, but just in case, we'll add an
		//onFailure method which will let the user know what happened.
		onFailure: function() {
			SBCOM.utils.doLog("request failed");
		},
		method: (method == null || method == '' ? 'get' : method)
	});
	
	req.send();

}

function callAjaxJavascript(dataUrl, destDiv, javascriptCallback) {
	var req = new Request.HTML({url:dataUrl,
		onSuccess: function(html) {
			$(destDiv).set('text', '');
			$(destDiv).adopt(html);
			javascriptCallback();
		},
		onFailure: function() {
			SBCOM.utils.doLog("request failed");
		}
	});
	
	req.send();

}

function getSWF(movieID)
{
    if (navigator.appName.indexOf("Microsoft") != -1)
    {
        return window[movieID];
    }
    else
    {
        return document[movieID];
    }
}

function popitup(url, name, params) {
	newwindow=window.open(url,name,params);
	if (window.focus) {newwindow.focus()}
	return false;
}

/* Thumbs Up */
function IMXthumbsUp(itemID) {
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/rating/thumbsUp/', 
		onSuccess: function(html) {
			$('ratingButtons').set('html', 'Your Rating | <img src="/images/Common/thumbsupblk.png" alt="Thumbs Up" /> <img src="/images/Common/thumbsdngry.png" alt="Thumbs Down" />');
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();

}

/* Thumbs Down */
function IMXthumbsDown(itemID) {
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/rating/thumbsDown/', 
		onSuccess: function(html) {
			$('ratingButtons').set('html', 'Your Rating | <img src="/images/Common/thumbsupgry.png" alt="Thumbs Up" /> <img src="/images/Common/thumbsdnblk.png" alt="Thumbs Down" />');
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();

}

/* Game Play */
function IMXgamePlay(itemID) {
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/play/game/', 
		onSuccess: function(html) {
			/*Handle Success
			$('result').set('text', '');
			*/
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();

}

function IMXpersonalPlay(itemID, userID){
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/played/' + userID + '/', 
		onSuccess: function(html) {
			/*Handle Success
			$('result').set('text', '');
			*/
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();
	
}

/* Games Studio Play */
function IMXgameStudioPlay(itemID) {
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/gs_play/game/', 
		onSuccess: function(html) {
			/*Handle Success
			$('result').set('text', '');
			*/
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();

}

function IMXpersonalGameStudioPlay(itemID, userID){
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/gs_played/' + userID + '/', 
		onSuccess: function(html) {
			/*Handle Success
			$('result').set('text', '');
			*/
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();
	
}

function cancelOverlay(){
	
	//Used in Games Studio
	var haltReload = document.getElementById('haltReload').value;
	if(haltReload == "true") {
		//Games Studio Case
		var swf = getSWF("gameBuilderSwf");
		if (swf!=null)
		{
			swf.onLoginCancel();
		}
	}
	removeElement('blocker');
}

function doDisplayLoader(){
	overlayObj('/modal/loader.html');
}

function doRemoveLoader(){
	removeElement('blocker');
}

function submitCode() {
	overlayObjNoBlock("/overlay/bigone/", checkBigoneCode);
}

function checkBigoneCode(elements)
{
	if(!elements) return;
	
	var codeCheck = "wave";																	
	$('bigoneVideos').setStyle('display', 'none');
	if(($('codeField').value).toLowerCase() == codeCheck)
	{
		$('bigoneCodeEntry').setStyle('display', 'none');
		$('codeLabel').setStyle('display', 'none');
		$('codeField').setStyle('display', 'none');
		$('bigoneInput').setStyle('display', 'none');
		$('submitCode').setStyle('display', 'none');
		$('bigoneCodeCongrats').setStyle('display', 'block');
		$('bigoneVideos').setStyle('display', 'block');
		$("bigoneVideos").setStyle("left", $("bigoneCodeBg").getPosition().x + 15);
	}
	else
	{
		$('bigoneVideos').setStyle('display', 'none');
		$('codeLabel').set('html', "WRONG CODE - TRY AGAIN!");
	}
}

function closeLogin() {
	removeElement('blocker');
}

/* invokes the overlay */
function overlayObj(path, elementsCallback, callbackParams) {
	var bodyObj = document.getElementsByTagName("body").item(0);
	removeElement('blocker'); //checks for exists
	SBCOM.utils.hideSwfs();
	var divOverlay = createDiv();
	divOverlay.setAttribute('id','blocker');
	bodyObj.insertBefore(divOverlay, bodyObj.firstChild);

	requestOverlay(divOverlay, path, elementsCallback, callbackParams);
}

function overlayObjNoBlock(path, elementsCallback, callbackParams) {
	var bodyObj = document.getElementsByTagName("body").item(0);
	SBCOM.utils.hideSwfs();
	var divOverlay = createDiv();
	divOverlay.setAttribute('id','transparentOverlay');
	bodyObj.insertBefore(divOverlay, bodyObj.firstChild);
	
	requestOverlay(divOverlay, path, elementsCallback, callbackParams);
}

function requestOverlay(divOverlay, path, elementsCallback, callbackParams)
{
	var req = new Request.HTML({url:path, 
		onSuccess: function(html, elements) {
			//Handle Success
			$(divOverlay).set('text', '');
			$(divOverlay).adopt(html);
			if(elementsCallback) elementsCallback(elements, callbackParams);
		},
		//Our request will most likely succeed, but just in case, we'll add an
		//onFailure method which will let the user know what happened.(b
		onFailure: function() {
			//handle fail
		}
	});
	req.send();
}

//SC: after login loads focus username field and add enter key listeners
function initLoginOverlay(elements, params) {
	if(!elements) return;

	elements.each(function(element) {
		if(element.get('id') == 'loginField') {
			element.focus();
			element.addEvent("keypress", doLoginEnterKeyPress);
		} else if(element.get('id') == 'passwordField') {
			element.addEvent("keypress", doLoginEnterKeyPress);
		} else if(element.get('id') == 'haltReload' && params != null && params.haltReload === true) {
			element.setAttribute("value", "true");
			SBCOM.utils.doLog("login: haltReload: "+params.haltReload+" | "+element.get('value'));
		}
	});
}

function initAgeOverlay(elements, params)
{
	setHaltReload(elements, params);
}

function initRegistrationOverlay(elements, params)
{
	setHaltReload(elements, params);
}

function initThankYouOverlay(elements, params)
{
	setHaltReload(elements, params);
	if(params != null && params.haltReload == "true") {
		if(authStatus != null) authStatus.setResponse(params.response);
	} 
}

function setHaltReload(elements, params)
{
	if(!elements) return;
	elements.each(function(element) {
		if(element.get('id') == 'haltReload' && params != null && params.haltReload == "true") 
		{
			element.setAttribute("value", "true");
		}
	});
}

function doneRegistering()
{
	var haltReload = document.getElementById('haltReload').value;
	if(haltReload == "true") {
		doQueuedLoginRequests(null);
		doRemoveLoader();
	} else {
		window.location.reload();
	}
}

//SC: check for 'enter' key presses
function doLoginEnterKeyPress(event) {
	if(!isEnterKey(event)) return;

	doLogin();
	Event.stop(event);
}

//SC: check event keycodes for a valid enter key press
function isEnterKey(event) {
	var keycode;
	if(window.event) keycode = window.event.keyCode;
	else if(event && event.which) keycode = event.which;
	else if(event && event.event) keycode = event.event.which; // Firefox!
	else return false;

	return keycode == 13;
}

function doDisplayLogin(haltReload) {
	haltReload = haltReload === true;
	SBCOM.utils.doLog('doDisplayLogin: '+haltReload); 
	overlayObj('/auth/login/', initLoginOverlay, {'haltReload':haltReload});	
}

function doDisplayRegistration(haltReload) {
	if(haltReload)
	{
		haltReload = document.getElementById('haltReload').value;
		overlayObj('/auth/ageCheck/00/00/0000', initAgeOverlay, {'haltReload':haltReload});
	}
	else
	{
		overlayObj('/auth/ageCheck/00/00/0000');
	}
}

function goBackToRegistration(d,m,y) {
	var haltReload = document.getElementById('haltReload').value;
	var day = d;
	var month = m;
	var year = y;
	overlayObj('/auth/ageCheck/' + month + '/' + day + '/' + year , initAgeOverlay, {'haltReload':haltReload});
}

/* remove element */
function removeElement(eID, parentElement) {
	if($(eID)) $(eID).dispose();
	SBCOM.utils.showSwfs();
}

/* Dynamically create a div and added to the page */
function createDiv(){
	var divObj = document.createElement("div");
	return divObj;
}

function goNewsletter()
{
	doCheckLogin(newsletterCallback);
}

function newsletterCallback(isLoggedIn) { 
	if(!isLoggedIn) 
	{
		overlayObj('/auth/newsletterAgeCheck/');
	}
	else
	{
		if (SBCOM.utils.IS_SPONGEBOB_FANS)
			popitup('http://exodus.spongebob.com/site/signup','newsletter','height=500,width=500');
		else
			popitup('http://exodus.nick.spongebob.com/site/signup','newsletter','height=500,width=500');
	}
}


function doCheckLogin(callback) {
	if(authStatus == null) {
		//SBCOM.utils.doLog('doCheckLogin: authStatus null! FIX');
		return;
	}
	authStatus.doCheckLogin(callback);
}

function isLoggedIn() {
	return typeof(authStatus) != 'undefined' && authStatus.isLoggedIn();
}

function getLoggedInUser() {
	// eventually wrap this around the AuthStatus response object
	if(!isLoggedIn()) return { screenName:null };
	return { screenName:authStatus.getScreenName() };
}

/* sends the login request */
function login(formObj, callBack){
	alert("--------- login(formObj, callBack)----------\n******DEPRECATED * DEPRECATED * DEPRECATED ****** \nUse the new Login Class. \nTalk to Dhimiter for example.\n##### CANNOT GO LIVE #####");
//	var params = "?" + flatForm(formObj);
//	var req = new Request({url:"/ajax/login/" + params + "showComments=false", 
//		onSuccess: function(txt, xml){
//			xml = xml.documentElement;
//			if (xml.getAttribute("loginResult") == 1)
//				window.location.reload();
//			else
//				callBack();
//		},
//		onFailure: function(err) {
//			alert("failed" + err);
//		}
//		});
//	req.send();
}

/* sends the logout request */
function logout(refresh, callBack){
	alert("--------- logout(refresh, callBack)----------\n******DEPRECATED * DEPRECATED * DEPRECATED ****** \nUse the new LogOut Class. \nTalk to Dhimiter for example.\n##### CANNOT GO LIVE #####");
//	var req = new Request({url:"/ajax/logout/?showComments=false", 
//		onSuccess: function(txt, xml){
//			xml = xml.documentElement;
//			if ((xml.getAttribute("loggedIn") == "false") && (refresh))
//				window.location.reload();
//			else
//				callBack({loginStatus: "loggedOut"});
//		},
//		onFailure: function(err) {
//			callBack({loginStatus: "failed"});
//		}
//		});
//	req.send();
}


//var lgnSts;
function loginCheck(callBack) {
	alert("--------- loginCheck(callBack)----------\n******DEPRECATED * DEPRECATED * DEPRECATED ****** \nUse the new AuthStatus Class. \nTalk to Dhimiter for example.\n##### CANNOT GO LIVE #####");
//		if (lgnSts == undefined)
//			lgnSts = new Object;
//		else {
//			callBack (lgnSts);
//			return;
//		}
//		var lgnSts = new Object;
//		var req = new Request({url:"/ajax/login-check/?showComments=false", 
//		onSuccess: function(txt, xml) {
//			//alert("login success: " + xml);
//			if(!xml || !xml.documentElement) return;
//			xml = xml.documentElement;
//			if (xml.getAttribute("loggedIn") == "true") {
//				lgnSts.loginStatus = "loggedIn";
//				lgnSts.screenName = xml.getAttribute("screenName");
//				lgnSts.points = xml.getAttribute("points");
//				lgnSts.authType = "nick";
//				lgnSts.mail = xml.getAttribute("messages");			
//				
//				callBack (lgnSts);
//			}
//			else {
//				lgnSts.loginStatus = "loggedOut";
//				callBack (lgnSts);
//			}
//		},
//		onFailure: function(err) {
//				lgnSts.loginStatus = "loggedOut";
//				callBack(lgnSts);
//		}
//		});
//	req.send();
}

/* Utility wrapper function for mootools Request.JSON
 * used widely accross the site
 */
function getJSON(url, params, callback) {
	var req = new Request.JSON({url:url,
		onComplete:callback,
		onFail: function(){alert ("failed");}
	});
	req.send(params + "&showComments=false");
	return req;
}

/* get form items as query string params or js object
 * formObj: Form Objec
 * type: "object"/"flat"
 */
function flatForm(formObj){
	var formStr = "";
	var numOfInputs = formObj.getElementsByTagName("input").length;
	var numOfSelects = formObj.getElementsByTagName("select").length;
	for (i=0; i < numOfInputs; i++) {
		switch (formObj.getElementsByTagName("input")[i].type){
			case "text":
			case "password":
			case "hidden":
				formStr += formObj.getElementsByTagName("input")[i].name + "=" + 
				formObj.getElementsByTagName("input")[i].value + "&";
				break;
			case "checkbox":
		    case "radio":
		      	if (formObj.getElementsByTagName("input")[i].checked) {
		      		formStr += formObj.getElementsByTagName("input")[i].name + "=" + 
		        	formObj.getElementsByTagName("input")[i].value + "&";
		      	}
		      	/*else {
		      		formStr += formObj.getElementsByTagName("input")[i].name + "=&";
		      	}*/
		      	break;
		    case "select":
		    	alert("looking at select option")
		      	var sel = formObj.getElementsByTagName("input")[i];
		      	formStr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
		      	break;
		}
	}
	
	for(var s = 0; s < numOfSelects; s++){
		var sel = formObj.getElementsByTagName("select")[s];
		formStr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
	}
	
	return formStr;
}

/* email string validation */
function  validateEmail( email ) {
	var ptrn  =  /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i;
	return ptrn.test(email);
}

/* number validation */
function  validateNumber(num, min, max ) {
	var ptrn  =  new RegExp("^\\d{"+min+","+max+"}");
	return ptrn.test(num);
}

/* string validation */
function  validateString( str, min, max ) {
	var ptrn  =  /^[a-z]{min,max}$/i;
	return ptrn.test(str);
}

/* Video Play */
function IMXvideoPlay(itemID) {
	var req = new Request.HTML({url:'/ajax/imx/put/' + itemID + '/play/video/', 
		onSuccess: function(html) {
			/*Handle Success
			$('result').set('text', '');
			*/
		},
		onFailure: function() {
			//handle fail
		}
	});
	
	req.send();
}

var _loginQueued;
function addLoginListener(listener) {
	if(this._loginQueued == null) this._loginQueued = new Array();
	this._loginQueued.push(listener);
}

function doQueuedLoginRequests(response) {
	if(_loginQueued == null || _loginQueued.length <= 0) return;

	for(var i = 0; i < _loginQueued.length; i++) {
		//SBCOM.utils.doLog('doQueuedLoginRequests: '+i);

		if(this._loginQueued[i] == null) continue;
		this._loginQueued[i](response);
	}
}

/* START -- JS for loginOverlay.ftl */
var setFluxAuthCookieUrl = "";
function doLogin(){
	//SBCOM.utils.doLog("doLogin: "+document.getElementById('loginField').value);
	
	$('loadingIndicatorDiv').style.display = "block";
	$('loginBtnDiv').style.display = "none";

	var user = document.getElementById('loginField').value;
	var pass = document.getElementById('passwordField').value;
	var haltReload = document.getElementById('haltReload').value;
	
	var login =  new Login({
		haltReload:haltReload,
		username:user,
		password:pass,
		onSuccess:function(response){
			//alert("login success: " + response.screenName);
			//do something generic
		},
		onNickLogin:function(response){
			//alert("onNickLogin1: " + response.screenName+" | "+response.haltReload+" | "+(typeof response.haltReload));
			closeLogin();
			if(haltReload === "true") {
				if(authStatus != null) authStatus.setResponse(response);
				doQueuedLoginRequests(response);
			} else {
				window.location.reload();
			}
		},
		onFluxLogin:function(response){
			//alert("flux login success: " + response.screenName);
			if (response.fluxCommunityMember == "false") {
				overlayObj('/auth/join/flux/' + response.screenName + "/");
				setFluxAuthCookieUrl = response.setAuthCookieUrl;
			}
			else
				window.location.href = response.setAuthCookieUrl;
		},
		onEventMode:function(response){
			$('eventModeMsg').style.display = "block";
			$('loadingIndicatorDiv').style.display = "none";
			$('loginBtnDiv').style.display = "block";
		},
		onFailed:function(response){
			$('failMsg').style.display = "block";
			$('loadingIndicatorDiv').style.display = "none";
			$('loginBtnDiv').style.display = "block";
		}
	}).send(flatForm(document.getElementById('loginForm')) + "returnUrl=" + escape(window.location.href));
}

function doJoinFlux(){
	var join = new JoinFlux({
		onSuccess:function(response){
			//alert("flux auth url: " + setFluxAuthCookieUrl);
			window.location.href = setFluxAuthCookieUrl;
		},
		onFailed:function(response){
			//not sure what goes here.
		}
	}).send();
}
		
function forgotPassword (site) {
	var forgotDiv = document.getElementById("forgotPassword");
	var req = new Request.HTML({url:"/ajax/forgot/" + site + "Password/?showComments=false", 
	onSuccess: function(html) {
		//Handle Success
		$(forgotDiv).set('text', '');
		$(forgotDiv).adopt(html);
	},
	//Our request will most likely succeed, but just in case, we'll add an
	//onFailure method which will let the user know what happened.
	onFailure: function() {
		//handle fail
	}
	});
	req.send();	
}
/* END -- JS for loginOverlay.ftl */


/* JS for 13- registration page. Registration13Overlay.ftl */
function doRegistration (form, age) {
	
	$('loadingIndicatorDiv').style.display = "block";
	$('registerBtnDiv').style.display = "none";
	
	var haltReload = document.getElementById('haltReload').value;
	var user = document.getElementById('nameField').value;
	var pass = document.getElementById('passwordField').value;
	
	clearRegErrors(document.getElementById(form));
	
	var register = new Registration (
		{url : "/ajax/register/" + age + "/", 
		username:user, 
		password:pass,
		onSuccess: function(response){
			if (age == 14)
				overlayObj("/auth/register/14/thankyou/" + response.screenName + "/");
			else
				overlayObj("/auth/register/13/thankyou/" + response.screenName + "/", initThankYouOverlay, {'haltReload':haltReload,'response':response});
		},
		onFailed: function (response) {
			$('loadingIndicatorDiv').style.display = "none";
			$('registerBtnDiv').style.display = "block";
			$('failMsg').style.display = "block";
			var errLen = response.errors.length;
			var errors = "ERROR:";
			if (age == 14)
			{
				for (var e = 0; e < errLen; e++) {
					if(response.errors[e].message == "" || response.errors[e].message == "[!flux]")
					{
						errors += "<li>" + response.errors[e].field + "</li>";
					}
					else
					{
						errors += "<li>" + response.errors[e].message + "</li>";
					}
				}
			}
			else
			{
				for (var e = 0; e < errLen; e++) {
					$(response.errors[e].field + '').className = ""; 
					if ($(response.errors[e].field + '').getElements('input[type=radio]').length > 0)
						$(response.errors[e].field + '').className = "radiobuttonerror";
					else
						$(response.errors[e].field + '').className = "textboxerror";
					errors += "<li>" + response.errors[e].message + "</li>";
				}
			}
			$('failMsg').set("html", "<ul>" + errors + "</ul>");
		}
	}).send(flatForm(document.getElementById(form)) + ((age == 14)? "returnUrl=" + escape(window.location.href) : ""));
}

function clearRegErrors(formObj) {
	var numOfInputs = formObj.getElementsByTagName("input").length;
	var numOfSelects = formObj.getElementsByTagName("select").length;
	for (i=0; i < numOfInputs; i++) {
		switch (formObj.getElementsByTagName("input")[i].type){
			case "text":
			case "password":
			case "checkbox":
		    case "radio":
		    	if (($(formObj.getElementsByTagName("input")[i].name) == null) || ($(formObj.getElementsByTagName("input")[i].name) == undefined))
		    		alert("clearRegErrors ==> Not able to find element: " + $(formObj.getElementsByTagName("input")[i].name) + " | index: " + i);
		    	else {
		    		$(formObj.getElementsByTagName("input")[i].name).className = ""; 
		    		$(formObj.getElementsByTagName("input")[i].name).className = "textboxwrapper";
		    	}
		    break;
		}
	}
	
	for(var s = 0; s < numOfSelects; s++){
		var sel = formObj.getElementsByTagName("select")[s];
		$(sel).className = ""; 
		$(sel).className = "textboxwrapper";;
	}
	$('failMsg').style.display = "none";
}
/* END -- JS for 13- registration page */

/* START --JS for age check: AgeCheckOverlay.ftl */
function ReadISO8601date(Q) { 
	var T // adaptable for other layouts

	if ((T = /^(\d+)([-\/])(\d\d)(\2)(\d\d)/.exec(Q)) == null)
		{ return -2 } // bad format
	for (var j=1; j<=5; j+=2) 
		T[j] = +T[j] // some use needs numbers
	if (!ValidDate(T[1], T[3]-1, T[5])) 
		{ return -1 } // bad value
	return [ T[1], T[3], T[5] ] 
}

function ValidDate(y, m, d) { 
	// m = 0..11 ; y m d integers, y!=0
	with (new Date(y, m, d))
	return ((getMonth()==m) && (getDate()==d)) /* was y, m */ 
}

function newsletterAgeValidation()
{
	formValidation(true);
}

function formValidation(isNewsletter) {
	var errSts = 0;
	var today = new Date();
	
	if (($('yearInput').value > today.getFullYear()) || ($('yearInput').value < 1900)) { errSts++; showError("year"); }
	else if (!validateNumber ($('yearInput').value, 4,4)){ errSts++; showError("year"); } else hideError("year");
	
	if (($('monthInput').value > 12) || ($('monthInput').value <= 0)) {errSts++; showError("month");}
	else if (!validateNumber ($('monthInput').value, 2,2)) {errSts++; showError("month");} else hideError("month");
	
	if (($('dateInput').value > 31) || ($('dateInput').value <= 0)) {errSts++; showError("date");} 
	else if (!validateNumber ($('dateInput').value, 2,2)) {errSts++; showError("date");} else hideError("date");
		
	if ((errSts > 0)) {
		showError();
		return;
	}
	else {
		$('failMsg').style.display = "none";
		if(isNewsletter)
		{
			newsletterAgeDiff();
		}
		else
		{
			ageDiff();
		}
	}
}

function showError(field){
	switch (field) {
		case "year" : 
		case "month" :
		case "date" :
				$(field + 'Div').className = ""; 
				$(field + 'Div').className = "textboxerror";
				$('failMsg').style.display = "block";
		break;
		default:
		break;
	}
}

function hideError(field){
	switch (field) {
		case "year" : 
		case "month" :
		case "date" :
				$(field + 'Div').className = ""; 
				$(field + 'Div').className = "textboxwrapper";
		break;
		default:
		break;
	}
}

function ageDiff() { 
	
	var diff = getDiff();
	var haltReload = document.getElementById('haltReload').value;
	if (diff < 0)
		showError();
	else if (diff >= 14)
		overlayObj('/auth/register/14/' + $('monthInput').value + '/' + $('dateInput').value + '/' + $('yearInput').value);
	else
		overlayObj('/auth/register/13/' + $('monthInput').value + '/' + $('dateInput').value + '/' + $('yearInput').value, initRegistrationOverlay, {'haltReload':haltReload});
}

function newsletterAgeDiff() { 
	
	var diff = getDiff();
	
	if (diff < 0)
		showError();
	else if (diff >= 14)
	{
		cancelOverlay();
		popitup('http://exodus.spongebob.com/site/signup','newsletter','height=500,width=500');
	}
	else
	{
		cancelOverlay();
		popitup('http://exodus.nick.spongebob.com/site/signup','newsletter','height=500,width=500');
	}
}

function getDiff()
{
	var today = new Date();
	var D1 = ReadISO8601date(today.getFullYear() + "-" + (doubleDigit(today.getMonth() + 1)) + "-" + doubleDigit(today.getDate())) ; if (D1<0) {/*alert("Date 1 bad")*/; return -1; }
	var D2 = ReadISO8601date($('yearInput').value + "-" + $('monthInput').value + "-" + $('dateInput').value) ; if (D2<0) {/*alert("Date 2 bad")*/; return -1;}
	var diff = (D1[0]-D2[0]) - (D1[1]*100 + D1[2] < D2[1]*100 + D2[2]);
	
	return diff;
}
	
function doubleDigit(num) {
	if (num.toString().length < 2)
		return "0" + num;
	else
		return num;
}
/* END --JS for age check: AgeCheckOverlay.ftl */

/* START -- JS for SendToFriend */
function validateSendToFriend (form) {
	iteration = 0;
	$('failMsg').style.display = "none";
	$('badwordMsg').style.display = "none";
	$('bademailMsg').style.display = "none";
	$('emailSentMsg').style.display = "none";
	$('badnameMsg').style.display = "none";
	
	
	if($(form).getElements('input[name$=name]')[0].value == "")
	{
		$('failMsg').style.display = "block";
		$('badnameMsg').style.display = "block";
		$('yourname').className = "";
		$('yourname').className = "textboxerror";
	}
	else
	{
		$('yourname').className = "";
		$('yourname').className = "textboxwrapper";
	}
		
	if($(form).getElements('input[name$=name]')[1].value == "")
	{
		$('failMsg').style.display = "block";
		$('badnameMsg').style.display = "block";
		$('friendsname').className = "";
		$('friendsname').className = "textboxerror";
	}
	else
	{
		$('friendsname').className = "";
		$('friendsname').className = "textboxwrapper";
	}
		
	if ((!validateEmail($(form).getElements('input[name$=email]')[0].value))) {
		$('failMsg').style.display = "block";
		$('bademailMsg').style.display = "block";
		$('friendsemail').className = "";
		$('friendsemail').className = "textboxerror";
	}
	else {
		$('friendsemail').className = "";
		$('friendsemail').className = "textboxwrapper";
	}
	
	var wf = new WordFilter ({
		onGoodWord: function (response){
			if($('badnameMsg').style.display == "none")
			{
				$($(form).getElements('input[name$=name]')[iteration].name).className = "";
				$($(form).getElements('input[name$=name]')[iteration].name).className = "textboxwrapper";
			}
			iteration++;
			if (iteration < 2)
				this.send($(form).getElements('input[name$=name]')[iteration].value);
			else if($('failMsg').style.display == "none")
				sendEmailToFriend(form);
		},
		onBadWord: function (response) {
			$($(form).getElements('input[name$=name]')[iteration].name).className = "";
			$($(form).getElements('input[name$=name]')[iteration].name).className = "textboxerror";
			$('failMsg').style.display = "block";
			$('badwordMsg').style.display = "block";
			iteration++;
			this.send($(form).getElements('input[name$=name]')[iteration].value);
		}
	}).send($(form).getElements('input[name$=name]')[iteration].value);
}

function sendEmailToFriend(form){
	$('failMsg').style.display = "none";
	$('emailSentMsg').style.display = "block";
	
	var jsonp = new MooJsonP(
			'http://' + SBCOM.utils.getNickDomain() + '/sbcom/data/sendToFriend/send.jhtml',
			{
				queryString:flatForm(document.getElementById(form)) + "&deepLink=" + window.location.href,
				onComplete:function (response){
					alert("email sent");
				}
			}).request();
}
/* END -- JS for SendToFriend */

/* START -- JS for ForgotFlusPassword.ftl */
function initFluxForgotPwd(elements) {
	if(!elements) return;

	elements.each(function(element) {
		if(element.get('id') == 'emailField') {
			element.focus();
			element.addEvent("keypress", doExecuteFluxPwd);
		}
	});
}

function doExecuteFluxPwd(event) {
	if(!isEnterKey(event)) return;

	sendFluxEmail('forgotFluxPassword');
	Event.stop(event);
}


function sendFluxEmail(form) {
	getJSON("/ajax/forgot/fluxPassword/", flatForm(document.getElementById(form)), handleFluxFP);
}

function handleFluxFP(response){
	if (response.success == "false")
		$('failMsg').style.display = "block";
	else
		doRemoveLoader();
}
/* END -- JS for ForgotFlusPassword.ftl */

/* START -- JS for ForgotNickPassword */
var step = 0;
var questionData = new Object();

function initNickForgotPwd(elements) {
	if(!elements) return;
	
	step = 0;
	questionData = new Object();
	
	elements.each(function(element) {
		if((element.get('id') == 'usernameField')||(element.get('id') == 'answerField')){
			element.addEvent("keypress", doExecuteNickPwd);
		}
	});
}

function doExecuteNickPwd(event) {
	if(!isEnterKey(event)) return;

	execute();
	
	Event.stop(event);
}

function execute() {
	SBCOM.utils.doLog("execute called: " + step);
	if (step == 0) {
		step = 1;
		getJSON("/auth/forgotPassword/13/GetQuestion/", flatForm(document.getElementById('getQuestion')), handleGetQuestion);
	}
	else if (step == 1) {
		step = 2;
		getJSON("/auth/forgotPassword/13/GetPassword/", flatForm(document.getElementById('getAnswer')) + "questionid=" + questionData.questionid +"&username=" + questionData.screenName + "&", handleGetAnswer);
	}
}

function handleGetQuestion(sts) {
	if (sts.questionid != undefined) {
		$('secretQuestion').set('html', sts.question);
		showNext(step, sts);
	}
	else {
		step = 0;
		showErrorMessage("Invalid NickName!")
	}
}

function handleGetAnswer(sts) {
	if (sts && sts.valid == "true") 
	{
		showNext(step, sts);
	}
	else 
	{
		step = 1;
		showErrorMessage("Wrong Answer!")
	}
}

function showErrorMessage(msg){
	$('failMsg').style.display = "block";
	$('failMsg').set('html', "Error: " + msg);
}

function showNext(index, sts) {
	if (index == 1) {
		$('failMsg').style.display = "none";
		$('getQuestionDiv').style.display = "none";
		$('getAnswerDiv').style.display = "block";
	}
	else if (index == 0) {
		$('getAnswerDiv').style.display = "none";
		$('getQuestionDiv').style.display = "block";
	}
	else if (index == 2) {
		$('failMsg').style.display = "none";
		$('getAnswerDiv').style.display = "none";
		$('getQuestionDiv').style.display = "none";
		$('yourPassword').style.display = "block";
		$('yourPassword').set('html', "Your Password: " + sts.password);
		$('NickForgotSubmitBtn').setStyle('display', 'none');
	}		
}


/* END -- JS for ForgotNickPassword */

function downloadSong(){
	var url = "/downloads/songs/SpongeBob-Theme.zip";
	document.location.href= url;
	trackEvent("Theme Song Download");
}