/*
 * next.js: supports wineaccess.com navigation
 * author: haig didizian <haig@wineaccess.com>
 * copyright: Copyright 2009 WineAccess, Inc. 
 */

var Connect = YAHOO.util.Connect;
var Dialog = YAHOO.widget.Dialog;
var Dom = YAHOO.util.Dom;
Dom.hide = function(el) { Dom.setStyle(el,'display','none'); };
Dom.show = function(el) { Dom.setStyle(el,'display','block'); }
var E = YAHOO.util.Event;

var headerDeselectTimeout = 500;
var headerDeselectTimer;
var wineaccessUrl = "haig.dev.wineaccess.com";
var headerSearchBoxText;
var signupDialog;

function topNavContainerMouseover(ev) {
	if (headerDeselectTimer != null) {
		clearTimeout(headerDeselectTimer);
		headerDeselectTimer = null;
	}
}

function topNavMouseover(ev) {
	var el = E.getTarget(ev);
	var highlightedTabNode = Dom.get(highlightedTab);

	if (Dom.getAttribute(el,'id') == highlightedTab) {
		// this tab is already highlighted
		return;
	}

	// hide visible subnav to make room for the new one
	var visible_subnav = Dom.getNextSibling(highlightedTabNode);
	Dom.hide(visible_subnav);

	// deselect the tab only if this is not that page tab
	if (Dom.getAttribute(highlightedTabNode,'id') != pageTab) {
		Dom.removeClass(highlightedTabNode,'active');
	}

	// show this subnav
	var this_subnav = Dom.getNextSibling(el);
	Dom.show(this_subnav);

	// highlight this tab
	Dom.addClass(el,'active');

	// remember that this subnav is now highlighted
	highlightedTab = Dom.getAttribute(el,'id');
}

function topNavMouseout(ev) {
	// strange boundary thing means we need to check position manually
	var pointerX = E.getPageX(ev);
	var pointerY = E.getPageY(ev);

	var containerRegion = Dom.getRegion('topnav_container');
	var containerWidth = containerRegion.width;
	var containerHeight = containerRegion.height;
	var containerLeft = containerRegion.left;
	var containerTop = containerRegion.top;

	if ( pointerX > containerLeft &&
	     pointerX < containerLeft + containerWidth &&
	     pointerY > containerTop &
	     pointerY < containerTop + containerHeight ) {
		// we are still inside the box
		return;
	} else {
	}

	// don't do anything if the page tab is the current highlighted tab
	if (pageTab == highlightedTab) {
		return;
	}

	// otherwise, deselect the selected tab after a small delay
	if (!headerDeselectTimer) {
		headerDeselectTimer = setTimeout('_topNavMouseout()',headerDeselectTimeout);
	}
}

function _topNavMouseout() {
	// deselect the current tab
	var highlightedTabNode = Dom.get(highlightedTab);

	Dom.hide(Dom.getNextSibling(highlightedTabNode));
	Dom.removeClass(highlightedTabNode,'active');
	
	// and reselect the page tab
	Dom.show(Dom.getNextSibling(pageTab));

	highlightedTab = pageTab;

	headerDeselectTimer = null;
}

function handleDialogCancel() {
	Dom.hide(signupDialog);
	Dom.get('signup_dialog_form').reset();
}

function wadSignupOk() {
	Dom.hide('wad_signup_container');
	Dom.show('wad_success_container');

	Dom.get('signup_dialog_form').reset();
}

function wadSignupFailed(resp) {
	Dom.get('wad_error_text').innerHTML = resp.responseText;
	Dom.show('wad_error_text');
}

function init_header() {
	// hook topnav elements to rollover functions
	var buttons = ['home','shop','direct','blogs','winelists','account'];
	for (var i = 0; i < buttons.length; i++) {
		var button = Dom.get('topnav_' + buttons[i]);
		if (button) {
			E.on(button, 'mouseover', topNavMouseover);
		}
	}

	E.on('topnav_container','mouseout',topNavMouseout);
	E.on('topnav_container','mouseover',topNavContainerMouseover);

	// set up the search box on the header to remove/add helper text
	headerSearchBoxText = Dom.get('topnav_search_field').value;
	E.on('topnav_search_field', 'focus', function() {
		var field = Dom.get('topnav_search_field');
		if (field.value == headerSearchBoxText) {
			field.value = '';
		}
	});

	E.on('topnav_search_field', 'blur', function() {
		var field = Dom.get('topnav_search_field');
		if (field.value == '') {
			field.value = headerSearchBoxText;
		}
	});


	// prepare the WAD signup dialog box
	signupDialog = new YAHOO.widget.Dialog('signup_dialog', { visible: false,
			                                          fixedcenter: true,
								  close: false,
								  modal: true, 
								  zIndex: 2000 } );
	signupDialog.render();
	Dom.setStyle('signup_dialog','display','block');

	if (Dom.inDocument('header_signup_link')) {
		E.on('header_signup_link', 'click', function() { 
			signupDialog.show();
		});
		
		E.on('signup_cancel', 'click', function() {
			signupDialog.hide();
			Dom.removeClass('wad_signup_email','error');
			Dom.removeClass('wad_signup_zip','error');
			Dom.hide('wad_error_text');
		});

		E.on('signup_close', 'click', function() {
			signupDialog.hide();
			Dom.hide('wad_success_container');
			Dom.show('wad_signup_container');
		});

		E.on('signup_submit', 'click', function() {
			var signupUrl = '/rpc/_wad-signup.tcl?ajax=1'; // <- for www.wineaccess.com

			var uri = document.baseURI;
			var re = /^http:\/\/(dev\.){0,1}blogs\.wineaccess\.com/i;
			if (re.test(uri)) {
				signupUrl = '/wp-content/plugins/wineaccess/wineaccess_ajax.php?action=wad_signup&';
			}

			Connect.setForm('signup_dialog_form');

			var r = true;

			if (Dom.get('wad_signup_email').value == '') {
				Dom.addClass('wad_signup_email','error');		    
				r = false;
			} else {
				Dom.removeClass('wad_signup_email','error');
			}

			if (Dom.get('wad_signup_zip').value == '') {
				Dom.addClass('wad_signup_zip','error');
				r = false;
			} else {
				Dom.removeClass('wad_signup_zip','error');
			}

			if (r) {
				Dom.hide('wad_error_text');
				var callbacks = {
					success: wadSignupOk,
					failure: wadSignupFailed
				};
				Connect.asyncRequest('GET',signupUrl,callbacks);
			} else {
				Dom.get('wad_error_text').innerHTML = 'You must enter both your email address and zip code to sign up for our special offer emails.';
				Dom.show('wad_error_text');
				return;
			}
		});
	}
}

function wadSignup() {
	Connect.setForm('signup_form');

	var email = Dom.get('wad_email');
	var zip = Dom.get('wad_zip');

	if (Dom.hasClass(email,'default_text') || Dom.hasClass(zip,'default_text')) {
		alert('Please enter both an email address and a zip code.');
		return false;
	}

	var callback = {
		success: blogWadSignupOk,
		failure: blogWadSignupFailed
	}	

	var tx = Connect.asyncRequest('GET','/rpc/_wad-signup.tcl?ajax=1', callback, null);
}

function blogWadSignupOk() {
	// signupDialog is defined in next.js
	signupDialog.show();	

	wadSignupOk();

	Dom.get('wad_email').value = '';
	Dom.get('wad_zip').value = '';
}

function blogWadSignupFailed(resp) {
	// signupDialog is defined in next.js
	signupDialog.show();	

	wadSignupFailed(resp);
}

function clearDefaultText(el) {
	if (Dom.hasClass(el,'default_text')) {
		el.value = '';
		Dom.removeClass(el,'default_text');
	}
}

function replaceDefaultText(el) {
	if (el.value == '') {
		Dom.addClass(el,'default_text');
		el.value = Dom.getAttribute(el,'deftext');
	}
}

function validateHeaderSearch(obj) {
	var field = Dom.get('topnav_search_field');
	var defVal = Dom.getAttribute(field,'deftext');
	var curVal = Dom.get('topnav_search_field').value;

	if (curVal == defVal) {
		field.value = '';
	}

	return true;
}
