﻿// *** Accordion ***
// Requires a definitional list with pairs of title and data tags
(function($) {
    
    $.fn.accordion = function(options) {
        var opts = $.extend({}, $.fn.accordion.defaults, options);
        return this.each(function(){
            var dt = $('dt', this); var dd = $('dd', this);
            $(dd).hide();
            $(dt).click(function(){
                var i = $(dt).index($(this));
                if((opts.collapse)&&($(dd).eq(i).is(':visible'))){
                    $(dd).eq(i).toggle();
                    $(dt).eq(i).toggleClass(opts.selectedclass);
                }else{
                    $(dd).hide().eq(i).show();
                    $(dt).removeClass(opts.selectedclass).eq(i).addClass(opts.selectedclass);
                }
            });
        });
    };

    $.fn.accordion.defaults = {
        collapse: true,
        selectedclass: 'selected'
    };

})(jQuery);

// *** Image Rollover ***
// Expects images to have _off and _on suffix for states - these strings can be altered
(function($) {
    
    $.fn.rollover = function(options) {
        var opts = $.extend({}, $.fn.rollover.defaults, options);
        return this.each(function(){
            $(this).hover(function(){$(this).attr("src", $(this).attr("src").split(opts.strOff).join(opts.strOn))}, function(){$(this).attr("src", $(this).attr("src").split(opts.strOn).join(opts.strOff))});
        });    
    };

    $.fn.rollover.defaults = {
        strOn: '_on',
        strOff: '_off'
    };

})(jQuery);

// *** IE6 PNG fix ***
// Requires setting location of a single transarent pixel gif
// Also uses rollover images with _off and _on suffix for states and class of 'rollover'
// Should be called only from a conditional IE6 script or from a script that checks the browser and version
(function($) {

    $.fn.pngfix = function(options) {
        var opts = $.extend({}, $.fn.pngfix.defaults, options);
        return this.each(function(){
            $(this).css({width: $(this).attr('width'), height: $(this).attr('height'), filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + $(this).attr('src') + "\', sizingMethod='" + opts.imagemethod + "')"}).attr('src', opts.imagesource);
            if ($(this).hasClass(opts.hoverclass)){
                $(this).hover(function(){$(this).css({filter: $(this).css("filter").split('_off').join('_on')})},function(){$(this).css({filter: $(this).css("filter").split('_on').join('_off')})});
            }
        });
    };

    $.fn.pngfix.defaults = {
        imagesource: '/Common/Images/x.gif',
        imagemethod: 'scale',
        hoverclass: 'rollover'
    };

})(jQuery);

// *** SWF video player change
(function($) {
    $.fn.videoplay = function(options) {
        var opts = $.extend({}, $.fn.videoplay.defaults, options);
        return this.each(function(){
            $(this).click(function(){
                var swfSrc = opts.swf + '?movie=' + $(this).attr('href') + '&autoplay=' + opts.autoplay;
                var so = new SWFObject(swfSrc, "ChannelVideo", opts.width, opts.height, opts.version, opts.background);
                so.addParam("wmode", "transparent");
                so.addParam("allowFullScreen",opts.fullscreen);
                so.write(opts.player);
                return false;
            });
        });
    };

    $.fn.videoplay.defaults = {
        swf: '/Common/Flash/video.swf',
        player: 'videoPlayer',
        width: 480,
        height: 320,
        version: 9,
        background: '#000000',
        autoplay: 'true',
        fullscreen: 'false'
    };

})(jQuery);

// Cookie functions

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

$(document).ready(function() {
    $("a[href][rel='external']").attr("target","_blank");
    
    // Analytics tracker for files, media and internal layers
    $("a[href][rel='file']").attr("target","_blank").click(function(){gaEvent('file',$(this).attr('href'));});
    $("a[href][rel='media']").click(function(){gaEvent('media',$(this).attr('href'));});
    $("a[href][rel='internal']").click(function(){gaEvent('internal',$(this).attr('href'));});
    
    function gaEvent(t,l){
        try {
            urchinTracker('/'+t+l);
        }
        catch (err){
        }
    }
});

// *** Firebug fix ***
if (!window.console || !console.firebug){
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml","group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

// *** Timer functions ***
(function($) {
    $.fn.interval = function(options) {
        var opts = $.extend({}, $.fn.interval.defaults, options);
        return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, times, belay);
		});
    }
    
    $.fn.interval.defaults = function(options) {
    }
    
    $.fn.stopinterval = function(options) {
        var opts = $.extend({}, $.fn.interval.defaults, options);
        return this.each(function() {
			jQuery.timer.remove(this, label, fn);
		});
    }
    
    $.fn.stopinterval.defaults = function(options) {
    }
    
})(jQuery);

jQuery.extend({
	timer: {
		guid: 1,
		global: {},
		regex: /^([0-9]+)\s*(.*s)?$/,
		powers: {
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function(value) {
			if (value == undefined || value == null)
				return null;
			var result = this.regex.exec(jQuery.trim(value.toString()));
			if (result[2]) {
				var num = parseInt(result[1], 10);
				var mult = this.powers[result[2]] || 1;
				return num * mult;
			} else {
				return value;
			}
		},
		add: function(element, interval, label, fn, times, belay) {
			var counter = 0;
			
			if (jQuery.isFunction(label)) {
				if (!times) 
					times = fn;
				fn = label;
				label = interval;
			}
			
			interval = jQuery.timer.timeParse(interval);

			if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
				return;

			if (times && times.constructor != Number) {
				belay = !!times;
				times = 0;
			}
			
			times = times || 0;
			belay = belay || false;
			
			if (!element.$timers) 
				element.$timers = {};
			
			if (!element.$timers[label])
				element.$timers[label] = {};
			
			fn.$timerID = fn.$timerID || this.guid++;
			
			var handler = function() {
				if (belay && this.inProgress) 
					return;
				this.inProgress = true;
				if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
					jQuery.timer.remove(element, label, fn);
				this.inProgress = false;
			};
			
			handler.$timerID = fn.$timerID;
			
			if (!element.$timers[label][fn.$timerID]) 
				element.$timers[label][fn.$timerID] = window.setInterval(handler,interval);
			
			if ( !this.global[label] )
				this.global[label] = [];
			this.global[label].push( element );
			
		},
		remove: function(element, label, fn) {
			var timers = element.$timers, ret;
			
			if ( timers ) {
				
				if (!label) {
					for ( label in timers )
						this.remove(element, label, fn);
				} else if ( timers[label] ) {
					if ( fn ) {
						if ( fn.$timerID ) {
							window.clearInterval(timers[label][fn.$timerID]);
							delete timers[label][fn.$timerID];
						}
					} else {
						for ( var fn in timers[label] ) {
							window.clearInterval(timers[label][fn]);
							delete timers[label][fn];
						}
					}
					
					for ( ret in timers[label] ) break;
					if ( !ret ) {
						ret = null;
						delete timers[label];
					}
				}
				
				for ( ret in timers ) break;
				if ( !ret ) 
					element.$timers = null;
			}
		}
	}
});

if (jQuery.browser.msie)
	jQuery(window).one("unload", function() {
		var global = jQuery.timer.global;
		for ( var label in global ) {
			var els = global[label], i = els.length;
			while ( --i )
				jQuery.timer.remove(els[i], label);
		}
	});
	
// *** Rotating content ***
(function($) {
    $.fn.rotation = function(options) {
        $(this).hide().eq(0).show().data('current',0).data('next',($(this).data('current')+1 == $(this).size()) ? 0 : $(this).data('current')+1);
        $(this).rotateInterval = setInterval("$.fn.rotateaction();",1200);
    };
    
    $.fn.rotateaction = function() {
        obj.eq(obj.data('current')).fadeOut(600, function(){obj.eq(obj.data('next')).fadeIn();});
    };
    
    $.fn.rotation.defaults = {
        fadeInterval: '600',
        rotateInterval: '6000'
    };

})(jQuery);