/**
 * Parts Direct Configuration
 * 
 * @example PartsDirect["localPath"] + PartsDirect["getModelURL"]
 */
var PartsDirect = {
    animateComponents: false,
    isCommercial: false,
    localPath: "/partsdirect/",
    getModelURL: "part-model/",
    getPartURL: "part-number/"
};

/**
 * this function adds all the events related with the max chars on a textarea
 * created by : Sebastian Romero
 */

function initMaxOnTextArea() {
    var textarea = $("textarea");
    var textareaChanged = function(event) {
        if (this.className.indexOf("max_") != -1) {
            var string_message = "Characters left";
            var max_chars = parseInt(this.className.split("max_")[1]);
            var chars_left = Math.abs(max_chars - ($(this).val().length));
            if (chars_left > 0) {} else $(this).val($(this).val().substr(0, $(this).val().length - 1));
            $($(this).parent().find("small").get(0)).text(
            chars_left + " " + string_message);
        }
    }
    textarea.each(function() {
        if ($(this).parent().find("small").length > 0) $(this).addClass("max_" + parseInt($($(this).parent().find("small").get(0)).text()));
        $(this).keydown(textareaChanged).keyup(textareaChanged);
        $(this).keydown();
    });

}
/**
 * max Width and Min adjustments for Internet Explorer 6
 * created by : Sebastian Romero
 */

function minMaxinternetExplorer() {
    var num_minWidth = 990;
    var num_maxWidth = 1500;
    if (document.all && !window.XMLHttpRequest) {

        if ($("#HeaderTabs").length > 0) {
            if ($("#HeaderTabs").width() <= num_minWidth) $("#page").css({
                "width": num_minWidth + "px"
            });
            else if ($("#HeaderTabs").width() >= num_maxWidth + "px") $("#page").css({
                "width": num_maxWidth + "px"
            });
            else $("#page").css({
                "width": "100%"
            });
        }
        else $("#page").css({
            "width": "100%"
        });
    }
};

/**
 * Inits the login on the Page
 */

function initLogin() {
    $("#a_login").click(

    function(event) {
        var login = '<iframe class="login_iframe" src="login.html" border="0"></iframe>'
        $(document.body).popup({
            isModal: true,
            html: login,
            fixCenter: true,
            width: 350
        });
    });
}

function liquidCarousel() {
    var liquid = function() {
        var carousels = $("div.wrapper_accordion");
        var num_containerWidth, num_padding, num_itemsCount, num_itemsToDisplay, num_eachMargin;
        carousels.each(function(index, element) {
            num_containerWidth = $(element).parent().parent().width();
            num_itemsToDisplay = Math.floor(num_containerWidth / parseInt($(".cont_item", element).css("width")));
            num_padding = (num_containerWidth - (num_itemsToDisplay * parseInt($(".cont_item", element).css("width")))) / 2;
            $(".cont_item", element).css("padding", "0px " + num_padding + "px");
        });
    };
    void liquid();
    $(window).resize(liquid);
}

/**
 * Andres Garcia: Flows the items in the carousel as the page resizes
 * @param {Number} The index of the accordion container
 * @return Void
 */

function resizeCarousel(index, element) {

    //The width visible area of a visible item
    var num_containerWidth = $("div.accordion div.ui-accordion-content:visible").width();

    //The width of each item
    var num_itemWidth = 187;

    //The number of elements in the accordion
    var num_itemsCount = $(element).find("div.cont_item").length;

    //The number of elements that actually fits in the space
    var num_itemsToDisplay = Math.floor(num_containerWidth / num_itemWidth);

    if (num_itemsToDisplay > num_itemsCount) num_itemsToDisplay = num_itemsCount;

    var num_finalMargin = num_containerWidth - (num_itemWidth * num_itemsToDisplay);

    var num_marginsCount = num_itemsToDisplay * 2;
    var num_eachMargin = num_finalMargin / num_marginsCount;

    //Change paddings just if are positive number
    if (num_eachMargin > 0) $(element).find("div.cont_item").css("padding", "0px " + num_eachMargin + "px");

    //Finally, Remove lines on last items
    setupLastElementInAccordion($(element), num_itemsToDisplay);
}

/**
 * Andres Garcia: Applies a correct behavior for the rollover in the search results
 * @return Void
 */

function applyHoverList() {

    var str_hoverColor = "#f3f3f3";

    var createHoverList = function(trClassName, siblingType) {
        $("table.table_270 tbody tr" + trClassName).hover(

        function(event) {
            $(this).css("background-color", str_hoverColor);
            var element = $(this)[siblingType]();


            try {
                while (element.get(0).className.indexOf("alert") != -1) {
                    element.css("background-color", str_hoverColor);
                    element = element[siblingType]();
                }
            } catch (e) {}

            if (siblingType === "prev") element.css("background-color", str_hoverColor);

        }, function(event) {
            $(this).css("background-color", "");
            var element = $(this)[siblingType]();


            try {
                while (element.get(0).className.indexOf("alert") != -1) {
                    element.css("background-color", "");
                    element = element[siblingType]();
                    //$(this)[siblingType]().css("background-color", "");
                }
            } catch (e) {}

            if (siblingType === "prev") element.css("background-color", "");

        });
    }




    createHoverList("", "next");
    createHoverList(".alert", "prev");
}

/**
 * Gets Query String 
 * @param param String 
 * @return
 */

function getQueryString(param) {
    return window.location.href.split(param + "=")[window.location.href.split(param + "=").length - 1].replace(/&.+$/, "")
}
/** 
 * 
 * http://localhost:8080/partsdirect/?userType=loggedUser&siteType=commercial
 * http://localhost:8080/partsdirect/?userType=loggedUser&siteType=consumer
 * http://localhost:8080/partsdirect/?userType=loggedOutUser&siteType=consumer
 * http://localhost:8080/partsdirect/?userType=superAdmin&siteType=commercial
 * http://localhost:8080/partsdirect/?userType=admin&siteType=parts
 * register!setup.pd
 */
/*function headerStates (){
 var str_userType = (getQueryString("userType").indexOf("http") == -1)?getQueryString("userType"):"loggedUser";
 var str_siteType = (getQueryString("siteType").indexOf("http") == -1)?getQueryString("siteType"):"consumer";
 $("." + str_userType + "." + str_siteType).removeClass("hidden");	
 }*/

function displayActionErrorsLiquid() {
    if (typeof(ErrorHandler) != "undefined") {
        ErrorHandler.displayActionErrors = function() {
            ErrorHandler.removeActionErrors();
            MessageHandler.page.removeMessages();
            var str_errorDiv = '<div id="errorWrapper" class="error_message"><div id="actionErrorContainer" class="moduleActionError alert">' + '<div class="actionErrors"></div>' + '</div></div>';
            var errorForm_cnt = $('.editSubsForm:visible fieldset.ERROR');

            if ($(errorForm_cnt).length > 0) {
                $('.requiredField_cnt', $(errorForm_cnt).parents('.editSubsForm:visible')).after(str_errorDiv);
            }
            else {
                if ($('#subContent').length > 0) {
                    $('#subContent').prepend(str_errorDiv);
                } else {
                    if ($(".errorWrapper").size() === 0) {
                        if ($('#content h2').length > 0) {
                            if ($('#storeAvailabilityForm').length == 0) {
                                $('#content h2:first').after(str_errorDiv);
                            }
                            else $('#storeAvailabilityForm').prepend(str_errorDiv);
                        } else {
                            if ($('#overlayLogin').length > 0) {
                                $('.loginPopupTitle').after(str_errorDiv);
                                $('#errorWrapper').css("margin-left", "10px");
                            }
                        }
                    }
                }

                if ((($(".error_message").length > 0)) && ($("body.checkoutPayment").length > 0)) {
                    $(window).scrollTop(0);
                }
                if ((($(".errorMessage").length > 0)) && ($("div.returnForm").length > 0)) {
                    var top = $('.errorMessage').offset().top-20;
                	$(window).scrollTop(top);
                }
                
            }
            for (var i = 0; i < ErrorHandler.actionErrors.length; i++) {
                $('div.actionErrors').append('<p>' + ErrorHandler.actionErrors[i] + '</p>');
            }
            ErrorHandler.actionErrors = [];
        };
        ErrorHandler.displayFieldErrors = function() {
            ErrorHandler.removeFieldErrors();
            var i = 0;
            var zipCodeId = '_zipCode';
            var errorFlagRightStyle = 'errorFlagRight';
            // First create the flag for each fieldset that contains a field error
            for (i = 0; i < ErrorHandler.fieldErrors.length; i++) {
                if (!ErrorHandler.fieldErrors[i].fieldset.hasClass('ERROR')) {
                    if (ErrorHandler.fieldErrors[i].fieldset.hasClass('errorFlagOnLeft')) {
                        ErrorHandler.fieldErrors[i].fieldset.addClass('ERROR').prepend('<div class="errorFlagLeft errorFlag png_fix"><p></p></div>');
                    } else {
                        if (ErrorHandler.fieldErrors[i].field[0]) {

                            if (zipCodeId == ErrorHandler.fieldErrors[i].field[0].id) errorFlagRightStyle = 'errorFlagRightZipCode';
                            //Prevent blank messages
                            if (ErrorHandler.fieldErrors[i].errorMessage.split(" ").join("") != "") ErrorHandler.fieldErrors[i].fieldset.addClass('ERROR').append('<div class=" ' + errorFlagRightStyle + ' errorFlag png_fix"><p></p></div>');
                            if (ErrorHandler.fieldErrors[i].field[0].tagName.toLowerCase().indexOf("select") != -1) {
                                if ($("#fldOtherIndustry", $(ErrorHandler.fieldErrors[i].field[0]).parent()).length == 0) ErrorHandler.fieldErrors[i].fieldset.find("." + errorFlagRightStyle).css("right", "-165px");
                                else ErrorHandler.fieldErrors[i].fieldset.find("." + errorFlagRightStyle).css("right", "-140px");
                                $(ErrorHandler.fieldErrors[i].field[0]).change(function(event) {
                                    var field = $(this).parent().find("." + errorFlagRightStyle);
                                    var shapeIE6 = $(this).parent().find("shape");
                                    if (this.selectedIndex == 0) {
                                        if (field.length > 0) {
                                            field.css("display", "block");
                                            $(this).addClass("error");
                                        }
                                    } else {
                                        field.remove();
                                        if (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) {
                                            shapeIE6.remove();
                                        }

                                        $(this).removeClass("error");
                                    }
                                });
                            }


                        }
                    }
                }
            }

            // Populate each flag with its messages, highlight the field
            for (i = 0; i < ErrorHandler.fieldErrors.length; i++) {
                // Determine if the flag is on the right or left (default right)
                var errorFlagClass = (ErrorHandler.fieldErrors[i].fieldset.hasClass('errorFlagOnLeft')) ? 'errorFlagLeft' : 'errorFlagRight';
                if (errorFlagRightStyle == 'errorFlagRightZipCode') {
                    errorFlagClass = errorFlagRightStyle;
                }


                // Add errors messages to the flag
                //if(ErrorHandler.fieldErrors[i].errorMessage != "")
                // Prevent blank messages
                if (ErrorHandler.fieldErrors[i].errorMessage.split(" ").join("") != "") ErrorHandler.fieldErrors[i].fieldset.find('div.' + errorFlagClass + ' p').append('<span class="errorMessage">' + ErrorHandler.fieldErrors[i].errorMessage + '</span>');
                // Highlight the field
                if (ErrorHandler.fieldErrors[i].errorMessage.split(" ").join("") != "") ErrorHandler.fieldErrors[i].field.addClass('error');

                // Re-position the flag because the height has changed
                var flagHeight = ErrorHandler.fieldErrors[i].fieldset.find('div.' + errorFlagClass).height() + 10;
                if ((ErrorHandler.fieldErrors[i].fieldset.height() != 0)) {
                    ErrorHandler.fieldErrors[i].fieldset.find('div.' + errorFlagClass).css('bottom', ErrorHandler.fieldErrors[i].fieldset.height() / 2 - flagHeight / 2);
                } else {
                    if (!isNaN(ErrorHandler.fieldErrors[i].fieldset.css("height").replace("px", ""))) ErrorHandler.fieldErrors[i].fieldset.find('div.' + errorFlagClass).css('bottom', Number(ErrorHandler.fieldErrors[i].fieldset.css("height").replace("px", "")) / 2 - flagHeight / 2);
                }
                ErrorHandler.posFieldError(ErrorHandler.fieldErrors[i].fieldset);
            }
            //ErrorHandler.overlapCheck();
            // Clear the field errors array for next submission
            ErrorHandler.fieldErrors = [];
        };
    }
}

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null) {
        return "";
    }
    else {
        return results[1];
    }
}

function errorFieldPosition() {
    if (typeof(ErrorHandler) != "undefined") {
        ErrorHandler.posFieldError = function(fieldSet) {
            if (fieldSet.find(".errorFlag").hasClass("errorFlagRight") || fieldSet.find(".errorFlag").hasClass("errorFlagRightZipCode") || fieldSet.find(".errorFlag").hasClass("errorFlagLeft")) {
                var left = 0;
                fieldSet.find("input, select, textarea, a").each(function(index, item) {//adding <a> tag to the list so that the error messsage is properly aligned-- PD-8228
                    if (!$(item).prev().hasClass("line_break")) left += $(item).width() + 20;
                    else {
                        if (left == 0) left = $(item).width() + 20;
                    }
                    if (($(item).parent().next().css("float") === "left") && ($(item).parent().css("float") === "left")) {
                        left = $(item).parent().width() + $(item).width() + 20;

                    }
                    if ($(item).parents(".narrowSuggestedModel,.modelSelectSearch").size() > 0) left += 85;

                    if ($(item).parents(".end_field").size() > 0) {
                        if ($(item).parents(".end_field:first").width() !== 0) left = $(item).parents(".end_field:first").width();
                        else left = parseInt($(item).parents(".end_field").css("width"));
                    }

                    if ($(item).parents(".end_fieldComments").size() > 0) {
                        if ($(item).parents(".end_fieldComments:first").width() !== 0) left = $(item).parents(".end_fieldComments:first").width();
                        else left = parseInt($(item).parents(".end_fieldComments").css("width"));
                    }

                    if (($(item).parents(".stateFld").size() > 0)) {
                        if ((navigator.userAgent.toLowerCase().indexOf('msie') != -1) || (navigator.userAgent.toLowerCase().indexOf('safari') != -1)) {
                            left += 129;
                        }
                    }

                    if (($(item).parents(".passReg").size() > 0) && (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1)) {
                        left = 520;
                    }

                    if (($(item).parents(".orderConf").size() > 0)) {
                        left = -232;
                    }

                    if (($(item).parents(".couponFieldset").size() > 0)) {
                        left = 400;
                    }

                    if (($(item).parents(".verification_popup").size() > 0)) {
                        $(".verification_popup").find("div.errorFlagRight").css("display", "none");
                    }

                    if ($(item).parents(".largeFlagFix").size() > 0) {
                        $(".largeFlagFix").find("p").css("width", "220px");
                        $(".largeFlagFix").find("span").css("width", "220px");
                        $(".largeFlagFix").find(".errorFlag").css("top", "-15px");
                        $(".largeFlagFix").find(".errorFlag").css("height", "45px");
                        left = 300;
                    }

                    if ($(item).parents(".largeFlagFixPass").size() > 0) {
                        if ($(".largeFlagFixPass span").text().length > 100) {
                            $(".largeFlagFixPass").find("p").css("width", "250px");
                            $(".largeFlagFixPass").find("span").css("width", "250px");
                            $(".largeFlagFixPass").find(".errorFlag").css("top", "-30px");
                            $(".largeFlagFixPass").find(".errorFlag").css("height", "59px");
                        }
                    }

                    ($("form.standard fieldset.flagUpdate div.errorFlag").length > 0)
                });

                if (fieldSet.hasClass("errorFlagOnLeft")) {
                    //fieldSet.find(".errorFlag").css("left", "-245px");
                    fieldSet.find(".errorFlag").css("bottom", fieldSet.height() / 2 + "px");
                } else if (fieldSet.hasClass("errorUploadFile")) {
                    // special case for input Type File in uploadForm.jsp
                    fieldSet.find(".errorFlag").css({
                        "left": $(".errorFlag").parent().width() + "px"
                    });
                } else {
                    fieldSet.find(".errorFlag").css("right", "0px");
                    fieldSet.find(".errorFlag").css("left", left + "px");
                }

                /*
                 * 
                 */
                if (document.all && !window.XMLHttpRequest) {
                    fieldSet.find(".errorFlag:last").parent().next().css("display", "none");
                    fieldSet.find(".errorFlag:last").parent().next().css("display", "block");
                }

                //for purchaser edit in commercial account.
                if ($(".purchaserForm").length > 0) {
                    fieldSet.find(".errorFlag").css("left", "520px");
                }

            }
        };
    }
}


//Andres Garcia: This function removes the right line on the last item [Jira 3190]

function setupLastElementInAccordion(container, latestItem) {
    $(container).find("div.cont_item").each(

    function(index, element) {
        $(element).css("background-repeat", "no-repeat");
        $(element).addClass("lastAccordeonBorder");
        if (index == latestItem - 1) $(element).css("background-image", "none");
    });
}

function displayFeaturesPopUp() {
    if ($("#new_feutures").size() > 0) {
        if (document.cookie.indexOf("newfeatures") == -1) $(document.body).popup({
            fixCenter: "true",
            isModal: true,
            isNewFeature: true
        });
    }
}



$(window).resize(function() {
    minMaxinternetExplorer();

    $("div.accordion div.ui-accordion-content div.wrapper_accordion").each(resizeCarousel);
});

/* ROLL OVER LINK HEADER */

function hOver() {
    var btn_over = $(this).attr("id");
    var btn_overPos = $(this).offset();

    // creates message container
    if ($(".cntr_message").length == 0) {
        $("body").append("<div id='box_message'><div class='cntr_message'></div></div>");
    };

    // applies copy
    copy = "<p>" + $(this).attr("name") + "</p>";

    if ($(this).attr("class") == "topRight") {
        $("#box_message").addClass("box_messageTopRight");
        $("#box_message").css({
            "top": parseInt(btn_overPos.top) + 54,
            "left": parseInt(btn_overPos.left) - 120
        });
    }

    if ($(this).hasClass("estara")) {
        $("#box_message").addClass("box_messageTop");
        $("#box_message").css({
            "top": parseInt(btn_overPos.top) + 59,
            "left": parseInt(btn_overPos.left) - 2
        });
    }

    $(".cntr_message").html(copy);
    $("#box_message").show(80);

};

function hOut() {
    $("#box_message").hide(200);
    $("#box_message").removeClass();
};

function preparePrint() {
    $('#diagramBox').height($('#diagram').height());
    $('#diagramBox').width($('#diagram').width());
};

/* /ROLL OVER LINK HEADER */

/* Method to open PopUp Windows*/
var flagPopup = 0;

function openPopup(url, width, height, scrollbars) {

    flagPopup++;
    if (flagPopup <= 1) {
        window.open(url, 'PDpopUp', 'width=' + width + ',height=' + height + ',screenX=' + ((screen.width - width) / 2) + ',screenY=' + ((screen.height - height) / 2) + ',top=' + ((screen.height - height) / 2) + ',left=' + ((screen.width - width) / 2) + 'menubar=no, toolbar=no, status=no, location=no, directories=no, scrollbars=' + scrollbars + ', resizable=no');
    }
    flagPopup--;
}



var triggerPar;

function contextualHelpSubs(trigger, popupCnt, partKey, topOffset, leftOffset) {
    var posIndex;

    $(trigger).hover(

    function() {
        $('.freeShippingPopUp').hide();
        posIndex = $(trigger).index(this);
        triggerPar = this;
        $(triggerPar).addClass('popUpCH');
        showTip(triggerPar, popupCnt, topOffset, leftOffset);
    }, function() {
        $(triggerPar).removeClass('popUpCH');
        closeTip(triggerPar, popupCnt);
    });

    $(popupCnt).hover(

    function() {
        $(triggerPar).addClass('popUpCH');
    }, function() {
        $(triggerPar).removeClass('popUpCH');
        closeTip(triggerPar, popupCnt);
    });

    $(popupCnt + ' input').click(function() {
        $(triggerPar).removeClass('popUpCH');
        closeTip("", popupCnt);

        var newCopy = $(this).val();
        
        setTimeout(function() {
            var editCnt = $('.editSetTip' + partKey).eq(posIndex);
            if (newCopy == "subscription_none") {
                $(trigger).eq(posIndex).show();
                $(editCnt).hide();
            } else {
                $(trigger).eq(posIndex).hide();
                $(editCnt).show();
                var updatedNewCopy = newCopy.split(/\s/);
                updatedNewCopy[0] = updatedNewCopy[0].charAt(0).toUpperCase()+updatedNewCopy[0].slice(1);
                newCopy = updatedNewCopy[1].concat(" ",updatedNewCopy[2]);
                $('span.time' + partKey, editCnt).html(updatedNewCopy[0]+"<strong> "+newCopy+"</strong>");
            }
        }, 1000);
    });

    $('a.editSubs' + partKey).click(function() {
        var newTrigger = $(this).parents("div.editSetTip" + partKey);
        $(newTrigger).addClass('popUpCH');
        showTip(newTrigger, popupCnt, topOffset, leftOffset);
        posIndex = $('.editSetTip' + partKey).index(newTrigger);

        var selectedVal = $('span.time' + partKey, newTrigger).html();
        
        selectedVal = selectedVal.replace(/(<.*?>)/ig,"").toLowerCase();//to remove the presence of any html tag present and changing to lowercase
        if($.browser.msie){}
        else{ selectedVal = selectedVal.replace(/\s/,"");//to remove the first extra'\s'
        }
        
        $('input[value=' + selectedVal + ']', popupCnt).attr("checked", "checked");

        $(this).mouseout(function() {
            $(newTrigger).removeClass('popUpCH');
            closeTip(newTrigger, popupCnt);
        });

        $(popupCnt).mouseover(function() {
            $(newTrigger).addClass('popUpCH');
        });
    });

}

function showTip(trigger, popupCnt, topOffset, leftOffset) {
    if ($(trigger).hasClass('popUpCH')) {
        $(popupCnt).css({
            'top': $(trigger).offset().top - topOffset,
            'left': $(trigger).offset().left - leftOffset
        });
        $(popupCnt).show();
        $('p.subscriptAutom a span', trigger).removeClass('subscriptArrowL');
        $('p.subscriptAutom a span', trigger).addClass('subscriptArrowD');
    }
}

function closeTip(trigger, popupCnt) {
    setTimeout(function() {
        if (!($(trigger).hasClass('popUpCH'))) {
            $(popupCnt).hide();
        }

        $('p.subscriptAutom a span', trigger).removeClass('subscriptArrowD');
        $('p.subscriptAutom a span', trigger).addClass('subscriptArrowL');

    }, 1000);
}

function updateBillingAddressEqualToShippingMsg(idx) {
    if ($('#fldBillingAddressEqualsToShipping' + idx).is(':checked')) {
        $('#billingAddr_AddressLine1_' + idx)[0].innerHTML = $('#fldAddressLine' + idx)[0].value;
        $('#billingAddr_Sity_State_Zip_' + idx)[0].innerHTML =
        $('#fldCity' + idx)[0].value + ", " + $('#fldState' + idx)[0].value + " " + $('#fldZipCode' + idx)[0].value;
        $('#fldBillingInfoFN' + idx).val($('#fldShippingInfoFN' + idx).val());
        $('#fldBillingInfoLN' + idx).val($('#fldShippingInfoLN' + idx).val());
        $('#fldBillingInfoAddressLine1' + idx).val($('#fldAddressLine' + idx).val());
        $('#fldBillingInfoAddressLine3' + idx).val($('#fldAddressApt' + idx).val());
        $('#fldBillingInfoCity' + idx).val($('#fldCity' + idx).val());
        $('#fldBillingInfoState' + idx).val($('#fldState' + idx).val());
        $('#fldBillingInfoZip' + idx).val($('#fldZipCode' + idx).val());
        $('#fldBillingInfoZipExt' + idx).val($('#fldZipCodeExt' + idx).val());
    }
}

function processClickOnSubscriptionBillingAddressFormCheckbox(checkbox) {
    var parent = checkbox.parents("div.subscribedItemCnt");

    if (checkbox.is(':checked')) {
        $(".billingAddressForm", parent).find('input, select, textarea').each(function() {
            if ($(this).hasClass('required')) {
                $(this).removeClass('required').addClass('requiredOff');
            }
            //$(this).attr('disabled', true);
        });
        $(".billingAddressForm", parent).fadeOut('slow');
        $(".billingAddressEqualToShippingMsg", parent).show();
        updateBillingAddressEqualToShippingMsg(checkbox.attr("index"));
    } else {
        $(".billingAddressForm", parent).fadeIn('slow');
        $(".billingAddressEqualToShippingMsg", parent).hide();
        $(".billingAddressForm", parent).find('input, select, textarea').each(function() {
            if ($(this).hasClass('requiredOff')) {
                $(this).removeClass('requiredOff').addClass('required');
            }
            $(this).attr('disabled', false);
        });
    }
}

function truncate() {
    /**
     * text truncate/trim
     * searches for class "truncate_text" and "#_chars" where # is the max number of characters allowed
     */


    $(".truncate_text").each(function(index) {
        numchars = 30;
        object = jQuery(this);
        arr_classes = object.attr("class").split(" ");
        searcher: for (var i = 0; i < arr_classes.length; i++) {
            if (arr_classes[i].indexOf("_chars") != -1) {
                numchars = arr_classes[i].split("_chars")[0].split(" ").join("");
                break searcher;
            }
        }

        object.text(object.text().replace(/^\s+|\s+$/g, ''));
        object.attr('title', object.text());
        if (object.text().length > numchars) {
            object.text(object.text().substring(0, numchars) + "...");
        }
    });
}

function activateButtons() {
    /**
     * Activates buttons depending on the content of the field.
     */

    $('.activeField input').keyup(function() {
        if ($(this).val() == '') {
            $('.activeField .button').removeClass("btn_orange");
            $('.activeField .button').addClass("button_grey");
            $('.activeField .button').css("cursor", "default");
        } else {
            $('.activeField .button').removeClass("button_grey");
            $('.activeField .button').addClass("btn_orange");
            $('.activeField .button').css("cursor", "pointer");
        }
    });
}

function setPlaceholderField() {
    $('input.placeholder').click(function() {
        if ($(this).val() == $(this).attr('name')) {
            $(this).val('');
        }
    });

    $('input.placeholder').blur(function() {
        if ($(this).val() == '') $(this).val($(this).attr('name'));
    });
}

String.prototype.startsWith = function(str) {
    return (this.match("^" + str) == str);
}

$.widget("custom.partsAutocomplete", $.ui.autocomplete, {
    _response: function(content) {
        var self = this;
        var cleanedContent = new Array();

        $.each(content, function(index, item) {
            if (item.toLowerCase().startsWith(self.element.val().toLowerCase())) {
                cleanedContent.push(item);
            }
        });

        if (cleanedContent.length) {
            cleanedContent = this._normalize(cleanedContent);
            this._suggest(cleanedContent);
            this._trigger("open");
        } else {
            cleanedContent = this._normalize([{
                label: "not found"
            }]);
            this._suggest(cleanedContent);
            this._trigger("open");
        }
        this.element.removeClass("ui-autocomplete-loading");
    },

    _renderMenu: function(ul, items) {
        var self = this;
        if (items.length >= 1 && (items[0].label != "not found")) {
            $.each(items, function(index, item) {
                self._renderItem(ul, item);
            });
        } else {
            self._renderItem(ul, {
                label: this.options.emptyMessage
            });
        }
    }
});

function formSetAction(selection, section, dataMap) {
    if (typeof selection != "undefined") {
        $('#filter' + section).attr('disabled', 'disabled');
        $('#filterForm').attr('action', '/partsdirect/' + section + '/' + dataMap[selection.toUpperCase()]);
        $('#filterForm').submit();
    }

}


/**
* Method that shows tool tip texts
*/

function showToolTipText()
{
	var	scope,
		toolTipContainer = $(document).find('div#toolTip'),
		classes, topPos, leftPos,
		toolTimer = null;
				
	$(".toolTip").hover(
		function () {
			clearTimeout(toolTimer);
			scope = $(this);
			classes = $(this).attr('class').split(' '),
			fadeTimer = 500;
				
			for(var i = 0; i < classes.length; i++) {
				if(classes[i].match('topPos_')) { topPos = classes[i].replace('topPos_',''); }
				if(classes[i].match('leftPos_')) { leftPos = classes[i].replace('leftPos_',''); }
			}
			
			$(toolTipContainer).html('');
			$(toolTipContainer).html($(scope).parent().parent().find('.toolTipContent').html());
			$(toolTipContainer).css({'top' : ($(scope).offset().top + parseInt(topPos)) + 'px', 'left' : ($(scope).offset().left + parseInt(leftPos)) + 'px'});
			$(toolTipContainer).fadeIn(fadeTimer);
		}, 
		function () {
			toolTimer = setTimeout(function(){
				$(toolTipContainer).fadeOut(fadeTimer);				
			}, 100);			
		}
	);
		
	$(toolTipContainer).hover(
		function(){				
			clearTimeout(toolTimer);
		},
		function(){
			toolTimer = setTimeout(function(){
				$(toolTipContainer).fadeOut(fadeTimer);	
			}, 100);
		}
	);
}

/**
* Method that fixes expands and collapses the information details on part search row
*/

function showPartDetails()
{
	$('.showMoreDetails').click(function(){
		$(this).hide();
		$(this).parent().find('p.hideMoreDetails').show();
		$(this).parents('tr').find('.detailsContent').show();
		$('a.btn_orange').css('vertical-align', 'top');
		$('a.btn_orange').css('vertical-align', 'bottom');
		$('div.quantity').css('vertical-align', 'bottom');
	});
	
	$('.hideMoreDetails').click(function(){
		$(this).hide();
		$(this).parent().find('p.showMoreDetails').show();
		$(this).parents('tr').find('.detailsContent').hide();
		$(this).parents('tr').find('.viewFullDetails').hide();
		$('a.btn_orange').css('vertical-align', 'top');
		$('a.btn_orange').css('vertical-align', 'bottom');
		$('div.quantity').css('vertical-align', 'top');
	});
}

/**
* Method that shows details popup
*/

function showDetailsPopup()
{

	var scope,
		popUpContainer = $(document).find('div#detailsModal div#detailsModelCont');
	
	$('.getDetailsPopup').click(function(){
		scope = $(this);
		
		$(popUpContainer).html('');
		$(popUpContainer).html("<div id='closeBtn'>Close</div>" + $(scope).parent().find('.detailsPopUpContent').html());
		$('div#detailsModal').css({'top' : ($(scope).offset().top) + 'px', 'left' : ($(scope).offset().left - 9) + 'px'});
		$('div#detailsModal').show();
	
		$('div#closeBtn').click(function(){
			$(this).parent().parent().hide();
		});
	});
	
}


/**
* Method that get the Ajax params of a link
*/

function getAjaxParams()
{
	$('.ajaxCall').click(function(event){
		event.preventDefault();
		getDataAjax($(this).attr('href'), $(this).parents('tr').find('.detailsContent'));
	});
}

/**
* Method that makes an ajax call and populates a field.
*/

function getDataAjax(newUrl, container)
{

	var loader = $('.ajaxLoader', container),
		errorMessage = $('.ajaxErrorMessage', container);
	
	$(loader).show();
	$(errorMessage).hide();

	$.ajax({
		type: "POST",
		url: newUrl,
		success: function(response) {		
		
			var responseString = response;
			
			if ((responseString.indexOf("Error") != -1) || (response == ''))
			{		
				$(loader).hide();
				$(errorMessage).show();
				$('a', errorMessage).click(function(){
					getDataAjax(newUrl, container);
				});		
			}
			
			else if ((responseString.indexOf("Go to part detail") != -1))
			{	
				$(container).html(response);
				$(loader).hide();
				$('a.btn_orange').css('vertical-align', 'top');
				$('a.btn_orange').css('vertical-align', 'bottom');
				$('div.quantity').css('vertical-align', 'top');
				$('div.quantity').css('vertical-align', 'bottom');
			}
			
			else {
				$(container).html(response);
				cleanEmptyTags(container);
				removeElements(container, 6);
				cleanEmptyTags(container);
				$(container).css('height', '83px');
				$(loader).hide();
				$(container).parent().find('.viewFullDetails').show();
				$('a.btn_orange').css('vertical-align', 'top');
				$('a.btn_orange').css('vertical-align', 'bottom');
				$('div.quantity').css('vertical-align', 'top');
				$('div.quantity').css('vertical-align', 'bottom');
			}			
		},
		error: function()
		{	
			$(loader).hide();
			$(errorMessage).show();
			$('a', errorMessage).click(function(){
				getDataAjax(newUrl, container);
			});								
		}   
	});	

}

/**
* Method that removes elements of a container according to a limit of block type children
*/

function removeElements(item, limit)
{
	var cont = 0;
	var theItem;
	
	$(item).children().each(function() {
		cont++;
		
		if($(this).children().length > 1) {
			removeElements(this, limit - cont + 1);
			cont = cont + (limit - cont);
			$(this).append('...');
		}
		
		theItem = $(this);

		if(cont >= limit + 1){
			$(this).remove();
		}
	});
}

/**
* Method that removes empty tags of a given container
*/

function cleanEmptyTags(container)
{
	$('*', container).each(
		function() {
		var elem = $(this);
			if (elem.html().length == 0) {
				elem.remove();
			}
		}
	);
}


/**
*  Method that handles the Part viewer 
*/

function partViewer()
{
	if ($('#partImageBox').length > 0){
		
		
		var optionsZoom = {
			zoomWidth: $('#partDetails').width()+(7), 
			leftLen: $('#partImage').offset().left + ($('#partImage').width() + 200)
		};
		$('.jqzoom').jqzoom(optionsZoom);
		
		$('.jqzoom').mouseover(function (){
			$('#recently_viewed_main').slideUp();
			$("#arrow_right").css("display", "inline");
			$("#arrow_down").css("display", "none");
    		$("#recently_close").css("display", "none");
		});
		
	}
}

/**
* Method that sets custom drop downs behavior
*/

function setCustomDropDowns()
{
	var dropDownMenuTimer = null;
	var dropDown = null;
	
	$('div.customDropDown').click(function() {
		dropDown = $('div', this);
		$(dropDown).show();
		
		$(dropDown).hover(
			function(){				
				clearTimeout(dropDownMenuTimer);
			},
			function(){
				dropDownMenuTimer = setTimeout(function(){
					$(dropDown).hide();					
				}, 100);
			}
		);
		
		$(this).hover(
			function(){	
				clearTimeout(dropDownMenuTimer);
			},
			function(){
				dropDownMenuTimer = setTimeout(function(){
					$(dropDown).hide();					
				}, 100);
			}
		);
	});	
}

/**
* Method that scrolls the model diagram page with two layers
*/

function scrollDiagramPage()
{
	if($('#subcomponentPage').length == 1) {
		if($(document).height() > 1200) {
		
		var currentLeftPosition = $('.left_panel').offset().left;
		
			$(window).scroll(function(){
				if (($(document).scrollTop() > 242) && ($(document).scrollTop() < ($(document).height() - 979))) {		
					$('.left_panel').css('position', 'fixed');
					$('.left_panel').css('top', 10);
					$('.left_panel').css('left', currentLeftPosition);
				}
				else if ($(document).scrollTop() > ($(document).height() - 979))
				{
					$('.left_panel').css('position', 'relative');
					$('.left_panel').css('top', 0);
					$('.left_panel').css('left', 0);
				}
				else {
					$('.left_panel').css('position', 'static');
				}
			});
		}
	}
}


function resizeModelDiagram()
{
	var resizeTimer = null;
	$(window).bind('resize', function() {
	    if (resizeTimer) clearTimeout(resizeTimer);
	    resizeTimer = setTimeout(scrollDiagramPage, 100);
	});
}


/* function to close search for availability in store modal*/
function close_searchStore(){
	if (($("#fldZipCode").val() == 'Enter zip code')||($("#fldZipCode").val() == '')||$("#fldZipCode").val().length < '5')
	{
		
	}
	else
	{
		$('#TB_overlay').css({'display':'none'});
		$('#TB_window').css({'display':'none'});
		
	}
}

function clear_store(){
	$('#clearStore').click(function(){
		$("#fldZipCode").val('Enter zip code');
		$('.errorFlag').css({'display':'none'});
		$('#fldZipCode').removeClass('error').addClass('text');
	});
}


function topRatedFilter(){
	var diaHeight = $('.waterFilterDiagram').outerHeight();
	$('.waterFilterBest').css({'height':diaHeight-60});
}


function resizeTopFilter(){
	$(window).bind('resize', function(){
		topRatedFilter();
	});
}

function check_ref(){
	var referralCookie = document.referrer;
	
	if (referralCookie == "" || referralCookie ==null){
		$("#recently_viewed_main").css("display","block");
		$("#recently_close").css("display", "inline");
		$("#arrow_right").css("display", "none");
		$("#arrow_down").css("display", "inline");
	}
}

/**
 * Main Load Function
 */
$(function() {
    $(document).ready(function() {

        $.single = function(a) {
            return function(b) {
                a[0] = b;
                return a
            }
        }($([1]));
        /*@cc_on
         if (!window.XMLHttpRequest) {
         $('.hoverable').each(function () {
         this.attachEvent('onmouseenter', function (evt) { $.single(evt.srcElement).addClass('hovered'); });
         this.attachEvent('onmouseleave', function (evt) { $.single(evt.srcElement).removeClass('hovered'); });
         });
         }
         @*/

        if (PartsDirect.animateComponents == "false") {
            jQuery.fx.off = false;
        }

        truncate();
        activateButtons();
        setPlaceholderField();
        showToolTipText();
        showPartDetails();
        getAjaxParams();
        showDetailsPopup();
        setCustomDropDowns();
        partViewer();
        clear_store();
        topRatedFilter();
        resizeTopFilter();
        check_ref();
        
        if($.browser.msie && $.browser.version == "6.0"){
			//add specific methods for IE6
		}
		else if($.browser.msie && $.browser.version == "7.0"){
		}
		else{
			scrollDiagramPage();
			resizeModelDiagram();
		}

        void displayActionErrorsLiquid();
        void errorFieldPosition();
        void minMaxinternetExplorer();
        void initMaxOnTextArea();
        void initLogin();
        void displayFeaturesPopUp();
        if ($(".select ul").length != 0) {
            $(".select ul").scrollContent();
        }
        $("#partSearchForm").validate();

        $(".accordion").accordion({
            autoHeight: false,
            collapsible: true,
            active: 1
        });
        if (!PartsDirect.animateComponents)

        $('.accordion').accordion('option', 'animated', PartsDirect.animateComponents);

        if (typeof(ShoppingCart) != "undefined") ShoppingCart.init();

        //Fix the hover in the lists
        applyHoverList();

        $("div.accordion div.ui-accordion-content div.wrapper_accordion").each(resizeCarousel);
        //setAccordeonCategoryShowLink();

        /**
         * Temporary Fix For headers 
         */
        //void headerStates();
        if (typeof(RR) != "undefined") {
            RR.jsonCallback = function(recs) {
                //alert("some JSON data: " + recs.placements.length);
                if (typeof(initCarousels) != "undefined") {
                    void initCarousels(recs);
                }
            };
        }

        /* HEADER POP UPS */
        var copy = "";

        setTimeout(function() {
            $("div.links div#lpvoicebutton").children("a").addClass("headerPhone");
            $("div.links div#lpvoicebutton").children("a").hover(hOver, hOut);

            $("div#lpvoicebutton2").children("a").addClass("rightRailPhone");
            $("div#lpvoicebutton2").children("a").hover(hOver, hOut);

            $("div.links div#lpchatbutton").children("a").addClass("headerChat");
            $("div.links div#lpchatbutton").children("a").hover(hOver, hOut);

            $("div#lpchatbutton2").children("a").addClass("rightRailChat");
            $("div#lpchatbutton2").children("a").hover(hOver, hOut);
        }, 2000);

        /* SEARCH BOX FIELDS INITIAL STATE */

        if (($("#fldSBModelNumber").val() == "")) {
            $("#fldSBModelNumber").val($("#fldSBModelNumber").attr("title").toLowerCase());
            $("#fldSBModelNumber").css("color", "#CCC");
        }
        if ($("#fldSBPartNumber").val() == "") {
            $("#fldSBPartNumber").val($("#fldSBPartNumber").attr("title").toLowerCase());
            $("#fldSBPartNumber").css("color", "#CCC");
        }

        /*Trigger Popups*/

        $('a.popupTrigger').click(function() {

            openPopup($(this).attr('href'), 1050, 400, 'yes');
            return false;
        });

        $('a.popupTrigger2').click(function() {
            openPopup($(this).attr('href'), 460, 200, 'no');
            return false;
        });

        $("a.editSubs_btn").click(function() {
            var parent = $(this).parents("div.subscribedItemCnt");
            if (PartsDirect.animateComponents) $('div.editSubsForm', parent).slideDown('slow');
            else $('div.editSubsForm', parent).show();

            if ($('.billingAddressFormCheckbox', parent)[0].checked) {
                processClickOnSubscriptionBillingAddressFormCheckbox($('.billingAddressFormCheckbox', parent));
            }

            $(this).css('visibility', 'hidden');
            window.scrollTo(0, $(this).offset().top - 35);
        });

        var today = new Date();

        $('.frequencySelect').change(function() {
            var parent = $(this).parents("div.subscribedItemCnt");
            var newDate = new Date();

            newDate.setMonth(today.getMonth() + parseInt($(this).val()));
            $('.nextReorderDateLabel', parent).html((newDate.getMonth() + 1) + '/' + newDate.getDate() + '/' + newDate.getFullYear());
        }); /*Js code to avoid 6 css expression of global.css.*/
        if ($.browser.msie && $.browser.version == "6.0") {
            var width_client = document.body.clientWidth;
            var height_scrollable = document.body.scrollHeight;
            var height_offset = document.body.offsetHeight;
            var docBodyScrollTop = document.body.scrollTop;

            if (width_client < 150) {
                $(".ref_Search .refleft").css("width", "195px");
                $(".ref_Search .refright").css("width", "195px");
            } else {
                $(".ref_Search .refleft").css("width", "200px");
                $(".ref_Search .refright").css("width", "auto");
            }

            if (width_client < 1200) {
                $("#nicorConfigCont").css("width", "1100px");
            } else {
                $("#nicorConfigCont").css("width", "auto");
            }

            if (height_scrollable > 100) {
                $(".ref_Search .refleft").css("height", "97px");
                $(".ref_Search .refright").css("height", "97px");
                $(".refSearchBox2 .refBrand").css("height", "97px");
                $(".refSearchBox2 .refPtype").css("height", "97px");
            } else {
                $(".ref_Search .refleft").css("height", "auto");
                $(".ref_Search .refright").css("height", "auto");
                $(".refSearchBox2 .refBrand").css("height", "auto");
                $(".refSearchBox2 .refPtype").css("height", "auto");
            }

            if (height_scrollable > height_offset) {
                $("#TB_overlay").css("height", height_scrollable + "px");
            } else {
                $("#TB_overlay").css("height", height_offset + "px");
            }
        }

    });

    $(".billingAddressFormCheckbox").click(function() {
        processClickOnSubscriptionBillingAddressFormCheckbox($(this));
    });

    /*Get Help DropDown*/

    $(".get_help_dd").hide();

    $("#get_help_link").mouseenter(function() {
    	var leftPos = ($(this).position().left)-126;
        $(".get_help_dd").show();
        $(".get_help_dd").css("left", leftPos);
		$(window).trigger('HELP_OPENED');
    });
    $(".get_helpinvisible_rollout").mouseenter(function() {
        $(".get_help_dd").hide();
    });

    $(".get_help_dd").mouseleave(function() {
        $(".get_help_dd").hide();
    });

    /*forces filterBox_list boxes to have maximum height of 106px*/
    if ($(".filterBox_list").height() > 106) {
        $(".filterBox_list").height(106);
    };

    if ($.browser.msie && $.browser.version == "8.0") {
        $('.filterBox_list.last_box').width($('.filterBox_list.last_box ul').width() + 30);
        $('.filterBox_list.last_box').css({
            'overflowY': 'auto'
        });
    }
    
    (function overlayProxy(){
		$(window).unbind('SEARCH_OPENED').bind('SEARCH_OPENED',function(event){
			$.fn.ghostCart.forceHide();
			$(".get_help_dd").hide();
		}).unbind('GHOST_OPENED').bind('GHOST_OPENED',function(event){
			SearchboxInstance.hideDropdown();
			$(".get_help_dd").hide();
		}).unbind('HELP_OPENED').bind('HELP_OPENED',function(event){
			$.fn.ghostCart.forceHide();
			SearchboxInstance.hideDropdown();
		});
	}())
	
	/*Check availability input box*/
	
		
	$("#fldZipCode").click(function() {
        if ($(this).val() == 'Enter zip code') {
        	$(this).val('');
        }
    });

    $("#fldZipCode").blur(function() {
        if ($(this).val() == '') {
        	$(this).val( 'Enter zip code');
        }
    });
    
    $("#recently_toggler").click(function() {
    	toggleRecentView("show");
    });
    
    $("#recently_close").click(function() {
    	toggleRecentView("hide");
    });
    
    function toggleRecentView(val){
    	if(val == "show"){
    		$("#arrow_right").css("display", "none");
    		$("#arrow_down").css("display", "inline");
    		$("#recently_viewed_main").slideDown(600,function(){
	    	});
	    	$("#recently_viewed_container").slideDown(700,function(){
	    		$("#recently_close").css("display", "inline");
	    	});
    	} 
    	
    	if(val == "hide"){
    		$("#arrow_right").css("display", "inline");
    		$("#arrow_down").css("display", "none");
    		$("#recently_close").css("display", "none");
    		$("#recently_viewed_main").slideUp(700,function(){
	    	});
	    	$("#recently_viewed_container").slideUp(600,function(){
	    	});
    	}	
    }
});
