//-----------------------------------------------------------------------------
// Validates Registration Form
//-----------------------------------------------------------------------------

// GLOBAL VARIABLES

var currentPage = 1;

var sUNF = "'First Name'";
var sUNL = "'Last Name'";
var sUEA = "'E-Mail'";
var sULN = "'Logon Name'";
var sULA = "'License Agreement'";

var sSPID = "'Subscription Period'";

var sUPN = "'Code Number'";

var sUCCN = "'Credit Card Number'";
var sUCM = "'Card Expires Month'";
var sUCY = "'Card Expires Year'";
var sUCV = "'Card Security Code'";
var sUCN = "'Cardholder's Name'";
var sUCA = "'Billing Address'";
var sUCC = "'Billing City'";
var sUCS = "'Billing State'";
var sUCU = "'Billing Country'";
var sUCZ = "'Billing Postal Code'";

//-----------------------------------------------------------------------------
function initPage() {
	var userType = getUrlParameterValue("UT");

	if ( userType == 'E' ) {
		MM_showHideLayers("userInfo", "", "hide");
		MM_showHideLayers("existingUserInfo", "", "show");
	} else {
		MM_showHideLayers("userInfo", "", "show");
		MM_showHideLayers("existingUserInfo", "", "hide");
	}
}

//-----------------------------------------------------------------------------
function goNext(totalPages) {
	var userType = getUrlParameterValue("UT");
	var paymentMethod = getUrlParameterValue("PM");

	if ( paymentMethod == 'CARD' ) {
		goNext_CreditCard(totalPages);
	} else if ( paymentMethod == 'CODE' ) {
		submitRegistrationForm();
	}
}

//-----------------------------------------------------------------------------
function goPrevious(totalPages) {
	goPrevious_CreditCard(totalPages);
}

//-----------------------------------------------------------------------------
function goNext_CreditCard(totalPages) {
	switch ( currentPage ) {
		case 1: { if ( validateUserInfo() ) { showSubscriptionPeriodInfo(); break; } else { return; } }
		case 2: { if ( validateSubscriptionPeriodInfo() ) { showBillingInfo(); break; } else { return; } }
		case 3: { if ( validateBillingInfo() ) { submitRegistrationForm(); break; } else { return; } }

		default: { alert("Could not go to next page: unexpected page number (" + currentPage + ")."); return; }
	}
	currentPage++;
	if ( currentPage <= totalPages ) { MM_setTextOfLayer("pageNum", "", "Page " + currentPage + " of " + totalPages); }
}

//-----------------------------------------------------------------------------
function goPrevious_CreditCard(totalPages) {
	switch ( currentPage ) {
		case 1: { alert("Could not go to previous page: first page of form."); return; }
		case 2: { showUserInfo(); break; }
		case 3: { showSubscriptionPeriodInfo(); break; }

		default: { alert("Could not go to previous page: unexpected page number (" + currentPage + ")."); return; }
	}
	currentPage--;
	if ( currentPage <= totalPages ) { MM_setTextOfLayer("pageNum", "", "Page " + currentPage + " of " + totalPages); }
}

//-----------------------------------------------------------------------------
function showUserInfo() {
	var userType = getUrlParameterValue("UT");

	if ( userType == 'E' ) {
		MM_showHideLayers("userInfo", "", "hide");
		MM_showHideLayers("existingUserInfo", "", "show");
	} else {
		MM_showHideLayers("userInfo", "", "show");
		MM_showHideLayers("existingUserInfo", "", "hide");
	}
	
	MM_showHideLayers("subscriptionPeriodInfo", "", "hide");
	MM_showHideLayers("billingInfo", "", "hide");
	MM_showHideLayers("previous", "", "hide");
	MM_showHideLayers("next", "", "show");
}

//-----------------------------------------------------------------------------
function showSubscriptionPeriodInfo() {
	MM_showHideLayers("userInfo", "", "hide");
	MM_showHideLayers("existingUserInfo", "", "hide");
	MM_showHideLayers("subscriptionPeriodInfo", "", "show");
	MM_showHideLayers("billingInfo", "", "hide");
	MM_showHideLayers("previous", "", "show");
	MM_showHideLayers("next", "", "show");
}

//-----------------------------------------------------------------------------
function showBillingInfo() {
	MM_showHideLayers("userInfo", "", "hide");
	MM_showHideLayers("existingUserInfo", "", "hide");
	MM_showHideLayers("subscriptionPeriodInfo", "", "hide");
	MM_showHideLayers("billingInfo", "", "show");
	MM_showHideLayers("previous", "", "show");
	MM_showHideLayers("next", "", "show");
}


//-----------------------------------------------------------------------------
// Validation Routines
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
function validateUserInfo() {
	var status = false;
	var userForm = MM_findObj("userForm");
	var existingForm = MM_findObj("existingUserForm");
	var userType = getUrlParameterValue("UT");
	var paymentMethod = getUrlParameterValue("PM");
	if ( userType == "E" ) {
		if ( checkString(existingForm.elements['ULN'], sULN) && checkString(existingForm.elements['UEA'], sUEA) ) {
			if ( paymentMethod == "CODE" ) {
				if ( checkString(existingForm.elements['UPN'], sUPN) ) {
					status = true;
				}
			} else {
				status = true;
			}
		}
	} else {
		if ( checkString(userForm.elements['U_N_F'], sUNF) && checkString(userForm.elements['U_N_L'], sUNL) && 
			  checkString(userForm.elements['U_L_N'], sULN) && checkString(userForm.elements['U_E_A'], sUEA) && checkEmail(userForm.elements['U_E_A']) ) {
			if ( paymentMethod == "CODE" ) {
				if ( checkString(userForm.elements['U_P_N'], sUPN) ) {
					status = true;
				}
			} else {
				status = true;
			}
		}
	}

	return status;
}

//-----------------------------------------------------------------------------
function validateSubscriptionPeriodInfo() {
	var status = false;
	var subForm = MM_findObj("subscriptionPeriodForm");

	if ( getRadioButtonValue(subForm.elements['SP_ID']) ) {
		status = true;
	}

	return status;
}

//-----------------------------------------------------------------------------
function validateBillingInfo() {
	var status = false;
	var billingForm = MM_findObj("billingForm");

	if (
		checkString(billingForm.elements['U_P_N'], sUCCN) &&
		checkString(billingForm.elements['U_C_V'], sUCV) &&
		checkString(billingForm.elements['U_C_N'], sUCN) &&
		checkString(billingForm.elements['U_C_A'], sUCA) &&
		checkString(billingForm.elements['U_C_C'], sUCC) &&
		checkString(billingForm.elements['U_C_S'].options[billingForm.elements['U_C_S'].selectedIndex], sUCS) &&
		checkString(billingForm.elements['U_C_U'].options[billingForm.elements['U_C_U'].selectedIndex], sUCU) &&
		checkString(billingForm.elements['U_C_Z'], sUCZ) ) {
		
		if ( checkCreditCard(billingForm.elements['U_C_T'], billingForm.elements['U_P_N']) ) {
			if ( checkString(billingForm.elements['U_C_M'].options[billingForm.elements['U_C_M'].selectedIndex], sUCM) &&
				 checkString(billingForm.elements['U_C_Y'].options[billingForm.elements['U_C_Y'].selectedIndex], sUCY) ) {
				status = true;
			}
		}
	}

	return status;
}

//-----------------------------------------------------------------------------
// Form Submission Routines
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
function submitRegistrationForm() {
	MM_showHideLayers("previous", "", "hide");
	MM_showHideLayers("next", "", "hide");

	var paymentMethod = getUrlParameterValue("PM");

	if ( paymentMethod == 'CARD' ) {
		submitCreditCard();
	} else if ( paymentMethod == 'CODE' ) {
		submitAccessCode();
	}
}

//-----------------------------------------------------------------------------
function submitCreditCard() {
	var dataForm = MM_findObj("dataForm");
	var userForm = MM_findObj("userForm");
	var existingForm = MM_findObj("existingUserForm");
	var subForm = MM_findObj("subscriptionPeriodForm");
	var billForm = MM_findObj("billingForm");
	var userType = getUrlParameterValue("UT");

	if ( userType == 'E' ) {
		// existing
		dataForm.elements['U_L_N'].value = existingForm.elements['ULN'].value;
		dataForm.elements['U_E_A'].value = existingForm.elements['UEA'].value;
	} else {
		// new
		dataForm.elements['U_N_F'].value = userForm.elements['U_N_F'].value;
		dataForm.elements['U_N_L'].value = userForm.elements['U_N_L'].value;
		dataForm.elements['U_L_N'].value = userForm.elements['U_L_N'].value;
		dataForm.elements['U_E_A'].value = userForm.elements['U_E_A'].value;
		dataForm.elements['U_L_A'].value = userForm.elements['U_L_A'].value;
	}

	dataForm.elements['SP_ID'].value = getRadioButtonValue(subForm.elements['SP_ID']);

	dataForm.elements['U_C_T'].value = getRadioButtonValue(billForm.elements['U_C_T']);
	dataForm.elements['U_P_N'].value = billForm.elements['U_P_N'].value;
	dataForm.elements['U_C_M'].value = billForm.elements['U_C_M'].value;
	dataForm.elements['U_C_Y'].value = billForm.elements['U_C_Y'].value;
	dataForm.elements['U_C_V'].value = billForm.elements['U_C_V'].value;
	dataForm.elements['U_C_N'].value = billForm.elements['U_C_N'].value;
	dataForm.elements['U_C_A'].value = billForm.elements['U_C_A'].value;
	dataForm.elements['U_C_C'].value = billForm.elements['U_C_C'].value;
	dataForm.elements['U_C_S'].value = billForm.elements['U_C_S'].value;
	dataForm.elements['U_C_U'].value = billForm.elements['U_C_U'].value;
	dataForm.elements['U_C_Z'].value = billForm.elements['U_C_Z'].value;

	dataForm.submit();
}

//-----------------------------------------------------------------------------
function submitAccessCode() {
	var dataForm = MM_findObj("dataForm");
	var userForm = MM_findObj("userForm");
	var existingForm = MM_findObj("existingUserForm");
	var userType = getUrlParameterValue("UT");

	if ( userType == 'E' ) {
		// existing
		dataForm.elements['U_L_N'].value = existingForm.elements['ULN'].value;
		dataForm.elements['U_E_A'].value = existingForm.elements['UEA'].value;
		dataForm.elements['U_P_N'].value = existingForm.elements['UPN'].value;
	} else {
		// new
		dataForm.elements['U_N_F'].value = userForm.elements['U_N_F'].value;
		dataForm.elements['U_N_L'].value = userForm.elements['U_N_L'].value;
		dataForm.elements['U_L_N'].value = userForm.elements['U_L_N'].value;
		dataForm.elements['U_E_A'].value = userForm.elements['U_E_A'].value;
		dataForm.elements['U_L_A'].value = userForm.elements['U_L_A'].value;
		dataForm.elements['U_P_N'].value = userForm.elements['U_P_N'].value;
	}

	dataForm.submit();
}

//-----------------------------------------------------------------------------
// Gets value of a URL parameter
//-----------------------------------------------------------------------------
function getUrlParameterValue(paramName) {
	// get paramters from url
	queryString = document.location.search;

	// strip question mark
	if ( queryString.indexOf("?") != -1 ) { queryString = queryString.slice(1); }

	// split arguments based on ampersand
	keyValuePairs = queryString.split('&');

	// loop through key-value pairs
	value = '';
	for ( var i = 0; i < keyValuePairs.length; i++ ) {
		if ( keyValuePairs[i].slice(0, keyValuePairs[i].indexOf('=')) == paramName ) {
			value = keyValuePairs[i].slice(keyValuePairs[i].indexOf('=') + 1);
			break;
		}
	}

	// return value from key-value pair
	return (value.length > 0 ? unescape(value).split(',') : '');
}
