YAHOO.namespace('LSM');

LSM = function() {

    var initPlaceholders = function(id) {
		var spans = YAHOO.util.Selector.query('span', id);
		var inputs = YAHOO.util.Selector.query('input', id);
		
		for(var i = 0, l = spans.length; i < l; i++) {
			var span = spans[i]; var input = inputs[i];
		
			if(input.value !== '')
				return false;
			
			// for password fields
			if(input.type.toLowerCase() == 'password') {
				span.style.display = 'none';
				var inputPlaceholder = document.createElement('input');
				inputPlaceholder.type = 'text';
				inputPlaceholder.value = span.innerHTML;
				inputPlaceholder.className = 'placeholder';
				
				input.style.display = 'none';
				input.parentNode.appendChild(inputPlaceholder);
				
				input.placeholder = inputPlaceholder;
				inputPlaceholder.placeheld = input;
				
				YAHOO.util.Event.addListener(inputPlaceholder, 'focus', function() {
					this.style.display = 'none';
					this.placeheld.style.display = '';
					this.placeheld.focus();
				});
				
				YAHOO.util.Event.addListener(input, 'blur', function() {
					if(this.value == '') {
						this.style.display = 'none';
						this.placeholder.style.display = '';
					}
				});
			}
			// for text fields, presumably
			else {
				span.style.display = 'none';
				input.value = input.placeholderValue = span.innerHTML;
				input.className = 'placeholder';
			
				YAHOO.util.Event.addListener(input, 'focus', function() {
					if(this.value === this.placeholderValue) {
						this.value = '';
						this.className = '';
					}
				});
			
				YAHOO.util.Event.addListener(input, 'blur', function() {
					if(this.value === '') {
						this.value = this.placeholderValue;
						this.className = 'placeholder';
					}
				});
			}
		}
    };

	var initAddressBox = function() {
		/*  Select the first field of the address box, if on page   */
        var field = YAHOO.util.Selector.query('input', 'streetAddress')[0];
        if(field)
            field.focus();
        
		var anchors = YAHOO.util.Selector.query('a', 'address-box');
		
		for(var i = 0, l = anchors.length; i < l; i++) {
			var anchor = anchors[i];
			
			if(anchor.target == '_blank') {
				YAHOO.util.Event.addListener(anchor, 'click', function(e) {
					var win = window.open(this.href, 'FAQWindow', 'width=400,height=400,resizable=1,status=0,scrollbars=1,menubar=0,screenX=10,screenY=10,left=10,top=10');
					win.focus();
					YAHOO.util.Event.stopEvent(e);
				});
			}
		}
	};
	
	var initSeymour = function() {
		var zipcode = YAHOO.util.Selector.query('form[name=selfReg] input[name=zipcode]', 'address-box', true);
		
		if(zipcode) {
			var dependancy = document.createElement('script');
			dependancy.setAttribute('src', 'http://www.whitefence.com/static/Seymour.js');
			dependancy.setAttribute('type', 'text/javascript');
			document.body.appendChild(dependancy);

			YAHOO.util.Event.addListener(zipcode, 'keyup', function() {
				ZipCheck();
			});
		}
	};
	
	var initNavigation = function() {
		var parents = YAHOO.util.Selector.query('li.parent', 'navigation');

		YAHOO.util.Dom.batch(parents, function(menu) {
			YAHOO.util.Event.addListener(menu, 'mouseover', function() {
				var submenu = YAHOO.util.Selector.query('ul', this, true);
				YAHOO.util.Dom.addClass(submenu, 'hover');
			});
			YAHOO.util.Event.addListener(menu, 'mouseout', function() {
				var submenu = YAHOO.util.Selector.query('ul', this, true);
				YAHOO.util.Dom.removeClass(submenu, 'hover');
			});
		});
	};
	
	var initIE6 = function() {
		if(document.forms.selfReg) {
			document.forms.selfReg.getElementsByTagName('button')[0].style.display = 'block';
		}

		initNavigation();
	};
	
    return {
        init: function() {
			initPlaceholders('login');
			initPlaceholders('address-box');
            initAddressBox();
			initSeymour();
		
			if(YAHOO.env.ua.ie === 6) {
				initIE6();
			}
        }
    };
}();

LSM.Banner = function() {
	var overlay, mask;
	
	var setupBanner = function() {
		/*	If no tabs are set as selected, init first one	*/
		var tabs = $('div.yui-navset li');
		if(!tabs.matches('.selected')) {
			tabs.at(0).addClass('selected');
		}

		var tabview = new YAHOO.widget.TabView('banner');
		var divs = $('div.yui-content > div');
		var previousIndex;

		/*	Add class "selected" to DIV also	*/
		tabview.addListener('activeTabChange', function(event) {
			divs.at(previousIndex).removeClass('selected');
			divs.at(tabview.get('activeIndex')).addClass('selected');
		});

        /*  Automatically activate the appropriate tab, so all of the content is visible    */
        tabview.set('activeIndex', previousIndex = tabview.get('activeIndex'));
	};
	
	var setupModal = function() {
		this.overlay = new Ojay.ContentOverlay({
			width: 750,
			height: 300
		});
		
		this.mask = new Ojay.PageMask({
			color: '#000',
			opacity: 0.4,
			className: 'mask'
		}).positionBehind(this.overlay);
		
		$('td.price a')	.on('click', Ojay.stopEvent)
						._(function() {
							showAddress(this);
						});
	};
	
	var showAddress = function(link) {
    	this.mask.show('fade');

		Ojay.HTTP.GET(link.node.getAttribute('href'), {}, {
			onSuccess: function(response) {
				var close = Ojay.HTML.a({
					'href':		'javascript:void(0)'
				});

				$(close).addClass('close')
						.setContent('<img src="common/images/close.gif" alt="Close" />')
						.on('click', hideModal);

				this.overlay.setContent(response.responseText)
							.insert(close, 'top')
							.fitToContent()
							.center()
							.show('zoom');

				Ojay.Keyboard.listen(document, 'ESCAPE', hideModal);
				$('.overlay-container.mask').on('click')._(function() { hideModal(); });
				
				// Enable in-page exact pricing
				// $('.overlay-content form').on('submit', Ojay.stopEvent)
				// 										  ._(function() {
				// 											hideModal();
				// 											getPricing(this);
				// 										  });
				
			}
		});
	};
	
	var hideModal = function() {
		this.overlay.hide('zoom');
		this.mask.hide('fade');
    };

	var getPricing = function(form) {
		this.tabs = $('ul.yui-nav li');
		this.tabHeight = tabs.at(0).getHeight();
		this.delay = 2 / tabs.length;
		
		var data = Ojay.Forms.getData(form);
		
		tabs.setStyle({
				position: 'relative',
				zIndex: -1,
				overflow: 'hidden'
			})
			.wait(function(element, i) { return i * this.delay / this.tabs.length; })
			.animate({ height: { to: 0 }, top: { to: 1 } }, this.delay);

		$('div.yui-content')
			.setStyle({ overflow: 'hidden' })
			.animate({ height: { to: 60 }, opacity: { to: 0 }}, this.delay * 2)
			.setContent('<div style="text-align: center;">' +
						'	<h1>Getting Exact Pricing&hellip;</h1>' +
						'	<img src="common/styles/images/working-green.gif" />' + 
						'</div>')
			.animate({ opacity: { to: 1 }}, this.delay * 2, { easing: 'none'})
			._($.HTTP)
			.GET('', Ojay.Forms.getData(form), { onSuccess: function(response) {
				$('div.yui-content')
				.animate({ opacity: { to: 0 }}, this.delay * 2)
				._(function() {
					updatePricing(response);
				});
			}});
	};
	
	var updatePricing = function(response) {
		var tmp = Ojay.HTML.div();
		var old = $('#banner');
		old.insert(tmp, 'before');

		$(tmp)	.setStyle({ display: 'none'})
				.setContent(response.responseText)
				.descendants('ul.yui-nav li')
				.setStyle({
					position: 'relative',
					zIndex: -1,
					overflow: 'hidden',
					height: 0,
					top: '1px'
				})
				._($(tmp).descendants('div.yui-content'))
				.setStyle({ height: '60px', overflow: 'hidden', opacity: 0 })
				.children('div')
				.setStyle({ opacity: 0 });

		old.parents().node.removeChild(old.node);

		setupBanner();
		
		$(tmp)	.setStyle({ display: 'block' })
				.descendants('ul.yui-nav li')
				.wait(function(element, i) { return i * this.delay / this.tabs.length; })
				.animate({ height: { from: 0, to: tabHeight }, top: { to: 0 } }, this.delay * 2)
				._(function() {
					this.node.setAttribute('style', '');
				});

		var contentHeight = $('div.yui-content div').at(0).getHeight();
		
		$(tmp)	.descendants('div.yui-content')
				.animate({
					height: { to: contentHeight },
					opacity: { to: 1 }
				})
				.setStyle({ height: 'auto' });
		$(tmp)	.descendants('div.yui-content')
				.children('div')
				.setStyle({ opacity: 1 });
				
		setupModal();
	};
	
	var initInlineAddress = function() {
		$('td.price a').forEach(function(link) {
			var row = link.ancestors('tr');
			
			link.on('click', Ojay.stopEvent)
				._(row)
				.animate({ opacity: { to: 0 }, height: { to: 180 }}, 0.5)
				.setContent('<td colspan="4"></td>')
				._($.HTTP)
				.GET('/static/content/view/component/address-box', {}, {
					onSuccess: function(response) {
						row.children().setContent(response.responseText);
						row	.animate({ opacity: { from: 0, to: 1 }}, 0.5)
							.descendants('input')
							._(function() { this.node.focus(); });
					}
				});
		});
	};
	
	return {
		init: function() {
			//	Initialize YUI Loader
			var loader = new YAHOO.util.YUILoader({
				loadOptional: false,
				skin: false,
				onSuccess: function() {
					setupBanner();
					setupModal();
				}
			});

			//	Add Ojay
			loader.addModule({
				name: 'Ojay',
				type: 'js',
				fullpath: 'common/scripts/ojay/all-min.js'
			});

			loader.require('selector', 'tabview', 'animation', 'connection', 'Ojay');

			//	Only insert JS
			loader.insert({}, 'js');
			
			/*  Select the first field of the address box, if on page   */
			var field = YAHOO.util.Selector.query('input', 'streetAddress')[0]
			            || YAHOO.util.Selector.query('input', 'userName')[0];
			if(field)
				field.focus();
		}
	};
}();

YAHOO.util.Event.onDOMReady(LSM.init);
