YAHOO.util.Event.onDOMReady(mainPageProcess); 

function mainPageProcess() { 

	var loginUsername = document.getElementById('site_login').username;
	var loginPassword = document.getElementById('site_login').password; 
	
	var textInput = document.createElement('input');
		textInput.type = "text";
		textInput.value = "Password";
		textInput.className = "text";
		textInput.id = "password_text";
		textInput.style.display = 'none';
	var passParent = loginPassword.parentNode;
		passParent.appendChild(textInput);
	
	
	YAHOO.util.Event.addListener(loginPassword, "focus", passInputFocus);
	YAHOO.util.Event.addListener(textInput, "focus", passInputFocus);
	YAHOO.util.Event.addListener(textInput, "blur", clearPhishingAlert);
	YAHOO.util.Event.addListener(loginPassword, "blur", clearPhishingAlert);

	
	
	// clearing reg form fields in case browser remembers values and tries to populate	
	if (YAHOO.util.Dom.get('reg_username').value != '') {
		YAHOO.util.Dom.get('reg_username').value = '';
	}
	if (YAHOO.util.Dom.get('reg_password').value != '') {
		YAHOO.util.Dom.get('reg_password').value = '';
	}
	
	if (loginUsername.value == '') {
		loginUsername.value = 'Member Name';
	}
	if (loginPassword.type == 'password') {
		if (loginPassword.value == '' || YAHOO.util.Dom.getElementsByClassName('error_msg').length > 0) {
			loginPassword.style.display = 'none';
			textInput.style.display = 'inline';
		}	
	}
	
	if (YAHOO.util.Dom.getElementsByClassName('error_msg').length > 0) {
		loginUsername.style.color = '#000';
	}
	
	
	function nameInputFocus() {
		if (this.value == 'Member Name') {
			this.value = '';
			this.style.color = "#000";
			document.getElementById('username_alert').style.display='block';
		}	

		if (YAHOO.util.Dom.getElementsByClassName('error_msg').length > 0) {
			if (YAHOO.util.Dom.getElementsByClassName('error_msg')[0].innerHTML == "Incorrect member name/password combination.") {
				YAHOO.util.Dom.getElementsByClassName('error_msg')[0].style.display = 'none'; 
			} 
		}
		YAHOO.util.Dom.get('username_alert').style.display='block';
	}
	
	function passInputFocus(e) {
		var loginPassword = YAHOO.util.Dom.get('password');
		if (this.id == 'password_text') {
			this.style.display = 'none';
			loginPassword.value = ''; 
			loginPassword.style.display = 'inline';
		}
		YAHOO.util.Dom.get('username_alert').style.display='block';
		setTimeout(function() { loginPassword.focus(); }, 10);
	}
	
	function clearPhishingAlert(e) {
		YAHOO.util.Dom.get('username_alert').style.display='none';
		
		if(this.value == '') {
			if (this.name == 'username') {
				this.style.color = '#999';
				this.value = 'Member Name';
			
			} else if(this.id == 'password') {				 
				this.style.display = 'none';
				YAHOO.util.Dom.get('password_text').style.display = 'inline';
			}
		   
		}
		
	}
	
	YAHOO.util.Event.addListener(loginUsername, "focus", nameInputFocus);
	YAHOO.util.Event.addListener(loginUsername, "blur", clearPhishingAlert);
	YAHOO.util.Event.addListener(loginPassword, "blur", clearPhishingAlert);
	

	// form handling - highlihts and error on weak password 	
	var regPassField = YAHOO.util.Dom.get('reg_password');
	YAHOO.util.Event.addListener(regPassField, "keyup", passwordCheck);
	YAHOO.util.Event.addListener(regPassField, "blur", passCheckBlur);
	function passwordCheck()  { 
		analyze_password_strength(this.value,
                function show_strength(strength)
                {
                    var width1;
                    var classname;
                    switch(strength)
                    {
                        case 'too short':
                        case 'weak':
                            width1 = '0%';
                            classname = 'tooshort_pw';
                            break;
                        case 'fair':
                            width1 = '33%';
                            classname = 'weak_pw';
 			   document.getElementById('password_hint_error').style.display = 'none';
			    break;
                        case 'good':
                            width1 = '67%';
                            classname = 'good_pw';
                            document.getElementById('password_hint_error').style.display = 'none';
                            break;
                        case 'strong':
                            width1 = '100%';
                            classname = 'strong_pw';
                            document.getElementById('password_hint_error').style.display = 'none';
                            break;
                       default:
                            width1 = '0%';
                            classname = '';
                            break;
                     }
		     if (strength == 'too short') { strength += ' - 6 characters minimum' };
                     if (strength == 'weak') { strength += ' - use letters and numbers'};
		     document.getElementById('password_strength').innerHTML = strength;
		     
                     document.getElementById('password_strength').className = classname;

                     var obj = document.getElementById('password_progressbar').getElementsByTagName('div')[0];
                     obj.style.width = width1;
               })
	       
	}
	       
	function passCheckBlur() {   
		
		if(!this.value) return false; analyze_password_strength(this.value,
                function show_error(strength)
                {
                    if (strength != 'good' && strength != 'strong' && strength != 'fair'  ) {
                      //  document.getElementById('password_hint_error').innerHTML = 'Too weak! Please strengthen your password to at least &#34;fair&#34;.'; document.getElementById('password_hint_error').style.display='block'; 
                    } else {
			    document.getElementById('password_hint_error').style.display='none';
		    }
               })
	       
	}
	
	
	var formfields = YAHOO.util.Dom.getElementsByClassName('form_field');
	
	function highlightOn(e) {
		if (this.parentNode.className.indexOf('form_field') == -1 ) {
			YAHOO.util.Dom.addClass(this.parentNode.parentNode, 'highlight')
		} else {
			YAHOO.util.Dom.addClass(this.parentNode, 'highlight')
		}
	}
	
	function highlightOff(e) {
		if (this.className.indexOf('error') > -1) {
			/*
			if (regFormValidation.isValidEmail(this.value)) {
				YAHOO.util.Dom.removeClass(this, 'error');
				YAHOO.util.Dom.get('regValError').style.display = 'none';
			}
			*/
			
		}
		if (this.parentNode.className.indexOf('form_field') == -1 ) {
			YAHOO.util.Dom.removeClass(this.parentNode.parentNode, 'highlight');			
		} else {
			YAHOO.util.Dom.removeClass(this.parentNode, 'highlight');	
		}
		
		
	
	}


	// iterating throught form fields assigning appropriate highlight events
	for (var i=0; i<formfields.length; i++ ) {
		if(formfields[i].className.indexOf("country_zip") > -1) {
			var oElement = [];
			oElement = [formfields[i].getElementsByTagName('select')[0], formfields[i].getElementsByTagName('input')[0]]
			YAHOO.util.Event.addListener(oElement, "focus", highlightOn);
			YAHOO.util.Event.addListener(oElement, "blur", highlightOff);
	
		} else if (formfields[i].className.indexOf('gender') > -1) {
			var oElement = formfields[i].getElementsByTagName('input');
			YAHOO.util.Event.addListener(oElement, "focus", highlightOn);
			YAHOO.util.Event.addListener(oElement, "blur", highlightOff);
		} else if  (formfields[i].className.indexOf('date_of_birth') > -1) {
				
			var oElement = formfields[i].getElementsByTagName('select');
				YAHOO.util.Event.addListener(oElement, "focus", highlightOn);
			YAHOO.util.Event.addListener(oElement, "blur", highlightOff);
	
		} else {
			var oElement = formfields[i].getElementsByTagName('input')[0];
			YAHOO.util.Event.addListener(oElement, "focus", highlightOn);
			YAHOO.util.Event.addListener(oElement, "blur", highlightOff);
		}
		
	}
	var regForm = YAHOO.util.Dom.get('new_reg_form');
	var zipContainer = YAHOO.util.Dom.getElementsByClassName('zip_code', 'div', regForm)[0];
	var countrySelectContainer = YAHOO.util.Dom.getElementsByClassName('country', 'div', regForm)[0];
	var countrySelect = YAHOO.util.Dom.getElementsByClassName('select', 'select', countrySelectContainer)[0];
	
	YAHOO.util.Event.addListener(countrySelect, 'change', function() {
		if (this.value != 'USA' && this.value != 'CAN') {
		
			var elementFadeOut = new YAHOO.util.Anim(zipContainer, {opacity: { from: 1, to: 0 }}, .5, YAHOO.util.Easing.easeOut);
			if (zipContainer.style.opacity != '0') {
				elementFadeOut.animate();	
			}
			
			YAHOO.util.Dom.addClass(zipContainer, 'hidden');
			
			// jQuery(zipContainer).fadeOut('200');
			// zipContainer.style.display = "none";
		}	
		
		if (zipContainer.className.indexOf('hidden') > -1 &&  (this.value == 'USA' || this.value == 'CAN')) {
			YAHOO.util.Dom.removeClass(zipContainer, 'hidden');
			var elementFadeOut = new YAHOO.util.Anim(zipContainer, {opacity: { from: 0, to: 1 }}, .5, YAHOO.util.Easing.easeIn);
			if (zipContainer.style.opacity != '1') {
				elementFadeOut.animate();	
			}
		}
		
		
	});	
	
	
	
	
	
	// regForm.onsubmit = function() { return regFormProcess(this); } 
	
	
	YAHOO.util.Event.addListener(regForm, "submit", regFormProcess);
	
	// below elements should be added to page	

	
	var waitSpan = document.createElement('span');
	waitSpan.className = 'loader';
	waitSpan.innerHTML = 'one moment...';
	regForm.getElementsByTagName('div')[0].appendChild(waitSpan);

	var customErrorMsgSpan = document.createElement('span');
	customErrorMsgSpan.id = 'regValError'; 
	regForm.getElementsByTagName('div')[0].appendChild(customErrorMsgSpan);
	
	
	// YAHOO.util.Event.addListener(regForm, "submit", regFormProcess);

	
	
	var regFormValidation =  {
		isValid_email: function(strEmail){
			
			var validRegExp = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
			    if (strEmail.search(validRegExp) == -1) 
			   {
			      return false;
			    } 
			    return true; 
			},
		isValid_username: function(memberName) {
			
			if (memberName.length > 4 && memberName.length < 21) {
					return true;
				}
				return false; 
			},
		isValid_password: function(password) {
			if (password.length > 5 && ((password.search(/[A-Z]+/) > -1 || password.search(/[a-z]+/) > -1 ) && (password.search(/[0-9]+/) > -1))) {
				return true;
			}		
			return false; 
		},
		isChecked: function(radios) {
			for (var i = 0; i<radios.length; i++) {
				if(radios[i].checked == true){
					return true;
				} 
			}
			return false;
		},
		isValidBirthdate: function(selects) {
			var numSelected = 0;
			for (var i = 0; i<selects.length; i++)  {
				
				if (selects[i].value != '') {
					numSelected++;
				}
			}
			if (numSelected == 3) {
				var currentDate = new Date();
				var currentYear = currentDate.getFullYear();
				var eligibleDate = currentDate.setFullYear(currentYear-14);
				var eligibleDateObj = new Date(eligibleDate);
				var monthStr = (selects[0].value.length == 1) ? '0'+(parseInt(selects[0].value)-1) : (parseInt(selects[0].value)-1); 
				var dayStr = (selects[1].value.length == 1) ? '0'+selects[1].value : selects[1].value; 
				var dateStr = selects[2].value + monthStr + dayStr;
				var dateObj = new Date(selects[2].value,monthStr,dayStr);
				
				if (dateObj.valueOf() < eligibleDateObj.valueOf()) {
					return true;
				}
			}
			return false
		},
		isValidZip: function(zip) {
			if (zip != '') {
				return /^\d{5}(-\d{4})?$/.test(zip);
			}
			return false;
		},
		isValidCaCode: function(postalcode) {
			if (postalcode != '') {
				// return /^([a-z ]\d){3}$/i.test(postalcode);
				return /^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[ ]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$/.test(postalcode);
			}
			return false;
		}
	}

	
	
	
	function regFormProcess(event){
		
	
		var formObj = this;
		var errs = 0; 
		if (formObj.request_submitted) { return false; } 
	
		var formErrs = {
			email: 'Please enter a valid email',
			email_mandatory: 'Please enter your email address.',
			username: 'Member Name must be at least 5 characters.',
			username_mandatory: 'Please provide a member name.',
			password: 'Please enter a valid password',
			password_mandatory: 'Please enter a password',
			_location_id_p: 'Please enter a valid postal code', // zip code name 
			_location_id_p_mandatory: 'Please enter a valid postal code',
			sex_id: 'Gender is required.',
			_birth_date_m: 'You must be at least 14 to become a member',
			_birth_date_m_mandatory: 'Please enter your date of birth'
		}

		function clearError(elem) {
			YAHOO.util.Dom.removeClass(elem, 'error');
			if (YAHOO.util.Dom.getElementsByClassName('error', this.form).length > 0){
				if (YAHOO.util.Dom.getElementsByClassName('error', this.form)[0].tagName == 'LABEL') {
					YAHOO.util.Dom.get('regValError').innerHTML = formErrs['sex_id'];
				} else {
				
				var thisElName = YAHOO.util.Dom.getElementsByClassName('error', this.form)[0].name;
					if(YAHOO.util.Dom.getElementsByClassName('error', this.form)[0].value == ''){
						
						YAHOO.util.Dom.get('regValError').innerHTML = formErrs[thisElName+'_mandatory'];
					} else {
						YAHOO.util.Dom.get('regValError').innerHTML = formErrs[thisElName];
					}
				}
			} else {
				YAHOO.util.Dom.get('regValError').style.display = 'none';
			}
		}
	
		function restoreError(elem) {
			YAHOO.util.Dom.addClass(elem, 'error');
			if (YAHOO.util.Dom.get('regValError').style.display != 'block') {
				YAHOO.util.Dom.get('regValError').style.opacity = '0';
				YAHOO.util.Dom.get('regValError').style.display = 'block';
				YAHOO.util.Dom.get('regValError').innerHTML = formErrs[elem.name];
				var elementFadeIn = new YAHOO.util.Anim(YAHOO.util.Dom.get('regValError'), {opacity: { from: 0, to: 1 }}, .5, YAHOO.util.Easing.easeOut);
				elementFadeIn.animate();
			}
			
		}
	
		function showError(elem) {
			
			if(elem.value == '') {
					YAHOO.util.Dom.get('regValError').innerHTML = formErrs[elem.name+'_mandatory']; 
			}
			else YAHOO.util.Dom.get('regValError').innerHTML = formErrs[elem.name]; 
			if (YAHOO.util.Dom.get('regValError').style.display != 'block') {
				YAHOO.util.Dom.get('regValError').style.opacity = '0';
				YAHOO.util.Dom.get('regValError').style.display = 'block';
				var elementFadeIn = new YAHOO.util.Anim(YAHOO.util.Dom.get('regValError'), {opacity: { from: 0, to: 1 }}, .5, YAHOO.util.Easing.easeOut);
				elementFadeIn.animate();
			}
		}
		
		function showInitialError(elem) {
			if (YAHOO.util.Dom.get('regValError').style.display != 'block') {
				YAHOO.util.Dom.get('regValError').style.opacity = '0';
				YAHOO.util.Dom.get('regValError').style.display = 'block';
				YAHOO.util.Dom.get('regValError').innerHTML = formErrs[elem.name];
				var elementFadeIn = new YAHOO.util.Anim(YAHOO.util.Dom.get('regValError'), {opacity: { from: 0, to: 1 }}, .5, YAHOO.util.Easing.easeOut);
				elementFadeIn.animate();
			}
		}

		
		for (var i=0; i<formObj.elements.length; i++ ){ 
			if (formObj.elements[i].type == 'hidden' || formObj.elements[i].type == 'submit') {
				continue;
			}
		
			if (formObj.elements[i].name.indexOf('sex') > -1) {
				if (!regFormValidation.isChecked(formObj.sex_id)){
					
					if (errs == 0) {
						showInitialError(formObj.sex_id[0]);
					}
					YAHOO.util.Dom.addClass(formObj.sex_id[0].parentNode, 'error');
					YAHOO.util.Event.addListener(formObj.sex_id, "click", function(){
						if (regFormValidation.isChecked(formObj.sex_id)) {
							clearError(formObj.sex_id[0].parentNode);
							clearError(formObj.sex_id[1].parentNode);
						}
					});
					errs++;
				}
				
				
			
			} else if (formObj.elements[i].name.indexOf('birth_date') > -1) {
				var dobSelects = [formObj._birth_date_m, formObj._birth_date_d,formObj._birth_date_y]
				if (!regFormValidation.isValidBirthdate(dobSelects)){
					
					if (errs == 0) { 
						YAHOO.util.Dom.get('regValError').style.opacity = '0';
						YAHOO.util.Dom.get('regValError').style.display = 'block';
						YAHOO.util.Dom.get('regValError').innerHTML = formErrs._birth_date_m_mandatory;
						var elementFadeIn = new YAHOO.util.Anim(YAHOO.util.Dom.get('regValError'), {opacity: { from: 0, to: 1 }}, .5, YAHOO.util.Easing.easeOut);
						elementFadeIn.animate();
					}
						
					for (var j = 0; j<dobSelects.length; j++) {
						YAHOO.util.Dom.addClass(dobSelects[j], 'error');
						YAHOO.util.Event.addListener(dobSelects[j], "change", function(){
							if (regFormValidation.isValidBirthdate(dobSelects)) {
								for (var i = 0; i<dobSelects.length; i++) {
								clearError(dobSelects[i]);
								}
							} else if (dobSelects[0].value != '' && dobSelects[1].value != '' && dobSelects[2].value != '') {
								YAHOO.util.Dom.get('regValError').innerHTML = formErrs._birth_date_m; 
							
							}
						});
					
					
					}
					
					
					errs++;
				}
			
			
			
			} else if (formObj.elements[i].name.indexOf('location_id_c') > -1) {
				
				function handlePostalCodeError(code, region) {
					if (errs == 0) { 
						YAHOO.util.Dom.get('regValError').style.display = 'block';
						showError(formObj._location_id_p); 
					}
					YAHOO.util.Dom.addClass(formObj._location_id_p, 'error');
					YAHOO.util.Event.addListener(formObj._location_id_p, "keyup", function(){
					var regionFunction = (region == 'US')  ? 'isValidZip' : 'isValidCaCode'; 	
						if (regFormValidation[regionFunction](this.value)) {
							clearError(this);
						} else if (formObj.username.className.indexOf('error') == -1) {
							restoreError(this)
						} else {
							showError(this);
						} 
					});
					errs++;
									
						
				
				} 
			
				YAHOO.util.Event.addListener(formObj._location_id_c, "change", function (){
							 
							 if (formObj._location_id_c.value == 'USA') {
								 if (!regFormValidation.isValidZip(formObj._location_id_p.value)) {
									 handlePostalCodeError(formObj._location_id_p.value, 'US');
								 }
								 
							 } else if (formObj._location_id_c.value == 'CAN') {
								 if (!regFormValidation.isValidCaCode(formObj._location_id_p.value)) {
									 handlePostalCodeError(formObj._location_id_p.value, 'CA');
								}
								 
								 
							 } else {
								 formObj._location_id_p.value = '';
								 if (formObj._location_id_p.className.indexOf('error') > -1) {
									 YAHOO.util.Dom.removeClass(formObj._location_id_p, 'error');
								 }
								 
							 }
						
				});
				
				
				if (formObj._location_id_c.value == 'USA') {
			
					if (!regFormValidation.isValidZip(formObj._location_id_p.value)) {
						handlePostalCodeError(formObj._location_id_p.value, 'US');
						
		
				
						
						
					
					}
				
				} else if (formObj._location_id_c.value == 'CAN') {
				
				
				    if (!regFormValidation.isValidCaCode(formObj._location_id_p.value)) {
						
					    handlePostalCodeError(formObj._location_id_p.value, 'CA');
					
					}
				} else {
				
					formObj._location_id_p.value = '';
				} 
			
			} else if (formObj.elements[i].name.indexOf('location_id_p') > -1) {
				continue;
			} else { 
				var el = formObj.elements[i]
				if (!regFormValidation['isValid_'+el.name](el.value)){
					if (errs == 0) { 
						showInitialError(el);
					} 
		
					YAHOO.util.Dom.addClass(el, 'error');
					YAHOO.util.Event.addListener(el, "keyup", function(){	
						if (regFormValidation['isValid_'+this.name](this.value)) {
								clearError(this);
						} else if (el.className.indexOf('error') == -1) {
							restoreError(this)
						}  else {
							showError(this);
						}
					});
					errs++;
				}
			}
		
		}
		
		if (errs > 0) { 
			if (event.preventDefault)
				event.preventDefault();
			else
				event.returnValue = false;
				return false;
		}
		
		
		formObj.getElementsByClassName('loader')[0].style.display = 'block';
		formObj.getElementsByTagName('button')[0].style.backgroundPosition = '0 -28px';
		/// this.disabled = true; 
		return true; 	
	}
}  


window.onload = function(){
	if (YAHOO.util.Dom.getElementsByClassName('jquery_carousel').length > 0)  {
		jQuery('.jquery_carousel').jCarouselLite({
			btnNext: '.jquery_next',
			btnPrev: '.jquery_prev',
			// auto: 6000,
			speed: 300,
			visible: 5,
			scroll: 5
		});
	}
}	




/**
 * Calls the function f, passing it a string indicating the strength of the
 * provided password. The possible values are (from worst to best) "too
 * short", "weak", "fair", "good", and "strong".
 */
function analyze_password_strength(password, f)
{
    function preprocess_post_length_check()
    {
        // Our passwords are (for historical reasons) case-insensitive.
        // Downcase the string before analysis.
        password = password.toLowerCase();

        // Strings of repeated characters do not add significantly to the
        // strength of the password. Reduce their contribution to the length.
        var i;
        for (i = 1; i < password.length; i++)
            if (password.charAt(i-1)==password.charAt(i))
                password = password.substr(0,i) + password.substr(i+1);
    }

    function match(patterns)
    {
        for (var i in patterns)
            if (!password.match(patterns[i]))
                return false;
        return true;
    }

    function all_letters()
    {
        return password.match(/^[a-z]*$/)
    }
    function all_digits()
    {
        return password.match(/^[0-9]*$/)
    }
    function alphanumeric_no_numbers_at_beginning_or_end()
    {
        return password.match([ /^[a-z].*[a-z]$/, /[0-9]/ ])
    }
    function alphanumeric()
    {
        return password.match([ /^[a-z0-9]*$/, /[a-z]/, /[0-9]/ ])
    }
    function alphanumeric_one_symbol()
    {
        return password.match([ /^[a-z0-9]*[^a-z0-9][a-z0-9]*$/, /[a-z]/, /[0-9]/ ])
    }
    function alphanumeric_multiple_symbols()
    {
        return password.match([ /[^a-z0-9].*[^a-z0-9]/, /[a-z]/, /[0-9]/ ])
    }

    function password_strength()
    {
        if (password.length == 0)
        {
            return '';
        }

        if (password.length < 6)
        {
            return 'too short';
        }

        preprocess_post_length_check();

        if (all_digits())
        {
            return 'weak';
        }
        if (all_letters())
        {
            return 'weak';
        }

        if (alphanumeric_no_numbers_at_beginning_or_end())
        {
            return password.length >= 8 ? 'good' : 'fair';
        }
        if (alphanumeric())
        {
            return password.length >= 8 ? 'good' : 'fair';
        }

        if (alphanumeric_one_symbol())
        {
            return password.length >= 9
                ? 'strong'
                : password.length >= 7 ? 'good' : 'fair';
        }

        if (alphanumeric_multiple_symbols())
        {
            return password.length >= 8
                ? 'strong'
                : password.length >= 6 ? 'good' : 'fair';
        }

        return password.length >= 8 ? 'good' : 'fair';
    }

    f(password_strength());
}





	


