// JavaScript Document

var toolTip = null;
var cityDataSet = null;
var cityAutoComplete = null;
var FilterModule = null;
var SortModule = null;
var showSortRegion = null;
var showFilterRegion = null;
var hiddenField = null; // for city auto complete submit
var LocationModule = null; 
var showLocationRegion = null; 
var PictureModule = null;

var DownArrowGray = new Image;
var DownArrow = new Image;
DownArrow.src="/Images/downarrow.gif";
DownArrowGray.src="/Images/downarrowgray.gif";
var UpArrowGray = new Image;
var UpArrow = new Image;
UpArrow.src="/Images/uparrow.gif";
UpArrowGray.src="/Images/uparrowgray.gif";

var MagModule = null;
var bigImageOut = 1;
var overImage = 0;

var startEvent = -1;
var CityPickerModule = null;

// ----------------------------------------------------For Loading Container --------------------------------------------
var LoadingContainer = 
		new YAHOO.widget.Panel("loadingDialog",  
			{ width:"80px", 
			  fixedcenter:true, 
			  close:false, 
			  draggable:false, 
			  zindex:15000,
			  modal:false,
			  visible:false
			} 
	);
// ----------------------------------------------------------------------------------------------------------------------
var handleOK = function() 
{
	wineWarningDialog.hide();
	LoadingContainer.hide();
};

var wineWarningDialog = new YAHOO.widget.SimpleDialog("warningDialog", 
						{	 
						width: "350px", 
//							effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.25}, 
							fixedcenter:true,
					    	zIndex:15000,
					  		modal: true,
	              			constraintoviewport : true, 
						    visible:false,
							draggable:false, 
							buttons: [ { text:"OK", handler:handleOK, isDefault:true }]
						});	


var wineWarning = function(warningText)
{
	wineWarningDialog.setHeader("<div class=\"hd\"><div class=\"tl\"></div><span>Event Search Issue</span><div class=\"tr\"></div></div>");

	var bodyText = '<div class="dialogWrap"><div class="column_D"><table class="warningFormat" border="0" cellspacing="0" cellpadding="0"><tr><td>' + warningText + '</td></tr></table></div></div>';
	
	wineWarningDialog.setBody(bodyText);
	wineWarningDialog.render(document.body);		
	wineWarningDialog.show();
};

var filterStart = function(o)
{ 
	LoadingContainer.show();
};
var filterSuccess = function(o)
{ 
	LoadingContainer.hide();
	var Response = o.responseText;
	if (Response.substring(0,7) == "[error]")
	{
		wineWarning(Response.substring(7,Response.length));	
	}
	else
	{
		document.getElementById("eventResults").innerHTML = o.responseText;

		var opts = { id:"date" };
		datePickerController.create(opts);
		
	    datePickerController.addEvent(document.getElementById("date"), "change", setEndDate);
	    datePickerController.addEvent(document.getElementById("date-mm"), "change", setEndDate);
	    datePickerController.addEvent(document.getElementById("date-dd"), "change", setEndDate);

		YAHOO.util.Event.addListener("filterSubmit", "click", prepareFilter);

		window.location = "#PageAnchor";
		window.location = "#restoreBack";  // identifier to mark back button functionality
	}
};
var filterFailure = function(o)
{ 
	wineWarning("There was a communication error on the WineMcGee servers. Please try again later.");
};
function zipSubmit()
{
	zipValue = document.getElementById("ZipEdit").value;
	cityValue = document.getElementById("CityEdit").value;
		
	if (zipValue.match(/^[0-9]{5}$/))
	{
//		document.getElementById("zipForm").action = "/events/" + zipValue;		
//		document.getElementById("zipForm").submit();	
		window.location = "/events/"+zipValue;
	}
	else if (cityValue != 'Enter City' && cityValue.match(/^[a-zA-Z](([a-zA-Z])|(\s))+$/)) 
	{
	 // starts with a letter, then can include letters or spaces	 
//		document.getElementById("zipForm").action = "/events/" + escape(cityValue);	
//		document.getElementById("zipForm").submit();	
//		window.location = "/events/"+escape(cityValue);	

		window.location = "/events/" + escape(cityValue);

	}
	else
		wineWarning("The zip code or city you entered appears to be invalid. When entering a city name, please do not enter the state as well, but rather select the appropriate city from the autocomplete drop down box.");
}


function showSearchFull()
{
	disp = document.getElementById("eventFilter").style.display;
	if (disp == "block")
	{
		document.getElementById("eventFilter").style.display = "none";
	}
	else
	{
		document.getElementById("eventFilter").style.display = "block";
	}
} 

function getEvents(event_id)
{
	startEvent = event_id;
	prepareFilter();	
}

// --------------------------------------------------------------------------------
function cityChoose(cityImage)
{
	if (CityPickerModule.cfg.getProperty("visible"))
		CityPickerModule.hide();
	else
	{
		xyID = cityImage.id;
		x = YAHOO.util.Dom.getX(xyID);
		y = YAHOO.util.Dom.getY(xyID);
		
		CityPickerModule.cfg.setProperty("x", x+1);
		CityPickerModule.cfg.setProperty("y", y+17);
		CityPickerModule.render();
		CityPickerModule.show();		
	}
}
function cityPickerOut()
{
	CityPickerModule.hide();
};

function prepareFilter()
{
	var formObject = document.getElementById('filterForm');
	YAHOO.util.Connect.setForm(formObject); 
	var callback = 
	{
		success:filterSuccess,
		failure:filterFailure,
		customevents: { onStart: filterStart },
		timeout: 10000
	};
	
	postText = "sort=" + document.getElementById("sortBox").value + "&";
	
	if (startEvent != -1)
	{
		postText = postText + "eventStart=" + startEvent + "&";		
		startEvent = -1;
	}
		
	if (zipCodeSet)
		postText = postText + "zip=" + zipCode + "&";		

	YAHOO.util.Connect.initHeader('X-Signature', transaction_sig); 
	var cObj = YAHOO.util.Connect.asyncRequest('POST', '/eventfilter_s.php', callback, postText); 
	return false;
}


function showEventLocation()  
{
	if (!LocationModule.cfg.getProperty("visible"))
	{
		LocationModule.show();
		showLocationRegion.show();
	}
	else
	{
		LocationModule.hide();
		showLocationRegion.hide();
	}
	document.getElementById("showLocationRegion").className = 'tabText';
}
function yourCity()
{
	LocationModule.show();
	showLocationRegion.show();
}

function regionMouseOver(e, imageElement)
{
	this.className = 'tabTextOver'; 
	imageElement.src = DownArrowGray.src;
}
function regionMouseOut(e, imageElement)
{
	this.className = 'tabText'; 
	imageElement.src = DownArrow.src;
}
function regionMouseOverUp(e, imageElement)
{
	this.className = 'tabTextOver'; 
	imageElement.src = UpArrowGray.src;
}
function regionMouseOutUp(e, imageElement)
{
	this.className = 'tabText'; 
	imageElement.src = UpArrow.src;
}
// format text display in autocomplete select box
var cityFormat = function(oResultData, sQuery, sResultMatch) 
{ 
	return oResultData.city + ", " + oResultData.state;
}
var dataErrorHandler  = function( oSelf , sQuery ) 
{
	wineWarning("There was a communication error or your session timed out. Please refresh the page and try again.");
};
// call page with new zip when an autocomplete selection is made
var itemSelected = function (sTyle, aArgs)
{
	var DataObj = aArgs[2]; // 0 is the AC instance, 1 the LI element
	document.getElementById("hiddenField").value = DataObj.zip; // don't seem to need this line...
	window.location = "/events/"+DataObj.zip;
};
// ------------------------------------ Zoom for Images ----------------------------------------------

// when they clicked on a zoomed in event image
function wineImageOut()
{
	bigImageOut = 1;
	document.getElementById("bigImage").style.cursor = "default";
	document.getElementById("picMod").style.cursor = "default";
	PictureModule.hide();
}

var magnifyOver = function()
{
	timeoutID = setTimeout("magnifyStillIn()",500);
	overImage = 1;
	document.getElementById("magnifyImg").src='/wineempty.gif';
};
var magnifyOut = function(o)
{
	document.getElementById("magnifyImg").style.cursor = "url('/magcursor.cur'), default";
	document.getElementById("magnifyImg").src='/wineempty.gif';
	overImage = 0;
	clearTimeout(timeoutID);
};
function magnifyStillIn()
{
	wineBigImageIn();
	overImage = 2;
}

var wineSmallImageOut = function(o)
{
	document.getElementById("magnifyImg").src='/wineempty.gif';
};

var wineImageLoaded = function(o)
{
	PictureModule.show();	
};
// show zoomed in event image
function wineImageIn(imageElement, bigImage)
{
	bigImageFile = bigImage;
	xyID = imageElement.id;
	x = YAHOO.util.Dom.getX(xyID);
	y = YAHOO.util.Dom.getY(xyID);
	
	PictureModule.cfg.setProperty("x", x);
	PictureModule.cfg.setProperty("y", y);
	
	if (bigImageOut == 0)  // if it's 0, then we never left the zoom feature, so load the new image.
	{
		wineBigImageIn();
	}
	else
	{
		MagModule.cfg.setProperty("x",x+50);
		MagModule.cfg.setProperty("y",y+50);	
	MagModule.setBody("<div class=\"magModule\"><img id='magnifyImg' onmouseover='magnifyOver();' onmouseout='magnifyOut();' onclick='wineBigImageIn();' src='/macgif2.gif'></div>");
		MagModule.render(document.body);													  
		MagModule.show();
	}
}
var wineBigImageIn = function()
{		
	bigImageOut = 0;
	PictureModule.setBody("<div id=\"picMod\" class=\"pictureModule\"><img id=\"bigImage\" src=\""+bigImageFile+"\" /></div>");
	document.getElementById("bigImage").style.cursor = "url('/zoomout.cur'), default";
	document.getElementById("picMod").style.cursor = "url('/zoomout.cur'), default";
	YAHOO.util.Event.addListener("bigImage", "load", wineImageLoaded);   // once the wine image is loaded, we're good to show
	document.getElementById("magnifyImg").style.cursor = "url('/zoomout.cur'), default";
};

// ------------------------------------------------------------------------------------------------------------
function setEndDate(e) 
{
	var objStart = "";
	
	var month= document.getElementById(objStart+"date-mm").value;
	var day= document.getElementById(objStart+"date-dd").value;
	var year= document.getElementById(objStart+"date").value;

	if (!year.match(/\d{4}/))
		return false;
	if (month.length == 1)
		month = "0" + month;
	if (day.length == 1)
		day = "0" + day;
		
	var startDate = new Date();
	startDate.setFullYear(year);
	startDate.setMonth(month-1);  // javascipt months are 0-11
	startDate.setDate(day);

	var endDate = new Date();
	endDate.setFullYear(document.getElementById(objStart+"dateend").value);
	endDate.setMonth(document.getElementById(objStart+"dateend-mm").value-1); // javascipt months are 0-11
	endDate.setDate(document.getElementById(objStart+"dateend-dd").value);
		
    // Set the low range of the second datePicker to be the date parsed from the first
    datePickerController.setRangeLow("dateend",year+month+day);
        
        // If theres a value already present within the end date input and it's smaller than the start date
        // then clear the end date value
    if(endDate < startDate)
	{
	    document.getElementById(objStart+"dateend").value = year;
        document.getElementById(objStart+"dateend-mm").value = document.getElementById(objStart+"date-mm").value;  //cant use "month" because of potential leading zero
        document.getElementById(objStart+"dateend-dd").value = day;
		document.getElementById(objStart+"EndHourEdit").value = document.getElementById(objStart+"StartHourEdit").value;
		document.getElementById(objStart+"EndMinEdit").value = document.getElementById(objStart+"StartMinEdit").value;
		document.getElementById(objStart+"EndAmEdit").value = document.getElementById(objStart+"StartAmEdit").value;
    }
}

function sortChange(e)
{
	prepareFilter();
}

// ----------------------------------- Back Button ------------------------------------------------------------------------

var backLoadStart = function(o)
{ 
	LoadingContainer.show();
}
var backLoadSuccess = function(o)
{ 
	LoadingContainer.hide();
	var Response = o.responseText;
	if (Response.substring(0,7) == "[error]")
	{
		wineWarning(Response.substring(7,Response.length));	
	}
	else
	{
		document.getElementById("eventResults").innerHTML = o.responseText;

		var opts = { id:"date" };
		datePickerController.create(opts);
		
	    datePickerController.addEvent(document.getElementById("date"), "change", setEndDate);
	    datePickerController.addEvent(document.getElementById("date-mm"), "change", setEndDate);
	    datePickerController.addEvent(document.getElementById("date-dd"), "change", setEndDate);

		YAHOO.util.Event.addListener("filterSubmit", "click", prepareFilter);


		window.location = "#restoreBack";  // identifier to mark back button functionality		
	}	
}
var backLoadFailure = function(o)
{ 
	wineWarning("There was a communication error on the WineMcGee servers. Please try again later.");
}

// --------------------------------------------- Facebook ---------------------------------------------

function facebook_onlogin()
{
	window.location = "https://www.winemcgee.com/connect.php";
}

// ------------------------------------------------Init -----------------------------------------------------
function init()
{
	LoadingContainer.setBody('<img src="/Images/ajaxload.gif" />');
	LoadingContainer.render(document.body);

	LocationModule = new YAHOO.widget.Module("getLocalRegion", { visible: false });  
	LocationModule.render();   
	showLocationRegion = new YAHOO.widget.Module("showLocationRegion", { visible: false });  
	showLocationRegion.render();   
	YAHOO.util.Event.addListener("showLocationRegion", "mouseover", regionMouseOverUp, document.getElementById("upArrowLocation"));
	YAHOO.util.Event.addListener("showLocationRegion", "mouseout", regionMouseOutUp, document.getElementById("upArrowLocation"));
	
	
	YAHOO.util.Event.addListener("zipSubmit", "click", zipSubmit);
	YAHOO.util.Event.addListener("filterSubmit", "click", prepareFilter);

    cityDataSet = new YAHOO.util.XHRDataSource("/citysearch.php");
    cityDataSet.responseType = YAHOO.util.DataSource.TYPE_XML;
    cityDataSet.responseSchema = 
	{
        resultNode: "location",
		fields: 
		[ 
			"city" ,
			"state",
			"zip" 	
		]
    };
	
	cityAutoComplete = new YAHOO.widget.AutoComplete("CityEdit", "cityAutoContainer", cityDataSet);
	cityAutoComplete.resultTypeList = false; 
	cityAutoComplete.formatResult = cityFormat;
	cityAutoComplete.dataErrorEvent.subscribe(dataErrorHandler);
	cityAutoComplete.itemSelectEvent.subscribe(itemSelected);	
	
// -------- overlay for picture expand ------------------------
    PictureModule = new YAHOO.widget.Overlay("picture1", { 
										  xy:[-2000,-2000],	
								  		  effect: {effect:YAHOO.widget.ContainerEffect.FADE,duration:0.40},
										  visible:false 
  	 								      });   	
										  												  
	PictureModule.setBody("<div id=\"picMod\" class=\"pictureModule\"></div>");
	PictureModule.render(document.body);													  
	YAHOO.util.Event.addListener("picture1", "click", wineImageOut);
	YAHOO.util.Event.addListener("picture1", "mouseOut", wineImageOut);
	PictureModule.cfg.setProperty("zindex", 99999);
	
    MagModule = new YAHOO.widget.Overlay("magnify", { 
										  xy:[-2000,-2000],	
										  visible:false 
  	 								      });   	

	MagModule.cfg.setProperty("zindex", 88888);
	MagModule.setBody("<div class=\"magModule\"><img id='magnifyImg' onmouseover='magnifyOver();' onmouseout='magnifyOut();' onclick='wineBigImageIn();' src='/macgif2.gif'></div>");
	MagModule.render(document.body);	
	
    datePickerController.addEvent(document.getElementById("date"), "change", setEndDate);
    datePickerController.addEvent(document.getElementById("date-mm"), "change", setEndDate);
    datePickerController.addEvent(document.getElementById("date-dd"), "change", setEndDate);	
	
	YAHOO.util.Event.addListener("sort1", "click", sortChange);
	YAHOO.util.Event.addListener("sort2", "click", sortChange);
	YAHOO.util.Event.addListener("sort3", "click", sortChange);
	YAHOO.util.Event.addListener("sort4", "click", sortChange);
	YAHOO.util.Event.addListener("sort5", "click", sortChange);
	YAHOO.util.Event.addListener("sort6", "click", sortChange);
	YAHOO.util.Event.addListener("sort7", "click", sortChange);
	YAHOO.util.Event.addListener("sort8", "click", sortChange);
	
	var docHash = window.location.hash;
	if (docHash.indexOf("restoreBack") != -1)
	{
		var callback = 
		{
			success:backLoadSuccess,
			failure:backLoadFailure,
			customevents: { onStart: backLoadStart },
			timeout: 50000
		}
		
		YAHOO.util.Connect.initHeader('X-Signature', transaction_sig); 
		var cObj = YAHOO.util.Connect.asyncRequest('POST', '/geteventresultback_s.php', callback); 				
	}	
	

// -------- city picker ------------------------

    CityPickerModule = new YAHOO.widget.Overlay("cityPicker", { 
										  xy:[-2000,-2000],	
										  visible:false 
  	 								      });   	

	CityPickerModule.setBody("<div id=\"cityPickerMod\" onclick=\"cityPickerOut();\" class=\"tweetCities\"><p class=\"glo under\"><a href=\"/wine-tasting/00000\">NATIONAL</a></p><p class=\"chi under\"><a href=\"/wine-tasting/chicago\">CHICAGO</a></p><p class=\"det under\"><a href=\"/wine-tasting/detroit\">DETROIT</a></p><p class=\"hou under\"><a href=\"/wine-tasting/houston\">HOUSTON</a></p><p class=\"la under\"><a href=\"/wine-tasting/los-angeles\">LOS ANGELES</a></p><p class=\"nyc under\"><a href=\"/wine-tasting/new-york\">NEW YORK</a></p><p class=\"phi under\"><a href=\"/wine-tasting/philadelphia\">PHILLY</a></p><p class=\"por under\"><a href=\"/wine-tasting/portland\">PORTLAND</a></p><p class=\"sa under\"><a href=\"/wine-tasting/san-antonio\">SAN ANTONIO</a></p><p class=\"sd under\"><a href=\"/wine-tasting/san-diego\">SAN DIEGO</a></p><p class=\"sf underDark\"><a href=\"/wine-tasting/san-francisco\">SAN FRANCISCO</a></p><p class=\"yourZip\"><a href=\"#\" onclick=\"yourCity(); return false;\">OR YOUR CITY</a></p><p class=\"yourZipExplain\">Click to localize WineMcGee by entering your city or zip code.</p><div class=\"cityClose\"><img src=\"/Images/xclose.gif\" /></div>");
	CityPickerModule.render(document.body);													  
	CityPickerModule.cfg.setProperty("zindex", 99999);

}
YAHOO.util.Event.onDOMReady(init);

