av.page.productView = {};

av.page.productView.productFields = ["PRODUCT_ID", "PRODUCT_NAME", "DESCRIPTION", "SHORT_DESC", "url", "PROD_SKIN_TYPE", "prod_skin_type_string", "IMAGE_NAME", "DISPLAY_ORDER", "SMALL_IMAGE", "LARGE_IMAGE", "THUMBNAIL_IMAGE", "LARGE_IMAGE2", "PRODUCT_USAGE", "AVERAGE_RATING", "TOTAL_REVIEW_COUNT", "ONLY_RATINGS_COUNT","RECOMMENDED_PERCENT","RATING_IMAGE", "sku", "shaded", "sized", "PRODUCT_ATTRIBUTE", "MISC_FLAG", "SUBHEADER", "MPP_IMAGE2", "BENEFITS", "PRODUCT_USAGE", "TIPS", "RITUAL", "is_gift_set", "IS_COMBO", "WWW_SID_1", "COMBO_IMAGE2", "TOTAL_VALUE", "LARGE_ALPHA2", "PARENT_CAT_ID"];
av.page.productView.skuFields = ["SKU_ID", "PRODUCT_ID", "DISPLAYNAME", "SHADENAME", "SHADE_DESCRIPTION", "SKIN_TYPE", "skin_type_string", "PRODUCT_SIZE", "shopping_id", "STRENGTH", "PRODUCT_PRICE", "SMOOSH_DESIGN", "smoosh_path", "INVENTORY_STATUS", "REFILLABLE", "PRICE", "FORMATTED_PRICE", "HEX_VALUE", "hex_value_string", "FINISH", "COLOR_FAMILY_NAME", "REDEV_SMOOSH_DESIGN","VIRTUAL_SKU_ID", "DEFAULT_SKU", "shoppable", "stock_status_message", "SIZE", "COLOR_FAMILY_NAME"];
var CATEGORY_ID;

av.page.qs_page_selectedskuid = '';

av.page.productView.fetchData = function(args) {
    var productID = args.productID;
    var queryCategoryID = args.categoryID;
    CATEGORY_ID = args.categoryID ;
    var callbackFn = args.callback;
    
    if (productID && productID.length > 0) {
        var productFields = av.page.productView.productFields;
        var skuFields = av.page.productView.skuFields;
//        var categoryFields = ["CATEGORY_ID", "DISPLAY_NAME"];
        var categoryFields = ["CATEGORY_ID", "DISPLAY_NAME", "breadcrumb_url"];
        var wwwSkuFields = ["SKU_ID", "product", "PRODUCT_ID", "DISPLAYNAME", "SHADENAME", "SHADE_DESCRIPTION", "SKIN_TYPE", "skin_type_string", "PRODUCT_SIZE", "shopping_id", "STRENGTH", "PRODUCT_PRICE", "SMOOSH_DESIGN", "smoosh_path", "INVENTORY_STATUS", "REFILLABLE", "PRICE", "FORMATTED_PRICE", "HEX_VALUE", "hex_value_string", "FINISH", "COLOR_FAMILY_NAME", "REDEV_SMOOSH_DESIGN","VIRTUAL_SKU_ID", "collection_category"];

        var productQueryValue = productID;
        if (queryCategoryID && queryCategoryID.length > 0) {
            productQueryValue = queryCategoryID + productQueryValue;
        }

        var params = [{
            "product": [productQueryValue],
            "product_fields": productFields,
            "sku_fields": skuFields
        }];
        if (queryCategoryID && queryCategoryID.length > 0) {
            params[0].category = [queryCategoryID];
            params[0].category_fields = categoryFields;
        }
        var jsonrpcArgs = {
            method : "prodcat.byid",
            params : params,
            onSuccess: function(response) {
                var responseObj = response.responseText.evalJSON(true);
                if (responseObj[0].error === null) {
                    var rawProductData = responseObj[0].result;
                    if (typeof rawProductData === "object") {
                        var mergedProductData = av.productData.mergeSkusIntoProducts(rawProductData.product, rawProductData.sku);
                        if (callbackFn && typeof callbackFn === "function") {
                            callbackFn(mergedProductData, rawProductData);
                        }
                    }
                } else {
                    console.log(responseObj[0].error);
                }
            }
        };
        av.JSONRPC.fetch(jsonrpcArgs);
    }
};


av.page.productView.initDescription = function(args) {
    var options = {};
    Object.extend(options, args || {});
    if (!(options.descriptionContainerNode && options.productData)) {
        return;
    }
    
    options.productData.imagePath = options.productData.shaded ? options.productData.LARGE_ALPHA2 : options.productData.LARGE_IMAGE2;
    
    var prices = { };                  
    prices.showTotal = options.productData.TOTAL_VALUE ? 'block' : 'none';                    
    prices.showSelect = options.productData.TOTAL_VALUE && !(options.productData.shaded) ? 'none' : 'block';
    prices.totalValueFormatted = options.productData.TOTAL_VALUE ? options.productData.TOTAL_VALUE.toFixed(2) : '';
    Object.extend(options.productData, prices);
    
    if (options.descriptionContainerNode) {
        //options.productData.url  = options.legacyObject.URL;  URL CHANGE BUG
        //if (options.productData.PRODUCT_ID && page.PRODUCTS && page.PRODUCTS.PRODUCTS[options.productData.PRODUCT_ID].PRODUCT.URL) {
        //    //console.log("OLD URL:"+options.productData.url);
        //    options.productData.url = page.PRODUCTS.PRODUCTS[options.productData.PRODUCT_ID].PRODUCT.URL;
        //    //console.log("NEW URL:"+options.productData.url);            
        //}

        av.templateFactory.get("single-product-description").evaluateCallback({
            object: options.productData,
            callback: function(html) {
                options.descriptionContainerNode.insert(html);
                
                //IE 6 PNG fix
                var browserName=navigator.appName; 
                var browserVer=parseInt(navigator.appVersion); 
                
                if ( browserName=="Microsoft Internet Explorer" && browserVer < 7 ) {
                    Event.observe('qs_product_image_large', 'load', function(event) {
                        ie6PNGFix(this);
                    });
                }
                
                if (typeof options.productData.AVERAGE_RATING == 'number' && isFinite(options.productData.AVERAGE_RATING)) {
                    var rating_args = { };
                    rating_args.ratingRounded = Math.round(options.productData.AVERAGE_RATING*10)/10;            		  
                    Object.extend(options.productData, rating_args);
                    
                    var productRatingNode = options.descriptionContainerNode.select("div#product-rating")[0];
                    if (productRatingNode) { productRatingNode.style.display = "block"; }
                }
                
                
                var productCollectionNode = options.descriptionContainerNode.select("div#product-collection")[0];
                var collectionInfo = options.legacyObject.PRODUCT.COLLECTION;

                if (collectionInfo) {
                    var productCollectionImage = new Element('img', {src: collectionInfo.IMAGE});
                    var productCollectionLink = new Element('a', {href: collectionInfo.URL}).update(productCollectionImage);
                    
                    if ( browserName=="Microsoft Internet Explorer" && browserVer < 8 ) {   // use tables for IE < 8... blech
                        var table = new Element('table');
                        var body = new Element('tbody');
                        var row = new Element('tr');
                        var cell = new Element('td');
                        table.style.height = "20px"
                        cell.insert(productCollectionLink);
                        row.insert(cell);
                        body.insert(row);
                        table.insert(body);
                        productCollectionNode.insert(table);
                        productCollectionNode.style.display = "block";
                    } else {                                                        // otherwise centering can be done with styles
                        var productCollectionDiv = new Element('div');
                        productCollectionDiv.style.display = "table-cell";
                        productCollectionDiv.style.verticalAlign = "middle";
                        productCollectionDiv.insert(productCollectionLink);
                        productCollectionNode.insert(productCollectionDiv);
                        productCollectionNode.style.height = "20px";
                        productCollectionNode.style.display = "table";                        
                    }
                }
                
                //replacing with legacy object
                /*var params = [{
                    "PRODUCT_ID": options.productData.PRODUCT_ID
                }];
                var jsonrpcArgs = {
                    method : "quickshop.get_product_collection",
                    params : params,
                    onSuccess: function(response) {
                        var responseObj = response.responseText.evalJSON(true);
                        if (responseObj[0].error === null) {
                            var productCollectionNode = options.descriptionContainerNode.select("div#product-collection")[0];
                            
                            var productCollectionImage = new Element('img', {src: '/images/products2/collection/collection_' + responseObj[0].result.collection_category_image});
                            var productCollectionLink = new Element('a', {href: responseObj[0].result.collection_category_url}).update(productCollectionImage);
                            
                            productCollectionNode.insert(productCollectionLink);
                            productCollectionNode.style.display = "block";
                            
                        } else {
                            console.log(responseObj[0].error);
                        }
                    }
                };
                av.JSONRPC.fetch(jsonrpcArgs);*/
            
                
                var qsSelectData = [];
                var qsSkuByColorFamily = [];
                var qsColorFamilyLegacy = [];
                options.productData.sku.each( function(sku) {
                    var label = '';
                    
                    var product = options.legacyObject;
                    //console.log("got the prod from legacyObject");
                    var skuLegacy = product.SKUS[sku.SKU_ID];
                    
                    if (options.productData.shaded) {                        
                        var hexvalues = skuLegacy.HEXVALUE;
                        var numnbsp = 6 / hexvalues.length;
                        var nbsp = '';
                        var colors = '';
                        for ( i=0; i < numnbsp; i++ ) {
                            nbsp = nbsp + '&nbsp;'; 
                        }
                        hexvalues.each( function(hexvalue) { 
                            colors = colors + '<span style="background: ' + hexvalue + ';">' + nbsp + '</span>'; 
                        });
                        label = colors + " " + sku.SHADENAME;
                        
                        var sku_data = { };
                        sku_data.HEXVALUES = hexvalues;
                        Object.extend(sku, sku_data);
                                            
                    } else {
                        label = sku.STRENGTH || sku.SIZE;
                        if (sku.shoppable) { label = label + ' ' + skuLegacy.PRICE; }
                        if (options.productData.TOTAL_VALUE) { label = product.PRODUCT.SKUSELECT[0].LABEL }
                    }
                    
                    if ( browserName=="Microsoft Internet Explorer" && options.productData.TOTAL_VALUE && options.productData.shaded ) {
                        var productTotalValueNode = options.descriptionContainerNode.select("div#product-totalvalue")[0];
                        productTotalValueNode.style.marginBottom = "0";
                    }
                    
                    var giftsetPriceNode = options.descriptionContainerNode.select("span#giftset-price")[0];
                    giftsetPriceNode.innerHTML = skuLegacy.PRICE; // ### THIS IS THE ACTUAL PRICE
                    
                    qsSelectData.push(new Object);
                    qsSelectData[qsSelectData.length-1].LABEL = label;
                    qsSelectData[qsSelectData.length-1].VALUE = sku.SKU_ID;
                    
                    if (sku.COLOR_FAMILY_NAME) { skuCFName = sku.COLOR_FAMILY_NAME; }
                    else { skuCFName = 'None'; }
                    
                    if (!qsSkuByColorFamily[skuCFName]) { qsSkuByColorFamily[skuCFName] = new Array() };
                    qsSkuByColorFamily[skuCFName].push(sku.SKU_ID);
                    
                    if (sku.DEFAULT_SKU) { 
                        qsSelectData[qsSelectData.length-1].SELECTED = sku.DEFAULT_SKU 
                        av.page.qs_page_selectedskuid = sku.SKU_ID;
                    }
                });
                
                for (colorFamily in qsSkuByColorFamily) {
                    if (!(qsSkuByColorFamily[colorFamily] instanceof Function)) {
                        qsColorFamilyLegacy.push(new Object);
                        qsColorFamilyLegacy[qsColorFamilyLegacy.length-1].NAME = colorFamily;
                        qsColorFamilyLegacy[qsColorFamilyLegacy.length-1].IMAGE = new Object();
                        qsColorFamilyLegacy[qsColorFamilyLegacy.length-1].IMAGE.NAME = '/images/color_family/cf_' + (colorFamily.toLowerCase()) +'.gif';
                        qsColorFamilyLegacy[qsColorFamilyLegacy.length-1].SKUIDS = qsSkuByColorFamily[colorFamily];
                    }
                }
                                
                var productSelectNode = options.descriptionContainerNode.select("div#product-skuselect")[0];
                if (productSelectNode) {
                    var selectedSku;
                    if (options.productData.sku.length > 1) {
                        addToCartNode = options.descriptionContainerNode.select("a#addtocart-button")[0];
                        if (addToCartNode) {
                            addToCartNode.name = 'JOINED_ID_' + options.productData.PRODUCT_ID + '_CART_CART_ACTION_ADD';
                        }
                        
                        var product_skuselectbox = GenericBehavior.addBehavior(
                            productSelectNode,
                            BehaviorSelectBox,
                            {
                                fieldid: 'product_skuselect_field',
                                name: 'JOINED_ID_' + options.productData.PRODUCT_ID + 
                                    '_COMBINE_1_QUANTITY_1_VALUENAME_SKU',
                                options: qsSelectData,
                                options_width: '153px',
                                myProductid: options.productData.PRODUCT_ID,
                                myProductElem: options.descriptionContainerNode,
                                onchange: function(me) {
                                    av.page.selectSku(options.legacyObject, me.selectedOption().VALUE);
                                }
                            }
                        );
                        
                        
                        product_skuselectbox.onDraw();
                        selected_sku = product_skuselectbox.selectedOption().VALUE;
                        
                    } else if (options.productData.sku.length == 1) {
                        addToCartNode = options.descriptionContainerNode.select("a#addtocart-button")[0];
                        if (addToCartNode) {
                            addToCartNode.name = 'JOINED_ID_' + options.productData.PRODUCT_ID + '_CART_CART_ACTION_ADD_' + 'QUANTITY_1_SKU_' + qsSelectData[0].VALUE;
                        }
                        productSelectNode.innerHTML = qsSelectData[0].LABEL;
                        selected_sku = qsSelectData[0].VALUE;
                    }
                    if ( browserName != "Microsoft Internet Explorer") {
                        productSelectNode.style.height = '20px';
                    }
                    av.page.selectSku(options.legacyObject, selected_sku);
                }
                
                
                var productTabs = new TabbedContent({ tabContainerID : 'qs_tabs' });
                var tabs = [];
                
                if (options.productData.is_gift_set) {
                    tabs = ['BENEFITS_GIFT_SET'];
                } else if (options.productData.shaded) {
                    tabs = ['SHADES','BENEFITS','TIPS'];
                } else if (options.productData.IS_COMBO) {
                    tabs = ['BENEFITS','PRODUCT_USAGE','PURCHASE_TOGETHER'];
                } else {
                    tabs = ['BENEFITS','PRODUCT_USAGE','TIPS'];
                }
                
                if (productTabs) {
                    tabs.each( function(tab) {
                        if (options.productData) {
                            var content = "";
                        
                            if (tab == "BENEFITS_GIFT_SET") { content = options.legacyObject.PRODUCT.BENEFITS; }
                            else if (tab == "SHADES") { content = ''; }
                            else if (tab == "PURCHASE_TOGETHER" ) { content = ''; }
                            else { 
                                if (typeof(options.legacyObject.PRODUCT[tab])!='undefined') {
                                    content = options.legacyObject.PRODUCT[tab];
                                } else {
                                    content = options.productData[tab];
                                }
                                
                                if (!content) { return; }
                            }
                            
                            productTabs.createTab({
                                tabID : tab,
                                tabLabelClass : tab,
                                tabContainerID : 'qs_tabs',
                                tabLabel : "<span>" + tab + "</span>",
                                tabsPrefix: 'qs_',
                                content : content                                
                            });
                            
                            if (tab == "PURCHASE_TOGETHER") {  
                                var params = [{
                                    "SKU_ID": options.productData.WWW_SID_1,
                                    "skuFields": av.page.productView.skuFields
                                }];
                                var jsonrpcArgs = {
                                    method : "quickshop.get_combo_sku",
                                    params : params,
                                    onSuccess: function(response) {
                                        var responseObj = response.responseText.evalJSON(true);
                                        if (responseObj[0].error === null) {
                                            options.productData.sku.each( function(sku) {
                                                if (sku.DEFAULT_SKU) {
                                                    var combo_data = { };
                                                    combo_data.COMBO_PRICE = (responseObj[0].result.WW_PRICE + sku.PRICE).toFixed(2);
                                                    combo_data.COMBO_SIZE = sku.PRODUCT_SIZE;
                                                    combo_data.COMBO_URL = options.productData.url + '&cm_vc=X' + page.CATEGORY_ID;
                                                    combo_data.COMBO_TYPE = responseObj[0].result.COMBO_TYPE;
                                                    combo_data.COMBO_SKU_ID = sku.SKU_ID;
                                                    combo_data.COMBO_shopping_id = sku.shopping_id;
                                                    combo_data.WW_TYPE = responseObj[0].result.WW_TYPE;
                                                    combo_data.WW_IMAGE = responseObj[0].result.WW_IMAGE;
                                                    combo_data.WW_URL = responseObj[0].result.WW_URL + '&cm_vc=X' + page.CATEGORY_ID;
                                                    combo_data.WW_SKU_ID = responseObj[0].result.WW_SKU_ID;
                                                    combo_data.WW_shopping_id = responseObj[0].result.WW_shopping_id;
                                                    Object.extend(options.productData, combo_data);
                                                }
                                            });
                                            
                                            av.templateFactory.get("purchase-together").evaluateCallback({
                                                object: options.productData,
                                                callback: function(html) {
                                                    productTabs.updateTab('qs_'+tab,"<div id=\"qs_PURCHASE_TOGETHER_content\">" + html + "</div>");
                                                    
                                                    var purchaseTogetherNode = options.descriptionContainerNode.select("a#purchase-together-button")[0];
                                    				var purchaseTogetherButton = av.CartButton.Add({
                                                       	domNode : purchaseTogetherNode,
                                                       	progressNode : options.descriptionContainerNode.select("div#purchase-together-text .loading-add-to-bag")[0],
                                                       	combo: 1,
                                                       	skuID : options.productData.COMBO_SKU_ID,
                                                       	shoppingID : options.productData.COMBO_shopping_id.toString(),
                                                       	combo_skuID : options.productData.WW_SKU_ID,
                                                       	combo_shoppingID : options.productData.WW_shopping_id.toString(),
                                                       	onSuccess : function() {
                                                       	    document.fire("cart:add:success", this.cartArgs);
                                                       	},
                                                       	onFailure : function() {console.log("page button fail");}
                                                   	});
                                                }
                                            });
                                        } else {
                                            console.log(responseObj[0].error);
                                        }
                                    }
                                };
                                av.JSONRPC.fetch(jsonrpcArgs);
                            } else if (tab == "SHADES") {
                                av.templateFactory.get("shades").evaluateCallback({
                                    object: options.productData,
                                    callback: function(html) {                                        
                                        productTabs.updateTab('qs_'+tab,"<div id=\"qs_SHADES_content\">" + html + "</div>");
                                        
                                        var colorFamilyHolder = options.descriptionContainerNode.select("div#product-sku-colorfamily-holder")[0];
                                        var colorFamilyRepeater = options.descriptionContainerNode.select("div#product-sku-colorfamily-repeat")[0];
                                        var containerHeightTracker = new Array;
                                        
                                        shadeFamilyLooper = GenericBehavior.addBehavior(
                                            colorFamilyHolder,
                                            BehaviorLooper,
                                            {
                                                data: qsColorFamilyLegacy, 
                                                repeat: colorFamilyRepeater,
                                                action: function (a) {
                                                    var node = a.node;
                                                    var family = a.value;
                                                    var index = a.index;
                                                    
                                                    var i = a.index;
                                                    var name_image = node.el('product_sku_colorfamily_image_name');		
                                                	if (family.NAME == 'None') {
                                                	    node.style.width = '204px';
                                                	    name_image.parentNode.style.display = 'none';
                                                        containerHeightTracker[0] = (family.SKUIDS.length/4).ceil();
                                                	} else {
                                                	    name_image.src = family.IMAGE.NAME;
                                                	    
                                                	    if (index < 4) {
                                                    	    if (!containerHeightTracker[0]) { containerHeightTracker[0] = family.SKUIDS.length; }
                                                    	    else if (containerHeightTracker[0] < family.SKUIDS.length) { containerHeightTracker[0] = family.SKUIDS.length; }
                                                    	} else {
                                                    	    if (!containerHeightTracker[1]) { containerHeightTracker[1] = family.SKUIDS.length; }
                                                    	    else if (containerHeightTracker[1] < family.SKUIDS.length) { containerHeightTracker[1] = family.SKUIDS.length; }
                                                    	}
                                                	}
                                                	                                                	
                                                	var shadeHolder = GenericUtil.waitFor(function() {
                                                        return node.el('product-sku-colorfamily-color-holder');
                                                    }, 5);
                                                	
                                                	shadeLooper = GenericBehavior.addBehavior(
                                                	    shadeHolder,
                                                        BehaviorLooper,
                                                        {
                                                    	    data: family.SKUIDS,
                                                            without_auto_id: 1,
                                                            repeat: GenericUtil.waitFor(function() {
                                                                    return node.el('product-sku-colorfamily-color-group'); }, 5),
                                                            action: function (a) {
                                                                var gnode = a.node;
                                                                var skuid = a.value;
                                                                var index = a.index;
                                                                var sku;
                                                                
                                                                options.productData.sku.each( function(s) {
                                                                    if (s.SKU_ID == skuid) {
                                                                	    sku = s;
                                                                    }
                                                                });
                                                                
                                                                
                                                                var colors = sku.HEXVALUES;
                                                                
                                                                var colorrepeat = GenericUtil.waitFor(function() {  
                                                                    return gnode.el('product-sku-colorfamily-color');
                                                                }, 5);
                                                                colorrepeat.style.width = Math.floor(47 / colors.length)+'px';
                                                                
                                                                colorLooper = GenericBehavior.addBehavior(
                                                            	    gnode,
                                                                    BehaviorLooper,
                                                                    {
                                                                        data: colors,
                                                                        repeat: colorrepeat,
                                                                        action: function (a) {
                                                                            a.node.style.backgroundColor = a.value;
                                                                        }
                                                                    }
                                                                );
                                                                
                                                                colorLooper.onDraw();
                                                                
                                                                gnode.id = gnode.id+'_'+skuid;
                                                                gnode.onclick = function() {
                                                                    av.page.selectSku(options.legacyObject, skuid);
                                                                };
                                                               
                                                            }
                                                        }
                                                	);
                                                	
                                                	shadeLooper.onDraw();                                                	
                                                	
                                                	if (i == 4) { 
                                                	    var br = document.createElement('br');
                                                	    br.setAttribute('clear', 'all');
                                                	    node.parentNode.insertBefore(br,node);
                                                	}
                                                }
                                            }
                                        );
                                        
                                        shadeFamilyLooper.onDraw();
                                        
                                        var colorFamilyHolderHeight = 0;
                                        for (row in containerHeightTracker) {
                                            if (!(containerHeightTracker[row] instanceof Function)) {
                                                colorFamilyHolderHeight = ( colorFamilyHolderHeight + 15 + ( 30 * containerHeightTracker[row] ) );
                                            }
                                        }
                                        
                                        colorFamilyHolder.style.height = colorFamilyHolderHeight + 'px';
                                        
                                        av.page.pageSelectSku(options.legacyObject, av.page.qs_page_selectedskuid);
                                        productTabs.createScrollBars('qs_SHADES');
                                        
                                    }
                                });
                            }
                        }
                    });
                }
                
                productTabs.setActiveTab('qs_'+tabs[0]);
                
                
                var addButtonNode = options.descriptionContainerNode.select("div.cart_button .btn-add-to-bag")[0];
				var addButton = av.CartButton.Add({
                   	domNode : addButtonNode,
                   	progressNode : options.descriptionContainerNode.select("div.cart_button .loading-add-to-bag")[0],
                   	skuID : options.productData.sku[0].SKU_ID,
                   	shoppingID : options.productData.sku[0].shopping_id.toString(),
                   	onSuccess : function() {
                   	    document.fire("cart:add:success", this.cartArgs);
                   	},
                   	onFailure : function() {console.log("page button fail");}
               	});
               	
               	options.descriptionContainerNode.observe("sku:select", function(evt) {				
                    var skuData = evt.memo;	
					addButton.setCartArgs({
    	                   	skuID      : skuData.SKU_ID,
        	               	shoppingID : skuData.SHOPPING_ID.toString()
            	    });
            	    //toggleAddButton(skuData);
				});
                
                
                if (options.postRenderCallback) {
                    options.postRenderCallback();
                }
            }
        });
    }
};


av.page.productView.initQuickshopLink = function(quickshopLinkNode, productData) {
    if (!Object.isElement(quickshopLinkNode)) {
        return;
    }
    quickshopLinkNode.observe("click", function(evt) {
        evt.preventDefault();
        av.page.productView.launchQuickshop(productData);
    });
};

         
av.page.productView.launchQuickshop = function(product, ww_obj) {
      // if ww_cat exists then we have to add cm_vc to the url for the product link.
    var productData = null;

    var renderQuickshop = function(productData) {
		try {		    
		    var productAttributesValue = productData.AVERAGE_RATING + "-_-" + productData.TOTAL_REVIEW_COUNT + "-_-" + productData.RECOMMENDED_PERCENT + "-_-" + productData.ONLY_RATINGS_COUNT;
		    
		    var catValue = '';
		    var xCatValue = '';
		    if (typeof(ww_obj)!="undefined") {
		        catValue = productData.PARENT_CAT_ID;
		        xCatValue = 'X'+catValue;        
		    } else if (typeof(av.page.categoryID)!="undefined") {
		        catValue = av.page.categoryID;
		    } else {
		        catValue = productData.PARENT_CAT_ID;
		    }
		    
		    var tagData = {
                pageView: 1,
                productView: 1,
                productName: productData.PRODUCT_NAME,
                productId: productData.PRODUCT_ID,
                catId: catValue,
                productAttributes: productAttributesValue,
                xCat: xCatValue
            }
		    
  			tag(tagData, 1, 1); // CoreMetrics
		} catch (err) {
  			console.log(err);
		}

		av.templateFactory.get("quickshop").evaluateCallback({
            callback : function(html) {
                var quickshop_popup = $('quickshop-popup');
                if (quickshop_popup!=null) {
                    quickshop_popup.remove();
                    av.overlay.hide();
                }                
                
                var quickshopWrapperNode = new Element("div", {"class":"quickshop-wrapper popup", "id":"quickshop-popup"});
                $(document.body).insert(quickshopWrapperNode);
                quickshopWrapperNode.insert(html);
                var productViewContainerNode = quickshopWrapperNode.select(".details")[0];
                
                //Set legacy object depending on mpp or spp                
                if (typeof(ww_obj)!="undefined") {
                    //console.log("using ww_obj");
                    var legacyObject = ww_obj;
                } else if (typeof(page.PRODUCTS.PRODUCTS[productData.PRODUCT_ID])!="undefined") {
                    //console.log("using hash");
                    var legacyObject = page.PRODUCTS.PRODUCTS[productData.PRODUCT_ID];
                }
				
				var callbackFn = function() {
                    //productData.url = legacyObject.URL ? legacyObject.URL : productData.url; URL CHANGE BUG
                    var url = productData.url;
                    
                    /*if (ww_cat){
                        url = url + '&cm_vc=X' + ww_cat;
                    } */  	
                    
                    if (page.CATEGORY_ID != 'CATEGORY6621') {
    					var product_name_link = "<a href='" + url + "'>" + productData.PRODUCT_NAME + "</a>";				
                    	var productTitleContainer = quickshopWrapperNode.select("h1")[0];
    					productTitleContainer.update(product_name_link);
    				}
					
					//ensure the buttons have the default sku
					av.page.selectSku(legacyObject, av.page.qs_page_selectedskuid);
					
                    av.overlay.launchPopover(quickshopWrapperNode);
                    var closeButtonNode = quickshopWrapperNode.select("a.close")[0];
                    closeButtonNode.observe("click", function(closeClickEvent) {
                        closeClickEvent.preventDefault();
                        quickshopWrapperNode.remove();
                        av.overlay.hide();
                    });
                    document.observe("cart:add:complete", function(evt) {
                        quickshopWrapperNode.remove();
                        av.overlay.hide();
                    });
                    av.page.replaceSelects();
    								
                };
                var productViewArgs = {
                    descriptionContainerNode : productViewContainerNode,
                    productData              : productData,
                    legacyObject      : legacyObject,
                    postRenderCallback       : callbackFn
                };
                av.page.productView.initDescription(productViewArgs);
            }
        });
    };

    var prod = product;
    if (typeof(mergedProductData)!='undefined') {
        if (typeof(mergedProductData[product])!='undefined') {
            product = mergedProductData[product];        
        } else {
            product = prod;
        }
    } else {
        product = prod;
    }
    
    if (typeof product === "string") {
        console.log("is a string");
        var productID = product;        
        var fetchCallbackFn = function(mergedProductData, rawProductData) {
            renderQuickshop(mergedProductData[productID]);
        };
        
        var cat_id = page.CATEGORY_ID == 'CATEGORY6621' ? page.CATEGORY_ID : '';
        
        var fetchDataArgs = {
            categoryID : cat_id,
            productID  : productID,
            callback   : fetchCallbackFn
        };
        av.page.productView.fetchData(fetchDataArgs);        
    } else if (typeof product === "object") {
        console.log("is an object");
        renderQuickshop(product);
    }
};





av.page.addToCart = function (args) {
    if (av.cart.add) {
        av.cart.add({
            skuID: args.skuID,
            shoppingID : args.shoppingID,
            qty: "1",
            onSuccess : function() {
                document.fire("cart:add:success", args);
            }
        });
    }
};



av.page.selectSku = function (product, skuID) {
	if (!skuID || !product) { return; }
	// using legacy objects for simplicity/consistency
		
	var sku = product.SKUS[skuID];
	
	var cartButton = $('qs-main-content').select("a#addtocart-button")[0];
	var stockMessage = $('qs-main-content').select("div#message")[0];
	var productPrice = $('qs-main-content').select("div#product-price")[0];
	
	stockMessage.innerHTML = sku.MESSAGE || '';
	productPrice.innerHTML = 'Price <strong>' + sku.PRICE + '</strong>' || '';
	
	productPrice.style.display = product.PRODUCT.SHADED && !(product.PRODUCT.TOTALVALUE) ? 'block' : 'none';
	
	cartButton.style.visibility = sku.SHOPPABLE ? 'visible' : 'hidden';
	productPrice.style.visibility = sku.SHOPPABLE ? 'visible' : 'hidden';
	
	//if (!sku.SHOPPABLE) { styler('product_qtybox', {_value: ''}); }
	av.page.pageSelectSku(product, skuID);
    av.page.qs_page_selectedskuid = skuID;
    
    cartButton.fire("sku:select", sku);

}


av.page.pageSelectSku = function (product, skuID) {
    var oldskuid = av.page.qs_page_selectedskuid;
    var oldsku = product.SKUS[oldskuid];
    var sku = product.SKUS[skuID];
    
    var page_style_sku_selected = { border: '2px solid #000000' };
    var page_style_sku_unselected = { border: '2px solid #ffffff' };
    
    var gid = 'product-sku-colorfamily-color-group_';
    styler(gid+oldskuid, page_style_sku_unselected);
    styler(gid+skuID, page_style_sku_selected);
    
    if (product.PRODUCT.SKUSELECT.length > 1) {
    	set_select_value(el('product-skuselect'), skuID);
    }
    
    if (product.PRODUCT.SHADED) {
        styler('sku-image-header', {_src: sku.IMAGE.HEADER});
    } else {
        styler('sku-image-header', {display: 'none'});
    }
    
    
    if (sku.HEXVALUE.length <= 1) {
        /*styler('qs_product_image_large_holder', {
            backgroundImage: 'none',
            backgroundColor: sku.HEXVALUE[0]
        });*/
        styler('qs_product_image_large', {
            backgroundImage: 'none',
            backgroundColor: sku.HEXVALUE[0]
        });
    }
    else {
        // use an underlay - temp image object hack to prevent flashing on ie
        whenimageloaded({
            src: sku.IMAGE.UNDERLAY,
            action: function(img, src) {
                styler('qs_product_image_large', {
                    backgroundColor: 'white',                        backgroundImage: 'url('+src+')'
                });
            }
        });
    }
    
    if (product.PRODUCT.GIFTSET) {
        $('qs_product_image_large').width = 215;
        styler('qs_product_image_large', {
            marginTop: '45px'
        });
        styler('qs_product_image_large_holder', {
            width: '215px'
        });
    }
    
    av.page.qs_page_selectedskuid = skuID;
}





function whenimageloaded(args) {
	var src = args.src;
	var action = args.action;
	var img = new Image();
	img.src = src;
	if (img.complete) {
		action(img, src) ;
	}
	else {
		img.onload = function() { action(img, src); }
	}
}


function set_select_value(sel, value) {
    sel = GenericBehavior.getElementBehaviorsByName(sel, 'BehaviorSelectBox');
    sel = sel[0];
	for (var i=0; i < sel.options.length; i++) {
		if (sel.options[i].VALUE == value) {
            if (sel.setSelectedIndex) { sel.setSelectedIndex(i); }
		}
	}
}


function ie6PNGFix(img) {
	try {
		var src = img.src;
        if (!img.runtimeStyle) { return; }
        
        var imgwidth = img.getWidth();
        var imgheight = img.getHeight();
        
		img.runtimeStyle.filter =
			"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" 
			+ src + "',sizingMethod='scale')";
			
        Event.stopObserving(img.id, 'load');
		img.src = '/images/spacer.gif';
		img.width = imgwidth;
		img.height = imgheight;
		
	} catch(e) { }
}
