﻿/***** Wheel *****/
(function($) {
	$.extend({
		CocaWheel:{
			/* Vars */
			active:null,
			back:null,
			backimg:$("#background").get(0),
			backurl:$("#background").get(0).src.substring(0,$("#background").get(0).src.lastIndexOf("/")+1),
			config:new Object(),
			core:null,
			current:null,
			delay:500,
			direct:false,
			geom:new Object(),
			preventshow:false,
			out:null,
			paper:null,
			timeout:null,
			scale:1,
			wills:$("#wills").get(0),
			zones:new Array(),
			activeCore: false,
			/* Rotateback */
			rotateback:function(id){
				var img = $.CocaWheel.zones[id].img;
				var geom = $.CocaWheel.geom;
				clearTimeout($.CocaWheel.timeout);
				if(!$.CocaWheel.out){
					//setTimeout(function(){
						$.CocaWheel.showback(img);
					//}, 200);
				} else {
					if(id > $.CocaWheel.current && id == $.CocaWheel.config.items.length-1 && $.CocaWheel.current == 0){
						$.CocaWheel.back.rotate($.CocaWheel.back._.rt.deg-360, geom.cx, geom.cy);
						$.CocaWheel.back.animate({rotation: [img._.rt.deg, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
					}else if(id < $.CocaWheel.current && id == 0 && $.CocaWheel.current == 6){
						$.CocaWheel.back.rotate($.CocaWheel.back._.rt.deg+360, geom.cx, geom.cy);
						$.CocaWheel.back.animate({rotation: [img._.rt.deg, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
					}else
						$.CocaWheel.back.animate({rotation: [img._.rt.deg, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
				}
				$.CocaWheel.current = id;
			},			
			/* Enter */
			enter:function(id){
				
				/*
					Add exception for sub part not depending of the wheel
				*/
				if (!$.CocaWheel.zones[id]) {
					return;
				}
				
				var img = $.CocaWheel.zones[id].img;
				var geom = $.CocaWheel.geom;
				var p = $.CocaWheel.zones[id].part;
				$.CocaCola.section.activeCore = false;
				clearTimeout($.CocaWheel.zones[id].delay);
				$.CocaWheel.zones[id].delay = setTimeout(function(){
					img.animate({scale: [1.38, 1.38, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
				},250);
				$.CocaWheel.rotateback(id);
				if($.CocaCola.home){
					$.CocaWheel.core.remove();
					$.CocaWheel.core = $.CocaWheel.paper.image($.CocaWheel.config._rep+$.CocaWheel.config.items[id]._center, geom.cx-95*$.CocaWheel.scale/2, geom.cy-95*$.CocaWheel.scale/2, 95*$.CocaWheel.scale, 95*$.CocaWheel.scale);
					$.CocaWheel.core.mouseover(function(){
						$.CocaCola.section.activeCore = true;
					}).mouseout(function(){
						$.CocaCola.section.activeCore = false;
					});
					// Sync
					if(!$.CocaWheel.preventshow){
						$.CocaWheel.hidewills();
						$.CocaCola.section.mask();
						if($.CocaWheel.wills){
							$($.CocaWheel.wills.current).removeClass("visible");
							$.CocaWheel.wills.current = $("li:eq("+id+")",$.CocaWheel.wills).addClass("visible");
						}
					}
				}
				// If hasActive
				if($.CocaWheel.active && $.CocaWheel.active[1] != id){
					$.CocaWheel.active[0].animate({scale: [1, 1, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
				}
			},
			/* Leave */
			leave:function(id){
				var img = $.CocaWheel.zones[id].img;
				var geom = $.CocaWheel.geom;
				clearTimeout($.CocaWheel.zones[id].delay);
				if(!$.CocaWheel.active){
					img.animate({scale: [1, 1, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
					if($.CocaCola.home){
						$.CocaWheel.core.remove();
						$.CocaWheel.core = $.CocaWheel.paper.image($.CocaWheel.config._rep+"core.png", geom.cx-95*$.CocaWheel.scale/2, geom.cy-95*$.CocaWheel.scale/2, 95*$.CocaWheel.scale, 95*$.CocaWheel.scale);
						$.CocaWheel.core.mouseover( function(){	$.CocaCola.section.mask(); });
						$.CocaWheel.core.mouseover(function(){
							$.CocaCola.section.activeCore = true;
						}).mouseout(function(){
							$.CocaCola.section.activeCore = false;
						});
						// Back to default state
						clearTimeout($.CocaWheel.timeout);
						$.CocaWheel.timeout = setTimeout(function(){
							$.CocaWheel.hideback();
							$.CocaWheel.showwills();
							
							if(!$.CocaCola.section.activeCore)
								$.CocaCola.section.clear();		
						}, 200);
					}
				} else {
					if(parseFloat($.CocaWheel.active[1]) != id){
						img.animate({scale: [1, 1, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
					}
					// Back to active state
					$.CocaWheel.core.mouseover(function(){
						$.CocaCola.section.activeCore = true;
					}).mouseout(function(){
						$.CocaCola.section.activeCore = false;
					});
					clearTimeout($.CocaWheel.timeout);
					$.CocaWheel.timeout = setTimeout(function(){
						$.CocaWheel.rotateback($.CocaWheel.active[1]);
						$.CocaWheel.active[0].animate({scale: [1.38, 1.38, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
						if($.CocaCola.home){
							$.CocaWheel.showwills();
							$.CocaCola.section.clear();
							
							if(!$.CocaCola.section.activeCore)
								$.CocaCola.section.clear();	
						}
					}, 200);
					
					if($.CocaCola.home){
						$.CocaWheel.core = $.CocaWheel.paper.image($.CocaWheel.config._rep+$.CocaWheel.config.items[$.CocaWheel.active[1]]._center, geom.cx-95*$.CocaWheel.scale/2, geom.cy-95*$.CocaWheel.scale/2, 95*$.CocaWheel.scale, 95*$.CocaWheel.scale);
					}
				}
				// If not Home
				if(!$.CocaCola.home){
					clearTimeout($.CocaWheel.timeout);
					$.CocaWheel.timeout = setTimeout(function(){
						$.CocaWheel.hideback();
					}, 200);
				}
			},
			/* Activate */
			activate:function(id){
				
				/*
					Add exception for sub part not depending of the wheel
				*/	
				if (!$.CocaWheel.zones[id]) {
					
					if($.CocaCola.home){
						
						var content = $.CocaWheel.config.itemsExtra[id]._sub;					
						$.CocaWheel.backimg.src = $.CocaWheel.backurl+content._img;						
						$.CocaCola.section.change(content);
						
						var nav = $.CocaWheel.config.itemsExtra[id]._nav;
						$.CocaCola.navigation.activate($("#"+nav).get(0));
						document.location = $("#"+nav).attr("href");
						window.scrollTo(0,0);
						
					} else {
						var nav = $.CocaWheel.config.itemsExtra[id]._nav;
						$.CocaCola.transition.show($("#"+nav).get(0));
					}
					
					return;
				}
				
				var img = $.CocaWheel.zones[id].img;
				var geom = $.CocaWheel.geom;
				if($.CocaWheel.active && $.CocaWheel.active[1] != id){
					$.CocaWheel.active[0].animate({scale: [1, 1, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
				}
				$.CocaWheel.active = [img,id];
				$.CocaWheel.current = id;
				if($.CocaCola.home){
					// Subhome transitions
					if($.CocaWheel.config.items[id]._sub){
						$.CocaCola.changing = true;
						// Stop wills rotation
						if($.CocaWheel.wills){
							$.CocaCola.wills.stop($.CocaWheel.wills);
						}
						// If direct change
						if($.CocaWheel.direct){
							$.CocaWheel.enter(id);
						}
						var content = $.CocaWheel.config.items[id]._sub;
						$.CocaWheel.backimg.src = $.CocaWheel.backurl+content._img;
						$.CocaCola.section.change(content);
						// Activate navigation
						var nav = $.CocaWheel.config.items[id]._nav;
						$.CocaCola.navigation.activate($("#"+nav).get(0));
						document.location = $("#"+nav).attr("href");
						window.scrollTo(0,0);
					}
				} else {
					var nav = $.CocaWheel.config.items[id]._nav;
					$.CocaCola.transition.show($("#"+nav).get(0));
				}
			},
			/* Show back */
			showback:function(img){
				var geom = $.CocaWheel.geom;
				$.CocaWheel.back.rotate(img._.rt.deg, geom.cx, geom.cy);
				$.CocaWheel.back.animate({scale: [1.4, 1.4, geom.cx, geom.cy]}, $.CocaWheel.delay, ">");
				$.CocaWheel.out = true;
			},
			/* Hide back */
			hideback:function(){
				var geom = $.CocaWheel.geom;
				$.CocaWheel.back.animate({scale: [.2, .2, geom.cx, geom.cy]}, $.CocaWheel.delay, "<");
				$.CocaWheel.out = false;
			},
			/* Show wills */
			showwills:function(){
				// Sync
				if($.CocaWheel.wills && $.CocaCola.changing == false && !$.CocaWheel.active){
					$.CocaCola.wills.start($.CocaWheel.wills);
					$($.CocaWheel.wills).removeClass("hover").prev().css({ visibility:"visible" }).next().next().css({ visibility:"visible" });
				}
			},
			/* Hide wills */
			hidewills:function(){
				// Sync
				if($.CocaWheel.wills && !$.CocaWheel.active){
					$.CocaCola.wills.stop($.CocaWheel.wills);
					$($.CocaWheel.wills).addClass("hover").prev().css({ visibility:"hidden" }).next().next().css({ visibility:"hidden" });
				}
			}
		}
	});
})(jQuery);

// Builder
Raphael.fn.roundMenu = function (cx, cy, r, config, stroke) {

    var rad = Math.PI / 180,
		chart = this.set(),
		part = new Array();

    $.CocaWheel.geom = { cx: cx, cy: cy, r: r };
    $.CocaWheel.paper = this;
    $.CocaWheel.back = $.CocaWheel.paper.image(config._rep + config._part, cx, cy, 90 * $.CocaWheel.scale, 70 * $.CocaWheel.scale);
    $.CocaWheel.core = $.CocaWheel.paper.image(config._rep + config._core, cx - 95 * $.CocaWheel.scale / 2, cy - 95 * $.CocaWheel.scale / 2, 95 * $.CocaWheel.scale, 95 * $.CocaWheel.scale);

    // Sector
    function sector(cx, cy, r, startAngle, endAngle, id, params) {
        var x1 = cx + r * Math.cos(-startAngle * rad),
			x2 = cx + r * Math.cos(-endAngle * rad),
			y1 = cy + r * Math.sin(-startAngle * rad),
			y2 = cy + r * Math.sin(-endAngle * rad);

        part.push([["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"], id, params]);

        //return $.CocaWheel.paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
    }

    //Create Sector
    function createSector() {
        for (var i in part) {
            var id = part[i][1];
            part[i]['sector'] = $.CocaWheel.paper.path(part[i][0]).attr(part[i][2]);
            part[i]['sector']._id = id;

            // Events
            part[i]['sector'].mouseover(function () {
                $.CocaWheel.enter(this._id);
            }).mouseout(function () {
                $.CocaWheel.leave(this._id);
            }).click(function () {
                /* Webtrends */ dcsMultiTrack('WT.ac', $.CocaWheel.config.items[this._id]._wt_ac, 'WT.ad', $.CocaWheel.config._wt_ad);
                $.CocaWheel.activate(this._id);
            });
        }
    }

    // Image
    function image(image, cx, cy, startAngle, anglePlus) {
        var image = $.CocaWheel.paper.image(image, cx, cy, 90 * $.CocaWheel.scale, 70 * $.CocaWheel.scale);
        image.rotate(360 - startAngle - anglePlus, cx, cy);
        return image;
    }
	
    var angle = -90,
		total = config.items.length,
		start = 0,
		zones = new Array();
    process = function (j) {
		
        var value = config._rep + config.items[j]._part,
				angleplus = 360 / total,
				img = image(value, cx, cy, angle, angleplus),
				p = sector(cx, cy, r, angle, angle + angleplus, j, { fill: "#F00", stroke: stroke, "stroke-width": 0, "stroke-opacity": 0, cursor: "pointer", "fill-opacity": 0 });
        zones.push(p);
		
		$.CocaWheel.zones.push({ img: img, icon: value, part: p, delay: null });

        // If Home
        if ($.CocaCola.home) {
            // If has sub
            if (config.items[j]._sub) {
                // Store subhome config
                var sub = $("#" + config.items[j]._sub).addClass(config.items[j]._sub).get(0);
                config.items[j]._sub = sub;
                sub.removeAttribute("id");
                $.store(sub);
                // Preload images
                preload.push({ img: $.CocaWheel.backurl + sub._img });
            }
        }

        // Pre cache
        var cache = $.CocaWheel.paper.image(config._rep + config.items[j]._center, cx - 95 * $.CocaWheel.scale / 2, cy - 95 * $.CocaWheel.scale / 2, 95 * $.CocaWheel.scale, 95 * $.CocaWheel.scale);
        cache.remove();

        angle += angleplus;
        chart.push(p);
        start += .1;
    };

    // Process
    for (var i = 0; i < total; i++) {
        process(i);
    }

    createSector();
	$.CocaWheel.core = $.CocaWheel.paper.image(config._rep+config._core, cx-95*$.CocaWheel.scale/2, cy-95*$.CocaWheel.scale/2, 95*$.CocaWheel.scale, 95*$.CocaWheel.scale);

    $.CocaWheel.back.toBack();
    // Reactive zones to front if different from IE9 (Beta)
    /*if(navigator.userAgent.indexOf("MSIE 9") == -1){
    for(var i=0; i<zones.length; i++){
    zones[i].toFront();
    }
    }*/
    $.CocaWheel.back.animate({ scale: [.2, .2, cx, cy] }, $.CocaWheel.delay, ">");

    // If home
    if ($.CocaCola.home) {
        // Default state
        $("#wheel").css({ opacity: 0, visibility: "hidden" });
        $(".wheel .back").css({ width: 0, height: 0, marginTop: 0, marginLeft: 100, display: "block" });
    }

    // If default zone
    if ($.CocaCola.activezone != null) {
        $.CocaWheel.preventshow = true;
       	$.CocaWheel.enter($.CocaCola.activezone);
       	$.CocaWheel.activate($.CocaCola.activezone);
        $(".bodies").removeClass("visible").addClass("hidden");
    }

    return chart;
};

(function (raphael) {
	$("#wheel").each(function(){
		$.CocaWheel.config = $.store(this);
		$.CocaWheel.scale = $.CocaWheel.config._scale;
		
		$.CocaWheel.config.items = new Array();
		
		/*
			Add exception for sub part not depending of the wheel
		*/
		$.CocaWheel.config.itemsExtra = {};
		
		$("#wheel a").each(function(i){			
			
			if($(this).hasClass("on")){
				$.CocaCola.activezone = i;
			}
			
			/*
			 Add exception for sub part not depending of the wheel
			*/
							
			var store = $.store(this);
				
			if (store._part) {				
				$.CocaWheel.config.items.push(store);
			}
			else {				
				$.CocaWheel.config.itemsExtra[i] = store;				
				if (store._sub) {							
               	 	var sub = $("#" + store._sub).addClass(store._sub).get(0);
                	$.CocaWheel.config.itemsExtra[i]._sub = sub;
					if (sub) {
						sub.removeAttribute("id");
						$.store(sub);
					}
				}
			}
			
			
			$(this).remove();
		});

		raphael("wheel", 250*$.CocaWheel.scale, 250*$.CocaWheel.scale).roundMenu(125*$.CocaWheel.scale,125*$.CocaWheel.scale,125*$.CocaWheel.scale, $.CocaWheel.config, "#fff");

	});
})(Raphael.ninja());
