//----------------------------------------------------------------- 
function PhotoGallery_ResizeImage(img,maxsize)
{
    var newimg=new Image();
    newimg.src=img.src;

    var height=maxsize;
    var width=maxsize;

    img.width=width;
    img.height=height;

    if(img.style.visible!='hidden')
    {
        if(parseInt(newimg.height)>=parseInt(newimg.width)&&parseInt(newimg.height)<=parseInt(maxsize))
        {
            height=newimg.height;
            width=null;
        }    
        else if(parseInt(newimg.height)>=parseInt(newimg.width))
        {
            width=null;
        }    
        else if(parseInt(newimg.width)>=parseInt(newimg.height)&&parseInt(newimg.width)<=parseInt(maxsize))
        {
            width=newimg.width;
            height=null;
        }    
        else if(parseInt(newimg.width)>=parseInt(newimg.height))
        {
            height=null;
        }    

        if(height==0||width==0)
        {
            img.height=maxsize;
            img.width=maxsize;
        }
        else
        {
            if(height==null)
                img.removeAttribute("height");
            else
                img.height=height;
                
            if(width==null)
                img.removeAttribute("width");
            else
                img.width=width;
        }
    }
}

//-----------------------------------------------------------------
function PhotoGallery()
{
    var AllImages=new Array();
    var ControlID=null;
    var PhotoGalleryXML=null;
    var Columns=3;
    var Rows=3;
    var CurrentPageIndex=1;
    var CurrentImageIndex=-1;
    var PageCount=0;
    var ValidThumbnailCount=0;

    var Thumbnails;

    var PhotoWindow;
    var PhotoContainer;
    var PhotoSpacer;
    var PhotoText;
    var Photo;
    
    var Control_PageNumbersPrevious;
    var Control_PageNumbersNext;
    var Control_PageNumbers;
    var Control_PreviousImage;
    var Control_NextImage;
    var Control_CloseImage;
    var Control_OpenImage;
    
    //-----------------------------------------------------------------
    this.Init=_Init;
    function _Init(controlID,columns,rows)
    {
        ControlID=controlID;
        Columns=columns;
        Rows=rows;

        PhotoGalleryXML=CrossBrowser_GetXML("xml/PhotoGalleryXML.aspx?controlid="+ControlID, null);
        
        var imgs=PhotoGalleryXML.selectNodes("/photos/photo");
        for(var i=0;i<imgs.length;i++)
        {
            AllImages[i]=new Object();
            AllImages[i].title=imgs[i].getAttribute("title")
            AllImages[i].desc=imgs[i].getAttribute("desc");
            AllImages[i].thumbnail=imgs[i].getAttribute("thumbnail");
            AllImages[i].mediumurl=imgs[i].getAttribute("mediumurl");
            AllImages[i].largeurl=imgs[i].getAttribute("largeurl");
            
            if(AllImages[i].thumbnail=="") 
            {
                if(AllImages[i].mediumurl=="")
                    AllImages[i].thumbnail=AllImages[i].largeurl;
                else
                    AllImages[i].thumbnail=AllImages[i].mediumurl;
            }
            
            if(AllImages[i].mediumurl=="") 
            {
                if(AllImages[i].largeurl=="")
                    AllImages[i].mediumurl=AllImages[i].thumbnail;
                else
                    AllImages[i].mediumurl=AllImages[i].largeurl;
            }
            
            if(AllImages[i].largeurl=="") 
            {
                if(AllImages[i].mediumurl=="")
                    AllImages[i].mediumurl=AllImages[i].thumbnail;
                else
                    AllImages[i].mediumurl=AllImages[i].mediumurl;
            }
        }

        PageCount=Math.ceil(AllImages.length/(Columns*Rows));

        PhotoContainer=document.getElementById("PhotoGallery"+ControlID+"PhotoContainer");
        PhotoSpacer=document.getElementById("PhotoGallery"+ControlID+"PhotoSpacer");
        Photo=document.getElementById("PhotoGallery"+ControlID+"Photo");
        PhotoText=document.getElementById("PhotoGallery"+ControlID+"PhotoText");
        Thumbnails=document.getElementsByName("PhotoGallery"+ControlID+"Thumbnail");
        Control_PageNumbers=document.getElementById("PhotoGallery"+ControlID+"Control_PageNumbers");
        Control_PageNumbersPrevious=document.getElementById("PhotoGallery"+ControlID+"Control_PageNumbersPrevious");
        Control_PageNumbersNext=document.getElementById("PhotoGallery"+ControlID+"Control_PageNumbersNext");

        Control_PreviousImage=document.getElementById("PhotoGallery"+ControlID+"Control_PreviousImage");
        Control_NextImage=document.getElementById("PhotoGallery"+ControlID+"Control_NextImage");
        Control_CloseImage=document.getElementById("PhotoGallery"+ControlID+"Control_CloseImage");
        Control_OpenImage=document.getElementById("PhotoGallery"+ControlID+"Control_OpenImage");

        Control_PageNumbers.disabled=false;
        for(var i=1;i<=PageCount;i++)
        {
            var option = document.createElement("option");
            Control_PageNumbers.appendChild(option);
                
            option.value=i;
            option.innerHTML=i;
        }

       _RenderThumbnails(CurrentPageIndex);
    }

    //-----------------------------------------------------------------
    this.RenderThumbnails=_RenderThumbnails;
    function _RenderThumbnails(page)
    {
        CurrentImageIndex=-1;
        CurrentPageIndex=page;

        PhotoText.innerHTML="";
        PhotoText.style.display='none';

        _UpdateControls();

        ValidThumbnailCount=0;
        var i=(parseInt(page)-1)*(Rows*Columns);
        for(var j=0;j<Thumbnails.length;j++)
        {
            
            Thumbnails[j].height=Thumbnails[j].getAttribute("size");
            Thumbnails[j].width=Thumbnails[j].getAttribute("size");
            Thumbnails[j].src="img/spacer.gif"; //set them all to blank then reload them.
            Thumbnails[j].setAttribute("index",j);
            Thumbnails[j].setAttribute("controlid",ControlID);
            Thumbnails[j].setAttribute("CurrentPageIndex",CurrentPageIndex);
            
            if(AllImages[i]!=null)
            {
                ValidThumbnailCount++;
                Thumbnails[j].style.visible="visible";
                Thumbnails[j].disabled=false;
                Thumbnails[j].src=AllImages[i].thumbnail;
                Thumbnails[j].setAttribute("alt",AllImages[i].title);
                Thumbnails[j].setAttribute("title",AllImages[i].title);
                Thumbnails[j].setAttribute("desc",AllImages[i].desc);
                Thumbnails[j].setAttribute("largeurl",AllImages[i].largeurl);
                Thumbnails[j].setAttribute("mediumurl",AllImages[i].mediumurl);
                Thumbnails[j].setAttribute("thumbnail",AllImages[i].thumbnail);
                
                window.setTimeout("preloadImage('"+AllImages[i].mediumurl+"');",1);
            }
            else
            {
                Thumbnails[j].disabled=true;
                Thumbnails[j].setAttribute("alt","");
                Thumbnails[j].setAttribute("title","");
                Thumbnails[j].setAttribute("caption","");
                Thumbnails[j].setAttribute("desc","");
                Thumbnails[j].removeAttribute("thumbnail");
                Thumbnails[j].removeAttribute("mediumurl");
                Thumbnails[j].removeAttribute("largeurl");
                Thumbnails[j].style.visible="hidden";
                Thumbnails[j].style.borderStyle="none";
            }
            PhotoGallery_ResizeImage(Thumbnails[j],Thumbnails[j].getAttribute("size"))//Opera does not always fire the onload event so just fire it manually
            i++;
        }
    }
    
    //-----------------------------------------------------------------
    this.RenderFullImage=_RenderFullImage;
    function _RenderFullImage(img)
    {
        CurrentImageIndex=parseInt(img.getAttribute("index"));
        if(img.getAttribute("mediumurl")!=null)
        {
            Photo.width=Photo.getAttribute("size");
            Photo.height=Photo.getAttribute("size");
            Photo.src=img.getAttribute("mediumurl");
            Photo.style.visibility='hidden';
            Photo.style.visibility='visible';
            Photo.setAttribute("alt",img.getAttribute("alt"));
            Photo.setAttribute("title",img.getAttribute("title"));

            PhotoSpacer.style.visibility='visible';
            PhotoContainer.style.visibility='visible';
            
            _HoverThumbnail(img);

            PhotoGallery_ResizeImage(Photo,Photo.getAttribute("size"));//Opera does not always fire the onload event so just fire it manually
        }
        
        _UpdateControls();
    }
    
    //-----------------------------------------------------------------
    this.HideFullImage=_HideFullImage;
    function _HideFullImage()
    {
        PhotoContainer.style.visibility='hidden';
        Photo.style.visibility='hidden';
        PhotoSpacer.style.visibility='hidden';

        _UpdateControls();
    }
    
    //-----------------------------------------------------------------
    this.HoverThumbnail=_HoverThumbnail;
    function _HoverThumbnail(img)
    {
        PhotoText.innerHTML="";
        
        var title=document.createElement("h3");
        title.innerHTML=img.getAttribute("alt");
        if(title.innerHTML!="")
            PhotoText.appendChild(title);

        var desc=document.createElement("div");
        desc.innerHTML=img.getAttribute("desc");
        if(desc.innerHTML!="")
            PhotoText.appendChild(desc);

        if(PhotoText.innerHTML=="")
            PhotoText.style.display='none';
        else
            PhotoText.style.display='';
    }    

    //-----------------------------------------------------------------
    this.PreviousImage=_PreviousImage;
    function _PreviousImage()
    {
        if(CurrentImageIndex<=0)
        {
            if(CurrentPageIndex>1)
            {
                CurrentPageIndex--;
                _RenderThumbnails(CurrentPageIndex);
                CurrentImageIndex=Thumbnails.length-1;
            }
            else
                CurrentImageIndex=0;
        }
        else
            CurrentImageIndex--;

        _RenderFullImage(Thumbnails[CurrentImageIndex]);
        _UpdateControls();
    }
    
    //-----------------------------------------------------------------
    this.NextImage=_NextImage;
    function _NextImage()
    {
        CurrentImageIndex++;
        if(CurrentImageIndex>=Thumbnails.length)
        {
            CurrentPageIndex++;
            _RenderThumbnails(CurrentPageIndex);
            CurrentImageIndex++;
        }

        _RenderFullImage(Thumbnails[CurrentImageIndex]);
        _UpdateControls();
    }
    
    //-----------------------------------------------------------------
    this.OpenImage=_OpenImage;
    function _OpenImage()
    {
        if(CurrentImageIndex<0) CurrentImageIndex++;

        _RenderFullImage(Thumbnails[CurrentImageIndex]);

        PhotoWindow=window.open(Thumbnails[CurrentImageIndex].getAttribute("largeurl"),"_new");
        _UpdateControls();
    }
    
    //-----------------------------------------------------------------
    this.CloseImage=_CloseImage;
    function _CloseImage()
    {
        try{if(PhotoWindow!=null)PhotoWindow.close();}catch(e){;}

        _HideFullImage();
        _UpdateControls();
    }    

    //-----------------------------------------------------------------
    this.ChangePage=_ChangePage;
    function _ChangePage(obj)
    {
        _RenderThumbnails(obj.options[obj.selectedIndex].value);
        _HideFullImage();
    }

    //-----------------------------------------------------------------
    this.PreviousPage=_PreviousPage;
    function _PreviousPage(obj)
    {
        Control_PageNumbers.selectedIndex--;
        _ChangePage(Control_PageNumbers);
    }

    //-----------------------------------------------------------------
    this.NextPage=_NextPage;
    function _NextPage()
    {
        Control_PageNumbers.selectedIndex++;
        _ChangePage(Control_PageNumbers);
    }
    
    //-----------------------------------------------------------------
    this.UpdateControls=_UpdateControls;
    function _UpdateControls()
    {

        if(Control_PageNumbers.options.length>0)
        {
            Control_PageNumbers.disabled=false;
            Control_PageNumbers.selectedIndex=CurrentPageIndex-1;

            if(CurrentPageIndex>=PageCount&&CurrentImageIndex>=(ValidThumbnailCount-1))
                CurrentImageIndex=ValidThumbnailCount-1;
                
            if(Control_PageNumbers.selectedIndex>=Control_PageNumbers.options.length-1)
                Control_PageNumbersNext.disabled=true;
            else
                Control_PageNumbersNext.disabled=false;
            
            if(Control_PageNumbers.selectedIndex==0)
                Control_PageNumbersPrevious.disabled=true;
            else
                Control_PageNumbersPrevious.disabled=false;

            if(CurrentPageIndex<=1&&CurrentImageIndex<=0)
                Control_PreviousImage.disabled=true;
            else
                Control_PreviousImage.disabled=false;


            if(CurrentPageIndex>=PageCount&&Thumbnails.length>=ValidThumbnailCount&&CurrentImageIndex>=(ValidThumbnailCount-1))
                Control_NextImage.disabled=true;
            else
                Control_NextImage.disabled=false;

            if(PhotoContainer.style.visibility=='visible')
            {
                Control_CloseImage.disabled=false;
                Control_CloseImage.style.display='';
                
                Control_OpenImage.disabled=false;
                Control_OpenImage.style.display='';
            }
            else
            {
                Control_CloseImage.disabled=true;
                Control_CloseImage.style.display='none';
                Control_OpenImage.disabled=true;
                Control_OpenImage.style.display='none';
            }
        }
    }
}
