/*
 * ELSW_widget.js
 * Author: Kevin Powell
 */
function loadjscssfile(filename, filetype){
	var fileref="";
	if (filetype=="js"){ //if filename is a external JavaScript file
		fileref=document.createElement('script');
		fileref.setAttribute("type","text/javascript");
		fileref.setAttribute("src", filename);
	}
	else if (filetype=="css"){ //if filename is an external CSS file
		fileref=document.createElement("link");
		fileref.setAttribute("rel", "stylesheet");
		fileref.setAttribute("type", "text/css");
		fileref.setAttribute("href", filename);
	}
	if (typeof fileref!="undefined"){
		document.getElementsByTagName("head")[0].appendChild(fileref);	 	
	}
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
  	  window.onload = func;
  } 
	else {
		window.onload = function() {
      		if (oldonload) {
        		oldonload();
      		}
      		func();
    	};
  }
}


//Load the dependency loader only once
if (typeof window.lampoLoadAdded == 'undefined'){
	window.lampoLoadAdded = true;
	addLoadEvent(function() {
		loadjscssfile("http://a248.e.akamai.net/f/1611/26335/9h/dramsey.download.akamai.com/23572/daveramsey.com/resources/javascript/external_widgets/widget_dependency_loader.js?1275463751", "js");
	});
}

if (typeof window.lampoElpWidgetInitialized == 'undefined') {
	window.lampoElpWidgetInitialized = true;
	addLoadEvent(function(){
		//start calling dependency checker until all needed dependencies are available
		//verify that all dependencies have loaded before initializing widget
		if (typeof elp_widget_initialized == 'undefined') {
			elpWidgetDependenciesInterval = window.setInterval("elpWidgetDependenciesLoaded()", 200);
		}
	});
}

var ramsey_elp_widget_css_loaded = false;

function elpWidgetDependenciesLoaded(){
	if ((typeof ramsey_ui_loaded != 'undefined' && ramsey_ui_loaded) && 
		(typeof ramsey_mask_loaded != 'undefined' && ramsey_mask_loaded) && 
		(typeof ramsey_validate_loaded != 'undefined' && ramsey_validate_loaded)){
		elpWidgetCssInterval = window.setInterval("loadElpWidgetCss()", 200);
		if (ramsey_elp_widget_css_loaded){
			window.clearInterval(elpWidgetDependenciesInterval);
			//everything we need is loaded
			if (typeof elp_widget_initialized == 'undefined'){
				elp_widget_initialized = true
				loadjQueryExtensions();
				loadElpWidget();
			}
		}
	}
}

function loadElpWidgetCss(){
	if (typeof elpWidgetCssCalled == 'undefined'){
		elpWidgetCssCalled = true;
		if (typeof window.init_domain == 'string'){
			var url = window.init_domain+'/resources/css/brand/elp/elp_lead_widget.css';
		}
		else{
			var url = "http://a248.e.akamai.net/f/1611/26335/9h/dramsey.download.akamai.com/23572/daveramsey.com/resources/css/brand/elp/elp_lead_widget.css?1275463751";
		}
		loadjscssfile(url, "css");
		$j_ramsey_142("body").prepend("<div id='dave_ramsey_css_test' style='display:none'>test</div>");
	}
	
	if ($j_ramsey_142("#dave_ramsey_css_test").css("height") == "80px"){
		window.clearInterval(elpWidgetCssInterval);
		$j_ramsey_142("#dave_ramsey_css_test").remove();
		//css needed has been loaded
		ramsey_elp_widget_css_loaded = true;
	}
}

function loadjQueryExtensions(){
/* JSON Jquery Extension*/
(function ($) {
    m = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
	};
	$.toJSON = function (value, whitelist) {
		var a,          // The array holding the partial texts.
			i,          // The loop counter.
			k,          // The member key.
			l,          // Length.
			r = /["\\\x00-\x1f\x7f-\x9f]/g,
			v;          // The member value.

		switch (typeof value) {
		case 'string':
			return r.test(value) ?
				'"' + value.replace(r, function (a) {
					var c = m[a];
					if (c) {
						return c;
					}
					c = a.charCodeAt();
					return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
				}) + '"' :
				'"' + value + '"';

		case 'number':
			return isFinite(value) ? String(value) : 'null';

		case 'boolean':
		case 'null':
			return String(value);

		case 'object':
			if (!value) {
				return 'null';
			}
			if (typeof value.toJSON === 'function') {
				return value.toJSON();
			}
			a = [];
			if (typeof value.length === 'number' &&
					!(value.propertyIsEnumerable('length'))) {
				l = value.length;
				for (i = 0; i < l; i += 1) {
					a.push($.toJSON(value[i], whitelist) || 'null');
				}
				return '[' + a.join(',') + ']';
			}
			if (whitelist) {
				l = whitelist.length;
				for (i = 0; i < l; i += 1) {
					k = whitelist[i];
					if (typeof k === 'string') {
						v = $.toJSON(value[k], whitelist);
						if (v) {
							a.push($.toJSON(k) + ':' + v);
						}
					}
				}
			} else {
				for (k in value) {
					if (typeof k === 'string') {
						v = $.toJSON(value[k], whitelist);
						if (v) {
							a.push($.toJSON(k) + ':' + v);
						}
					}
				}
			}
			return '{' + a.join(',') + '}';
		}
	};
	
})(jQuery);
// jquery.jsonp 2.1.2 (c)2010 Julian Aubourg | MIT License
// http://code.google.com/p/jquery-jsonp/
(function(e,b){function d(){}function t(C){c=[C]}function m(C){f.insertBefore(C,f.firstChild)}function l(E,C,D){return E&&E.apply(C.context||C,D)}function k(C){return/\?/.test(C)?"&":"?"}var n="async",s="charset",q="",A="error",r="_jqjsp",w="on",o=w+"click",p=w+A,a=w+"load",i=w+"readystatechange",z="removeChild",g="<script/>",v="success",y="timeout",x=e.browser,f=e("head")[0]||document.documentElement,u={},j=0,c,h={callback:r,url:location.href};function B(C){C=e.extend({},h,C);var Q=C.complete,E=C.dataFilter,M=C.callbackParameter,R=C.callback,G=C.cache,J=C.pageCache,I=C.charset,D=C.url,L=C.data,P=C.timeout,O,K=0,H=d;C.abort=function(){!K++&&H()};if(l(C.beforeSend,C,[C])===false||K){return C}D=D||q;L=L?((typeof L)=="string"?L:e.param(L,C.traditional)):q;D+=L?(k(D)+L):q;M&&(D+=k(D)+escape(M)+"=?");!G&&!J&&(D+=k(D)+"_"+(new Date()).getTime()+"=");D=D.replace(/=\?(&|$)/,"="+R+"$1");function N(S){!K++&&b(function(){H();J&&(u[D]={s:[S]});E&&(S=E.apply(C,[S]));l(C.success,C,[S,v]);l(Q,C,[C,v])},0)}function F(S){!K++&&b(function(){H();J&&S!=y&&(u[D]=S);l(C.error,C,[C,S]);l(Q,C,[C,S])},0)}J&&(O=u[D])?(O.s?N(O.s[0]):F(O)):b(function(T,S,U){if(!K){U=P>0&&b(function(){F(y)},P);H=function(){U&&clearTimeout(U);T[i]=T[o]=T[a]=T[p]=null;f[z](T);S&&f[z](S)};window[R]=t;T=e(g)[0];T.id=r+j++;if(I){T[s]=I}function V(W){(T[o]||d)();W=c;c=undefined;W?N(W[0]):F(A)}if(x.msie){T.event=o;T.htmlFor=T.id;T[i]=function(){T.readyState=="loaded"&&V()}}else{T[p]=T[a]=V;x.opera?((S=e(g)[0]).text="jQuery('#"+T.id+"')[0]."+p+"()"):T[n]=n}T.src=D;m(T);S&&m(S)}},0);return C}B.setup=function(C){e.extend(h,C)};e.jsonp=B})(jQuery,setTimeout);////END OF JQUERY EXTENSIONS
}

var form_name = "#externalLeadSubmission";

var why_ask_displayed = false;
var arrTypes = [];
var re_type = '';
var transition_running = false;
var arrSlideQueue = [];
var slideInterval = "";
var elp_widget_domain=window.location.hostname;
if (elp_widget_domain == ""){
	elp_widget_domain = "nodomain.com";
}
function loadElpWidget(){
	var init_domain = window.init_domain||'http://www.daveramsey.com'; // like a cfparam
	$j_ramsey_142(document).ready(function(){
		//security check and initialization
		$j_ramsey_142.jsonp({
			url: init_domain+"/elp/external-widget-markup",
			data: ({json : '{"source":"'+elp_widget_domain+'"}'}),
			cache: true,
			callbackParameter: "callback",
			error: function(xObject){
				//do nothing, this domain is not authorized to display the widget
			},
			success: function(json){
				var launch_image = 'http://a248.e.akamai.net/f/1611/26335/9h/dramsey.download.akamai.com/23572/daveramsey.com/media/broadcast/widgets/lead_submission/elpre_widget_launcher.jpg';
				//domain usage is authorized, display widget
				//if IE6, load pngfix function
				if ($j_ramsey_142.browser.msie) {
				  if (parseInt($j_ramsey_142.browser.version) == '6'){
					loadjscssfile("http://a248.e.akamai.net/f/1611/26335/9h/dramsey.download.akamai.com/23572/daveramsey.com/resources/javascript/DD_belatedPNG.js?1269327870", "js"); 
				  }
				}
				$j_ramsey_142("script[rel='ramsey_widget_elp']").after("<div id='dave_ramsey_elp_widget_launch' class='dave_ramsey_widget_launch'><img src='"+launch_image+"'/></div><div id='dave_ramsey_elp_widget'></div>").hide();
				$j_ramsey_142("#dave_ramsey_elp_widget").append(unescape(decodeURI(json.html)));
				logOmnitureData("loaded");
				var initialization=true;
				$j_ramsey_142("#dave_ramsey_elp_widget").dialog({position:['center', 60], autoOpen:false, modal:true, dialogClass:"ramsey_elp_widget", draggable:false, resizable:false});
				$j_ramsey_142("#dave_ramsey_elp_widget_launch").click(function(){
					logOmnitureData("launched");
					$j_ramsey_142( "#dave_ramsey_elp_widget" ).unbind().bind( "dialogbeforeclose", function(event, ui) {
						logOmnitureData("closed");
					});
					var originalScrollTop = $j_ramsey_142(window).scrollTop();
					$j_ramsey_142("#dave_ramsey_elp_widget").dialog('open');
					$j_ramsey_142(window).scrollTop(originalScrollTop);
					initializeWidget();
				});
			}
		});
		
		//listen events
		$j_ramsey_142(".advance_form").live("click", function(){
			if ($j_ramsey_142(this).hasClass("re_landing_btn")){
				re_type = $j_ramsey_142(this).attr("id");
			}
			gotoNextSlide($j_ramsey_142(this).parent('.widget_slide').attr('id'));
			return false;
		});
		
		$j_ramsey_142(".submit_widget").live("click", function(){
			submitWidget($j_ramsey_142(this).parent('.widget_slide').attr('id'));
			return false;
		});
		
		$j_ramsey_142(form_name+" input[name=t]").live("click", function(){
			if ($j_ramsey_142(form_name+' input[name=t]:checked').size() > 0){
				$j_ramsey_142("p#checkbox_error").html("");
			}
		});
		
		$j_ramsey_142(form_name+" input").live("keydown", function(event){
			removeLabel(event, $j_ramsey_142(this).attr("id"));
		});
		
		$j_ramsey_142(form_name+" input").live("keyup", function(event){
			replaceLabel(event, $j_ramsey_142(this).attr("id"));
		});
		
		$j_ramsey_142(form_name+" input").live("focusin", function(event){
			if (($j_ramsey_142(this).attr("id") == "rp" || $j_ramsey_142(this).attr("id") == "fp") && !$j_ramsey_142(this).hasClass("masked_input")){
				$j_ramsey_142(this).mask("(999) 999-9999", {placeholder:" "}).addClass("masked_input");
				$j_ramsey_142(this).siblings("label").hide();
			}
			if ($j_ramsey_142(this).hasClass("masked_input")){
				$j_ramsey_142(this).siblings("label").hide();
			}
			if ($j_ramsey_142(this).hasClass("text_input_field")){
				$j_ramsey_142(this).siblings("label").animate({opacity: 0.3}, 300);
			}
		});
		
		$j_ramsey_142(form_name+" input").live("focusout", function(event){
			replaceLabel(event, $j_ramsey_142(this).attr("id"));
			if ($j_ramsey_142(this).hasClass("masked_input") && $j_ramsey_142(this).val() == '(   )    -    '){
				$j_ramsey_142(this).siblings("label").show();
			}
			if ($j_ramsey_142(this).hasClass("text_input_field")){
				$j_ramsey_142(this).siblings("label").animate({opacity: 1}, 300);
			}
		});
		
		$j_ramsey_142(form_name+" .why_ask").live("click", function(){
			if (why_ask_displayed === false){
				why_ask_displayed = true;
				var box_name = "why_ask_"+$j_ramsey_142(this).attr("id").substring(13);
				var why_ask_wrap = "<div id='why_ask_wrap' style='display:none;'><div id='why_ask_box'>"+$j_ramsey_142("#"+box_name).html()+"</div></div>";
				$j_ramsey_142("#dave_ramsey_elp_widget").append(why_ask_wrap);
				var wrap_height = $j_ramsey_142("#why_ask_wrap").innerHeight();
				$j_ramsey_142("#why_ask_wrap").css({height:wrap_height+"px",bottom:"-"+wrap_height+"px"}).show().animate({bottom:0}, 500);
				if ($j_ramsey_142.browser.msie) {
  					if (parseInt($j_ramsey_142.browser.version) == 6){
						//hide select boxes for IE6	
						$j_ramsey_142(this).parent().parent().siblings().children("select").css("visibility", "hidden");					
					}
				}
			}
		});

		$j_ramsey_142("#dave_ramsey_elp_widget .close_widget").live("click", function(){
			$j_ramsey_142("#dave_ramsey_elp_widget").dialog('close');
		});
		
		$j_ramsey_142("#dave_ramsey_elp_widget .why_ask_close").live("click", function(){
			if (why_ask_displayed === true){				
				var close_height = $j_ramsey_142("#why_ask_wrap").innerHeight();
				$j_ramsey_142("#why_ask_wrap").animate({bottom:"-"+close_height}, 500, function(){
					$j_ramsey_142("#why_ask_wrap").remove();
					why_ask_displayed = false;
					if ($j_ramsey_142.browser.msie) {
	  					if (parseInt($j_ramsey_142.browser.version) == 6){
							//show select boxes for IE6						
							$j_ramsey_142("#dave_ramsey_elp_widget select").css("visibility", "visible");					
						}
					}
				});
			}
		});
		
		//Extend the default validate plugin with additional validators
		$j_ramsey_142.validator.addMethod("phoneUS", function(phone_number, element) {
			phone_number = phone_number.replace(/\s+/g, ""); 
			return this.optional(element) || phone_number.length > 9 &&
				phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
			}, "Please enter a valid phone number");
		
		$j_ramsey_142.validator.addMethod("fullName", function(full_name, element) {
			return this.optional(element) || 
				full_name.match(/^[a-z][a-z\']+ \s?[a-z][a-z\'\.\- ]+$/i);
			}, "Please provide a valid first and last name");
			
		$j_ramsey_142.validator.addMethod("nonNumeric", function(non_numeric, element) {
			return this.optional(element) || 
				non_numeric.match(/[^0-9]/);
			}, "Numbers are not allowed");
			
			
	});
}

function removeLabel(event, id){
	//don't trigger on shift
	if (event.keyCode != 16 && $j_ramsey_142("#"+id).attr("type") != "checkbox"){
		$j_ramsey_142("#"+id).siblings("label").hide();
	}
}

function replaceLabel(event, id){
	if ($j_ramsey_142.trim($j_ramsey_142("#"+id).attr("value")).length == 0 && !$j_ramsey_142("#"+id).hasClass("masked_input")){
		$j_ramsey_142("#"+id).siblings("label").show();
	}
}

function validateField(object){
		var input_name = "#"+object.attr("name");
		var default_value = object.attr("value");
		return $j_ramsey_142(form_name).validate().element(input_name);
	}

function checkSlideForErrors(slide_id){
	var errors = false;
	var typeChecked = false;
	$j_ramsey_142('#'+slide_id+' input').each(function(){
		var name = $j_ramsey_142(this).attr("name");
		if (name == 't'){
			if ($j_ramsey_142(form_name+' input[name=t]:checked').size() == 0 && typeChecked == false){
				typeChecked = true;
				$j_ramsey_142("#checkbox_error").html("<div class='field_status_invalid' style='position:relative;top:1px;width:16px;float:left;'></div>Please choose at least one ELP type");
				errors = true;
			}
		}
		else if (name == 'sl' || name == 'sm'){
			//don't validate these fields, they're radio buttons, one of them is selected
		}
		else {
			if (validateField($j_ramsey_142(this)) == false && errors == false) {
				errors = true;
			};
		}
	});
	
	$j_ramsey_142('#'+slide_id+' select').each(function(){
		if (validateField($j_ramsey_142(this)) == false && errors == false){
				errors = true;
			};
	});
	
	return errors;
}

function gotoNextSlide(slide_id){
	//check for errors before advancing the widget
	var errors = checkSlideForErrors(slide_id);
	
	switch(slide_id){
		case "type_choices":
			//log which checkboxes were checked here because IE6 blows them away during the slide transition animation (jquery's wrap() function is likely the culprit)
			arrTypes.length = 0;
			$j_ramsey_142(form_name+' input[name=t]:checked').each(function(){
					arrTypes.push($j_ramsey_142(this).val());
			});
			if ($j_ramsey_142("#type_r").is(":checked")){
				next_slide = "#realestate_landing";
				modifyElpTerms();
				if (arrTypes.length == 1){
					//we know real estate was checked, and nothing else was checked
					logOmnitureData("re_start", arrTypes);
				}
				else if (arrTypes.length > 1){
					//real estate and at least one other (financial) type were checked
					logOmnitureData("mixed_start", arrTypes);					
				}
			}
			else{
				modifyElpTerms();
				next_slide = "#financial_contact";
				logOmnitureData("fin_start", arrTypes);
			}
			break;
		case "realestate_landing":
			modifyElpTerms();
			if (re_type == 're_sellbuy_btn' || re_type == 're_sell_btn'){
				next_slide = "#realestate_sell";
				if (re_type == 're_sellbuy_btn'){
					logOmnitureData("re_bns");
				}
				else if (re_type == 're_sell_btn'){
					logOmnitureData("re_sell");
				}
			}
			else{
				next_slide = "#realestate_buy";
				logOmnitureData("re_buy");
			}
			break;
		case "realestate_sell":
			if (re_type == 're_sellbuy_btn'){
				next_slide = "#realestate_buy";
			}
			else{
				next_slide = "#realestate_contact";
			}
			logOmnitureData("sell_complete");
			break;
		case "realestate_buy":
			next_slide = "#realestate_contact";
			logOmnitureData("buy_complete");
			break;
		default:
			next_slide = "#type_choices";
			break;
	}
	if (!errors){
		displaySlide(next_slide);
	}
}

function modifyElpTerms(){
	if (arrTypes.length > 1 || (typeof re_type != 'undefined' && re_type == 're_sellbuy_btn')){
		$j_ramsey_142("#dave_ramsey_elp_widget .dave_ramsey_elp_plural").html("ELPs");
	}
	else{
		$j_ramsey_142("#dave_ramsey_elp_widget .dave_ramsey_elp_plural").html("ELP");
	}
}

var blnDemoMode = false;
function initializeWidget(){
	if ($j_ramsey_142.browser.msie) {
		if (parseInt($j_ramsey_142.browser.version) == 6) {
			DD_belatedPNG.fix('.ui-dialog-titlebar-close');
		}
	}
	if ($j_ramsey_142(form_name).attr("action") == 'DEMO'){
		blnDemoMode = true;
	}
	$j_ramsey_142(".widget_slide").hide();
	$j_ramsey_142(form_name+" .field_error_message").html("");
	$j_ramsey_142(form_name+" .field_status_untouched").removeClass("field_status_invalid");
	$j_ramsey_142(form_name+" .field_with_error").removeClass("field_with_error");
	//reset all form fields
	$j_ramsey_142(form_name+" input[type=text]").each(function(){
		$j_ramsey_142(this).val("").removeClass("masked_input").siblings("label").show();
	});
	$j_ramsey_142(form_name+" select").each(function(){
		$j_ramsey_142(this).val("");
	});
	$j_ramsey_142(form_name+" input[type=checkbox]").attr('checked', false);
	$j_ramsey_142("#type_choices").show();
	//Live Validation Rules
	$j_ramsey_142(form_name).validate({
		focusInvalid: true,
		 onfocusout: 
			 function(element) {
	                if ((element.name == "fp" || element.name == "rp") && element.value == "(   )    -    ") {
						//do nothing, don't validate if the default mask value is in place
						return false;
					}
					else if(element.value != ""){
						$j_ramsey_142(element).valid();
					}
				},
			rules: {
				fn: {
					required: true,
					nonNumeric: true,
					fullName: true
				},
				fe: {
					required: true,
					email: true
				},
				fp: {
					required: true,
					phoneUS: true
				},
				fz:{
					required: true,
					digits: true,
					rangelength: [5,5]
				},
				sa: {
					required: true,
					minlength: 2
				},
				sc: {
					required: true,
					minlength: 2
				},
				ss: {
					required:true
				},
				sz:{
					required: true,
					digits: true,
					rangelength: [5,5]
				},
				sp: {
					required: true,
					digits:true
				},
				st: {
					required: true,
					digits:true
				},
				sr: {
					required: true,
					digits:true
				},
				sl: {
					required: true,
					digits:true,
					maxlength:1
				},
				sm: {
					required: true,
					digits:true,
					maxlength:1
				},
				bc: {
					required: true,
					minlength: 2
				},
				bs: {
					required:true
				},
				bz:{
					required: true,
					digits: true,
					rangelength: [5,5]
				},
				bp: {
					required: true,
					digits:true
				},
				bt: {
					required: true,
					digits:true
				},
				br: {
					required: true,
					digits:true
				},
				rn: {
					required: true,
					nonNumeric: true,
					fullName: true
				},
				re: {
					required: true,
					email: true
				},
				rp: {
					required: true,
					phoneUS: true
				},
				ra: {
					required: true,
					minlength: 2
				},
				rc: {
					required: true,
					minlength: 2
				},
				rs: {
					required:true
				},
				rz:{
					required: true,
					digits: true,
					rangelength: [5,5]
				}
			},
			messages: {
				fn: {
					nonNumeric: "Numbers are not allowed",
					fullName: "Please provide a valid first and last name"
				},
				fe: {
					required: "Please enter a valid email address"
				},
				fp: {
					required: "Please enter a valid phone number"
				},
				fz: {
					required: "Please enter a valid US ZIP code",
					digits: "Please enter a valid US ZIP code",
					rangelength: "Please enter a valid US ZIP code"
				},
				sa: {
					required: "Please enter a street address",
					minlength: "Please enter a valid street address"
				},
				sc: {
					required: "Please enter a city",
					minlength: "Please enter a valid city"
				},
				ss: {
					required: "Please select a state"
				},
				sz:{
					required: "Please enter a ZIP code",
					digits: "Please enter a valid ZIP code",
					rangelength: "Please enter a valid ZIP code"
				},
				sp: {
					required: "Please select a price range",
					digits:"Please select a price range"
				},
				st: {
					required: "Please select a timeframe",
					digits:"Please select a timeframe"
				},
				sr: {
					required: "Please select a reason",
					digits:"Please select a reason"
				},
				sl: {
					required: "Please choose yes or no",
					digits:"Please choose yes or no",
					maxlength:"Please choose yes or no"
				},
				sm: {
					required: "Please choose yes or no",
					digits:"Please choose yes or no",
					maxlength:"Please choose yes or no"
				},
				bc: {
					required: "Please enter a city",
					minlength: "Please enter a valid city"
				},
				bs: {
					required: "Please select a state"
				},
				bz:{
					required: "Please enter a ZIP code",
					digits: "Please enter a valid ZIP code",
					rangelength: "Please enter a valid ZIP code"
				},
				bp: {
					required: "Please select a price range",
					digits:"Please select a price range"
				},
				bt: {
					required: "Please select a timeframe",
					digits:"Please select a timeframe"
				},
				br: {
					required: "Please select a reason",
					digits:"Please select a reason"
				},
				rn: {
					nonNumeric: "Numbers are not allowed",
					fullName: "Please provide a valid first and last name"
				},
				re: {
					required: "Please enter a valid email address"
				},
				rp: {
					required: "Please enter a valid phone number"
				},
				ra: {
					required: "Please enter a street address",
					minlength: "Please enter a valid street address"
				},
				rc: {
					required: "Please enter a city",
					minlength: "Please enter a valid city"
				},
				rs: {
					required: "Please select a state"
				},
				rz: {
					required: "Please enter a valid US ZIP code",
					digits: "Please enter a valid US ZIP code",
					rangelength: "Please enter a valid US ZIP code"
				}
			}
	});
}

function displaySlide(slide){
	if (transition_running == false){
		strSlideQueuePosition = $j_ramsey_142.inArray(slide, arrSlideQueue);
		if (strSlideQueuePosition !== -1){
			arrSlideQueue.splice(strSlideQueuePosition, 1);
		}
		transition_running = true;
		var current_slide = $j_ramsey_142("#dave_ramsey_elp_widget .widget_slide:visible").attr("id");
		var content = slide;
		var target_name = content.substr(1);
		var target = "#"+current_slide;
		var target_width = $j_ramsey_142(target).width();
		var old_height = $j_ramsey_142(target).innerHeight();
		var new_height = $j_ramsey_142(slide).innerHeight();
		var buffer_width = 40;
		var slider_width = (target_width*2)+buffer_width;	

		$j_ramsey_142(target).css("float","left").css("display","inline");
		$j_ramsey_142(target).wrap("<div id='slider_wrap' style='width:"+slider_width+"px;height:"+old_height+"px;position:relative;overflow:hidden;'>");
		$j_ramsey_142("#slider_wrap").append("<div id='slide_buffer' style='width:"+buffer_width+"px;height:"+new_height+"px;float:left;display:inline;'></div><div id='content_target' style='float:left;display:inline;' class='widget_slide'></div><div class='clear' style='clear:both;'></div>");
		$j_ramsey_142("#content_target").html($j_ramsey_142(content).html());
		$j_ramsey_142("#"+target_name).remove();
		$j_ramsey_142("#content_target").attr("id", target_name);
		$j_ramsey_142("#slider_wrap").animate({height: new_height}, 500, function(){
			$j_ramsey_142("#slider_wrap").css("height", new_height);
			$j_ramsey_142("#slider_wrap").animate({left: '-='+(target_width+buffer_width)}, 500, function(){
				$j_ramsey_142(target).hide();
				$j_ramsey_142("#"+target_name).siblings('.clear').remove();
				$j_ramsey_142("#slide_buffer").remove();
				$j_ramsey_142("#"+target_name).unwrap();
				$j_ramsey_142("#"+target_name+" input:visible:enabled:first").focus();
				transition_running = false;				
				if (arrSlideQueue.length > 0){
					setTimeout('displaySlide("'+arrSlideQueue[0]+'")', 2000);
				}
			});
		});
	}
	else{
		if ($j_ramsey_142.inArray(slide, arrSlideQueue) == -1){
			arrSlideQueue.push(slide);
		}
	}
}

function showSuccessSlides(formData, demo){
	if (typeof demo == 'undefined'){
		demo = false;
	}
	if (formData["fe"]){
		email_address = $j_ramsey_142("#fe").val();
	}
	else{
		email_address = $j_ramsey_142("#re").val();
	}
	$j_ramsey_142(".dave_ramsey_elp_widget_personal_email").html(email_address);
	displaySlide("#emailing_message");
	if (!demo){
		displaySlide("#success_message");
	}
	else{
		displaySlide("#demo_message");
	}
}

function submitWidget(slide_id){
	if (checkSlideForErrors(slide_id) == false){
		//grab all data from the form (that's not blank) parse into JSON string
		var formData = {};
		var typesParsed = false;
		$j_ramsey_142(form_name+" input").each(function(){
			if ($j_ramsey_142.trim($j_ramsey_142(this).attr("value")).length > 0){
				//if the value in the field is not blank, add it to the data object
				name = $j_ramsey_142(this).attr("name");
				if (name == 't'){
					if (typesParsed == false){	 				
						typesParsed = true;
						formData["t"] = arrTypes;
					}
				}
				else if (name == 'sl' && $j_ramsey_142(this).is(":checked") || name == 'sm' && $j_ramsey_142(this).is(":checked")){
					formData[name] = $j_ramsey_142(this).val();
				}
				else if(name != 'sl' && name !='sm'){
					formData[name] = $j_ramsey_142(this).val();
				}
			}
		});
		
		$j_ramsey_142(form_name+" select").each(function(){
			if ($j_ramsey_142.trim($j_ramsey_142(this).val()).length > 0){
				//if the value in the field is not a default and not blank, add it to the data object
				name = $j_ramsey_142(this).attr("name");
				formData[name] = $j_ramsey_142(this).val();
			}
		});
		
		var arrSearchZips = [];
		var strSearchZips = "";
		var blnAmpersand = false;
		if (typeof formData["fz"] != 'undefined'){
			//Financial Zipcode is defined, this is a financial lead
			logOmnitureData("fin_contact_complete");
			$j_ramsey_142("#elp_searching_zip").html(formData["fz"]);
		}
		else{	
			//Financial Zipcode is NOT defined. This is a real estate or mixed lead
			logOmnitureData("re_contact_complete");
			if (typeof formData["sz"] != 'undefined' && $j_ramsey_142.inArray(formData["sz"], arrSearchZips) == '-1'){
				arrSearchZips.push(formData["sz"]);
			}
			if (typeof formData["bz"] != 'undefined' && $j_ramsey_142.inArray(formData["bz"], arrSearchZips) == '-1'){
				arrSearchZips.push(formData["bz"]);
			}
			if (typeof formData["rz"] != 'undefined' && $j_ramsey_142.inArray(formData["rz"], arrSearchZips) == '-1' && arrTypes.length > 1){
				arrSearchZips.push(formData["rz"]);
			}
			for (i=0; i<arrSearchZips.length; i++){
				strSearchZips += arrSearchZips[i];
				if ((arrSearchZips.length == 2 || i == (arrSearchZips.length-2)) && !blnAmpersand){
					strSearchZips += " & ";
					blnAmpersand = true;
				}
				else if (arrSearchZips.length > 1 && arrSearchZips.length != i+1){
					strSearchZips += ", ";
				}
			}
			$j_ramsey_142("#elp_searching_zip").html(strSearchZips);
		}
		displaySlide("#processing_message");
		formData["source"] = $j_ramsey_142("#dave_ramsey_elp_widget #source_id").val();
		var JSON = $j_ramsey_142.toJSON(formData);
		var strProcessEvent = $j_ramsey_142("#externalLeadSubmission").attr("action");
		if (!blnDemoMode){
			$j_ramsey_142.jsonp({
				url: strProcessEvent,
				data: ({json : JSON}),
				cache: true,
				callbackParameter: "callback",
				error: function(xObject){
					displaySlide("#failure_message");
				},
				success: function(json){
					if (json.RESPONSE == true){
						logOmnitureData("lead_success");
						showSuccessSlides(formData);
					}
					else{
						logOmnitureData("lead_failure");
						displaySlide("#failure_message");
					}
				}
			});
		}
		else{
			//DEMO MODE - DON'T write any leads or send emails
			showSuccessSlides(formData, true);
		}
	}
}

function logOmnitureData(event, arrTypesSelected){
	if (!blnDemoMode){
		//don't send data to Omniture if we're in demo mode
		var arrEvents = [];
		var stcEvars = {};
		var strReportSuite = 'lglampowidgets';
		var strPageURL = elp_widget_domain;
		stcEvars["evar1"] = elp_widget_domain;
		
		
		var strIpAddress = $j_ramsey_142(form_name+" #ip_address").val();
		var strTimestamp = new Date().getTime();
		if (typeof arrTypesSelected != 'undefined'){
			var strSProducts = "";
			for (i=0; i<arrTypesSelected.length; i++){
					strSProducts += "ELPType;"+arrTypesSelected[i];
					if (i != (arrTypesSelected.length-1)){
						strSProducts += ",";
					}
				}
		}
		
		switch (event){
			case "loaded":
				arrEvents.push("event1");
				break;
			case "launched":
				arrEvents.push("event2");
				break;
			case "fin_start":
				arrEvents.push("event7");
				break;
			case "re_start":
				arrEvents.push("event3");
				break;
			case "mixed_start":
				arrEvents.push("event3");
				break;
			case "re_buy":
				stcEvars['evar2'] = "buy";
				break;
			case "re_sell":
				stcEvars['evar2'] = "sell";
				break;
			case "re_bns":
				stcEvars['evar2'] = "bns";
				break;
			case "buy_complete":
				arrEvents.push("event5");
				break;
			case "sell_complete":
				arrEvents.push("event4");
				break;
			case "re_contact_complete":
				arrEvents.push("event6");
				break;
			case "fin_contact_complete":
				arrEvents.push("event8");
				break;
			case "lead_success":
				arrEvents.push("event9");
				break;
			case "lead_failure":
				arrEvents.push("event10");
				break;
			case "close":
				arrEvents.push("event11");
			default:
				arrEvents = false;
				break;
		}
				
	//XML VERSION
		var strOmnitureXML = 	"<?xml version='1.0' encoding='UTF-8'?>" +
									'<request>' +
										'<sc_xml_ver>1.0</sc_xml_ver>' +
										'<reportSuiteID>'+strReportSuite+'</reportSuiteID>' +
										'<pageURL>'+strPageURL+'</pageURL>' +
										'<pageName>Widget</pageName>';
			if (arrEvents.length > 0){
				strOmnitureXML += '<events>';
				for (i=0;i<arrEvents.length;i++){
					strOmnitureXML += arrEvents[i];
				}
				strOmnitureXML += '</events>';
			}
			
		
			for (var eVarName in stcEvars){
				if (stcEvars.hasOwnProperty(eVarName)){
					strOmnitureXML += '<'+eVarName+'>'+stcEvars[eVarName]+'</'+eVarName+'>';	
				}
			}
		
			if (typeof strSProducts != 'undefined'){
				strOmnitureXML +=		'<products>'+strSProducts+'</products>';
			}
			strOmnitureXML +=			'<ipaddress>'+strIpAddress+'</ipaddress>' +
										'<timestamp>'+strTimestamp+'</timestamp>' +
									'</request>';
		var YQLquerystring = encodeURIComponent('use "http://a248.e.akamai.net/f/1611/26335/9h/dramsey.download.akamai.com/23572/daveramsey.com/resources/xml/yql_post_table.xml" as htmlpost; select * from htmlpost where url="http://stats.daveramsey.com/b/ss//6" and postdata="'+strOmnitureXML+'" and xpath="//p"');
		$j_ramsey_142.jsonp({
				url: 'http://query.yahooapis.com/v1/public/yql',
				data: 'q='+YQLquerystring,
				cache: true,
				callbackParameter: "callback",
				error: function(xObject){
					//console.log("Omniture Data Logging FAILURE")
				},
				success: function(data){
					if (data.results[0].search("SUCCESS") != -1){
						//console.log("Omniture Data Log SUCCESS")
					}
					else{
						//console.log("Omniture Data Logging FAILURE")
					}
				}
			});
	}
}
