
//
// slider.js
//
// Coypright 2007 by Thomas Hammel. All rights reserved.
//


var PhotoId= new Array(0,0);

var Photo = new Array(0,0);

var Blank = 0;

var Directory= new Array("aw", "mr", "sp", "vw", "lw");

var DirectoryIndex=0;

var Count=55;

var Nx=5;

var Ny=11;

var FixButton=0;

var ScrambleButton=0;

var NextButton=0;

var BackButton=0;

var BackBunchButton=0;

var NextBunchButton=0;

var ForwardButton=0;

var HelpButton=0;

var ClickPath= new Array (0 , 0, 0);

var ClickMany=0;

var ClickCurrent=0;

var Bunch=10;

var AutoTimer=0;

var AutoDirection= -40;

var ShowOn=0;

var MoveOn=0;

var AutoPlay=1;

var ScrambleCount=4;


function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


function DirectoryFindAndSet(par)
{
    var it;

    for(it=0; it<Directory.length; it++)
    {
        if(Directory[it]==par)
        {
            DirectoryIndex=it;
            return;
        }
    }
}

function NextDirectory()
{
    DirectoryIndex++;
    if(DirectoryIndex>=Directory.length) DirectoryIndex=0;
    if(DirectoryIndex<0) DirectoryIndex=Directory.length-1;
    Refresh();
}


function BackDirectory()
{
    DirectoryIndex--;
    if(DirectoryIndex>=Directory.length) DirectoryIndex=0;
    if(DirectoryIndex<0) DirectoryIndex=Directory.length-1;
    Refresh();
}


function PhotoLoad(spot, pid)
{
    Photo[spot].src= 'diversity/slider/' + Directory[DirectoryIndex] + '/s' + pid + '.jpg'; 
}


function PhotoClear(spot)
{
    Photo[spot].src= 'diversity/slider/' + Directory[DirectoryIndex] + '/x.jpg'; 
}


function Fix()
{
/*    while(ClickMany>0 && ClickCurrent>0)
    {
        ClickCurrent--;
        ClickInternal(ClickPath[ClickCurrent]);
    }*/
    Setup();
    AutoStop();
}


function Refresh()
{
    var ix, iy, spot;

    for(ix=0; ix<Nx; ix++)
    {
        for(iy=0; iy<Ny; iy++)
        {
            spot=ix+Nx*iy;
            if(PhotoId[spot]>=0)
            {
                PhotoLoad(spot,PhotoId[spot]);
            }
            else
            {
                PhotoClear(spot);
            }
        }
    }
    PhotoClear(Blank);
}


function Setup()
{
    var ix, iy, spot;

    for(ix=0; ix<Nx; ix++)
    {
        for(iy=0; iy<Ny; iy++)
        {
            spot=ix+Nx*iy;
            PhotoId[spot]=spot;
        }
    }
    Blank=0;

    Refresh();

    ClickPath[0]=0;
    ClickCurrent=0;
    ClickMany=1;
}



function PhotoSet(old)
{
    //
    // Now load the new photo.
    //
    PhotoId[Blank]=PhotoId[old];
    PhotoLoad(Blank, PhotoId[old]);
    //
    // Clear old tile.
    //
    Blank=old;
    PhotoId[Blank]= -1;
    PhotoClear(Blank);
}


function ClickInternal(spot)
{
    var bx, by, sx, sy;
    //
    // Check validity
    //
    by=Math.floor(Blank/Nx);
    bx=Blank-(by*Nx);
    sy=Math.floor(spot/Nx);
    sx=spot-(sy*Nx);
    /*
     * Same row.
     */
    if(by==sy)
    {
        if(bx<sx)
        {
            for(ix=bx+1; ix<=sx; ix++)
            {
                PhotoSet(ix+Nx*by);
            }
            return 1;
        }
        else if(bx>sx)
        {
            for(ix=bx-1; ix>=sx; ix--)
            {
                PhotoSet(ix+Nx*by);
            }
            return 1;
        }
    }
    /*
     * Same column.
     */
    else if(bx==sx)
    {
        if(by<sy)
        {
            for(iy=by+1; iy<=sy; iy++)
            {
                PhotoSet(bx+Nx*iy);
            }
            return 1;
        }
        else if(by>sy)
        {
            for(iy=by-1; iy>=sy; iy--)
            {
                PhotoSet(bx+Nx*iy);
            }
            return 1;
        }
    }
    return 0;
}


function ScrambleInternal(count)
{
    var it, st, ix, iy, bx, by, sx, sy;

    for(st=0; st<count; st++)
    {
        by=Math.floor(Blank/Nx);
        bx=Blank-(by*Nx);
        sx= bx;
        for(it=0; it<100 && sx==bx; it++)
        {
            sx=Math.floor(Math.random()*Nx);
            if(sx<0) sx=0;
            if(sx>Nx-1) sx=Nx-1;
        }

        if(sx!=bx)
        {
            ClickIt(sx+Nx*by);
        }


        by=Math.floor(Blank/Nx);
        bx=Blank-(by*Nx);
        sy= by;
        for(it=0; it<100 && sy==by; it++)
        {
            sy=Math.floor(Math.random()*Ny);
            if(sy<0) sy=0;
            if(sy>Ny-1) sy=Ny-1;
        }

        if(sy!=by)
        {
            ClickIt(bx+Nx*sy);
        }
    }
}


function Scramble()
{
    ScrambleInternal(Bunch);
    AutoStop();
    AutoDirection=1;
}


function Auto()
{
    if(ShowOn)
    {
        if(AutoDirection==0)
        {
            ScrambleInternal(ScrambleCount*Bunch);
            AutoDirection=1;
        }
        else if(AutoDirection>0)
        {
            BackInternal();
            if(ClickCurrent<=0)
            {
                AutoDirection= -40;
                MoveOn=1;
            }
        }
        else
        {
            AutoDirection++;
            if(AutoDirection== -20 && MoveOn)
            {
                NextDirectory();
                MoveOn=0;
            }
        }
        AutoTimer=setTimeout('Auto()',200);
    }
}

function AutoStart()
{
    ShowOn=1;
    AutoTimer=setTimeout('Auto()',200);
    ShowForwardNormal();
//    AutoDirection=0;
}

function AutoStop()
{
    ShowOn=0;
    ShowForwardNormal();
}


function ClickIt(spot)
{
    //
    // If this is the correct move, treat as a "back" event.
    //
    if(ClickMany>0 && ClickCurrent>0)
    {
        if(spot==ClickPath[ClickCurrent-1])
        {
            Back();
            return;
        }
    }
    //
    // Otherwise add a new "click" event.
    //
    if(ClickInternal(spot))
    {
        ClickCurrent++;
        ClickPath[ClickCurrent]=spot;
        ClickMany=ClickCurrent+1;
    }
}


function Click(spot)
{
    ClickIt(spot);
    AutoStop();
    AutoDrection=1;
}


function Click0()
{
    Click(0);
}

function Click1()
{
    Click(1);
}

function Click2()
{
    Click(2);
}

function Click3()
{
    Click(3);
}

function Click4()
{
    Click(4);
}

function Click5()
{
    Click(5);
}

function Click6()
{
    Click(6);
}

function Click7()
{
    Click(7);
}

function Click8()
{
    Click(8);
}

function Click9()
{
    Click(9);
}

function Click10()
{
    Click(10);
}

function Click11()
{
    Click(11);
}

function Click12()
{
    Click(12);
}

function Click13()
{
    Click(13);
}

function Click14()
{
    Click(14);
}

function Click15()
{
    Click(15);
}

function Click16()
{
    Click(16);
}

function Click17()
{
    Click(17);
}

function Click18()
{
    Click(18);
}

function Click19()
{
    Click(19);
}

function Click20()
{
    Click(20);
}

function Click21()
{
    Click(21);
}

function Click22()
{
    Click(22);
}

function Click23()
{
    Click(23);
}

function Click24()
{
    Click(24);
}

function Click25()
{
    Click(25);
}

function Click26()
{
    Click(26);
}

function Click27()
{
    Click(27);
}

function Click28()
{
    Click(28);
}

function Click29()
{
    Click(29);
}

function Click30()
{
    Click(30);
}

function Click31()
{
    Click(31);
}

function Click32()
{
    Click(32);
}

function Click33()
{
    Click(33);
}

function Click34()
{
    Click(34);
}

function Click35()
{
    Click(35);
}

function Click36()
{
    Click(36);
}

function Click37()
{
    Click(37);
}

function Click38()
{
    Click(38);
}

function Click39()
{
    Click(39);
}

function Click40()
{
    Click(40);
}

function Click41()
{
    Click(41);
}

function Click42()
{
    Click(42);
}

function Click43()
{
    Click(43);
}

function Click44()
{
    Click(44);
}

function Click45()
{
    Click(45);
}

function Click46()
{
    Click(46);
}

function Click47()
{
    Click(47);
}

function Click48()
{
    Click(48);
}

function Click49()
{
    Click(49);
}

function Click50()
{
    Click(50);
}

function Click51()
{
    Click(51);
}

function Click52()
{
    Click(52);
}

function Click53()
{
    Click(53);
}

function Click54()
{
    Click(54);
}

function Next()
{
    if(ClickMany>ClickCurrent+1)
    {
        if(ClickCurrent<ClickMany && ClickMany>0)
        {
            Photo[ClickPath[ClickCurrent+1]].style.borderColor="black";
        }
        ClickCurrent++;
        ClickInternal(ClickPath[ClickCurrent]);
        if(ClickCurrent<ClickMany && ClickMany>0)
        {
            Photo[ClickPath[ClickCurrent+1]].style.borderColor="white";
        }
    }
    AutoStop();
}


function BackInternal()
{
    if(ClickMany>0 && ClickCurrent>0)
    {
        ClickCurrent--;
        ClickInternal(ClickPath[ClickCurrent]);
    }
}


function Back()
{
    if(ClickCurrent>=1 && ClickMany>=1)
    {
        Photo[ClickPath[ClickCurrent-1]].style.borderColor="black";
    }
    BackInternal();
    if(ClickCurrent>=1 && ClickMany>=1)
    {
        Photo[ClickPath[ClickCurrent-1]].style.borderColor="white";
    }
    AutoStop();
}


function NextBunch()
{
    var it;

    for(it=0; it<Bunch; it++)
    {
        Next();
    }
    AutoStop();
}


function BackBunch()
{
    var it;

    for(it=0; it<Bunch; it++)
    {
        Back();
    }
    AutoStop();
}


function NextHighlight()
{
    NextButton.src="button/downw.gif";
    if(ClickCurrent<ClickMany && ClickMany>0)
    {
        Photo[ClickPath[ClickCurrent+1]].style.borderColor="white";
    }
}

function NextNormal()
{
    NextButton.src="button/down.gif";
    if(ClickCurrent<ClickMany && ClickMany>0)
    {
        Photo[ClickPath[ClickCurrent+1]].style.borderColor="black";
    }
}

function BackHighlight()
{
    BackButton.src="button/upw.gif";
    if(ClickCurrent>=1 && ClickMany>=1)
    {
        Photo[ClickPath[ClickCurrent-1]].style.borderColor="white";
    }
}

function BackNormal()
{
    BackButton.src="button/up.gif";
    if(ClickCurrent>=1 && ClickMany>=1)
    {
        Photo[ClickPath[ClickCurrent-1]].style.borderColor="black";
    }
}

function NextBunchHighlight()
{
    NextBunchButton.src="button/right2w.gif";
}

function NextBunchNormal()
{
    NextBunchButton.src="button/right2.gif";
}

function BackBunchHighlight()
{
    BackBunchButton.src="button/left2w.gif";
}

function BackBunchNormal()
{
    BackBunchButton.src="button/left2.gif";
}

function NextDirectoryHighlight()
{
    NextDirectoryButton.src="button/rightw.gif";
}

function NextDirectoryNormal()
{
    NextDirectoryButton.src="button/right.gif";
}

function BackDirectoryHighlight()
{
    BackDirectoryButton.src="button/leftw.gif";
}

function BackDirectoryNormal()
{
    BackDirectoryButton.src="button/left.gif";
}

function FixHighlight()
{
    FixButton.src="button/clearw.gif";
}

function FixNormal()
{
    FixButton.src="button/clear.gif";
}
    
function ScrambleHighlight()
{
    ScrambleButton.src="button/randomw.gif";
}

function ScrambleNormal()
{
    ScrambleButton.src="button/random.gif";
}
   

function HelpHighlight()
{
    HelpButton.src="button/helpw.gif";
}

function HelpNormal()
{
    HelpButton.src="button/help.gif";
}
                          
function ShowForwardHighlight()
{
    if(ShowOn)
    {
        ForwardButton.src="button/pausew.gif";
    }
    else
    {
        ForwardButton.src="button/playw.gif";
    }
}

function ShowForwardNormal()
{
    if(ShowOn)
    {
        ForwardButton.src="button/pause.gif";
    }
    else
    {
        ForwardButton.src="button/play.gif";
    }
}  

function ShowForwardButton()
{
    if(ShowOn)
    {
        AutoStop();
    }
    else
    {
        AutoStart();
    }
    ShowForwardHighlight();
}
    

function Load()
{
    Photo[0] = document.getElementById('s00');
    Photo[0].onclick=Click0;
    Photo[1] = document.getElementById('s01');
    Photo[1].onclick=Click1;
    Photo[2] = document.getElementById('s02');
    Photo[2].onclick=Click2;
    Photo[3] = document.getElementById('s03');
    Photo[3].onclick=Click3;
    Photo[4] = document.getElementById('s04');
    Photo[4].onclick=Click4;
    Photo[5] = document.getElementById('s05');
    Photo[5].onclick=Click5;
    Photo[6] = document.getElementById('s06');
    Photo[6].onclick=Click6;
    Photo[7] = document.getElementById('s07');
    Photo[7].onclick=Click7;
    Photo[8] = document.getElementById('s08');
    Photo[8].onclick=Click8;
    Photo[9] = document.getElementById('s09');
    Photo[9].onclick=Click9;
    
    Photo[10] = document.getElementById('s10');
    Photo[10].onclick=Click10;
    Photo[11] = document.getElementById('s11');
    Photo[11].onclick=Click11;
    Photo[12] = document.getElementById('s12');
    Photo[12].onclick=Click12;
    Photo[13] = document.getElementById('s13');
    Photo[13].onclick=Click13;
    Photo[14] = document.getElementById('s14');
    Photo[14].onclick=Click14;
    Photo[15] = document.getElementById('s15');
    Photo[15].onclick=Click15;
    Photo[16] = document.getElementById('s16');
    Photo[16].onclick=Click16;
    Photo[17] = document.getElementById('s17');
    Photo[17].onclick=Click17;
    Photo[18] = document.getElementById('s18');
    Photo[18].onclick=Click18;
    Photo[19] = document.getElementById('s19');
    Photo[19].onclick=Click19;

    Photo[20] = document.getElementById('s20');
    Photo[20].onclick=Click20;
    Photo[21] = document.getElementById('s21');
    Photo[21].onclick=Click21;
    Photo[22] = document.getElementById('s22');
    Photo[22].onclick=Click22;
    Photo[23] = document.getElementById('s23');
    Photo[23].onclick=Click23;
    Photo[24] = document.getElementById('s24');
    Photo[24].onclick=Click24;
    Photo[25] = document.getElementById('s25');
    Photo[25].onclick=Click25;
    Photo[26] = document.getElementById('s26');
    Photo[26].onclick=Click26;
    Photo[27] = document.getElementById('s27');
    Photo[27].onclick=Click27;
    Photo[28] = document.getElementById('s28');
    Photo[28].onclick=Click28;
    Photo[29] = document.getElementById('s29');
    Photo[29].onclick=Click29;

    Photo[30] = document.getElementById('s30');
    Photo[30].onclick=Click30;
    Photo[31] = document.getElementById('s31');
    Photo[31].onclick=Click31;
    Photo[32] = document.getElementById('s32');
    Photo[32].onclick=Click32;
    Photo[33] = document.getElementById('s33');
    Photo[33].onclick=Click33;
    Photo[34] = document.getElementById('s34');
    Photo[34].onclick=Click34;
    Photo[35] = document.getElementById('s35');
    Photo[35].onclick=Click35;
    Photo[36] = document.getElementById('s36');
    Photo[36].onclick=Click36;
    Photo[37] = document.getElementById('s37');
    Photo[37].onclick=Click37;
    Photo[38] = document.getElementById('s38');
    Photo[38].onclick=Click38;
    Photo[39] = document.getElementById('s39');
    Photo[39].onclick=Click39;

    Photo[40] = document.getElementById('s40');
    Photo[40].onclick=Click40;
    Photo[41] = document.getElementById('s41');
    Photo[41].onclick=Click41;
    Photo[42] = document.getElementById('s42');
    Photo[42].onclick=Click42;
    Photo[43] = document.getElementById('s43');
    Photo[43].onclick=Click43;
    Photo[44] = document.getElementById('s44');
    Photo[44].onclick=Click44;
    Photo[45] = document.getElementById('s45');
    Photo[45].onclick=Click45;
    Photo[46] = document.getElementById('s46');
    Photo[46].onclick=Click46;
    Photo[47] = document.getElementById('s47');
    Photo[47].onclick=Click47;
    Photo[48] = document.getElementById('s48');
    Photo[48].onclick=Click48;
    Photo[49] = document.getElementById('s49');
    Photo[49].onclick=Click49;

    Photo[50] = document.getElementById('s50');
    Photo[50].onclick=Click50;
    Photo[51] = document.getElementById('s51');
    Photo[51].onclick=Click51;
    Photo[52] = document.getElementById('s52');
    Photo[52].onclick=Click52;
    Photo[53] = document.getElementById('s53');
    Photo[53].onclick=Click53;
    Photo[54] = document.getElementById('s54');
    Photo[54].onclick=Click54;

    HelpButton = document.getElementById('ButtonHelp');
    if(HelpButton!=0)
    {
        HelpButton.onmouseover=HelpHighlight;
        HelpButton.onmouseout=HelpNormal;
        HelpNormal();
    }

    ForwardButton = document.getElementById('ButtonForward');
    ForwardButton.onclick=ShowForwardButton;	
    ForwardButton.onmouseover=ShowForwardHighlight;
    ForwardButton.onmouseout=ShowForwardNormal;
    ShowForwardNormal();

    FixButton = document.getElementById('ButtonFix');
    FixButton.onclick=Fix;
    FixButton.onmouseover=FixHighlight;
    FixButton.onmouseout=FixNormal;
    FixNormal();
    
    ScrambleButton = document.getElementById('ButtonScramble');
    ScrambleButton.onclick=Scramble;
    ScrambleButton.onmouseover=ScrambleHighlight;
    ScrambleButton.onmouseout=ScrambleNormal;
    ScrambleNormal();

    BackButton = document.getElementById('ButtonBack');
    BackButton.onclick=Back;
    BackButton.onmouseover=BackHighlight;
    BackButton.onmouseout=BackNormal;
    BackNormal();
    
    NextButton = document.getElementById('ButtonNext');
    NextButton.onclick=Next;
    NextButton.onmouseover=NextHighlight;
    NextButton.onmouseout=NextNormal;
    NextNormal();

/*    BackBunchButton = document.getElementById('ButtonBackBunch');
    BackBunchButton.onclick=BackBunch;
    BackBunchButton.onmouseover=BackBunchHighlight;
    BackBunchButton.onmouseout=BackBunchNormal;
    BackBunchNormal();
    
    NextBunchButton = document.getElementById('ButtonNextBunch');
    NextBunchButton.onclick=NextBunch;
    NextBunchButton.onmouseover=NextBunchHighlight;
    NextBunchButton.onmouseout=NextBunchNormal;
    NextBunchNormal();*/

    BackDirectoryButton = document.getElementById('ButtonBackDirectory');
    BackDirectoryButton.onclick=BackDirectory;
    BackDirectoryButton.onmouseover=BackDirectoryHighlight;
    BackDirectoryButton.onmouseout=BackDirectoryNormal;
    BackDirectoryNormal();
    
    NextDirectoryButton = document.getElementById('ButtonNextDirectory');
    NextDirectoryButton.onclick=NextDirectory;
    NextDirectoryButton.onmouseover=NextDirectoryHighlight;
    NextDirectoryButton.onmouseout=NextDirectoryNormal;
    NextDirectoryNormal();

/*
    par=gup('gallery');
    if(par!="") DirectoryIndex=Math.floor(par);


    par=gup('image');
    if(par!="") 
    {
        PhotoCurrent=Math.floor(par);
        if(PhotoCurrent>=Photo[GalleryCurrent].length) PhotoCurrent=0;
        if(PhotoCurrent<0) PhotoCurrent=Math.floor((Photo[GalleryCurrent].length-1)/(Nx*Ny))*(Nx*Ny);
    }
*/
    par=gup('name');
    if(par!="") DirectoryFindAndSet(par);

    ScrambleCount=4;
    par=gup('scramble');
    if(par!="") 
    {
        ScrambleCount= -1;
        ScrambleCount=Math.floor(par);
        if(ScrambleCount<0) ScrambleCount=4;
        if(ScrambleCount>20) ScrambleCount=20;
    }

    AutoPlay=1;
    par=gup('play');
    if(par!="") 
    {
        if(par=='0' || par=='off') AutoPlay=0;
    }

    Setup();

    if(AutoPlay) AutoStart();
}

onload = function()
{ 
    Load();
}


