//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Written by PaulH, Feb 25, 2009
// Functions for data collection, validation and error handling for the right
// 	rail modules
// If data passes, then server side scripts are called using jQuery.post();
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//  shared functions - for date fields, email and password
//					 - unique fields are handled in the module functions
//---------------------------------------------------------------------------
// validation functions - return error messages for incomplete or bad entries
//---------------------------------------------------------------------------
function validateDate(iMonth, iDay, iYear)
{
	var sErr;
	sErr = "";
	
	switch(true)
	{
		case (isNaN(parseInt(iMonth))):
		case (iMonth < 1):
		case (iMonth > 12):
			iMonth = null;
			break;
		default:
			break;
	}
	if(iMonth == null)
		sErr = sErr + "Must select a month\n";
		
	switch(true)
	{
		case (isNaN(parseInt(iDay))):
		case (iDay < 1):
		case (iDay > 31):
			iDay = null;
			break;
		default:
			break;
	}
	if(iDay == null)
		sErr = sErr + "Must select a day\n";

	var sToday = new Date();
	switch(true)
	{
		case (isNaN(parseInt(iYear))):
		case (iYear < (sToday.getFullYear() - 2)):
		case (iYear > (sToday.getFullYear() + 1)):
			iYear = null;
			break;
		default:
			break;
	}
	if(iYear == null)
		sErr = sErr + "Must select a year\n";

	return sErr;
}

function validateEmailAndPassword(sEmail,sPassword)
{
	var sErr;
	sErr = "";
	//validate email address
	var reEmail = new RegExp("^.+@.+\.[a-z]{2,4}$","igm");
	if(!reEmail.test(sEmail))
		sErr = sErr + "Must enter a valid email address\n";
	//validate password
	var rePass = new RegExp("^[^ ]{4,30}$","igm");
	if(!rePass.test(sPassword))
		sErr = sErr + "Must enter a valid password\n";

	return sErr;
}
//---------------------------------------------------------------------------
// set error colouring to indicate problem fields
//---------------------------------------------------------------------------
// setDateError returns a boolean that can be used to indicate the need to 
// colour a label or text field associates with the date
// true if errors; false if clear
function setDateError(sErr)
{
	var bFlag;
	bFlag = false;
	if(sErr.indexOf("year") > -1){
		jQuery("select[name=date_year]").css("color", "red");
		bFlag = true;
	}
	if(sErr.indexOf("day") > -1){
		jQuery("select[name=date_day]").css("color", "red");
		bFlag = true;
	}
	if(sErr.indexOf("month") > -1){
		jQuery("select[name=date_mon]").css("color", "red");
		bFlag = true;
	}
	
	return bFlag;
}

function setAllDateError()
{
	jQuery("select[name=date_year]").css("color", "red");
	jQuery("select[name=date_day]").css("color", "red");
	jQuery("select[name=date_mon]").css("color", "red");
}

function setEmailAndPasswordError(sErr)
{
	if(sErr.indexOf("email") > -1)
	{
		jQuery("#rrmod-email").css("color", "red");
		if(jQuery("#rrmod-email").val() == "")
			jQuery("#rrmod-email").attr("value", "Your email address");
	}
	if(sErr.indexOf("password") > -1)
	{
		if(jQuery("#rrmod-password").val() == ""){
			jQuery("#rrmod-password").replaceWith('<input type="text" class="text" name="rrmod-password" id="rrmod-password" value="Create a password" />');
			jQuery("#rrmod-password").focus(function(){
				jQuery("#rrmod-password").replaceWith('<input type="password" class="text" name="rrmod-password" id="rrmod-password" value="" />');
				jQuery("#rrmod-password").css("color", "#000");
				jQuery("#rrmod-password").focus();
			});
		}
		jQuery("#rrmod-password").css("color", "red");
	}
}

function setAllEmailAndPasswordError()
{
	jQuery("#rrmod-email").css("color", "red");
	jQuery("#rrmod-password").css("color", "red");
}

function setWaitCursor()
{
	jQuery("body").css("cursor", "wait");
	jQuery("#rrmod-submit:hover").css("cursor", "wait");
}
//---------------------------------------------------------------------------
// reset error colouring to normal field colouring
//---------------------------------------------------------------------------
function resetDate()
{
	jQuery("select[name=date_mon]").css("color", "#000");
	jQuery("select[name=date_day]").css("color", "#000");
	jQuery("select[name=date_year]").css("color", "#000");
}

function resetEmailAndPassword()
{
	jQuery("#rrmod-email").css("color", "#000");
	jQuery("#rrmod-password").css("color", "#000");
}

function resetWaitCursor()
{
	jQuery("body").css("cursor", "auto");
	jQuery("#rrmod-submit:hover").css("cursor", "pointer");
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//  module handling functions 
//---------------------------------------------------------------------------
function generalModule(){
	
	var sErr, sEmail, sPass, sHost, bReturn;
	sErr = "";
	sHost = window.location.hostname;
	bReturn = false;
	
	//reset error colouring------------------------------------------------
	resetEmailAndPassword();
	
	//collect data to post thru ajax/jQuery--------------------------------
	//collect email and password
	sEmail = jQuery("#rrmod-email").val();
	sPass = jQuery("#rrmod-password").val();
	
	//validate data--------------------------------------------------------
	//all of this will be repeated on server side
	//closer examination of data occurs on server side ie dates in range
	sErr = sErr + validateEmailAndPassword(sEmail,sPass);
	
	if(sErr == ""){
		jQuery.ajaxSetup({async:false});
		jQuery.post("/RightRail/general-add.asp",{check:"nurse",email:sEmail,password:sPass},
					function(data){
						resetWaitCursor();
						switch(true)
						{
							case (data.indexOf("support") > -1):
								bReturn = true;
								break;
							case (data.indexOf("address already exists") > -1):
								setAllEmailAndPasswordError();
								alert(data);
								break;
							default:
								alert(data);
								break;
						}
					});
	}
	else{
		//examine error message and colour appropriate fields for user
		if(sErr.lastIndexOf("\n") == (sErr.length - 1))
			sErr = sErr.substring(0,sErr.lastIndexOf("\n"));
			
		setEmailAndPasswordError(sErr);

		alert(sErr);
	}
	
	return bReturn;
}

function preconceptionModule(){

	var iMonth, iDay, iYear, iTrying, iCycle;
	var sErr, sEmail, sPass, sHost, bReturn;
	sErr = "";
	sHost = window.location.hostname;
	bReturn = false;
	
	//reset error colouring------------------------------------------------
	jQuery("label").css("color", "#666");
	resetDate();
	jQuery("div#date").css("color", "#666");
	resetEmailAndPassword();
	
	//collect data to post thru ajax/jQuery--------------------------------
	//collect date
	iMonth = jQuery("select[name=date_mon]").val();
	iDay = jQuery("select[name=date_day]").val();
	iYear = jQuery("select[name=date_year]").val();
	//collect date
	iTrying = jQuery("select[name=trying]").val();
	//collect email and password
	sEmail = jQuery("#rrmod-email").val();
	sPass = jQuery("#rrmod-password").val();
	
	//validate data--------------------------------------------------------
	//all of this will be repeated on server side
	//closer examination of data occurs on server side ie dates in range
	sErr = sErr + validateDate(iMonth, iDay, iYear);
	sErr = sErr + validateEmailAndPassword(sEmail,sPass);

	if(sErr == ""){
		setWaitCursor();
		jQuery.ajaxSetup({async:false});
		jQuery.post("/RightRail/preconception-add.asp",
					{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,trying:iTrying},
					function(data){
						resetWaitCursor();
						switch(true)
						{
							case (data.indexOf("support") > -1):
								bReturn = true;
								break;
							case (data.indexOf("thank you") > -1):
								window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=preconception"
								break;
							case (data.indexOf("already subscribed") > -1):
								alert(data);
								window.location.reload();
								break;
							case (data.indexOf("profile conflict") > -1):
								var sPStatus = data.substring(data.indexOf(":") + 1)
								var bProceed = confirm("Your profile indicates that you are " + sPStatus + ".\n\nBy signing up for this newsletter your profile and newsletter preferences will be changed to Trying To Conceive.\n\nDo you wish to continue?");
								if(bProceed){
									setWaitCursor();
									jQuery.post("/RightRail/preconception-update.asp",
												{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,trying:iTrying},
												function(data){
													resetWaitCursor();
													if(data.indexOf("thank you") > -1){
														window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=preconception"
													}
													else{
														alert(data);
													}
												});
								}
								else{
									window.location.reload();
								}
								break;
							case (data.indexOf("address already exists") > -1):
								setAllEmailAndPasswordError();
								alert(data);
								break;
							case (data.indexOf("date that is today") > -1):
								setAllDateError();
								alert(data);
								break;
							default:
								alert(data);
								break;
						}
					});
	}
	else{
		//examine error message and colour appropriate fields for user
		if(sErr.lastIndexOf("\n") == (sErr.length - 1))
			sErr = sErr.substring(0,sErr.lastIndexOf("\n"));
			
		setEmailAndPasswordError(sErr);
		if(setDateError(sErr))
			jQuery("div#date").css("color", "red");

		alert(sErr);
	}
	
	return bReturn;
}

function pregnancyModule(){

	var sDateType, iMonth, iDay, iYear;
	var sErr, sEmail, sPass, sHost, bReturn;
	sErr = "";
	sHost = window.location.hostname;
	bReturn = false;
	
	//reset error colouring-------------------------------------------------
	jQuery("label").css("color", "#666");
	resetDate();
	resetEmailAndPassword();
	
	//collect data to post thru ajax/jQuery---------------------------------
	//collect radio button value
	if(jQuery("#conception:checked").val()){
		sDateType = jQuery("#conception:checked").val();
	}
	else if(jQuery("#period:checked").val()){
		sDateType = jQuery("#period:checked").val();
	}
	else if(jQuery("#due:checked").val()){
		sDateType = jQuery("#due:checked").val();
	}
	//collect date
	iMonth = jQuery("select[name=date_mon]").val();
	iDay = jQuery("select[name=date_day]").val();
	iYear = jQuery("select[name=date_year]").val();
	//collect email and password
	sEmail = jQuery("#rrmod-email").val();
	sPass = jQuery("#rrmod-password").val();
	
	//validate data----------------------------------------------------------
	//all of this will be repeated on server side
	//closer examination of data occurs on server side ie dates in range
	switch(sDateType)
	{
		case "conception":
		case "period":
		case "due":
			break;
		default:
			sDateType = null;
			break;
	}
	if(sDateType == null)
		sErr = "Must choose a date type\n";
	sErr = sErr + validateDate(iMonth, iDay, iYear);
	sErr = sErr + validateEmailAndPassword(sEmail,sPass);

	if(sErr == ""){
		setWaitCursor();
		jQuery.ajaxSetup({async:false});
		jQuery.post("/RightRail/pregnancy-add.asp",
					{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,dateFor:sDateType},
					function(data){
						resetWaitCursor();
						switch(true)
						{
							case (data.indexOf("support") > -1):
								bReturn = true;
								break;
							case (data.indexOf("thank you") > -1):
								window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=pregnancy"
								break;
							case (data.indexOf("already subscribed") > -1):
								alert(data);
								window.location.reload();
								break;
							case (data.indexOf("profile conflict") > -1):
								var sPStatus = data.substring(data.indexOf(":") + 1)
								var bProceed = confirm("Your profile indicates that you are " + sPStatus + ".\n\nBy signing up for this newsletter your profile and newsletter preferences will be changed to Pregnant.\n\nDo you wish to continue?");
								if(bProceed){
									setWaitCursor();
									jQuery.post("/RightRail/pregnancy-update.asp",
												{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,dateFor:sDateType},
												function(data){
													resetWaitCursor();
													if(data.indexOf("thank you") > -1){
														window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=pregnancy"
													}
													else{
														alert(data);
													}
												});
								}
								else{
									window.location.reload();
								}
								break;
							case (data.indexOf("address already exists") > -1):
								setAllEmailAndPasswordError();
								alert(data);
								break;
							case (data.indexOf("date that is today") > -1):
								setAllDateError();
								alert(data);
								break;
							default:
								alert(data);
								break;
						}
					});
	}
	else{
		//examine error message and colour appropriate fields for user
		if(sErr.lastIndexOf("\n") == (sErr.length - 1))
			sErr = sErr.substring(0,sErr.lastIndexOf("\n"));
			
		setDateError(sErr);
		setEmailAndPasswordError(sErr);
		if(sErr.indexOf("date type") > -1)
			jQuery("label").css("color", "red");

		alert(sErr);
	}
	
	return bReturn;
}

function newbabyModule(){

	var sName, iMonth, iDay, iYear;
	var sErr, sEmail, sPass, sHost, bReturn;
	sErr = "";
	sHost = window.location.hostname;
	bReturn = false;
	
	//reset error colouring---------------------------------------------
	jQuery("#label-name").css("color", "#666");
	jQuery("#label-date").css("color", "#666");
	resetDate();
	resetEmailAndPassword();
	
	//collect data to post thru ajax/jQuery-----------------------------
	//collect name
	sName = jQuery("#baby-name").val();
	//collect date
	iMonth = jQuery("select[name=date_mon]").val();
	iDay = jQuery("select[name=date_day]").val();
	iYear = jQuery("select[name=date_year]").val();
	//collect email and password
	sEmail = jQuery("#rrmod-email").val();
	sPass = jQuery("#rrmod-password").val();
	
	//validate data-----------------------------------------------------
	//all of this will be repeated on server side
	//closer examination of data occurs on server side ie dates in range
	if(sName.length < 1)
		sErr = "Must enter a name\n";
	sErr = sErr + validateDate(iMonth, iDay, iYear);
	sErr = sErr + validateEmailAndPassword(sEmail,sPass);

	if(sErr == ""){
		setWaitCursor();
		jQuery.ajaxSetup({async:false});
		jQuery.post("/RightRail/new-baby-add.asp",
					{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,child:sName},
					function(data){
						resetWaitCursor();
						switch(true)
						{
							case (data.indexOf("support") > -1):
								bReturn = true;
								break;
							case (data.indexOf("thank you") > -1):
								window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=Baby"
								break;
							case (data.indexOf("already subscribed") > -1):
								alert(data);
								window.location.reload();
								break;
							case (data.indexOf("Birth dates don't match") > -1):
								setAllDateError();
								var sDates = data.substring(data.indexOf(":") + 1)
								var bProceed = confirm("This child is already in your profile but with a different birth date.\n\nDo you want to update this child's birth date " + sDates + "?");
								if(bProceed){
									resetDate();
									setWaitCursor();
									jQuery.post("/RightRail/new-baby-update.asp",
												{check:"nurse",email:sEmail,password:sPass,month:iMonth,day:iDay,year:iYear,child:sName},
												function(data){
													resetWaitCursor();
													if(data.indexOf("thank you") > -1){
														window.location = "http://" + sHost + "/user/UserInter.asp?from=rrmod&action=Thanks&user=Baby"
													}
													else{
														alert(data);
													}
												});
								}
								break;
							case (data.indexOf("younger than 104 weeks") > -1):
								setAllDateError();
								alert(data);
								break;
							case (data.indexOf("date that is today") > -1):
								setAllDateError();
								alert(data);
								break;
							default:
								alert(data);
								break;
						}
					});
	}
	else{
		//examine error message and colour appropriate fields for user
		if(sErr.lastIndexOf("\n") == (sErr.length - 1))
			sErr = sErr.substring(0,sErr.lastIndexOf("\n"));
		
		if(sErr.indexOf("name") > -1)
			jQuery("#label-name").css("color", "red");
		if(setDateError(sErr))
			jQuery("#label-date").css("color", "red");
		setEmailAndPasswordError(sErr);

		alert(sErr);
	}
	
	return bReturn;
}