function DL_QualWidget()
{
	this.url = "http://direct.digitallanding.com";
	this.submitButtonImage = "http://direct.digitallanding.com/App_Themes/DigitalLanding/images/btn_compare_choose.gif";
	this.phoneSwapText = "Use Phone Instead";
	this.addressSwapText = "Use Address Instead";
	this.InvalidPhoneNumberError = "Please enter a valid phone number.";
	this.InvalidAddressError = "Please enter a valid address.";
	this.InvalidZipError = "Please enter a valid zip code.";
	this.InvalidApartmentError = "The apartment you have entered is not valid.";
	this.InvalidCityError = "Please enter a valid city.";
	this.InvalidStateError = "Please select a state.";
	
	this.mode = this.DisplayMode.PHONE;
	
	this.PhoneRequired = true;
	this.AddressRequired = true;
	this.EmailRequired = false;
	this.AllowModeSwitch = true;
	
	this.option1 = null;
	this.option2 = null;
	this.option3 = null;
	this.option4 = null;
	this.option5 = null;
	this.PromoID = null;
}

DL_QualWidget.prototype.SwapLink = function()
{
	var txt = "";
	if(this.AllowModeSwitch)
	{
		if(this.mode == this.DisplayMode.PHONE)
			txt = this.addressSwapText;
		else if(this.mode == this.DisplayMode.ADDRESS)
			txt = this.phoneSwapText;
	}
					
	if(txt)
		document.write(txt);
}

DL_QualWidget.prototype.SubmitImage = function()
{
	var submitBtn = this.submitButtonImage;
	document.write("<img src='");
	document.write(submitBtn);
	document.write("'/>");
}

DL_QualWidget.prototype.PhoneOver =	function(e)
{
	var element = e.srcElement || e.target;
	var chr = e.charCode || e.keyCode;
	if(chr == 9 || chr == 16) return; //ignore tab and shift key
	var len = element.value.length;
	switch( element.id )
	{
		case "dl_areaInput" :
			if(len == 3)
			{
				this.selectInput("dl_prefixInput");
			}
			break;
		case "dl_prefixInput":
			if(len == 3) { this.selectInput("dl_suffixInput"); }
			break;
		case "suffixInput":
			if(len == 4)
			{
				var emailPanel = this.$("dl_emailPanel");
				if(emailPanel.style.display != "none")
					this.selectInput("dl_emailInput");
			}
			break;
	}
}

DL_QualWidget.prototype.selectInput = function(inputID)
{
	var input = this.$(inputID);
	input.focus();
	if(input.select && input.type != "button")
		input.select();
}

DL_QualWidget.prototype.$ = function(id) { return document.getElementById(id); }

DL_QualWidget.prototype.SwapPanels = function()
{
	if ( (this.mode & this.DisplayMode.PHONE) == this.DisplayMode.PHONE )
	{
		this.mode = this.DisplayMode.ADDRESS;
		this.$("dl_addressPanel").style.display = "block";
		this.$("dl_phonePanel").style.display = "none";
		this.$("dl_swapLink").innerHTML = this.phoneSwapText;
	}
	else if((this.mode & this.DisplayMode.ADDRESS) == this.DisplayMode.ADDRESS)
	{
		this.mode = this.DisplayMode.PHONE;
		this.$("dl_addressPanel").style.display = "none";
		this.$("dl_phonePanel").style.display = "block";
		this.$("dl_swapLink").innerHTML = this.addressSwapText;
	}
}

DL_QualWidget.prototype.DisplayMode = 
{
	ADDRESS: 1,
	PHONE: 2,
	ADDRESSANDPHONE: 3
}

DL_QualWidget.prototype.SubmitAddress = function()
{
	if( this.IsValid() )
	{
		var queryVars = {};
		var phonePanel = this.$("dl_phonePanel");
		if( phonePanel.style.display == "" ||phonePanel.style.display=="block")
		{
			var phone = this.$("dl_areaInput").value + this.$("dl_prefixInput").value + this.$("dl_suffixInput").value;
			if(phone)
				queryVars["phone"] = phone;
		}
		
		var addrPanel = this.$("dl_addressPanel");
		if( addrPanel.style.display == ""||addrPanel.style.display=="block")
		{
			queryVars["address"] = this.$("dl_addressInput").value;
			var aptFld = this.$("dl_apartmentInput");
			var apt = aptFld?aptFld.value:null;
			if(apt) queryVars["apt"] = apt;
			var cityFld = this.$("dl_cityInput");
			var city = cityFld?cityFld.value:null;
			if(city) queryVars["city"] = city;
			var stateDDLID = this.$("dl_stateDDLID");
			if(stateDDLID)
			{
				var stateDDL = this.$(stateDDLID.value);
				var state = stateDDL?stateDDL.options[stateDDL.selectedIndex].value:null;
				if(state) queryVars["state"] = state;
			}
			
			var zipFld = this.$("dl_zipCodeInput");
			var zip = zipFld?zipFld.value:null;
			if(zip) queryVars["zip"] = zip;
		}


		var affFld = this.$("dl_affInput");
		var aff = affFld?affFld.value:null;
		if(aff) queryVars["option2"] = aff;

		// queryVars["option2"] = this.$("dl_affInput").value;
		

		var emailFld = this.$("dl_emailInput");
		var email = emailFld?emailFld.value:null;
		if(email && (emailRegex.test(email)))
		{
			if(email) queryVars["email"] = email;
		}
		
		//GetCampaignCustomizations(queryVars);
		
		var querystring = this.getQuery(queryVars);
				
		var u = this.url + "/dispatch_redirect.html" + querystring;
		window.location.href = u;
		if(window.event)
			window.event.returnValue = false;		
	}
}

DL_QualWidget.prototype.getQuery = function(vars)
{
	var q = "?";
	var kvps = [];
	for(var v in vars)
	{
		if(v)
			kvps.push(v+"="+encodeURI(vars[v]));
	}
	
	var extras = ["option1", "option2", "option3", "option4", "option5", "PromoID"];
	for(var i=0; i<extras.length; i++)
	{
		if(this[extras[i]])
			kvps.push(extras[i]+"="+encodeURI(this[extras[i]]));
	}

	q += kvps.join("&");
	
	return q;
}

DL_QualWidget.prototype.IsValid = function()
{
	var valid = true;
	var phoneShowing = ((this.mode & this.DisplayMode.PHONE) == this.DisplayMode.PHONE);
	var phoneValid = true;
	var addressShowing = ((this.mode & this.DisplayMode.ADDRESS) == this.DisplayMode.ADDRESS);
	var addressValid = true;
	var phone = this.$("dl_areaInput").value + this.$("dl_prefixInput").value + this.$("dl_suffixInput").value;
	
	if(phoneShowing)
	{
		if(!IsPhoneValid(phone, this.PhoneRequired))
		{
			this.$("dl_phoneMarker").style.display = "";
			phoneValid = false;
			alert(this.InvalidPhoneNumberError);
			this.$("dl_areaInput").focus();
			return false;
		}
	}
	
	if(addressShowing)
	{
		addressValid &= this.ValidateAddressField("dl_address", IsAddressValid, this.AddressRequired, this.InvalidAddressError);
		if(!addressValid)
		{
			this.$("dl_addressInput").focus();
			return false;
		}
		addressValid &= this.ValidateAddressField("dl_zipCode", IsZipValid, this.AddressRequired, this.InvalidZipError);
		if(!addressValid)
		{
			this.$("dl_zipCodeInput").focus();
			return false;
		}
		
		
		addressValid &= this.ValidateAddressField("dl_apartment", IsApartmentValid, false, this.InvalidApartmentError, "dl_apt");
		addressValid &= this.ValidateAddressField("dl_city", IsCityValid, false, this.InvalidCityError);
		
		/*
		var stateDDLID = this.$("stateDDLID");
		if(stateDDLID)
		{
			var stateDDL = $(stateDDLID.value);
			if(stateDDL)
			{
				if(!IsStateValid($F(stateDDL)), false)
				{
					this.$("dl_stateMarker").style.display = "";
					addressValid = false;
					alert(this.InvalidStateError);
				}
				else
				{
					this.$("dl_stateMarker").style.display = "none";
				}
			}
		}
		*/
	}
	
	valid = phoneValid && addressValid;
	
	var email = this.$("dl_emailInput").value;
	if(this.EmailRequired)
	{
		if (!email) valid = false;
	}
	else if(email && !IsEmailValid(email))
	{
		valid = false;
	}

	return valid;
}

DL_QualWidget.prototype.ValidateAddressField = function(fldID, validationFunction, required, errMsg, markerID)
{
	var valid = true;
	markerID = markerID || fldID;
	var fld = this.$(fldID + "Input");
	if(!fld)
	{
		valid = !required;
	}
	else
	{
		if(!validationFunction(fld.value, required))
		{
			this.$(markerID + "Marker").style.display = "inline";
			valid = false;
			alert(errMsg);
		}
		else
		{
			this.$(markerID + "Marker").style.display = "none";
		}
	}
	
	return valid;
}

//10 digit string returns true
function IsPhoneValid(phone, required)
{
	if(phone.length == 0 && !required)
		return true;
		
	if(required && phone.length == 0)
		return false;
	else if(isNaN(phone))
		return false;
	else if(phone.length != 10)
		return false;
	
	return true;
}

function IsApartmentValid(apt, required)
{
	if(apt.length == 0 && !required)
		return true;
		
	if(required && apt.length == 0)
		return false;
	else
	{
		var exp = /^[A-Za-z0-9]*$/;
		return (apt.length==0 || exp.test(apt));
	}
}

//5 digit string returns true
var zipRegex = /^\d{5}$/;
function IsZipValid(zip, required)
{
	if(zip.length == 0 && !required)
		return true;
		
	if(required && zip.length == 0)
		return false;
	else if(isNaN(zip))
		return false;
	else if(zip.length != 5)
		return false;
		
	return zipRegex.test(zip);
}

//non-empty string returns true
function IsAddressValid(addr, required)
{
	if(addr.length == 0)
		return !required;
	
	return true;
}

function IsCityValid(city, required)
{
	var cityRegex = /^[A-Za-z ]*$/
	if(!cityRegex.test(city))
		return !required;
		
	return true;
}

function IsStateValid(state, required)
{
	if(state.length == 0)
		return !required;
		
	return true;
}

function IsEmailValid(email, required)
{
	if(email.length == 0 && !required)
		return true;
		
	if(required && email.length == 0)
		return false;
	else if(email.length > 0)
		return (emailRegex.test(email));
	else
		return true;
		
}

var emailRegex = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;

var DigitalLanding = new DL_QualWidget();