document.addEvent("domready", function () {

    // Login Menu Panel
    if ($("sign-in-link") && $("login-panel")) {

        var sign_in_link = $("sign-in-link");
        var login_panel = $("login-panel");
        login_panel.is_open = false;
        login_panel.is_over = false;
        login_panel.has_focus = false;

        login_panel.open_panel = function () {
            sign_in_link.addClass("active");
            login_panel.setStyle("display", "block");
            login_panel.is_open = true;
        };

        login_panel.close_panel = function () {
            sign_in_link.removeClass("active");
            login_panel.setStyle("display", "none");
            login_panel.is_open = false;
        };

        sign_in_link.getElement("a").addEvents({
            "click": function (evt) {

                evt.stop();
                login_panel.open_panel();

            }
        });

        sign_in_link.addEvents({
            "mouseenter": function (evt) {

                login_panel.is_over = true;

                if (login_panel.is_open == false && login_panel.is_over == true) {
                    login_panel.open_panel();
                }

            },

            "mouseleave": function (evt) {

                login_panel.is_over = false;

                (function () {
                    if (login_panel.has_focus == false && login_panel.is_over == false) {
                        login_panel.close_panel();
                    }
                }).delay(1000);

            }
        });

        var login_panel_inputs = login_panel.getElements("input[type=text], input[type=password]");
        login_panel_inputs.each(function (input, index) {

            input.addEvents({
                focus: function () {

                    login_panel.has_focus = true;
                    if (login_panel.is_open == false) {

                        login_panel.open_panel();

                    }

                },

                blur: function () {

                    login_panel.has_focus = false;

                    (function () {

                        if (login_panel.has_focus == false && login_panel.is_over == false) {
                            login_panel.close_panel();
                        }

                    }).delay(100);

                }
            });

        });

    }

    // My Account Menu Panel
    if ($('account-info') && $("account-info-panel")) {

        var account_info = $("account-info");
        var account_info_panel = $("account-info-panel");
        account_info_panel.is_open = false;
        account_info_panel.is_over == false;

        account_info.getElement("a").addEvents({
            "click": function (evt) {

                evt.stop();
                account_info.addClass("active");
                account_info_panel.setStyle("display", "block");
                account_info_panel.is_open = true;

            }
        });

        account_info.addEvents({
            "mouseenter": function (evt) {

                account_info_panel.is_over == true;

                (function () {
                    if (account_info_panel.is_open == false && account_info_panel.is_over == true) {
                        sign_in_link.addClass("active");
                        login_panel.setStyle("display", "block");
                        login_panel.is_open = true;
                    }
                }).delay(1000);

            },

            "mouseleave": function (evt) {

                account_info_panel.is_over == false;

                account_info.removeClass("active");
                account_info_panel.setStyle("display", "none");
                account_info_panel.is_open = false;

            }
        });

    }

    // primary navigation
    if ($("primary-navigation")) {

        var sub_menus = $("primary-navigation").getElements("li ul");
        sub_menus.each(function (item, index) {

            var li = item.getParent("li");
            li.addClass("sub-menu");
            li.addEvents({
                mouseenter: function () {

                    li.addClass("open");

                },

                mouseleave: function () {

                    li.removeClass("open");

                }
            });

        });

    }

    if ($("all-slides")) {

        var herobox = new PanelCarousel("all-slides", {
            panelClass: ".slide",
            animationStyle: "fader",
            sliderDirection: "bottom-up",
            sliderDuration: 750,
            slideDuration: 7000,
            showNextPreviousButtons: true
        });

    }

    // Textfield Placeholders
    var inputs = $$("input[type=text], input[type=password], textarea");
    if (inputs.length > 0) {

        inputs.each(function (item, index) {

            item = new TextfieldPlaceholder(item);

        });

    }


    // Autocompleters - City

    //console.log(inputs);
    if ($("txtCity") && $("txtProvince") && $("txtPostalCode") && $("txtCountry")) {
        var inputCity = $("txtCity");
        var inputProvince = $("txtProvince");
        var inputPostalCode = $("txtPostalCode");
        var inputCountry = $("txtCountry");




        //City Validation
        var CityDataSource = function (ui, term) {
            if (term != '') {
                var ajaxComplete = function (data) {
                    ui.autocompleter('suggest', data);
                } // eof ajaxComplete()
                var ajaxError = function () {
                    alert('Connection error');
                } // eof ajaxError()
                var request = new Request.JSON({
                    url: '/feeds/addressvalidation.aspx',
                    method: 'GET',
                    //data: { 'type': 'city', 'term': term },
                    data: { 'type': 'city', 'city': inputCity.value, 'province': inputProvince.value, 'postalcode': inputPostalCode.value, 'country': inputCountry.value },
                    onSuccess: ajaxComplete,
                    onFailure: ajaxError
                }).send();
            }
            return true;
        }
        var CityOptions = {
            'minLength': 1,
            'source': CityDataSource,
            'allowNewValues': true,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputCity.autocompleter(CityOptions);
        inputCity.autocompleter('option', 'onChange', function (ui) {
            $('txtCity').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        } // eof onChange()
        );



        //Province Validation
        var ProvDataSource = function (ui, term) {
            if (term != '') {
                var ajaxComplete = function (data) {
                    ui.autocompleter('suggest', data);
                } // eof ajaxComplete()
                var ajaxError = function () {
                    alert('Connection error');
                } // eof ajaxError()
                var request = new Request.JSON({
                    url: '/feeds/addressvalidation.aspx',
                    method: 'GET',
                    //data: { 'type': 'city', 'term': term },
                    data: { 'type': 'province', 'city': inputCity.value, 'province': inputProvince.value, 'postalcode': inputPostalCode.value, 'country': inputCountry.value },
                    onSuccess: ajaxComplete,
                    onFailure: ajaxError
                }).send();
            }
            return true;
        }
        var ProvOptions = {
            'minLength': 1,
            'allowNewValues': true,
            'source': ProvDataSource,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputProvince.autocompleter(ProvOptions);
        inputProvince.autocompleter('option', 'onChange', function (ui) {
            $('txtProvince').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        } // eof onChange()
        );

        //Postal Validation
        var PostalDataSource = function (ui, term) {
            if (term != '') {
                var ajaxComplete = function (data) {
                    ui.autocompleter('suggest', data);
                } // eof ajaxComplete()
                var ajaxError = function () {
                    alert('Connection error');
                } // eof ajaxError()
                var request = new Request.JSON({
                    url: '/feeds/addressvalidation.aspx',
                    method: 'GET',
                    //data: { 'type': 'city', 'term': term },
                    data: { 'type': 'postal', 'city': inputCity.value, 'province': inputProvince.value, 'postalcode': inputPostalCode.value, 'country': inputCountry.value },
                    onSuccess: ajaxComplete,
                    onFailure: ajaxError
                }).send();
            }
            return true;
        }
        var PostalOptions = {
            'minLength': 1,
            'allowNewValues': true,
            'source': PostalDataSource,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputPostalCode.autocompleter(PostalOptions);
        inputPostalCode.autocompleter('option', 'onChange', function (ui) {
            $('txtPostalCode').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        } // eof onChange()
        );






        //Country Validation
        var CountryDataSource = function (ui, term) {
            if (term != '') {
                var ajaxComplete = function (data) {
                    ui.autocompleter('suggest', data);
                } // eof ajaxComplete()
                var ajaxError = function () {
                    alert('Connection error');
                } // eof ajaxError()
                var request = new Request.JSON({
                    url: '/feeds/addressvalidation.aspx',
                    method: 'GET',
                    //data: { 'type': 'city', 'term': term },
                    data: { 'type': 'country', 'city': inputCity.value, 'province': inputProvince.value, 'postalcode': inputPostalCode.value, 'country': inputCountry.value },
                    onSuccess: ajaxComplete,
                    onFailure: ajaxError
                }).send();
            }
            return true;
        }
        var CountryOptions = {
            'minLength': 1,
            'allowNewValues': true,
            'source': CountryDataSource,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputCountry.autocompleter(CountryOptions);
        inputCountry.autocompleter('option', 'onChange', function (ui) {
            $('txtCountry').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        } // eof onChange()
        );

    }

    // Autocomplete - Search
    // 90% complete: On hold, would need to review SQL portion
//    if (inputSearch = $("search_input")) {
//        //var  $("search_input");

//        var SearchDataSource = function (ui, term) {
//            if (term != '') {
//                var ajaxComplete = function (data) {
//                    ui.autocompleter('suggest', JSON.decode(data.d));
//                }
//                var ajaxError = function () {
//                    alert('Connection error');
//                }
//                var request = new Request.JSON({
//                    url: '/webservices/SearchAutoCompleteWebService.asmx/ProductSearchSuggestionsJSON',
//                    urlEncoded: false,
//                    headers: { 'Content-Type': 'application/json; charset=utf-8' },
//                    method: 'POST',
//                    onSuccess: ajaxComplete,
//                    onFailure: ajaxError
//                }).send(JSON.encode({ 'searchstring': inputSearch.value }));
//            }
//            return true;
//        }
//        var SearchOptions = {
//            'delay': 500,
//            'minLength': 1,
//            'allowNewValues': true,
//            'source': SearchDataSource,
//            'onCreate': function (ui) {
//                var menu = ui.autocompleter('menu');
//                var coords = ui.getCoordinates();
//                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
//            }
//        };
//        inputSearch.autocompleter(SearchOptions);
//        inputSearch.autocompleter('option', 'onChange', function (ui) {
//            $('search_input').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
//        }
//    		);
//    }

    if (inputArtistFilter = $("AutoCompleteTextBrand")) {
        var ArtistDataSource = function (ui, term) {
            var data = [];

            // wildcard select items in hidden drop down list (lowercase comparison since selector is case sensitive.  Data from code has been converted to lower case too)
            var elements = $('AutoCompleteDropDownBrand').getElements('option[value^=' + term.toLowerCase() + ']');

            for (i = 0; i <= 4 && i < elements.length; i++) {
                var suggestion = elements[i].get('html')
                data[i] = { "value": suggestion, "label": suggestion, "html": "<span>" + suggestion + "</span>" };
            }

            ui.autocompleter('suggest', data);
            return true;
        }
        var ArtistOptions = {
            'delay': 500,
            'minLength': 1,
            'allowNewValues': true,
            'source': ArtistDataSource,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputArtistFilter.autocompleter(ArtistOptions);
        inputArtistFilter.autocompleter('option', 'onChange', function (ui) {
            $('AutoCompleteTextBrand').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        }
        );
    }

    if (inputArtistFilter = $("AutoCompleteTextBrandLocation")) {
        var ArtistDataSource = function (ui, term) {
            var data = [];

            // wildcard select items in hidden drop down list (lowercase comparison since selector is case sensitive.  Data from code has been converted to lower case too)
            var elements = $('AutoCompleteDropDownBrandLocation').getElements('option[value^=' + term.toLowerCase() + ']');

            for (i = 0; i <= 4 && i < elements.length; i++) {
                var suggestion = elements[i].get('html')
                data[i] = { "value": suggestion, "label": suggestion, "html": "<span>" + suggestion + "</span>" };
            }

            ui.autocompleter('suggest', data);
            return true;
        }
        var ArtistOptions = {
            'delay': 500,
            'minLength': 1,
            'allowNewValues': true,
            'source': ArtistDataSource,
            'onCreate': function (ui) {
                var menu = ui.autocompleter('menu');
                var coords = ui.getCoordinates();
                menu.setPosition({ x: coords.left, y: coords.top + coords.height + 1 });
            }
        };
        inputArtistFilter.autocompleter(ArtistOptions);
        inputArtistFilter.autocompleter('option', 'onChange', function (ui) {
            $('AutoCompleteTextBrandLocation').set('value', (ui.autocompleter('value') == '') ? '' : ui.autocompleter('value'));
        }
        );
    }


    if ($("product-image")) {

        var product_gallery = new ThumbnailGallery.Extra($("product-image-container"), {
            mainImageContainerSelector: "#product-image",
            thumbnailImagesContainerSelector: "+ > ul.product-list",
            thumbnailClick: function (target) {

                var uri = new URI(target.getParent("a").get("href"));
                var largeimage = uri.get("data").large;

                // This is for the Lightbox thinger.
                $("product-image").set("href", largeimage);

            },

            sliderUnitWidth: 125
        });

        var lightbox = new Lightbox.Extra({
            targetSelector: "#product-image",
            useGalleryObject: product_gallery,
            beforeShow: function () {
                window.scrollTo(0, 0);
            },
            buttonClick: function (target, index) {

                var uri = new URI(lightbox.thumbnailImages[index].get("href"));
                var largeimage = uri.get("data").large;

                // This is for the Lightbox thinger.
                $("product-image").set("href", largeimage);

            }
        });

        lightbox.targets.each(function (item, index) {

            item.addEvent("click", function (evt) {
                evt.stop();
                lightbox.loadContent(item.get("href"));
            });

        });

    }

    if ($("cvc")) {

        var cvc_button = $("cvc-button");
        var example = $("cvc");
        // console.log(cvc_button);

        cvc_button.addEvent('mouseover', function (e) {
            e.stop();
            example.fade("hide");
            example.setStyle("display", "block");
            example.fade("in");
        });

        cvc_button.addEvent('mouseout', function (e) {
            e.stop();
            example.fade("out");
        });
    }

});

//validation javascript

//myles aug25 2011 validation.. had to split last element because field are named differently
var objArray;
var errData;
function showError(myData) {
    var myArray = myData.split('*');
    objArray = myArray[1].split(",");
    for (i = 0; i < objArray.length; i++) {
        myObj = document.getElementById(objArray[i].toString());
        myObj.style.background = "yellow";
    }
}
function hiliteShow() {
    objArray = fieldArray;
    for (i = 0; i < objArray.length; i++) {
        var myFieldArray = new Array();
        myFieldArray=objArray[i].split('_');
        var fieldToHilite = myFieldArray[myFieldArray.length - 1];
        myObj = document.getElementById(fieldToHilite);
        if (myObj) {
            myObj.style.backgroundColor = '#FFFFB0';
        }
    }
}
function hiliteErrors(arr1, arr2) {
    fieldArray = arr1;
    msgArray = arr2;
    window.onload = hiliteShow;
}
