//=============================================================================
// Stand alone image selector for Photoshare
// (C) Jorn Lind-Nielsen
//=============================================================================

  // htmlArea 3.0 editor for access in selector window
var currentPhotoshareEditor = null;

//=============================================================================
// External interface functions
//=============================================================================

  // onClick handler for "find image" button in external program
function photoshareFindImage(inputID, photoshareURL, thumbnailSize)
{
  var xSize = parseInt(thumbnailSize) + 340;
  var ySize = parseInt(thumbnailSize) + 100;

  window.open(photoshareURL+"&targetID="+inputID, "", "width="+xSize+",height="+ySize+",resizable");
}


function photoshareFindImageHtmlArea30(editor, photoshareURL, thumbnailSize)
{
  var xSize = parseInt(thumbnailSize) + 340;
  var ySize = parseInt(thumbnailSize) + 100;

    // Save editor for access in selector window
  currentPhotoshareEditor = editor;

    // Inform image selector of how it should paste the resulting HTML
  photoshareURL += "&target=htmlArea30";

  window.open(photoshareURL, "", "width="+xSize+",height="+ySize+",resizable");
}


//=============================================================================
// Internal stuff
//=============================================================================

  // OnLoad handler ensures an initial image is selected
function handleOnLoad()
{
  selectFolder(initialFolderID);

    // Move focus initially to folder selector
  var folderSelect = document.getElementById("folderSelect");
  folderSelect.focus();
}


  // A new folder is selected (user changed value of folder selector)
function handleFolderSelect(folderSelect)
{
  var folderID = folderSelect.value;
  selectFolder(folderID);
}


  // Do actual folder selction
function selectFolder(folderID)
{
    // Get set of images in the selected folder
  var imageSet = imageInfo[folderID];

    // Resize image selector for new number of options (images)
  var imageSelect = document.getElementById("imageSelector");
  imageSelect.options.length = imageSet.length;
 
    // Iterate through alle images and create new selector options for each of them
  for (var i in imageSet)
  {
    imageSelect.options[i].value = imageSet[i].id;
    imageSelect.options[i].text = imageSet[i].title;
  }

    // Select the first image
  selectImage(imageSet[0].id);
}


  // User changed value of image selector
function handleImageSelect(imgSelect)
{
  var imageID = imgSelect.value;
  selectImage(imageID);
}


  // Do actual updates related to changing of image
function selectImage(imageID)
{
    // Find thumbnails image DOM element. Expects thumbnailBaseURL in HTML output.
  imageURL = thumbnailBaseURL + imageID;

    // Update image with new source address
  var imageElement = document.getElementById("previewImage");
  imageElement.src = imageURL;
}


  // User clicks on "select image" button
  // Depends on targetInputID being outputted in the HTML
function handleOnClickSelect(URLMode, HTMLMode, targetMode)
{
    // Get URL of selected image
  var imageElement = document.getElementById("previewImage");
  var url = imageElement.src;
  var html = url;

    // Remove "thumbnail" setting from URL
  url = url.replace(/&thumbnail=1/, "");

    // Strip absolute part of URL if requested
  if (URLMode != "absolute")
  {
    var startPos = url.indexOf("index.php?");
    url = url.substr(startPos);
  }

    // Add <IMG> (and other) tag around image URL if requested
  if (HTMLMode == 'img')
  {
      // Figure out how to paste HTML image - get format from select element
    var htmlSelectElement = document.getElementById("htmlFormat");
    var pasteFormat = htmlSelectElement.value;
    var imageSelectElement = document.getElementById("imageSelector");
    var folderSelectElement = document.getElementById("folderSelect");
    var folderID = folderSelectElement.value;
    var folderURL = folderBaseURL + folderID;
    var imageID = document.getElementById('imageSelector').value;

      // displayImageBaseURL is expected in HTML output
    var displayImageURL = displayImageBaseURL + imageID;

    switch (pasteFormat)
    {
      case 'fullImage':
        html = "<img src=\"" + url + "\"/>";
      break;
      case 'thumbnail':
        html = "<img src=\"" + url + "&thumbnail=1\"/>";
      break;
      case 'thumbnailPopup':
        html = "<a href=\"javascript:imgDisplayPopup('" + displayImageURL + "')\">" 
               + "<img src=\"" + url + "&thumbnail=1\"/></a>";
      break;
      case 'fullImageURL':
        html = "<a href=\"" + url + "\">" + imageSelectElement.options[imageSelectElement.selectedIndex].text + "</a>";
      break;
      case 'fullImageURLPopup':
        html = "<a href=\"javascript:imgDisplayPopup('" + displayImageURL + "')\">" 
               + imageSelectElement.options[imageSelectElement.selectedIndex].text + "</a>";
      break;
      case 'albumURL':
        html = "<a href=\"" + folderURL + "\">" + folderSelectElement.options[folderSelectElement.selectedIndex].text + "</a>";
      break;
      case 'albumThumbnailURL':
        html = "<a href=\"" + folderURL + "\"><img src=\"" + url + "&thumbnail=1\"/></a>";
      break;
      case 'albumURLpopup':
        html = "<a href=\"javascript:folderPopup('" + folderURL + "')\">" + folderSelectElement.options[folderSelectElement.selectedIndex].text + "</a>";
      break;
      case 'albumThumbnailURLpopup':
        html = "<a href=\"javascript:folderPopup('" + folderURL + "')\"><img src=\"" + url + "&thumbnail=1\"/></a>";
      break;
    }

  }
  else
    html = url;

    // Paste image data into original input/textarea element

  if (targetMode == 'htmlArea30')
  {
    window.opener.currentPhotoshareEditor.focusEditor();
    window.opener.currentPhotoshareEditor.insertHTML(html);
  }
  else
  {
      // Where to insert the calculate URL
    var targetInputElement = window.opener.document.getElementById(targetInputID);

    if (targetInputElement.tagName == 'INPUT')
    {
        // Simply overwrite value of input elements
      targetInputElement.value = html;
    }
    else if (targetInputElement.tagName == 'TEXTAREA')
    {
        // Try to paste into textarea - technique depends on environment
        
      if (typeof document.selection != "undefined")
      {
        if (targetInputElement.style.display == 'none' &&
            typeof window.opener.editor_insertHTML != "undefined")
        {
            // IE: using htmlArea 2.0(hopefully) for editing
          window.opener.editor_insertHTML(targetInputID, html);
        }
        else
        {
            // IE: Move focus to textarea (which fortunately keeps its current selection) and overwrite selection
          targetInputElement.focus();
          window.opener.document.selection.createRange().text = html;
        }
      }
      else if (typeof targetInputElement.selectionStart != "undefined")
      {
          // Mozilla: Get start and end points of selection and create new value based on old value
        var startPos = targetInputElement.selectionStart;
        var endPos = targetInputElement.selectionEnd;
        targetInputElement.value = targetInputElement.value.substring(0, startPos)
                                   + html
                                   + targetInputElement.value.substring(endPos, targetInputElement.value.length);
      } 
      else 
      {
          // Others: just append to the current value
        targetInputElement.value += html;
      }
    }
  }

  window.close();
}


function handleOnClickCancel()
{
  window.close();
}


