(function($){$.browserTest=function(a,z){var u='unknown',x='X',m=function(r,h){for(var i=0;i<h.length;i=i+1){r=r.replace(h[i][0],h[i][1]);}return r;},c=function(i,a,b,c){var r={name:m((a.exec(i)||[u,u])[1],b)};r[r.name]=true;r.version=(c.exec(i)||[x,x,x,x])[3];if(r.name.match(/safari/)&&r.version>400){r.version='2.0';}if(r.name==='presto'){r.version=($.browser.version>9.27)?'futhark':'linear_b';}r.versionNumber=parseFloat(r.version,10)||0;r.versionX=(r.version!==x)?(r.version+'').substr(0,1):x;r.className=r.name+r.versionX;return r;};a=(a.match(/Opera|Navigator|Minefield|KHTML|Chrome/)?m(a,[[/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/,''],['Chrome Safari','Chrome'],['KHTML','Konqueror'],['Minefield','Firefox'],['Navigator','Netscape']]):a).toLowerCase();$.browser=$.extend((!z)?$.browser:{},c(a,/(camino|chrome|firefox|netscape|konqueror|lynx|msie|opera|safari)/,[],/(camino|chrome|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));$.layout=c(a,/(gecko|konqueror|msie|opera|webkit)/,[['konqueror','khtml'],['msie','trident'],['opera','presto']],/(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);$.os={name:(/(win|mac|linux|sunos|solaris|iphone)/.exec(navigator.platform.toLowerCase())||[u])[0].replace('sunos','solaris')};if(!z){$('html').addClass([$.os.name,$.browser.name,$.browser.className,$.layout.name,$.layout.className].join(' '));}};$.browserTest(navigator.userAgent);})(jQuery);

/* ---------------------------------------------------------------------
Global JavaScript & jQuery

Target Browsers: All
Authors: Josh Anderson
------------------------------------------------------------------------ */
/**
 * @namespace Holds functionality for nerdery logic
 */
var NERD = NERD || {};

$(function() {

    // Initialize!
    NERD.HasJS.init();
    NERD.ExternalLinks.init();
    NERD.AutoReplace.init();
    NERD.Lightbox.init();
    NERD.MegaNav.init();
    NERD.CustomFormElements.init();
    NERD.ImageSlider.init();
    NERD.Validation.init();
    NERD.SidebarParents.init();
    NERD.URLFields.init();
    NERD.ShareThisForm.init();
});

/* ---------------------------------------------------------------------
HasJS
Author: Nerdery Boilerplate

Replaces "no-js" class with "has-js" on the body if JavaScript
is present. This allows you to style both the JavaScript enhanced
and non JavaScript experiences. 
------------------------------------------------------------------------ */

NERD.HasJS = {
    init: function() {
        $('body').removeClass('no-js');
        $('body').addClass('has-js');
    }
};

/* ---------------------------------------------------------------------
ExternalLinks
Author: Nerdery Boilerplate

Launches links with a rel="external" in a new window
------------------------------------------------------------------------ */

NERD.ExternalLinks = {
    init: function() {
        $('a[rel=external]').attr('target', '_blank');
    }
};

/* ---------------------------------------------------------------------
AutoReplace
Author: Nerdery Boilerplate

Mimics HTML5 placeholder behavior

Additionally, adds and removes 'placeholder-text' class, used as a styling
hook for when placeholder text is visible or not visible

Additionally, prevents forms from being
submitted if the default text remains in input field - which we may 
or may not want to leave in place, depending on usage in site
------------------------------------------------------------------------ */
NERD.AutoReplace = {
    $fields: undefined,

    init: function() {
        var $fields = $('[placeholder]');

        if ($fields.length !== 0) {
            var self = this;
            self.$fields = $fields.addClass('placeholder-text');
            self.bind();
        }
    },

    bind: function() {
        var self = this;

        self.$fields.each(
            function() {
                var me = $(this);
                var defaultText = me.attr('placeholder');
                me.attr('placeholder', '');
                
                if (me.val() == '') {
                    me.val(defaultText);
                }

                me.focus(
                    function() {
                        if (me.val() === defaultText) {
                            me.val('').removeClass('placeholder-text');
                        } 
                    }
                );

                me.blur(
                    function() {
                        if (me.val() === '') {
                            me.val(defaultText).addClass('placeholder-text');
                        }
                    }
                );

                me.parents('form').submit(
                    function() {
                        if (me.val() === defaultText) {
                            me.val('');
                        }
                        if (me.is('.required') && me.val() === "") {
                            return false;
                        }
                    }
                );
            }
        );
    }
};

NERD.Lightbox = {
    
    scrollerWidth: undefined,
    
    init: function() {
        var self = this;
        var youtubeOptions = {
            iframe: true,
            innerWidth: 425,
            innerHeight: 344
        }
        self.bind(youtubeOptions);
    },
    
    bind: function(youtubeOptions) {
        var self = this;
        $('a[rel=lightbox]').click(function() {
            var group = null;
			var me = $(this);
			var youtube = me.hasClass('youtube');
			var group = me.attr('class').replace('cboxElement', '').replace(' ', '');
			
			var options = {
                rel: group,
                current: '({current} of {total})'
            };
			
			if (youtube == true) {
				$('.' + group).colorbox(youtubeOptions);
			} else {
				$('.' + group).colorbox(options);
			}
			
			self.lightboxInitialLoad(youtube, group, options);
            
        });
    },
    
    // This runs only when the lightbox is opened
    lightboxInitialLoad: function(youtube, group, options) {
        var self = this;
        
        var imageNumber = $('a.' + group).length;
        
        // Only use the thumbnails if it's not a youtube video
            
        if (youtube == false && imageNumber > "1") {
            
            $(document).bind('cbox_complete', function() {
                var parent = $('#cboxContent').parent();
                
                $('#lightbox-image-thumbnails').remove();
            
                self.scrollerWidth = (($('a.' + group).length)*140)-10;
                parent.after('<div id="lightbox-image-thumbnails"><div id="thumbnail-next"></div><div id="thumbnail-prev"></div><div id="thumbnail-scroll" class="clearfix"></div></div>');
                $('#thumbnail-scroll').css('width', self.scrollerWidth);
                $('a.' + group).each(function(i) {
                    var me = $(this);
                    var imageNumber = i+1;
                    var imagePath = me.attr('href');
                    $('#thumbnail-scroll').append('<a href="' + imagePath + '" rel="lightbox" class="media-element element_' + imageNumber + '"><img src="' + imagePath + '" alt="" /></a>');
                });

                var prevArrow = $('#thumbnail-prev');
                var nextArrow = $('#thumbnail-next');

                prevArrow.click(function() {
                    var direction = 'prev';
                    self.thumbnailSlide(direction);
                });

                nextArrow.click(function() {
                    var direction = 'next';
                    self.thumbnailSlide(direction);
                });
                
        		self.lightboxEachImage(group, options);
            });
            
        } else {
            
            $(document).bind('cbox_complete', function() {
                $('#lightbox-image-thumbnails').remove();
                
                var contentHeight = $('#cboxLoadedContent').height();
                var wrapperHeight = contentHeight+20;
                
                $('#cboxContent').css('height', contentHeight);
                $('#cboxWrapper').css('height', wrapperHeight);
                $('#colorbox').css({'height': wrapperHeight, paddingBottom: '0px'});
            });
            
        }
    },
    
    //This runs every time a new image loads
    lightboxEachImage: function(group, options) {
        var self = this;
        
        //Reset the slide container to the left
        $('#thumbnail-scroll').css('left', '0px');
        
        var contentHeight = parseInt($('#cboxContent').css('height'));
        
        $('#colorbox').height(contentHeight+120);
        $('#cboxWrapper').height(contentHeight+120);
        
        $('#cboxMiddleLeft').css('height', contentHeight);
        $('#cboxMiddleRight').css('height', contentHeight);
        
        var imageHeight = parseInt($('#cboxContent').css('height'))-28;

        $('#cboxPrevious').height(imageHeight);
        $('#cboxNext').height(imageHeight);
        
        $('#lightbox-nav-btnPrev').click(function() {
            self.lightboxEachImage();
        });

        $('#lightbox-nav-btnNext').click(function() {
            self.lightboxEachImage();
        });
        
        // Clicking on a thumbnail
        $('#thumbnail-scroll .media-element').click(function(e) {
            e.preventDefault();
            var me = $(this);
            var direction = 'specific';
            var image = me.attr('class').replace('media-element', '').replace('element', '').replace(' ', '').replace('_', '');
            $.colorbox.specificImage(image);
            var youtube = false;
    		self.lightboxInitialLoad(youtube, group, options);
    		self.thumbnailSlide(direction, image);
        });
    },
    
    // This handles the sliding of the thumbnails
    thumbnailSlide: function(direction, image) {
        var self = this;
        var container = $('#thumbnail-scroll');
        var containerWidth = parseInt($('#lightbox-image-thumbnails').css('width'));
        var windowWidth = parseInt($('#thumbnail-scroll').css('width'));
        var maxLeft = (windowWidth-containerWidth)*-1;
        var currentPos = parseInt(container.css('left'));

        if (direction == "specific") {
            //Animate the thumbnails to the specific image that was just clicked on.
            setTimeout(function() {
                
                var newPos = ((image-1)*-140);
                var containerWidth = parseInt($('#lightbox-image-thumbnails').css('width'));
                var windowWidth = parseInt($('#thumbnail-scroll').css('width'));
                var maxLeft = (windowWidth-containerWidth)*-1;
                var currentPos = parseInt(container.css('left'));

                if (newPos > "0") {
                    $('#thumbnail-scroll').animate({
                        left: "0px"
                    }, 400);
                } else if (newPos < maxLeft) {
                    $('#thumbnail-scroll').animate({
                        left: maxLeft
                    }, 400);
                } else {
                    $('#thumbnail-scroll').animate({
                        left: newPos
                    }, 400);
                }
                
            }, 500);
        } else if (direction == "prev") {
            var newPos = currentPos+140;
            if (newPos >= "0") {
                var left = "0";
            } else {
                var left = newPos;
            }
            container.animate({
                left: left
            }, 400);
        } else {
            var newPos = currentPos-140;
            if (newPos <= maxLeft) {
                var left = maxLeft;
            } else {
                var left = newPos;
            }
            container.animate({
                left: left
            }, 400);
        }
    }
};

/**
 * Define required global variable for mx google maps
 */
var marker_icons_path = "";
/**
 * Dealer map behavior and initialization
 *
 * @namespace Dealer Map
 * @author Colin Fein <cfein@nerdery.com>
 */
NERD.DealerMap = {
    /**
     * @constant
     * @type {String}
     */
    CHART_URL           : "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=",
    
    /**
     * @constant
     * @type {String}
     */
    MAP_NAME            : 'dealers',

    /**
     * @type {Array}
     */
    markerData          : [],

    /**#@+
     * @type {Object}
     */
    $countryField       : undefined,
    $usaLabel           : undefined,
    $internationalLabel : undefined,
    /**#@-*/

    /**#@+
     * @type {Number}
     */
    radius              : 20,
    centerLat           : undefined,
    centerLong          : undefined,
    /**#@-*/

    /**
     * Initialization method
     * 
     * @returns {NERD.DealerMap}
     */
    init : function() {
        var $mapNode = $("#dealer_map");
        if ($mapNode.length) {
            this.$mapNode = $mapNode;
            var $addressLabel = $('#address_label');
            this.$countryField = $('#country');
            this.$usaLabel = $addressLabel.find('.address-text.usa');
            this.$internationalLabel = $addressLabel.find('.address-text.international');
            this.bind();
        }
        
        return this;
    },

    /**
     * Bind change event for country dropdown
     * 
     * @returns {NERD.DealerMap}
     */
    bind : function() {
        var self = this;
        this.$countryField.change(function() {
            var $option = $(this).find(':selected');
            
            if ($option.hasClass('international')) {
                self.$usaLabel.hide();
                self.$internationalLabel.show();
            } else {
                self.$internationalLabel.hide();
                self.$usaLabel.show();
            }
        }).change();
        
        return this;
    },

    /**
     * Center map and set default zoom level
     * 
     * @returns {NERD.DealerMap}
     */
    showDefaults : function() {
        this.setCenter(0, 0);
        this.getMap().setZoom(1);
        
        return this;
    },
    /**
     * Show "No Results" block and set map defaults
     *
     * @returns {NERD.DealerMap}
     */
    showNoResults : function() {
        this.showDefaults();
        $('#no_results').show();
        
        return this;
    },

    /**
     * Get the current google map
     * 
     * @returns {object}
     */
    getMap : function() {
        return $.mxgoogleMaps.gMap[this.MAP_NAME];
    },

    /**
     * Get map center lat long
     * 
     * @returns {google.maps.LatLng}
     */
    getCenter : function() {
        return new google.maps.LatLng(this.centerLat, this.centerLong);
    },
    
    /**
     * Set map zoom level based on current marker data
     *
     * @returns {NERD.DealerMap}
     */
    fitMap : function() {
        var map = this.getMap();
        var latLngBounds = new google.maps.LatLngBounds();
        
        var center = this.getCenter();
        latLngBounds.extend(center);
        
        var markers = $.mxgoogleMaps.marker;
        for (var id in markers)
        {
            latLngBounds.extend(markers[id].position);
        }
        
        map.setZoom(25);
        map.fitBounds(latLngBounds);
        
        return this;
    },

    /**
     * Set search radius
     * 
     * @param {Number} radius
     * @returns {NERD.DealerMap}
     */
    setRadius : function(radius) {
        this.radius = radius;
        
        return this;
    },

    /**
     * Set marker data
     * 
     * @param {Array} markerData
     * @returns {NERD.DealerMap}
     */
    setMarkers : function(markerData) {
        this.markerData = markerData;
        
        return this;
    },

    /**
     * Set map center
     * 
     * @param {Number} lat
     * @param {Number} lng
     * @returns {NERD.DealerMap}
     */
    setCenter : function (lat, lng) {
        this.centerLat = lat;
        this.centerLong = lng;
        
        var map = this.getMap();
        if (map) {
            map.setCenter(this.getCenter());
        }
        return this;
    },
   
    
    /**
     * Initialize map and set marker data
     * 
     * @returns {NERD.DealerMap}
     */
    initMap : function() {
        var mapConfig = {
            minZoom                : 1,
            field_id               : this.MAP_NAME,
            mapTypeId              : google.maps.MapTypeId.ROADMAP,
            navigationControl      : true,
            scaleControl           : true,
            mapTypeControl         : false,
            scrollwheel            : true,
            disableDoubleClickZoom : true
        };
        
        if (this.markerData.length) {
            var markers = [];
            for (var i=0, l = this.markerData.length; i<l; i++) {
                var marker = this.markerData[i];
                marker.icon = this.CHART_URL + marker.marker_id + '|FF776B|000000';
                marker.draggable = false;
                markers.push(marker);
            }
            mapConfig.markers = markers;
        }
        this.$mapNode.mxgoogleMaps(mapConfig);
        
        return this;
    }
};

/* ---------------------------------------------------------------------
Mega Nav
Author: Josh Anderson

Hide and show the mega navigation in the header
------------------------------------------------------------------------ */

NERD.MegaNav = {
    init: function() {
        var self = this;
        var nav = $('.mega-nav');
        var parentNav = nav.find('.has-children');
        $(parentNav).each(function() {
            var me = $(this);
            me.find('ul').css({'left' : me.width(), 'top' : '0px', 'display' : 'none'});
        });
        nav.css('left', '-9999px');
        self.bind();
    },
    bind: function() {
        var self = this;
        var trigger = $('.main-nav-item');
        var parentLI = $('.mega-nav').find('.has-children');
        trigger.hover(
            function() {
                var me = $(this);
                me.find('.mega-nav').removeAttr('style');
                me.children('a').addClass('hovered');
            },
            function() {
                var me = $(this);
                me.find('.mega-nav').css('left', '-9999px');
                me.children('a').removeClass('hovered');
            }
        );
        parentLI.hover(
            function() {
                var me = $(this);
                me.find('ul').show();
                me.children('a').addClass('hovered');
            },
            function() {
                var me = $(this);
                me.find('ul').hide();
                me.children('a').removeClass('hovered');
            }
        );
    }
};

/* ---------------------------------------------------------------------
Custom Form Elements init
------------------------------------------------------------------------ */

NERD.CustomFormElements = {
    init: function() {
        // Extremely minimum version:
        // Default settings apply. All input/select tags with a class of 'styled' are affected.
        var cf = new CustomFormElements();

        // Minimum version:
        var cf = new CustomFormElements({
            checkboxHeight: 12,
            radioHeight: 11,
            selectWidth: 161
        });

        // All options
        var cf = new CustomFormElements({
            styled: 'styled',
            uniqueClassName: 'customFormElement',
            checkboxHeight: 12,
            radioHeight: 11,
            selectWidth: 161
        });

        // If you need to reinitialize dynamically added form elements:
        cf.repaint();
    }
};

/* ---------------------------------------------------------------------
Image Slider
Author: Josh Anderson

Used primarily on the home page. This image slider slides in the next image
as well as making slight changes to the background position.
------------------------------------------------------------------------ */

NERD.ImageSlider = {
    
    init: function() {
        
        if ($('.slide-container').length) {
            var self = this;

			$('.full-width-image').css('background-position', '0px 0px');
            
            // Number and hide each slide
            $('.slide').each(function(i) {
                var me = $(this);
                var number = i+1;
                me.find('.sliding-element').hide();
                me.find('.carousel-title').hide();
                me.addClass('slide-' + number);
                me.addClass('hidden');
            });
			$('.slide .description').hide();
            
            //Show first slide
            $('.slide-1').removeClass('hidden').addClass('active');
            $('.slide-1').find('.sliding-element').show();
            $('.slide-1').find('.carousel-title').show();
            $('.slide-1 .sliding-element').css({
                left: '0px'
            });
			$('.slide-1 .description').show();

			$('.slide').css('position', 'absolute');
            
            //Create Prev/Next buttons
            $('.slide-container').prepend('<div id="slide-prev" class="slide-nav"><div class="bg-img"></div></div><div id="slide-next" class="slide-nav"><div class="bg-img"></div></div>');
            
            self.bind();
        }
        
    },
    
    bind: function() {
        
        var self = this;
        prev = "-1"
        next = "+1"
        
        $('#slide-prev').click(function() {
            var me = $(this);
            if (me.hasClass('disabled') == false) {
                self.slide(prev);
            }
        });
        
        $('#slide-next').click(function() {
            var me = $(this);
            if (me.hasClass('disabled') == false) {
                self.slide(next);
            }
        });
        
    },
    
    slide: function(direction) {
        
        var self = this;
        var current = $('.slide.active').attr('class').replace('slide ', '').replace('slide-', '').replace(' active', '');
        var requestedSlide = parseInt(current)+parseInt(direction);
        var lastSlide = $('.slide').length;
		var bgPosition = $('.full-width-image').css('background-position');
		if (typeof(bgPosition) == 'undefined') {
		    var bgPositionX = $('.full-width-image').css('background-position-x');
		} else {
		    var temp_pos_val_array = bgPosition.split(' ');
		    var bgPositionX = temp_pos_val_array[0];
		}
		
		// Disable prev/next buttons until new slide is loaded
		$('.slide-nav').css({
            opacity: 0.4
		}).addClass('disabled');
        
        // This handles the next and previous buttons if we're at the first or last slide
        if (requestedSlide == "0") {
            var newSlide = $('.slide-' + lastSlide);
        } else if (requestedSlide > lastSlide) {
            var newSlide = $('.slide-1');
        } else {
            var newSlide = $('.slide-' + requestedSlide);
        }

        $('.carousel-title').fadeOut(400);
		$('.slide .description').fadeOut(400);

		// The handles the direction of the slide in.
		if (direction == "+1") {
	        newSlide.find('.sliding-element').css({
	            left: '260px'
	        });
			var slideOut = '-260px';
			var newBgPosition = parseInt(bgPositionX)-100;
		} else {
			newSlide.find('.sliding-element').css({
	            left: '-260px'
	        });
			var slideOut = '260px';
			var newBgPosition = parseInt(bgPositionX)+100;
		}
		
        $('.full-width-image').animate({
            backgroundPosition: "(" + newBgPosition + "px 0px)"
        }, 600);
		
		//Slide Out
		$('.slide-' + current).addClass('hidden').removeClass('active');
		$('.slide-' + current).find('.sliding-element').fadeOut(600);
        $('.slide-' + current).find('.sliding-element').animate({
            left: slideOut
        }, { duration: 600, queue: false });
        
		// Slide In
        newSlide.removeClass('hidden').addClass('active');
        newSlide.find('.sliding-element').fadeIn(600);
        newSlide.find('.sliding-element').animate({
            left: '0px'
        }, { duration: 600, queue: false });
		
		setTimeout(function() {
		    
		    if ($.browser.name == "msie") {
		        newSlide.find('.carousel-title').show();
		    } else {
		        newSlide.find('.carousel-title').fadeIn(500);
		    }
		
		}, 600);
		
		setTimeout(function() {
			newSlide.find('.description').fadeIn(500);
			
			// Re-enable prev/next buttons
    		$('.slide-nav').animate({
                opacity: 1
    		}).removeClass('disabled');
		}, 1000);
        
    }
};

/**
 * Hide product tab nav if only one element is visible
 * 
 * @namespace Product Nav
 * @author Colin Fein <cfein@nerdery.com>
 */
NERD.ProductNav = {
    
    /**
     * Initialization method
     */
    init : function() {
        var $nav = $('#tab-nav');
        if ($nav.find('li').size() == 1) {
          $nav.hide();
        }
    }
};

/* ---------------------------------------------------------------------
Sidebar Parents
Author: Josh Anderson

Structure says that our sidebar items have children if they're hidden pages
This searches for those situations and removes them.
------------------------------------------------------------------------ */

NERD.SidebarParents = {
    
    init: function() {
        if ($('.sidebar-nav').length) {
            $('.sidebar-nav').find('.has-children.parent-here').each(function() {
                var me = $(this);
                var children = me.has('ul').length;
                
                if (children == "0") {
                    me.removeClass('parent-here');
                    me.removeClass('has-children');
                    me.addClass('here');
                }
            })
        }
    }
};

/**
 * Inline validation setup and initialization
 * 
 * @namespace Validation
 * @author Colin Fein <cfein@nerdery.com>
 */
NERD.Validation = {
    /**
     * Validation Engine Options
     * @type {Object}
     */
    DEFAULT_OPTIONS : {
    },
    /**
     * Validatable forms
     * 
     * @type {Object}
     */
    $forms : undefined,
    
    /**
     * Initialize validatable fields
     */
    init : function() {
        if ( ! jQuery().validationEngine) {
            return;
        }
        
        var $forms = $('form').filter('.validatable');
        if ($forms.size()) {
            this.$forms = $forms;
            this.bind();
        }
    },
    
    bind : function() {
        this.$forms.validationEngine(this.DEFAULT_OPTIONS);
    }
};


/**
 * URL-related input handler
 * 
 * @namespace URLFields
 * @author Colin Fein <cfein@nerdery.com>
 */
NERD.URLFields = {
    /**
     * Url Inputs
     * 
     * @type {Object}
     */
    $inputs : undefined,
    
    /**
     * Initialize url inputs
     */
    init : function() {
        var $inputs = $('.url-input');
        if ($inputs.size()) {
            this.$inputs = $inputs;
            this.bind();
        }
    },
    bind : function() {
        this.$inputs.click(function() {
            var $input = $(this);
            var url = $input.data('baseurl');
            if ($input.is(':checked')) {
                url += $input.attr('name') + '/';
            }
            document.location.href = url;
        });
    }
};

/* ---------------------------------------------------------------------
Share this form
Author: Josh Anderson

Display the share this form on the page.
If the user has javascript then create the link and open the form in a modal.
------------------------------------------------------------------------ */

NERD.ShareThisForm = {
    FORM_SELECTOR  : '#email_a_friend_proform',
    FORM_WRAPPER   : '#email_this_wrapper',
    MODAL_SELECTOR : '.modal-form',
    
    $form : undefined,
    $formWrapper : undefined,
    $modalForm : undefined,
    
    init: function() {
        var $form = $(this.FORM_SELECTOR);
        
        var $shareThis = $('.share-this');
        if ($form.length && $shareThis.length) {
            var self = this;
            
            self.$formWrapper = $(self.FORM_WRAPPER);
            self.$modalForm = self.$formWrapper.find(self.MODAL_SELECTOR);
            
            self.$formWrapper.hide();
            
            
            self.$form = $form;
            
            $shareThis.find('ul').append('<li><span id="open-share-form">Email a friend</span></li>');
            
            self.bind();
        }
    },

    
    bind: function() {
        
        var self = this;
        
        self.$modalForm.delegate(self.FORM_SELECTOR, 'submit', function(e) {
            e.preventDefault();
            //show loading
            var $this = $(this);
            
            self.$modalForm
                .addClass('loading')
                .load(
                    $this.attr('action') + ' ' + self.FORM_SELECTOR,
                    $this.serializeArray(),
                    function() {
                        $(this).removeClass('loading');
                        $.colorbox.resize();
                    }
                );
        }).delegate('.close-modal', 'click', function() {
            $.fn.colorbox.close();
        });
        
        $('#open-share-form').click(function() {
            $.colorbox({
                width: '600px',
                inline: true,
                href: self.FORM_WRAPPER + '>' +self.MODAL_SELECTOR
            });
        });
    }
};
