/************* Class for OverlayNavigation **************/
var ClassOverlayNavigation = Class.create();
ClassOverlayNavigation.prototype = {

  // construct
  init:function(userID, itemID) {

     this.userID = userID;
    this.itemID = itemID;

    this.interfaceImageFolderInfo = '/interfaces/xml_traverse_user_image_folders.php';
    this.interfaceImageFolderEdit = '/interfaces/xml_folder_and_image_admin.php';
  },

  go:function(which) {
    switch (which) {
      case 'first':
        this.itemID = this.items[0].id;
        this.itemNr = 0;
      break;
      case 'last':
        this.itemID = this.items[(this.items.length-1)].id;
        this.itemNr = this.items.length-1;
      break;
      case 'prev':
        if (this.items[(this.itemNr-1)]) {
          this.itemNr = this.itemNr-1;
        }
        else {
          this.itemNr = this.items.length-1;
        }
        this.itemID = this.items[this.itemNr].id;
      break;
      case 'next':
        if (this.items[(this.itemNr+1)]) {
          this.itemNr = this.itemNr+1;
        }
        else {
          this.itemNr = 0;
        }
        this.itemID = this.items[this.itemNr].id;
      break;
    }

    this.setSelected();
    this.setView();
  },

  step:function(nr) {
    // Alle vorhergehenden Steps verstecken
    var steps = "#" + this.overLayID + " ." + this.context + "step";
    $A($$(steps)).each(function(oneStep) {
      Element.hide(oneStep);
    });

    // zeige Step
    if ($(this.context + "Step" + nr))
      Element.show(this.context + "Step" + nr);
  }
}

/************* Class for ImageContext **************/
var ClassImageContext = Class.create();
ClassImageContext.prototype = Object.extend({

  initialize:function(userID, itemID, folderID, itemType, overLayID) {

    // overlay
    if ((typeof overLayID != "undefined") && (this.overLayID != null) && (overLayID != "")) {
      this.overLayID = overLayID;
    }

    var onOpen     = function() { this.setData(userID, itemID, folderID, itemType); this.getItemList(); }.bind(this);
    FOA.overlayer  = new ClassOverlay($(this.overLayID), this.onClose, onOpen);
  },

  getImageSrc:function(imageParams) {
   switch (this.itemType) {
      case "pool":
        imageSrc = ImageTools.staticPoolImageURL(this.itemID, this.items[this.itemNr]["t"], imageParams, 0);
      break;
      case "formblitzimage":
        imageSrc = ImageTools.staticFormblitzImageURL(this.userID, this.itemID, this.items[this.itemNr]["ty"], this.items[this.itemNr]["t"], imageParams, 0);
      break;
      default:
        imageSrc = ImageTools.staticImageURL(this.userID, this.itemID, this.items[this.itemNr]["t"], imageParams, 0);
      break;
    }

    return imageSrc;
  },

  setData:function(userID, itemID, folderID, itemType) {

    // construct parent navigation
    this.init(userID, itemID);

    // model
    this.items         = new Array();
    this.itemNr        = 0;
    this.itemType      = itemType;
    FOA.selectedFolder = folderID;

    // view
    this.view                = new Hash();
    this.view['activeImage'] = $$("span.activeImage");
    this.view['imageAmount'] = $$("span.imageContextAmount");
    this.view['n']           = $$(".imageContextName");        // n = name
    this.view['c']           = $$("span.imageContextDate");    // t = created
    this.view['w']           = $$("span.imageContextWidth");   // w = width
    this.view['h']           = $$("span.imageContextHeight");  // h = height

    this.context = "image";

    this.xmlItems  = false;
  },

  getItemList:function() {

    // wenn bereits eine xmlItemList existiert
    if ((typeof myGallery != "undefined") && (myGallery.xmlFilesList != null)) {
      this.xmlItems = myGallery.xmlFilesList;
      this.parseItemList(this.xmlItems);
    }
    // sonst xmlItemList anfordern
    else {
      // hole alle Bilder eines Ordners
      new Ajax.Request(this.interfaceImageFolderInfo, {
        parameters: 'mode=files&folder=' + FOA.selectedFolder,
        onSuccess: function(AjaxResponse) {
                      var XMLDoc  = AjaxResponse.responseXML;
                      var fileXML = XMLDoc.getElementsByTagName("response")[0];
                      var f       = fileXML.getElementsByTagName("item");
                      this.parseItemList(f);
                   }.bind(this)
      });
    }
  },

  parseItemList:function(f) {

    var i = 0;

    $A(f).each(function(oneFile) {
      var fileObject = new Hash();
      $A(oneFile.attributes).each(function(oneAttribute) {
        if (oneAttribute.nodeName == "i") {
          if (oneAttribute.nodeValue == this.itemID) {
            this.itemNr = i;
          }
          fileObject["id"] = oneAttribute.nodeValue;
        }
        else {
          fileObject[oneAttribute.nodeName] = oneAttribute.nodeValue;
        }
      }.bind(this));
      this.items[i] = fileObject;
      i++;
    }.bind(this));

    this.setView();
  },

  setSelected:function() {},

  setViewText:function() {

    //ImageInfos setzen
    $H(this.view).each(function(oneItem) {
      $A(oneItem.value).each(function(oneElement) {
        // gibt es einen TextNode?
        if (!oneElement.hasChildNodes()) {
          if (oneElement.nodeName.toLowerCase() == "span") {
            oneElement.appendChild(document.createTextNode(" "));
          }
        }
        // daten übergeben
        switch (oneItem.key) {
          case 'activeImage':
            oneElement.firstChild.data = this.itemNr + 1;
          break;
          case 'imageAmount':
            oneElement.firstChild.data = this.items.length;
          break;
          case 'n':
          case 'c':
          case 'h':
          case 'w':
            switch (oneElement.nodeName.toLowerCase()) {
              case 'input':
                oneElement.value = this.items[this.itemNr][oneItem.key];
              break;
              default:
                oneElement.firstChild.data = this.items[this.itemNr][oneItem.key];
              break;
            }
          break;
        }
      }.bind(this));
    }.bind(this));
  },

  rename:function() {
    var imageName = $$("#formImageRename input.imageContextName")[0].value;

    var onComplete = function(AjaxResponse) {
                        var XMLDoc    = AjaxResponse.responseXML;
                        var imageXML = XMLDoc.getElementsByTagName("response")[0];
                        var newName;
                        if (newName = imageXML.getElementsByTagName("newName")) {
                          this.items[this.itemNr]['n'] = newName[0].firstChild.data;
                          this.setView();
                          myGallery.load(FOA.selectedFolder);
                        }
                     }.bind(this)

    ImageTools.rename(this.itemID, imageName, onComplete);

  },

  remove:function() {
    var onComplete = function(AjaxResponse) {
                        var XMLDoc    = AjaxResponse.responseXML;
                        var imageXML = XMLDoc.getElementsByTagName("response")[0];
                        // refresh the Gallery
                        FolderTools.refreshFolder(FOA.selectedFolder);
                        ImageTools.removeFromList(this.itemID);
                        FOA.overlayer.closeOverlay();
                      }.bind(this)

    ImageTools.drop(this.itemID, onComplete);
  },

  startProduct:function() {
     location.href = '/myproducts/printsmapEditor/?folder_id=' + FOA.selectedFolder + '&offset=0&addImages=' + this.itemID;
  }

}, ClassOverlayNavigation.prototype);


/************* Class for ImageShow **************/
var ClassImageSlideShow = Class.create();
ClassImageSlideShow.prototype = Object.extend({

  overLayID: "overLayerImageSlideShow",

  onClose:function() {
    $("ImageSlideShow").hide();
  },

  setView:function() {

    //Image setzen
    var showImage;
    if (showImage = $$("#" + this.overLayID + " .showActiveImage")[0]) {

      Element.setStyle(showImage, { display : "none" });
      Element.setStyle($(this.overLayID), { top  : 100 + "px" });

      // overlay size anpassen
      var maxWidth  = $(this.overLayID).ImageSizeMediumPIXEL;

      var maxHeight = $(this.overLayID).ImageSizeMediumPIXEL;

      console.log('Breite: ' + maxWidth);
      var showImageTemp = new Image();

      showImageTemp.onload = function(img) {

        showImage.src     = img.src;
        showImage.width   = img.width;
        showImage.height  = img.height;

        setTimeout(function() {
          Element.setStyle(showImage, { display  : "block" });
        }, 300);

        var w  = parseInt(img.width);
        var h  = parseInt(img.height);

        if (w > h) {
          h = h / w * maxHeight;
          w = maxWidth;
        }
        else {
          w = w / h * maxWidth;
          h = maxHeight;
        }

        Element.setStyle($(this.overLayID), { width  : (parseInt(w) + 20) + "px",
                                              height : (parseInt(h) + 50) + "px" });
        // overlay position anpassen
        FOA.overlayer.centerContentBox(w, h);
        Element.setStyle($(this.overLayID), { top : 100 + "px" });

      }.bind(this, showImageTemp);

      showImageTemp.src = this.getImageSrc({width:maxWidth, height:maxHeight, fitcanvas:false});
    }

    this.setViewText();
  }
}, ClassImageContext.prototype);

/************* Class for ImageInfo **************/
var ClassImageInfo = Class.create();
ClassImageInfo.prototype = Object.extend({

  overLayID: "overLayerImageContext",

  onClose:function() {},

  setView:function() {

    //Image setzen
    var showImage;
    if (showImage = $$("#" + this.overLayID + " .showActiveImage")[0]) {

      var showImageWidth  = parseInt(showImage.parentNode.getStyle('width'));
      var showImageHeight = parseInt(showImage.parentNode.getStyle('height'));

      Element.setStyle(showImage, { display : "none" });

      var showImageTemp = new Image();

      showImageTemp.onload = function() {
        showImage.src     = this.src;
        showImage.width   = this.width;
        showImage.height  = this.height;

        Element.setStyle(showImage, { display  : "block" });
      }

      showImageTemp.src = this.getImageSrc({width:showImageWidth, height:showImageHeight, fitcanvas:true});
    }

    this.setViewText();
  }

}, ClassImageContext.prototype);

/************* Class for FolderSelection **************/
var ClassFolderContext = Class.create();
ClassFolderContext.prototype = Object.extend({

  initialize:function(userID, itemID, overLayID, onClose) {

    // construct parent navigation
    this.init(userID, itemID);
    // model
    this.items         = new Array();
    FOA.selectedFolder = itemID;
    this.itemNr        = 0;
    this.overLayID     = overLayID;

    // Abbruch ohne Folder
    if (FOA.selectedFolder == 0)
      return;

     // view
    this.view                 = new Hash();
    this.view['activeFolder'] = $$("span.activeFolder");
    this.view['folderAmount'] = $$("span.folderAmount");
    this.view['name']         = $$(".folderContextName");
    this.view['created']      = $$("span.folderContextDate");
    this.view['file_amount']  = $$("span.folderContextImageAmount");

    this.context = "folder";

    // Overlay öffnen
    var overlayer;
    if (!(overlayer = $(this.overLayID))) {
      this.overLayID = "overLayerFolderContext";
      overlayer      = $(this.overLayID);
    }

    FOA.overlayer = new ClassOverlay(overlayer, onClose, null);

    // hole alle Folder(mit Eigenschaften)
    new Ajax.Request(this.interfaceImageFolderInfo, {
      parameters: 'mode=folders',
      onSuccess: function(AjaxResponse) {
                    var XMLDoc   = AjaxResponse.responseXML;
                    var fileXML = XMLDoc.getElementsByTagName("response")[0];
                    var f       = fileXML.getElementsByTagName("folder");
                    var i       = 0;

                    $A(f).each(function(oneFile) {
                      var fileObject = new Hash();
                      $A(oneFile.attributes).each(function(oneAttribute) {
                        fileObject[oneAttribute.nodeName] = oneAttribute.nodeValue;
                        if ((oneAttribute.nodeName == "id") && (oneAttribute.nodeValue == this.itemID)) {
                          this.itemNr = i;
                        }
                      }.bind(this));
                      this.items[i] = fileObject;
                      i++;
                    }.bind(this));
                    this.setView();
                 }.bind(this)
    });
  },

  rename:function(nr) {

    var folderName = $$("#formRename input.folderContextName")[0].value;

    var onComplete = function(AjaxResponse) {
                        var XMLDoc     = AjaxResponse.responseXML;
                        var folderXML = XMLDoc.getElementsByTagName("response")[0];
                        var newName;
                        if (newName = folderXML.getElementsByTagName("newName")) {
                          this.items[this.itemNr]["name"] = newName[0].firstChild.data;
                          this.setView();
                          // refresh the Gallery
                          FolderTools.refreshFolder(this.itemID);
                        }
                     }.bind(this);

    FolderTools.rename(this.itemID, folderName, onComplete);
  },

  remove:function() {

    radios = $("formDelete").deleteMode;

    $A(radios).each(function(oneRadio) {
      if (oneRadio.checked) {
        params = false;
        if (oneRadio.id == "folderOptionDelete") {
          params = 'action=dropFolder&folder=' + this.itemID;
        }
        else {
          var folderList = $$("#formDelete .folderContextName")[0];
          $A(folderList.getElementsByTagName('option')).each(function(oneFolder) {
            if(oneFolder.selected) {
              params = 'action=dropFolderMoveContent&folder=' + this.itemID + '&newFolder=' + oneFolder.value;
            }
          }.bind(this));
        }
        if (params) {
          new Ajax.Request(this.interfaceImageFolderEdit, {
            parameters: params,
            onSuccess: function(AjaxResponse) {
                          var XMLDoc     = AjaxResponse.responseXML;
                          var folderXML = XMLDoc.getElementsByTagName("response")[0];
                          var result;
                          if (result = folderXML.getElementsByTagName("result")) {
                            // refresh the Gallery
                            FolderTools.removeFromList(this.itemID);
                            FolderTools.loadFirstFolder();
                            FOA.overlayer.closeOverlay();
                          }
                       }.bind(this)
          });
        }
      }
    }.bind(this));
  },

  setView:function() {

    // wir wollen auch ohne ordner arbeiten können
    if (this.itemID < 1)
      return;

    //coverImage setzen
    var coverImage;
    if (coverImage = $$("#" + this.overLayID + " .folderCoverImage")[0]) {

      Element.setStyle(coverImage, { display  : "none" });

      var coverImageTemp = new Image();

      coverImageTemp.onload = function() {
        coverImage.src     = this.src;
        coverImage.width   = this.width;
        coverImage.height  = this.height;

        Element.setStyle(coverImage, { top      : (50 - (parseInt(this.height) / 2)) + 'px', // 50 = 107px-7px / 2
                                       right    : (45 - (parseInt(this.width)  / 2)) + 'px', // 45 = 90px / 2
                                       border   : "1px solid white",
                                       display  : "block" });
      }

      coverImageTemp.src = ImageTools.staticCoverImageURL(this.userID, this.itemID, {width:86, height:86});
    }

    //FolderInfos setzen
    $H(this.view).each(function(oneItem) {

      $A(oneItem.value).each(function(oneElement) {
        // gibt es einen TextNode vom Typ = span?

        if (!oneElement.hasChildNodes()) {
          if (oneElement.nodeName.toLowerCase() == "span") {
              oneElement.appendChild(document.createTextNode(" "));
          }
        }

        // daten übergeben
        switch (oneItem.key) {
          case 'activeFolder':
            oneElement.firstChild.data = this.itemNr + 1;
          break;
          case 'folderAmount':
            oneElement.firstChild.data = this.items.length;
          break;
          case 'name':
          case 'created':
          case 'file_amount':
            if (this.items[this.itemNr]) {
              switch (oneElement.nodeName.toLowerCase()) {
                case 'input':
                  oneElement.value = this.items[this.itemNr][oneItem.key];
                break;
                case 'select':
                  Element.setStyle(oneElement, {
                    visibility: "visible"
                  });
                  var f = 0;
                  var newFolder;
                  $A(this.items).each(function(oneFolder) {
                    if (oneFolder.id != this.items[this.itemNr]["id"]) {
                      newFolder = new Option(oneFolder.name, oneFolder.id, false, true);
                      oneElement.options[f] = newFolder;
                      f++;
                    }
                  }.bind(this));
                break;
                default:
                  oneElement.firstChild.data = this.items[this.itemNr][oneItem.key];
                break;
              }
            }
          break;
        }
      }.bind(this));
    }.bind(this));
  },

  setSelected:function() {

    // für folderDropdown
    var i = 0;
    var f;

    FOA.selectedFolder = this.itemID;

    if (f = $('folder_id')) {
      $A(f.getElementsByTagName('option')).each(function(oneElement) {

        if(oneElement.getAttribute('selected')) {
          oneElement.removeAttribute('selected');
        }

        if(parseInt(oneElement.value) == this.itemID) {
          oneElement.setAttribute('selected', 'selected');
          oneElement.parentNode.selectedIndex = i;
        }
        i++;
      }.bind(this));
    }
  },

  startProduct:function(productLink) {
    location.href = productLink; //+ "?itemID=" + this.itemID;
  }

}, ClassOverlayNavigation.prototype);

/************* Class for Upload **************/
var ClassUpload = Class.create();

// Statische Methoden
ClassUpload.onClose = function() {

  if (locationUploadComplete && locationUploadComplete != "") {
    location.href='/mypics/?folder_id=' + FOA.selectedFolder;
  }

  FolderTools.refreshFolder(FOA.selectedFolder);

  if (typeof myGallery != "undefined") {
    myGallery.load(FOA.selectedFolder);
  }
};

ClassUpload.applyNewAlbum = function() {

  var newFolderName = $('newFolderName').value;

  if (newFolderName != "") {

    var Encoder = new UTF8Encoder();
    var myAjax  = new Ajax.Request(
      '/interfaces/xml_folder_and_image_admin.php',
      {
        method: 'post',
        parameters: 'action=createNewFolder&folder=' + Encoder.urlencode(newFolderName),
        onComplete: function(AjaxRequest) {

                      var XMLDoc = AjaxRequest.responseXML;
                      var result = XMLDoc.getElementsByTagName('result')[0].firstChild.data;

                      if (result == "success") {
                        var itemID  = parseInt(XMLDoc.getElementsByTagName('returnvalue')[0].firstChild.data);
                        var newFolder = new Option($("newFolderName").value, itemID, false, true);
                        $("folder_id").options[0] = newFolder;
                      }
                      else {
                        alert("Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut.");
                      }
                    }
      });
  }
  else {
    alert("Bitte geben Sie dem neuen Album einen Namen.");
  }
};

ClassUpload.prototype = Object.extend({

  uploadStep:function(nr) {

  },

  openFileSelection:function() {

    // mit gültigem oder ohne folder hochladen
    if ((FOA.selectedFolder > 0) || (FOA.selectedFolder == -1)) {

      // flash-detection
      var uploadFlashDetection = new FlashDetection();

      if (!uploadFlashDetection.DetectFlashVer(9, 0, 0)) {
        // auf HTML-Upload umleiten
        location.href = "/mypics/upload?upload=html";
      }
    }
    else {
      SWFUploadOutput('chooseAlbum');
    }
  }


}, ClassFolderContext.prototype);

/************* SWF-Callbackmethoden **************/
getFolderID = function () {
  return FOA.selectedFolder;
};

SWFUploadOutput = function (view, data) {

  switch (view) {
    case 'uploadComplete':
      //alert($("overLayerImageSlideShow").foaFrontendActivitiesUploadComplete);
      FOA.overlayer.closeOverlay();
      break;
    case 'uploadIOError':
      alert($("overLayerImageSlideShow").foaFrontendActivitiesUploadIOError);
      break;
    case 'uploadSecurityError':
      alert($("overLayerImageSlideShow").foaFrontendActivitiesUploadSecurityError);
      break;
    case 'arrFoundList':
      alert(data.file + $("overLayerImageSlideShow").foaFrontendActivitiesArrFoundList);
      break;
    case 'chooseAlbum':
      alert($("overLayerImageSlideShow").foaFrontendActivitiesChooseAlbum2);
      break;
  }

};
