/// <reference path="../global/global.js" />
//
// Written by Miles Burton & Mark Barnett: (c) Mnet Computer Systems 2008
//
Page.Pagination = {};

// Persistance
Page.Pagination.Data =
{
    TotalPages:0
    ,CurrentPage:1
};


Page.Pagination.Events = {};
Page.Pagination.Events.PageChange = 
    function(e)
    {
        e = $(e);
        // Gets calling object
        var target = e.target || e.srcElement;
        var pageNum = target.innerHTML;
            // id = page number
            if(pageNum)
            {
                switch(e.button)
                {
                    case 0:
                        Page.Pagination.LoadPage(pageNum);
                        Event.stop(e); 
                    break;
                 }          
            }
         
    };

Page.Pagination.LoadPage = function(page)
    {
	    // Calculate offset
	    var newOffset;
	    if(page==1){
		    newOffset = 0;
	    }else{
		    newOffset = 1 + Page.Data.limit;
		    newOffset *= (page-1);
		    newOffset -= (page-1);	
	    }
	    
	    // Gets what ever the "entities" are on this page
	    Page.Ajax.Requests.GetEntities(newOffset, Page.Data.limit);
    };
    
    
Page.Pagination.ScrollFirst = function()
    {
	    Page.Pagination.LoadPage(1);
    };

Page.Pagination.ScrollLast = function()
    {
	    Page.Pagination.LoadPage(Page.Pagination.Data.TotalPages);
    };   
    
Page.Pagination.ScrollPrev = function()
    {
	    if(Page.Pagination.Data.CurrentPage>1) Page.Pagination.LoadPage(Page.Pagination.Data.CurrentPage-1);
    };      

Page.Pagination.ScrollNext = function()
    {
	    if(Page.Pagination.Data.CurrentPage<Page.Pagination.Data.TotalPages) Page.Pagination.LoadPage(Page.Pagination.Data.CurrentPage+1);
    }; 
    
Page.Pagination.Build = {};    
Page.Pagination.Build.PageNumbers = function()
    {
        // WOrks out the current page and total pages
	    Page.Pagination.Data.TotalPages = Page.Data.totalEntities / Page.Data.limit;

        // Does some math to round stuff up or down
        if(Math.round(Page.Pagination.Data.TotalPages)<Page.Pagination.Data.TotalPages)
        {
            Page.Pagination.Data.TotalPages = Math.round(Page.Pagination.Data.TotalPages) + 1;
        }else{
            Page.Pagination.Data.TotalPages = Math.round(Page.Pagination.Data.TotalPages);
        }
        
        // Grab html references
        var pageNav = Page.Data.pageNav;
        var secondNav = Page.Data.pageNav2;
        
        var pageNum = Page.Data.pageNum;
        var pageNum2 = Page.Data.pageNum2;
          
        // Clears old data
        pageNav.ClearChildren();
        secondNav.ClearChildren();
        
        
        pageNum.innerHTML = Page.Pagination.Data.TotalPages;
        pageNum2.innerHTML = Page.Pagination.Data.TotalPages;
        
        // The amount of numbers after and before the page list
        var prevNum = Page.Pagination.Data.CurrentPage - 5;
        
        // Loops through and makes sure that we're not going to minus numbers
        if(prevNum < 1)  prevNum = 1;
        
        // Same diference
        var maxNum = Page.Pagination.Data.CurrentPage + 5;
        
        if(maxNum > Page.Pagination.Data.TotalPages) maxNum = Page.Pagination.Data.TotalPages;
      

        // Loops through all the pages and generates said code
        for(var i = prevNum; i <= maxNum; i++)
        {
            var link = document.createElement("a");
            var link2 = document.createElement("a");
            
            //link.id = "page-" + i;
            //link2.id = link.id;
            if(Page.Pagination.Data.CurrentPage==i)
            {
                link.className = "selected";
                link2.className = "selected";
            }else{
   	            // add event
   	            Event.observe(link,'click',Page.Pagination.Events.PageChange);
   	            Event.observe(link2,'click',Page.Pagination.Events.PageChange);
            }
            
            link.innerHTML = i;
            link2.innerHTML = i;            
            
                    
            pageNav.appendChild(link);
            secondNav.appendChild(link2);
         
        }  
    };
    
Page.Data = {};    
Page.Data.UpdateOrder = function(newOrder)
    {
        // Dont bother updating
        if(newOrder==Page.Data.order)
        {
	        // Just change the actual display order
	        Page.Data.ChangeOrientation();
        }else{
	        Page.Data.order = newOrder;
	        Page.Ajax.Requests.GetEntities(Page.Data.offset, Page.Data.limit);
        }    
    };

Page.Data.ChangeOrientation = function()
    {
	    if(Page.Data.orientation == "desc"){
	        Page.Data.orientation = "asc";
        }else{
	        Page.Data.orientation = "desc";
        }
        Page.Ajax.Requests.GetEntities(Page.Data.offset, Page.Data.limit);
    };

function isHigher(subjectNum)
    {
    /// <summary>Looks at two numbers, returns an image representing the trend</summary> 
    /// <param name="subjectNum">Subject number</param>
        subjectNum = parseInt(subjectNum);
        
        if(isNaN(subjectNum)) throw("Ishigher: one number is NaN");
        var img = document.createElement("img");
        if(subjectNum!=0)
        {    
            if(subjectNum>0)
            {
                img.src = "images/up.gif";
                img.alt = "Up";
            }else{
                img.src = "images/down.gif";
                img.alt = "Down";  
            }   
            
         }
         return img;
    };