
// if jQuery is included
if(typeof(jQuery) === 'function') {
	
	
	
	var _EHCorp = {
		reg:{
			appendAffiliateTracking:function(){
				var dList = location.search.substring(1);
				var dAr = dList.split("&");
				var rAr = new Array();
				var tval = 0;
				for (var i=0;i<dAr.length;i++) {
					rAr = dAr[i].split("=");
					if (rAr.length == 2) {
						rAr[0] = rAr[0].replace( new RegExp('[^a-zA-Z0-9-_]+', 'g'), '' );
						rAr[1] = rAr[1].replace( new RegExp('[^a-zA-Z0-9-_]+', 'g'), '' );
						
						rAr[0] = rAr[0].substr( 0, 70 );
						rAr[1] = rAr[1].substr( 0, 70 );
						
						// Only using case-insensitive version for comparisons
						var key = rAr[0].toLowerCase();
						
						if( key == 'name' || key == 'firstname' ) {
							$( "input[name='firstName']" ).val( unescape(rAr[1]) );
						} else if( key == 'zipcode' || key == 'postalcode' || key == 'postcode' ) {
							$( "input[name='postalCode']" ).val( unescape(rAr[1]) );
						} else if( key == 'g' || key == 'gender' ) {
							$( "select[name='gender']" ).val( unescape(rAr[1]) );
							$( "select[name='gender2']" ).val( unescape(rAr[1]) );
							$( "select[name='genderPreference']" ).val( unescape(rAr[1]) );
						} else if( key == 'country' ) {
							$( "select[name='country']" ).val( unescape(rAr[1]) );
						} else if( key == 'findeh' ) {
							$( "select[name='findEH']" ).val( unescape(rAr[1]) );
						
						// The regex kills '@' and '.', so we don't support email addresses. Take that. :P
						// If they put in an email address or a password, just do nothing.
						} else if( key == 'email' || key == 'emailaddress' || key == 'confirmemail' || key == 'password' ) {
							// Nothing.
						} else if( $("[name="+rAr[0]+"]").length ) {
							$( "[name="+rAr[0]+"]" ).val( rAr[1] );
						} else {
							$("form[name=registrationForm]").append("<input type='hidden' name='"+rAr[0]+"' value='"+rAr[1]+"' />");
						} // End if/else (  )
						
					}
				}
			},
			
			setRegAction:function(){
				$("form[name=registrationForm]").attr( "action", "https://"+document.location.host+"/singles/servlet/homeRegS" );
			},
			
			shuffleFindEHValues:function() {
				// If there is a reg form with <select name="findEH"></select>
				if( $("select[name=findEH]").length ) {
					
					// Select all the findEH options (except "Please select...")
					var options = $("select[name=findEH] option").not(":eq(0)");
					
					var tempHTML;
					var tempValue;
					var randomNumber;
					
					options.each(function(){
						
						// Choose a random option
						randomNumber = Math.floor( Math.random() * 16 ) % options.length;
						
						// Then swap HTML and values with that random option...
						// it's not the best shuffle algorithm, but it's certainly random.
						tempHTML = $(this).html();
						tempValue = $(this).val();
						$(this).html( options.eq(randomNumber).html() );
						$(this).val( options.eq(randomNumber).val() );
						options.eq(randomNumber).html( tempHTML );
						options.eq(randomNumber).val( tempValue );
			
					}); // End foreach ( options in findEH select )
				} // End if ( findEH select exists )
			}, // End function
			
			insertLandingPageTrackingValue:function() {
				var landingPageTrackingValue = '';
				
				// Checking for s.prop31
				if( typeof(s) != 'undefined' ) {
					if( typeof(s.prop31) != 'undefined' ) {
						
						landingPageTrackingValue = s.prop31;
						
					} // End if
				} // End if
				
				// Using parent-page if s.prop31 == ''
				if( landingPageTrackingValue == '' ) {
					if( typeof(sbms) != 'undefined' ) {
						if( typeof(sbms.parent) != 'undefined' ) {
							if( typeof(sbms.page) != 'undefined' ) {
								
								landingPageTrackingValue = sbms.parent + '-' + sbms.page;
								
							} // End if
						} // End if
					} // End if
				} // End if
				
				// If there is a landingPage hidden input field
				if( $("input[name=landingPage]").length ) {
					$("input[name=landingPage]").val( landingPageTrackingValue );
					
				// Else, append it to the reg form
				} else {
					$("form[name=registrationForm]").append('<input type="hidden" name="landingPage" value="'+landingPageTrackingValue+'" />');
				} // End if
			}, // End function
			
			setRegActionToLocale:function(){
				var submitDomain = document.location.host;
				switch( $("form[name=registrationForm] [name=country]").val() ){
					case "1":
						submitDomain = "www.eharmony.com";
						break;
					case "14":
						submitDomain = "www.eharmony.com.au";
						break;
					case "39":
						submitDomain = "www.eharmony.ca";
						break;
					case "215":
						// Only forward the user if they're not already on www.eharmony.co.uk
						if( submitDomain != "www.eharmony.co.uk" && submitDomain != "www-dev.eharmony.co.uk" && submitDomain != "www.compatiblepartners.net" && submitDomain != "www-dev.compatiblepartners.net" ) {
							document.location = "http://www.eharmony.co.uk/register";
						} // End if
						submitDomain = "www.eharmony.co.uk";
						break;
				}
				document.registrationForm.action = "https://"+submitDomain+"/singles/servlet/homeRegS";
			}
		
		},
		utils:{
			trim:function(s){
				return s.replace(/^\s+|\s+$/, '');
			},
			
			getParameter:function(queryString, parameterName) {
				// Add "=" to the parameter name (i.e. parameterName=value)
				var parameterName = parameterName + "=";
				
				if ( queryString.length > 0 ) {
					// Find the beginning of the string
					begin = queryString.indexOf( parameterName );
					// If the parameter name is not found, skip it, otherwise return the value
					if ( begin != -1 ) {
						// Add the length (integer) to the beginning
						begin += parameterName.length;
						// Multiple parameters are separated by the "&" sign
						end = queryString.indexOf( "&" , begin );
						if ( end == -1 ) {
							end = queryString.length
						} // End if
						
						// Return the string
						return unescape( queryString.substring ( begin, end ) );
					} // End if
				} // End if
				return "";
			} // End function
			
		},
		validation:{
			
			validateReg:function() {
				var reason = "";
				
				reason += _EHCorp.validation.checkEmpty( $("form[name=registrationForm] [name=firstName]"), "Please enter your first name." );
				reason += _EHCorp.validation.checkEmpty( $("form[name=registrationForm] [name=gender]"), "Please select your gender." );
				reason += _EHCorp.validation.checkEmpty( $("form[name=registrationForm] [name=postalCode]"), "Please enter your postal code." );
				reason += _EHCorp.validation.checkEmail( $("form[name=registrationForm] [name=emailAddress]"), $("form[name=registrationForm] input[name=confirmEmail]") );
				reason += _EHCorp.validation.checkPassword( $("form[name=registrationForm] [name=password]") );
				if( $("form[name=registrationForm] [name=findEH]").length ) {
					if( document.location.host == "www.compatiblepartners.net" || document.location.host == "www-dev.compatiblepartners.net" ) {
						reason += _EHCorp.validation.checkEmpty( $("form[name=registrationForm] [name=findEH]"), "Please select how you found out about Compatible Partners." );
					} else {
						reason += _EHCorp.validation.checkEmpty( $("form[name=registrationForm] [name=findEH]"), "Please select how you found out about eHarmony." );
					}
				}
				if( $("form[name=registrationForm] [name=terms]").length ) {
					reason += _EHCorp.validation.checkTerms( $("form[name=registrationForm] [name=terms]"), "Please select that you have read our Terms and Conditions." );
				} // End if
				
				if (reason != "") {
					_EHCorp.validation.regAlert("Some fields need correction:\n\n" + reason);
					return false;
				} else {
					return true;
				} // End if ( there are any errors )
				
			},
			
			// Overridable for unit tests
			regAlert:function( alertString ) {
				alert( alertString );
			},
			
			checkEmpty:function(field, fieldError){
				var errorMessage = "";
								
				if (field.val().length == 0) {
					field.css( 'background-color', 'Yellow' );
					errorMessage = fieldError+"\n";
				} else {
					field.css( 'background-color', 'White' );
				}
				return errorMessage;
			},
			
			checkEmail:function(field, fieldConfirm){
				var errorMessage = "";
				var tfld = _EHCorp.utils.trim( field.val() );
				var tfldConfirm = _EHCorp.utils.trim( fieldConfirm.val() );
				var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
				var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;
				
				if ( field.val() == "" ) {
					field.css( 'background-color', 'Yellow' ); 
					errorMessage = "Please enter an email address.\n";
				} else if ( !emailFilter.test(tfld) ) { //test email for illegal characters
					field.css( 'background-color', 'Yellow' ); 
					errorMessage = "Please enter a valid email address.\n";
				} else if ( field.val().match(illegalChars) ) {
					field.css( 'background-color', 'Yellow' ); 
					errorMessage = "The email address contains illegal characters.\n";
				} else {
					field.css( 'background-color', 'White' );
					fieldConfirm.css( 'background-color', 'White' );
					if (tfld != tfldConfirm) {
						errorMessage = "The confirm email address does not match.\n";
						field.css( 'background-color', 'Yellow' );
						fieldConfirm.css( 'background-color', 'Yellow' );
					}
				}
				return errorMessage;
			},
			
			checkPassword:function(field, fieldError){
				var errorMessage = "";
				
				if (field.val().length == 0) {
					field.css( 'background-color', 'Yellow' );  
					errorMessage = "Please enter a password.\n";
				} else if(field.val().length < 5) {
					field.css( 'background-color', 'Yellow' ); 
					errorMessage = "The password must be at least 5 characters.\n";
				} else {
					field.css( 'background-color', 'White' );
				}
				return errorMessage;
			},
			
			checkTerms:function(field, fieldError){
				var errorMessage = "";
								
				if ( !field.is(":checked") ) {
					errorMessage = fieldError+"\n";
				} // End if
				return errorMessage;
			}
			
		}
	};
	
	
	
	var genderSwap = {
		handle:function(){
			$("select[name=gender2]").val( $("select[name=gender] option:selected").val() );
		},
		
		createOverlay:function() {
			//append overlay scripts and styles
			$("body").append('<script type="text/javascript" src="http://static.eharmony.com:80/static/genesis/scripts/third-party/jquery/jquery.blockui.min.js?ver=1006"></script>');
			$("head").append('<link rel="stylesheet" type="text/css" href="http://static.eharmony.com/assets/corp/details/genderoverlay-2/cp-overlay.css" />');
			
			//Append overlay markup
			$("body").append('<div id="cp_confirm" style="display:none;"><div class="cp_confirm"><div><h1>Would you like to go to Compatible Partners?</h1><p>Welcome to eHarmony’s gay and lesbian dating page, <b>Compatible Partners</b>, an eHarmony service for gay and lesbian singles seeking long term relationships.</p><button type="button" class="genderpop cp_butncancel"><span>Cancel</span></button><button type="button" class="genderpop cp_butnconfirm" onclick="window.location.href=\'http://www.compatiblepartners.net/eHarmony/?cid=61953\'"><span>Confirm</span></button></div></div></div>');
			
			//IE-only overlay CSS
			if ($.browser.msie && jQuery.browser.version.substr(0,1) <= 7) {
				$("body").append('<link rel="stylesheet" type="text/css" href="http://static.eharmony.com/assets/corp/details/genderoverlay-2/cp-overlay_ie.css" />');
			} // End if ( IE )
			
			// function for when the user clicks the submit button
			$("input[type=image], button[type=submit]", $("form[name=registrationForm]")).click(function(){
				//if same gender
				if ($("select[name=gender]").val() != $("select[name=gender2]").val()) {
					//pop overlay
					$.blockUI({
						message:$('#cp_confirm'),
						css:{
							border:"none",
							backgroundColor:"transparent",
							cursor:"default"
						},
						overlayCSS:{
							backgroundColor:"#000",
							opacity:"0.4"
						}
					});
					
					//close with X
					$(".genderpop.cp_butnx,.genderpop.cp_butncancel").click($.unblockUI);
					
					//cancel click/submit
					return false;
				} // End if ( same gender )
			}); // End onclick function
		}
	};
	
	var genderSwapCP = {
		handle:function(){
			$("select[name=genderPreference]").val( $("select[name=gender] option:selected").val() );
		},
		
		createOverlay:function() {
			//append overlay scripts and styles
			$("body").append('<script type="text/javascript" src="http://static.eharmony.com:80/static/genesis/scripts/third-party/jquery/jquery.blockui.min.js?ver=1006"></script>');
			$("head").append('<link rel="stylesheet" type="text/css" href="http://static.eharmony.com/assets/cp/eh-overlay.css" />');
			
			//Append overlay markup
			$("body").append('<div id="eh_confirm" style="display:none;"><div class="eh_confirm"><div><h1>Please Confirm</h1><button type="button" class="genderpop eh_butnx"><span>Close</span></button><p>You are about to be taken to <b>eHarmony</b>, the first online service to scientifically match highly compatible singles of the <b>opposite sex</b> for long-term relationships.</p><button type="button" class="genderpop eh_butncancel"><span>Cancel</span></button><button type="button" class="genderpop eh_butnconfirm" onclick="window.location.href=\'http://www.eharmony.com/\'"><span>Confirm</span></button></div></div></div>');
			
			//IE-only overlay CSS
			if ($.browser.msie && jQuery.browser.version.substr(0,1) <= 7) {
				$("body").append('<link rel="stylesheet" type="text/css" href="http://static.eharmony.com/assets/cp/eh-overlay_ie.css" />');
			} // End if ( IE )
			
			// function for when the user clicks the submit button
			$("input[type=image], button[type=submit]", $("form[name=registrationForm]")).click(function(){
				//if same gender
				if ($("select[name=gender]").val() != $("select[name=genderPreference]").val()) {
					//pop overlay
					$.blockUI({
						message:$('#eh_confirm'),
						css:{
							border:"none",
							backgroundColor:"transparent",
							cursor:"default"
						},
						overlayCSS:{
							backgroundColor:"#000",
							opacity:"0.4"
						}
					});
					
					//close with X
					$(".genderpop.eh_butnx,.genderpop.eh_butncancel").click($.unblockUI);
					
					//cancel click/submit
					return false;
				} // End if ( same gender )
			}); // End onclick function
		}
	};

/*==================================================
jQuery DOM ready
--------------------------------------------------*/

	$(document).ready( function() {
		// If there's a reg form on this page
		if( $("form[name=registrationForm]").length ) {
			
			// Autofocus on the firstName field
			if( window.location.pathname == '/' ) {
				$("form[name=registrationForm] [name=firstName]").focus();
			}
			
			// shuffle <select name="findEH"> values
			_EHCorp.reg.shuffleFindEHValues();
			
			// append tracking to any reg form
			_EHCorp.reg.appendAffiliateTracking();
			
			// update or insert the landing page tracking hidden input
			_EHCorp.reg.insertLandingPageTrackingValue();
			
			// set reg action based on current domain
			_EHCorp.reg.setRegAction();
			
			// onsubmit reg form validation
			$("form[name=registrationForm]").submit( function() {
				return _EHCorp.validation.validateReg();
			}); // End onsubmit function
			
			// overlay
			if( document.location.host == "www.compatiblepartners.net" || document.location.host == "www-dev.compatiblepartners.net" ) {
				if( $("form[name=registrationForm] select[name=gender]").length && $("form[name=registrationForm] select[name=genderPreference]").length ) {
					genderSwapCP.createOverlay();
					
					// onchange of gender, swap gender2
					$("form[name=registrationForm] select[name=gender]").change( function() {
						genderSwapCP.handle();
					}); // End onchange function
				} // End if ( there is are gender two gender dropdowns )
			} else {
				if( $("form[name=registrationForm] select[name=gender]").length && $("form[name=registrationForm] select[name=gender2]").length ) {
					genderSwap.createOverlay();
					
					// onchange of gender, swap gender2
					$("form[name=registrationForm] select[name=gender]").change( function() {
						genderSwap.handle();
					}); // End onchange function
				} // End if ( there is are gender two gender dropdowns )
			}
			
			if( document.location.host != "www.compatiblepartners.net" && document.location.host != "www-dev.compatiblepartners.net" ) {
				// onchange of country, switch the locale that the page is submitting to
				$("form[name=registrationForm] select[name=country]").change( function() {
					_EHCorp.reg.setRegActionToLocale();
				}); // End onchange function
			}
			
		} // End if
	}); // End (on ready)
	
	
	
} // End if ( jQuery exists )









/*==================================================
Yes, it's already part of _EHCorp.utils,
but there are a few other scripts that rely on this function
...this can be removed when all those scripts are changed to use:
	
	_EHCorp.utils.getParameter();
	
--------------------------------------------------*/
function getParameter(queryString, parameterName) {
	// Add "=" to the parameter name (i.e. parameterName=value)
	var parameterName = parameterName + "=";
	
	if ( queryString.length > 0 ) {
		// Find the beginning of the string
		begin = queryString.indexOf( parameterName );
		// If the parameter name is not found, skip it, otherwise return the value
		if ( begin != -1 ) {
			// Add the length (integer) to the beginning
			begin += parameterName.length;
			// Multiple parameters are separated by the "&" sign
			end = queryString.indexOf( "&" , begin );
			if ( end == -1 ) {
				end = queryString.length
			} // End if
			
			// Return the string
			return unescape( queryString.substring ( begin, end ) );
		} // End if
	} // End if
	return "";
} // End function
