﻿/* Globals
=========================================================================================== */

// Vail namespace to safely hold any global config/logging/functions/etc.
var VAIL = 
{
    proxy: '/VailResorts/HttpHandlers/GenericProxy.ashx',
    feeds: 
	{
        vri: 'http://common.snow.com/adminincludes/rtp.resorts.vri.xml.asp',
        videos: 'http://link.brightcove.com/services/link/bcpid1726689763?action=mrss',
        heavenly: '/vailresorts/sites/snow/layouts/weatherfeed.aspx?days=6&lat=38.934787&long=-119.940384',
        terrainStatus: 
		{
            beavercreek: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/groomingReportXml.asp?siteid=2',
            breckenridge: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/groomingReportXml.asp?siteid=4',
            heavenly: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/groomingReportXml.asp?siteid=50',
            keystone: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/groomingReportXml.asp?siteid=3',
            vail: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/groomingReportXml.asp?siteid=1',
            keystoneterrain: '/VailResorts/HttpHandlers/GenericProxy.ashx?url=http://common.snow.com/adminincludes/rtp.resorts.vri.xml.asp'
        }
    },
    data: {
        brightcove: 
		{
            weather: 
			{
                vail: { playerId: '1745088821', lineupId: '471470177' },
                beavercreek: { playerId: '1745088821', lineupId: '1134010055' },
                breckenridge: { playerId: '1745088821', lineupId: '483267790' },
                keystone: { playerId: '1745088821', lineupId: '483623200' },
                heavenly: { playerId: '1745088821', lineupId: '1419760633' }
            }
        },
        autocompleteList: ["colorado vacations", "colorado transportation", "colorado vacation", "colorado vacations", "colorado web cams", "colorado webcams", "cross country skiing", "colorado cams", "colorado lift ticket deals", "colorado lodge", "colorado mountain transportation", "colorado resorts", "colorado season ski pass", "colorado ski", "colorado ski areas", "colorado ski packages", "colorado ski pass", "colorado ski passes", "colorado ski resort", "colorado ski resorts", "colorado skiing", "colorado snow", "colorado snow report", "downhill skiing", "daily lift ticket prices", "first snow", "fish and ski", "freestyle skiing", "group ski holidays", "group skiing holidays", "lift ticket discounts", "lift ticket prices", "lift tickets", "mountain snow", "package deals", "breckenridge", "pictures of snow", "resort", "resort skiing", "season ski pass", "ski", "ski accessories", "ski apparel", "resorts", "ski areas", "ski clothing", "ski colorado", "ski conditions", "ski conditions colorado", "ski equipment", "ski freestyle", "ski gear", "ski holidays child care", "ski jump", "ski jumping", "ski lift", "ski lift ticket discounts", "ski lift tickets", "ski lodges", "ski packages", "ski packages in breckenridge", "ski passes", "ski rentals", "ski reports", "ski resort pictures", "ski resorts", "ski resorts in colorado", "ski school", "ski shops"],
        weatherConditions: { // class_name: transformed weather conditions from xml as array
            cloud_light: ['partlycloudy', 'partlycloudywithhaze', 'partlycloudyandbreezy', 'cloudy'],
            cloud_dark: ['mostlycloudy', 'overcast', 'overcastwithhaze', 'overcastandbreezy'],
            sun: ['sunny', 'starrynight', 'mostlysunny', 'fair', 'clear', 'fairwithhaze', 'clearwithhaze', 'fairandbreezy', 'clearandbreezy'],
            sun_cloud_light: ['partlycloudy', 'afewclouds', 'afewcloudswithhaze', 'afewcloudsandbreezy'],
            sun_cloud_dark: ['mostlycloudy', 'mostlycloudywithhaze', 'mostlycloudyandbreezy', 'increasingclouds'],
            fog: ['fogmist', 'fog', 'freezingfog', 'shallowfog', 'partialfog', 'patchesoffog', 'foginvicinity', 'freezingfoginvicinity', 'shallowfoginvicinity', 'partialfoginvicinity', 'patchesoffoginvicinity', 'showersinvicinityfog', 'lightfreezingfog', 'heavyfreezingfog', 'smoke',
'dust', 'lowdriftingdust| blowingdust', 'sand', 'blowingsand', 'lowdriftingsand', 'dustsand whirls', 'dustsandwhirlsinvicinity', 'duststorm', 'heavyduststorm ', 'duststorminvicinity', 'sandstorm', 'heavysandstorm', 'sandstorm invicinity', 'haze'],
            wind: ['windy', 'breezy', 'fairandwindy', 'afewcloudsandwindy', 'partlycloudyandwindy', 'mostlycloudyandwindy', 'overcastandwindy'],
            rain: ['thunderstorms', 'scatteredshowers', 'rainshowers', 'rain', 'isolatedthunderstorms', 'rainshowers', 'lightrainshowers', 'lightrainandbreezy', 'heavyrainshowers', 'rainshowersinvicinity', 'lightshowersrain', 'heavyshowersrain', 'showersrain', 'showersraininvicinity', 'rainshowersfogmist', 'lightrainshowersfogmist', 'heavyrainshowersfogmist', 'rainshowersinvicinityfogmist', 'lightshowersrainfogmist', 'heavyshowersrainfogmist', 'showersrainfogmist', 'showersraininvicinityfogmist', 'thunderstorm', 'thunderstormrain', 'lightthunderstormrain', 'heavythunderstormrain', 'thunderstormrainfogmist', 'lightthunderstormrainfogmist', 'heavythunderstormrainfogandwindy', 'heavythunderstormrainfogmist', 'thunderstormshowersinvicinity', 'lightthunderstormrainhaze', 'heavythunderstormrainhaze', 'thunderstormfog', 'lightthunderstormrainfog', 'heavythunderstormrainfog', 'thunderstormlightrain', 'thunderstormheavyrain', 'thunderstormrainfogmist', 'thunderstormlightrainfogmist', 'thunderstormheavyrainfogmist', 'thunderstorminvicinityfogmist', 'thunderstormshowersinvicinity', 'thunderstorminvicinityhaze', 'thunderstormhazeinvicinity', 'thunderstormlightrainhaze', 'thunderstormheavyrainhaze', 'thunderstormfog', 'thunderstormlightrainfog', 'thunderstormheavyrainfog', 'thunderstormhail', 'lightthunderstormrainhail', 'heavythunderstormrainhail', 'thunderstormrainhailfogmist', 'lightthunderstormrainhailfogmist', 'heavythunderstormrainhailfoghail', 'thunderstormshowersinvicinityhail', 'lightthunderstormrainhailhaze', 'heavythunderstormrainhailhaze', 'thunderstormhailfog', 'lightthunderstormrainhailfog', 'heavythunderstormrainhailfog', 'thunderstormlightrainhail', 'thunderstormheavyrainhail', 'thunderstormrainhailfogmist', 'thunderstormlightrainhailfogmist', 'thunderstormheavyrainhailfogmist', 'thunderstorminvicinityhail', 'thunderstorminvicinityhailhaze', 'thunderstormhazeinvicinityhail', 'thunderstormlightrainhailhaze', 'thunderstormheavyrainhailhaze', 'thunderstormhailfog', 'thunderstormlightrainhailfog', 'thunderstormheavyrainhailfog', 'thunderstormsmallhailsnowpellets', 'thunderstormrainsmallhailsnowpellets', 'lightthunderstormrainsmallhailsnowpellets', 'heavythunderstormrainsmallhailsnowpellets', 'showersinvicinity', 'showersinvicinityfogmist', 'showersinvicinityfog', 'showersinvicinityhaze', 'thunderstorminvicinity', 'thunderstorminvicinityfog', 'thunderstorminvicinityhaze', 'lightrain', 'drizzle', 'lightdrizzle', 'heavydrizzle', 'lightrainfogmist', 'drizzlefogmist', 'lightdrizzlefogmist', 'heavydrizzlefogmist', 'lightrainfog', 'drizzlefog', 'lightdrizzlefog', 'heavydrizzlefog', 'rain', 'heavyrain', 'rainfogmist', 'heavyrainfogmist', 'rainfog', 'heavyrainfog'],
            rain_snow_light: ['freezingrain', 'freezingdrizzle', 'lightfreezingrain', 'lightfreezingdrizzle', 'heavyfreezingrain', 'heavyfreezingdrizzle', 'freezingraininvicinity', 'freezingdrizzleinvicinity', 'icepellets', 'lighticepellets', 'heavyicepellets', 'icepelletsinvicinity', 'showersicepellets', 'thunderstormicepellets', 'icecrystals', 'hail', 'smallhailsnowpellets', 'lightsmallhailsnowpellets', 'heavysmallhailsnowpellets', 'showershail', 'hailshowers', 'rainicepellets', 'lightrainicepellets', 'heavyrainicepellets', 'drizzleicepellets', 'lightdrizzleicepellets', 'heavydrizzleicepellets', 'icepelletsrain', 'lighticepelletsrain', 'heavyicepelletsrain', 'icepelletsdrizzle', 'lighticepelletsdrizzle', 'heavyicepelletsdrizzle', 'freezingrainrain', 'lightfreezingrainrain', 'heavyfreezingrainrain', 'rainfreezingrain', 'lightrainfreezingrain', 'heavyrainfreezingrain', 'freezingdrizzlerain', 'lightfreezingdrizzlerain', 'heavyfreezingdrizzlerain', 'rainfreezingdrizzle', 'lightrainfreezingdrizzle', 'heavyrainfreezingdrizzle'],
            rain_snow_heavy: ['freezingrainsnow', 'lightfreezingrainsnow', 'heavyfreezingrainsnow', 'freezingdrizzlesnow', 'lightfreezingdrizzlesnow', 'heavyfreezingdrizzlesnow', 'snowfreezingrain', 'lightsnowfreezingrain', 'heavysnowfreezingrain', 'snowfreezingdrizzle', 'lightsnowfreezingdrizzle', 'heavysnowfreezingdrizzle', 'rainsnow', 'lightrainsnow', 'heavyrainsnow', 'snowrain', 'lightsnowrain', 'heavysnowrain', 'drizzlesnow', 'lightdrizzlesnow', 'heavydrizzlesnow', 'snowdrizzle', 'lightsnowdrizzle', 'heavydrizzlesnow', 'funnelcloud', 'funnelcloudinvicinity', 'tornadowaterspout'],
            snow: ['isolatedsnowshowers', 'heavysnow', 'snow', 'lightsnow', 'heavysnow', 'snowshowers', 'lightsnowshowers', 'heavysnowshowers', 'showerssnow', 'lightshowerssnow', 'heavyshowerssnow', 'snowfogmist', 'lightsnowfogmist', 'heavysnowfogmist', 'snowshowersfogmist', 'lightsnowshowersfogmist', 'heavysnowshowersfogmist', 'showerssnowfogmist', 'lightshowerssnowfogmist', 'heavyshowerssnowfogmist', 'snowfog', 'lightsnowfog', 'heavysnowfog', 'snowshowersfog', 'lightsnowshowersfog', 'heavysnowshowersfog', 'showerssnowfog', 'lightshowerssnowfog', 'heavyshowerssnowfog', 'showersinvicinitysnow', 'snowshowersinvicinity', 'snowshowersinvicinityfogmist', 'snowshowersinvicinityfog', 'lowdriftingsnow', 'blowingsnow', 'snowlowdriftingsnow', 'snowblowingsnow', 'lightsnowlowdriftingsnow', 'lightsnowblowingsnow', 'lightsnowblowingsnowfogmist', 'heavysnowlowdriftingsnow', 'heavysnowblowingsnow', 'thunderstormsnow', 'lightthunderstormsnow', 'heavythunderstormsnow', 'snowgrains', 'lightsnowgrains', 'heavysnowgrains', 'heavyblowingsnow', 'blowingsnowinvicinity']
        }
    },
    fn: 
	{
        getWeatherClass: function(weatherCondition) 
		{
            weatherCondition = weatherCondition.toLowerCase().replace(/\W*/g, '');
            weatherCondition = weatherCondition.replace('chance', '');
            weatherCondition = weatherCondition.replace('likely', '');
            weatherCondition = weatherCondition.replace('slight', '');
            for (prop in VAIL.data.weatherConditions) if (VAIL.data.weatherConditions.hasOwnProperty(prop)) 
			{
                if (VAIL.data.weatherConditions[prop].indexOf(weatherCondition) !== -1) { return prop; }
            }
            return '';
        }
    },
    debug: false,
    errors: []
};

// Button init needs to be available in the global namespace
var buttonInit;

// Error alert suppression
//window.onerror = VAIL.debug ? window.onerror : function() { return true; };

/* Functions
=========================================================================================== */

/*
* The function will parse the querystring passed in paramter
* Returns: The array of name value pair for query string passed as paramerter
*/
function parseQuery(query) 
{
    var Params = new Object();
    if (!query) return Params; // return empty object
    var Pairs = query.split(/[;&]/);
    for (var i = 0; i < Pairs.length; i++) 
	{
        var KeyVal = Pairs[i].split('=');
        if (!KeyVal || KeyVal.length != 2) continue;
        var key = unescape(KeyVal[0]);
        var val = unescape(KeyVal[1]);
        val = val.replace(/\+/g, ' ');
        Params[key] = val;
    }
    return Params;
}

/*
* This function formats the date coming from the XML into ISO format to be displayed
*/
function ISOtoDate(ISO) 
{
    ISO = ISO.split('T');
    ISO = ISO[0].split('-').concat(ISO[1] ? ISO[1].split(':') : [0, 0, 0]);
    return new Date(ISO[0], ISO[1], ISO[2], ISO[3], ISO[4], ISO[5]);
}
// Thinbox function for tour operators modal
(function($) {
	$.fn.thinbox = function(options) {

		return $(this).each(function() {
			var $this = $(this);

			// Merge defaults and options
			var o = $.extend(true, $.fn.thinbox.defaults, options);

			// Browser/OS Flags (Necessary evil)
			var ie6 = ($.browser.msie && parseInt($.browser.version) == 6) ? true : false;
			var macff2 = (($.browser.mozilla && parseFloat($.browser.version) < 1.9) && (navigator.userAgent.indexOf('Mac') !== -1)) ? true : false;

			// IE6 CSS compensation
			if (ie6) {
				$.extend(o.overlay.CSS, { position: 'absolute', height: '100%', top: 0, left: 0 });
				$.extend(o.loadingImage.CSS, { position: 'absolute' });
			}

			// Mac FF2 / Flash bug
			if (macff2) {
				$.extend(o.overlay.CSS, { opacity: 1, background: 'transparent url(' + o.macFF2Image + ') 0 0 repeat' });
			}

			$this.click(function() {
				// Make sure there is a valid URL to load and return if not
				var targetURL = $this.attr('href') || $this.attr('rel') || null;
				targetURL = o.escapeURL ? escape(unescape(targetURL)) : targetURL;

				if (!targetURL || targetURL === '#' || targetURL === 'null') {
					return false;
				}


				// Start creating the elements
				// OVERLAY
				if (ie6) {
					$('select').css({ visibility: 'hidden' });
				}
				var overlay = $('<div></div>');
				var overlayOpacity = o.overlay.CSS.opacity;
				o.overlay.CSS.opacity = 0;
				overlay
               .css(o.overlay.CSS)
               .attr('id', o.overlay.ID || '')
               .attr('class', o.overlay.CLASS || '')
               .prependTo('body')
               .animate({ opacity: overlayOpacity }, 600);
				o.overlay.CSS.opacity = overlayOpacity;

				overlay.before('<div id="overlay_loading"><img src="' + o.loadingImage.url + '" /><p>Loading...</p></div>');
				loadingImage = $('#overlay_loading');
				loadingImage
               .css(o.loadingImage.CSS)
               .css({ display: 'block', marginLeft: -(loadingImage.width() / 2), marginTop: -(loadingImage.height() / 2) });
				// IE6 CSS compensation
				if (ie6) {
					loadingImage.css({ marginTop: -parseInt(this.offsetHeight / 2) + (document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px' });
				}

				// CONTENT BOX
				var contentBox = $('<div></div>');
				contentBox
               .css(o.contentBox.CSS)
               .attr('id', o.contentBox.ID || '')
               .attr('class', o.contentBox.CLASS || '')
               .appendTo('body');

				// IE6 CSS compensation
				if (ie6) {
					$('html')
                  .css({ overflow: 'scroll' })
                  .find('body')
                  .andSelf()
                  .css({ height: '100%', width: '100%' });
				}

				// Get content
				contentBox.load(targetURL, {}, function() {
					scroll(0, 0);
					var t = $(window).height() > contentBox.height() ? ($(window).height() - contentBox.height()) * 0.5 : 13;
					var l = $(window).width() > contentBox.width() ? ($(window).width() - contentBox.width()) * 0.5 : 0;
					contentBox.css({ display: 'block', position: 'absolute', top: t, left: l });

					// Remove loading image
					loadingImage.fadeOut('fast', function() { $(this).remove(); });

					if (ie6) {
						contentBox.find('select').css({ visibility: 'visible' });
					}

					// Close
					overlay.click(function() {
						contentBox.remove();
						overlay.fadeOut('fast', function() {
							$(this).remove();
							$('html').css({ overflow: 'auto' });
							if (ie6) {
								$('select').css('visibility', 'visible');
							}
						});
						return false;
					});
					contentBox.find(o.closeSelector).click(function() {
						overlay.triggerHandler('click');
						return false;
					});

					// User callback
					typeof (o.callback) == 'function' ? o.callback() : false;
				});

				return false;
			});
		});
	};

	// Defaults (public)
	$.fn.thinbox.defaults = {
		macFF2Image: '/vailresorts/sites/global/assets/img/thinbox/macFF2Image.png',
		modal: true,  // TODO (if necessary)
		closeSelector: 'a.close',
		escapeURL: false,
		overlay: {
			ID: null,
			CLASS: null,
			CSS: { backgroundColor: '#000', position: 'fixed', opacity: 0.75, zIndex: 1000, top: 0, left: 0, height: '100%', width: '100%' }
		},
		loadingImage: {
			url: '/vailresorts/sites/global/assets/img/thinbox/loadingImage.gif',
			ID: null,
			CLASS: null,
			CSS: { display: 'none', zIndex: 1001, position: 'fixed', top: '50%', left: '50%' }
		},
		contentBox: {
			ID: null,
			CLASS: null,
			CSS: { display: 'none', zIndex: 1002 }
		},
		callback: null
	};
})(jQuery);


function xreplace(checkMe, toberep, repwith) {
	var temp = checkMe;
	var i = temp.indexOf(toberep);
	while (i > -1) {
		temp = temp.replace(toberep, repwith);
		i = temp.indexOf(toberep, i + repwith.length + 1);
	}
	return temp;
}
$(function() {
	//$('._openComparator').thinbox({ escapeURL: false, callback: function() { buttonInit('#overlay'); } });
	//$('._openComparator').thinbox({ escapeURL: false, callback: function() { } });
	$('._openTourOperators').thinbox({ escapeURL: false, callback: function() { } });
	$('._tourOperator, ._overlay, .thinbox, ._email, ._openComparator').css('visibility', 'visible');
});
$(function () {
	$('.forecastDayContainer').mouseover(function () {
		$('.forecastDetailContainer').hide();
		var tabContainer = $(this).find('.tabContainer');
		var tabContainerCloned = $(tabContainer).clone();
		if (!$(this).hasClass('tabCloned')) {
			$(this).addClass('tabCloned');
			$(this).find('.forecastDetailContainer .forecastDetailTab').append(tabContainerCloned);
			//$(tabContainer).css('visibility', 'hidden');
		}

		$(this).find('.forecastDetailContainer').show();
	});
	$('.forecastDayContainer').mouseout(function () {
		var tabContainer = $(this).find('.tabContainer');
		//$(tabContainer).css('visibility', 'visible');
		$(this).find('.forecastDetailContainer').hide();
		//$(this).find('.forecastDetailContainer .forecastDetailTab .tabContainer').remove();
	});
	$('div.changeUnits a').click(function () {
		var target = $(this);
		var parent = target.parents('.forecastContainer');
		if (!target.hasClass('selected')) {
			target.siblings('a.selected').removeClass('selected');
			target.addClass('selected');
			
			parent.find('.unit').each(function () {
				var current = $(this).text();
				$(this).text($(this).attr('alt'));
				$(this).attr('alt', current);
			});
		}
		return false;
	});
});


