function replaceAll(txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);
}


$(document).ready(function() { 
		window.domainstatus  = {};
		$('input[value=""]:first').focus();
		$("#domainTxt").bind("keyup", function(event){
			if(event.keyCode != 13){
				$("#domain_Search_error").css("display","none");
		    }else{
		    	return false;
		    }
			var domainEntered  = $(this).val().trim();
			domainEntered = replaceAll(domainEntered," ","");
			domainEntered = domainEntered.toLowerCase();
			window.domainentered = domainEntered;
			
			if(window.lastDomainEntered == domainEntered){
				return;
			}
			
			if(domainEntered.length > 3){
				if(validateDomain(domainEntered)){
					$("#domainAvailableMsg").css("display","none");
					$("#domainNotAvailableMsg").css("display","none");
					$("#domainCheckMsg").css("display","none");
					$("#domainErrorWarning").css("display","inline");
					window.domainCheckInProgress = false;
				}else{
					$("#domainAvailableMsg").css("display","none");
					$("#domainNotAvailableMsg").css("display","none");
					$("#domainErrorWarning").css("display","none");
					$("#domainNmEntered").text(domainEntered  + ".co.vu");
					$("#domainCheckMsg").css("display","inline");
					window.domainCheckInProgress = true;
					setTimeout(function(){
						if(window.domainentered == domainEntered){
							$.getJSON("/ajax/domainsearch",{ domain: domainEntered},function(data){
								if(window.domainentered == data.domain){
									$("#domainCheckMsg").css("display","none");
									$("#domain_Search_error").css("display","none");
									$("#domain_Search_error").text("");
									
									$(".domainNmChecked").text(domainEntered  + ".co.vu");
									window.domainCheckInProgress = false;
									if(data.status == "AVAILABLE"){
										$("#domainAvailableMsg").css("display","inline");
										$("#domainNotAvailableMsg").css("display","none");
										window.domainstatus[data.domain] = "AVAILABLE";
									}else if(data.status == "UNAVAILABLE"){
										$("#domainAvailableMsg").css("display","none");
										$("#domainNotAvailableMsg").css("display","inline");
									}							
								}
							});
						}
					},500);
				}
			}else{
				$("#domainAvailableMsg").css("display","none");
				$("#domainCheckMsg").css("display","none");
				$("#domainErrorWarning").css("display","none");
			}
			window.lastDomainEntered = domainEntered;
		});
		
		if($("#domainTxt")){
			if($("#domainTxt").val() && $("#domainTxt").val().trim() != ""){
				$("#domainTxt").keyup();
			}
		}
		
		$('#registerDomainForm').submit(function() {
			  return regiserDomain();
		});
	});

	function configService(domainName){
		$("#loadingConfig").css("display","inline");
		$.post(location.pathname+ "/setup",{domain: domainName},function(data){
			postSettingAction();
		});
	}
	
	
	function postSettingAction(){
		$("#loadingConfig").css("display","none");
		$(".addOption").css("display","none");
		$("#checkSettings").removeClass("disabled");
		$("#checkSettings").html("Check My Settings");
		$("#threeImg").attr("src", "/img/tick_1.png");
		$("#checkSettings").attr("disabled",false);
		$("#greatMessage").css("display","block");

	}
	
	
	function saveSettings(domainName,serviceType){
		//$(".addOption").disabled();
		$("#loadingConfig").css("display","inline");
		
		$.post("/dnssettings/setupservice",
				{ domain: domainName, service: serviceType },
					function(data){
						//$(".removeOption").css("display","inline-block");
						$("#loadingConfig").css("display","none");
						$(".addOption").css("display","none");
						$("#checkSettings").removeClass("disabled");
						$("#checkSettings").html("Check My Settings");
						$("#threeImg").attr("src", "/img/tick_1.png");
						
						Cufon.replace('#checkSettings',{textShadow: '#fff 1px 1px',hover: {color:'#000'}});
						$("#checkSettings").attr("disabled",false);
						//$("#setupDnsHelpLink").effect("highlight", {}, 4000);
						//checkSettings(domainName,serviceType)
						$("#greatMessage").css("display","block");
					//	publish_feed();
					});
	}
	
	function checkSettings(domainName,serviceType){
		$("#loadingCheckSetting").css("display","inline");
		$.post("/dnscheck",{ domain: domainName, service: serviceType },
			function(data){
				var data = eval(data)
				if(data){
					if(data.status === 200){
						$("#advancedChecking").css("display","none");
						$("#greatMessage").css("display","block");
					}
				}
				console.log(data.status)
	//			$("#checkSettingsDiv").css("display","none");
	//			$("#configurePromote").css("display","block");
			});
	}	
	
	function resendConformation(){
		$("#resendConfirmationEmail").css("display","none");
		$("#loadingResentEmailConform").css("display","inline");
		$.post("/ajax/resendConformation",{},
			function(data){
				$("#loadingResentEmailConform").css("display","none");
				$("#resendConfirmationEmail").css("display","inline");
			});	
	}

	
	function saveNameserver(){
		if(validateNS()){
			$("#setupns").submit();
		}			
	}
	
	function saveDnsRecord(){
		if(validateRecord()){
			$("#setupcustom").submit();
		}			
	}
	
	
	function validateRecord(){
		var isSuccess = true;
		$(".field_error").remove();
/*		if(jQuery.trim($('#hostNm').val())== ""){
			$("#hostNm").after('<span class="field_error">The Host field is required.</span>')
			isSuccess = false;
		}
*/		
		if(jQuery.trim($('#data').val())== ""){
			$("#data").after('<span class="field_error">The Data field is required.</span>')
			isSuccess = false;
		}else{
			var recordType = $("#hostType option:selected").val();
			if((recordType == "CNAME") && (!checkDomain(jQuery.trim($('#data').val())))){
				$("#data").after('<span class="field_error">The Data does not seems to be a valid domain name.</span>')
				isSuccess = false;
			}else if((recordType == "A") && (!checkIP(jQuery.trim($('#data').val())))){
				$("#data").after('<span class="field_error">The Data does not seems to be a valid IPv4 address.</span>');			
				isSuccess = false;
			}
		}
		
		return isSuccess;
 	}
		
	function validateDomain(domainName){
        var invalidChars = /[^a-zA-Z0-9-\s]+/;
        var isValid = invalidChars.test(domainName);
		return isValid;
}
	
	function validateDomainTxt(){
		$("#domain_Search_error").css("display","none");
		$("#domain_Search_error").text("");
		var domainName = $("#domainTxt").val();
		if(jQuery.trim(domainName) == "" ){
			$("#domain_Search_error").text("The domain name is required.");
			$("#domain_Search_error").css("display","block");
			$('#domainTxt').focus();
			return false;
		}
		if(jQuery.trim(domainName).length <= 3 ){
			$("#domain_Search_error").text("Domain name should be more then 3 characters.");
			$("#domain_Search_error").css("display","block");
			$('#domainTxt').focus();
			return false;
		}
		if(validateDomain(domainName)){
			$("#domain_Search_error").text("Invalid character in domain.  Only letters, numbers are allowed");
			$("#domain_Search_error").css("display","block");
			$('#domainTxt').focus();
			return false;
		}
		return true;
	}
	
	function regiserDomain(){
		if($("#registerButton").hasClass("disabled")){
			return false;
		}
		if(validateDomainTxt()){
			if(window.domainCheckInProgress){
				$("#domain_Search_error").text("Domain Availablity Check In Progress. Please Wait");
				$("#domain_Search_error").css("display","block");
				return false;
			}else{
				var domainEntered  =$("#domainTxt").val().trim();
				domainEntered = replaceAll(domainEntered," ","");
				domainEntered = domainEntered.toLowerCase();
				if(window.domainstatus[domainEntered] && window.domainstatus[domainEntered] == "AVAILABLE"){
					return true;
				}else{
					$("#domain_Search_error").text("This domain is not available for registration");
					$("#domain_Search_error").css("display","block");
					return false;						
				}
			}
		}else{
			return false;
		}
	}

	function validateSearch(){
		if(validateDomainTxt()){
			$("#searchForm").submit();
		}else{
			return false;
		}
	}
	
	function validateNS(){
		var isSuccess = true;
		$(".field_error").remove();
		if(jQuery.trim($('#ns1').val())== ""){
			$("#ns1").after('<span class="field_error">The Nameserver 1 field is required.</span>')
			isSuccess = false;
		}else if(!checkDomain(jQuery.trim($('#ns1').val()))){
			$("#ns1").after('<span class="field_error">Nameserver 1 seems invalid.</span>')
			isSuccess = false;
		}

		if(jQuery.trim($('#ns2').val())== ""){
			$("#ns2").after('<span class="field_error">The Nameserver 2 field is required.</span>')
			isSuccess = false;
		}else if(!checkDomain(jQuery.trim($('#ns2').val()))){
			$("#ns2").after('<span class="field_error">Nameserver 2 seems invalid.</span>')
			isSuccess = false;
		}
		
		if(jQuery.trim($('#ns3').val())== ""){

		}else if(!checkDomain(jQuery.trim($('#ns3').val()))){
			$("#ns3").after('<span class="field_error">Nameserver 3 seems invalid.</span>')
			isSuccess = false;
		}

		if(jQuery.trim($('#ns4').val())== ""){

		}else if(!checkDomain(jQuery.trim($('#ns4').val()))){
			$("#ns4").after('<span class="field_error">Nameserver 4 seems invalid.</span>')
			isSuccess = false;
		}
		
		return isSuccess;
 	}
	
	
	function checkDomain(nname){
		var arr = new Array(
		'.com','.net','.org','.biz','.coop','.info','.museum','.name',
		'.pro','.edu','.gov','.int','.mil','.ac','.ad','.ae','.af','.ag',
		'.ai','.al','.am','.an','.ao','.aq','.ar','.as','.at','.au','.aw',
		'.az','.ba','.bb','.bd','.be','.bf','.bg','.bh','.bi','.bj','.bm',
		'.bn','.bo','.br','.bs','.bt','.bv','.bw','.by','.bz','.ca','.cc',
		'.cd','.cf','.cg','.ch','.ci','.ck','.cl','.cm','.cn','.co','.cr',
		'.cu','.cv','.cx','.cy','.cz','.de','.dj','.dk','.dm','.do','.dz',
		'.ec','.ee','.eg','.eh','.er','.es','.et','.fi','.fj','.fk','.fm',
		'.fo','.fr','.ga','.gd','.ge','.gf','.gg','.gh','.gi','.gl','.gm',
		'.gn','.gp','.gq','.gr','.gs','.gt','.gu','.gv','.gy','.hk','.hm',
		'.hn','.hr','.ht','.hu','.id','.ie','.il','.im','.in','.io','.iq',
		'.ir','.is','.it','.je','.jm','.jo','.jp','.ke','.kg','.kh','.ki',
		'.km','.kn','.kp','.kr','.kw','.ky','.kz','.la','.lb','.lc','.li',
		'.lk','.lr','.ls','.lt','.lu','.lv','.ly','.ma','.mc','.md','.mg',
		'.mh','.mk','.ml','.mm','.mn','.mo','.mp','.mq','.mr','.ms','.mt',
		'.mu','.mv','.mw','.mx','.my','.mz','.na','.nc','.ne','.nf','.ng',
		'.ni','.nl','.no','.np','.nr','.nu','.nz','.om','.pa','.pe','.pf',
		'.pg','.ph','.pk','.pl','.pm','.pn','.pr','.ps','.pt','.pw','.py',
		'.qa','.re','.ro','.rw','.ru','.sa','.sb','.sc','.sd','.se','.sg',
		'.sh','.si','.sj','.sk','.sl','.sm','.sn','.so','.sr','.st','.sv',
		'.sy','.sz','.tc','.td','.tf','.tg','.th','.tj','.tk','.tm','.tn',
		'.to','.tp','.tr','.tt','.tv','.tw','.tz','.ua','.ug','.uk','.um',
		'.us','.uy','.uz','.va','.vc','.ve','.vg','.vi','.vn','.vu','.ws',
		'.wf','.ye','.yt','.yu','.za','.zm','.zw');

		var mai = nname;
		var val = true;

		var dot = mai.lastIndexOf(".");
		var dname = mai.substring(0,dot);
		var ext = mai.substring(dot,mai.length);
		//alert(ext);
			
		if(dot>2 && dot<57)
		{
			for(var i=0; i<arr.length; i++)
			{
			  if(ext == arr[i])
			  {
				val = true;
				break;
			  }	
			  else
			  {
				val = false;
			  }
			}
			if(val == false)
			{
				 //alert("Your domain extension "+ext+" is not correct");
				 return false;
			}
			else
			{
				for(var j=0; j<dname.length; j++)
				{
				  var dh = dname.charAt(j);
				  var hh = dh.charCodeAt(0);
				  if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123) || hh==45 || hh==46)
				  {
					 if((j==0 || j==dname.length-1) && hh == 45)	
					 {
				//		 alert("Domain name should not begin are end with '-'");
						  return false;
					 }
				  }
				else	{
			//	 alert("Your domain name should not have special characters");
					 return false;
				  }
				}
			}
		}
		else
		{
		// alert("Your Domain name is too short/long");
		 return false;
		}	

		return true;
		}
	
	
	function checkIP(IPvalue) {
		var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
		var ipArray = IPvalue.match(ipPattern);

		if (ipArray == null){
			return false;
		} else {
			for (i = 0; i < 4; i++) {
				thisSegment = ipArray[i];
				if (thisSegment > 255) {
					return false;
				}
			}
		}
		return true;
	}
	
	function goTo(url){
		window.location = url
	}
	
	function clamFree(){
		$("#loadingFree").css("display","inline");
		
		var free_url = $("#free_url").val();
		var free_email = $("#free_email").val();
		$.post("/free/clam",
				{ url: free_url, email: free_email },
					function(data){
						$("#loadingConfig").css("display","none");
						$("#freeSignupBlock").css("display","none");
						$("#freeSignupComplete").css("display","block");
						
						//alert("Thank You. We will review it and Acdd Credits to your account");
/*						$(".addOption").css("display","none");
						$("#checkSettings").removeClass("disabled");
						$("#checkSettings").html("Check My Settings");
						$("#threeImg").attr("src", "/img/tick_1.png");
						Cufon.replace('#checkSettings',{textShadow: '#fff 1px 1px',hover: {color:'#000'}});
						$("#checkSettings").attr("disabled",false);
						$("#greatMessage").css("display","block");
	*/				});

	}	
	
	
	
	
	(function( $ ){
		  $.fn.autofadeinput = function() {
			this.keyWasPressed = function(){
				if($(this).val() != ""){
					$("[for="+$(this).attr("id")+"]").hide();
				}else{
					$("[for="+$(this).attr("id")+"]").fadeTo('fast', 0.5)				
				}	
			}
			this.inputWasBlurred =function(){
				if($(this).val() == ""){
					$("[for="+$(this).attr("id")+"]").fadeTo('fast', 1)	
				}
			}
			this.inputWasFocused = function(){
				if($(this).val() == ""){
					$("[for="+$(this).attr("id")+"]").fadeTo('fast', 0.5)
				}
			}			
			this.input =  $(this);
            this.label = $("[for="+$(this).attr("id")+"]");
            this.bind("keyup", this.keyWasPressed);
            this.bind("focus", this.inputWasFocused);
            this.bind("blur", this.inputWasBlurred);
            this.keyWasPressed();
		  };
	})( jQuery );	
	
