function DL_QualWidget()
{
	this.url = "http://staging.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.InvalidEmailError = "Please enter a valid email address.";
	
	this.standInText = new Hash();
	//this.standInText.set("dl_addressInput", "Type address here");
	//this.standInText.set("dl_emailInput", "Email@email.com");
	
	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;
	
	this.standinFocus = this.inputStandinFocus.bind(this);
	this.standinBlur = this.inputStandinBlur.bind(this);
	
    Event.observe(window, "load", this.init.bind(this));
}

DL_QualWidget.prototype.init = 
function()
{
	this.setupStandInText();
}

DL_QualWidget.prototype.setupStandInText =
function()
{
	var obj = this;
	this.standInText.each( function(pair)
	{
		var input = $(pair.key);
		if(input.type != "text") return;
		input.value = pair.value;
		input.className = "landing-qualpanel-input-standin";
		Event.observe(input, "focus", obj.standinFocus);
	});
}

DL_QualWidget.prototype.inputStandinFocus =
function(evt)
{
	var input = Event.element(evt);
	Event.stopObserving(input, "focus", this.standinFocus);
	
	var standinText = this.standInText.get(input.id);
	var text = input.value;
	if(text == standinText)
	{
		input.className = "";
		input.value = "";
	}
	Event.observe(input, "blur", this.standinBlur);
}

DL_QualWidget.prototype.inputStandinBlur =
function(evt)
{
	var input = Event.element(evt);
	Event.stopObserving(input, "blur", this.standinBlur);
	
	var standinText = this.standInText.get(input.id);
	var text = input.value;
	if(text == "")
	{
		input.value = standinText;
		input.className = "landing-qualpanel-input-standin";
	}
	
	Event.observe(input, "focus", this.standinFocus);
}

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 areacode = $F("dl_areaInput");
			var prefix = $F("dl_prefixInput");
			var suffix = $F("dl_suffixInput");
			if(areacode != this.standInText.get("dl_areaInput") && prefix != this.standInText.get("dl_prefixInput") && suffix != this.standInText.get("dl_suffixInput"))
			{
				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")
		{
			var addr = $F("dl_addressInput");
			if(addr && addr != this.standInText.get("dl_addressInput"))
				queryVars["address"] = addr;
			var aptFld = $("dl_apartmentInput");
			var apt = aptFld?aptFld.value:null;
			if(apt && apt != this.standInText.get("dl_apartmentInput")) queryVars["apt"] = apt;
			var cityFld = $("dl_cityInput");
			var city = cityFld?cityFld.value:null;
			if(city && cityFld != this.standInText.get("dl_cityInput")) queryVars["city"] = city;
			/*
			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 = $("dl_zipCodeInput");
			var zip = zipFld?zipFld.value:null;
			if(zip && zip != this.standInText.get("dl_zipCodeInput")) queryVars["zip"] = zip;
			/*
			var zipFld = this.$("dl_zipCodeInput");
			var zip = zipFld?zipFld.value:null;
			if(zip) queryVars["zip"] = zip;
			*/
		}
		
		var emailFld = this.$("dl_emailInput");
		var email = emailFld?emailFld.value:null;
		//if(email && (emailRegex.test(email)))
		if(email && email != this.standInText.get("dl_emailInput"))
		{
			if(email) queryVars["email"] = email;
		}
		
		//GetCampaignCustomizations(queryVars);
		
		var querystring = this.getQuery(queryVars);
		
		var u = this.url + "/dispatch.aspx" + 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", this.IsApartmentValid.bind(this), 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 && !this.IsEmailValid(email))
	{
		alert(this.InvalidEmailError);
		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 if(required && fld.value == this.standInText.get(fld.id))
		{
			$(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;
}

DL_QualWidget.prototype.IsApartmentValid = function(apt, required)
{
	var aptStandInText = this.standInText.get("dl_apartmentInput");
	var exp = /^[A-Za-z0-9]*$/;
		
	if(required)
	{
		if(!apt || apt == aptStandInText || !exp.test(apt))
			return false;
	}
	else
	{
		if(apt && apt.length > 0 && apt != aptStandInText && !exp.test(apt))
			return false;
	}
	
	return true;
	/*
	var aptStandInText = this.standInText.get("dl_apartmentInput");
	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;
}

DL_QualWidget.prototype.IsEmailValid = function(email, required)
{
	var emailStandInText = this.standInText.get("dl_emailInput");
	
	if(required)
	{
		if(email.length > 0 && email == emailStandInText)
			return false;
	}
	else
    {
		if( email && email.length > 0 && email != emailStandInText && !emailRegex.test(email))
			return false;
    }

	
	return true;		
	/*
	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();
