﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("bokCM.Ajax");

bokCM.Ajax.Rotator = function(element) {
    bokCM.Ajax.Rotator.initializeBase(this, [element]);
    this._element = element;
    this._ads;
    this._rotateSpeed = 10000;
    this._adNumber;
    this._timeoutID;
    this._controls = false;
    this._adDiv;
    this._previousButton;
    this._nextButton;
    this._pauseButton;
    this._advanceClickHandler;
    this._divClicked;
}

bokCM.Ajax.Rotator.prototype = {
    get_rotateSpeed: function()
    {
        return this._rotateSpeed;
    },
    set_rotateSpeed: function(value)
    {
        this._rotateSpeed = value;
    },
    get_controls: function()
    {
        return this._controls;
    },
    set_controls: function(value)
    {
        this._controls = value;
    },
    get_ads: function()
    {
        return this._ads;
    },
    set_ads: function(value)
    {
        this._ads = value;
    },

    initialize: function() {
        bokCM.Ajax.Rotator.callBaseMethod(this, 'initialize');
               
        if (this._controls)
        {         
        
            this._advanceClickHandler = Function.createDelegate(this, this._advanceClick);
             
            this._previousButton = document.createElement("a"); 
            this._previousButton.id = "previousButton"; 
            this._previousButton.innerHTML = "previous"; 
            $addHandler(this._previousButton, "click", this._advanceClickHandler);
            
            this._pauseButton = document.createElement("a");
            this._pauseButton.id = "pauseButton";
            this._pauseButton.innerHTML = "pause";
            $addHandler(this._pauseButton, "click", this._advanceClickHandler);
                      
            this._nextButton = document.createElement("a");
            this._nextButton.id = "nextButton";
            this._nextButton.innerHTML = "next";
            $addHandler(this._nextButton, "click", this._advanceClickHandler);
            
            
            element.appendChild(this._previousButton);
            element.appendChild(this._pauseButton);
            element.appendChild(this._nextButton);
        }
        
        var onClickHandler = Function.createDelegate(this, this._onClick);
        $addHandlers(this._element, 
        {
            "click": onClickHandler
        }, this);
               
        this._ads = new Array();               
                
        this.load();
    },
    dispose: function() {        
        $clearHandlers(this.get_element());
        bokCM.Ajax.Rotator.callBaseMethod(this, 'dispose');
    },
    
    load: function()
    {     
        for(var item in this._element.childNodes)
        {
            var obj = this._element.childNodes[item];
            
            if (obj.tagName == "DIV")
            {
                var ele = $get(obj.id);
                
                this.findFormElements(ele);
                
                ele.style.visibility = 'hidden';
                ele.style.display = 'none';
                
                Array.add(this._ads, obj);
            }
        }
             
        this._adNumber = this.randomNumber();             
        this.rotate();
    },
    findFormElements: function(ele)
    {
        for(var item in ele.childNodes)
        {
            var obj = ele.childNodes[item];
            
            if (obj.nodeType == "1")
            {
                if (obj.id != "")
                {
                    var childElement = $get(obj.id);
                    
                    if (obj.tagName == "INPUT")
                    {
                        var onFocusHandler = Function.createDelegate(this, this._onFocus);
                        var onBlurHandler = Function.createDelegate(this, this._onBlur);
                        
                        $addHandlers(childElement, 
                        {
                            "focus": onFocusHandler,
                            "blur": onBlurHandler
                        }, this);
                    }
                    else
                    {
                        if (childElement.childNodes.length > 0)
                        {
         
                            this.findFormElements(childElement);
                        }
                    }
                }
            }
        }
    },
    rotate: function()
    {
        for(var item in this._ads)
        {
            var element = this._ads[item];
            element.style.visibility = 'hidden';
            element.style.display = 'none';
        }
    
        this.toggleDisplay('visible');
        this._timeoutID = setTimeout(Function.createDelegate(this, this.incrementNumber), this._rotateSpeed);
    },
    toggleDisplay: function(display)
    {   
        var element = this._ads[this._adNumber];
        
        element.style.visibility = 'visible';
        element.style.display = 'block';
    },
    randomNumber: function()
    {
    	var dat = new Date();
	    dat = (dat.getTime()+"").charAt(2);
	    if (dat.length == 1)
	    {
		    //number below is one less than the number of items in the array
		    var num = Math.random()*(this._ads.length-1);
		    this._adNumber =  Math.round(num);
		}
	    else
	    {
		    this._adNumber = 0;
		}
		
		if (this._adNumber < 0)
		{
		    this._adNumber = 0;
		}
		
	    return this._adNumber;
    },
    incrementNumber: function()
    {
        this._adNumber++;
        
        if (this._adNumber == this._ads.length)
        {
            this._adNumber = 0;
        }
        
        this.rotate();
    },
    decrementNumber: function()
    {
        this._adNumber--;
        
        if (this._adNumber < 0)
        {
            this._adNumber = this._ads.length-1;
        }
        
        this.rotate();
    },
    onAdvanceClick: function(sender)
    {
        clearTimeout(this._timeoutID);
        switch(sender.id)
        {
            case "previousButton":
                this.decrementNumber();
                break;
            case "nextButton":
                this.incrementNumber();
                break;
            case "pauseButton":
                if (sender.innerHTML == "play")
                {
                    sender.innerHTML = "pause";
                    this.incrementNumber();
                }
                else
                {
                    sender.innerHTML = "play";
                }
                break;
        } 
    },
    _advanceClick: function(e)
    {
        this.onAdvanceClick(e.target);
    },
    _onClick: function(e)
    {
        clearTimeout(this._timeoutID);
        this._divClicked = true;
    },
    _onFocus: function(e)
    {
       clearTimeout(this._timeoutID); 
    },
    _onBlur: function(e)
    {
        /*if (this._divClicked != true)
        {
            this.rotate();
        }*/
    }
}
bokCM.Ajax.Rotator.registerClass('bokCM.Ajax.Rotator', Sys.UI.Control);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();