﻿function ShowButton(btntoShow, obj, path)
{
    if (path == null)
        obj.src = "/images/buttons/" + btntoShow;
    else
        obj.src = path + btntoShow;
            
}

function ShowMap(url, name)
{
    $('#mapContainer').show();
    $('iframe.iframeMap').attr('src', url);
    
    pageTracker._trackPageview('/documents/calendar/' + name);
    
    //$('html').ScrollTo($('#mapContainer').position().top);
    
    return false;
}

(function($) {
    $.fn.BindLinks = function(options) {    
        //Build main options before element iteration
        var opts = $.extend({}, $.fn.BindLinks.defaults, options);
    
        return this.each(function() {
            var elem = $(this);
          
            //Build element specific options
            var o = $.meta ? $.extend({}, opts, elem.data()) : opts;
            
            //Set up propagation of events to all child links
            var links = elem.find(o.linkSelector);
            elem.bind(
                'mouseover',
                function() {
                    elem.addClass(o.hoverCssClass);
                    //links.trigger('mouseover');
                    links.addClass(o.hoverCssClass);
                }
            );
            
            elem.bind(
                'mouseout',
                function() {
                    elem.removeClass(o.hoverCssClass);
                    //links.trigger('mouseout');
                    links.removeClass(o.hoverCssClass);
                }
            );
            
            elem.bind(
                'click',
                function() {
                    var link = $(links[0]);
                    if (link.data('events'))
                    {
                        link.trigger('click');
                    }
                    else
                    {
                        if (link.attr('target') == '_blank')
                        {
                            window.open(link.attr('href'));
                            return false;
                        }
                        else
                        {
                            window.location = link.attr('href');
                        }
                    }
                }
            );
        });
    };
  
    //Plugin defaults
    $.fn.BindLinks.defaults = {
        linkSelector: 'a',
        hoverCssClass: 'hover'
    };
})(jQuery);

//ExternalLinks - tracking based on http://www.iqcontent.com/blog/2007/02/tracking-documents-and-external-links-in-google-analytics/
(function($) {
    $.fn.extend({
        ExternalLinks : function() {            
            return this.each(function() {
                $(this).click(function() {                    
                    if (this.tagName != 'A') {
                        return false;
                    }
                    
                    var link = String(this);
                    var linkHost = this.hostname;
                    var siteHost = location.host;
                    
		            if (link.match(/^mailto:/i)) 
		            {
		                return HandleMailToLink(this);
		            }
		            else if (linkHost == siteHost) 
		            {
			            if(link.match(/\.(doc|pdf|xls|ppt|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3)$/)) 
			            {
		                    return HandleDocumentLink(this);
			            }
			            else
			            {
		                    return HandleInternalLink(this);
			            }
		            }
		            else 
		            {
		                return HandleExternalLink(this);
		            }
                });
            });
        
            function HandleMailToLink(anchor)
            {
                var email = anchor.href.substring(7);
                TrackLink('email', email);
                
                return true;
            }
            
            function HandleDocumentLink(anchor)
            {
                var doc = CleanURL(anchor.pathname, false);
                TrackLink('documents', doc);                
                
                window.open(anchor.href);		            
                return false;
            }
            
            function HandleInternalLink(anchor)
            {             
                window.open(anchor.href);		            
                return false;
            }
            
            function HandleExternalLink(anchor)
            {
                var link = CleanURL(anchor.hostname+'/'+anchor.pathname, true);
                TrackLink('external', link);

                window.open(anchor.href);		            
                return false;
            }
            
            function TrackLink(type, virtualPath)
            {
                if (typeof(pageTracker) != 'undefined')
                {
	                //var url = CleanURL(window.location.pathname, true);
	                //if (url.length == 0)
	                //{
	                //    url = '/home';
	                //}
	                var linkStr = CleanURL('/'+type+'/'+virtualPath, true);
	                pageTracker._trackPageview(linkStr);
	            }
            }
            
            function CleanURL(url, end)
            {
	            var url = url.toString();
	            var urlLen = url.length;
            	
	            if (end)
	            {
		            if (url.charAt((urlLen-1))=='/') {
			            url = url.substring(0,(urlLen-1));
			        }
	            }
	            else
	            {
		            if (url.charAt(0)=='/') {
			            url = url.substring(1,urlLen);
			        }
	            }
	            return url;
            }
        }
    });
})(jQuery);

//ImageSwap
(function($) {
    $.fn.extend({
        ImageSwap : function() {                           
            return this.each(function() {
                if (this.tagName != 'IMG' || this.tagName != 'INPUT') {
                    var img = $(this);
                    var origSrc = img.attr('src');
                    var path = origSrc.substring(0, origSrc.lastIndexOf('.'));
                    var ext = origSrc.substring(origSrc.lastIndexOf('.'), origSrc.length);
                    path += 'Hover';
                    var swapSrc = path + ext;
                        
                    img.data('OrigSrc', origSrc);
                    img.data('SwapSrc', swapSrc); 
                    
                    var preloader = new Image();
                    preloader.src = swapSrc;
                    
                    img.hover(
                        function() {
                            $(this).attr('src', $(this).data('SwapSrc'));
                        },
                        function() {
                            $(this).attr('src', $(this).data('OrigSrc'));
                        }
                    );
                }
            });
        }
    });
})(jQuery);

(function($) {
    $.fn.FancyDropDown = function(options) {
        //Build main options before element iteration
        var opts = $.extend({}, $.fn.FancyDropDown.defaults, options);
        
        return this.each(function() {
            CreateFancyDropDown(this, opts);
        });
    };
    
    //Private functions
    function CreateFancyDropDown(origDD, opts)
    {
        if (origDD.tagName == 'SELECT')
        {
            var $origDD = $(origDD);
            var selected = $origDD.find("option[selected]");
            var options = $("option", $origDD);
            var origDDId = origDD.id;
            var fancyDDId = origDDId + opts.ddIdSuffix;
            
            //Create the list structure
            var $fancyDD = $('<dl id="' + fancyDDId + '" class="' + opts.ddClass + '"></dl>');
            $fancyDD.append('<dt><a href="#">' + selected.text() + '<span class="value">' + selected.val() + '</span></a></dt>');
            $fancyDD.append('<dd><ul></ul></dd>');
            
            //Add the options
            var itemIndex = -1;
            options.each(function(){                
                itemIndex++;
                var text = $(this).text();
                var value = $(this).val();
                
                var item = $('<li><a href="#">' + $(this).text() + '<span class="value">' + $(this).val() + '</span></a></li>');
                if (value == selected.val())
                {
                    item.addClass('selected');
                }
                if (itemIndex == 0)
                {
                    item.addClass('first');
                }
                if (itemIndex == options.length - 1)
                {
                    item.addClass('last');
                }
                
                $("dd ul", $fancyDD).append(item);
                opts.onItemDataBound(item);
            });
            
            //Hide the original drop down and add the fancy drop down to the page and hide the options by default
            $origDD.after($fancyDD);
            $origDD.hide();
            $('dl#' + fancyDDId + ' dd ul').hide();
            
            //Click event to open the drop down
            $('dl#' + fancyDDId + ' dt a').click(function() {
                //Hide all drop downs first so if there are any others open they will not interfere with each other
                var otherDDs = $('dl.' + opts.ddClass + ':not(dl#' + fancyDDId + ')');
                otherDDs.find('dd ul').hide();
                otherDDs.find('dt').removeClass('active');
                    
                //Now open this drop down    
                var $dt = $(this).parent();
                var $ul = $('dl#' + fancyDDId + ' dd ul');
                var isActive = $dt.hasClass('active');
                isActive ? $dt.removeClass('active') : $dt.addClass('active');
                isActive ? $ul.slideUp('fast') : $ul.slideDown('fast');
                return false;
            });
            
            //Click event to hide the drop down if anything but the drop down or its children is clicked
            $(document).bind('click', function(e) {
                var $clicked = $(e.target);
                if (!$clicked.parents().hasClass(opts.ddClass))
                {
                    $('dl#' + fancyDDId + ' dd ul').hide();
                    $('dl#' + fancyDDId + ' dt').removeClass('active');
                }
            }); 

            //Click event for selecting a new option
            $('dl#' + fancyDDId + ' dd ul li a').click(function() {
                var text = $(this).html();
                var dd = $('dl#' + fancyDDId);
                dd.find('dt a').html(text);
                dd.find('dd ul').hide();
                
                var sourceDD = $('select#' + origDDId);
                sourceDD.val($(this).find('span.value').html());
                
                var item = $(this).parent();
                dd.find('dd li.selected').removeClass('selected');
                item.addClass('selected');
                
                dd.find('dt').removeClass('active');
                
                opts.onItemSelected(item);
                return false;
            }); 
            
            opts.onDataBound($fancyDD);
        }
    }
  
    //Plugin defaults
    $.fn.FancyDropDown.defaults = {
        ddIdSuffix: '_FancyDD',
        ddClass: 'fancyDropDown',
        onDataBound: function(dropDown){},
        onItemDataBound: function(item){},
        onItemSelected: function(item){}
    };
})(jQuery);

//Re-assigns a couple of the ASP.NET validation JS functions to provide a more flexible approach
function UpgradeASPNETValidation()
{
    // Hi-jack the ASP.NET error display only if required
    if (typeof(Page_ClientValidate) != "undefined")
    {
        ValidatorUpdateDisplay = NicerValidatorUpdateDisplay;
        AspPage_ClientValidate = Page_ClientValidate;
        Page_ClientValidate = NicerPage_ClientValidate;
    }
    
    $('span.validation:visible').each(function(){
        AddValidationStatus($(this));
    });
}

function AddValidationStatus(obj)
{
    if (obj.hasClass('validation'))
    {
        var vc = obj.parents('div.validationContainer');
        if (vc.length == 0)
        {
            vc = obj.parents('div.formInput');
        }
        vc.addClass('Invalid');
    }
}

function RemoveValidationStatus(obj)
{
    if (obj.hasClass('validation'))
    {
        var vc = obj.parents('div.validationContainer');
        if (vc.length == 0)
        {
            vc = obj.parents('div.formInput');
        }
        vc.removeClass('Invalid');
    }
}

//Extends the classic ASP.NET validation
function NicerValidatorUpdateDisplay(val)
{
    var $val = $(val);
    if (val.isvalid)
    {
        $val.hide();        
        if ($val.parent().find('span.validation:visible').length == 0)
        {            
            RemoveValidationStatus($val);
        }
    }
    else
    {
        $val.show();
        AddValidationStatus($val);
    }
}

//Extends classic ASP.NET validation to include parent element styling
function NicerPage_ClientValidate(validationGroup)
{
    var valid = AspPage_ClientValidate(validationGroup);
    if (!valid)
    {
        //$(this).parent().addClass('Invalid');
    }
    else
    {
        //$(this).parent().removeClass('Invalid');
    }
}

$(document).ready(function() {    
    $('a[rel="external"]').ExternalLinks();
    
    $('.ImageSwap').ImageSwap();
    
    $('div#eventSearchBox select').FancyDropDown({
        onDataBound : function(dropDown) {
            var value = dropDown.find('dt a span.value').html();
            var $dt = dropDown.find('dt')
            $dt.attr('class', '');
            $dt.addClass(value);
            //dropDown.parent().parent().find('div.formOptions').hide();
        },
        onItemDataBound : function(item) {
            var value = item.find('span.value').html();
            item.addClass(value);
        },
        onItemSelected : function(item) {
            var value = item.find('span.value').html();
            var $dd = item.parents('dl');
            var $dt = $dd.find('dt');
            $dt.attr('class', '');
            $dt.addClass(value);
            //$dd.parent().parent().find('div.formOptions input').click();
        }
    });
    
    $('div#facebookSignup,div#twitterSignup,div#searchPromo,div#brochureDownload').BindLinks();
    
    //UpgradeASPNETValidation();
    
    //rightcolcontainer
    if ((document.getElementById('headercontainer') != null) && (document.getElementById('rightcolcontainer') != null))
        $('div#rightcolcontainer').css('margin-top', eval(document.getElementById('headercontainer').offsetTop)-eval(document.getElementById('rightcolcontainer').offsetTop));
    
    //$('div.lineup').find('div.col').css('height', eval($('div.lineup').css('height')));
    
    $('div#eventFilter div.formInput dl dd ul a').click(function(){
        if($(this).find('span.value').html() != '')
            $('div#eventFilter div.formOptions input').click();
    });
    $('div#eventFilter div.formOptions input').hide();
});

var currentIndex = 0;
function Show(dir)
{
    var controlLinks = $('div#timeline').find('li');
    //alert(controlLinks.length);
    currentIndex = currentIndex + dir;
    if (currentIndex > controlLinks.length)
        currentIndex = 0;
    if (currentIndex < 0)
        currentIndex = 0;
    
    $('div#nextEvent').html($(controlLinks[currentIndex]).html());
    //alert($(controlLinks[currentIndex]).html());
}

function toggleTwitter(twitterBox) {
	var el = document.getElementById('twitterBox');
	el.style.display = (el.style.display != 'none' ? 'none' : '' );
	$('div#email #emailBox').css('display','none');
	$('div#facebook #fbBox').css('display','none');
}

function toggleEmail(emailBox) {
	var el = document.getElementById('emailBox');
	el.style.display = (el.style.display != 'none' ? 'none' : '' );
	$('div#twit #twitterBox').css('display','none');
	$('div#facebook #fbBox').css('display','none');
}

function toggleFb(fbBox) {
	var el = document.getElementById('fbBox');
	el.style.display = (el.style.display != 'none' ? 'none' : '' );
	$('div#email #emailBox').css('display','none');
	$('div#twit #twitterBox').css('display','none');
}


var ua = navigator.userAgent.toLowerCase();
$(document).ready(function() {
    if (ua.indexOf("mac") != -1) {
	 	$("div#primaryNavigation li a").css("padding-left","10px");
	 	$("div#primaryNavigation li a").css("padding-right","7px");
	}
});
