$(function() {
    MainNavigationMenus.init();
    SearchBox.init();
    TableStriping.init();
    SavingsCalculator.init();
    ContactForm.init();
    CustomerFeedback.init();
    BuildingAreaAnalyzer.init();
    HomePage.init();
    DownloadLinks.init();
    DisableHereLinks.init();
    SpotlightTagVideoLinks.init();

    // Last Child Class Assignments
    $('#nav-main > li:last-child').addClass('mainlast');
    $('#sub_nav > ul > li:last-child').addClass('last');
    $('.sub_nav_category li:last-child').addClass('last');
    $('#footer_nav li:last-child a').addClass('last');
    $('#news_headlines dd:last-child').addClass('last');
    $('#customer_feedback .customer_feedback:last-child').addClass('last');
    $('#faq dd:last-child').addClass('last');
    $('#news_list dd:last-child').addClass('last');
    $('#events_list dd:last-child').addClass('last');
    $('#contact_form_fields > li:last-child').addClass('last');
    $('#building_size_selector li:last-child').addClass('last');
    $('#featured_products_buttons .featured_product_button:last-child').addClass('last');

});

/**
 * Set all download links to spawn a new window
 */
var DownloadLinks = {
    init: function() {
        this.bind();
    },
    bind: function() {
        $('#product_extras_widget a, #extras a, .external-link, #news_detail a').click(function(e) {
            //var $el = $(this);
            window.open(this.href, '_blank');
            return false;
        });
    }
}

/**
 * Disable the links with the class "here" (current location on site)
 */
var DisableHereLinks = {
    init: function() {
        $('.here > a').click(function() {
            return false;
        });
    }
}

/**
 * Main navigation drop menus
 */
var MainNavigationMenus = {
    init: function() {
        $('.nav-sub').hide();

        //If browser is IE, add markup and styles to achieve transparent menus without flicker, including transparent menus in IE6
        //If browser is not IE, continue with normal hover states
        if ($.browser.msie) {
            subNavs = $('.nav-sub');
            subNavs.css('background', 'none').before('<div class="ie6BG" />');

            ie6BG = $('.ie6BG');
            ie6BG.css({'background-color': '#ffffff', 'width': '175px', 'height': '200px', 'position': 'absolute', 'top': '19px', 'left': '-13px'});
            ie6BG.hide();

            $(".category").hover(
                function () {
                    var mainNavBox = $(this).children('.nav-sub');
                    mainNavBox.fadeTo('fast', 0.9);
                    $(this).children('.ie6BG').fadeTo('fast', 0.9);
                    $(this).children('.ie6BG').css('height', mainNavBox.outerHeight() + 'px');
                    //IE7 requires a little extra at the bottom of the menu
                    if ($.browser.version < 8 && $.browser.version >= 7) {
                        $(this).children('.ie6BG').css('height', mainNavBox.outerHeight() + 15 + 'px');
                    }
                },
                function () {
                    $(this).children('.ie6BG').fadeTo('fast', 0);
                    $(this).children('.nav-sub').fadeTo('fast', 0);
                }
            );
        } else {
            $(".category").hover(
                function () {
                    $(this).children('.nav-sub').fadeIn('fast');
                },
                function () {
                    $(this).children('.nav-sub').fadeOut('fast');
                }
            );
        }
    }
}

/**
 * Search box user interactions
 */
var SearchBox = {
    init: function() {
        this.bind();
        $("#search").focus(function() {
            if ($(this).val() == 'Search') {
                $(this).val('');
            }
        });

        $("#search").blur(function() {
            if ($(this).val() == '') {
                $(this).val('Search');
            }
        });
    },
    bind: function() {
        $('#search_button').click(function () {
            $(this).parents('form').submit();
            return false;
        });
    }
}

/**
 * Savings Calculator
 */
var SavingsCalculator = {
    init: function() {
        if ($('#building_size_selector').length != 0) { //only run code if this element exists on page (to ensure we're on savings calc pages)
            this.bind();
            $('#calc_100, #calc_500').hide();
        }
    },

    // Replacement of inline Square Footage images based on .active class. On Savings Calculator pages.
    bind: function() {
        var self = this;
        $('#building_size_selector a').click(function () {
            $('#building_size_selector a').removeClass('active');
            $('#building_size_selector a').addClass('inactive');
            $(this).removeClass('inactive');
            $(this).addClass('active');
            switch ($(this).parent().attr('id')) {
                case 'size_25000':
                    $('#calc_25').show();
                    $('#calc_100').hide();
                    $('#calc_500').hide();
                    $('#data_size_25000').show();
                    $('#data_size_100000').hide();
                    $('#data_size_500000').hide();
                    break;
                case 'size_100000':
                    $('#calc_25').hide();
                    $('#calc_100').show();
                    $('#calc_500').hide();
                    $('#data_size_25000').hide();
                    $('#data_size_100000').show();
                    $('#data_size_500000').hide();
                    break;
                case 'size_500000':
                    $('#calc_25').hide();
                    $('#calc_100').hide();
                    $('#calc_500').show();
                    $('#data_size_25000').hide();
                    $('#data_size_100000').hide();
                    $('#data_size_500000').show();
                    break;
            }
            self.activateImages();
            return false;
        });
        $('#building_size_selector #size_25000 a').click(); // 25000 loads as default active on page load

        var imagesToLoad = new Array(
            siteurl + "assets/img/calc-25-active.jpg",
            siteurl + "assets/img/calc-100-active.jpg",
            siteurl + "assets/img/calc-500-active.jpg",
            siteurl + "assets/img/calc-25.jpg",
            siteurl + "assets/img/calc-100.jpg",
            siteurl + "assets/img/calc-500.jpg"
        );

        Utils.preloadImages(imagesToLoad);
    },
    activateImages: function() {
        $('#building_size_selector #size_25000 .active img').attr("src", siteurl + "assets/img/calc-25-active.jpg");
        $('#building_size_selector #size_100000 .active img').attr("src", siteurl + "assets/img/calc-100-active.jpg");
        $('#building_size_selector #size_500000 .active img').attr("src", siteurl + "assets/img/calc-500-active.jpg");
        $('#building_size_selector #size_25000 .inactive img').attr("src", siteurl + "assets/img/calc-25.jpg");
        $('#building_size_selector #size_100000 .inactive img').attr("src", siteurl + "assets/img/calc-100.jpg");
        $('#building_size_selector #size_500000 .inactive img').attr("src", siteurl + "assets/img/calc-500.jpg");
    }
}

/**
 * Contact Form User Interactions and Validation
 */
var ContactForm = {
    init: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        $('input[type="text"].required, textarea.required').focus(function() {
            if ( $(this).val() == "Required" ) {
                $(this).css('background-color', '#fff');
                $(this).val('');
            }
        });

        $('input[type="text"].required, textarea.required').blur(function() {
            if ( $(this).val() == "" || $(this).val() == "Required" ) {
                $(this).css('background-color', '#ffc');
                $(this).val('Required');
            } else {
                $(this).css('background-color', '#fff');
            }
        });

        $('#submit').click( function() {
            var error='';
            var valid = true;
            var errorFields = new Array();

            var firstName = $('#first_name');
            var lastName = $('#last_name');
            var email = $('#email');
            var email2 = $('#email2');
            var state = $('#state');
            var county = $('#county');
            var message = $('#message');
			var terms = $('#accept_terms:checked');

            var arProductInterests = new Array();

            $('.cbProdInterests:checked').each(function(i) {
                if($(this).val() !== null) {
                    arProductInterests.push($(this).attr('name'));
                }
            })

            $('#product_interests').val(arProductInterests.join(', '));

            if (firstName.val() == 'Required' || firstName.val() == '') {
                error += 'Please enter your first name.\n';
                errorFields.push(firstName);
                firstName.blur();
                var valid = false;
            }
            if (lastName.val() == 'Required' || lastName.val() == '') {
                error += 'Please enter your last name.\n';
                errorFields.push(lastName);
                lastName.blur();
                var valid = false;
            }
            if (email.val() == 'Required' || email.val() == '') {
                error += 'Please enter your email address.\n';
                errorFields.push(email);
                email.blur();
                var valid = false;
            }
            if (email2.val() == 'Required' || email2.val() == '') {
                error += 'Please verify your email address.\n';
                errorFields.push(email2);
                email2.blur();
                var valid = false;
            }
            if (state.val() == 'Required' || state.val() == '') {
                error += 'Please choose your home state or province.\n';
                errorFields.push(state);
                state.blur();
                var valid = false;
            }
            if (county.val() == 'Required' || county.val() == '') {
                error += 'Please enter your home county.\n';
                errorFields.push(county);
                county.blur();
                var valid = false;
            }
            if (message.val() == 'Required' || message.val() == '') {
                error += 'Please enter a message.\n';
                errorFields.push(message);
                message.blur();
                var valid = false;
            }

			if (terms.length == 0) {
				error += 'You must agree to the Terms and Conditions.\n';
				errorFields.push(message);
				var valid = false;
			}

            if (!valid) {
                alert(error);
                errorFields[0].focus();
                errorFields.length = 0;
                error = ''
                return false;
            }

            if (!ContactForm.validateEmail(email.val())) {
                alert('Please enter a valid email address.');
                email.focus();
                return false;
            }

            if (!ContactForm.validateEmail(email2.val())) {
                alert('Please enter a valid email address.');
                email2.focus();
                return false;
            }

            if (email.val() != email2.val()){
                alert('Your email addresses do not match.');
                email.focus();
                return false;
            }
        });
    },
    validateEmail: function(address) {
        //var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
        var reg = new RegExp("^[\+_a-z0-9-]+(\.[-\+_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$");
        return reg.test(address);
    }
}

/**
 * Table striping
 */
var TableStriping = {
    init: function() {
        $('table.striped tbody tr:nth-child(even)').addClass('alt');
    }
}

/**
 * Home page animations and user interactions
 */
var HomePage = {
    homeImages: [],
    homeImagesSrc: [],
    btnImages: [],
    btnImagesSrc: [],
    loadedImages: [],
    currentImage: 0,
    nextImage: 0,
    targetImage: 0,
    timer: null,
    init: function() {
        if ($('#protectionThatPaysImage').length != 0) { //only run code if this element exists on page (to ensure we're on home page)
            var protectionPays = $('#protectionThatPaysImage');
            var protectionOptions = $('#protectionThatProvidesOptionsImage');
            var protectionFunction = $('#protectionThatMeetsFunctionImage');

            this.homeImages = new Array(protectionPays, protectionOptions, protectionFunction);
            this.loadedImages = new Array(false, false, false);

            this.homeImagesSrc = [
                'assets/img/home-main-protectionPays.jpg',
                'assets/img/home-main-protectionOptions.jpg',
                'assets/img/home-main-protectionFunction.jpg'
            ];

            this.btnImages = [
                $('#protectionThatPaysButton'),
                $('#protectionThatProvidesOptionsButton'),
                $('#protectionThatMeetsFunctionButton')
            ];

            this.btnImagesSrc = [
                'assets/img/home-btn-protectionThatPays.jpg',
                'assets/img/home-btn-protectionProvidesOptions.jpg',
                'assets/img/home-btn-protectionMeetsFunction.jpg'
            ];

            this.execute();
        }
    },
    execute: function() {
        var self = this;

        for (var i = 0; i < this.homeImages.length; i++) {
            var img = new Image();
            $(img).attr('src', siteurl + this.homeImagesSrc[i])
                .attr('rel', i)
                .load(function() {
                    self.loadImage(this, $(this).attr('rel'));
                });
        }

        $(".featured_product_image").hover(
            function () {
                clearTimeout(self.timer);
            },
            function () {
                self.startTimer();
            }
        );

        for (var i = 0; i < this.btnImages.length; i++) {
            var img = new Image();
            $(img).attr('src', siteurl + this.btnImagesSrc[i])
                .attr('rel', i)
                .load(function() {self.loadBtnImage(this, $(this).attr('rel'));});

            this.btnImages[i].attr('rel', i)
                .hover(
                    self.onBtnOver,
                    self.onBtnOut
                );
        }
    },
    isLoaded: function() {
        if (this.loadedImages[0] == true
            && this.loadedImages[1] == true
            && this.loadedImages[2] == true
        ) {
            return true;
        } else {
            return false;
        }
    },
    loadImage: function(o, i) {
        this.homeImages[i].hide();
        this.homeImages[i].children('a').append(o);
        this.loadedImages[i] = true;
        if (this.isLoaded()) {
            $('#loading').fadeOut();
            this.startSlideShow();
        }
    },
    loadBtnImage: function(o, i) {
        $(o).hide();
        this.btnImages[i].append(o);
    },
    startSlideShow: function() {
        var self = this;
        this.homeImages[0].addClass('active');
        this.homeImages[0].fadeIn('slow');
        this.startTimer();
    },
    startTimer: function() {
        this.timer = setInterval(this.slideSwitch, 5000);
    },
    slideSwitch: function() {
        var self = HomePage;
        var speed = 1000;
        if (self.targetImage == 0) {
            if (self.currentImage == 2) {
                self.nextImage = 0;
            } else {
                self.nextImage++;
            }
        } else {
            self.nextImage = self.targetImage - 1;
            speed = 200;
        }

        if (self.nextImage > 2) {
            self.nextImage = 0;
        }

        if (!self.homeImages[self.currentImage].hasClass('last_active')) {
            $('.featured_product_image').removeClass('last_active');
            self.homeImages[self.currentImage].addClass('last_active');
        }

        self.homeImages[self.nextImage].hide()
            .addClass('active')
            .fadeTo(speed, 1)
            .queue(function() {
                $('.featured_product_image').removeClass('active last_active').dequeue();
                self.homeImages[self.nextImage].addClass('active');
                self.currentImage = self.nextImage;
            });
    },
    onBtnOver: function(event) {
        clearTimeout(HomePage.timer);
        $(this).children('img').fadeIn(200);
        HomePage.targetImage = parseInt(this.rel) + 1;
        HomePage.slideSwitch();
    },
    onBtnOut: function(event) {
        $(this).children('img').fadeOut(200);
        HomePage.targetImage = 0;
        HomePage.startTimer();
    }
}

/**
 * Customer Feedback widget
 */
var CustomerFeedback = {
    init: function() {
        if ($('#customer_feedback_widget').length > 0) {
            $('#customer_feedback_widget').css(
                'background-image',
                'url(' + siteurl + 'assets/img/testimonialImage-' + imageID + '.jpg)'
            );
        }
    },
    getImageId: function(entryId, imageCount) {
        return ((entryId % imageCount) + 1);
    }
};

/**
 * Building Area Analyzer Interactions
 */
var BuildingAreaAnalyzer = {
    init: function() {
        var self = this;

        $('.baa-link').bind('click', function(e) {
            e.preventDefault();
            self.showImage(this.href);
        });

        $('#baa_close').bind('click', function(e) {
            e.preventDefault();
            self.hideImage();
        });

        var images = [];
        $('.baa-link').each(function() {
            if (!Utils.in_array(images, this.href)) {
                images.push(this.href);
            }
        });
        Utils.preloadImages(images);
    },
    showImage: function(href) {
        var self = this;
        var $sub = $('#baa_sub');
        var $subimg = $('#baa_sub img');

        $subimg.attr('src', href);

        $sub.show(10, function() {
            $('#baa_sub img').show('drop', {}, 500, function() {
                self.showCloseButton();
            });
        });
    },
    showCloseButton: function() {
        $('#baa_close').show();
    },
    hideImage: function() {
        $('#baa_close').hide();
        $('#baa_sub img').hide('drop', {}, 500, function() {
            $('#baa_sub').hide();
        });
    }
}

/**
 * Utilities
 */
var Utils = {
    in_array: function(array, item) {
        for (var i in array) {
            if (array[i] == item) {
                return true;
            }
        }
        return false;
    },
    preloadImages: function(args) {
        var args_len = args.length;
        for (var i = args_len; i--;) {
            var cacheImage = document.createElement('img');
            cacheImage.src = args[i];
        }
    }
}

/**
 * Spotlight tag video links (click tracking) 
 */
var SpotlightTagVideoLinks = {
    init: function() {
        this.bindLinks('.product-video');
    },
    bindLinks: function(sel) {
        var self = this;
        $(sel).bind('click', function(e) {
            self.handleClick(this, e);
        });
    },
    handleClick: function(el, e) {
        if (el.rel != '') {
            var ord = Math.random() * 1000000000000000000;
            url = 'http://ad.doubleclick.net/activity;src=2651404;type=count018;cat=' + el.rel + ';ord=' + ord;
            var tmpImg = document.createElement('img');
            tmpImg.src = url;
        }
    }
}

