$(document).ready(function() {
	// We use the jQuery validator plugin to do input validation
	// http://docs.jquery.com/Plugins/Validation
	// call the validate method on our form, and pass in our explicit options
	
	$("#reg").validate({
		debug: false,
		submitHandler: function(form) { 
			var site = (typeof pagedescriptor.getSiteMeta().top_site_name!=='undefined') ? pagedescriptor.getSiteMeta().top_site_name : false;
			vcs_service.register($(form),site);
			return false;
		},
		errorElement: 'p',
		errorPlacement: function(error, element) {
		        var elem_pos = $(element).position();
			var error_message = $(error[0]).html();
			var error_name = $(element).attr('id').replace('reg','err');
			var error_html = 
				'<div class="regoverlay_container error-tip" id="'+error_name+'">'+
				'<div class="overlaytip_top"></div>'+
				'<div class="form-note">'+
				'<img src="/static/all/img/alert-yellow.gif" alt="" /><p class="err-msg">'+error_message+
				'</p></div>'+
				'<div class="overlaytip_btm"></div>'+
				'</div>';
		        $('div.regoverlay_container.error-tip').hide();
			if ($('div#'+error_name).length>0) {
				$('div#'+error_name+' p.err-msg').html(error_message);
				if (error_message != '')
				   $('div#'+error_name).show();
			} else {
				$(element).after(error_html);
				if (error_message == '')
				   $('div#'+error_name).hide();
			}
			
			if ($("#err_user_name").is(":visible")) {
				$(".req-user").remove();
			}
			
			if ($("#err_password").is(":visible")) {
				$(".req-password").remove();
			}
			
			$('div#'+error_name).css('top', (elem_pos.top-70)+'px');
			$('div#'+error_name).next('.validate').children('.sprites').attr('class','sprites red-exclamation');
			$('div#'+error_name).next('.validate').children('.sprites').show();
		},
		success: function(label) {
			var errDiv = 'div#'+$(label).attr('htmlfor').replace('reg','err');
			$(errDiv).hide();
			$(errDiv).next('div.validate').children('a.sprites').attr('class','sprites check');
		},


		rules: {
			propID_username: {
				required:true,
				minlength:5,
				maxlength:15,  
				validChars:true,
				remote: {
					url: "/vcs/register2.html?validation=true",
					type: "post"
				}
			},

			propID_email: {
				required:true,
				email:true,
				maxlength:250,
				strictEmail:true,
				remote: {
					url: "/vcs/register2.html?validation=true",
					type: "post"
				}			
			},
		
			propID_email2: {
				required:true,
				email:true,
				maxlength:250,
				strictEmail:true,
				equalTo: "#reg_email"
			},
			propID_other_email: {
				email:true,
				maxlength:250
			},
			propID_pass1: {
				required:true,
				noSpaces:true,
				minlength:5,
				maxlength:12
			},
			propID_pass2: {
				required:true,
				noSpaces:true,
				minlength:5,
				maxlength:12,
				equalTo: "#reg_password"
			},
			propID_country:{
				required:true
			},
			propID_zip: {
				digits:true,
				maxlength:5,
				minlength:5,
				zipRequired: true,
			        zipCheck: true
			},
			propID_gender:{
				required:true
			},
			propID_birthyear: {
				required:true, 
				min:1900,
				isMaxYear:true
			},
			propID_terms: {
				required: true
			}
		},
		messages: {
			propID_username: {
				required: "Please enter a username",
				minlength:"Your username must consist of at least 5 characters",
				maxlength:"Your username is too long",
				validChars: "please supply valid characters only.",
				remote:"This username is already in use."
			},
			propID_email: {
				required: "Please enter an email address.",
				email: "Your email address must be valid.",
				maxlength:"Your email address is too long.",
				remote:"A user is already registered with this email."
			},
			propID_email2: {
				required: "Please confirm your email address.",
				equalTo: "Please double check your email. They do not match."
			},
			propID_pass1: {
				required: "Please enter a password.",
				minlength:"Your password must be at least 5 characters.",
				maxlength:"Your password is too long."
			},
			propID_pass2: {
				required: "Please confirm your password.",
				equalTo: "Your passwords do not match."
			},
			propID_terms: {
				required: "In order to join Fox News community you must agree to our terms and conditions. Please review and check the box to join."
			},
			propID_country: {
				required: "Please select your country of residence."
			},
			propID_zip: {
				digits:"Please enter a valid zip code.",
				maxlength:"A valid zip code is five digits.",	
				minlength:"A valid zip code is five digits.",
				required: "Please enter a zip code."
			},
			propID_gender: {
				required:"Please submit your gender."
			},

			propID_birthyear: {
				required:"Please select your birth year." 
			}
		}
	});
	
	$("a.sprites.question").tooltip({
		  track:true,
		  showURL: false,
		  bodyHandler: function() {
			var tt_html = 
				'<div class="regoverlay_container error-tip">'+
				'<div class="overlaytip_top"></div>'+
				'<div class="form-note">'+
				'<p class="err-msg">'+this.tooltipText+
				'</p></div>'+
				'<div class="overlaytip_btm"></div>'+
				'</div>';
			return tt_html;
		  }
		
	});
	
	$("#reg_profile").validate({
		debug: false,
		submitHandler: function(form) {
			if ($('#reg_email').val() == '' && $('#reg_email2').val() == '') {
				$('#reg_email').val($('#reg_curemail').val());
				$('#reg_email2').val($('#reg_curemail').val());
			}
			form.submit();
			return false;
		},
		errorElement: 'p',
		errorPlacement: function(error, element) {
		    var elem_pos = $(element).position();
			var error_message = $(error[0]).html();
			var error_name = $(element).attr('id').replace('reg','err');
			var error_html = 
				'<div class="regoverlay_container error-tip" id="'+error_name+'">'+
				'<div class="overlaytip_top"></div>'+
				'<div class="form-note">'+
				'<img src="/static/all/img/alert-yellow.gif" alt="" /><p class="err-msg">'+error_message+
				'</p></div>'+
				'<div class="overlaytip_btm"></div>'+
				'</div>';
		        $('div.regoverlay_container.error-tip').hide();
			if ($('div#'+error_name).length>0) {
				$('div#'+error_name+' p.err-msg').html(error_message);
				if (error_message != '')
				   $('div#'+error_name).show();
			} else {
				$(element).after(error_html);
				if (error_message == '')
				   $('div#'+error_name).hide();
			}
		    $('div#'+error_name).css('top', (elem_pos.top-80)+'px');
		    $('div#'+error_name).css('left', (elem_pos.left+50)+'px');
			$('div#'+error_name).next('.validate').children('.sprites').attr('class','sprites red-exclamation');
			$('div#'+error_name).next('.validate').children('.sprites').show();
		},
		success: function(label) {
			var errDiv = 'div#'+$(label).attr('htmlfor').replace('reg','err');
			$(errDiv).hide();
			$(errDiv).next('div.validate').children('a.sprites').attr('class','sprites check');
		},


		rules: {
			propID_email: {
				required:false,
				email:true,
				maxlength:250,
				strictEmail:true/*,
				remote: {
					url: "/vcs/register2.html?validation=true",
					type: "post"
				}*/
			},
			propID_email2: {
				equalTo: "#reg_email"
			},
			propID_pass1: {
				noSpaces:true,
				minlength:5,
				maxlength:12
			},
			propID_pass2: {
				noSpaces:true,
				minlength:5,
				maxlength:12,
				equalTo: "#reg_password"
			},
			propID_country:{
				required:true
			},
			propID_zip: {
				digits:true,
				maxlength:5,
				minlength:5,
				zipRequired: true,
			        zipCheck: true
			},
			propID_gender:{
				required:true
			},
			propID_birthyear: {
				required:true, 
				min:1900,
				isMaxYear:true
			}
		},
		messages: {
			propID_email: {
				required: "Please enter an email address.",
				email: "Your email address must be valid.",
				maxlength:"Your email address is too long.",
				remote:"A user is already registered with this email."
			},
			propID_email2: {
				required: "Please confirm your email address.",
				equalTo: "Please double check your email. They do not match."
			},
			propID_pass1: {
				required: "Please enter a password.",
				minlength:"Your password must be at least 5 characters.",
				maxlength:"Your password is too long."
			},
			propID_pass2: {
				required: "Please confirm your password.",
				equalTo: "Your passwords do not match."
			},
			propID_country: {
				required: "Please select your country of residence."
			},
			propID_zip: {
				digits:"Please enter a valid zip code.",
				maxlength:"A valid zip code is five digits.",	
				minlength:"A valid zip code is five digits.",
				required: "Please enter a zip code."
			},
			propID_gender: {
				required:"Please submit your gender."
			},

			propID_birthyear: {
				required:"Please select your birth year." 
			}
		}
	});

});
	// check for unwanted characters
	$.validator.addMethod('validChars', function (value) {
		var result = true;
		// unwanted characters
		var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
		for (var i = 0; i < value.length; i++) {
			if (iChars.indexOf(value.charAt(i)) != -1) {
				return false;
			}
		}
		return result;
	}, 'Please supply valid characters only.');

	// stricter email address character set check
	$.validator.addMethod('strictEmail', function (value) {
		return value.match(/^[\w\-\.]+@[\w\-\.]+$/) != null || value == '';
	}, 'Please supply valid email characters only.');

	// check for spaces
	$.validator.addMethod('noSpaces', function (value) {
		var result = true;
	    if (value!="") { 
	    	var strArr = new Array();
	    	strArr = value.split(" ");
	    if (strArr.length > 1){
	    	return false;
	    }
    }        
	return result;
	}, 'Please remove the blank spaces.');
	// check for name characters
	$.validator.addMethod('validCharsName', function (value) {
		var resultName = true;	
		var iChars = "!@#$%^&*()+=[]\\\;,./{}|\":<>?";
		var iCharshp = "-";
		var iCharsap = "'";
		var counterhp = 0;
		var counterap = 0;
		for (var i = 0; i < value.length; i++) {
			if (iChars.indexOf(value.charAt(i)) != -1) {
				return false;
			}
			if(iCharshp.indexOf(value.charAt(i)) != -1){
				counterhp = counterhp+1;
			}
			if(iCharsap.indexOf(value.charAt(i)) != -1){
				counterap = counterap+1;
			}
		}
		if(counterhp > 1){
			return false;
		}
		if(counterap > 1){
			return false;
		}
		return resultName;
	}, 'Please supply valid characters only.');
	// check for name characters
	$.validator.addMethod('isMaxYear', function (value) {
		var result = true;	
		var d = new Date();
		var curr_year = d.getFullYear();
		if("#reg_birth_year" > (curr_year - 13)){
			return false;
		}
		return result;
	}, 'You must be at least 13 years old to register for this site.');


	
	$.validator.addMethod('zipRequired', function (value) {
		var result = true;	
		country = $("#reg_country").val();
		if(country == "United States" && value == ""){
			return false;
		}
		return result;
	}, 'Zip Code is required.');


	$.validator.addMethod('zipCheck', function (value) {
	   if ($('#reg_country').val() == 'United States') {
		 $.ajax({
		    type: "GET",
		    url: "/vcs/register2.html?validation=true",
		    async: false,
		    data: ({zip:$('#reg_zip_code').val()}),
		    dataType: "text",
		    success: function(data, textStatus){
	               if (data){  
			  var state = data;
			     $('#reg_location').val(state);
			     $('.response').append(state);                 	      
	               }else{        
			     $('.response').append("no state available for this zip code"); 
	               }
		    },
		    error:function(XMLHttpRequest, textStatus, errorThrown){
			  $('.response').append("no state available for this zip code");
		    }
		 });
	      if ($('#reg_location').val() == '')
		 return false;
	      else
		 return true;
	   }
	   return true;
	}, 'Please enter a valid United States zip code.');

	

