var PRODUCT_JSON_URL = "/jsonrpc.json";


document.observe("dom:loaded", function() {

	// Need to include cat id with product id, if we can.
	// This handles special product categories that may not have all the product skus.
	var prod = PRODUCT_ID;
	if ( CATEGORY_ID && CATEGORY_ID.length > 0 ) {
		prod = CATEGORY_ID + prod;
	}

	
	var params = [{
	    product : [prod],
	    product_fields : [ "PARENT_CAT_ID", "DEFAULT_CAT_ID", "PRODUCT_ID", "PRODUCT_NAME", "product_altname", "DESCRIPTION", "AVERAGE_RATING" , "TOTAL_REVIEW_COUNT", "RECOMMENDED_PERCENT", "ONLY_RATINGS_COUNT" ,"SHORT_DESC", "PROD_SKIN_TYPE", "prod_skin_type_string", "AVERAGE_RATING" ,"IMAGE_NAME", "DISPLAY_ORDER", "SMALL_IMAGE", "LARGE_IMAGE", "THUMBNAIL_IMAGE","PRODUCT_USAGE", "WORKS_WITH_1", "WORKS_WITH_2", "WORKS_WITH_3", "WORKS_WITH_4", "WORKS_WITH_5", "WORKS_WITH_6", "FORMULA", "COVERAGE", "BENEFITS", "SKIN_CONCERN", "SKIN_CONCERN_1", "SKIN_CONCERN_2", "SKIN_CONCERN_3", "sku", "shaded", "sized", "url"],
		sku_fields : ["SKU_ID", "PRODUCT_ID", "DISPLAYNAME", "SHADENAME", "SHADE_DESCRIPTION", "SKIN_TYPE", "skin_type_string", "PRODUCT_SIZE", "DISPLAY_ORDER", "shopping_id", "STRENGTH", "PRODUCT_PRICE", "SMOOSH_DESIGN", "smoosh_path", "INVENTORY_STATUS", "REFILLABLE", "PRICE", "FORMATTED_PRICE", "HEX_VALUE", "hex_value_string", "FINISH", "COLOR_FAMILY_NAME", "FINISH_2", "COLOR_GROUP", "COLOR_TYPE", "SKINTONE", "UNDER_TONE", "LIFE_OF_PRODUCT"]
	}];

    productPage.data = new CatProdPageData(params, false, function() {
        //
        // global CatProdData object is used by the cart object
        // so we better cram some data in there
        mergeIntoGlobalCatProdData(productPage.data);
        productPage.spp.init();
        productPage.spp.recommendWidget.init(productPage.data.product);
    });
});

productPage.spp = function() {
    var recommendContainerID = 'recommend_accordion';
    return {
        init: function() {
            var args = {
                containerID     : "fc-col-1",
                productData     : productPage.data.product
            };
            args.viewContainerID = 'spp-productview';

            if (foundationResults && Object.isArray(foundationResults) && foundationResults.length >0) {
                args.shadeRangeSkuIDs = foundationResults;
                productPage.inlineProductView = new productPage.ProductView.ShadeRange(args);
		  
                var average_rating = productPage.data.product.AVERAGE_RATING;
		  var review_count = productPage.data.product.TOTAL_REVIEW_COUNT;
		  var recommended_percent = productPage.data.product.RECOMMENDED_PERCENT;
		  var ratings = productPage.data.product.ONLY_RATINGS_COUNT;
		  var prodattributes = average_rating + "-_-" +review_count+ "-_-" +recommended_percent+ "-_-" +ratings;
			 
		//cmCreateProductviewTag(productPage.data.product.PRODUCT_ID, productPage.data.product.PRODUCT_NAME, productPage.data.product.PARENT_CAT_ID, prodattributes ,null);
            } else {
                productPage.inlineProductView = new productPage.ProductView.Inline(args);
            }
            productPage.inlineProductView.setDetailContainerID('detail-container').build();
        },
        recommendWidget : {
            accordionWidget : null,
            accordions : [],
            init : function(productData) {
                var self = this;
                
                this.accordions.push({
                    containerNode : $('works_well_container'),
                    wrapperID     : "works_well_wrapper",
                    headerNode    : $('works_well_header'),
                    hasProducts   : false,                    
                    productArray  : $A(
                        [productData.WORKS_WITH_1,
                         productData.WORKS_WITH_2,
                         productData.WORKS_WITH_3]).select(function(item){
                            return item !== null;
                    })
                });
                
                this.accordions.push({
                    containerNode : $('similar_container'),
                    wrapperID     : "similar_wrapper",
                    headerNode    : $('similar_header'),
                    hasProducts   : false,                    
                    productArray  : $A(
                        [productData.WORKS_WITH_4,
                         productData.WORKS_WITH_5,
                         productData.WORKS_WITH_6]).select(function(item){
                            return item !== null;
                    })
                });

                this.accordionHeaders = $$('#recommend_accordion .accordion_toggle');
                var callbackFnIndex = 0
                var callbackFn = function(acc) {
                    callbackFnIndex++;
                    if (!acc.hasProducts) { // if this accordion does not have any product thumbs
                        // hide the containerNode & headerNode
                        acc.headerNode.style.display = "none";
                        acc.containerNode.style.display = "none";
                    }
                    // If this is the last time the callback is called
                    if (callbackFnIndex === self.accordions.length) {
                        // If the "Works Well" accordion contains products
                        if (self.accordions[0].hasProducts) {
                            // activate the Works Well accordion
                            self.accordionWidget.activate(self.accordions[0].headerNode);
                            
                        // else if the "Similar Products" accordion contains products
                        } else if (self.accordions[1].hasProducts) {
                            // activate the "Similar Products" accordion
                            self.accordionWidget.activate(self.accordions[1].headerNode);
                        // else if neither contains products
                        } else {
                            // hide the whole she-bang
                            $(recommendContainerID).style.display = "none";
                        }
                    }
                };
                this.accordions.each(function(acc) {
                    self.buildPane(acc, callbackFn);
                });
                this.accordionWidget = new Accordion(recommendContainerID);
            },
            
            buildPane: function (args, callbackFn) {
                var self = this;
                if (args.productArray.length < 1) {
                    callbackFn(args); // callback if no products in accordion
                } else {
                	// Load up the data.
                	// When it comes back, create the minithumbs
                	productPage.loadProductData({
                		productIDs: args.productArray,
                		callback: function(productData) {
                			
                			// Pull out the products we want to work with.
                			var prods = productData.data.get('product').all.findAll(function(product){
               					// Do we have any skus in this product?
                                var match = ( product.sku && product.sku.length > 0 &&
                                				product.sku.find(function(s){ return Object.isNumber(s.INVENTORY_STATUS) && s.INVENTORY_STATUS < 3;})
                                				? true : false );
                                    
                            	////////////////////////////////////////////////////////////
                            	// COREMETRICS:
                            	// While we're here, try to hack the url of each product to include the CM tag
                            	if ( match && product.PARENT_CAT_ID ) {
                            		var ptag = '?cm_vc=X' + product.PARENT_CAT_ID;
                            		var purl = product.url + ptag;
                            		product.url = purl;
                            	}
                            	////////////////////////////////////////////////////////////
                            	
                            	return match;
                			});
                			
                			args.containerNode.update('');
                			
                			// If we have some products, build the table
                			if ( prods.length > 0 ) {
                				args.hasProducts = true;
                				args.prodTable = new productPage.miniThumbTable({
                					containerID: args.containerNode,
	        						maxItems: prods.length,
	        						startIndex: 0,
	        						cellsPerRow: 1,
	        						mode: 0,
	        						tableData: prods
                				});
                			}
                			
                			// Do the final callback
                			callbackFn(args); 
                		}
                	});
                	
                }
            }
        }
    };
}();


