﻿/*
    functions for handling productdetails
    Richard Appelgren, Zooma By Semcon 2008
*/

var productdetails = new Object();
productdetails.PanelSelector = '#ProductDetailsPanel';
productdetails.CloseButtonSelector = '#ProductDetailsCloseButton';
productdetails.PanelSelectorLoading = '#ProductDetailsLoading';
productdetails.ButtonPrevSelector = '#ProductDetailsButtonPrev';
productdetails.ButtonNextSelector = '#ProductDetailsButtonNext';
productdetails.ProductDetailsPanelInnerContentSelector = '#ProductDetailsPanelInnerContent';
productdetails.ProductDetailsPanelBlogShareBoxSelector = '#ProductDetailsPanelBlogShareBox';

productdetails.CurrentArtNo = null; // store a value on the page, for handling for example if someone clicks the already loaded product
productdetails.defaultSepChar = ',';
productdetails.templateContent = null; // content

productdetails.adjustPos = function(bForce) {
    bForce = (common.isValue(bForce) && bForce == true) ? true : false;
    var isVisible = $(productdetails.PanelSelector).css('display') != 'none' || bForce;
    if (!isVisible) return;

    var prodDetWidth = 690;
    var leftPos = $(window).width() / 2 - prodDetWidth / 2;
    $(productdetails.PanelSelector).css('left', leftPos);
}

productdetails.toggleLoading = function(bShow) {
    $(productdetails.PanelSelectorLoading).css('display', bShow ? '' : 'none');
}

productdetails.load = function() {
    var strJsonInData = "{'intArtNo':'" + productdetails.CurrentArtNo + "','strLangCode':'" + EPI_CURRENT_LANG_CODE + "','strMarketCode':'" + EPI_CURRENT_MARKET_CODE + "'}";
    $.ajax({
        type: "POST",
        url: common.miscServiceUrl + '/GetProductDetailsExt',
        cache: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: strJsonInData,
        timeout: common.ajaxTimout,
        success: function(indata, textStatus1) {
            if (common.isValue(productdetails.templateContent)) {
                $(productdetails.ProductDetailsPanelInnerContentSelector).setTemplate(productdetails.templateContent);
                $(productdetails.ProductDetailsPanelInnerContentSelector).processTemplate(indata.d);
            }
            else {
                // make another webservice call to collect data from the template
                var __strFullTemplateUrl = common.jqueryTemplatesBaseUrl + 'ProductDetailsPanel.txt';
                $.ajax({
                    url: __strFullTemplateUrl,
                    timeout: common.ajaxTimout,
                    success: function(strFileContent, textStatus2) {
                        $(productdetails.ProductDetailsPanelInnerContentSelector).setTemplate(strFileContent);
                        $(productdetails.ProductDetailsPanelInnerContentSelector).processTemplate(indata.d);
                        productdetails.templateContent = strFileContent;
                    },
                    complete: function(strFileContent, textStatus2) {
                        if (textStatus2 == 'error') {
                            alert('2-1.error, please try another product:' + strFileContent);
                            productdetails.close();
                            return;
                        }
                    },
                    error: function(XMLHttpRequest, textStatus2, errorThrown2) {
                        alert('2-2.error, please try another product:' + errorThrown2);
                        productdetails.close();
                        return;

                    }
                });
            }
        },
        complete: function(indata, textStatus1) {
            if (textStatus1 == 'error') {
                alert('1-1.error, please try another product.');
                productdetails.close();
                return;
            }
        },
        error: function(XMLHttpRequest, textStatus1, errorThrown1) {
            alert('1-2.error, please try another product:errorThrown:' + errorThrown1);
            productdetails.close();
            return;
        }
    });
}

productdetails.open = function(e) {

    $(productdetails.ProductDetailsPanelBlogShareBoxSelector).css('display', 'none');

    productdetails.toggleNextPrevDisplayNav(true);
    var strArtNo = (common.isValue(e) && common.isValue(e.data)) ? e.data : null;

    if (strArtNo == null) {
        return false;
    }

    $(productdetails.ProductDetailsPanelShareWrapSelector).css('display', 'none');

    productdetails.CurrentArtNo = strArtNo;
    productdetails.toggleLoading(true); // try without this visible
    $(productdetails.PanelSelector).css('display', 'block'); //$(productdetails.PanelSelector).fadeIn(1000, function() { });

    // load controls via ajax, and let ajax callback set
    productdetails.load();

    $(productdetails.ButtonPrevSelector).unbind('click', productdetails.panelPrevClick);
    $(productdetails.ButtonNextSelector).unbind('click', productdetails.panelNextClick);

    $(productdetails.ButtonPrevSelector).bind('click', productdetails.panelPrevClick);
    $(productdetails.ButtonNextSelector).bind('click', productdetails.panelNextClick);

    return false;
}
productdetails.close = function() {
    $(productdetails.PanelSelector).css('display', 'none'); //$(productdetails.PanelSelector).fadeOut(1000, function() { });
    return false;
}

// Note; this is used by, for example the favorites panel, when opening a favorite from the fav panel,
productdetails.toggleNextPrevDisplayNav = function(bShow) {
    $(productdetails.ButtonPrevSelector).css('display', (bShow) ? '' : 'none');
    $(productdetails.ButtonNextSelector).css('display', (bShow) ? '' : 'none');
}

productdetails.panelPrevClick = function() {
    if (productdetails.CurrentArtNo == null) return false;

    var strNewArtNo = productdetails.items.findPrev(productdetails.CurrentArtNo);

    if (strNewArtNo == null) return false;

    productdetails.open({ data: strNewArtNo });
    return false;
}

productdetails.panelNextClick = function() {
    if (productdetails.CurrentArtNo == null) return false;

    var strNewArtNo = productdetails.items.findNext(productdetails.CurrentArtNo);

    if (strNewArtNo == null) return false;

    productdetails.open({ data: strNewArtNo });
    return false;
}
productdetails.printClick = function(e) {
    var strArtNo = (common.isValue(e) && common.isValue(e.data)) ? e.data : null;

    if (strArtNo == null) {
        return false;
    }

    window.open(EPI_CURRENT_PRODUCT_DETAILS_URL + '?PrintView=1&ArtNo=' + strArtNo, 'PrintProduct');
    return false;
}
// need to wrap this, easist way to handle it
productdetails.addToFavoritesClick = function(e) {
    var strArtNo = (common.isValue(e) && common.isValue(e.data)) ? e.data : null;
    if (strArtNo == null) {
        return false;
    }

    favorites.add(strArtNo);
    return false;
}

// called from ProductDetailsPanel.html -template, to make it asiser to handle script related stuff
productdetails.panelLoadingDone = function() {

    $('#ProductDetailsPanelFavoriteButton').bind('click', productdetails.CurrentArtNo, productdetails.addToFavoritesClick);
    $('#ProductDetailsPanelPrintButton').bind('click', productdetails.CurrentArtNo, productdetails.printClick);

    if (productdetails.items.isLast(productdetails.CurrentArtNo)) {
        $(productdetails.ButtonNextSelector).css('display', 'none');
    }
    if (productdetails.items.isFirst(productdetails.CurrentArtNo)) {
        $(productdetails.ButtonPrevSelector).css('display', 'none');
    }

    // make the call to turn of loading layer
    productdetails.toggleLoading(false);
}

productdetails.utils = new Object();

// called from ProductDetailsPanel.html -template, to make it asiser to handle script related stuff
productdetails.utils.setPanelProductStyleElement = function(strElementName, strArtNo, strImage4Url) {
    strElementName = (common.isValue(strElementName)) ? strElementName : null;
    strArtNo = (common.isValue(strArtNo)) ? strArtNo : null;
    strImage4Url = (common.isValue(strImage4Url)) ? strImage4Url : null;
    
    if (strElementName == null || strArtNo == null || strImage4Url == null) {
        return;
    }
    
    $('#' + strElementName + ' img').attr('src', strImage4Url);
    $('#' + strElementName).bind('click', strArtNo, productdetails.productStyleClick);
    $('#' + strElementName).css('display', '');
}
productdetails.productStyleClick = function(e) {
    var strArtNo = (common.isValue(e) && common.isValue(e.data)) ? e.data : null;
    if (strArtNo == null) {
        return false;
    }

    productdetails.open({ data: strArtNo });
    
    if (!productdetails.items.exists(strArtNo)) {
        productdetails.toggleNextPrevDisplayNav(false);
    }
    
    return false;
}

/* handle products, finding next/prev */
productdetails.items = new Object();
productdetails.items.all = [];
productdetails.items.add = function(v) {
    var len = productdetails.items.all.length;
    var all2 = [len + 1];
    for (var i = 0; i < productdetails.items.all.length; i++) {
        all2[i] = productdetails.items.all[i];
    }
    all2[len] = v;
    productdetails.items.all = all2;
}
productdetails.items.addAll = function(v) {
    v = (common.isValue(v)) ? v : null;
    if (v == null) {
        return;
    }
    var arrArtNo = v.split(productdetails.defaultSepChar);
    for (var i = 0; i < arrArtNo.length; i++) {
        if (common.isValue(arrArtNo[i])) {
            productdetails.items.add(arrArtNo[i]);
        }
    }
    
}
productdetails.items.findNext = function(v) {
    for (var i = 0; i < productdetails.items.all.length; i++) {
        if (productdetails.items.all[i] == v && i + 1 < productdetails.items.all.length) {
            return productdetails.items.all[i + 1];
        }
    }
    return null;
}
productdetails.items.findPrev = function(v) {
    for (var i = 0; i < productdetails.items.all.length; i++) {
        if (productdetails.items.all[i] == v && i != 0) {
            return productdetails.items.all[i - 1];
        }
    }
    return null;
}
productdetails.items.exists = function(v) {
    for (var i = 0; i < productdetails.items.all.length; i++) {
        if (productdetails.items.all[i] == v) {
            return true;
        }
    }
    return false;
}
productdetails.items.isLast = function(v) {
    for (var i = 0; i < productdetails.items.all.length; i++) {
        if (productdetails.items.all[i] == v) {
            if (i == productdetails.items.all.length - 1) {
                return true;
            }
        }
    }
    return false;
}
productdetails.items.isFirst = function(v) {
    for (var i = 0; i < productdetails.items.all.length; i++) {
        if (productdetails.items.all[i] == v) {
            if (i == 0) {
                return true;
            }
        }
    }
    return false;
}
productdetails.checkProdQS = function() {
    if (common.isValue(common.getQueryStringValue('ViewArtDet'))) {
        var strArtNo = common.getQueryStringValue('ArtNo');
        if (common.isValue(strArtNo)) {
            productdetails.open({ data: strArtNo });
            productdetails.toggleNextPrevDisplayNav(false);
        }
    }
}
productdetails.createProdLink = function(strArtNo, strOverridePageUrl) {
    strOverridePageUrl = (strOverridePageUrl != null) ? strOverridePageUrl : EPI_CURRENT_PAGE_URL;
    var strUrl = common.utils.replaceNegLookBehind((EPI_CURRENT_BASE_URL + strOverridePageUrl), common.utils.regExp_dblSlash, '/');

    strUrl += (strUrl.indexOf('?') > -1) ? '&amp;' : '?';
    strUrl += 'ViewArtDet=1&amp;ArtNo=' + strArtNo;
    return strUrl;
}
productdetails.panelBlogShareClick = function(e) {//productdetails.panelShareClick = function(strArtNo) {
    var strImageUrl = document.getElementById('ProductDetailsPanelImage3').src; //var strImageUrl = document.getElementById('ProductDetailsPanelMainImage').src;
    var strArtNo = (common.isValue(e) && common.isValue(e.data)) ? e.data : null;

    var m = new RegExp(common.utils.reqExp_absUrl).exec(strImageUrl);
    if (m == null || (m.index != 0)) {
        strImageUrl = (EPI_CURRENT_BASE_URL + strImageUrl);
    }
    
    strImageUrl = common.utils.replaceNegLookBehind(strImageUrl, common.utils.regExp_dblSlash, '/');
    var strLink = '<a href="' + productdetails.createProdLink(strArtNo, null) + '" title="' + strArtNo + '"><img src="' + strImageUrl + '" alt="' + strArtNo + '" border="0" /></a>';
    document.getElementById('ProductDetailsPanelBlogShareBoxInput').value = strLink;
    $(productdetails.ProductDetailsPanelBlogShareBoxSelector).css('display', '');

    return false;
}
productdetails.initCommonPanelFunctions = function() {
    // add events
    $('#ProductDetailsPanelBlogShareButton').bind('click', productdetails.CurrentArtNo, productdetails.panelBlogShareClick);
    $('#ProductDetailsPanelBlogShareCloseButton').bind('click', productdetails.panelBlogShareCloseClick);
    $('#ProductDetailsPanelShareFBButton').bind('click', productdetails.shareFBClick);
    $('#ProductDetailsPanelShareTwitterButton').bind('click', productdetails.shareTwitterClick);
    
    // add texts 
    $('#ProductDetailsPanelBlogShareButton').text($('#ProductDetailsPanelContentFieldBlogShareButton').text());
    $('#ProductDetailsPanelPrintButton').text($('#ProductDetailsPanelContentFieldPrintButton').text());
    $('#ProductDetailsPanelFavoriteButton').text($('#ProductDetailsPanelContentFieldAddFavoriteButton').text());
    $('#ProductDetailsPanelZoomImage').text($('#ProductDetailsPanelContentFieldZoomImageButton').text());
    $('#ProductDetailsPanelShareFBButton').text($('#ProductDetailsPanelContentFieldShareFBButton').text());
    $('#ProductDetailsPanelShareTwitterButton').text($('#ProductDetailsPanelContentFieldShareTwitterButton').text());
}
productdetails.panelBlogShareCloseClick = function(e) {
    $(productdetails.ProductDetailsPanelBlogShareBoxSelector).css('display', 'none');
    return false;
}
productdetails.shareFBClick = function(e) {
    var strUrl = 'http://www.facebook.com/sharer.php?u=' + encodeURIComponent(productdetails.createProdLink(productdetails.CurrentArtNo, EPI_CURRENT_PRODUCT_DETAILS_URL)) + "&amp;t=" + encodeURIComponent(productdetails.CurrentArtNo);
    var win = window.open(strUrl, 'sharefb', 'toolbar=0,status=0,width=626,height=436');
    if (win) {
        win.focus();
    }
    return false;
}
productdetails.shareTwitterClick = function(e) {
    var strUrl = 'http://twitter.com/home?status=' + encodeURIComponent(productdetails.createProdLink(productdetails.CurrentArtNo, null) + ' | ' + $('#ProductDetailsPanelPriceText').text() + ' | ' + productdetails.CurrentArtNo);
    var win = window.open(strUrl, 'sharetwitter', 'scrollbars=1,toolbar=1,status=1,width=800,height=600');
    if (win) {
        win.focus();
    }
    return false;
}
// end: dev, share related

$(document).ready(function() {
    $(window).bind('resize', productdetails.adjustPos);
    $(window).bind('scroll', productdetails.adjustPos);
    $('body').bind('scroll', productdetails.adjustPos); // ie6 seems to need this
    $(productdetails.CloseButtonSelector).bind('click', productdetails.close);
    productdetails.adjustPos(true);

    productdetails.checkProdQS();
});