﻿// Define version.
var SHOP_JQUERY_JS = 1.0;

/*
------------------------------------------------------
QuickSearch
------------------------------------------------------
*/
function setupQuickSearch() {
    //var textBoxId = settings.InputId;
    //var buttonId = QuickSearchSettings.SubmitId;
    var targetUrl = QuickSearchSettings.TargetUrl;
    
    var inputElement = $("#" + QuickSearchSettings.InputId);
    var submitElement = $("#" + QuickSearchSettings.SubmitId);
    //var tb = getElement(textBoxId);
    QuickSearchSettings.DefaultSearchText = inputElement.val();

    submitElement.click(function(event) {
        return handleQuickSearchSubmit(event);
    });
    
    submitElement.keydown(function(event) {
        if(event.keyCode == 13) return handleQuickSearchSubmit(event);
        
        return true;
    });

    inputElement.keydown(function(event) {
        if(event.keyCode == 13) return handleQuickSearchSubmit(event);
        
        return true;
    });

    inputElement.focus(function() {
        inputElement.addClass("QuickSearchInput_Focus");
        inputElement.removeClass("QuickSearchInput");
        if(inputElement.val() == QuickSearchSettings.DefaultSearchText) inputElement.val("");
    });
    
    inputElement.blur(function() {
        inputElement.addClass("QuickSearchInput");
        inputElement.removeClass("QuickSearchInput_Focus");
        if(inputElement.val() == "") inputElement.val(QuickSearchSettings.DefaultSearchText);
    });
}

function handleQuickSearchSubmit(event) {
    if(event.preventDefault) event.preventDefault();

    var text = $("#" + QuickSearchSettings.InputId).val();
    if(text == QuickSearchSettings.DefaultSearchText) {
        text = "";
    } else {
        var encodingFunction = encodeURIComponent || escape;
        if(encodingFunction) text = encodingFunction(text);
    }

    targetUrl = QuickSearchSettings.TargetUrl.replace(/\{0\}/i, text);
    
    document.location.href = targetUrl; // + text; // This code is for replacing {0}, used with URLRewriting: targetUrl.replace(/\{0\}/i, text);
    return false;
}
/*
------------------------------------------------------
/QuickSearch
------------------------------------------------------
*/

/*
------------------------------------------------------
Misc.
------------------------------------------------------
*/
function executeEventOnEnter(inputElementId, eventCallback) {
    var inputElement = $("#" + inputElementId);
    if(inputElement != null) {
        inputElement.keydown(function(event) {
            if(event.keyCode == 13) {
                return eventCallback(event);
            }
            return true;
        });
    }
}
/*
------------------------------------------------------
/Misc.
------------------------------------------------------
*/

/*
------------------------------------------------------
Cartview
------------------------------------------------------
*/
function setupCartView(settings) {
    settings = settings || {};
    
    if(typeof settings.Flash != 'undefined') {
        $("#" + settings.ElementId).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500);
    }
}
/*
------------------------------------------------------
/Cartview
------------------------------------------------------
*/

/*
------------------------------------------------------
Tabs
------------------------------------------------------
*/
/*
function setTab(tabElement, tabAreaId) {
    if(tabElement.className == 'active') return;
    var tabItems = tabElement.parentNode.getElementsByTagName('LI');
    for(var i=0; i<tabItems.length; i++) {
        tabItems[i].className = '';
    }
    tabElement.className = 'active';

    var tabArea = getElement(tabAreaId);
    
    var children = tabArea.parentNode.childNodes;
    for(var i=0; i<children.length; i++) {
        if(children[i].nodeName == 'DIV' || children[i].tagName == 'DIV') {
            children[i].style.display = 'none';
        }
    }
    
    tabArea.style.display = '';
}
*/
/*
------------------------------------------------------
/Tabs
------------------------------------------------------
*/

/*
------------------------------------------------------
Checkout
------------------------------------------------------
*/
/*
var inputFieldInformation_TimerId = null;

function clearInputFieldInformation() {
    if(inputFieldInformation_TimerId != null) {
        clearTimeout(inputFieldInformation_TimerId);
        inputFieldInformation_TimerId = null;
    }
    
    inputFieldInformation_TimerId = setTimeout('getElement("inputFieldInformation").innerHTML = inputFieldInformation_["DEFAULT"]', 1000);
}

function setDelayedInputFieldInformation(elementId) {
    if(inputFieldInformation_TimerId != null) {
        clearTimeout(inputFieldInformation_TimerId);
        inputFieldInformation_TimerId = null;
    }
    
    inputFieldInformation_TimerId = setTimeout('setInputFieldInformation(null, "' + elementId + '")', 300);
}

function setInputFieldInformation(element, valueId) {
    if(inputFieldInformation_TimerId != null) {
        clearTimeout(inputFieldInformation_TimerId);
        inputFieldInformation_TimerId = null;
    }

    var e = getElement('inputFieldInformation');
    if(inputFieldInformation_["DEFAULT"] == null) {
        inputFieldInformation_["DEFAULT"] = e.innerHTML;
    }
    
    if(valueId == null || valueId == '') valueId = element.id;

    var text = inputFieldInformation_[valueId];
    if(text == null || text == "") text = inputFieldInformation_["DEFAULT"];
    e.innerHTML = text;
}
*/
/*
------------------------------------------------------
/Checkout
------------------------------------------------------
*/

/*
------------------------------------------------------
SearchPage
------------------------------------------------------
*/
function setupSearchPage(settings) {
    var fromPrice = $("#" + settings.FromPriceElementId).val();
    var toPrice = $("#" + settings.ToPriceElementId).val();
    
    if(typeof fromPrice == "undefined" || fromPrice === "") fromPrice = settings.MinPrice;
    if(typeof toPrice == "undefined" || toPrice === "") toPrice = settings.MaxPrice;
    
    $("#" + settings.PriceSliderElementId).slider({
        range: true,
		min: settings.MinPrice,
		max: settings.MaxPrice,
		values: [fromPrice, toPrice],
		slide: function(event, ui) {
		    $("#" + settings.FromPriceElementId).val(ui.values[0]);
		    $("#" + settings.ToPriceElementId).val(ui.values[1]);
		    $("#" + settings.PriceOutputElementId).html(ui.values[0] + " " + settings.CurrencySymbol + " - " + ui.values[1] + " " + settings.CurrencySymbol);
		}
    });
    
    $("#" + settings.PriceOutputElementId).html(fromPrice + " " + settings.CurrencySymbol + " - " + toPrice + " " + settings.CurrencySymbol);
    $("#" + settings.PriceRangeElementId).hide();
}
/*
------------------------------------------------------
/SearchPage
------------------------------------------------------
*/

/*
------------------------------------------------------
ProductImagePager
------------------------------------------------------
*/
var productPreviewPager_ = null;

// id, previewImages, previewBasePath, thumbnailBasePath, imageId, initialPreviewIndex
function ProductPreviewPager(settings) {
    settings = settings || {};
    settings.InitialPreviewIndex = settings.InitialPreviewIndex || 0;
    settings.PageSetCount = settings.PageSetCount || 5;
    
    this.currentPreviewIndex_ = -1;

    productPreviewPager_ = this;

    this.Id = settings.Id;
    this.PreviewImages = settings.PreviewImages;
    this.PreviewBasePath = settings.PreviewBasePath;
    this.ThumbnailBasePath = settings.ThumbnailBasePath;
    this.ImageId = settings.ImageId;
    this.OnSetPreviewCallback = settings.OnSetPreviewCallback;
    this.PageSetCount = settings.PageSetCount;

    this.setPreview = function(index, forceReload) {
        if (this.currentPreviewIndex_ === index && !forceReload) return;

        this.currentPreviewIndex_ = index;
        var filename = this.PreviewBasePath + this.PreviewImages[index];
        var target = $("#" + this.ImageId);
        if (target.attr("src") === filename) return;

        var img = new Image();
        $(img)
        .load(function() {
            var instance = ProductPreviewPager.getInstance();

            target.fadeOut("fast", function() {
                target.attr("src", filename).fadeIn("fast");
            });

            if (instance.PreviewImages.length > instance.PageSetCount) {
                var startIndex = parseInt(instance.currentPreviewIndex_ / instance.PageSetCount);
                for (var i = 0; i < instance.PreviewImages.length; i++) {
                    var ctrl = $("#previewImage" + i);
                    var visible = (i >= (startIndex * instance.PageSetCount) && i < (startIndex * instance.PageSetCount) + instance.PageSetCount);

                    if (visible) {
                        ctrl.show();
                    } else {
                        ctrl.hide();
                    }
                    if (i == instance.currentPreviewIndex_) {
                        ctrl.addClass("Selected");
                    } else {
                        ctrl.removeClass("Selected");
                    }
                }
            }
        })
        .attr("src", filename);

        if (typeof this.OnSetPreviewCallback != "undefined") this.OnSetPreviewCallback({ Filename: this.PreviewImages[index], FullPath: filename, Index: index });
    };

    this.nextPreview = function() {
        if (this.currentPreviewIndex_ >= this.PreviewImages.length - 1) return;
        this.currentPreviewIndex_++;
        this.setPreview(this.currentPreviewIndex_, true);
    };

    this.previousPreview = function() {
        if (this.currentPreviewIndex_ <= 0) return;
        this.currentPreviewIndex_--;
        this.setPreview(this.currentPreviewIndex_, true);
    };

    // Setup thumbnails.
    var thumbs = $("#" + this.Id + " .Thumbnails");
    for (var i = 0; i < this.PreviewImages.length; i++) {
        var ctrl = $("<img id='previewImage" + i + "' src='" + this.ThumbnailBasePath + this.PreviewImages[i] + "' rel='" + i + "' />");
        if (i > this.PageSetCount-1) ctrl.hide();
        ctrl.click(function() {
            ProductPreviewPager.getInstance().setPreview($(this).attr("rel"));
        });

        thumbs.append(ctrl);
    }
    this.setPreview(settings.InitialPreviewIndex);
}

ProductPreviewPager.setInstance = function(instance) {
    productPreviewPager_ = instance;
}

ProductPreviewPager.getInstance = function() {
    return productPreviewPager_;
}
/*
------------------------------------------------------
/ProductImagePager
------------------------------------------------------
*/

function toggle(elementId) {
    var element = $("#" + elementId);
    if(typeof element !== "undefined") { element.toggle(); }
}

$(document).ready(function() {
    if(typeof QuickSearchSettings != 'undefined') {
        setupQuickSearch();
    }
    
    if(typeof CartViewSettings != 'undefined') {
        setupCartView(CartViewSettings);
    }
    
    if(typeof SearchPageSettings != 'undefined') {
        setupSearchPage(SearchPageSettings);
    }

    if (typeof ProductPreviewPagerSettings != 'undefined') {
        new ProductPreviewPager(ProductPreviewPagerSettings);
    }

});