﻿//  Creates a namespace for this functionality
YAHOO.namespace("MerchantDetailPage");

var Car = "";

YAHOO.MerchantDetailPage.App = function() {

    var carousel;
    var sourceUrl = '';
    var divName = '';

    var itemsPerPage = 4;
    var objectsPerItem = 1;
    var objectsPerPage = itemsPerPage * objectsPerItem;
    var totalObjects = 0;    

    //  Universal Ajax Handler    
    var ajax = function(pageUrl, fn){
        YAHOO.util.Connect.asyncRequest("GET", pageUrl, fn);
    }

    var successProcess = function(o){
        var responseObj;
        try{
            responseObj = YAHOO.lang.JSON.parse(o.responseText);
            if (responseObj != null){
                switch (responseObj.ID){
                    case "GiftCard":
                            document.getElementById("merchantDisplay").innerHTML = responseObj.Results;
                            TabSetup(responseObj.Label, responseObj.Description);
                            //TabSetup($("productUrlLabel").innerHTML, $("productDescription").innerHTML);
                        break;
                }
            }
        }
        catch(exc){
            alert("Unable to retrieve info - Error : " + exc); //Need to get better handler here
        }
    }
    var failureProcess = function(o){
        alert("Ajax request failed!");
    }
    var callback = {
        success: successProcess,
        failure: failureProcess
    }

    // Listener for scroll prev requests
    var handleScrollPrevReq = function() {
        this.ScrollBackward();
    };
    
    // Listener for scroll next requests
    var handleScrollNextReq = function() {
        this.scrollForward();
    };
    
    /**
     * The "click" handler for the pager navigation.
     *
     * @method handlePagerClick
     * @param {Event} ev The event object
     * @protected
     */
    var handlePagerClick = function (ev) {
        var pos, target, val;

        target = YAHOO.util.Event.getTarget(ev);
        val = target.href || target.value;
        if (YAHOO.lang.isString(val) && val) {
            pos = val.lastIndexOf("#");
            if (pos != -1) {
                val = carousel.getItemPositionById(val.substring(pos + 1));
                carousel.scrollTo(val);
                YAHOO.util.Event.preventDefault(ev);
            }
        }
    };

    var makeCarouselItem = function(objArray) {
        var currentObj = objArray[0];
        var itemElement = "<div class=\"cgc-giftcarddesign\"><img src=\"http://images.colorfulimages.com/cgc/images/us/local/giftcards/source/";
        itemElement += currentObj.ImageFileName + "?fit=125w125h\"";
        itemElement += " alt=\"" + currentObj.ImageAltText + "\"";
        itemElement += " onclick=\"YAHOO.MerchantDetailPage.App.UpdateDisplay('" + currentObj.ProductSku + "')\""
        itemElement += " /></div>";

        return itemElement;
    }
    
    var addItemsToCarousel = function(itemArray, startPos) {
        var objectsPerItemCounter = 0;
        var objectsForItem = [];
        for (var i = startPos, len = itemArray.length; i < len; ++i) {
            objectsForItem[objectsPerItemCounter] = itemArray[i];
            objectsPerItemCounter++;
            if (objectsPerItemCounter == objectsPerItem)
            {
                if (i == 0){
                    YAHOO.MerchantDetailPage.App.UpdateDisplay("" + objectsForItem[0].ProductSku + "");
                }
                var newCarouselItem = makeCarouselItem(objectsForItem);
                objectsPerItemCounter = 0;
                try
                {
                    carousel.addItem(newCarouselItem);
                }
                catch (x)
                {
                    alert(x);
                }
            }
        }
    }
    
    var handleMerchantAdsFailure = function(o)
    {
        alert("Ajax request failed!");
    }

    var handleMerchantAdsPage1Success = function(o)
    {
        var returnObjects = [];
        
        try {
            responseObj = YAHOO.lang.JSON.parse(o.responseText);
        }
        catch (x) {
            alert("Unable to retrieve ads"); //Need to get better handler here
        }
        
        totalObjects = responseObj.TotalItems;
        returnObjects = responseObj.GiftCards;
        
        // Get total number of items
        var totalItems = Math.ceil(totalObjects/objectsPerItem);
        
        // Initial definition of carousel
        carousel = new YAHOO.widget.Carousel(divName, 
            {
                numVisible:        itemsPerPage,
                animation:         { speed: 0.15 },
                scrollInc:         itemsPerPage,
                numItems:          totalItems
            }
        );

        // Add first page of items to carousel
        addItemsToCarousel(returnObjects, 0);
        var nav = document.getElementById("pageNav");
        if(nav!=null)
        {
            nav.appendChild(carousel._pages.el);
            // Handle page navigation
            YAHOO.util.Event.addListener(nav, "click", handlePagerClick);
        }
        //carousel.set("numItems", totalItems);

        // and render it
        carousel.render();
        carousel.show();
        
        // If there are more than 1 page of objects, go add the rest
        if (totalObjects > objectsPerPage) {
            var remainingPagesUrl = sourceUrl+'?page=r&pageSize='+objectsPerPage;
            YAHOO.util.Connect.asyncRequest("GET", remainingPagesUrl, merchantAdsRemainingPagesCallback);
        }
    }

    var merchantAdsPage1Callback = 
    {
        success: handleMerchantAdsPage1Success,
        failure: handleMerchantAdsFailure
    }
    
    var handleMerchantAdsRemainingPagesSuccess = function(o)
    {
        var returnObjects = [];
        
        try {
            responseObj = YAHOO.lang.JSON.parse(o.responseText);
        }
        catch (x) {
            alert("Unable to retrieve ads"); //Need to get better handler here
        }
        
        returnObjects = responseObj.GiftCards;
        
        addItemsToCarousel(returnObjects, objectsPerPage);
    }

    var merchantAdsRemainingPagesCallback = 
    {
        success: handleMerchantAdsRemainingPagesSuccess,
        failure: handleMerchantAdsFailure
    }

    var makeMerchantAdsCarousel = function() {
        // Get first page (success handler populates var for total items
        var firstPageUrl = sourceUrl+'?page=1&pageSize='+objectsPerPage;
        YAHOO.util.Connect.asyncRequest("GET", firstPageUrl, merchantAdsPage1Callback);
        return carousel;
    }
    
    var getCarousel = function(){
        return carousel;
    }
    
    return {
        init: function(merchantAdsCarouselDivName, merchantAdsSourceUrl) {
                sourceUrl = merchantAdsSourceUrl;
                divName = merchantAdsCarouselDivName;
                makeMerchantAdsCarousel();
        },
        UpdateDisplay : function(productSku){
            var pageUrl = appRoot + 'Jsons/GetMerchantDisplay/' + productSku;
            ajax(pageUrl, callback);
        },
        SwitchImageView : function(link){
            var item = document.getElementById("imageFront");
            var item2 = document.getElementById("imageBack");
            if (item != null && item2 != null){
                if (item2.style.display == "none"){
                    item.style.display = "none";
                    item2.style.display = "";
                    link.innerHTML = "view gift card card front";
                }
                else{
                    item.style.display = "";
                    item2.style.display = "none";
                    link.innerHTML = "view gift card card back";
                }
            }
        }

        
    }
}();

YAHOO.MerchantDetailPage.ScrollCarousel = function(preNavDivName,nextNavDivName,carouselDivname, direction) {
    var thisCarousel = YAHOO.widget.Carousel.getById(carouselDivname);
    // prev-nav-arrow
    var thisPrevNav = document.getElementById(preNavDivName);
    // next-nav-arrow
    var thisNextNav = document.getElementById(nextNavDivName);
    if (thisCarousel != null) {
        thisCarousel.set("scrollIncrement", 3);    
        if (direction == "forward") {
            thisCarousel.scrollForward();           
        }
        else {
            thisCarousel.scrollBackward();            
        }
        
        // controll the nav class
        var sentinel   = thisCarousel._firstItem + thisCarousel.get("numVisible");
         if(sentinel >= thisCarousel.get("numItems"))
            {
                thisNextNav.setAttribute("className","cgc-nav-button cgc-nav-button-next-disabled");// for IE
                thisNextNav.setAttribute("class","cgc-nav-button cgc-nav-button-next-disabled");// for firefox
            }
            else
            {
                thisNextNav.setAttribute("className","cgc-nav-button cgc-nav-button-next"); // for IE
                thisNextNav.setAttribute("class","cgc-nav-button cgc-nav-button-next"); // for firefox
            }
         if(thisCarousel._firstItem ===0)
            {
                thisPrevNav.setAttribute("className","cgc-nav-button cgc-nav-button-prev-disabled");// for IE
                thisPrevNav.setAttribute("class","cgc-nav-button cgc-nav-button-prev-disabled"); // for firefox
            }
            else
            {
                thisPrevNav.setAttribute("className","cgc-nav-button cgc-nav-button-prev"); // for IE
                thisPrevNav.setAttribute("class","cgc-nav-button cgc-nav-button-prev"); // for firefox
            }
    }
}