dojo.require("site.cart");
dojo.require("dojox.json.ref");

var config;
var last_id;
var totalSteps;
var visible_items;
var video_config;

var min_time;
var max_time;

var intId = 0; 
var currentStep = 0; 
var productTagFlag = 0;

function getTime() {
    var vp = dojo.byId("howToVideoPlayer");
    if (!vp) { return "0000"; }
    var t = vp.queryTime();
    var ts = Math.floor(t);
    var time = sec2min(ts);
    ////console.log("sec2min: ", time);
    return time;
}

function playerIsReady() {
    var vp = dojo.byId("howToVideoPlayer");
    if (vp && dojo.isFunction(vp.queryTime)) {
        dojo.publish("/flash/event/cuePoint", []);
        clearInterval(intId);
    }
}

function sec2min(s) {
    var min;
    var sec;
    if (s > 59) {
        min = Math.floor(s/60);
        sec = Math.floor(s%60);
    } else {
        min = "00";
        sec = s;
    }

    if (sec < 10) {
        sec = "0" + sec.toFixed().toString();
    }

    var time = min.toString() + sec.toString();
    return time;
}

dojo.addOnLoad(function() {
    //video_config.skus = page_data.video_products;
//    video_config.skus = sort_check(page_data.video_products);
    config = dojox.json.ref.resolveJson(video_config);
    //console.log("resolved video config: ", config);
 
    //config = video_config;
    totalSteps = config.cue_points.length;
    last_id = config.cue_points[totalSteps - 2].id;
 
    if (config.ext_copy) {
        if (config.ext_copy.intro) {
        	dojo.byId("tip_title").innerHTML = "&nbsp;"; 
          dojo.byId("tip_copy").innerHTML = config.ext_copy.intro;
        }
    } 

    min_time = parseInt(video_config.cue_points[0].id, 10);
    max_time = parseInt(video_config.cue_points[video_config.cue_points.length-1].id, 10);
});

dojo.subscribe("/flash/event/cuePoint", this, function(args) {  
    var time = getTime();
    if (time == "0000") { return; }
 
    var cidx;
    var i = -1;
    var diffs = [];
    
    /* This whole routine can be sped up if we just calculate the times once before 
       processing any cue points. */
    //console.log("time: ", time, " min: ", min_time, " max: ", max_time);
    if (time < min_time-2) {
    	//console.log("out of bounds -- early"); 
    	cidx = -1;  
    } else if (time >= max_time) { 
       // console.log("out of bounds");
        cidx = video_config.cue_points.length - 1;  
    } else {
        diffs = [];
        var r_some = dojo.some(video_config.cue_points, function(cp) {
            i++;
            var ptime = parseInt(cp.id, 10);
            var diff = ptime - time;
	  diffs.push(diff);
            //console.log("time: ", time, " cp.id: ", cp.id, " diff: ", diff);
            return (time < ptime && diff >= 2);
        });
        //console.log("r_some: ", r_some, " some idx: ", i, " diffs length: ", diffs.length);
        cidx = (r_some && i !== 0) ? i - 1 : video_config.cue_points.length - 1;  
    }
	
	showCue = function() { 
	    //console.log("cidx: ", cidx); 
	    if (cidx==-1) {
	    	dojo.query("#video_prod_container").toggleClass("hidden", true);
	    	dojo.byId("tip_title").innerHTML = "&nbsp;"; 
	    	dojo.byId("tip_copy").innerHTML = (config.ext_copy.intro) ? config.ext_copy.intro : "&nbsp;"; 
	    	return;
	    }
	    
	    var cue = video_config.cue_points[cidx];  
	    var completed = (cue.id > last_id); 
	 
	    //console.log("cue: ", cue.id);  
	        	   
	    dojo.byId("tip_title").innerHTML = (completed) ? "&nbsp;" : "Step " + (cidx+1) + " of " + (totalSteps-1); 
	    dojo.byId("tip_copy").innerHTML = cue.copy;  
	    
	    dojo.query("#video_prod_container").toggleClass("hidden", false);  
	    dojo.query("#vid_prods .rel_prod").toggleClass("hidden", true);
	    dojo.query("#vid_prods .swatch_by_color .swatch_hex_container").forEach(function(n) {n.style.display = "none"; });
 
	    var vid_prods = dojo.byId("vid_prods"); 
	    var s = ""; 
	    var product = {}; 
	    var sku = {};
	    
	    dojo.forEach(cue.prods, function(p, idx) {   
	        s = p.split("PROD")[1].split("SKU");   
	       //IE bug: dojo.byId('num')returns a false positive in IE, even if num is typecast as a string
	        product = document.getElementById(s[0]);
	        sku = dojo.byId("swatch_"+s[1].toString()); 
	        
	        if (!!product) { 
	        	   vid_prods.appendChild(product);
	        	   dojo.toggleClass(product, "hidden", false);   
	        	    if (!!sku) { 
	            	sku.style.display = "block";
	        	    } 
	        } 
	        
	        var prodIdCounter;
								
			if ((time < max_time) && (!productTagFlag)) {
				for (prodIdCounter=0; prodIdCounter<page_data.video_products.length;prodIdCounter++) {
					var prod_name = page_data.video_products[prodIdCounter].name;
					var prod_cat = page_data.video_products[prodIdCounter].skus[0].path.split("PROD");
					var prod_id = page_data.video_products[prodIdCounter].product_id;
					cmCreateProductviewTag(prod_id,prod_name,prod_cat[0]);
				}
			productTagFlag = 1;
			}
	    });  
	    
	}; //end showCue function		
	
	
	
    if (diffs[cidx] > 1) {
		var to = diffs[cidx] * 1000;
		//console.log("diff > 1 ==== ", to);
		setTimeout("showCue()", to);
    } else {
	showCue();
    }

});



dojo.require("generic.flashx");
dojo.addOnLoad(function() { 
    var cart = new site.cart();
    
    var is_white = (dojo.query(".white_video_player").length>0) ? 1:0; 
 
    var request_args = [{
        "tmpl": [{
            "path": "/product/includes/product/product_block.tmpl",
            "args": { 
                "product_data": page_data.video_products,
                "alt_node_id": false,
                "white": is_white
            }
        }]
    }];
    var callback = function(resp) {
        //console.log("RESP:", resp);
        var prod_node = dojo.byId("vid_prods");
        if ( prod_node ) {
            var prod_container = dojo.byId("video_prod_container");
            dojo.toggleClass(dojo.byId("video_prod_container"), "hidden", true);
            //console.log("RES: ", resp.result);
            prod_node.innerHTML = resp.result.output["/product/includes/product/product_block.tmpl"];
            dojo.query("#vid_prods .rel_prod").addClass("hidden");
            dojo.query("#vid_prods .swatch_by_color .swatch_hex_container").forEach(function(n) { n.style.display = "none"; });
            productDisplay.init({
                data: page_data.video_products,
                initButtons: true,
                altNodeId: false,
                altType: true
            });
        }

        intId = setInterval("playerIsReady()", 1000);

        /* if (dojo.isIE) { setTimeout(function() { dojo.publish("/flash/event/cuePoint", []); }, 3000); }
        else { dojo.publish("/flash/event/cuePoint", []); } */
    };
    cart.callRemote("include",request_args,callback,callback);

    var params = {
        quality: "high",
        menu: "true",
        swliveconnect: "true",
        allowscriptaccess: "always",
        bgcolor: "#000000",
        scale: "noScale",
        allowfullscreen: "true",
        wmode: "transparent",
        flashvars: dojo.objectToQuery(flashvars)
    };

    var attr = {
        id: "howToVideoPlayer",
        name: "howToVideoPlayer",
        data: "/flash/_video_player/howToVideoPlayer_query.swf",
        width: "100%",
        height: "100%",
        hspace: 0,
        vspace: 0,
        align: "top"
    };

    if ( dojo.byId("flash_placeholder") ) {
        generic.flash.Api.embedSwf(attr, params, "flash_placeholder");
    }
});

