(function($)
{

	$.fn.widgetMetaSuppliersTiles = function(options)
	{

		var blnTime  = false;
		var objTime  = null;

		var arrWindows = new Array();
		var intWindow  = 0;
		var objWindow  = null;

		var arrSupplierChecked = new Array();
		var arrSupplierImage   = new Array();
		var arrSupplierName    = new Array();
		var arrSupplierOrder   = new Array();
		var arrSupplierPartner = new Array();
		var arrSupplierUrl     = new Array();
		var intSupplierTotal   = 0;

		var settings = $.extend(
		{

			divMain:         null,
			divOpen:         null,
			divWatch:        null,
			hotelId:         null,
			hotelName:       null,
			platformPage:    null,
			platformSource:  null,
			platformVersion: null,
			showAuto:        false,
			showAutoLinks:   true,
			showClose:       true

		}, options || {} );

		if (settings.showAuto == true)
		{

			_displayWidget();

			try
			{

				_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Open (Auto)", settings.platformSource + "-" + settings.platformVersion]);

			} catch (jsError) {}

		}

		$(settings.divOpen).click(function()
		{

			try
			{

				_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Open (Manual)", settings.platformSource + "-" + settings.platformVersion]);

			} catch (jsError) {}

			_popupOpen();
			_displayWidget();

		});

		$("#btnCloseTiles" + settings.hotelId).live("click", function()
		{

			//TODO: CLOSE ALL OPEN POPUPS

			try
			{

				if (settings.showAuto == true)
				{

					_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Close (Auto)", settings.platformSource + "-" + settings.platformVersion]);

				} else
				{

					_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Close (Manual)", settings.platformSource + "-" + settings.platformVersion]);

				}

			} catch (jsError) {}

			$(settings.divMain).html("");
			$(settings.divMain).css("display", "none");

		});

		$("#btnSubmitTiles" + settings.hotelId).live("click", function()
		{

			if (($("#txtDateTiles" + settings.hotelId + "a").val() == "") || ($("#txtDateTiles" + settings.hotelId + "b").val() == ""))
			{

				alert("Please enter a date in the specified field.");
				return(false);

			} else
			{

				var blnChecked = false, intChecked = 0;

				if (_checkDate($("#txtDateTiles" + settings.hotelId + "a").val()) == $("#txtDateTiles" + settings.hotelId + "a").val() && _checkDate($("#txtDateTiles" + settings.hotelId + "b").val()) == $("#txtDateTiles" + settings.hotelId + "b").val())
				{

					for (intSupplier = 0;  intSupplier < intSupplierTotal;  intSupplier++)
					{

						if ($("#chkSupplierTiles" + settings.hotelId + "-" + intSupplier).is(":checked"))
						{

							blnChecked = true;
							intChecked = intChecked + 1;

						}

					}

					if (intChecked == 0)
					{

						//alert("Please select at least one of our partners to check for hotel deals!");

					} else
					{

						try
						{

							if (settings.showAuto == true)
							{

								_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Submit (Auto)", settings.platformSource + "-" + settings.platformVersion]);

							} else
							{

								_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Submit (Manual)", settings.platformSource + "-" + settings.platformVersion]);

							}

						} catch (jsError) {}

						if (!$.browser.mozilla)
						{

							if (!$.browser.msie)
							{

								for (intSupplier = intSupplierTotal;  intSupplier >= 0;  intSupplier--)
								{

									arrWindows[intSupplier] = window.open("/Shared/Suppliers/Window.php?Page=" + intSupplier, "winSupplierTiles" + settings.hotelId + intSupplier, "addonbar=no,directories=no,personalbar=no,channelmode=no,dependent=yes,dialog=no,minimizable=no,location=no,menubar=no,resizable=no,scrollbars=yes,status=no,titlebar=no,toolbar=no,left=0,top=165");
									arrWindows[intSupplier].moveTo(0, 0);
									arrWindows[intSupplier].resizeTo(1, 1);

									if ($("#chkSupplierTiles" + settings.hotelId + "-" + intSupplier).is(":checked"))
									{

										try
										{

											if (settings.showAuto == true)
											{

												_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Lead (Interface, Auto)", settings.platformSource + "-" + settings.platformVersion]);

											} else
											{

												_gaq.push(["_trackEvent", "MetaSuppliers (Tiles)", "Lead (Interface, Manual)", settings.platformSource + "-" + settings.platformVersion]);

											}

										} catch (jsError) {}

									}

								}

							}

							objWindow = window.open("/Shared/Suppliers/Hotels.php?Source=" + settings.platformSource + "&Version=" + settings.platformVersion, "frameTabsTiles" + settings.hotelId, "addonbar=no,directories=no,personalbar=no,channelmode=no,dependent=yes,dialog=no,minimizable=no,location=no,menubar=no,resizable=no,scrollbars=yes,status=no,titlebar=no,toolbar=no");
							objWindow.moveTo(0, 0);
							objWindow.resizeTo(screen.availWidth, 165);

							blnTime = false;
							objTime = null;
							_popupTimer();

						} else
						{

							for (intSupplier = 0;  intSupplier < intSupplierTotal;  intSupplier++)
							{

								try
								{

									if ($("#chkSupplierTiles" + settings.hotelId + "-" + intSupplier).is(":checked"))
									{


										if (settings.showAuto == true)
										{

											_gaq.push(["_trackEvent (Tiles)", "MetaSuppliers", "Lead (Patch, Auto)", settings.platformSource + "-" + settings.platformVersion]);

										} else
										{

											_gaq.push(["_trackEvent (Tiles)", "MetaSuppliers", "Lead (Patch, Manual)", settings.platformSource + "-" + settings.platformVersion]);

										}

										arrWindows[intSupplier] = window.open($("#chkSupplierTiles" + settings.hotelId + "-" + intSupplier).val() + "&inDate=" + $("#txtDateTiles" + settings.hotelId + "a").val() + "&outDate=" + $("#txtDateTiles" + settings.hotelId + "b").val() + "&Guests=" + $("#txtGuestsTiles" + settings.hotelId).val() + "&Rooms=" + $("#txtRoomsTiles" + settings.hotelId).val());

									}

								} catch (jsError) {}

							}

						}

					}

				}

				return(false);

			}

		});

		function _checkDate(dateValue)
		{

			try
			{

				var dateMonth   = dateValue.split("/")[0];
				var dateDay     = dateValue.split("/")[1];
				var dateYear    = dateValue.split("/")[2];
				var dateEntered = new Date(dateYear, (dateMonth - 1), dateDay);

				if (((dateEntered.getMonth() + 1) != dateMonth) || (dateEntered.getDate() != dateDay) || (dateEntered.getFullYear() != dateYear))
				{

					throw new Error("The date specified is not valid.");

				} else
				{

					return(dateValue);

				}

			} catch (jsError)
			{

				alert(jsError.message + "\n\nPlease try again.");
				return(false);

			}

		}

		$(".chkSuppliersTiles" + settings.hotelId).live("click", function()
		{

			_popupOpen();

			if ($("#chkSupplierTiles" + settings.hotelId + "-" + this.alt).is(":checked"))
			{

				arrSupplierChecked[Number(this.alt)] = true;

				var intIndex = $.inArray(Number(this.alt), arrSupplierOrder);

				if (intIndex == -1)
				{

					arrSupplierOrder.push(Number(this.alt));

				}

			} else
			{

				arrSupplierChecked[Number(this.alt)] = false;

				var intIndex = $.inArray(Number(this.alt), arrSupplierOrder);

				if (intIndex >= 0)
				{

					arrSupplierOrder.splice(intIndex, 1);

				}

			}

		})

		$("#txtDateTiles" + settings.hotelId + "a").live("click", function()
		{

			_popupOpen();

		})

		$("#txtDateTiles" + settings.hotelId + "b").live("click", function()
		{

			_popupOpen();

		})

		function _displayWidget()
		{

			if ((settings.showAutoLinks == false) && ($(settings.divWatch).val() == "true")) _getLinks();

			strContent  = "";
			strContent += "<form id=\"frmWidgetTiles" + settings.hotelId + "\" name=\"frmWidgetTiles" + settings.hotelId + "\" method=\"get\" action=\"\">";
			strContent += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"10\">";
			strContent += "<tr>";
			strContent += "<td align=\"left\"><div style=\"padding: 2px;\"><span class=\"ms-date-text\">Check In Date:</span><br /><input class=\"ms-date-input\" id=\"txtDateTiles" + settings.hotelId + "a\" name=\"inDate\" type=\"text\" size=\"8\" maxlength=\"10\" autocomplete=\"off\" value=\"\" style=\"margin-right: 5px; width: 100px;\" /></div></td>";
			strContent += "<td align=\"left\"><div style=\"padding: 2px;\"><span class=\"ms-date-text\">Check Out Date:</span><br /><input class=\"ms-date-input\" id=\"txtDateTiles" + settings.hotelId + "b\" name=\"outDate\" type=\"text\" size=\"8\" maxlength=\"10\" autocomplete=\"off\" value=\"\" style=\"margin-right: 5px; width: 100px;\" /></div></td>";
			strContent += "<td align=\"left\"><div style=\"padding: 2px;\"><span class=\"ms-select-text\">Guests:</span><br /><select class=\"ms-select\" id=\"txtGuestsTiles" + settings.hotelId + "\" name=\"txtGuestsTiles" + settings.hotelId + "\"><option value=\"1\">1</option><option value=\"2\" selected=\"selected\">2</option><option value=\"3\">3</option><option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option><option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option></select></div></td>";
			strContent += "<td align=\"left\"><div style=\"padding: 2px;\"><span class=\"ms-select-text\">Rooms:</span><br /><select class=\"ms-select\" id=\"txtRoomsTiles" + settings.hotelId + "\" name=\"txtRoomsTiles" + settings.hotelId + "\"><option value=\"1\" selected=\"selected\">1</option><option value=\"2\">2</option><option value=\"3\">3</option><option value=\"4\">4</option></select></div></td>";
			strContent += "</tr>";
			strContent += "</table>";

			strContent += "<div class=\"css-br\">&nbsp;</div><div id=\"divLinksTiles" + settings.hotelId + "\"></div>";

			strContent += "<div class=\"css-br\">&nbsp;</div>";
			strContent += "<input type=\"image\" class=\"ms-button-submit\" id=\"btnSubmitTiles" + settings.hotelId + "\" name=\"btnSubmitTiles" + settings.hotelId + "\" src=\"http://m.world.com/Images/Widgets/OneTime/Get-Best-Rates.gif\" />";

			if (settings.showAuto == false) strContent += "<div class=\"css-br\">&nbsp;</div><div style=\"text-align: right;\"><a class=\"ms-button-close\" id=\"btnCloseTiles" + settings.hotelId + "\" name=\"btnCloseTiles" + settings.hotelId + "\" href=\"javascript:void(0);\">Close</a></div>";

			strContent += "</form>";

			$(settings.divMain).html(strContent);
			$(settings.divMain).css("display", "block");

			var dateFuture1 = dateIn;
			var dateFuture2 = dateOut;

			$("#txtDateTiles" + settings.hotelId + "a").val((dateFuture1.getMonth() + 1) + "/" + dateFuture1.getDate() + "/" + dateFuture1.getFullYear());
			$("#txtDateTiles" + settings.hotelId + "b").val((dateFuture2.getMonth() + 1) + "/" + dateFuture2.getDate() + "/" + dateFuture2.getFullYear());

			var dates = $("#txtDateTiles" + settings.hotelId + "a, #txtDateTiles" + settings.hotelId + "b").datepicker(
			{

				buttonImage:       "http://m.world.com/Images/jQuery/Calendar.gif",
				buttonImageOnly:   true,
				dateFormat:        "mm/dd/yy",
				maxDate:           365,
				minDate:           0,
				numberOfMonths:    2,
				selectOtherMonths: false,
				showAnim:          "drop",
				showOn:            "both",
				showOtherMonths:   false,

				onSelect: function(selectedDate)
				{

					_popupOpen();

					var option = this.id == "txtDateTiles" + settings.hotelId + "a" ? "minDate" : "maxDate", instance = $(this).data("datepicker");
					date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
					dates.not(this).datepicker("option", option, date);
					if ($("#txtDateTiles" + settings.hotelId + "b").val() == "") $("#txtDateTiles" + settings.hotelId + "b").val("mm/dd/yyyy");

				}

			});

			var instance = $("#txtDateTiles" + settings.hotelId + "a").data("datepicker");
			$("#txtDateTiles" + settings.hotelId + "a").datepicker("option", "minDate", $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, (dateToday.getMonth() + 1) + "/" + dateToday.getDate() + "/" + dateToday.getFullYear(), instance.settings));

			var instance = $("#txtDateTiles" + settings.hotelId + "b").data("datepicker");
			$("#txtDateTiles" + settings.hotelId + "b").datepicker("option", "minDate", $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, $("#txtDateTiles" + settings.hotelId + "b").val(), instance.settings));

			$("#txtDateTiles" + settings.hotelId + "a").val("mm/dd/yyyy");
			$("#txtDateTiles" + settings.hotelId + "b").val("mm/dd/yyyy");

			if (settings.showAutoLinks == true) _getLinks();

		}

		function _getLinks()
		{

			$("#divLinksTiles" + settings.hotelId).html("<div style=\"text-align: center;\"><img src=\"http://m.world.com/Images/Widgets/OneTime/Wait.gif\" /><br />Finding Partners...</div>");

			$.getJSON("/Shared/Scripts/jquery.metasuppliers.php?HotelID=" + settings.hotelId + "&Type=Hotel&TypeID=" + settings.hotelId + "&Page=" + settings.platformPage, {}, function(jsData)
			{

				try
				{

					intSupplierTotal = jsData.Results.length;

					if ((intSupplierTotal == 0) || (intSupplierTotal == null))
					{

						_logError();

					}

				} catch (jsError)
				{

					intSupplierTotal = 0;
					_logError();

				}

				for (intSupplier = 0;  intSupplier < intSupplierTotal;  intSupplier++)
				{

					if (jsData.Results[intSupplier].SupplierChecked == "TRUE")
					{

						var strChecked = " checked=\"checked\"";
						arrSupplierChecked[intSupplier] = true;
						arrSupplierOrder.push(intSupplier);

					} else
					{

						var strChecked = "";
						arrSupplierChecked[intSupplier] = false;

					}

					arrSupplierImage[intSupplier]   = jsData.Results[intSupplier].SupplierImage;
					arrSupplierName[intSupplier]    = jsData.Results[intSupplier].SupplierName;
					arrSupplierPartner[intSupplier] = jsData.Results[intSupplier].Partner;
					arrSupplierUrl[intSupplier]     = jsData.Results[intSupplier].SupplierLead + "&Result=" + intSupplier;

				}

				$("#divLinksTiles" + settings.hotelId).html("");

				var strContent = "", intColumn = 1;

				strContent += "<table width=\"650\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";

				for (intSupplier = 0;  intSupplier < intSupplierTotal;  intSupplier++)
				{

					if (intColumn == 1)
					{

						strContent += "<tr>";

					}

					if (jsData.Results[intSupplier].SupplierChecked == "TRUE")
					{

						var strChecked = " checked=\"checked\"";

					} else
					{

						var strChecked = "";

					}

					strContent += "<td width=\"5\" valign=\"middle\"><input id=\"chkSupplierTiles" + settings.hotelId + "-" + intSupplier + "\" class=\"chkSuppliersTiles" + settings.hotelId + "\" type=\"checkbox\" name=\"" + jsData.Results[intSupplier].SupplierName + "\" value=\"" + jsData.Results[intSupplier].SupplierLead + "&Result=" + intSupplier + "\"" + strChecked + " /></td>";

					if (jsData.Results[intSupplier].SupplierImage)
					{

						strContent += "<td width=\"130\" valign=\"middle\"><label for=\"chkSupplierTiles" + settings.hotelId + "-" + intSupplier + "\"><img class=\"ms-link-image\" src =\"" + jsData.Results[intSupplier].SupplierImage + "\" alt=\"" + jsData.Results[intSupplier].SupplierName + "\" /></label></td>";

					} else
					{

						strContent += "<td width=\"130\" valign=\"middle\"><label for=\"chkSupplierTiles" + settings.hotelId + "-" + intSupplier + "\"><div class=\"ms-link-text\">" + jsData.Results[intSupplier].SupplierName + "</div></label></td>";

					}

					if (intColumn == 5)
					{

						strContent += "</tr>";
						intColumn = 0;

					}

					intColumn++;

				}

				if (intColumn == 2) strContent += "<td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td></tr>";
				if (intColumn == 3) strContent += "<td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td></tr>";
				if (intColumn == 4) strContent += "<td colspan=\"2\">&nbsp;</td><td colspan=\"2\">&nbsp;</td></tr>";
				if (intColumn == 5) strContent += "<td colspan=\"2\">&nbsp;</td></tr>";

				strContent += "</table>";

				$("#divLinksTiles" + settings.hotelId).html(strContent);

			});

			try
			{

				$(settings.divMain)[0].scrollIntoView();
				window.scrollBy(0, -50);

			} catch (jsError)
			{
			}

		}

		function _logError()
		{

			$.ajax({

				url: "/Shared/Scripts/jquery.metasuppliers.php?Log=Error&HotelID=" + settings.hotelId,

				success: function(jsData)
				{

					if (jsData == "true")
					{

						_getLinks();

					} else
					{

						$(settings.divMain).html("<div style=\"text-align: left;\">We're sorry, but we could not return any results for this hotel.&nbsp; This is a very rare error.&nbsp; Please close this box and select a different hotel to compare results.</div><div style=\"text-align: right;\"><a class=\"ms-button-close\" id=\"btnCloseTiles" + settings.hotelId + "\" name=\"btnCloseTiles" + settings.hotelId + "\" href=\"javascript:void(0);\">Close</a></div>");
						$("#divLinksTiles" + settings.hotelId).html("");

					}

				}

			});

		}

		function _popupOpen()
		{

			var winX = (document.all) ? window.screenLeft : window.screenX;
			var winY = (document.all) ? window.screenTop  : window.screenY;

			if ($.browser.msie)
			{

				if ((intWindow < intSupplierTotal) || ((intWindow == 0) && (intSupplierTotal == 0)))
				{

					arrWindows[intWindow] = window.open("/Shared/Suppliers/Window.php?Page=" + intWindow, "winSupplierTiles" + settings.hotelId + intWindow, "width=1,height=1,directories=0,menubar=0,status=0,location=0,titlebar=1,resizable=1,toolbar=0,scrollbars=1,left=" + winX + ",top=" + winY);
					arrWindows[intWindow].moveTo(winX, winY);
					arrWindows[intWindow].resizeTo(1, 1);
					arrWindows[intWindow].blur();
					window.focus();

					intWindow = intWindow + 1;

				}

			}

		}

		function _popupTimer()
		{

			if ((typeof(objWindow.blnLoaded) == "undefined") || (objWindow.blnLoaded == false))
			{

				objTime = setTimeout(_popupTimer, 1000);

			} else
			{

				if (blnTime == false)
				{

					blnTime = true;
					clearTimeout(objTime);

					if (intSupplierTotal > 0)
					{

						var intChecked = 0;

						for (intSupplier = 0;  intSupplier < intSupplierTotal;  intSupplier++)
						{

							objWindow.Settings.arrChecked[intSupplier]   = arrSupplierChecked[intSupplier];
							objWindow.Settings.arrSuppliers[intSupplier] = arrSupplierName[intSupplier];
							objWindow.Settings.arrUrls[intSupplier]      = arrSupplierUrl[intSupplier] + "&inDate=" + $("#txtDateTiles" + settings.hotelId + "a").val() + "&outDate=" + $("#txtDateTiles" + settings.hotelId + "b").val() + "&Guests=" + $("#txtGuestsTiles" + settings.hotelId).val() + "&Rooms=" + $("#txtRoomsTiles" + settings.hotelId).val();
							objWindow.Settings.arrImages[intSupplier]    = arrSupplierImage[intSupplier];
							objWindow.Settings.arrPartners[intSupplier]  = arrSupplierPartner[intSupplier];

						}

					}

					objWindow.Settings.arrOrder     = arrSupplierOrder;
					objWindow.Settings.arrWindows   = arrWindows;
					objWindow.Settings.intChecked   = intChecked;
					objWindow.Settings.strDateIn    = $("#txtDateTiles" + settings.hotelId + "a").val();
					objWindow.Settings.strDateOut   = $("#txtDateTiles" + settings.hotelId + "b").val();
					objWindow.Settings.strGuests    = $("#txtGuestsTiles" + settings.hotelId).val();
					objWindow.Settings.strHotelID   = settings.hotelId;
					objWindow.Settings.strHotelName = settings.hotelName;
					objWindow.Settings.strRooms     = $("#txtRoomsTiles" + settings.hotelId).val();

					window.blur();
					objWindow.Ready();

				}

			}

		}

	}

}) (jQuery);
