﻿/// <reference path="jquery-1.3.2-vsdoc2.js"/>

Cufon.replace('.home-tmpl h2:not(#tagline):not([class]), .default-tmpl #primary h2:not([class])', { fontFamily: 'Helvetica LT Light', separate: 'none' });
Cufon.replace('#tagline .book, #tagline .tel', { fontFamily: 'Helvetica LT', textShadow: '#000 1px 1px', separate: 'none' });

document.createElement("abbr");

$(document).ready(function()
{
	$('#feature, #content div.panel:not(.slideshow)').corners('7px', '7px', '/_assets/css/images/bg_corners.png');
	$('div.slideshow, .large-image').corners('7px', '7px', '/_assets/css/images/bg_corners_gry.png');
	$('h3.heading').corners('7px', '7px', '/_assets/css/images/bg_corners_gry_solid.png');

	$('.cta').bigLink();

	$('#feature, .slideshow:not(.instructors)').imageSlider();

	$('.slideshow.instructors').imageSlider(1, 180000, function(e) // 3 minutes (reading time)
	{
		$('.copy.instructor')
        .hide()
        .eq($(e.target).text() - 1)
        .fadeIn();
	});

	$('.rates dt').accordian(' + dd + dd.description');

	$(document).externalLinks();

	$('#navigation').initAddThis();
});

$.assetsRoot = function()
{
	var scr = $('script[src*="/global.js"]');
	return (scr.length) ? scr.attr('src').replace(/\/js\/global\.js.*?$/gi, '') : '';
}

$.fn.initAddThis = function()
{
	var self = $(this);
	var len = self.length - 1;

	self.each(function(i)
	{
		var addthis = $('<div class="addthis_toolbox" />').css({ 'clear': 'both', 'margin': '20px 17px 20px' });

		var at_email = $('<p><a class="addthis_button_email" href="#send-to-a-friend" style="text-decoration:none"><img src="' + $.assetsRoot() + '/images/email_16.png" height="16" width=16 style="vertical-align:top; margin-right:.6em" />Send to a friend</a></p>');
		var at_more = $('<p><a class="addthis_button_expanded" href="#share-this-page" style="text-decoration:none"><img src="' + $.assetsRoot() + '/images/addthis_16.png" height="16" width=16 style="vertical-align:top; margin-right:.6em" />Share this page</a></p>');

		addthis.append(at_email).append(at_more);

		$(this).append(addthis);

		if (i == len && $('head script[src*=addthis_widget.js]').length == 0)
		{
			$('head').append($('<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js"><\/script>'));
		}
	});

	return self;
}

$.fn.imageSlider = function(select, delay, callback)
{
    var self = this;
    var delay = delay || 7000;

    self.each(function(i)
    {
        var self = $(this);
        var width = 0;
        var nav = $('<ul class="navigation"/>');
        var intv = setTimeout(resetSlideshow, 7000);

        function nextImage()
        {
            var next = nav.find('li.current').next('li:not(.next)');

            (next.length) ? next.click() : nav.find('li:eq(1)').click();
        }

        function prevImage()
        {
            var prev = nav.find('li.current').prev('li:not(.prev)');

            (prev.length) ? prev.click() : nav.find('li:last-child').prev('li').click();
        }

        function resetSlideshow()
        {
            clearInterval(intv);

            intv = setInterval(nextImage, delay);
        }

        self.find('dt').each(function(i)
        {
            $(this).next('dd').addClass('current').css({ 'margin-left': width });

            width += $(this).width();

            nav.append($('<li class="' + ((i == 0) ? 'alpha current' : '') + '">' + (i + 1) + '</li>').click(function(e)
            {
                resetSlideshow();

                $(this).siblings('li').removeClass('current').end().addClass('current');

                var next = self.find('dt:eq(' + i + ')') || self.find('dt:eq(0)');

                self.find('.slider').animate(
                {
                    scrollLeft: next.length ? next.position().left : 0

                }, 300);

                if (callback) callback(e);
            }));
        })
        .parent('dl')
        .width(width + 100) // the additional 'buffer' is for ie6 fix
        .wrap('<div class="slider"/>');

        var next = $('<li class="next">Next</li>').click(nextImage);
        var prev = $('<li class="prev">Previous</li>').click(prevImage);

        self.find('.content').append(nav.append(next).prepend(prev));

        if (select)
        {
            nav.find('li:eq(' + (select) + ')').click();
        }
    });
}


$.fn.corners = function(w, h, img)
{
    this.each(function(i)
    {
        var b = $('<b class="corner"><!-- --></b>').css(
        {
            'background': 'url(' + img + ')',
            'overflow': 'hidden',
            'height': h,
            'width': w,
            'position': 'absolute',
            'top': '-2px',
            'left': '-2px'
        });

        $(this)
        .css('position', 'relative')
        .append(b)
        .append(b.clone().css({ left: 'auto', right: '-2px', 'background-position': '100% 0' }))
        .append(b.clone().css({ top: 'auto', bottom: '-2px', 'background-position': '0 100%' }))
        .append(b.clone().css({ top: 'auto', left: 'auto', right: '-2px', bottom: '-2px', 'background-position': '100% 100%' }));

        if ($.browser.msie && $.browser.version < 7)
        {
            var width = $(this).get(0).offsetWidth;
            var height = $(this).get(0).offsetHeight;

            $(this).find('b.corner').each(function(i)
            {
                if (width - $(this).position().left > 9)
                {   
                    $(this).css('right', '-3px')
                }
                
                if (height - $(this).position().top > 9)
                {
                    $(this).css('bottom', '-3px')
                }
            })
        }
    });

    return this;
}

$.fn.externalLinks = function()
{
    return this.find('a[href^=http]:not([href*=' + location.hostname + '])').attr('target', '_blank')/*.append('<em class="ext"> [this link opens in a new window] </em>')*/.end();
};

$.fn.bigLink = function(/**String*/selector)
{
    var self = this;
    var selector = selector || 'a[@href]:eq(0)';

    this.click(function(e)
    {
        var link = $(this).find(selector);

        // the first link within the supplied element
        var prevent_default = false;

        //
        var target_is_link = (e.target.nodeName == 'A');

        // check through all click events for preventDefault command (so we know whether to redirect or not)
        var all_events = link.data('events');
        var click_events;

        if (all_events && all_events.click)
        {
            click_events = all_events.click;

            for (var k in click_events)
            {
                if (/\.preventDefault\(\)/.test(click_events[k].toString()))
                {
                    prevent_default = true;
                }
            }
        }

        // trigger all jquery assigned events
        link.triggerHandler('click');

        // if preventDefault has never been assigned to this link then it is safe to do a standard redirect
        if (!prevent_default)
        {
            //document.location = link.attr('href');
            return !window.open(link.attr('href'), link.attr('target') || '_self');
        }
    })
	.hover(function()
	{
	    $(this).addClass('hover');
	},
	function()
	{
	    $(this).removeClass('hover');
	})
	.css('cursor', 'pointer');

    return self;
}

$.fn.accordian = function(elm, cur)
{
    if (!this.length) return this;

    var self = this;
    var elm = elm.split(' + ');

    self.click(function(e)
    {
        var all = self;
        var ths = $(this);

        for (var i = 0, l = elm.length; i < l; i++)
        {
            if (elm[i] != '')
            {
                var sel = ' + ' + elm[i];

                all = all.find(sel);
                ths = ths.find(sel);
            }
        }

        all.each(function(i)
        {
            if (!$(this).data('_height'))
            {
                $(this).data('_height', $(this).height())
            }
        })
        .animate(
        {
            marginBottom: 0,
            opacity: 0,
            height: 0
        }, 300);

        ths.animate(
        {
            marginBottom: 20,
            opacity: 1,
            height: ths.data('_height')
        }, 300);

        $(this).siblings('dt').removeClass('open').addClass('closed').end().addClass('open');
    })
    .css('cursor', 'pointer')
    .addClass('closed')
    .mouseover(function(e)
    {
        $(this).addClass('hover');
    })
    .mouseout(function(e)
    {
        $(this).removeClass('hover');
    });

    self.eq(cur || 0).click();

    return self;
}
