/* aaronvenn */

var _settingPlayerContent = false;

if (typeof(avenn)=="undefined") var avenn = {};

avenn.ui = {
    browserContainer : false,
    visibleContentItems : false,
    availableContentWidth : false,
    contentItemMarginRight : false,
    contentItemWidth : 305,
    contentItemMinimumMargin : (navigator.userAgent.toLowerCase().indexOf('mac')>-1 && navigator.userAgent.toLowerCase().indexOf('gecko')>-1)?6:5,
    contentItemMarginLeft : 0,
    browserMargins : 78,
    resizeEndTimeout : -1,
    userHasResized : true,
    resizeTimeout : false,
    isListPage : false,
    //flashReplaceRequired : false,
    docWidth : 0,
    RssUrls : {},
    isIE6 : false,
    documentTitlePrefix : "",
    showEmailLink : false, 
    
    setIsListPage : function (isListPage) {
        this.isListPage = isListPage;
    },
    
    init : function() {
    
        if (document.title.indexOf('Beta') != -1) {
            this.documentTitlePrefix = document.title.substring(0,document.title.indexOf('Beta') + 4)
        }
        
        var browser=navigator.appName
        var b_version=navigator.appVersion
        var version=parseFloat(b_version)
        this.isIE6 = (browser=="Microsoft Internet Explorer" && version<=4);
        
        
        this.browserContainer = $('browser');
        //this.sfHover();
        //initActiveNav();
        
        //prepareTabs();
                
        //addEvent(window, "resize", avenn.ui.setFooter);
        //this.setFooter();
               
                
        if (/MSIE/.test(navigator.userAgent)){
             addEvent(window, "resize", avenn.ui.handleResize);
        }
	    else {
	        addEvent(window, "resize", avenn.ui.handleResizeEnd);
	    }
	    addEvent($('content'),"mousemove",captureMousePosition);	
    },      
    
    resetPageLayout : function (){
        logger.log("uiManager.js : ui : resetPageLayout");
        //this.setFooter();

        avenn.ui.calculateAvailableContentWidth();
        avenn.ui.calculateVisibleContentItems();
        avenn.ui.calculateContentItemMargin();

        this.initPaging();    
        //this.setPanelPositions();
    },

    calculateAvailableContentWidth : function () {
        logger.log("uiManager.js : calculateAvailableContentWidth : caluclating available content width...");
        var _width;
        if (avenn.ui.browserContainer) {
            logger.log("uiManager.js : calculateAvailableContentWidth : found browser container : isListPage = " + avenn.ui.isListPage);
            if (avenn.ui.isListPage) {
                _width = avenn.ui.browserContainer.offsetWidth - avenn.ui.browserMargins;
            }
            else {
                var _masks;
                if ($('player') && $('player').style.display == "block") {
                    _masks = document.getElementsByClassName('mask',$('related'));
                }
                else {
                    _masks = document.getElementsByClassName('mask',$('browser'));
                }
                
                if (_masks.length > 0) {
                    _width = _masks[0].offsetWidth;
                }
                else {
                    logger.log("uiManager.js : calculateAvailableContentWidth : cannot calculate available width until the masks have been drawn");
                    avenn.ui.userHasResized = true;
                    _width = 1;
                }
            }
        }
        else {
            _width = 1;
        }
	    
        if (_width >= 1 || avenn.ui.availableContentWidth < 1){
            avenn.ui.availableContentWidth = _width;
            logger.log("uiManager.js : calculateAvailableContentWidth : set availableContentWidth to " + _width);
        }
        else {
            logger.log("uiManager.js : calculateAvailableContentWidth : cannot set width");
        }
    },
    
    getAvailableContentWidth : function () {
        if (this.userHasResized || this.availableContentWidth <= 1 || isNaN(this.availableContentWidth)) {
            this.calculateAvailableContentWidth();
	    } 
	    return this.availableContentWidth;
    },
    
    calculateVisibleContentItems : function () {
        logger.log("uiManager.js : calculateVisibleContentItems : calculating number of visible content items...");
        var _width = this.getAvailableContentWidth();
	    if (_width != 1) this.userHasResized = false;
	    var _visibleContentItems = Math.floor((_width) / this.contentItemWidth);	
        if (_visibleContentItems == 0) _visibleContentItems = 1;
        
        this.visibleContentItems = _visibleContentItems;
        logger.log("visible content items set: "+this.visibleContentItems);	   
    },
    
    getVisibleContentItems : function (){
	    if (this.userHasResized || this.visibleContentItems <= 0 || isNaN(this.visibleContentItems)) {
	        this.calculateVisibleContentItems(); 
	    }
	    return this.visibleContentItems;
    },
    
    calculateContentItemMargin : function () {
        logger.log("uiManager.js : calculateContentItemMargin : calculating content item margins...");
        var _width = this.getAvailableContentWidth();
        var _whiteSpaceAvailable = _width % this.contentItemWidth;
        
        this.contentItemMarginRight = Math.floor(_whiteSpaceAvailable/(this.getVisibleContentItems()-1)) + this.contentItemMinimumMargin;
    },
    
    getContentItemMargin : function () {
        if (this.userHasResized || !this.contentItemMarginRight || this.availableContentWidth < 1) {
            this.calculateContentItemMargin();
            
        }
	    return this.contentItemMarginRight;
    },
    
    setContentItemMargins : function(contentItemList){
    
	    logger.log("uiManager.js : setContentItemMargins : setting content item margins...");
        var _margin = this.getContentItemMargin();
        if (typeof(contentItemList)=="undefined") {
            var _contentItemsContainers = document.getElementsByClassName('content-items-container');
        }
        else {
            var _contentItemsContainers = [contentItemList];
        }
        for (var i = 0; i < _contentItemsContainers.length; i++) {
	        var _contentItems = document.getElementsByClassName('content-item-container',_contentItemsContainers[i]);
	        for (var j = 0; j < _contentItems.length; j++){
	            if (this.isListPage && j!=0 && (((j+1) % this.visibleContentItems) == 0)) 
	            {
	                _contentItems[j].style.marginRight = 0;
	                _contentItems[j].style.clear = "none";
	            }
	            else
	            {
	                if (this.isListPage && (((j) % this.visibleContentItems) == 0)) 
	                {
	                    _contentItems[j].style.clear = "both";
	                }
	                else
	                {
	                    _contentItems[j].style.clear = "none";
	                }
		            _contentItems[j].style.marginRight = _margin + "px";
		        }
	        }
	   }
    },
    
    setPanelPosition : function (contentItemList, newPos){
        try {
	        logger.log('setPanelPosition '+contentItemList+', '+newPos);
	        var _masks = document.getElementsByClassName('mask',contentItemList.parentNode.parentNode);
	        if (_masks.length>0) {
	            if ((typeof(newPos)=="undefined")||newPos == "undefined") newPos = contentItemList.getAttribute("currentPos");
    	        if (newPos == null) newPos = 0;
	            var _left = (this.contentItemWidth + this.contentItemMarginRight - 5) * newPos * -1;
    	        contentItemList._extended = false;
    	        contentItemList = $(contentItemList);
    	        if (contentItemList.getAttribute("currentPos")!=newPos) {
	                contentItemList.setAttribute("currentPos", newPos);
	                var _effect = new Effect.Move(contentItemList,{x:_left,y:0,mode:'absolute', duration:1, afterFinish:avenn.hijax.insertContentItems});
                }
                else {
                    contentItemList.style.left = _left + "px";
                }
                
                
                if (avenn.ui.isIE6){
                    window.setTimeout("avenn.hijax.updatePanelContent('" + contentItemList.id.replace(/ContentItems/,"") + "', " + newPos + ", " + newPos + this.visibleContentItems + ");",1000);
                }
                else {
                    avenn.hijax.updatePanelContent(contentItemList, newPos, newPos + this.visibleContentItems);
                }
                
	        }
        }
        catch (e) {
            logger.error('setPanelPosition failed',e);
        }
    },
	
    getWindowHeight : function () {
        var windowHeight = 0;
        if (typeof(window.innerHeight) == 'number') {
	        windowHeight = window.innerHeight;
        }
        else {
	        if (document.documentElement && document.documentElement.clientHeight) {
		        windowHeight = document.documentElement.clientHeight;
	        }
	        else {
		        if (document.body && document.body.clientHeight) {
			        windowHeight = document.body.clientHeight;
		        }
	        }
        }
        return windowHeight;
    },

    //setFooter : function () {
        //logger.log("uiManager.js : setFooter");
        //if (document.getElementById) {
	        //var windowHeight = avenn.ui.getWindowHeight();
	        //if (windowHeight > 0) {
	            //var navigationHeight = $('navigation').offsetHeight;
	            //if (typeof(navigationHeight)!="number") navigationHeight = 0;
		        //var contentHeight = $('content').offsetHeight;
		        //var headerHeight =  $('header').offsetHeight;
		        //var footerElement = $('footer');
		        //var panelRelated = $('PanelRelated');
		        //var footerHeight  = footerElement.offsetHeight;
    		   
		        //if (windowHeight - ((navigationHeight + contentHeight + headerHeight + footerHeight)) >= 0) {
			        //footerElement.style.position = 'absolute';
			        //footerElement.style.top = (windowHeight - footerHeight - 0) + 'px';
			        
			        //if (panelRelated) {
			            //alert("F: " + footerHeight + ", C: " + contentHeight + ", H: " + headerHeight + ", W: " + windowHeight + ", R: " + panelRelated.offsetHeight);
			        //    panelRelated.style.height = (windowHeight - (footerHeight + headerHeight + contentHeight - panelRelated.offsetHeight) - 1) + 'px';
			        //}
			        //alert( footerHeight);
			        //alert(windowHeight);
			        //alert(footerElement.style.top);
		        //}
		        //else {
		        //    alert('static');
			        //footerElement.style.position = 'static';
		        //}
	        //}
        //}
    //},
	
	
    // PAGING //
    
    initPaging : function (contentItemList) {
        try {
            
            logger.log("uiManager.js : initPaging");
            var contentItemLists;
            if (typeof(contentItemList) == "undefined") {
                contentItemLists = document.getElementsByClassName('content-items',$('browser'));
            }
            else {
                var contentItemLists = [contentItemList];
            }
            
            var innerContentList = document.getElementsByClassName('content-item-container',$('browser'));
			
            if (contentItemLists.length > 0) {
                logger.log("uiManager.js : initPaging : found "+contentItemLists.length+" panels");
                if ((contentItemLists[0].getAttribute('scroll') == "true")){
                    this.isListPage = false;
    	            var _visibleContentItems = this.getVisibleContentItems();
                   
                    for (var i = 0; i < contentItemLists.length ; i++) {
                        var contentItemList = contentItemLists[i];
                        this.setContentItemMargins(contentItemList);
                        if (contentItemList.childNodes.length > 0) {
                            logger.log("uiManager.js : initPaging : panel "+i+" has "+contentItemList.childNodes.length+"items");
                            var currentPos = contentItemList.getAttribute("currentPos");
                            if (currentPos==null) currentPos = 0;
	                        var numContentItems = contentItemList.childNodes.length;
                            var numPages = Math.ceil(numContentItems / _visibleContentItems);
            		        var pageNum = 1;
            		        if (currentPos > 0) {
            		            pageNum = Math.floor(currentPos / _visibleContentItems) + 1;
                            }
                            this.updatePaging (contentItemList, pageNum, numPages);
                            this.updateScrollers (contentItemList, pageNum, numPages);
                        }
                    }
                }
                else {
                    this.setContentItemMargins();
                }
	        }
	        avenn.ui.correctPNG();
	    }
	    catch (e) {
	        logger.error("uiManager.js : initPaging failed",e);
	    }
    },
    
    updatePaging : function (panel, pageNum, numPages) {
	    try {	
	        logger.log("uiManager.js : updatePaging");
	        var _visibleContentItems = this.getVisibleContentItems();
		    var panelContainer = panel;
		    while (panelContainer.className.indexOf("panel") == -1)
			    panelContainer = panelContainer.parentNode;
		    var pagingList = document.getElementsByClassName('numbers',panelContainer)[0];
		    pagingList.innerHTML = "";
    		
		    var numContentItems = document.getElementsByClassName('content-item-container',panel).length;
		    if (numPages > 1) {
			    // Added a maximum of 50 items - until we sort some 1 ... 3 4 5 6 7 ... 50 type paging
    			
			    if ((_visibleContentItems * numPages) > numContentItems)
			    {
				    numPages = Math.ceil(numContentItems / _visibleContentItems);				
			    }			
    			    
			    for (var i = 1; i <= numPages ; i++){
				    var listItem = document.createElement('li');
				    if (pageNum != i) {
					    var link = document.createElement('a');
					    listItem.appendChild(link);
					    link.href = "";
					    link.innerHTML = i;
					    link.pageNum = i;
					    link.id = "Pg_" + i + "_" + panel.id;
					    try{removeEvent(link, "click", avenn.ui.setPage);}catch(e){}
					    addEvent(link, "click", avenn.ui.setPage);
				    }
				    else {
					    listItem.innerHTML = "<span>"+i+"</span>";
					    listItem.className = "active";
				    }
				    pagingList.appendChild(listItem);
			    }
		    } else {
		        if (panel.getAttribute("currentPos") > 0) {
		            panel.setAttribute("currentPos",0);
		            panel.style.left = 0;
		        }
		    }
	    }
	    catch (e) {
		    logger.error('uiManager.js : updatePaging failed',e);
	    }
    },
	
    updateScrollers : function (panel, pageNum, numPages){
	    try {
	        logger.log("uiManager.js : updateScrollers");
	        
		    var panelContainer = panel;
		    while (panelContainer.className.indexOf("panel") == -1)
			    panelContainer = panelContainer.parentNode;
		    var panelId = panelContainer.getAttribute('ID').replace(/Panel/,'');
		    var backButton = $(panelId + "Back");
		    var forwardButton = $(panelId + "Forward");
		    backButton.pageNum = pageNum - 1;
		    forwardButton.pageNum = pageNum + 1;
            try {
                removeEvent(backButton, "click", avenn.ui.setPage);
                removeEvent(forwardButton, "click", avenn.ui.setPage);
            } catch (e) {}
		    addEvent(backButton, "click", avenn.ui.setPage);
		    addEvent(forwardButton, "click", avenn.ui.setPage);
		    backButton.style.visibility = (pageNum > 1)?"visible":"hidden";
		    forwardButton.style.visibility = (pageNum < numPages)?"visible":"hidden";
	    }
	    
	    catch (e) {
		    logger.error('uiManager.js : updateScrollers failed',e);
	    }
    },
    
    setPage : function (e, contentItemList, pageNum, panel){
        
        if (e) {
	        if (e.preventDefault) e.preventDefault();
	        e.returnValue = false;
	    }
	    try {
	        var _visibleContentItems = avenn.ui.getVisibleContentItems();
	        logger.log("uiManager.js : ui : setPage, "+e+", "+contentItemList+", "+pageNum);
	        if (typeof(contentItemList) == "undefined") {
    	        var pageNum = this.pageNum;
	            var panel = this;
	            while (panel.className.indexOf('panel') == -1) 
		            panel = panel.parentNode;
	            var contentItemList = document.getElementsByClassName('content-items',panel)[0];
	        }
	        else {
	            var panel = contentItemList;
	            while (panel.className.indexOf('panel') == -1) 
		            panel = panel.parentNode;
	        }
    	    
	        var loadedContentItems = 0;
	        var contentItems = document.getElementsByClassName('content-item-container',contentItemList);
	        var numContentItems = contentItems.length;
			var numPages = Math.ceil(numContentItems / _visibleContentItems);
	        avenn.ui.updatePaging (panel, pageNum, numPages)
	        avenn.ui.updateScrollers (panel, pageNum, numPages)
    	    var newContentItemsRequired = false;
    	    var startPos = (pageNum-1) * _visibleContentItems;
    	    avenn.ui.setPanelPosition(contentItemList, startPos);
	        avenn.cache.setState(window.location.href.split('#')[1]);
        }
        catch (e) {
            logger.error("uiManager.js : ui : setPage failed",e);
        }
    },
	
    handleResizeEnd : function (){
        logger.log("uiManager.js : ui : handleResizeEnd");
        if ($('t1').offsetWidth != avenn.ui.docWidth) {
            avenn.ui.userHasResized = true;
            
      	    avenn.ui.resetPageLayout();
        }
        avenn.ui.docWidth = $('t1').offsetWidth;
    },

    handleResize : function (){
        if (avenn.ui.resizeTimeout) clearTimeout(avenn.ui.resizeTimeout);
        avenn.ui.resizeTimeout = setTimeout("avenn.ui.handleResizeEnd()",100);
    },
    
    currentlyPlaying : {
        update : function (id) {
            logger.log("uiManager.js : ui : currentlyPlaying : update");
            if (typeof(id) != "string" && id != 0) 
                id = avenn.hijax.getContentIdFromUrl(window.location.href);
            
            avenn.hijax.currentlyPlaying = id;
            
            var prefix = avenn.ui.documentTitlePrefix;
            var ciDetails = $('CIDetails'+id);
	        if (ciDetails) {
	            this.writeHTML(ciDetails.innerHTML);
	            if (prefix != null) {
	                document.title = prefix + " - " + $("currently-playing-info").innerHTML.replace(/\n/g," ").replace(/\t/g,"").replace(/&amp;/g,"&");
	            }
	        }
            else {
                this.writeHTML(null);                
                if (prefix != null) {
	                document.title = prefix + " - Program Guide";
	            }
            }
        },
 
        
        writeHTML : function (html) {
            logger.log("uiManager.js : ui : currentlyPlaying : writeHTML : "+html);
            var cpi = $('currently-playing-info');
            cpi.innerHTML = html;
            //var cpContainer = $('currently-playing');
            //cpContainer.style.display = (html == null) ? "none" : "block" ;
        }
    },
    
    correctPNG : function (){},
	
    prepareDetails : function (contentItem) {
        
        if (findParentUL(contentItem).id != "RelatedContentItems") {
            
            var id = contentItem.id;
            logger.log("uiManager.js : ui : prepareDetails : " + id);
            
            var links = [document.getElementById('ImageLink'+id), document.getElementById('TextLink'+id), document.getElementById('OverlayLink'+id)]
            links._each(function(link) {
                if(link) {
                    addEvent(link, "mouseover", function() {DelayedToolTip('Details'+id);});
                    addEvent(link, "mousemove", function () {ToolTipMouseMove('Details'+id);});
                    addEvent(link, "mouseout", function() {HideToolTip(true);});
                }
            });      
        }
    }
}