
var Global = {
	addCommas: function(amount) {
		var delimiter = ","; // replace comma if desired
		var a = amount.split('.',2)
		var d = a[1];
		var i = parseInt(a[0]);
		if(isNaN(i)) { return ''; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		var n = new String(i);
		var a = [];
		while(n.length > 3)
		{
			var nn = n.substr(n.length-3);
			a.unshift(nn);
			n = n.substr(0,n.length-3);
		}
		if(n.length > 0) { a.unshift(n); }
		n = a.join(delimiter);
		if(d.length < 1) { amount = n; }
		else { amount = n + '.' + d; }
		amount = minus + amount;
		return amount;
	}	
}

var Pricing = {
	onLivePricingKeypress: function(event) {
		Pricing.livePricing();
	},
	
	onLivePricingClick: function(event) {
		Pricing.livePricing();
	},
	
	livePricing: function() {
		var users_field = $("live_pricing_users");
		
		var step1Completed = true;
		
		if(!Pricing.isNumber($(users_field).value.replace(/,/, ""))) {//if not a valid number, don't update
			step1Completed = false;
		}
			
		var totalPrice = 0.0;
		var step2Completed = false;
			
		if($("hosted_email_enabled").checked) {
			totalPrice += Pricing.calculateHostedEmailPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
		else if($("email_security_enabled").checked) {
			totalPrice += Pricing.calculateEmailSecurityPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
			
		if($("archiving_enabled").checked) {
			totalPrice += Pricing.calculateArchivingPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
			
		if($("web_security_enabled").checked) {
			totalPrice += Pricing.calculateWebSecurityPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
			
		if(step1Completed && step2Completed)
			Pricing.setLivePrice(totalPrice);
		else if(step1Completed)
			Pricing.setLiveMessage("Complete step 2");
		else if(step2Completed)
			Pricing.setLiveMessage("Complete step 1");
		else
			Pricing.setLiveMessage("Complete steps 1 &amp; 2");
			
		Pricing.updateLink();
	},
	
	setLivePrice: function(price) {
		var priceString = Global.addCommas(price.toFixed(2)).toString();
		var priceArray = new Array();
		priceArray = priceString.split(".");
		$("live_price").innerHTML = "$" + priceArray[0] + "<span class=\"cents\">." + priceArray[1] + "</span> <span class=\"per\">per month</span>";
		$("live_price").show();
		$("live_message").hide();
	},
	
	setLiveMessage: function(message) {
		$("live_message").innerHTML = message;
		$("live_message").show();
		$("live_price").hide();
	},
	
	getHostedEmailLevel: function() {
		var hosted_email_level = "advanced";
		if($("hosted_email_premium").checked)
			hosted_email_level = "premium";
		else if($("hosted_email_exchange").checked)
			hosted_email_level = "exchange";
		return hosted_email_level;
	},
	
	getArchivingLevel: function() {
		var archiving_level = "business";
		if($("archiving_compliance").checked)
			archiving_level = "compliance";
		return archiving_level;
	},
	
	updateLink: function() {
		var newHref = "/signup?users=" + $('live_pricing_users').value;
		if($('email_security_enabled').checked)
			newHref += "&es=true";
		if($('hosted_email_enabled').checked)
			newHref += "&he=" + Pricing.getHostedEmailLevel();
		if($('archiving_enabled').checked)
			newHref += "&a=" + Pricing.getArchivingLevel();
		if($('web_security_enabled').checked)
			newHref += "&ws=true";
		$('price_button').href = newHref;
	},
	
	updateLinks: function(value) {
		$("signup_sf").href = "/signup?type=sf&users=" + value;
		if(Pricing.getSSType() == "basic")
			$("signup_ss").href = "/signup?type=ssb&users=" + value;
		else if(Pricing.getSSType() == "advanced")
			$("signup_ss").href = "/signup?type=ssa&users=" + value;
		else if(Pricing.getSSType() == "premium")
			$("signup_ss").href = "/signup?type=ssp&users=" + value;
		$("signup_he").href = "/signup?type=he&users=" + value;
		
	},
	
	isNumber: function(value) {
		var anum=/(^\d+$)|(^\d+\.\d+$)/
		return anum.test(value);
	},
	
	calculateEmailSecurityPricing: function(value) {
		var price = 44.95; //base price
		var users = value;
		
		if(users <= 10){ //use base price
		}
		else if(users <= 25) { //44.95 + 1.25/user past first 10
			price += ((users-10) * 1.25);
		}
		else if(users <= 50) { //44.95 + 1.25/user past first 10 + 1.20/user past first 25
			price += (15 * 1.25) + ((users-25) * 1.20);
		}
		else if(users <= 100) { 
			price += (15 * 1.25) + (25 * 1.20) + ((users-50) * 1.15);
		}
		else if(users <= 250) { 
			price += (15 * 1.25) + (25 * 1.20) + (50 * 1.15) + ((users-100) * 1.05);
		}
		else if(users <= 500) { 
			price += (15 * 1.25) + (25 * 1.20) + (50 * 1.15) + (150 * 1.05) + ((users-250) * .95);
		}
		else if(users <= 1000) { 
			price += (15 * 1.25) + (25 * 1.20) + (50 * 1.15) + (150 * 1.05) + (250 * .95) + ((users-500) * .85);
		}
		else {
			price += (15 * 1.25) + (25 * 1.20) + (50 * 1.15) + (150 * 1.05) + (250 * .95) + (500 * .85) + ((users-1000) * .75);
		}
		return price;
	},
	
	calculateHostedEmailPricing: function(value) {
		var hostedEmailLevel = Pricing.getHostedEmailLevel();
		switch(hostedEmailLevel)
		{
			case "basic":
				var price = 54.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 1.60);
				}
				else if(users <= 50) { 
					price += (15 * 1.60) + ((users-25) * 1.55);
				}
				else if(users <= 100) { 
					price += (15 * 1.60) + (25 * 1.55) + ((users-50) * 1.45);
				}
				else if(users <= 250) { 
					price += (15 * 1.60) + (25 * 1.55) + (50 * 1.45) + ((users-100) * 1.35);
				}
				else if(users <= 500) { 
					price += (15 * 1.60) + (25 * 1.55) + (50 * 1.45) + (150 * 1.35) + ((users-250) * 1.25);
				}
				else if(users <= 1000) { 
					price += (15 * 1.60) + (25 * 1.55) + (50 * 1.45) + (150 * 1.35) + (250 * 1.25) + ((users-500) * 1.15);
				}
				else {
					price += (15 * 1.60) + (25 * 1.55) + (50 * 1.45) + (150 * 1.35) + (250 * 1.25) + (500 * 1.15) + ((users-1000) * 1.05);
				}
				break;
			case "advanced":
				var price = 59.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 1.85);
				}
				else if(users <= 50) { 
					price += (15 * 1.85) + ((users-25) * 1.80);
				}
				else if(users <= 100) { 
					price += (15 * 1.85) + (25 * 1.80) + ((users-50) * 1.75);
				}
				else if(users <= 250) { 
					price += (15 * 1.85) + (25 * 1.80) + (50 * 1.75) + ((users-100) * 1.65);
				}
				else if(users <= 500) { 
					price += (15 * 1.85) + (25 * 1.80) + (50 * 1.75) + (150 * 1.65) + ((users-250) * 1.55);
				}
				else if(users <= 1000) { 
					price += (15 * 1.85) + (25 * 1.80) + (50 * 1.75) + (150 * 1.65) + (250 * 1.55) + ((users-500) * 1.45);
				}
				else {
					price += (15 * 1.85) + (25 * 1.80) + (50 * 1.75) + (150 * 1.65) + (250 * 1.55) + (500 * 1.45) + ((users-1000) * 1.35);
				}
				break;
			case "premium":
				var price = 74.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 3.90);
				}
				else if(users <= 50) { 
					price += (15 * 3.90) + ((users-25) * 3.65);
				}
				else if(users <= 100) { 
					price += (15 * 3.90) + (25 * 3.65) + ((users-50) * 3.40);
				}
				else if(users <= 250) { 
					price += (15 * 3.90) + (25 * 3.65) + (50 * 3.40) + ((users-100) * 3.20);
				}
				else if(users <= 500) { 
					price += (15 * 3.90) + (25 * 3.65) + (50 * 3.40) + (150 * 3.20) + ((users-250) * 3.05);
				}
				else if(users <= 1000) { 
					price += (15 * 3.90) + (25 * 3.65) + (50 * 3.40) + (150 * 3.20) + (250 * 3.05) + ((users-500) * 2.90);
				}
				else {
					price += (15 * 3.90) + (25 * 3.65) + (50 * 3.40) + (150 * 3.20) + (250 * 3.05) + (500 * 2.90) + ((users-1000) * 2.75);
				}
				break;
			case "exchange":
				var price = 129.50; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 12.95);
				}
				else if(users <= 50) { 
					price += (15 * 12.95) + ((users-25) * 12.75);
				}
				else if(users <= 100) { 
					price += (15 * 12.95) + (25 * 12.75) + ((users-50) * 12.50);
				}
				else if(users <= 250) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + ((users-100) * 12.25);
				}
				else if(users <= 500) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + ((users-250) * 11.95);
				}
				else if(users <= 1000) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + (250 * 11.95) + ((users-500) * 11.75);
				}
				else {
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + (250 * 11.95) + (500 * 11.75) + ((users-1000) * 11.50);
				}
				break;
		}
		
		return price;
	},
	
	calculateArchivingPricing: function(value) {
		var price = 67.00; //base price
		var users = value;

		if(users <= 10){ //use base price
		}
		else if(users <= 25) { 
			price = users * 6.60;
		}
		else if(users <= 50) { 
			price = users * 6.40;
		}
		else if(users <= 100) { 
			price = users * 6.20;
		}
		else if(users <= 250) { 
			price = users * 6.00;
		}
		else if(users <= 500) { 
			price = users * 5.80;
		}
		else if(users <= 1000) { 
			price = users * 5.60;
		}
		else {
			price = users * 5.40;
		}
		
		if(Pricing.getArchivingLevel() == "compliance")
			price += users * 2.00;
			
		return price;
	},
	
	calculateWebSecurityPricing: function(value) {
		var price = 49.00; //base price
		var users = value;

		if(users <= 10){ //use base price
		}
		else if(users <= 25) { 
			price = users * 4.85;
		}
		else if(users <= 50) { 
			price = users * 4.70;
		}
		else if(users <= 100) { 
			price = users * 4.60;
		}
		else if(users <= 250) { 
			price = users * 4.40;
		}
		else if(users <= 500) { 
			price = users * 4.30;
		}
		else if(users <= 1000) { 
			price = users * 4.20;
		}
		else {
			price = users * 4.00;
		}
		return price;
	}
}

var UKPricing = {
	onLivePricingKeypress: function(event) {
		UKPricing.livePricing();
	},
	
	onLivePricingClick: function(event) {
		UKPricing.livePricing();
	},
	
	livePricing: function() {
		var users_field = $("live_pricing_users");
		
		var step1Completed = true;
		
		if(!UKPricing.isNumber($(users_field).value.replace(/,/, ""))) {//if not a valid number, don't update
			step1Completed = false;
		}
			
		var totalPrice = 0.0;
		var step2Completed = false;
			
		var currency = "&pound;";
			
		if($("hosted_email_enabled").checked) {
			totalPrice += UKPricing.calculateHostedEmailPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
		else if($("email_security_enabled").checked) {
			totalPrice += UKPricing.calculateEmailSecurityPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}
			
		/*if($("archiving_enabled").checked) {
			totalPrice += UKPricing.calculateArchivingPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}*/
			
		/*if($("web_security_enabled").checked) {
			totalPrice += UKPricing.calculateWebSecurityPricing($(users_field).value.replace(/,/, ""));
			step2Completed = true;
		}*/
			
		if(step1Completed && step2Completed)
		{
			if(UKPricing.getHostedEmailLevel() == "exchange")
				UKPricing.setLivePrice(totalPrice, "$");
			else
				UKPricing.setLivePrice(totalPrice, "&pound;");
		}
		else if(step1Completed)
			UKPricing.setLiveMessage("Complete step 2");
		else if(step2Completed)
			UKPricing.setLiveMessage("Complete step 1");
		else
			UKPricing.setLiveMessage("Complete steps 1 &amp; 2");
			
		UKPricing.updateLink();
	},
	
	setLivePrice: function(price, currency) {
		var priceString = Global.addCommas(price.toFixed(2)).toString();
		var priceArray = new Array();
		priceArray = priceString.split(".");
		$("live_price").innerHTML = currency + priceArray[0] + "<span class=\"cents\">." + priceArray[1] + "</span> <span class=\"per\">per month</span>";
		$("live_price").show();
		$("live_message").hide();
	},
	
	setLiveMessage: function(message) {
		$("live_message").innerHTML = message;
		$("live_message").show();
		$("live_price").hide();
	},
	
	getHostedEmailLevel: function() {
		var hosted_email_level = "advanced";
		if($("hosted_email_premium").checked)
			hosted_email_level = "premium";
		else if($("hosted_email_exchange").checked)
			hosted_email_level = "exchange";
		return hosted_email_level;
	},
	
	getArchivingLevel: function() {
		var archiving_level = "business";
		if($("archiving_compliance").checked)
			archiving_level = "compliance";
		return archiving_level;
	},
	
	updateLink: function() {
		var newHref = "/signup?users=" + $('live_pricing_users').value;
		if($('email_security_enabled').checked)
			newHref += "&es=true";
		if($('hosted_email_enabled').checked)
			newHref += "&he=" + UKPricing.getHostedEmailLevel();
		if($('archiving_enabled').checked)
			newHref += "&a=" + UKPricing.getArchivingLevel();
		if($('web_security_enabled').checked)
			newHref += "&ws=true";
		$('price_button').href = newHref;
	},
	
	updateLinks: function(value) {
		$("signup_sf").href = "/signup?type=sf&users=" + value;
		if(UKPricing.getSSType() == "basic")
			$("signup_ss").href = "/signup?type=ssb&users=" + value;
		else if(UKPricing.getSSType() == "advanced")
			$("signup_ss").href = "/signup?type=ssa&users=" + value;
		else if(UKPricing.getSSType() == "premium")
			$("signup_ss").href = "/signup?type=ssp&users=" + value;
		$("signup_he").href = "/signup?type=he&users=" + value;
		
	},
	
	isNumber: function(value) {
		var anum=/(^\d+$)|(^\d+\.\d+$)/
		return anum.test(value);
	},
	
	calculateEmailSecurityPricing: function(value) {
		var price = 29.95; //base price
		var users = value;
		
		if(users <= 10){ //use base price
		}
		else if(users <= 25) { //44.95 + 1.25/user past first 10
			price += ((users-10) * 1.25);
		}
		else if(users <= 50) { //44.95 + 1.25/user past first 10 + 1.20/user past first 25
			price += (15 * 1.25) + ((users-25) * 1.15);
		}
		else if(users <= 100) { 
			price += (15 * 1.25) + (25 * 1.15) + ((users-50) * 1.00);
		}
		else if(users <= 250) { 
			price += (15 * 1.25) + (25 * 1.15) + (50 * 1.00) + ((users-100) * .9);
		}
		else if(users <= 500) { 
			price += (15 * 1.25) + (25 * 1.15) + (50 * 1.00) + (150 * .9) + ((users-250) * .8);
		}
		else if(users <= 1000) { 
			price += (15 * 1.25) + (25 * 1.15) + (50 * 1.00) + (150 * .9) + (250 * .8) + ((users-500) * .7);
		}
		else {
			price += (15 * 1.25) + (25 * 1.15) + (50 * 1.00) + (150 * .9) + (250 * .8) + (500 * .7) + ((users-1000) * .6);
		}
		return price;
	},
	
	calculateHostedEmailPricing: function(value) {
		var hostedEmailLevel = UKPricing.getHostedEmailLevel();
		switch(hostedEmailLevel)
		{
			case "basic":
				var price = 39.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 1.5);
				}
				else if(users <= 50) { 
					price += (15 * 1.5) + ((users-25) * 1.4);
				}
				else if(users <= 100) { 
					price += (15 * 1.5) + (25 * 1.4) + ((users-50) * 1.3);
				}
				else if(users <= 250) { 
					price += (15 * 1.5) + (25 * 1.4) + (50 * 1.3) + ((users-100) * 1.2);
				}
				else if(users <= 500) { 
					price += (15 * 1.5) + (25 * 1.4) + (50 * 1.3) + (150 * 1.2) + ((users-250) * 1.1);
				}
				else if(users <= 1000) { 
					price += (15 * 1.5) + (25 * 1.4) + (50 * 1.3) + (150 * 1.2) + (250 * 1.1) + ((users-500) * 1);
				}
				else {
					price += (15 * 1.5) + (25 * 1.4) + (50 * 1.3) + (150 * 1.2) + (250 * 1.1) + (500 * 1) + ((users-1000) * .9);
				}
				break;
			case "advanced":
				var price = 49.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 1.95);
				}
				else if(users <= 50) { 
					price += (15 * 1.95) + ((users-25) * 1.80);
				}
				else if(users <= 100) { 
					price += (15 * 1.95) + (25 * 1.80) + ((users-50) * 1.65);
				}
				else if(users <= 250) { 
					price += (15 * 1.95) + (25 * 1.80) + (50 * 1.65) + ((users-100) * 1.5);
				}
				else if(users <= 500) { 
					price += (15 * 1.95) + (25 * 1.80) + (50 * 1.65) + (150 * 1.5) + ((users-250) * 1.35);
				}
				else if(users <= 1000) { 
					price += (15 * 1.95) + (25 * 1.80) + (50 * 1.65) + (150 * 1.5) + (250 * 1.35) + ((users-500) * 1.2);
				}
				else {
					price += (15 * 1.95) + (25 * 1.80) + (50 * 1.65) + (150 * 1.5) + (250 * 1.35) + (500 * 1.2) + ((users-1000) * 1.05);
				}
				break;
			case "premium":
				var price = 69.95; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 3.95);
				}
				else if(users <= 50) { 
					price += (15 * 3.95) + ((users-25) * 3.75);
				}
				else if(users <= 100) { 
					price += (15 * 3.95) + (25 * 3.75) + ((users-50) * 3.55);
				}
				else if(users <= 250) { 
					price += (15 * 3.95) + (25 * 3.75) + (50 * 3.55) + ((users-100) * 3.35);
				}
				else if(users <= 500) { 
					price += (15 * 3.95) + (25 * 3.75) + (50 * 3.55) + (150 * 3.35) + ((users-250) * 3.15);
				}
				else if(users <= 1000) { 
					price += (15 * 3.95) + (25 * 3.75) + (50 * 3.55) + (150 * 3.35) + (250 * 3.15) + ((users-500) * 2.95);
				}
				else {
					price += (15 * 3.95) + (25 * 3.75) + (50 * 3.55) + (150 * 3.35) + (250 * 3.15) + (500 * 2.95) + ((users-1000) * 2.75);
				}
				break;
			case "exchange":
				var price = 129.50; //base price
				var users = value;

				if(users <= 10){ //use base price
				}
				else if(users <= 25) { 
					price += ((users-10) * 12.95);
				}
				else if(users <= 50) { 
					price += (15 * 12.95) + ((users-25) * 12.75);
				}
				else if(users <= 100) { 
					price += (15 * 12.95) + (25 * 12.75) + ((users-50) * 12.50);
				}
				else if(users <= 250) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + ((users-100) * 12.25);
				}
				else if(users <= 500) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + ((users-250) * 11.95);
				}
				else if(users <= 1000) { 
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + (250 * 11.95) + ((users-500) * 11.75);
				}
				else {
					price += (15 * 12.95) + (25 * 12.75) + (50 * 12.50) + (150 * 12.25) + (250 * 11.95) + (500 * 11.75) + ((users-1000) * 11.50);
				}
				break;
		}
		
		return price;
	},
	
	calculateArchivingPricing: function(value) {
		var price = 67.00; //base price
		var users = value;

		if(users <= 10){ //use base price
		}
		else if(users <= 25) { 
			price = users * 6.60;
		}
		else if(users <= 50) { 
			price = users * 6.40;
		}
		else if(users <= 100) { 
			price = users * 6.20;
		}
		else if(users <= 250) { 
			price = users * 6.00;
		}
		else if(users <= 500) { 
			price = users * 5.80;
		}
		else if(users <= 1000) { 
			price = users * 5.60;
		}
		else {
			price = users * 5.40;
		}
		
		if(UKPricing.getArchivingLevel() == "compliance")
			price += users * 2.00;
			
		return price;
	},
	
	calculateWebSecurityPricing: function(value) {
		var price = 49.00; //base price
		var users = value;

		if(users <= 10){ //use base price
		}
		else if(users <= 25) { 
			price = users * 4.85;
		}
		else if(users <= 50) { 
			price = users * 4.70;
		}
		else if(users <= 100) { 
			price = users * 4.60;
		}
		else if(users <= 250) { 
			price = users * 4.40;
		}
		else if(users <= 500) { 
			price = users * 4.30;
		}
		else if(users <= 1000) { 
			price = users * 4.20;
		}
		else {
			price = users * 4.00;
		}
		return price;
	}
}


var firstNameState = 0;
var lastNameState = 0;
var emailState = 0;
var phoneState = 0;
var countryState = 0;
var stateState = 0;
var companyState = 0;
var usernameState = 0;
var passwordState = 0;
var passwordConfirmState = 0;
var domainState = 0;
var usersState = 0;
var mailServerState = 0;
var serverIPState = 0;
var usernameAvailable = false;

var howState = 0;
var otherState = 0;

var Signup = {
	Step2: {
		updateEmailSecurity: function() {
			if($('email_security_enabled').checked || $('hosted_email_enabled').checked) 
			{ 
				$('email_security_enabled').up(1).addClassName('selected'); 
				$('email_security_enabled').checked = true; 
			} 
			else 
				$('email_security_enabled').up(1).removeClassName('selected'); 
			
			if($('email_security_enabled').checked && !$('hosted_email_enabled').checked) 
				$('email_security_details').show(); 
			else 
				$('email_security_details').hide();
		},
		
		updateHostedEmail: function() {
			if($('hosted_email_enabled').checked) 
				$('hosted_email_enabled').up(1).addClassName('selected'); 
			else 
			{
				$('hosted_email_enabled').up(1).removeClassName('selected'); 
				$('email_security_enabled').checked = true; 
				$('email_security_enabled').up(1).addClassName('selected'); 
			}
			if($('email_security_enabled').checked && !$('hosted_email_enabled').checked) 
				$('email_security_details').show(); 
			else 
				$('email_security_details').hide();
		},
		
		updateArchiving: function() {
			if($('archiving_enabled').checked) 
				$('archiving_enabled').up(1).addClassName('selected'); 
			else 
				$('archiving_enabled').up(1).removeClassName('selected');
		},
		
		updateWebSecurity: function() {
			if($('web_security_enabled').checked) 
				$('web_security_enabled').up(1).addClassName('selected'); 
			else 
				$('web_security_enabled').up(1).removeClassName('selected');
		}
	},
	
	liveUsername: {
		check: function() {
			var url = "/signup/";
			// send request
			new Ajax.Request(url, {
				method: 'get',
				parameters: 'callback=checkusername&username=' + $("UserName_Textbox").value,
				onSuccess: Signup.liveUsername.onSuccess
				});
			return usernameAvailable;
		},
		
		onSuccess: function(response) {
			if(response.responseText == "available")
				usernameAvailable = true;
			else
				usernameAvailable = false;
		}
	},
	
	serviceType: { 
		getType: function() {
			var type = "sf";
			if($("radio_ss").checked)
				type = "ss";
			else if($("radio_he").checked)
				type = "he";
			return type;
		},
		
		getServices: function() {
			var services = [];
			if($("email_security_enabled").checked)
				services.push("es");
			
			if($("hosted_email_enabled").checked)
			{
				if($("hosted_email_advanced").checked)
					services.push("hea");
				else if($("hosted_email_premium").checked)
					services.push("hep");
				else if($("hosted_email_exchange").checked)
					services.push("hee");
			}
			
			if($("archiving_enabled").checked)
			{
				if($("archiving_compliance").checked)
					services.push("ac");
				else
					services.push("ab");
			}
			
			if($("web_security_enabled").checked)
				services.push("ws");
				
			return services;	
		},
		
		getSSType: function() {
			var type = "ssb";
			if($("radio_ss_advanced").checked)
				type = "ssa";
			else if($("radio_ss_premium").checked)
				type = "ssp";
			return type;
		},
		
		onLiveClick: function(event) {
			Signup.serviceType.update();
		},
		
		update: function() {
			var services = Signup.serviceType.getServices();
			if(services.length == 0)
			{
				$("review_service_type").update("Please select your services above.");
			}
			else
			{
				var newText = "You have selected the ";
				for(var i=0; i<services.length; i++)
				{
					var prefix = " ";
					if(services.length > 1 && i != 0)
					{
						if(i == services.length-1)
						{
							if(services.length == 2)
								prefix = " and ";
							else
								prefix = ", and ";
						}
						else 
							prefix = ", ";
					}
						
					newText += prefix;
					
					if(services[i] == "es")
						newText += "Email Security";
					else if(services[i] == "hea")
						newText += "Hosted Email (Advanced)";
					else if(services[i] == "hep")
						newText += "Hosted Email (Premium)";
					else if(services[i] == "hee")
						newText += "Hosted Email (Exchange)";
					else if(services[i] == "ab")
						newText += "Business Archiving and eDiscovery";
					else if(services[i] == "ac")
						newText += "Compliance Archiving";
					else if(services[i] == "ws")
						newText += "Web Security";
				}
				
				if(services.length > 1)
					newText += " services.";
				else
					newText += " service.";
					
				$("review_service_type").update(newText);
			}	
		},
		
		hideTypes: function() {
			$("choose_sf").hide();
			$("choose_ss").hide();
			$("choose_he").hide();
		},
		
		resetTypeItems: function() {
			$("item_sf").removeClassName("selected");
			$("item_ss").removeClassName("selected");
			$("item_he").removeClassName("selected");
		}
	},
	
	onKeyUp: function(event) {
		var field = event.element();
		var name = field.id.substring(0,field.id.indexOf("_"));
		switch(name)
		{
			case "UserName":
				Signup.validate.username();
				Signup.validate.group2();
				break;	
		}
	},
	
	onBlur: function(event) {
		var field = event.element();
		var name = field.id.substring(0,field.id.indexOf("_"));
		switch(name)
		{
			case "FirstName":
				Signup.validate.firstName();
				Signup.validate.group1();
				break;
			case "LastName":
				Signup.validate.lastName();
				Signup.validate.group1();
				break;
			case "Email":
				Signup.validate.email();
				Signup.validate.group1();
				break;	
			case "Phone":
				Signup.validate.phone();
				Signup.validate.group1();
				break;
			case "State":
				Signup.validate.state();
				Signup.validate.group1();
				break;
			case "Country":
				Signup.validate.country();
				Signup.validate.group1();
				break;
			case "CompanyName":
				Signup.validate.company();
				Signup.validate.group2();
				break;
			case "UserName":
				Signup.validate.username();
				Signup.validate.group2();
				break;
			case "Password":
				Signup.validate.password();
				Signup.validate.group2();
				break;
			case "PasswordConfirm":
				Signup.validate.passwordConfirm();
				Signup.validate.group2();
				break;
			case "Domain":
				Signup.validate.domain();
				Signup.validate.group3();
				break;
			case "Users":
				Signup.validate.users();
				Signup.validate.group3();
				break;
			case "MailServer":
				Signup.validate.mailServer();
				Signup.validate.group3();
				break;
			case "ServerIP":
				Signup.validate.serverIP();
				Signup.validate.group3();
				break;
		}
	},
	
	validate: {

		form: {
			check: function () {
				//validate form before submission
				if(Signup.validate.group1() && Signup.validate.group2() && Signup.validate.group3() && Signup.validate.agreement())
					return this.onSuccess();
				else	
					return this.onFailure();
			},
			onSuccess: function() {
				return true;
			},
			onFailure: function() {
				Signup.validate.firstName();
				Signup.validate.lastName();
				Signup.validate.email();
				Signup.validate.phone();
				Signup.validate.country();
				Signup.validate.state();
				Signup.validate.company();
				Signup.validate.username();
				Signup.validate.password();
				Signup.validate.passwordConfirm();
				Signup.validate.domain();
				Signup.validate.users();
				Signup.validate.mailServer();
				Signup.validate.serverIP();
				
				Signup.validate.group1();
				Signup.validate.group2();
				Signup.validate.group3();
				Signup.validate.agreement();
				
				$("main").scrollTo();
				$("error_summary").update("Some of the fields were invalid. Please correct these before submitting the form.");
				$("error_summary").show();
				new Effect.Highlight("error_summary");
				return false;
			}
		},
		
		
		
		group1: function() {
			if(firstNameState == 1 && lastNameState == 1 && emailState == 1 && phoneState == 1 && countryState == 1 && stateState == 1)
			{
				Signup.markGroupValid(1);
				return true;
			}
			else
			{
				Signup.markGroupInvalid(1);
				return false;
			}
		},

		group2: function() {
			if(companyState == 1 && usernameState == 1 && passwordState == 1 && passwordConfirmState == 1)
			{
				Signup.markGroupValid(2);
				return true;
			}
			else
			{
				Signup.markGroupInvalid(2);
				return false;
			}
		},
		
		group3: function() {
			if(domainState == 1 && usersState == 1)
			{
				Signup.markGroupValid(3);
				return true;
			}
			else
			{
				Signup.markGroupInvalid(3);
				return false;
			}
		},
		
		agreement: function(event) {
			var field = event.element();
			if(field.checked)
			{
				Signup.markGroupValid(4);
				return false;
			}
			else
			{
				Signup.markGroupInvalid(4);
				return false;
			}
		},
		
		firstName: function() {
			var name = "FirstName";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter your First Name.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) firstNameState = 1; else firstNameState = 2;
			return result;
		},
		
		lastName: function() {
			var name = "LastName";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter your Last Name.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) lastNameState = 1; else lastNameState = 2;
			return result;
		},
		
		email: function() {
			var name = "Email";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) 
				Signup.showError(name, "You must enter your Email Address.", field); 
			else if(Signup.check.isValidEmail(field.value) == false)
				Signup.showError(name, "The email address you entered is invalid.", field);
			else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) emailState = 1; else emailState = 2;
			return result;
		},
		
		phone: function() {
			var name = "Phone";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter your Phone number.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) phoneState = 1; else phoneState = 2;
			return result;
		},
		
		state: function() {
			var name = "State";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter a State.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) stateState = 1; else stateState = 2;
			return result;
		},
		
		country: function() {
			var name = "Country";
			var field = $(name + "_DropDownList");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must select a Country.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) countryState = 1; else countryState = 2;
			return result;
		},
		
		company: function() {
			var name = "CompanyName";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter your Company.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) companyState = 1; else companyState = 2;
			return result;
		},
		
		username: function() {
			var name = "UserName";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) 
				Signup.showError(name, "You must enter a username.", field); 
			else if(Signup.check.isValidEmail(field.value) == true)
				Signup.showError(name, "Your username cannot be an email address.", field);
			/*else if(!Signup.liveUsername.check())
				Signup.showError(name, "The username you entered is not available.", field); */
			else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) usernameState = 1; else usernameState = 2;
			return result;
		},
		
		password: function() {
			var name = "Password";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter a password.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) passwordState = 1; else passwordState = 2;
			return result;
		},
		
		passwordConfirm: function() {
			var name = "PasswordConfirm";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) 
				Signup.showError(name, "You must enter your password again to confirm.", field); 
			else if($("Password_Textbox").value != field.value)
				Signup.showError(name, "Your passwords did not match.", field);
			else 
				{ Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) passwordConfirmState = 1; else passwordConfirmState = 2;
			return result;
		},
		
		domain: function() {
			var name = "Domain";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter a domain name.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) domainState = 1; else domainState = 2;
			return result;
		},
		
		users: function() {
			var name = "Users";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) 
				Signup.showError(name, "You must enter the number of users.", field); 
			else if(Signup.check.isNumber(field.value) == false)
				Signup.showError(name, "The number of users has to be a numeric value.", field);
			else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) usersState = 1; else usersState = 2;
			return result;
		},
		
		mailServer: function() {
			var name = "MailServer";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) Signup.showError(name, "You must enter the Mail Server Software &amp; Version.", field); else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) mailServerState = 1; else mailServerState = 2;
			return result;
		},
		
		serverIP: function() {
			var name = "ServerIP";
			var field = $(name + "_Textbox");
			var result = false;
			if(Signup.check.isEmpty(field.value)) 
				Signup.showError(name, "You must enter a valid IP address.", field); 
			else if(Signup.check.isValidIpAddress(field.value) == false)
				Signup.showError(name, "The IP address you entered is invalid.", field);
			else { Signup.showOkay(name); result = true; }
			Signup.blur(field);
			if(result) serverIPState = 1; else serverIPState = 2;
			return result;
		}
	},
	
	blur: function(field) {
		field.className = "textinput";
	},
	
	focus: function(event) {
		var field = event.element();
		var name = field.id.substring(0,field.id.indexOf("_"));
		$(name + "_Tip").show();
		field.className = "textinputfocus";
	},
	
	showOkay: function(name) {
		$(name + "_Ok").show();
		$(name + "_Error").hide();
		$(name + "_Tip").hide();
	},
	
	showError: function(name, message, field) {
		$(name + "_Ok").hide();
		$(name + "_Error").show();
		new Effect.Highlight(field);
		$(name + "_Tip").hide();
		
		$(name + "_Error").innerHTML = message;
	},
	
	markGroupValid: function(groupNumber) {
		$("group_" + groupNumber.toString() + "_number").addClassName("valid");
		$("group_" + groupNumber.toString() + "_heading").addClassName("valid");
	},
	
	markGroupInvalid: function(groupNumber) {
		$("group_" + groupNumber.toString() + "_number").removeClassName("valid");
		$("group_" + groupNumber.toString() + "_heading").removeClassName("valid");
	},
	
	check: {
		isEmpty: function(value) {
			if(value == "") return true; else return false;
		},
		
		isValidEmail: function(value) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			return reg.test(value);			
		},
		
		isValidDomain: function(value) {
			var reg = /^([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			return reg.test(value);
		},
		
		isValidIpAddress: function(value) {
			var reg = /^(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)$/;
			return reg.test(value);
		},
		
		isNumber: function(value) {
			var reg=/(^\d+$)|(^\d+\.\d+$)/
			return reg.test(value);
		}
	}
}

var PartnerApply = {

	onBlur: function(event) {
		var field = event.element();
		var name = field.id.substring(0,field.id.indexOf("_"));
		switch(name)
		{
			case "FirstName":
				PartnerApply.validate.firstName();
				PartnerApply.validate.group1();
				break;
			case "LastName":
				PartnerApply.validate.lastName();
				PartnerApply.validate.group1();
				break;
			case "Email":
				PartnerApply.validate.email();
				PartnerApply.validate.group1();
				break;	
			case "Phone":
				PartnerApply.validate.phone();
				PartnerApply.validate.group1();
				break;
			case "CompanyName":
				PartnerApply.validate.company();
				PartnerApply.validate.group1();
				break;
			case "How":
				PartnerApply.validate.how();
				PartnerApply.validate.group2();
				break;
			case "Other":
				PartnerApply.validate.other();
				PartnerApply.validate.group2();
				break;
		}
	},
	
	validate: {

		form: {
			check: function () {
				//validate form before submission
				if(PartnerApply.validate.group1() && PartnerApply.validate.group2())
					return this.onSuccess();
				else	
					return this.onFailure();
			},
			onSuccess: function() {
				return true;
			},
			onFailure: function() {
				PartnerApply.validate.firstName();
				PartnerApply.validate.lastName();
				PartnerApply.validate.email();
				PartnerApply.validate.phone();
				PartnerApply.validate.company();
				PartnerApply.validate.how();
				
				PartnerApply.validate.group1();
				PartnerApply.validate.group2();
				
				$("main").scrollTo();
				$("error_summary").update("Some of the fields were invalid. Please correct these before submitting the form.");
				$("error_summary").show();
				new Effect.Highlight("error_summary");
				return false;
			}
		},
		
		
		
		group1: function() {
			if(firstNameState == 1 && lastNameState == 1 && emailState == 1 && phoneState == 1 && companyState == 1)
			{
				PartnerApply.markGroupValid(1);
				return true;
			}
			else
			{
				PartnerApply.markGroupInvalid(1);
				return false;
			}
		},

		group2: function() {
			if(howState == 1)
			{
				Signup.markGroupValid(2);
				return true;
			}
			else
			{
				Signup.markGroupInvalid(2);
				return false;
			}
		},
		
		firstName: function() {
			var name = "FirstName";
			var field = $(name + "_Textbox");
			var result = false;
			if(PartnerApply.check.isEmpty(field.value)) PartnerApply.showError(name, "You must enter your First Name.", field); else { PartnerApply.showOkay(name); result = true; }
			PartnerApply.blur(field);
			if(result) firstNameState = 1; else firstNameState = 2;
			return result;
		},
		
		lastName: function() {
			var name = "LastName";
			var field = $(name + "_Textbox");
			var result = false;
			if(PartnerApply.check.isEmpty(field.value)) PartnerApply.showError(name, "You must enter your Last Name.", field); else { PartnerApply.showOkay(name); result = true; }
			PartnerApply.blur(field);
			if(result) lastNameState = 1; else lastNameState = 2;
			return result;
		},
		
		email: function() {
			var name = "Email";
			var field = $(name + "_Textbox");
			var result = false;
			if(PartnerApply.check.isEmpty(field.value)) 
				PartnerApply.showError(name, "You must enter your Email Address.", field); 
			else if(PartnerApply.check.isValidEmail(field.value) == false)
				PartnerApply.showError(name, "The email address you entered is invalid.", field);
			else { PartnerApply.showOkay(name); result = true; }
			PartnerApply.blur(field);
			if(result) emailState = 1; else emailState = 2;
			return result;
		},
		
		phone: function() {
			var name = "Phone";
			var field = $(name + "_Textbox");
			var result = false;
			if(PartnerApply.check.isEmpty(field.value)) PartnerApply.showError(name, "You must enter your Phone number.", field); else { PartnerApply.showOkay(name); result = true; }
			PartnerApply.blur(field);
			if(result) phoneState = 1; else phoneState = 2;
			return result;
		},
		
		company: function() {
			var name = "CompanyName";
			var field = $(name + "_Textbox");
			var result = false;
			if(PartnerApply.check.isEmpty(field.value)) PartnerApply.showError(name, "You must enter your Company.", field); else { PartnerApply.showOkay(name); result = true; }
			PartnerApply.blur(field);
			if(result) companyState = 1; else companyState = 2;
			return result;
		}
	},
	
	blur: function(field) {
		field.className = "textinput";
	},
	
	focus: function(event) {
		var field = event.element();
		var name = field.id.substring(0,field.id.indexOf("_"));
		$(name + "_Tip").show();
		field.className = "textinputfocus";
	},
	
	showOkay: function(name) {
		$(name + "_Ok").show();
		$(name + "_Error").hide();
		$(name + "_Tip").hide();
	},
	
	showError: function(name, message, field) {
		$(name + "_Ok").hide();
		$(name + "_Error").show();
		new Effect.Highlight(field);
		$(name + "_Tip").hide();
		
		$(name + "_Error").innerHTML = message;
	},
	
	markGroupValid: function(groupNumber) {
		$("group_" + groupNumber.toString() + "_number").addClassName("valid");
		$("group_" + groupNumber.toString() + "_heading").addClassName("valid");
	},
	
	markGroupInvalid: function(groupNumber) {
		$("group_" + groupNumber.toString() + "_number").removeClassName("valid");
		$("group_" + groupNumber.toString() + "_heading").removeClassName("valid");
	},
	
	check: {
		isEmpty: function(value) {
			if(value == "") return true; else return false;
		},
		
		isValidEmail: function(value) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			return reg.test(value);			
		},
		
		isValidDomain: function(value) {
			var reg = /^([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			return reg.test(value);
		},
		
		isValidIpAddress: function(value) {
			var reg = /^(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)\.(([1-9][0-9]{0,2})|0)$/;
			return reg.test(value);
		},
		
		isNumber: function(value) {
			var reg=/(^\d+$)|(^\d+\.\d+$)/
			return reg.test(value);
		}
	}
}





var DropDownMenu = Class.create();

DropDownMenu.prototype = {

 initialize: function(menuElement) {
	menuElement.childElements().each(function(node){
		// if there is a submenu
		var submenu = $A(node.getElementsByTagName("ul")).first();
		if(submenu != null){
			// make sub-menu invisible
			Element.extend(submenu).setStyle({display: 'none'});
			// toggle the visibility of the submenu
			node.onmouseover = node.onmouseout = function(){
				Element.toggle(submenu);
			}
		}
	});
}

};

