
// ******************************
// index.html - Javascript
// ******************************

// Group List

var groupList = new Array(
    "Live & Promo",
    "Live & Promo",
    "Live & Promo",
    "Other       "
);

var groupListPtr=0;

// Photo Lists

var photoGroup = new Array();
var photoList;                      // Temp ptr to photo list

var photoList1 = new Array(
	"000.jpg",
	"071.jpg",
	"021.jpg",
	"024.jpg",
	"035.jpg",
	"070.jpg",
	"019.jpg",
	"036.jpg",
	"055.jpg",
	"026.jpg",
	"088.jpg",
	"086.jpg",
	"057.jpg",
	"027.jpg",
	"085.jpg"
);

var photoList2 = new Array(
	"094.jpg",
	"006.jpg",
	"067.jpg",
	"069.jpg",
    "066.jpg",
    "041.jpg",
    "053.jpg",
    "048.jpg",
    "043.jpg",
    "054.jpg",
	"073.jpg",
	"020.jpg",
	"003.jpg",
	"062.jpg",
	"108.jpg"
);

var photoList3 = new Array(
	"032.jpg",
    "038.jpg",
    "039.jpg",
    "010.jpg",
    "045.jpg",
    "063.jpg",
    "051.jpg",
    "091.jpg",
    "090.jpg",
    "087.jpg",
    "096.jpg",
    "100.jpg",
    "101.jpg",
    "102.jpg",
    "103.jpg"
);

var photoList4 = new Array(
	"047.jpg",
	"059.jpg",
	"061.jpg",
	"074.jpg",
	"109.jpg",
	"106.jpg",
	"060.jpg",
	"079.jpg",
	"080.jpg",
	"111.jpg",
	"081.jpg",
	"082.jpg",
	"083.jpg",
	"107.jpg",
	"105.jpg"
);


photoGroup[0]=photoList1;
photoGroup[1]=photoList2;
photoGroup[2]=photoList3;
photoGroup[3]=photoList4;

// Thumbnail List & Pointers

var thumbList = new Array();
var thumbListOff = 0;
var thumbListPtr = 0;

// Transport Buttons

var recButton, playButton, pauseButton, stopButton, rrButton, ffButton, pgupButton, pgdnButton;
var transportState=0;   // 0 = Stopped, 1 - Playing, 2 - Paused

// Slideshow / Timers

var intervalDuration=1000*3;
var intervalID = 0;
var imgPtr = 0;

// ******************************
// Page Initialisation
// ******************************

window.onload = pageInit;

function pageInit()
{
    document.bigpic.onload = safariImageFudge;

    scanImages();

    getButtons();

    setGroup(0);

    thumbListOff=0;
    thumbListPtr=0;

    getThumbs(thumbListOff);
}

function scanImages()
{
    // Scan document for images, extract button and thumb class instances

    for (var i=0, image; i<document.images.length; i++)
    {
        image = document.images[i]

        if (image.className == "button")
        {
			image.off = new Image();
			image.off.src = "./images/" + image.id + "_off.jpg";
			image.over = new Image();
			image.over.src = "./images/" + image.id + "_over.jpg";
			image.on = new Image();
			image.on.src = "./images/" + image.id + "_on.jpg";

            image.src = image.off.src;

            image.onmousedown = buttonMouseDown;
            image.onmouseup = buttonMouseUp;
            image.onmouseover = buttonMouseOver;
            image.onmouseout = buttonMouseOut;
        }

        if (image.className == "thumb")
        {
            thumbList[thumbListPtr++] = image;

            image.target = new Image();
            image.target.src = "";

            image.onclick = thumbMouseClick;
            image.onmouseover = thumbMouseOver;
            image.onmouseout = thumbMouseOut;
        }
    }
}

function getButtons()
{
    recButton = document.getElementById("recButton");
    playButton = document.getElementById("play");
    pauseButton = document.getElementById("pause");
    stopButton = document.getElementById("stop");
    rrButton = document.getElementById("rr");
    ffButton = document.getElementById("ff");
    pgupButton = document.getElementById("pgup");
    pgdnButton = document.getElementById("pgdn");

    if(!pauseButton) {
        pauseButton = new Image();
        pauseButton.className = "button";
        pauseButton.id = "pause";

    	pauseButton.off = new Image();
    	pauseButton.off.src = "./images/" + pauseButton.id + "_off.jpg";
    	pauseButton.over = new Image();
    	pauseButton.over.src = "./images/" + pauseButton.id + "_over.jpg";
    	pauseButton.on = new Image();
    	pauseButton.on.src = "./images/" + pauseButton.id + "_on.jpg";

        pauseButton.src = pauseButton.on.src;
    }
}

function setGroup()
{
    thumbGroup = document.getElementById("group");

	if(thumbGroup != null)
	    if(groupListPtr>=0&&groupListPtr<groupList.length)
	        thumbGroup.innerHTML = groupList[groupListPtr];
}

function getThumbs()
{
    var temp = new Array();

    photoList = photoGroup[groupListPtr];

    if(!photoList) {
        photoList=temp;
    }

    for(i=0,j=i+thumbListOff;i<thumbList.length;i++,j=i+thumbListOff)
    {
        var image = thumbList[i];
        if(j<photoList.length) {
        	image.src = "./thumbs/" + photoList[j];
            image.target.src = "./photos/" + photoList[j];
        } else {
          	image.src = "./thumbs/" + "blank.jpg";
            image.target.src = "null";
        }
    }

	imgPtr=thumbListOff;
    playImage();
}

// ******************************
// Library Routines
// ******************************

function safariImageFudge()
{
    if (navigator.userAgent.indexOf('Safari')!=-1) {
        var temp = new Image();
        temp.src = this.src;
        document.bigpic.src = temp.src;
        document.bigpic.height = temp.height;
        document.bigpic.width = temp.width;
    }
}

// ******************************
// Event Handlers
// ******************************

function thumbMouseClick()
{
    if(transportState==1) {
        transportButton(playButton,-1);
    }

    if(checkSrc(this)) {
        document.bigpic.src = this.target.src;
        if (navigator.userAgent.indexOf('Safari')!=-1) {
            document.bigpic.height = this.target.height;
            document.bigpic.width = this.target.width;
        }
    }
}

function thumbMouseOver()
{
    if(checkSrc(this)) {
        this.style.borderColor = "#800000";
    }
}

function thumbMouseOut()
{
    if(checkSrc(this)) {
        this.style.borderColor = "#804020";
    }
}

function checkSrc(image)
{
    return(image.target.src.substr(image.target.src.length-4,4)!="null");
}

// ******************************
// Event Handlers - Transport Buttons
// ******************************

function buttonMouseDown()
{
    transportButton(this,0)
}

function buttonMouseUp()
{
    transportButton(this,1)
}

function buttonMouseOver()
{
    transportButton(this,2)
}

function buttonMouseOut()
{
    transportButton(this,3)
}

function transportButton(button, state)
{
    var buttonSrc = button.src;

    switch (state)
    {
        case -1:    // Simulate Button Press Sequence
        {
            transportButton(button,0);
            transportButton(button,1);
            transportButton(button,3);
            return;
        }

        case 0:     // Down
        {
            buttonSrc = button.on.src;
            break;
        }
        case 1:     // Up
        {
            buttonSrc = button.over.src;
            break;
        }
        case 2:     // Over
        {
            buttonSrc = button.over.src;
            break;
        }
        case 3:     // Out
        {
            buttonSrc = button.off.src;
            break;
        }
    }

	switch (button.id)
	{
		case "stop":
		{
            if(transportState==0) {
        	 	buttonSrc = button.off.src;
                break;
            }

            if(state==0) {  // Down
                transport(0);
                playButton.src = playButton.off.src;
    			break;
            }
            break;
		}

		case "play":
		{
            if(state==0) {  // Down
                if(transportState==0) {     // Stopped
                    transport(1);
                    break;
                }
                if(transportState==1) {     // Playing
                    transport(2);
           		 	buttonSrc = pauseButton.on.src;
                    break;
                }
                if(transportState==2) {     // Paused
                    transport(1);
                    break;
                }
    			break;
            }
            if(state==1) {  // Up
                if(transportState==2) {     // Paused
           		 	buttonSrc = pauseButton.over.src;
                    break;
                }
                break;
            }
            if(state==2) {  // Over
                if(transportState==2) {     // Paused
          		 	buttonSrc = pauseButton.over.src;
                    break;
                }
    			break;
            }
            if(state==3) {  // Out
                if(transportState==1) {     // Play
          		 	buttonSrc = playButton.on.src;
                    break;
                }
                if(transportState==2) {     // Pause
          		 	buttonSrc = pauseButton.on.src;
                    break;
                }
            }
            break;
		}

		case "rr":
		{
            if(!(groupListPtr>0)) {
       		 	buttonSrc = button.off.src;
                break;
            }

            if(state==0) {  // Down
                if(transportState>0) transportButton(stopButton,-1);
                groupListPtr = changeListPtr(groupList, groupListPtr, -1, 0);
                setGroup();
                thumbListOff=0;
                thumbListPtr=0;
                getThumbs();
    			break;
            }
            break;
		}

		case "ff":
		{
            if(!(groupListPtr<(groupList.length-1))) {
     		 	buttonSrc = button.off.src;
    			break;
            }

            if(state==0) {  // Down
                if(transportState>0) transportButton(stopButton,-1);
                groupListPtr = changeListPtr(groupList, groupListPtr, +1, 0);
                setGroup();
                thumbListOff=0;
                thumbListPtr=0;
                getThumbs();
    			break;
            }
            break;
		}

		case "pgup":
		{
            if(!(thumbListOff>0)) {
	   		 	buttonSrc = button.off.src;
                break;
            }


            if(state==0) {  // Down
                if(transportState>0) transportButton(stopButton,-1);
                thumbListOff-=thumbList.length;
                getThumbs(thumbListOff);
    			break;
            }
            break;
		}

		case "pgdn":
		{
            if(!(thumbList.length+thumbListOff<photoList.length)) {
       		 	buttonSrc = button.off.src;
                break;
            }

            if(state==0) {  // Down
                if(transportState>0) transportButton(stopButton,-1);
                thumbListOff+=thumbList.length;
                getThumbs(thumbListOff);
    			break;
            }
            break;
		}
	}

    button.src = buttonSrc;
}

function transport(state)
{
    switch(state)
    {
        case 0:    // Stop
        {
			if(transportState!=0) {
                transportState=0;
				clearInterval(intervalID);
				imgPtr=thumbListOff;
				playImage();
			}
            break;
        }
        case 1:    // Play
        {
			if(transportState==0) {
                transportState=1;
				imgPtr=thumbListOff+1; //TODO: Dont just add one, check if one is available
				playImage();
				intervalID=setInterval(playImage,intervalDuration);
                break;
			}
            if(transportState==1) {
                transportState=2;
				clearInterval(intervalID);
                break;
            }
            if(transportState==2) {
                transportState=1;
				if(imgPtr>1)imgPtr--;
				playImage();
				intervalID=setInterval(playImage,intervalDuration);
                break;
            }
            break;
        }
        case 2:    // Pause
        {
            if(transportState==1) {
            	clearInterval(intervalID);
                transportState=2;
            }
            break;
        }
    }
}

function changeListPtr(list, listPtr, offset, wrap)
{
    if(offset==0) {
        return(0);
    }

    if(offset>0) {
        if(listPtr+offset<list.length)
            return listPtr + offset;
        else
            if(wrap)
                return 0;
            else
                return listPtr;
    }

    if(offset<0) {
        if(listPtr+offset>=0)
            return listPtr + offset;
        else
            if(wrap)
                return list.length;
            else
                listPtr;
    }
}

function playImage()
{
    document.bigpic.src = "./photos/" + photoList[imgPtr];
    if(transportState==1) {
    	imgPtr++;
	    if(imgPtr==photoList.length) imgPtr=0;
    }
}

// ******************************
// End of File
// ******************************
