﻿//-------------------------------------//
// Campingwijzer Photo Viewer          //
// Copyright (c) 2008 by Masc Software //
// Programmed by Sven Glazenburg       //
// All rights reserved                 //
//-------------------------------------//

var photosPerPage = 15;
var selectedThumbIndex = 0;
var selectedPhotoPageIndex = 0;

var photoData;
var thumbnailAspx;

var photosParentType;
var photosParentId;
var photosParentMax = -1;
var photosEditMode = true;
var addPhotoType;

var photoRandom = Math.floor(Math.random() * 60000); // random getal zodat gewijzigde plaatjes niet uit de cache komen.

var backColorPhotoViewer;
var backColorPhoto, borderColorPhoto;
var backColorNoPhoto, borderColorNoPhoto;
var borderColorPhotoMouseOver, borderColorPhotoMouseOut;
var borderColorPhotoMouseOverSelected, borderColorPhotoMouseOutSelected;

function photoDiv(thumbIndex, divIndex) 
{
	return document.getElementById('photo_' + thumbIndex + '_div_' + divIndex);
}

function photoImg(thumbIndex) 
{
	return document.getElementById('photo_' + thumbIndex + '_img');
}

function setPhotoThumb(thumbIndex, cursor, borderColor, backgroundColor, src, alt, publicVisible) {
	var div0 = photoDiv(thumbIndex, 0);
	var div1 = photoDiv(thumbIndex, 1);
	var img = photoImg(thumbIndex);
	
	div0.style.cursor = cursor;
	
	div1.style.borderColor = borderColor;
	div1.style.backgroundColor = backgroundColor; 
	
	if(src)
	{
	    img.src = thumbnailAspx + '?file=' + src + '&maxw=60&maxh=60&returnmax=true&zoomToFit=true&backColor=' + backgroundColor.replace('#', '') + '&rnd=' + photoRandom;
		img.alt = alt;
		img.style.display = 'inline';
		$(div1).children(".CWPhotoViewerImagePrivate").remove();
		if (!publicVisible) {
		    $(div1).prepend("<div class='CWPhotoViewerImagePrivate' style='position:relative'><div style='position:absolute;background:url(" + WebSiteBase + "Images/ImagePrivate.gif" + ");width:10px;height:10px;left:3px;top:3px;'></div></div>");
		}
	}
	else
	{
		img.style.display = 'none';
	}
}

function initPhotoThumb(thumbIndex, photoObj) 
{
	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var photoIndex = firstPhotoIndex + thumbIndex;
	
	if (photoObj) 
		setPhotoThumb(thumbIndex, 'pointer', borderColorPhoto, backColorPhoto, photoObj.src, photoObj.alt, photoObj.publicVisible);
	else
		setPhotoThumb(thumbIndex, 'default', borderColorNoPhoto, backColorNoPhoto, '', '', true);
}

function initPhotoPage(pageIndex)
{
	deselectCurrentPhoto();
	
	var totalPages = Math.ceil(photoData.length / photosPerPage);
	
	selectedPhotoPageIndex = pageIndex;

	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var maxPhotoIndex = (photoData.length - 1);
	
	for (var thumbIndex=0; thumbIndex<photosPerPage; thumbIndex++)
	{
		var photoIndex = firstPhotoIndex + thumbIndex;
		
		if (photoIndex <= maxPhotoIndex)
			initPhotoThumb(thumbIndex, photoData[photoIndex]);
		else
			initPhotoThumb(thumbIndex, null);
	}
	
	selectPhoto(0, true);
	
	var lblCurrentPhotoPage = document.getElementById('lblCurrentPhotoPage');
	lblCurrentPhotoPage.innerHTML = (selectedPhotoPageIndex + 1);
	
	var lblTotalPhotoPages = document.getElementById('lblTotalPhotoPages');
	lblTotalPhotoPages.innerHTML = Math.max(totalPages, 1);
	
	var hlPrevPhotoPage = document.getElementById('hlPrevPhotoPage');
	if (selectedPhotoPageIndex > 0)
	{
		hlPrevPhotoPage.disabled = null;
		hlPrevPhotoPage.style.visibility = 'visible';
	}
	else
	{
		hlPrevPhotoPage.disabled = 'disabled';
		hlPrevPhotoPage.style.visibility = 'hidden';
	}
		
	var hlNextPhotoPage = document.getElementById('hlNextPhotoPage');
	if (selectedPhotoPageIndex < (totalPages - 1))
	{
		hlNextPhotoPage.disabled = null;
		hlNextPhotoPage.style.visibility = 'visible';
	}
	else
	{
		hlNextPhotoPage.disabled = 'disabled';
		hlNextPhotoPage.style.visibility = 'hidden';
	}
}

function mouseOverPhoto(thumbIndex)
{
	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var maxPhotoIndex = (photoData.length - 1);
	var photoIndex = firstPhotoIndex + thumbIndex;
	
	var div0 = photoDiv(thumbIndex, 0);
	
	if (photoIndex <= maxPhotoIndex)
	{
		if (thumbIndex == selectedThumbIndex)
			div0.style.borderColor = borderColorPhotoMouseOverSelected;
		else
			div0.style.borderColor = borderColorPhotoMouseOver;
	}
	else
		div0.style.borderColor = backColorPhotoViewer;
}

function mouseOutPhoto(thumbIndex)
{
	if (thumbIndex < 0) return;

	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var maxPhotoIndex = (photoData.length - 1);
	var photoIndex = firstPhotoIndex + thumbIndex;
	
	var div0 = photoDiv(thumbIndex, 0);
	
	if (photoIndex <= maxPhotoIndex)
	{
		if (thumbIndex == selectedThumbIndex)
			div0.style.borderColor = borderColorPhotoMouseOutSelected;
		else
			div0.style.borderColor = borderColorPhotoMouseOut;
	}
	else
		div0.style.borderColor = backColorPhotoViewer;
}

function deselectCurrentPhoto()
{
	var prevSelectedThumbIndex = selectedThumbIndex;
	selectedThumbIndex = -1;

	showEditButtons(false);
	
	if (prevSelectedThumbIndex >= 0)
		mouseOutPhoto(prevSelectedThumbIndex);
}

function selectCurrentPhoto(canClearPhoto)
{
	if (canClearPhoto)
		mouseOutPhoto(selectedThumbIndex);
	else
		mouseOverPhoto(selectedThumbIndex);
}

function selectPhoto(thumbIndex, canClearPhoto)
{
	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var maxPhotoIndex = (photoData.length - 1);
	var photoIndex = firstPhotoIndex + thumbIndex;
	
	if (photoIndex <= maxPhotoIndex)
	{
		deselectCurrentPhoto();
		selectedThumbIndex = thumbIndex;
		showEditButtons(true);
		selectCurrentPhoto(canClearPhoto);			
	}
	
	var photo = document.getElementById('photo_Photo');
	var lblPhotoTitle = document.getElementById('lblPhotoTitle');
	var lblPhotographer = document.getElementById('lblPhotographer');
	
	if (photoIndex <= maxPhotoIndex)
	{
	    photo.src = thumbnailAspx + '?file=' + photoData[photoIndex].src + '&maxw=415&maxh=330&returnmax=true&backcolor=f8f8f8&rnd=' + photoRandom; // 300 300 
		if (photoData.length == 0)
			photo.alt = '';
		else
			photo.alt = 'Klik op de foto om de volgende foto te bekijken!';
		lblPhotoTitle.innerHTML = photoData[photoIndex].title;
		lblPhotographer.innerHTML = photoData[photoIndex].photographer;
		photo.style.display = 'inline';
	} else {
		if (canClearPhoto)
		{
			photo.src = '';
			lblPhotoTitle.innerHTML = '';
			lblPhotographer.innerHTML = '';
			photo.style.display = 'none';
		}
	}
}

function prevPhotoPage() 
{
	var hlPrevPhotoPage = document.getElementById('hlPrevPhotoPage');
	if (!hlPrevPhotoPage.disabled)
		initPhotoPage(selectedPhotoPageIndex-1);
}

function nextPhotoPage()
{
	var hlNextPhotoPage = document.getElementById('hlNextPhotoPage');
	if (!hlNextPhotoPage.disabled)
		initPhotoPage(selectedPhotoPageIndex+1);
}

function nextPhoto()
{
	var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
	var maxPhotoIndex = (photoData.length - 1);
	var photoIndex = firstPhotoIndex + selectedThumbIndex;
	var newPhotoIndex;
	
	if (photoIndex < maxPhotoIndex)
		newPhotoIndex = photoIndex + 1;
	else 
		newPhotoIndex = 0;
		
	var newPhotoPageIndex = Math.floor(newPhotoIndex / photosPerPage);
	
	if (newPhotoPageIndex != selectedPhotoPageIndex)
		initPhotoPage(newPhotoPageIndex)
	else
		selectPhoto(newPhotoIndex % photosPerPage, true);
}

function initPhotoViewer(photoDataArray, thumbnailAspxUrl, colors) {
    var prevPhotoId = getCurrentPhotoId();
    
	photoData = photoDataArray;
	thumbnailAspx = thumbnailAspxUrl;
	
	backColorPhotoViewer = colors[0];
	backColorPhoto = colors[1];
	borderColorPhoto = colors[2];
	backColorNoPhoto = colors[3];
	borderColorNoPhoto = colors[4];
	borderColorPhotoMouseOver = colors[5];
	borderColorPhotoMouseOut = colors[6];
	borderColorPhotoMouseOverSelected = colors[7];
	borderColorPhotoMouseOutSelected = colors[8];

	showEditButtons(false);

	initPhotoPage(0);
	if (prevPhotoId > 0) {
	    selectPhotoUsingId(prevPhotoId);
	}
	
	var no_photos_div = document.getElementById('no_photos_div');
	if (photoData.length == 0)
		no_photos_div.style.visibility = 'visible';
	else
		no_photos_div.style.visibility = 'hidden';
	
	var photo_thumbs = document.getElementById('photo_thumbs');
	photo_thumbs.style.visibility = 'visible';
}

function getCurrentPhotoIndex() {
    var firstPhotoIndex = (selectedPhotoPageIndex * photosPerPage);
    var photoIndex = firstPhotoIndex + selectedThumbIndex;

    return photoIndex;
}

function getCurrentPhotoId() {
    if (photoData == null)
        return -1;

    var maxPhotoIndex = (photoData.length - 1);
    var photoIndex = getCurrentPhotoIndex();

    if ((photoIndex >= 0) && (photoIndex <= maxPhotoIndex))
        return photoData[photoIndex].id;
    else
        return -1;
}

function selectPhotoUsingId(id) {
    var newPhotoIndex = -1;

    if (id > 0) {
        for (var i = 0; i < photoData.length; i++) {
            if (photoData[i].id == id) {
                newPhotoIndex = i;
                break;
            }
        }
    }

    if (newPhotoIndex >= 0) {
        var newPhotoPageIndex = Math.floor(newPhotoIndex / photosPerPage);

        initPhotoPage(newPhotoPageIndex)
        selectPhoto(newPhotoIndex % photosPerPage, true);
    } else {
        initPhotoPage(0);
    }
}

function swapPhotos(photoIndex1, photoIndex2) {
    var maxPhotoIndex = (photoData.length - 1);

    if (photoIndex1 < 0) photoIndex1 = maxPhotoIndex;
    if (photoIndex1 > maxPhotoIndex) photoIndex1 = 0;

    if (photoIndex2 < 0) photoIndex2 = maxPhotoIndex;
    if (photoIndex2 > maxPhotoIndex) photoIndex2 = 0;

    var pid1 = photoData[photoIndex1].id;
    var pid2 = photoData[photoIndex2].id;

    $.ajax({ type: "POST",
        url: WebSiteBase + "Webservices/FotoWebService.aspx",
        data: "action=swap&type=" + photosParentType + "&id=" + photosParentId + "&pid1=" + pid1 + "&pid2=" + pid2,
        success: function() { loadParentPhotos(photosParentType, photosParentId, photosParentMax, photosEditMode); },
        dataType: "script"
    });
}

function togglePublicPhoto(publicVisible) {
    $.ajax({ type: "POST",
        url: WebSiteBase + "Webservices/FotoWebService.aspx",
        data: "action=togglePublic&type=" + photosParentType + "&id=" + photosParentId + "&pid=" + getCurrentPhotoId() + "&public=" + (publicVisible ? "true" : "false"),
        success: function() { loadParentPhotos(photosParentType, photosParentId, photosParentMax, photosEditMode); },
        dataType: "script"
    });
}

function moveCurrentPhotoUp(parentId) {
    var photoIndex = getCurrentPhotoIndex();
    swapPhotos(photoIndex, photoIndex - 1);
}

function moveCurrentPhotoDown(parentId) {
    var photoIndex = getCurrentPhotoIndex();
    swapPhotos(photoIndex, photoIndex + 1);
}

function loadParentPhotos(parentType, parentId, maxAantal, editMode, doSelectLastPhoto, photoIndexToSelect) {
    photosParentType = parentType;
    photosParentId = parentId;
    photosParentMax = maxAantal;
    photosEditMode = editMode;

    $.ajax({ type: "POST",
             url: WebSiteBase + "Webservices/FotoWebService.aspx",
             data: "action=get&type=" + photosParentType +"&id=" + photosParentId + "&max=" + photosParentMax + "&EditMode=" + (photosEditMode ? "true" : "false"),
             success: function() {
                    if (doSelectLastPhoto)
                        selectLastPhoto(doSelectLastPhoto);
                    else
                        selectPhotoUsingIndex(photoIndexToSelect);
                },
             dataType: "script"
           });
}

function deleteCurrentPhoto(msg) {
    if (msg == null || msg == "undefined" || msg == "")
        msg = "Weet u zeker dat u deze foto wilt verwijderen?";

    if (!confirm(msg))
        return;

    var photoIndex = getCurrentPhotoIndex();

    $.ajax({ type: "POST",
             url: WebSiteBase + "Webservices/FotoWebService.aspx",
             data: "action=delete&type=" + photosParentType + "&id=" + photosParentId + "&pid=" + getCurrentPhotoId(),
             success: function() { loadParentPhotos(photosParentType, photosParentId, photosParentMax, photosEditMode, false, photoIndex); },
             dataType: "script"
           });
}

function showEditButtons(doShow) {
    var panel = document.getElementById('pnlEditButtonsPhoto'); //$("div[name='pnlEditButtonsPhoto']")[0];
    if (panel)
        panel.style.visibility = (doShow ? "visible" : "hidden");
}

function addPhoto(type) {
    addPhotoType = "add";
    window.radopen(WebSiteBase + "beheer/AddAfbeelding.aspx?type=" + photosParentType, "CWPhotoViewer_window");
}

function addPhotoCallBack(radWindow, returnValue) {
    if (addPhotoType == 'edit') {
        if (returnValue != '') {
            photoRandom = Math.floor(Math.random() * 60000); // plaatje gewijzigd, dus random getal veranderen, zodat er niet uit de cache gehaald wordt!
            loadParentPhotos(photosParentType, photosParentId, photosParentMax, photosEditMode, false, getCurrentPhotoIndex());
        }
        return;
    }
    
    if (addPhotoType == "add") {
        if (returnValue != '') {
            $.ajax({ type: "POST",
                url: WebSiteBase + "Webservices/FotoWebService.aspx",
                data: "action=add&type=" + photosParentType + "&id=" + photosParentId + "&pids=" + returnValue,
                success: function() { loadParentPhotos(photosParentType, photosParentId, photosParentMax, photosEditMode, true); },
                dataType: "script"
            });
        }
        return;
    }
}

function editPhoto() {
    addPhotoType = "edit";
    window.radopen(WebSiteBase + "beheer/EditAfbeelding.aspx?type=" + photosParentType + "&id=" + photosParentId + "&pid=" + getCurrentPhotoId(), "CWPhotoViewer_window");
}

function selectLastPhoto(doSelectLastPhoto) {
    if (doSelectLastPhoto) {
        var newPhotoIndex = photoData.length - 1;
        var newPhotoPageIndex = Math.floor(newPhotoIndex / photosPerPage);

        if (newPhotoPageIndex != selectedPhotoPageIndex)
            initPhotoPage(newPhotoPageIndex);

        selectPhoto(newPhotoIndex % photosPerPage, true);
    }
}

function selectPhotoUsingIndex(newPhotoIndex) {
    if (!newPhotoIndex) return;

    var maxPhotoIndex = (photoData.length - 1);
    if (maxPhotoIndex >= 0)
    {
        if (newPhotoIndex < 0) newPhotoIndex = 0;
        if (newPhotoIndex > maxPhotoIndex) newPhotoIndex = maxPhotoIndex;
        
        var newPhotoPageIndex = Math.floor(newPhotoIndex / photosPerPage);

        if (newPhotoPageIndex != selectedPhotoPageIndex)
            initPhotoPage(newPhotoPageIndex);

        selectPhoto(newPhotoIndex % photosPerPage, true);
    }
}