(function($) { var defaults = { delimiter: ",", checkboxRangeKeyBinding: "shiftKey", useArray: false }; $.Field = { version: "0.9.3", setDefaults: function(options) { $.extend(defaults, options) }, setProperty: function(prop, value) { defaults[prop] = value }, getProperty: function(prop) { return defaults[prop] } }; $.fn.fieldArray = function(v) { var t = $type(v); if (t == "undefined") return getValue(this); if (t == "string" || t == "number") { v = v.toString().split(defaults.delimiter); t = "array" } if (t == "array") return setValue(this, v); return this }; $.fn.getValue = function() { return getValue(this).join(defaults.delimiter) }; var getValue = function(jq) { var v = []; jq.each(function(lc) { var t = getType(this); switch (t) { case "checkbox": case "radio": if (this.checked) v.push(this.value); break; case "select": if (this.type == "select-one") { v.push((this.selectedIndex == -1) ? "" : getOptionVal(this[this.selectedIndex])) } else { for (var i = 0; i < this.length; i++) { if (this[i].selected) { v.push(getOptionVal(this[i])) } } } break; case "text": v.push(this.value); break } }); return v }; $.fn.setValue = function(v) { return setValue(this, ((!v && (v !== 0)) ? [""] : v.toString().split(defaults.delimiter))) }; var setValue = function(jq, v) { jq.each(function(lc) { var t = getType(this), x; switch (t) { case "checkbox": case "radio": if (valueExists(v, this.value)) this.checked = true; else this.checked = false; break; case "select": var bSelectOne = (this.type == "select-one"); var bKeepLooking = true; for (var i = 0; i < this.length; i++) { x = getOptionVal(this[i]); bSelectItem = valueExists(v, x); if (bSelectItem) { this[i].selected = true; if (bSelectOne) { bKeepLooking = false; break } } else if (!bSelectOne) this[i].selected = false } if (bSelectOne && bKeepLooking && !!this[0]) { this[0].selected = true } break; case "text": this.value = v.join(defaults.delimiter); break } }); return jq }; $.fn.formHash = function(inHash) { var bGetHash = (arguments.length == 0); var stHash = {}; this.filter("form").each(function() { var els = this.elements, el, n, stProcessed = {}, jel; for (var i = 0, elsMax = els.length; i < elsMax; i++) { el = els[i]; n = el.name; if (!n || stProcessed[n]) continue; var jel = $(el.tagName.toLowerCase() + "[name='" + n + "']", this); if (bGetHash) { stHash[n] = jel[defaults.useArray ? "fieldArray" : "getValue"]() } else if (typeof inHash[n] != "undefined") { jel[defaults.useArray ? "fieldArray" : "setValue"](inHash[n]) } stProcessed[n] = true } }); return (bGetHash) ? stHash : this }; $.fn.autoAdvance = function(callback) { return this.find(":text,:password,textarea").bind("keyup.autoAdvance", function(e) { var $field = $(this), iMaxLength = parseInt($field.attr("maxlength"), 10); if (isNaN(iMaxLength) || ("|9|16|37|38|39|40|".indexOf("|" + e.keyCode + "|") > -1)) return true; if ($field.getValue().length >= $field.attr("maxlength")) { var $next = $field.moveNext().select(); if ($.isFunction(callback)) callback.apply($field, [$next]) } }) }; $.fn.moveNext = function() { return this.moveIndex("next") }; $.fn.movePrev = function() { return this.moveIndex("prev") }; $.fn.moveIndex = function(i) { var aPos = getFieldPosition(this); if (i == "next") i = aPos[0] + 1; else if (i == "prev") i = aPos[0] - 1; if (i < 0) i = aPos[1].length - 1; else if (i >= aPos[1].length) i = 0; return $(aPos[1][i]).trigger("focus") }; $.fn.getTabIndex = function() { return getFieldPosition(this)[0] }; var getFieldPosition = function(jq) { var $field = jq.filter("input, select, textarea").get(0), aTabIndex = [], aPosIndex = []; if (!$field) return [-1, []]; $.each($field.form.elements, function(i, o) { if (o.tagName != "FIELDSET" && !o.disabled) { if (o.tabIndex > 0) { aTabIndex.push(o) } else { aPosIndex.push(o) } } }); aTabIndex.sort(function(a, b) { return a.tabIndex - b.tabIndex }); aTabIndex = $.merge(aTabIndex, aPosIndex); for (var i = 0; i < aTabIndex.length; i++) { if (aTabIndex[i] == $field) return [i, aTabIndex] } return [-1, aTabIndex] }; $.fn.limitSelection = function(limit, options) { var opt = jQuery.extend((limit && limit.constructor == Object ? limit : { limit: limit, onsuccess: function(limit) { return true }, onfailure: function(limit) { alert("You can only select a maximum a of " + limit + " items."); return false } }), options); var self = this; var getCount = function(el) { if (el.type == "select-multiple") return $("option:selected", self).length; else if (el.type == "checkbox") return self.filter(":checked").length; return 0 }; var undoSelect = function() { setValue(self, getValue(self).slice(0, opt.limit)); return opt.onfailure.apply(self, [opt.limit]) }; return this.bind((!!self[0] && self[0].type == "select-multiple") ? "change.limitSelection" : "click.limitSelection", function() { if (getCount(this) > opt.limit) { return (this.type == "select-multiple") ? undoSelect() : opt.onfailure.apply(self, [opt.limit]) } opt.onsuccess.apply(self, [opt.limit]); return true }) }; $.fn.createCheckboxRange = function(callback) { var opt = jQuery.extend((callback && callback.constructor == Object ? callback : { bind: defaults.checkboxRangeKeyBinding, click: callback }), callback); var iLastSelection = 0, self = this, bCallback = $.isFunction(opt.click); if (bCallback) this.each(function() { opt.click.apply(this, [$.event.fix({ type: null }), $(this).is(":checked")]) }); return this.each(function() { if (this.type != "checkbox") return false; var el = this; var updateLastCheckbox = function(e) { iLastSelection = self.index(e.target) }; var checkboxClicked = function(e) { var bSetChecked = this.checked, current = self.index(e.target), low = Math.min(iLastSelection, current), high = Math.max(iLastSelection + 1, current); if (bCallback) $(this).each(function() { opt.click.apply(this, [e, bSetChecked]) }); if (!e[opt.bind]) return; for (var i = low; i < high; i++) { var item = self.eq(i).attr("checked", bSetChecked ? "checked" : "").trigger("change"); if (bCallback) opt.click.apply(item[0], [e, bSetChecked]) } return true }; $(this).unbind("click.createCheckboxRange").bind("click.createCheckboxRange", checkboxClicked).bind("click.createCheckboxRange", updateLastCheckbox); return true }) }; var getType = function(el) { var t = el.type; switch (t) { case "select": case "select-one": case "select-multiple": t = "select"; break; case "text": case "hidden": case "textarea": case "password": case "button": case "submit": case "submit": t = "text"; break; case "checkbox": case "radio": t = t; break } return t }; var getOptionVal = function(el) { return jQuery.browser.msie && !(el.attributes['value'].specified) ? el.text : el.value }; var valueExists = function(a, v) { return ($.inArray(v, a) > -1) }; var $type = function(o) { var t = (typeof o).toLowerCase(); if (t == "object") { if (o instanceof Array) t = "array"; else if (o instanceof Date) t = "date" } return t }; var $isType = function(o, v) { return ($type(o) == String(v).toLowerCase()) } })(jQuery);

(function($) {
    //
    // plugin definition
    //
    $.fn.suggest = function(options) {
        // build main options before element iteration
        var opts = $.extend({}, $.fn.suggest.defaults, options);

        // iterate and reformat each matched element
        return this.filter("input").each(function() {
            $this = $(this);
            // build element specific options
            var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

            var input = $this;
            var suggestions = $.fn.suggest.select($this, o.selector);
            $("a", suggestions).attr("tabindex", -2);

            // Attach the behavior to this item
            $this.focus(function() {
                $(suggestions).fadeIn();
            });
            $this.blur(function() {
                $(suggestions).fadeOut();
            });

            $(".suggestion", suggestions)
                .click(function() {
                    var t = $(".suggestionvalue", $(this)).attr("innerText");
                    var ts = $this.attr("tabindex");
                    $($this).val(t);
                    $($this).moveNext();
                });
        });
    };
    //
    // define and expose our format function
    //
    $.fn.suggest.select = function(element, selector) {
        return element.parent().parent().find(selector);
    };
    //
    // plugin defaults
    //
    $.fn.suggest.defaults = {
        selector: ".suggestions"
    };
    //
    // end of closure
    //
})(jQuery);


(function($) {

    /*
    * Auto-growing textareas; technique ripped from Facebook
    */
    $.fn.autogrow = function(options) {

        this.filter('textarea').each(function() {

            var $this = $(this),
                minHeight = $this.height(),
                lineHeight = $this.css('lineHeight');

            var shadow = $('<div></div>').css({
                position: 'absolute',
                top: -10000,
                left: -10000,
                width: $(this).width() - parseInt($this.css('paddingLeft')) - parseInt($this.css('paddingRight')),
                fontSize: $this.css('fontSize'),
                fontFamily: $this.css('fontFamily'),
                lineHeight: $this.css('lineHeight'),
                resize: 'none'
            }).appendTo(document.body);

            var update = function() {

                var times = function(string, number) {
                    for (var i = 0, r = ''; i < number; i++) r += string;
                    return r;
                };

                var val = this.value.replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/&/g, '&amp;')
                                    .replace(/\n$/, '<br/>&nbsp;')
                                    .replace(/\n/g, '<br/>')
                                    .replace(/ {2,}/g, function(space) { return times('&nbsp;', space.length - 1) + ' ' });

                shadow.html(val);
                $(this).css('height', Math.max(shadow.height() + 20, minHeight));

            }

            $(this).change(update).keyup(update).keydown(update);

            update.apply(this);

        });

        return this;

    }

})(jQuery);


(function($) {
    var cache = [];
    // Arguments are image paths relative to the current page.
    $.preLoadImages = function() {
        var args_len = arguments.length;
        for (var i = args_len; i--; ) {
            var cacheImage = document.createElement('img');
            cacheImage.src = arguments[i];
            cache.push(cacheImage);
        }
    }
})(jQuery)

$(window).bind('load', function() {
    $.preLoadImages('/Lighthouse/Content/Css/lighthouse/footer_menu_contact_us.png',
        '/Lighthouse/Content/Css/lighthouse/footer_menu_legal_privacy.png',
        '/Lighthouse/Content/Css/lighthouse/footer_menu_site_map.png',
        '/Lighthouse/Content/Css/lighthouse/footer_menu_contact_us_hover.png',
        '/Lighthouse/Content/Css/lighthouse/footer_menu_legal_privacy_hover.png',
        '/Lighthouse/Content/Css/lighthouse/footer_menu_site_map_hover.png');
});

$(document).ready(function() {
    Date.format = 'mm/dd/yyyy';
    $('textarea').autogrow();
    $('.hover').mouseover(function() { $(this).addClass("onhover"); });
    $('.hover').mouseout(function() { $(this).removeClass("onhover"); });
    $(".text-box,.check-box,.list-box")
            .focus(function() {
                $(this).parent().parent().addClass('form-focus');
            })
            .blur(function() {
                $(this).parent().parent().removeClass('form-focus');
            });
})
