
(function($) {

    // if the UI scope is not availalable, add it
    $.ui = $.ui || {};

    // tabs API methods
    $.fn.tabs = function() {
        var method = typeof arguments[0] == 'string' && arguments[0];
        var args = method && Array.prototype.slice.call(arguments, 1) || arguments;

        return this.each(function() {
            if (method) {
                var tabs = $.data(this, 'ui-tabs');
                tabs[method].apply(tabs, args);
            } else
                new $.ui.tabs(this, args[0] || {});
        });
    };

    // tabs class
    $.ui.tabs = function(el, options) {
        var self = this;

        this.element = el;

        this.options = $.extend({

            // basic setup
            selected: 0,
            unselect: options.selected === null,
            event: 'click',
            disabled: [],
            cookie: null, // pass options object as expected by cookie plugin: { expires: 7, path: '/', domain: 'jquery.com', secure: true }
            // TODO bookmarkable: $.ajaxHistory ? true : false,

            // Ajax
            spinner: 'Loading&#8230;',
            cache: false,
            idPrefix: 'ui-tabs-',
            ajaxOptions: {},

            // animations
            fx: null, /* e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } */

            // templates
            tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',
            panelTemplate: '<div></div>',

            // CSS classes
            navClass: 'tanchors',
            selectedClass: 'tab',
            unselectClass: 'tab-inactive',
            disabledClass: 'tab-disabled',
            panelClass: 'fragment',
            hideClass: 'fragment-hidden',
            loadingClass: 'fragment-loading'

        }, options);

        this.options.event += '.ui-tabs'; // namespace event
        this.options.cookie = $.cookie && $.cookie.constructor == Function && this.options.cookie;

        $(el).bind('setData.ui-tabs', function(event, key, value) {
            self.options[key] = value;
            this.tabify();
        }).bind('getData.ui-tabs', function(event, key) {
            return self.options[key];
        });

        // save instance for later
        $.data(el, 'ui-tabs', this);

        // create tabs
        this.tabify(true);
    };

    // instance methods
    $.extend($.ui.tabs.prototype, {
        tabId: function(a) {
            return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '')
                || this.options.idPrefix + $.data(a);
        },
        ui: function(tab, panel) {
            return {
                instance: this,
                options: this.options,
                tab: tab,
                panel: panel
            };
        },
        tabify: function(init) {

            this.$lis = $('li:has(a[href])', this.element);
            this.$tabs = this.$lis.map(function() { return $('a', this)[0]; });
            this.$panels = $([]);

            var self = this, o = this.options;

            this.$tabs.each(function(i, a) {
                // inline tab
                if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an empty hash
                    self.$panels = self.$panels.add(a.hash);
                // remote tab
                else if ($(a).attr('href') != '#') { // prevent loading the page itself if href is just "#"
                    $.data(a, 'href.ui-tabs', a.href); // required for restore on destroy
                    $.data(a, 'load.ui-tabs', a.href); // mutable
                    var id = self.tabId(a);
                    a.href = '#' + id;
                    var $panel = $('#' + id);
                    if (!$panel.length) {
                        $panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass)
                            .insertAfter( self.$panels[i - 1] || self.element );
                        $panel.data('destroy.ui-tabs', true);
                    }
                    self.$panels = self.$panels.add( $panel );
                }
                // invalid tab href
                else
                    o.disabled.push(i + 1);
            });

            if (init) {

                // attach necessary classes for styling if not present
                $(this.element).hasClass(o.navClass) || $(this.element).addClass(o.navClass);
                this.$panels.each(function() {
                    var $this = $(this);
                    $this.hasClass(o.panelClass) || $this.addClass(o.panelClass);
                });

                // disabled tabs
                for (var i = 0, index; index = o.disabled[i]; i++)
                    this.disable(index);

                // Try to retrieve selected tab:
                // 1. from fragment identifier in url if present
                // 2. from cookie
                // 3. from selected class attribute on <li>
                // 4. otherwise use given "selected" option
                // 5. check if tab is disabled
                this.$tabs.each(function(i, a) {
                    if (location.hash) {
                        if (a.hash == location.hash) {
                            o.selected = i;
                            // prevent page scroll to fragment
                            //if (($.browser.msie || $.browser.opera) && !o.remote) {
                            if ($.browser.msie || $.browser.opera) {
                                var $toShow = $(location.hash), toShowId = $toShow.attr('id');
                                $toShow.attr('id', '');
                                setTimeout(function() {
                                    $toShow.attr('id', toShowId); // restore id
                                }, 500);
                            }
                            scrollTo(0, 0);
                            return false; // break
                        }
                    } else if (o.cookie) {
                        var index = parseInt($.cookie('ui-tabs' + $.data(self.element)),10);
                        if (index && self.$tabs[index]) {
                            o.selected = index;
                            return false; // break
                        }
                    } else if ( self.$lis.eq(i).hasClass(o.selectedClass) ) {
                        o.selected = i;
                        return false; // break
                    }
                });
                var n = this.$lis.length;
                while (this.$lis.eq(o.selected).hasClass(o.disabledClass) && n) {
                    o.selected = ++o.selected < this.$lis.length ? o.selected : 0;
                    n--;
                }
                if (!n) // all tabs disabled, set option unselect to true
                    o.unselect = true;

                // highlight selected tab
                this.$panels.addClass(o.hideClass);
                this.$lis.removeClass(o.selectedClass);
                if (!o.unselect) {
                    this.$panels.eq(o.selected).show().removeClass(o.hideClass); // use show and remove class to show in any case no matter how it has been hidden before
                    this.$lis.eq(o.selected).addClass(o.selectedClass);
                }

                // load if remote tab
                var href = !o.unselect && $.data(this.$tabs[o.selected], 'load.ui-tabs');
                if (href)
                    this.load(o.selected, href);

                // disable click if event is configured to something else
                if (!(/^click/).test(o.event))
                    this.$tabs.bind('click', function(e) { e.preventDefault(); });

            }

            var hideFx, showFx, baseFx = { 'min-width': 0, duration: 1 }, baseDuration = 'normal';
            if (o.fx && o.fx.constructor == Array)
                hideFx = o.fx[0] || baseFx, showFx = o.fx[1] || baseFx;
            else
                hideFx = showFx = o.fx || baseFx;

            // reset some styles to maintain print style sheets etc.
            var resetCSS = { display: '', overflow: '', height: '' };
            if (!$.browser.msie) // not in IE to prevent ClearType font issue
                resetCSS.opacity = '';

            // Hide a tab, animation prevents browser scrolling to fragment,
            // $show is optional.
            function hideTab(clicked, $hide, $show) {
                $hide.animate(hideFx, hideFx.duration || baseDuration, function() { //
                    $hide.addClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.
                    if ($.browser.msie && hideFx.opacity)
                        $hide[0].style.filter = '';
                    if ($show)
                        showTab(clicked, $show, $hide);
                });
            }

            // Show a tab, animation prevents browser scrolling to fragment,
            // $hide is optional.
            function showTab(clicked, $show, $hide) {
                if (showFx === baseFx)
                    $show.css('display', 'block'); // prevent occasionally occuring flicker in Firefox cause by gap between showing and hiding the tab panels
                $show.animate(showFx, showFx.duration || baseDuration, function() {
                    $show.removeClass(o.hideClass).css(resetCSS); // maintain flexible height and accessibility in print etc.
                    if ($.browser.msie && showFx.opacity)
                        $show[0].style.filter = '';

                    // callback
                    $(self.element).triggerHandler("show.ui-tabs", [self.ui(clicked, $show[0])]);

                });
            }

            // switch a tab
            function switchTab(clicked, $li, $hide, $show) {
                /*if (o.bookmarkable && trueClick) { // add to history only if true click occured, not a triggered click
                    $.ajaxHistory.update(clicked.hash);
                }*/
                $li.addClass(o.selectedClass)
                    .siblings().removeClass(o.selectedClass);
                hideTab(clicked, $hide, $show);
            }

            // attach tab event handler, unbind to avoid duplicates from former tabifying...
            this.$tabs.unbind(o.event).bind(o.event, function() {

                //var trueClick = e.clientX; // add to history only if true click occured, not a triggered click
                var $li = $(this).parents('li:eq(0)'),
                    $hide = self.$panels.filter(':visible'),
                    $show = $(this.hash);

                // If tab is already selected and not unselectable or tab disabled or click callback returns false stop here.
                // Check if click handler returns false last so that it is not executed for a disabled tab!
                if (($li.hasClass(o.selectedClass) && !o.unselect) || $li.hasClass(o.disabledClass)
                    || $(self.element).triggerHandler("select.ui-tabs", [self.ui(this, $show[0])]) === false) {
                    this.blur();
                    return false;
                }

                self.options.selected = self.$tabs.index(this);

                // if tab may be closed
                if (o.unselect) {
                    if ($li.hasClass(o.selectedClass)) {
                        self.options.selected = null;
                        $li.removeClass(o.selectedClass);
                        self.$panels.stop();
                        hideTab(this, $hide);
                        this.blur();
                        return false;
                    } else if (!$hide.length) {
                        self.$panels.stop();
                        var a = this;
                        self.load(self.$tabs.index(this), function() {
                            $li.addClass(o.selectedClass).addClass(o.unselectClass);
                            showTab(a, $show);
                        });
                        this.blur();
                        return false;
                    }
                }

                if (o.cookie)
                    $.cookie('ui-tabs' + $.data(self.element), self.options.selected, o.cookie);

                // stop possibly running animations
                self.$panels.stop();

                // show new tab
                if ($show.length) {

                    // prevent scrollbar scrolling to 0 and than back in IE7, happens only if bookmarking/history is enabled
                    /*if ($.browser.msie && o.bookmarkable) {
                        var showId = this.hash.replace('#', '');
                        $show.attr('id', '');
                        setTimeout(function() {
                            $show.attr('id', showId); // restore id
                        }, 0);
                    }*/

                    var a = this;
                    self.load(self.$tabs.index(this), function() {
                        switchTab(a, $li, $hide, $show);
                    });

                    // Set scrollbar to saved position - need to use timeout with 0 to prevent browser scroll to target of hash
                    /*var scrollX = window.pageXOffset || document.documentElement && document.documentElement.scrollLeft || document.body.scrollLeft || 0;
                    var scrollY = window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body.scrollTop || 0;
                    setTimeout(function() {
                        scrollTo(scrollX, scrollY);
                    }, 0);*/

                } else
                    throw 'jQuery UI Tabs: Mismatching fragment identifier.';

                // Prevent IE from keeping other link focussed when using the back button
                // and remove dotted border from clicked link. This is controlled in modern
                // browsers via CSS, also blur removes focus from address bar in Firefox
                // which can become a usability and annoying problem with tabsRotate.
                if ($.browser.msie)
                    this.blur();

                //return o.bookmarkable && !!trueClick; // convert trueClick == undefined to Boolean required in IE
                return false;

            });

        },
        add: function(url, label, index) {
            if (url && label) {
                index = index || this.$tabs.length; // append by default

                var o = this.options;
                var $li = $(o.tabTemplate.replace(/#\{href\}/, url).replace(/#\{label\}/, label));
                $li.data('destroy.ui-tabs', true);

                var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId( $('a:first-child', $li)[0] );

                // try to find an existing element before creating a new one
                var $panel = $('#' + id);
                if (!$panel.length) {
                    $panel = $(o.panelTemplate).attr('id', id)
                        .addClass(o.panelClass).addClass(o.hideClass);
                    $panel.data('destroy.ui-tabs', true);
                }
                if (index >= this.$lis.length) {
                    $li.appendTo(this.element);
                    $panel.appendTo(this.element.parentNode);
                } else {
                    $li.insertBefore(this.$lis[index]);
                    $panel.insertBefore(this.$panels[index]);
                }

                this.tabify();

                if (this.$tabs.length == 1) {
                     $li.addClass(o.selectedClass);
                     $panel.removeClass(o.hideClass);
                     var href = $.data(this.$tabs[0], 'load.ui-tabs');
                     if (href)
                         this.load(index, href);
                }

                // callback
                $(this.element).triggerHandler("add.ui-tabs",
                    [this.ui(this.$tabs[index], this.$panels[index])]
                );

            } else
                throw 'jQuery UI Tabs: Not enough arguments to add tab.';
        },
        remove: function(index) {
            if (index && index.constructor == Number) {
                var o = this.options, $li = this.$lis.eq(index).remove(),
                    $panel = this.$panels.eq(index).remove();

                // If selected tab was removed focus tab to the right or
                // tab to the left if last tab was removed.
                if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1)
                    this.click(index + (index < this.$tabs.length ? 1 : -1));
                this.tabify();

                // callback
                $(this.element).triggerHandler("remove.ui-tabs",
                    [this.ui($li.find('a')[0], $panel[0])]
                );

            }
        },
        enable: function(index) {
            var self = this, o = this.options, $li = this.$lis.eq(index);
            $li.removeClass(o.disabledClass);
            if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2...
                $li.css('display', 'inline-block');
                setTimeout(function() {
                    $li.css('display', 'block');
                }, 0);
            }

            o.disabled = $.map(this.$lis.filter('.' + o.disabledClass),
                function(n, i) { return self.$lis.index(n); } );

            // callback
            $(this.element).triggerHandler("enable.ui-tabs",
                [this.ui(this.$tabs[index], this.$panels[index])]
            );

        },
        disable: function(index) {
            var self = this, o = this.options;
            this.$lis.eq(index).addClass(o.disabledClass);

            o.disabled = $.map(this.$lis.filter('.' + o.disabledClass),
                function(n, i) { return self.$lis.index(n); } );

            // callback
            $(this.element).triggerHandler("disable.ui-tabs",
                [this.ui(this.$tabs[index], this.$panels[index])]
            );

        },
        select: function(index) {
            if (typeof index == 'string')
                index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] );
            this.$tabs.eq(index).trigger(this.options.event);
        },
        load: function(index, callback) { // callback is for internal usage only
            var self = this, o = this.options,
                $a = this.$tabs.eq(index), a = $a[0];

            var url = $a.data('load.ui-tabs');

            // no remote - just finish with callback
            if (!url) {
                typeof callback == 'function' && callback();
                return;
            }

            // load remote from here on
            if (o.spinner) {
                var $span = $('span', a), label = $span.html();
                $span.html('<em>' + o.spinner + '</em>');
            }
            var finish = function() {
                self.$tabs.filter('.' + o.loadingClass).each(function() {
                    $(this).removeClass(o.loadingClass);
                    if (o.spinner)
                        $('span', this).html(label);
                });
                self.xhr = null;
            };
            var ajaxOptions = $.extend({}, o.ajaxOptions, {
                url: url,
                success: function(r, s) {
                    $(a.hash).html(r);
                    finish();
                    // This callback is required because the switch has to take
                    // place after loading has completed.
                    typeof callback == 'function' && callback();

                    if (o.cache)
                        $.removeData(a, 'load.ui-tabs'); // if loaded once do not load them again

                    // callback
                    $(self.element).triggerHandler("load.ui-tabs",
                        [self.ui(self.$tabs[index], self.$panels[index])]
                    );

                    o.ajaxOptions.success && o.ajaxOptions.success(r, s);
                }
            });
            if (this.xhr) {
                // terminate pending requests from other tabs and restore tab label
                this.xhr.abort();
                finish();
            }
            $a.addClass(o.loadingClass);
            setTimeout(function() { // timeout is again required in IE, "wait" for id being restored
                self.xhr = $.ajax(ajaxOptions);
            }, 0);

        },
        url: function(index, url) {
            this.$tabs.eq(index).data('load.ui-tabs', url);
        },
        destroy: function() {
            var o = this.options;
            $(this.element).unbind('.ui-tabs')
                .removeClass(o.navClass).removeData('ui-tabs');
            this.$tabs.each(function() {
                var href = $.data(this, 'href.ui-tabs');
                if (href)
                    this.href = href;
                $(this).unbind('.ui-tabs')
                    .removeData('href.ui-tabs').removeData('load.ui-tabs');
            });
            this.$lis.add(this.$panels).each(function() {
                if ($.data(this, 'destroy.ui-tabs'))
                    $(this).remove();
                else
                    $(this).removeClass([o.selectedClass, o.unselectClass,
                        o.disabledClass, o.panelClass, o.hideClass].join(' '));
            });
        }
    });

})(jQuery);
/* Wrap original content in .source span, then insert .hover span */
/* If .shadow, clone .source span and change class to .shadow */
/* If .highlight, clone .source span and change class to .highlight */
/* (or generate those 2 extra spans while wrapping, as opposed to just 1) */

function goFish(selector, time) {
	if (!time) time = 500;
	
	if (!selector) selector = '.pufferfish';
	
	$(selector)
		.each(function() {
			var html = $(this).html();
			
			$(this).html('<span class="source">' + html + '</span><span class="hover"></span>');
			if ($('.highlight', this).length > 0)
				$(this).append('<span class="highlight">' + html + '</span>');
	
			if ($('.shadow', this).length > 0)
				$(this).append('<span class="shadow">' + html + '</span>');
		})
		.hover(
			function() {
				$('.hover', this).stop().animate({
					'opacity': 1
				}, time);
			}, function() {
				$('.hover', this).stop().animate({
					'opacity': 0
				}, time);
		//		alert('!');
			}
		)
		.find('.hover').css('opacity', 0);
}
$(function() { inputFocus(); });

function inputFocus() {
	$(' .shy').focus(function() {
		if (!this.shyValue) this.shyValue = $(this).val();
		
		$(this).removeClass('shy');
		
		if ($(this).val() == this.shyValue) $(this).val('');
		
	})
	.blur(function() {
		if ($(this).val() == this.shyValue || $(this).val() == '')
			$(this).addClass('shy').val(this.shyValue);
	});
}
/* Codename Rainbows - 0.2 */
/* April 04, 2008 */

$(function() {

function d(title, str) {
	if (title) title = unescape(title);
	if (str) str = unescape(str);
	
	if (str) $('#debug').append('<p><b>' + title + ':</b> ' + str + '</p>');
	else if (title == '-') $('#debug').append('<p>------</p>');
	else if (title) $('#debug').append('<p>' + title + '</p>');
	else $('#debug').append('<br />');

}

function initGradients(s) {
	$(function() {
		$(s).each(function() {
			var el = this;
			// Parse the inputs
			var from = '#ffffff', to = '#000000';
			var
				fR = parseInt(from.substring(1, 3), 16),
				fG = parseInt(from.substring(3, 5), 16),
				fB = parseInt(from.substring(5, 7), 16),
				tR = parseInt(to.substring(1, 3), 16),
				tG = parseInt(to.substring(3, 5), 16),
				tB = parseInt(to.substring(5, 7), 16);

			
			var h = $(this).height() * 1.5;
			
			//h = h - Math.floor((h * .07));
			
			var html;
			
			if (this.initHTML)
				html = this.initHTML;
			else
				html = this.innerHTML;
			
			this.initHTML = html;
			this.innerHTML = '';

			for (var i = 0; i < h; i++) {
				var c = '#' +
					(Math.floor(fR * (h - i) / h + tR * (i / h))).toString(16) +
					(Math.floor(fG * (h - i) / h + tG * (i / h))).toString(16) +
					(Math.floor(fB * (h - i) / h + tB * (i / h))).toString(16);
					
					if (c.length == 4) continue;

				d('.rainbow-' + i + '{ color: ' + c + '; }');
				
			// $('<span class="rainbow rainbow-' + i + '"><span style="top: ' + (-i - 1) + 'px;">' + html + '</span></span>').appendTo(this);

			$('<span class="rainbow rainbow-' + i + '" style="color: ' + c + ';"><span style="top: ' + (-i - 1) + 'px;">' + html + '</span></span>').appendTo(this);

			}
			
			$('<span class="highlight">' + html + '</span>').appendTo(this);
			$('<span class="shadow">' + html + '</span>').appendTo(this);
			$('<span class="source">' + html + '</span>').appendTo(this);

		});
		
	});
}

initGradients('.rainbows');
initGradients('.title .tab-right');
initGradients('.anchors li a');

function initShadows(s) {
	$(function() {
		$(s).each(function() {
		
		
		if (this.initHTML)
				html = this.initHTML;
			else
				html = this.innerHTML;
			
			this.initHTML = html;
			this.innerHTML = '';
				
		$('<span class="wrap"><span class="shadow">' + html + '</span><span class="source">' + html + '</span></span>').appendTo(this);

		});
		
	});
}

initShadows('#subnavs ul a');
initShadows('.addshadows');
/* © 2008 Dragon Interactive LLC */
/* Build 2.1 - July 2, 2008 */

// 			$('a[@href$="' + self.options.selector + '"]')
// $ = endsWith.

SlideShow = function() { this.init.apply(this, arguments); }

SlideShow.prototype = {
	init: function(options) {	
		var dOptions = {
			autoStart: true,
			interval: 7000,
			selector: '#ss',
			stopOnHover: true,
			fade: 700
		};
		
		this.options = jQuery.extend(dOptions, options);
		this.go();
	},

	go: function() {
		$(this.options.selector).css('position', 'relative');
		


		this.divs = $(this.options.selector + '> div').not('.pagination').css({
			display: 'none',
			position: 'absolute'
		}).get();

		this.count = this.divs.length;
	//	console.log(this.options.selector + '!' + this.count);
		this.divs[0].style.display = 'block';
		
		this.curDiv = this.divs[0];
		
		this.initEvents();
		$('a[@href$="' + this.options.selector + '"]:first').addClass('active');
		if (this.options.autoStart)
			this.start();
	},

	initEvents: function() {
		var self = this;
		
		$(this.options.selector + '-controls .ss-next').click(function() {
			self.next.apply(self);
			return false;
		});

		$(this.options.selector + '-controls .ss-prev').click(function() {
			self.prev.apply(self);
			return false;
		});

		$(this.options.selector + '-controls .ss-start').click(function() {
			self.start.apply(self);
			return false;
		});

		$(this.options.selector + '-controls .ss-stop').click(function() {
			self.stop.apply(self);
			return false;
		});

		$('a[@href$="' + this.options.selector + '"]').click(function() {
			self.stop();
			var cClass = this.className;
	//		alert(this + ', ' + cClass);
			var selector = self.options.selector + ' .' + cClass;
			var switchTo = $(selector).get(0);
			
			if (switchTo == self.curDiv) return false;
			
			self.switchPanes.apply(self, [switchTo]);
			
			// Remove active classes from everything and add them back to the current one
			$('a[@href$="' + self.options.selector + '"]').removeClass('active');
			$(this).addClass('active');
			
			return false;
		});

		if (this.options.stopOnHover) {
			$(this.options.selector + ' div,' + this.options.selector + '-controls .dots').hover(function() { self.stop.apply(self); }, function() { self.start.apply(self); });
		}
	},

	getNext: function(div) {
		for (var i = 0; i < this.count; i++) {
			if (this.divs[i] == div) break;
		}
		
		if (i == this.count - 1) return this.divs[0];
		return this.divs[i + 1];
	},
	
	getPrev: function(div) {
		for (var i = 0; i < this.count; i++) {
			if (this.divs[i] == div) break;
		}
		
		if (i == 0) return this.divs[this.count - 1];
		return this.divs[i - 1];

	},
	
	start: function() {
		var self = this;
		if (!this.theInterval)
		this.theInterval = setInterval(function() { self.next.apply(self); }, this.options.interval);
	},

	stop: function() {
		clearInterval(this.theInterval);
		this.theInterval = 0;
	},

	next: function() {
		this.switchPanes(this.getNext(this.curDiv));
	},

	prev: function() {
		this.switchPanes(this.getPrev(this.curDiv));
	},

	switchPanes: function(newDiv) {
		var self = this;
		
		//console.log(this.options.selector + ': newDiv:' + newDiv);
		
				// Set appropriate zIndices so that the new one is above the old one.
		this.curDiv.style.zIndex = 50;
		newDiv.style.zIndex = 100;
		
		//console.log('CurDiv zIndex: ' + this.curDiv.style.zIndex + ', newDiv.zIndex: ' + newDiv.style.zIndex);
		
		// Cancel all animations
		//ignore anims for now$(this.curDiv).stop().css('opacity', 1).css('display', 'block');
		
		// Run the function
		if (this.curDiv.finalize) this.curDiv.finalize.apply(this.curDiv);
	//	if (this.prevDiv.makeNew) this.prevDiv.makeNew.apply(this.curDiv);
		
	//	console.log('switching panes from ' + this.curDiv.className + ' to ' + newDiv.className);
		
		
		
		newDiv.finalized = false;
		
		newDiv.finalize = function() {
		//	console.log(' Finalizing:' + newDiv.className + ', before finalized');
		
			if (this.finalized) return false;
	//		console.log(' Finalizing:' + newDiv.className);
			// Hide the old div
			$(self.prevDiv).css('display', 'none');
			// Show the current, new div
			$(this).css('display', 'block');//.css('opacity', 1);
			
			this.finalized = true;
			
			// Get rid of this function; we do not need it any more.
			//this.finalize = null;
		};
			
		// CORRECT AT YOUR OWN RISK, SEEMS TO WORK FINE WITH THE TYPO
		$(self.curDid).stop();
		
		self.prevDiv = self.curDiv;
		self.curDiv = newDiv;
		
		$(newDiv)
			.css({'display': 'block', 'opacity': 0})
			.animate({
				'opacity': 1
			}, self.options.fade, newDiv.finalize);


		// Remove active classes from all and add them back to just the current one
		$('a[@href$="' + self.options.selector + '"]')
			.removeClass('active')
			.each(function() {
				if ($(this).hasClass(newDiv.className)) $(this).addClass('active');
			});
			
		this.stop();
		this.start();

	},

	getAnchor: function(s){
	  var strReturn = '';
	  if ( s.indexOf('#') > -1 )
	   	strReturn = s.substr(s.indexOf('#') + 1).toLowerCase();

  		return strReturn;
	}
	

	
};

$(function() {
    // if (jQuery.browser.msie) return;
	initTooltips();
})

function initTooltips() {
	$('.tooltip').each(initTooltip);
}

// Called with this = the element
function initTooltip(i) {

	this.ttText = this.title;
	this.title = '';	// Cancel the default tooltip
	
	var html = '<span class="tip-start"></span><span class="tip-middle">' + this.ttText + '</span><span class="tip-end"></span>';
	
	var ttID = 'tip-' + i;
	$('<span class="tip" id="' + ttID + '">' + html + '</span>').appendTo('body'); // .insertAfter(this);
	
	$(this).hover(function(e) {
//		$('#' + ttID).css('display', 'block');
		var tip = $('#' + ttID);


		tip.stop().css({
			'display': 'block',
			'opacity': 0,
			'left': e.pageX + 25,
			'top': e.pageY + 16
		})
		.animate({
			'left': '-=25'
		}, 400, 'easeOutCirc')
		.animate({
			'opacity': 1
		}, {
			queue: false,
			duration: 350
		});


	}, function() {
//		$('#' + ttID).css('display', 'none');
		
		// Right now does it right away, but can use a tieout
		
		var tip = $('#' + ttID);

		tip.stop().animate({
			'left': '+=25',
			'opacity': 0
		}, 400, 'easeOutCirc', function() {
			$(this).css('display', 'none');
		});

		
	});
}

$(function() {
	$('.ratings.module').each(function() {
		initRatings.apply(this);
		initRatingsDropdown.apply(this);
	});
});

function initRatings() {
	var self = this
	$('a.owned', this).click(function() {
		$(self)
			.removeClass('played rented')
			.addClass('owned');
        $.post(this.href);
		return false;
	});

	$('a.played', this).click(function() {
		$(self)
			.removeClass('owned rented')
			.addClass('played');
        $.post(this.href);
		return false;
	});

	$('a.rented', this).click(function() {
		$(self)
			.removeClass('played owned')
			.addClass('rented');
        $.post(this.href);
		return false;
	});
}

function initRatingsDropdown() {
	var self = this;
	$('.add', this).toggle(function() {
		
		$(this).parent().addClass('adding');
		$('.add_menu', self)
			.stop()
			.css({ 'display': 'block', 'opacity': 0 })
			.animate({
				'opacity': 1
			}, 350);
			

	
		// Hide tooltips that are visible
//		$('.tip:visible').css('display', 'none');

		// Hide tooltips that are visible
		$('.tip:visible').stop().animate({
			'opacity': 0
		}, 200, function() {
			$(this).css('display', 'none');
		});
			
		return false;
	}, function() {
	
		$(this).parent().removeClass('adding');
		$('.add_menu', self)
			.stop()
			.animate({
				'opacity': 0
			}, 350, 'easeOutCirc', function() { $(this).css('display', 'none'); });
			
		return false;
	});
	
}

$(function() {
	initDetails();
})

function initDetails() {
 $('.expanding .row').each(function() {
  var self = this;
  
  $(this).hover(function() {
   $(this).addClass('hovering');
  }, function() {
   $(this).removeClass('hovering');
  });
  
  $(this).click(function() {
   if ($(this).is('.open')) return;
   $(this).addClass('open');

   this.oldHeight = $(this).height();
   $('.details', this)
    .css({
     display: 'block',
     opacity: 0
    });

   
   $('.details', this).animate({
     opacity: 1
    }, 400, 'easeInCirc', function() {
   }); 
  });
  
  $('.close_details', this).click(function() {
   $(self).removeClass('open');
   
   $('.details', self)
    .animate({ 
     opacity: 0 
    }, 400, 'easeInCirc', function() { 
     $(this).css('display', 'none');
     $(self).removeClass('open');
    }); 
    
   return false;
  });
 });
}


function form_data(form) {
    return form.find("input[checked], input[type='text'], input[type='hidden'], input[type='password'], input[type='submit'], option[selected], textarea").filter(':enabled');
}

function postRating() {
    var ul = $(this).parents("ul.hearts");
    $.post(this.href, {}, function(data) { 
        ul.replaceWith(data);
        updateGamePoints();
        // need to redo jquery styling again
        goFish();
        $('.heart_rating').click(postRating);
    }, "html");
    return false;
}
$('.heart_rating').click(postRating);

function removeGame() {
    var module = $(this).parents("div.module");
    $.post(this.href, {}, function(data) {
        module.replaceWith(data);
        goFish();
        $('.ratings.module').each(function() {
    		initRatings.apply(this);
    		initRatingsDropdown.apply(this);
    	});
        $('.add_menu a').click(addGame);
    });
    return false;
}
$('.module .remove').click(removeGame);

function bookmark() {
    $.post(this.href);
    $(this).replaceWith('<a class="bookmark">bookmarked</a>');
    return false;
}
$('.bookmark').click(bookmark);

// freddiebox

function Lightbox() {
	var boxId = null;
	var eContent = null;
	var eBox = null;
	var self = this;
	var boxTitle = '';
	var onLoadCallback = function() {};
	var onCloseCallback = function() {};
	var resizeCallback = function() {};


	/* Generate a unique div ID to use. */
	do {
		boxId = String('lightbox_' + Math.round(Math.random() * 1000000));
	} while(document.getElementById(boxId) !== null);


	this.onWindowResize = function() {
		resizeCallback();
	};

	// Attach handler to the window's resize event.
	$(window).resize(this.onWindowResize);


	var calcBoxHeight = function() {
		var boxHeight = Math.round(window.innerHeight * 0.80);

		if (boxHeight < 400) {
			boxHeight = 400;
		} else if (boxHeight > 600) {
			boxHeight = 600;
		}

		return boxHeight-150;
	};
	
	var calcBoxTopOffset = function() {
		return Math.round(window.innerHeight * 0.20) -100;
	};

	var realResize = function() {
		self.contentElement().css('height', calcBoxHeight());
		eBox.find('div.light').css('top', calcBoxTopOffset());
		return false;
	};

	this.boxElement = function() {
		return eBox;
	};

	this.contentElement = function() {
		if (eContent === null) {
			var tmp;
			eContent = ( (tmp = $('div.content', eBox)).size() == 1) ? tmp : null;
		}
		return eContent;
	};

	this.setTitle = function(t) {
		boxTitle = t;
	};

	this.wrapContent = function (content) {

		var boxHeight = calcBoxHeight();
		var boxTopOffset = calcBoxTopOffset();

		return '<div class="light" style="top: ' + boxTopOffset + 'px">'
					+ '<div class="shadows"><div class="shadow n"></div><div class="shadow w"></div><div class="shadow s"></div><div class="shadow e"></div><div class="shadow ne"></div><div class="shadow se"></div><div class="shadow sw"></div><div class="shadow nw"></div>'
					+ '<a class="close pufferfish" href="#">Close this Box</a>'
					+ '<div class="large pink title">'
					+ '<h2>' + boxTitle + '</h2>'
					+ '</div>'
					+ '<div class="large content" style="height:' + boxHeight + 'px;">'
					+ content
					+ '</div><!-- /content -->'
					+ '<div class="clear"></div>'
					+ '</div><!-- /shadows --></div><!-- /light -->';
	};

	this.show = function(url, params) {
		if (eBox === null) {

			/* Prepend it to the body. */
			$('body').append('<div id="' + boxId + '" style="display:none;"></div>');

			/* Get a reference to the div. */
			eBox = $('#' + boxId);

			$.get(url, params, function(content) {

				/* Prepend it to the body. */
				eBox.append(self.wrapContent(content));
				
				self.hook_up_lightbox_links();
				self.hook_up_forms();
				
				$('a.close', eBox).click(self.hide).click(onCloseCallback);

				onLoadCallback();
			});

		} else {
			//Force a resize, while the lightbox was closed it, the window could have been resized.
			realResize();
		}

		/* lightbox will be visible now; Enable resizing. */
		resizeCallback = realResize;

		eBox.show();
		$('#darkness').fadeIn(500);
		
		return false;
	};

	this.hide = function() {
		eBox.hide();
		$('#darkness').fadeOut(500);

		/* lightbox will be invisible now; Disable resizing. */
		resizeCallback = function() {};

		return false;
	};
	
	this.fetch = function(url) {
	    $.get(url, function(content) {
	        $(".content", eBox).html(content);
	        self.hook_up_lightbox_links();
	        self.hook_up_forms();
	        $(".content", eBox).animate({scrollTop: 0}, "fast");
	    });
	};
	
	this.hook_up_lightbox_links = function() {
	    $('a.open_in_lightbox', eBox).click(function() {
            self.fetch(this.href);
            return false;
        });
        $('.heart_rating', eBox).click(postRating);
        $('.bookmark', eBox).click(bookmark);
	};
	
	this.hook_up_forms = function() {
	    $("form.in_lightbox", eBox).submit(function() {
	        var params = {};
	        form_data($(this)).each(function() {
	            params[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value; 
	        });
	        $.post(this.action, params,
	            function(data, textStatus) {
	                $(".content", eBox).html(data);
	                self.hook_up_lightbox_links();
        	        self.hook_up_forms();
	            }
	        );
	        return false;
	    });
	};

	this.onClose = function(fn) {
		onCloseCallback = fn;
	};

	this.setTrigger = function(element) {
		$(element).click(this.show);
	};

	this.onFirstLoad = function(fn) {
		onLoadCallback = fn;
	};
}

function fuck(lightBox) {	

	/* This styling needs to be re-ran, because the lightbox content is loaded dynamically. */
	$('input:text,input:password').addClass('text');
	$('input:checkbox,input:radio').addClass('checkbox');

	$("dl", lightBox.contentElement()).each(function(i) {
		var ul = $(this);
		ul.find("dd:first,dt:first").addClass("first").end().find("dt:last,dd:last").addClass("last");
	});

	// Tab Titles
	$(".title h2", lightBox.boxElement()).each(
	function(i) { 
		$(this).html('<span class="tab"><span class="tab-right">' + $(this).html() + '</span></span>');
	});

	goFish($('.pufferfish', lightBox.boxElement()));

	initGradients($('.rainbows', lightBox.boxElement()));
	initGradients($('.title .tab-right', lightBox.boxElement()));
	initGradients($('.anchors li a', lightBox.boxElement()));

	initShadows($('#subnavs ul a', lightBox.boxElement()));

}

var lightBox = new Lightbox('/lightboxes/signup/');
lightBox.setTitle('Sign up for your Account!');
lightBox.setTrigger('#artic .create-account');
lightBox.onFirstLoad(function() {	
    fuck(lightBox);
});

// works with zebra and bromide off  

function hookup_arctic_subnav() {
    $('#arctic_show_subnav').toggle(function() {
    	$('#arctic_subnav').fadeIn('200');
    },function() { 
    	$('#arctic_subnav').fadeOut('200');
    })
}

// Slideshow

// new SlideShow();

// Initialize Tabs
 
 $('.anchors').tabs();
 $('#tabs').tabs();

function openLightbox() {
    /* this caching isn't working 
	if (typeof(window.globalLightboxList) == 'undefined')
		window.globalLightboxList = {};

	if (typeof(window.globalLightboxList[this.href]) == 'undefined')
		lightbox = window.globalLightboxList[this.href] = new Lightbox(this.href);
    */
    var lightbox = new Lightbox();
    lightbox.setTitle(this.title);
    lightbox.onFirstLoad(function() { fuck(lightbox); });
	lightbox.show(this.href);
	return false;
}

function openMessageLightbox() {
    /* this caching isn't working 
	if (typeof(window.globalLightboxList) == 'undefined')
		window.globalLightboxList = {};

	if (typeof(window.globalLightboxList[this.href]) == 'undefined')
		lightbox = window.globalLightboxList[this.href] = new Lightbox(this.href);
    */
    var lightbox = new Lightbox();
    lightbox.setTitle(this.title);
    lightbox.onFirstLoad(function() { fuck(lightbox); });
    lightbox.onClose(function() {
        updateArcticNav();
    });
	lightbox.show(this.href);
	return false;
}

function submitIntoLightbox() {
    var params = {};
    form_data($(this)).each(function() {
        params[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value; 
        if(this.name == "game") {
            params["game"] = this.real_val;
        }
    });
    /* this caching isn't working 
	if (typeof(window.globalLightboxList) == 'undefined')
		window.globalLightboxList = {};

	if (typeof(window.globalLightboxList[this.href]) == 'undefined')
		lightbox = window.globalLightboxList[this.href] = new Lightbox(this.href);
    */
    var lightbox = new Lightbox();
    lightbox.setTitle(params["lightbox_title"]);
    delete params["lightbox_title"];
    lightbox.onFirstLoad(function() { fuck(lightbox); });
	lightbox.show(this.action, params);
	return false;
}

function hookup_lightboxes() {
    $('a.open_lightbox').click(openLightbox);
    $('a.open_message_lightbox').click(openMessageLightbox);
    $('form.submit_lightbox').submit(submitIntoLightbox);
}

$(function() {
    hookup_arctic_subnav();
    hookup_lightboxes();
});

function updateGamePoints() {
    $('#game_points').hide();
    $('#game_points').load("/game_points/", {}, function() {
        $('#game_points').fadeIn();
    });
}

function updateArcticNav() {
    $('#arctic_nav').hide();
    $('#arctic_nav').load("/arctic_nav/", {}, function() {
        $('#arctic_nav').fadeIn();
        initGradients('.rainbows');
        hookup_arctic_subnav();
        hookup_lightboxes();
    });
}

function addGame() {
    $.post(this.href);
    $(this).replaceWith("<small>added</small>"); // @@@ replace could be with result of POST
    return false;
}
$('.add_menu a').click(addGame);

function deleteParentFieldset() {
    $(this).parents("fieldset").remove();
    return false;
}
$('.delete').click(deleteParentFieldset);

$('.page_selector').change(function() {
    window.location = this.value;
})

function flipPage() {
    /* @@@ HACK it seems */
    box = $(this).parent().parent();
    box.load(this.href, function() {
        // need to redo jquery
        $('.pagination .previous', box).click(flipPage);
        $('.pagination .next', box).click(flipPage);
    });
    return false;
}

function setupAjaxPagination(selector) {
    $(selector + ' .pagination .previous').click(flipPage);
    $(selector + ' .pagination .next').click(flipPage);
}

setupAjaxPagination('#most_popular_blogs');
setupAjaxPagination('#top_blogs');
setupAjaxPagination('#latest_posts');

$("#arctic a.openid").click(function() {
    $("#arctic_userpass").hide();
    $("#arctic_openid").show();
    return false;
});
$("#arctic a.openid_return").click(function() {
    $("#arctic_openid").hide();
    $("#arctic_userpass").show();
    return false;
});

$(".openid_warning").click(function() {
    return confirm("This will delete your current OpenID association. If you want to switch back to OpenID you will need to re-associate. Continue?")
});

});
