/**
 * @author christopher
 */
/*
 * Rotator object proxy
 */
var Rotator = {
    overlayAlpha: 100,
    fadeInterval: 20,
    fadeIncrement: 20,
    
    Slides: 0
};

var make_rotator = function(){

    var params = arguments[0];
    
    var myself = 0;
    
    var DOM = {
        outerDiv: params.outerDiv,
        innerDiv: "rotator_Inside",
        dbgDiv: "rotator_dbg",
        buttons: {
            div: 0,
            container_id: "rotator_btn_Container",
            height: 300,
            template: {
                className: "rotator_btn_slot",
                innerClassName: "rotator_btn_slot_content",
                width: 138,
                height: 60,
                align_vert: function(text){
                    var maxH = DOM.buttons.template.height;
                    var w = text.offsetWidth;
                    var h = text.offsetHeight;
                    var diff = maxH - h;
                    if (diff) {
                        var pad = diff / 2;
                        text.style.paddingTop = pad + "px";
                    }
                }
            }
        },
		
		overlay: {
			div: 0,
			id: "rotator_overlay",
			width:480,
			height:70,
			style:	"width:480px;height:70px;" +
					"position: relative;z-index:99;background-color:#222;border-top:1px solid #666;" +
					"color:#fff;text-align:left;top:-71px;left:0px;" +
					"filter:alpha(opacity=80);-khtml-opacity:0.8; -moz-opacity:0.8; opacity:0.8;" +
					"text-shadow:0 0 0 #000;",
			title: {
				div: 0,
				style:	"padding:5px 10px 3px 10px;text-align:left;color:#fff;font-size:18px;font-weight:bold;" +
						"margin:0px;"
			},
			teaser: {
				div: 0,
				style:	"padding:3px 10px 3px 10px;text-align:left;color:#fff;font-size:14px;font-weight:normal;" +
						"margin:0px;"
			}
			
		},
		
		image: {
			height:300
		}
    };
    
    var Config = {
        rotate_ival: 5000,
        rotate_ival_id: 0
    };
    
    var Assets = {
        slides: Rotator.Slides,
        slide_index: -1
    };
    
    
    var do_rotate = function(){
		Assets.slide_index++;
        if (Assets.slide_index >= Assets.slides.length) {
            Assets.slide_index = 0;
        }
		
        for (var i = 0; i < Assets.slides.length; i++) {
			if(i == Assets.slide_index) { continue; }
            var s = Assets.slides[i];
            s.obj.img.style.display = "none";
            s.obj.button.className = s.obj.button.className.replace(/ rotator_btn_slot_Focused/g, "");
        }
        
        
        
        var s = Assets.slides[Assets.slide_index];
        s.obj.img.style.display = "block";
        s.obj.button.className += " rotator_btn_slot_Focused";
		DOM.overlay.title.div.innerHTML = s.longTitle;
		DOM.overlay.teaser.div.innerHTML = s.longTease;
        
        if (!Config.rotate_ival_id) {
            Config.rotate_ival_id = setInterval(myself.rotate, Config.rotate_ival);
        }
    };
    
    
    var force_slide = function(index){
        if (Assets.slide_index >= 0) {
            var s = Assets.slides[Assets.slide_index];
            s.obj.img.style.display = "none";
        }
        Assets.slide_index = index - 1;
        do_rotate();
        clearInterval(Config.rotate_ival_id);
        Config.rotate_ival_id = 0;
    };
    
    
    /*
     * {"shortTitle":"SUGARLAND",
     * "longTitle":"Some fans are nice; some not so much",
     * "shortTease":"On Bad Attitudes...",
     * "longTease":"As the band is forced to cancel shows because of her throat condition,",
     * "overlay":"horz",
     * "img":"/media/images/promoslider/sugarland.jpg",
     * "url":"/music/news/143"}
     */
    var place_rotator = function(){
        DOM.outerDiv = getElement(DOM.outerDiv);
        DOM.dbgDiv = Element("div");
        DOM.outerDiv.appendChild(DOM.dbgDiv);
        
        DOM.buttons.div = Element("div");
        DOM.buttons.div.id = DOM.buttons.container_id;
        DOM.outerDiv.appendChild(DOM.buttons.div);
        
        DOM.innerDiv = Element("div");
        
        for (var i = 0; i < Assets.slides.length; i++) {
            var s = Assets.slides[i];
            s.obj = {
                img: (function(){
                    var d = FilledElement("img", s.img);
                    d.border = 0;
                    d.alt = s.shortTease;
                    
                    var a = FilledElement("a", d);
                    a.href = s.url;
                    
                    var x = FilledElement("div", a);
					x.style.height = "300px";
					x.style.overflow = "hidden";
                    x.style.display = "none";
                    x.title = s.shortTease;
                    return x;
                })()
            };
            DOM.innerDiv.appendChild(s.obj.img);
            
            var text = FilledElement("div", [FilledElement("h2", s.shortTitle), FilledElement("span", s.shortTease, "teaser")], DOM.buttons.template.innerClassName);
            var btn_clicker = FilledElement("a", text);
            btn_clicker.href = s.url;
            btn_clicker.onmouseover = (function(sIndex){
                var index = sIndex;
                return (function(){
                    myself.show_slide(index);
                });
            })(i);
            
            btn_clicker.onmouseout = function(){
                myself.resume_rotate();
            }
            
            var button = FilledElement("div", btn_clicker, DOM.buttons.template.className);
            button.style.width = DOM.buttons.template.width + "px";
            button.style.height = DOM.buttons.template.height + "px";
            button.onmouseover = (function(sIndex){
                var index = sIndex;
                return (function(){
                    myself.show_slide(index);
                });
            })(i);
            button.onmouseout = function(){
                myself.resume_rotate();
            }
            
            s.obj.button = button;
            
            DOM.buttons.div.appendChild(button);
            
            DOM.buttons.template.align_vert(text);
        }
        
        DOM.outerDiv.appendChild(DOM.innerDiv);
		DOM.innerDiv.style.overflow = "hidden";
		
		DOM.overlay.div = FilledElement("div",
			[
				(function() {
					DOM.overlay.title.div = FilledElement("div","Long Title Goes Here","title");
					return DOM.overlay.title.div;
				})(),
				(function() {
					DOM.overlay.teaser.div = FilledElement("div","Long Teaser goes right here.","teaser");
					return DOM.overlay.teaser.div;
				})()
			]
		);
		DOM.overlay.div.id = DOM.overlay.id;
		DOM.innerDiv.appendChild(DOM.overlay.div);
		
		

		var styles = document.styleSheets[0];
		if (styles.insertRule) {
			styles.insertRule("#" + DOM.overlay.id + '{' + DOM.overlay.style + '}', 0);
			styles.insertRule("#" + DOM.overlay.id + ' .title {' + DOM.overlay.title.style + '}', 0);
			styles.insertRule("#" + DOM.overlay.id + ' .teaser {' + DOM.overlay.teaser.style + '}', 0);
		} else {
			if (styles.addRule) {
				styles.addRule("#" + DOM.overlay.id, DOM.overlay.style, 0);
				styles.addRule("#" + DOM.overlay.id + ' .title', DOM.overlay.title.style, 0);
				styles.addRule("#" + DOM.overlay.id + ' .teaser',  DOM.overlay.teaser.style, 0);
			}
		}
		if(BrowserDetect.browser == "Explorer") {
			DOM.overlay.div.style.left = "0px";
		}

    }
    
    
    
    /////////////////
    //place_rotator();
    return {
        init: function(){
            myself = this;
            place_rotator();
            this.rotate();
        },
        
        rotate: function(){
            do_rotate();
        },
		
		resume_rotate: function() {
			Assets.slide_index--;
			do_rotate();
		},
        
        show_slide: function(index){
            force_slide(index);
        }
    }
}
