// --------------------------------------------------------------------------------
// sm_Application.js
// Travis Musika 2005-11-17
// Contains Javascript relevant to the SubscriptionManager.
// --------------------------------------------------------------------------------

var fieldPrefix = "tmpl_smApp_sm_";

// cancel flag
var sm_cancelled = false;

// --- Attach JS to document elements and execute simple statements. ---
ow_f_AppendLoadEvent(
function() {

	if (document.getElementById(fieldPrefix + "sm_btnOK") != null) ow_f_AddEvent(document.getElementById(fieldPrefix + "sm_btnOK"), "click", sm_formSubmitClicked, false);
	if (document.getElementById(fieldPrefix + "sm_btnOKImage") != null) ow_f_AddEvent(document.getElementById(fieldPrefix + "sm_btnOKImage"), "click", sm_formSubmitClicked, false);
		if (document.getElementById(fieldPrefix + "sm_txtEmail") != null) ow_f_AddEvent(document.getElementById(fieldPrefix + "sm_txtEmail"), "focus", sm_emailFocus, false);

	if (document.getElementById("sm_form") != null) {
		var inp = document.getElementById("sm_form").getElementsByTagName("input");
		for (var i = 0; i < inp.length; i++) {
			if (inp[i].type == "text") 
				ow_f_AddEvent(inp[i], "keypress", sm_formTextSubmit, false);
		}
	}    	
}
);

// --------------------------------------------------------------------------------
// sm_formTextSubmit()
// Fires when a textfield had focus and ENTER was pressed.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function sm_formTextSubmit(e) {

	var code;
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;

	if (code == 13) {
		var sm_btnOK = document.getElementById(fieldPrefix + "sm_btnOK");
		if (sm_btnOK != null) sm_btnOK.click();
		if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
	}
}

// --------------------------------------------------------------------------------
// sm_formSubmitClicked()
// Fires when the submit button was clicked.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function sm_formSubmitClicked(e) {

	if (!sm_checkRequestData()) {
		if (!e) var e = window.event;
		if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
	} else {
		return;
	}
}

// --------------------------------------------------------------------------------
// sm_checkRequestData()
// Validates the data entered on the order page.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- the results of the validation [boolean]
// --------------------------------------------------------------------------------

function sm_checkRequestData()
{
	// return if the cancel button is clicked
	if (sm_cancelled)
		return true;
	
	// ensure at least one subscription is chosen
	var sm_cvSubscriptions = document.getElementById(fieldPrefix + "sm_cvSubscriptions"); 
	if (sm_cvSubscriptions != null) {
		var sm_subscriptiontypes = ow_f_GetElementsByClassName("sm_subscriptiontype", "div");
		if (sm_subscriptiontypes.length > 0) {
			var subAvailable, subChecked;
			for (var i = 0; i < sm_subscriptiontypes.length; i++) {
				var sm_chkSubscriptions = sm_subscriptiontypes[i].getElementsByTagName("input");
				for (var j = 0; j < sm_chkSubscriptions.length; j++) {
					if (sm_chkSubscriptions[j] != null && sm_chkSubscriptions[j].getAttribute("type").toLowerCase() == "checkbox") {
						subAvailable = true;
						if (sm_chkSubscriptions[j].checked)
							subChecked = true;
					}
					if (subChecked)
						break;
				}
				if (subChecked)
					break;
			}
			
			// show message if not one subscription is checked
			if (subAvailable && !subChecked) {
				alert(sm_cvSubscriptions.value);
				return false;
			}
		}
	}
	
		
	var sm_txtFirstName = document.getElementById(fieldPrefix + "sm_txtFirstName");
	if (sm_txtFirstName != null)
		if (sm_txtFirstName.value.length == 0) {
			alert(document.getElementById(fieldPrefix + "sm_rfvFirstName").value);
			sm_txtFirstName.focus();
			return false;
		}
		
	var sm_txtLastName = document.getElementById(fieldPrefix + "sm_txtLastName");
	if (sm_txtLastName != null)
		if (sm_txtLastName.value.length == 0) {
			alert(document.getElementById(fieldPrefix + "sm_rfvLastName").value);
			sm_txtLastName.focus();
			return false;
		}

	var em_re = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var sm_txtEmail = document.getElementById(fieldPrefix + "sm_txtEmail");
	if (sm_txtEmail != null)
		if (sm_txtEmail.value.length == 0) {
			alert(document.getElementById(fieldPrefix + "sm_rfvEmail").value);
			sm_txtEmail.focus();
			return false;
		} else {
			if (!sm_txtEmail.value.match(em_re)) {
				alert(document.getElementById(fieldPrefix + "sm_regvEmail").value);
				sm_txtEmail.focus();
				sm_txtEmail.select();
				return false;
			}
		}

	//check province and country match
	var can_prov = "AB,BC,MB,NB,NL,NS,NT,NU,ON,PE,QC,SK,YT";
	var int_prov = "ZZ";
	var sm_lstProvince = document.getElementById(fieldPrefix + "sm_lstProvince");
	var sm_lstCountry = document.getElementById(fieldPrefix + "sm_lstCountry");
	
	if (sm_lstCountry != null)   //field is being shown; implies province exists too
	{
	   //check selected value
	   var sel_country = sm_lstCountry.options[sm_lstCountry.selectedIndex].value;
	   var sel_province = sm_lstProvince.options[sm_lstProvince.selectedIndex].value;
	   
	   //country but no province
	   if (sel_country != "" && sel_province == "")
	   {
	        alert(document.getElementById(fieldPrefix + "sm_rfvProvince").value);
	        sm_lstProvince.focus();
	        return false;
	   }
	   
	   //province but no country
	   if (sel_country == "" && sel_province != "")
	   {
	        alert(document.getElementById(fieldPrefix + "sm_rfvCountry").value);
	        sm_lstCountry.focus();
	        return false;
	   }
	   
	   //both blank
	   if (sel_country == "" && sel_province == "") return true;
	   
	   //some sordid combination
	   switch (sel_country)
	   {
	      case "CA":
	         //Canada; must choose a Canadian province
	         if (can_prov.indexOf(sel_province) == -1)
	         {
	            //user hasn't selected a Canadian province
	            alert(document.getElementById(fieldPrefix + "sm_rfvProvince").value);
	            sm_lstProvince.focus();
	            return false;
	         }
	         break;
	         
	      case "US":
	         //united states; must choose a state
	         if (can_prov.indexOf(sel_province) > -1 || sel_province == int_prov)
	         {
	            //user hasn't selected an American state
	            alert(document.getElementById(fieldPrefix + "sm_rfvProvince").value);
	            sm_lstProvince.focus();
	            return false;
	         }
	         break;
	         
	      default:
	         //international; user must choose International province
	         if (sel_province != int_prov)
	         {
	            //user hasn't selected international province
	            alert(document.getElementById(fieldPrefix + "sm_rfvProvince").value);
	            sm_lstProvince.focus();
	            return false;
	         }
	         break;
	   }  //end switch
	}  //end country-province check
	
	return true;	

}

function sm_emailFocus() {
	var sm_txtEmail = document.getElementById(fieldPrefix + "sm_txtEmail");
	if (sm_txtEmail != null) {
		if (sm_txtEmail.value == "email address") {
			sm_txtEmail.value = "";
		}
	}
}