var delay = 5;
var actualDelay = delay;
var lastItemStarted = new Date().getTime();

function getDimForBox(orig,box) {
    var res = new Array();
    var ratio0 = orig[0]/box[0];
    var ratio1 = orig[1]/box[1];
    var ratio = Math.max(ratio0,ratio1);
    if (ratio<1) ratio = 1;
    res[0] = Math.round(orig[0]/ratio);
    res[1] = Math.round(orig[1]/ratio);
    return res;
}

function getBareWindowSize() {
    return common_getWindowSize(false);
}
function getWindowSize() {
    var res = getBareWindowSize();
    return [res[0]-20,res[1]-42];
}

function getImagePreviewSize(inum) {
    var ws = getWindowSize();
    var imgdim = [images[inum].width,images[inum].height];
    var newdim = getDimForBox(imgdim,ws);
    return newdim;
}

function getImagePreviewUrl(inum) {
    var newdim = getImagePreviewSize(inum);
    var newURL = helper_contextPath + "/jpg/"+helper_urlThemeInfo+"/"+images[inum].path + '/' + newdim[0] + 'x' + newdim[1] + '.jpg?ver='+images[inum].version;
    return newURL;
}
    
function checkSize() {
    lastImage = displayedImageNumber;
    var ws = getWindowSize();
    var width = ws[0];
    var height = ws[1];
    var cs = displayedImageNumber +":"+ width + "x" + height;
    if (cs != already) {
      already = cs;
      if (images[displayedImageNumber].type == "videoclip") {
          var imgdim = [images[displayedImageNumber].width,images[displayedImageNumber].height];
          var scale = 1;
          while (scale < scaleVideoMax) {
            if (imgdim[0]*(scale+1) > width) break;
            if (imgdim[1]*(scale+1) > height) break;
            scale ++;
          }
          imgdim[0] *= scale;
          imgdim[1] *= scale;
          var img = document.getElementById("player1");
          if (!img) {
              document.getElementById("target").innerHTML = '<div id="player1"><div>'+label_noflash+'</div></div>';
              img = document.getElementById("player1");
          }
          imgdim[1];
          img.style.top = ((height-imgdim[1])/2) + 'px';
          img.style.left = ((width-imgdim[0])/2) + 'px';
          if (!videoWritten) {
            videoWritten=true;
            var fo = new SWFObject(flowPlayerURL, "FlowPlayer", imgdim[0], imgdim[1], "7", "#ffffff", true);
            fo.addParam("allowScriptAccess" ,"sameDomain");
            fo.addParam("movie" ,"FlowPlayer.swf");
            fo.addParam("quality" ,"high");
            fo.addParam("scale" ,"noScale");
            fo.addParam("wmode" ,"transparent");
            fo.addVariable("config", "{ config={loop:false,loop:false,hideControls:true,initialScale:true,videoFile: '"+images[displayedImageNumber].streamURL+"' }");
            fo.write("player1");
          }
          videoPosition=-1;
      }
      else {
          var img = document.getElementById("target");
          var newURL = getImagePreviewUrl(displayedImageNumber);
          img.innerHTML='<img class="imagemediumfs" src="'+newURL+'">';
          lastURL = newURL;
      }
      preloadImage((displayedImageNumber >= images.length-1)?0:(displayedImageNumber+1));

    }
}
var stopSlideshow = false;

var preloadedImage;
function preloadImage(inum) {
  preloadedImage=null;
  var o = images[inum];
  if (!o) return;
  if (o.type != "image") return;
  var i = new Image();
  i.src = getImagePreviewUrl(inum);
  preloadedImage = i;
}

function prevMedia() {
    if (displayedImageNumber == 0) {
        loadMedia(images.length-1);
    } else {
        loadMedia(displayedImageNumber-1);
    }
    return false;
}
function nextMedia() {
    if (displayedImageNumber >= images.length-1) {
        loadMedia(0);
    } else loadMedia(displayedImageNumber+1);
    return false;
}

function okToAutoMove() {
    if (videoWritten) {
        var vp = -1;
        try { vp = document.getElementById("FlowPlayer").getTime(); } catch (err) {}
        if (vp <= 0 || vp != videoPosition) {
            videoPosition = vp;
            return false;
        }
    }
    if (preloadedImage) {
        var ok = true;
        if (preloadedImage.readyState != window.undefined) { // IE
            ok = (preloadedImage.readyState == "complete");
        }
        if (preloadedImage.complete != window.undefined) { // Gecko && Opera
            ok =  preloadedImage.complete;
        }
        if (!ok) document.getElementById("loading").style.visibility="visible";
        return ok;
    } else return true;
}

function autoMove() {
    timer = null;
    if (okToAutoMove()) {
        document.getElementById("loading").style.visibility="hidden";
        nextMedia();
        if (!stopSlideshow) {
            setTimer();
        }
    } else {
        if (!stopSlideshow) timer = setTimeout("autoMove()",1000);
    }
}

function updateProgress() {
    if (videoWritten) { // Displaying a video
        try {
            var vp = document.getElementById("FlowPlayer").getTime();
            var vd = document.getElementById("FlowPlayer").getDuration();
            if (vd>0) displayProgress(vp/vd);
        } catch (err) {}
    } else { // Displaying a picture
        var time = new Date().getTime();
        if (!timer) time=lastItemStarted;
        displayProgress((time-lastItemStarted)/(actualDelay*1000));
    }
}

function clickFaster() {
    delay--;
    if (delay < 1) delay = 1;
    showDelay();
    return false;
}
function clickSlower() {
    delay++;
    showDelay();
    return false;
}
function showDelay() {
    document.getElementById("delay").innerHTML = delay+"s";
}
function clickPlay() {
    click();
    runPlay();
    disposeBtn();
    return false;
}
function runPlay() {
    if (videoWritten) {
        var vp = document.getElementById("FlowPlayer");
        if (vp) try { vp.DoPlay(); } catch (err) {}
    }
    setTimer();
}
function runPause() {
    clearTimeout(timer);
    timer = null;
    if (videoWritten) {
        var vp = document.getElementById("FlowPlayer");
        if (vp) try { vp.Pause(); } catch (err) {}
    }
}
function clickPause() {
    click();
    runPause();
    disposeBtn();
    return false;
}

function clickPlayPause() {
	if (timer) clickPause(); else clickPlay();
	return false;
}

function clickNext() {
    click();
    nextMedia();
    runPause();
    runPlay();
    disposeBtn();
    return false;
}
function clickPrev() {
    click();
    prevMedia();
    runPause();
    runPlay();
    disposeBtn();
    return false;
}

function setTitle(mediatitle) {
    var title = titlePattern;
    title = title.replace("{0}",titleSite);
    title = title.replace("{1}",mediatitle);
    window.document.title = title;
}

function restart() {
	startImage = 0;
	if (timer != null) clearTimeout(timer);
	timer = null;
	setTimer();
    return loadMediaImpl(0);
}
function loadMedia(inum) {
    if (startImage == inum) {
        location.href=returnToUrl;
        stopSlideshow = true;
        return;
    }
    return loadMediaImpl(inum);
}
function loadMediaImpl(inum) {
    setTitle(images[inum].title);
    displayedImageNumber = inum;
    lastURL = "";
    videoWritten = false;
    checkSize();
    updateProgress();
    return false;
}
function displayProgress(intraprc) {
    if (intraprc<0) intraprc=0;
    if (intraprc>1) intraprc=1;
    var w = 16;
    var po = document.getElementById("progressOut");
    var p = document.getElementById("progress");
    var pc = document.getElementById("progressCurrent");
    if (p) {
        var dim = getBareWindowSize()[0]-200;
        var nbLeds = Math.floor(dim / w);
        
        var inum = displayedImageNumber - startImage;
        if (inum<0) inum+=images.length;
        
        var pos1 = Math.round(nbLeds * ((inum+intraprc) / images.length));
        var pos2 = Math.round(nbLeds * ((inum+1) / images.length));
        po.style.width=(nbLeds*w)+"px";
        p.style.width=(pos2*w)+"px";
        pc.style.width=((pos2-pos1)*w)+"px";
        pc.style.left=(pos1*w)+"px";
        
        var pol = document.getElementById("progressOut_left").style;
        pol.visibility=(pos2>0 && pos2<nbLeds)?"visible":"hidden";
        pol.left = (pos2*w)+"px";
        document.getElementById("progressOut_right").style.visibility=(nbLeds==pos2)?"hidden":"visible";
        document.getElementById("progress_right").style.visibility=(nbLeds==pos1)?"visible":"hidden";
        document.getElementById("progress_left").style.visibility=(pos1>0)?"visible":"hidden";
        document.getElementById("progressCurrent_right").style.visibility=(nbLeds==pos2 && pos1<pos2)?"visible":"hidden";
        document.getElementById("progressCurrent_left").style.visibility=(pos2>0 && pos1==0)?"visible":"hidden";
        
    }
}

var controlsTimer;
var lastMove = 0;
var controlsShown=false;
var opacity;
var flagHideControls = false;
function mouseMove() {
	if (!flagHideControls) showControls();
}
function clickHide() {
	hideControls(true);
	flagHideControls = true;
	setTimeout("flagHideControls=false",3000);
	return false;
}

function showControls() {
    click();
    disposeBtn();
    if (controlsShown) {
        return;
    }
    controlsShown = true;
    opacity=8;
    var e = document.getElementById("controls");
    e.style.display = "";
    controlsTimer = setTimeout("hideControls()",5000);
    setTimeout("fadeIn()",100);
}
function click() {
    lastMove = new Date().getTime();
}
function fadeIn() {
    if (!controlsShown) return;
    document.getElementById("ssbtn"+opacity).style.visibility = "visible";
    /*
    var e = document.getElementById("controls");
    e.style.filter="alpha(opacity="+opacity+")";
    e.style.opacity=opacity/100;
    e.style.MozOpacity=opacity/100;*/
    opacity--;
    if (opacity > -1) setTimeout("fadeIn()",10);
}

function hideControls(force) {
    if (!controlsShown) return;
    var now = new Date().getTime();
    if (!force)
    if (now-lastMove<5000) {
        controlsTimer = setTimeout("hideControls()",5000-now+lastMove);
        return;
    }

    controlsShown = false;
    opacity=0;
    setTimeout("fadeOut()",100);
}

function fadeOut() {
    if (controlsShown) return;
    document.getElementById("ssbtn"+opacity).style.visibility = "hidden";
    opacity ++;
    var e = document.getElementById("controls");
    if (opacity < 8) {
        setTimeout("fadeOut()",10);
    } else {
        e.style.display = "none";
    }
}

function disposeBtn() {
    var ppc = document.getElementById("playPauseCheck").style;
    if (timer) {
        ppc.visibility="";
    } else {
        ppc.visibility="hidden";
    }

    var rc = document.getElementById("randomCheck").style;
    if (randomized) {
        rc.visibility="visible";
    } else {
        rc.visibility="hidden";
    }
    
}

function setTimer() {
    if (videoWritten) {
        if (!timer) timer = setTimeout("autoMove()",1000);
    } else {
        if (!timer) {
            timer = setTimeout("autoMove()",delay*1000);
            actualDelay = delay;
        }
    }
    lastItemStarted = new Date().getTime();
}

function startShow() {
    setTimer();
    displayProgress(0);
    disposeBtn();
    setInterval("updateProgress()",500);
}


function mo(elem) {
	elem.className = "ssmenubtn";
}
function mi(elem) {
	elem.className = "ssmenubtnover";
}

function clickRecursive() {
	var href=  location.href;
	if (href.indexOf("recursive=true")>0) {
		href = href.replace("recursive=true","recursive=false");
	} else
	if (href.indexOf("recursive=false")>0) {
		href = href.replace("recursive=false","recursive=true");
	} else if (href.indexOf("?")>0) {
		href += "&recursive=true";
	} else {
		href += "?recursive=true";
	}
	location.href = href;
}

var randomized = false;
function randomizeList() {
	if (randomized) {
		images.sort(function(a,b){return a.order - b.order});
		restart();
		randomized = false;
	} else {
		images.sort(function(){return Math.round(Math.random())-0.5});
		restart();
		randomized = true;
	}
}

function clickRandom() {
    click();
    randomizeList();
    disposeBtn();
    return false;
}