﻿$(document).ready(function () {

    $('html').removeClass('no-js').addClass('js');

    // colorbox defaults
    $.fn.colorbox.settings.opacity = 0.75;

    //active tab - try to be smart in case url chunk appears deeper in url
    var currentUrl = window.location.href;
    var navs = new Object;

    navs['products'] = '#n1';
    navs['service'] = '#n2';
    navs['rental'] = '#n3';
    navs['quote'] = '#n4';
    navs['about'] = '#n5';
    navs['combics'] = '#n1';
    navs['cubis'] = '#n1';
    navs['signum'] = '#n1';

    var lowestIndex = 2000;
    var lowestSection = '';
    var currIndex = -1;

    for (var section in navs) {
        currIndex = currentUrl.indexOf('/' + section + '/');

        if (currIndex > -1 && currIndex < lowestIndex) {
            lowestIndex = currIndex;
            lowestSection = section;
        }
    }

    if (lowestIndex > -1) {
        $(navs[lowestSection] + ' a').addClass('active');
    }

    // focus/blur search form field(s)
    $("input.has-instructions,textarea.has-instructions").focus(
		function () {
		    if (this.value == this.defaultValue) {
		        this.value = "";
		    }
		}
	).blur(
		function () {
		    if (!this.value.length) {
		        this.value = this.defaultValue;
		    }
		}
	);

    // validator extensions
    jQuery.validator.addMethod("greaterThan", function (value, element, params) {

        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date($(params).val());
        }
        return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val()));
    }, 'Must be greater than {0}.');

    // print page
    $('#print-page').prepend('<a href="#">Print Page</a>');
    $('#print-page a').click(function () {
        window.print();
        return false;
    });

    // go hover
    $('#search-nav input.bttn').hover(function () {
        $(this).css('background-position', '0 -28px');
    },
	    function () {
	        $(this).css('background-position', '0 0');
	    }
    );

    // image button hover
    $('input.bttn').hover(function () {
        $(this).css('background-position', '0 -23px');
    },
	    function () {
	        $(this).css('background-position', '0 0');
	    }
    );

    // homepage product tabs
    if ($("#product-tabs-wrapper").length) {
        $("#product-tabs-wrapper").tabs({
            selected: 1,
            cookie: {
                // store cookie for a day, without, it would be a session cookie
                expires: 1
            }
        });
    }

    // product tabs
    if ($("#product-info").length) {
        $("#product-info").tabs({
            select: function (event, ui) {
                var url = $.data(ui.tab, 'load.tabs');
                if (url) {
                    location.href = url;
                    return false;
                }
                return true;
            }
        });
    }

    // search tabs
    if ($("#search-tabs").length) {
        $("#search-tabs").tabs({
            cookie: {
                // store cookie for a day, without, it would be a session cookie
                expires: 1
            }
        });
    }

    // search tabs
    if ($("#enhanced-product").length) {
        $("#enhanced-product").tabs({
    });
}

// autocomplete for discontinued product names
if (document.getElementById("ManufacturerServiceForm") && document.getElementById("ManufacturerHasDiscontinuedProducts")) {
    $("#ManufacturerServiceForm #ModelNumber").autocomplete({
        source: $("#ManufacturerServiceForm #ModelNumberAutocompleteSource").val(),
        minLength: 2
    });
}

// autocomplete for site search
$("#Keywords,#quick-keywords").autocomplete({
    source: $("#AutocompleteSource").val(),
    minLength: 2
});

// filter form on product results
if (document.getElementById("SeriesFilterForm")) {
    $ajaxLoaderImg = $("#ajax-loader");

    var options = {
        target: '#series-filter-results',
        success: function () { $ajaxLoaderImg.hide(); }
    };

    var $SeriesFilterForm = $('#SeriesFilterForm');

    $('#rental-products #SeriesFilterForm').find(':input').change(function () {
        $ajaxLoaderImg.show();
        $SeriesFilterForm.ajaxSubmit(options);
    });

    $SeriesFilterForm.submit(function (e) {
        e.preventDefault();
        var filterKeywords = $("#SeriesFilterForm #Keywords").val();
        $ajaxLoaderImg.show();
        $SeriesFilterForm.ajaxSubmit(options);
        //$("#keywords-caption").text(filterKeywords);
        _gaq.push(['_trackPageview', '/products/search/?keyword=' + filterKeywords]);
    });

    var lockedCriteria = $('#LockedCriteria').val();

    if (lockedCriteria.length > 0) {
        var $LockedField = $('#' + lockedCriteria);
        $SeriesFilterForm.append('<input type="hidden" name="' + $LockedField.attr('name') + '" value="' + $LockedField.val() + '" />');
        $LockedField.attr('name', 'Locked').attr('disabled', 'disabled');
    }
}

// add to sales quote links
$(".add-to-quote").colorbox({ width: 800, onComplete: function () {
    $SalesQty = $("#sales-quote-quantity");
    if ($SalesQty.length) { $SalesQty.text(parseInt($SalesQty.text()) + 1); }
    $("#sales-quote-utility").show();
    $(".add-to-quote").colorbox();
    CloseColorbox();
}
});

function CloseColorbox() {
    $(".close-box").click(function () {
        $.colorbox.close();
        return false;
    });
};

// enlarge product thumbnail
//$("a.enlarge").colorbox({ iframe: true, width: 600, height: 600 });
$("a.enlarge").colorbox({ photo: true });

// validate product-series comparison checkboxes
var $seriesComparisonForm = $("#series-comparison-form");
if ($seriesComparisonForm.length) {
    $(".bttn.compare").click(function (e) {
        // prevent jump to top
        e.preventDefault();

        if ($seriesComparisonForm.valid()) {
            $seriesComparisonForm.submit();
        }
    });

    $seriesComparisonForm.validate({
        rules: {
            LomProductSeriesId: {
                required: true,
                minlength: 2,
                maxlength: 3
            }
        },
        messages: {
            LomProductSeriesId: {
                required: "Please select at least 2 series to compare.",
                minlength: "Please select at least 2 series to compare.",
                maxlength: "You may compare a maximum of 3 series."
            }
        },
        errorElement: "span",
        errorLabelContainer: ".compare-message"
    });
}

// Country/State select functions
function DisableForm() {
    $("#submit").fadeTo("fast", ".2");
    $("#submit").attr("disabled", "disabled").css("cursor", "progress");
}

function EnableForm() {
    $("#submit").fadeTo("fast", "1");
    $("#submit").removeAttr("disabled").css("cursor", "pointer");
}

function UpdateStateSelect() {
    DisableForm();
    $.getJSON($("#StateLookupUrl").val() + $("select#Country").val(), {}, function (j) {
        var options = '<option value="">' + $("#SelectState").val() + '</option>';

        if (j != null) {
            for (var i = 0; i < j.length; i++) {
                options += '<option value="' + j[i].StateId + '">' + j[i].Name + '</option>';
            }
            $("select#State").html(options);

            if (j.length > 1) {
                $("select#State").parent().show();
                $("input#PostalCode").parent().show();
            } else {
                $("select#State").parent().hide();
                $("input#PostalCode").parent().hide();
            }
        }

        EnableForm();
    });
}

$("select#Country").change(UpdateStateSelect);

// product select functions (make/model)
function UpdateSelect($primarySelect, $dependentSelect, lookupUrl, defaultOptionText) {
    $ajaxLoaderImg = $("#ajax-loader");
    $ajaxLoaderImg.show();

    $.getJSON(lookupUrl + $primarySelect.val(), {}, function (j) {
        var options = '<option value="">' + defaultOptionText + '</option>';

        if (j != null) {
            for (var i = 0; i < j.length; i++) {
                options += '<option value="' + j[i].UrlKey + '">' + j[i].Name + '</option>';
            }
            $dependentSelect.html(options);

            if (j.length > 0) {
                $dependentSelect.parent().show();
            } else {
                $dependentSelect.parent().hide();
            }
        }

        $ajaxLoaderImg.hide();
    });
}

var $quickAddForm = $("#add-products");
if ($quickAddForm.length) {
    var $manufacturerSelect = $("select#ManufacturerSelect");
    var $lockedManufacturer = $("input#LockedManufacturer");
    var $seriesSelect = $("select#SeriesSelect");
    var $modelSelect = $("select#ModelSelect");
    var useAjax = $("input#UseAjax").val() == "True";
    var manufacturerChange;
    var isManufacturerVersion = $lockedManufacturer.length > 0 && $lockedManufacturer.val().length > 0;

    if (isManufacturerVersion) {
        // manufacturer subdomain version
        manufacturerChange = function () {
            $modelSelect.val("");
            $modelSelect.parent().hide();
            UpdateSelect($manufacturerSelect, $seriesSelect, $("#SeriesLookupUrl").val(), $("#SelectSeries").val());
            UpdateSelect($manufacturerSelect, $modelSelect, $("#ModelLookupUrlByMake").val(), $("#SelectModel").val());
        };

        $seriesSelect.change(function () {
            if ($(this).val()) {
                UpdateSelect($seriesSelect, $modelSelect, $("#ModelLookupUrl").val(), $("#SelectModel").val());
            } else {
                UpdateSelect($manufacturerSelect, $modelSelect, $("#ModelLookupUrlByMake").val(), $("#SelectModel").val());
            }
        });
    }
    else {
        // general purpose version
        manufacturerChange = function () {
            $modelSelect.val("");
            $modelSelect.parent().hide();
            UpdateSelect($manufacturerSelect, $seriesSelect, $("#SeriesLookupUrl").val(), $("#SelectSeries").val());
        };

        $seriesSelect.change(function () {
            UpdateSelect($seriesSelect, $modelSelect, $("#ModelLookupUrl").val(), $("#SelectModel").val());
        });
    }

    $manufacturerSelect.change(manufacturerChange);

    if (isManufacturerVersion) {
        $manufacturerSelect.val($lockedManufacturer.val());
        manufacturerChange();
        $manufacturerSelect.parent().hide();
    }

    if (useAjax) {
        $ajaxLoaderImg = $("#ajax-loader");
        var quickAddOptions = {
            beforeSubmit: function () { $ajaxLoaderImg.show(); },
            success: function (rsp) { $ajaxLoaderImg.hide(); $("#callout").html(rsp); ajaxifyQuickCart(); }
        };

        $quickAddForm.ajaxForm(quickAddOptions);
    }
}

// contact form validation
if ($('#contactform').length) {

    function getRouteSelection() {
        var selected = $("#RouteTo option:selected").val();
        if (selected == "Request Service") {
            $("#comment-box label").text("Please include any details about your service needs or specifications:");
        } else {
            $("#comment-box label").text("Please include any details about your needs or specifications that might help us direct your inquiry:");
        }
    }

    getRouteSelection();

    $('#RouteTo').change(function () {
        getRouteSelection();
    });

    if ($("select#Country").val() == "-1") {
        $("select#State").parent().hide();
    } else if ($("select#State option").length < 2) {
        UpdateStateSelect();
    }

    $("select#Country").change(function () {
        UpdateStateSelect();
    });

    $("#contactform").validate({
        rules: {
            FirstName: {
                required: true
            },
            LastName: {
                required: true
            },
            Address1: {
                required: true
            },
            City: {
                required: true
            },
            Country: {
                required: true
            },
            State: {
                required: "#State:visible"
            },
            Email: {
                required: true,
                email: true
            }
        },
        errorElement: "div",
        wrapper: "div",  // a wrapper around the error message
        errorPlacement: function (error, element) {
            offset = element.offset();
            error.insertAfter(element)
            error.addClass('message');  // add a class to the wrapper
        }
    });

    $("select#Country").rules("add", { min: 1, messages: { min: "Please select a country."} });
    $("select#State").rules("add", { min: 1, messages: { min: "Please select a state."} });
}

// quote request form validation
if ($('#quote-request').length) {
    $("#quote-request").validate({
        rules: {
            FirstName: {
                required: true
            },
            LastName: {
                required: true
            },
            CompanyName: {
                required: true
            },
            Phone: {
                required: true
            },
            Email: {
                required: true,
                email: true
            },
            //Rfq: {
            //    accept: "pdf|doc|docx"
            //},
            ArrivalDate: {
                required: "#ArrivalDate:visible",
                date: true
            },
            ReturnDate: {
                required: "#ReturnDate:visible",
                date: true,
                greaterThan: "#ArrivalDate"
            }
        },
        messages: {
            ReturnDate: {
                greaterThan: "Please choose a return date later than the arrival date"
            }
        },
        errorElement: "div",
        wrapper: "div",  // a wrapper around the error message
        errorPlacement: function (error, element) {
            offset = element.offset();
            error.insertAfter(element)
            error.addClass('message');  // add a class to the wrapper
        }
    });
}

// quick-quoteform validation
if ($('#quick-quote').length) {
    $("#quick-quote").validate({
        rules: {
            FullName: {
                required: true
            },
            Phone: {
                required: true
            },
            Email: {
                required: true,
                email: true
            }
        },
        errorElement: "div",
        wrapper: "div",  // a wrapper around the error message
        errorPlacement: function (error, element) {
            offset = element.offset();
            error.insertAfter(element)
            error.addClass('message');  // add a class to the wrapper
        }
    });
}

// editable cart
if ($("#cart").length) {
    $(".quantity").change(function () { $("#cart").submit(); });
}

if ($("#quick-cart").length) {
    ajaxifyQuickCart();
}

// toggle quick-add
if ($('.quick-add').length) {
    $("p.heading").append('<span class="toggle-icon">+/-</span>').click(function () {
        if ($("#togglebox").is(":hidden")) {
            $(".ie6 #togglebox").show();
            $(".ie7 #togglebox").show();
            $(".ie8 #togglebox").show();
            $("#togglebox").slideDown(400);
            $(this).addClass("active");
            return false;
        } else {
            $(".ie6 #togglebox").hide();
            $(".ie7 #togglebox").hide();
            $(".ie8 #togglebox").hide();
            $("#togglebox").slideUp(400);
            $(this).removeClass("active");
            return false;
        }
    });
}

// email defuscation
if ($('.obfuscated').length > 0) {
    $('.obfuscated').defuscate();
}

// datepicker
// Triggers focus out on the input field onSelect. This is prevent a value from staying red if it was invalid.
$('input.date').datepicker({ showOn: 'button', buttonImage: '/images/icons/calendar.png', buttonImageOnly: true, showButtonPanel: true, onSelect: function (dateText, inst) { jQuery(this).trigger('focusout') }, minDate: 0 });

/* Enhanced product landing pages
---------------------------------------------------------*/
$("#gallery-thumbs img").hover(
	 	function () {
	 	    $(this).fadeTo(100, .8);
	 	},
		function () {
		    $(this).fadeTo(10, 1);
		}
	);

$(".enlarge-button").click(function () {
    $("#primary-image").trigger("click");
});

// #gallery-thumbs slider 
//    if (document.getElementById("gallery-thumbs")) {

//        // only show if you have enough
//        if ($("#gallery-thumbs .thumbs-container a").length > 7) {

//            $("#gallery-thumbs").scrollable({
//                speed: 300,
//                //circular: true,  // this breaks image gallery browsing in colorbox
//                items: '.thumbs-container'
//            });
//        } else {
//            // hide the slide elements
//            $("#gallery-thumbs-wrapper .prev, #gallery-thumbs-wrapper .next").hide();
//            $("#gallery-thumbs").addClass("no-pager");
//        }


//    }


if ($("#weight-limit-slider").length) {
    var $weightLimit = $("#weight-limit");
    var $weightLimitResult = $("#weight-limit-result");
    var weightLimitData = $weightLimit.data();

    // first we need to build out all the possible values as an array
    var stepsLen = weightLimitData.steps.length;
    var steppedValues = new Array();
    for (var i = 0; i < stepsLen; i++) {
        var step = weightLimitData.steps[i];
        var stepStart = parseFloat(step[0]);
        var stepEnd = parseFloat(step[1]);
        var stepSize = parseFloat(step[2]);

        var currVal = stepStart;
        while (currVal < stepEnd) {
            steppedValues.push(currVal.toFixed(1).toString().replace(".0", ""));
            currVal += stepSize;
        }
    }

    weightLimitData.values = steppedValues;

    var weightLimitInitialValue = Math.round((weightLimitData.values.length - 2) / 2); // subtracting 2 makes it effectively round down

    $("#weight-limit-slider").slider({
        value: weightLimitInitialValue,
        min: 0,
        max: weightLimitData.values.length - 1,
        step: 1,
        slide: function (event, ui) {
            var newValue = weightLimitData.values[ui.value] + weightLimitData.unit;
            $weightLimit.val(newValue);
            $weightLimitResult.text(newValue);
        }
    });

    $weightLimit.val(weightLimitData.values[weightLimitInitialValue] + weightLimitData.unit);
    $weightLimitResult.text(weightLimitData.values[weightLimitInitialValue] + weightLimitData.unit);
}

if ($("#readability-limit-slider").length) {
    var $readabilityLimit = $("#readability-limit");
    var $readabilityLimitResult = $("#readability-limit-result");
    var readabilityLimitData = $readabilityLimit.data();
    var readabilityLimitInitialValue = Math.round((readabilityLimitData.values.length - 2) / 2); // subtracting 2 makes it effectively round down
    $("#readability-limit-slider").slider({
        value: readabilityLimitInitialValue,
        min: 0,
        max: readabilityLimitData.values.length - 1,
        step: 1,
        slide: function (event, ui) {
            var newValue = readabilityLimitData.values[ui.value];
            $readabilityLimit.val(newValue);
            $readabilityLimitResult.text(newValue);
        }
    });

    $readabilityLimit.val(readabilityLimitData.values[readabilityLimitInitialValue]);
    $readabilityLimitResult.text(readabilityLimitData.values[readabilityLimitInitialValue]);
}

$("#primary-options").removeClass("hide").addClass("closed");
$("#primary-options").hide();


$('li.dropdown').each(function () {
    $(this).hover(
			function () { // Change the input image's source when we "roll on"
			    $(this).animate({ backgroundColor: "#e1ebf5" }, 100);
			},
			function () { // Change the input image's source back to the default on "roll off"
			    $(this).animate({ backgroundColor: "#fff" }, 0);
			}
		);

    $(this).click(function (event) { event.stopPropagation(); });
});

$("a.open-button").click(function (e) {

    e.preventDefault();
    e.stopPropagation();

    if ($("#primary-options").hasClass("closed")) {
        $("#primary-options").removeClass("closed").addClass("open");
        $("#primary-options").slideDown(100);
    } else {
        $("#primary-options").removeClass("open").addClass("closed");
        $("#primary-options").slideUp(100);
    }

});

$("#selected-primary-option").click(function (e) {

    e.preventDefault();
    e.stopPropagation();

    if ($("#primary-options").hasClass("closed")) {
        $("#primary-options").removeClass("closed").addClass("open");
        $("#primary-options").slideDown(100);
    } else {
        $("#primary-options").removeClass("open").addClass("closed");
        $("#primary-options").slideUp(100);
    }

});

$('html').click(function () {
    //Hide the menus if visible
    if ($("#primary-options").hasClass("open")) {
        $("#primary-options").removeClass("open").addClass("closed");
        $("#primary-options").slideUp(100);
    }
});

if ($("#primary-options").length) {
    $("#primary-options").selectable({
        filter: 'li.dropdown',
        stop: function () {
            var result = $("#primary-option-result").empty();

            // remove multi selected			
            $(".ui-selected:first", this).each(function () {
                $(this).siblings().removeClass("ui-selected");
                var refreshVal = $(this).attr("value");
            });

            $(".ui-selected", this).each(function () {
                var index = $("#primary-options li.dropdown").index(this);
                var displayName = $(this).find(".option-name").text();
                result.append(" " + displayName);
                $("#primary-option-value").val(displayName);
                $("#selected-content").empty();
                $("#selected-content").append($(this).clone().children());
                $("#primary-options").removeClass("open").addClass("closed");
                $("#primary-options").slideUp(100);
            });
        }
    });
}

// Draft Shield drop-down
$("#ds-options").removeClass("hide").addClass("closed");
$("#ds-options").hide();

$("a.ds-open-button").click(function (e) {

    e.preventDefault();
    e.stopPropagation();

    if ($("#ds-options").hasClass("closed")) {
        $("#ds-options").removeClass("closed").addClass("open");
        $("#ds-options").slideDown(100);
    } else {
        $("#ds-options").removeClass("open").addClass("closed");
        $("#ds-options").slideUp(100);
    }

});

$("#selected-ds-option").click(function (e) {

    e.preventDefault();
    e.stopPropagation();

    if ($("#ds-options").hasClass("closed")) {
        $("#ds-options").removeClass("closed").addClass("open");
        $("#ds-options").slideDown(100);
    } else {
        $("#ds-options").removeClass("open").addClass("closed");
        $("#ds-options").slideUp(100);
    }

});

$('html').click(function () {
    //Hide the menus if visible
    if ($("#ds-options").hasClass("open")) {
        $("#ds-options").removeClass("open").addClass("closed");
        $("#ds-options").slideUp(100);
    }
});

if ($("#ds-options").length) {
    $("#ds-options").selectable({
        filter: 'li.dropdown',
        stop: function () {
            var result = $("#ds-option-result").empty();

            // remove multi selected			
            $(".ui-selected:first", this).each(function () {
                $(this).siblings().removeClass("ui-selected");
                var refreshVal = $(this).attr("value");
            });

            $(".ui-selected", this).each(function () {
                var index = $("#ds-options li.dropdown").index(this);
                var displayName = $(this).find(".option-name").text();
                result.append(" " + displayName);
                $("#ds-option-value").val(displayName);
                $("#ds-selected-content").empty();
                $("#ds-selected-content").append($(this).clone().children());
                $("#ds-options").removeClass("open").addClass("closed");
                $("#ds-options").slideUp(100);
            });
        }
    });
}

// submit button hover
$('.submit-button').hover(
    function () { // Change the input image's source when we "roll on"
        $(this).css('backgroundPosition', '0 -23px');
    },
    function () { // Change the input image's source back to the default on "roll off"
        $(this).css('backgroundPosition', '');
    }
    );

/* Products page
---------------------------------------------------------*/
$('a.show-all').click(function (e) {
    e.preventDefault();

    var section = $(this).attr("rel");
    var $showHideLink = $("#" + section);

    if ($showHideLink.hasClass('open')) {
        $showHideLink.removeClass('open');
        $('#' + section + '-list').slideUp('fast', function () {
            $('#' + section + '-products').fadeIn('fast');
        });
    } else {
        $showHideLink.addClass('open');
        $('#' + section + '-list').slideDown('fast');
        $('#' + section + '-products').hide();
    }

});

});

function ajaxifyQuickCart() {
    $("#quick-cart").submit(function (e) {
        e.preventDefault();
    });

    $("#quick-cart").find(".quantity").change(function () {
        var $ajaxLoaderImg = $(this).siblings(".ajax-loader");

        var options = {
            success: function () { $ajaxLoaderImg.hide(); }
        };

        $ajaxLoaderImg.show();
        $("#quick-cart").ajaxSubmit(options);
    });
}
