
var UserAssignTools = {

  /**
   * User-Login nach ablauf der Session
   */
  login: function() {

    $A($$("#overLayerLoginContext a.sendForm")).each(function(oneLink) {
      Event.observe(oneLink, 'click', function(e) {
                                        Event.stop(e);
                                        UserAssignTools.checkFormLoginContext();
                                      }.bindAsEventListener());
    }.bind(this));

    FOA.overlayContext = new ClassOverlay($("overLayerLoginContext"), null, null);
  },

  checkFormLoginContext: function() {

    var inputs = Form.getInputs($("overLayerLoginContext"));
    var params = "";

    $A(inputs).each(function(oneInput) {
      params += "&" + oneInput.name + "=" + oneInput.value;
    });

    // Benutzer einloggen
    new Ajax.Request("/interfaces/xml_user_data.php", {
      parameters: 'action=login' + params,
      onSuccess: function(AjaxResponse) {
                    var XMLDoc    = AjaxResponse.responseXML;
                    var response  = XMLDoc.getElementsByTagName("response")[0];
                    var success;
                    if ((success = response.getElementsByTagName("success"))
                     && (success[0].firstChild.data == "true")) {
                      // für projectEditor
                      if ((typeof project != "undefined") && (typeof project.projectID != "undefined")) {
                        location.href='/myproducts/' + project.productType + 'Editor/?project_id=' + project.projectID;
                      }
                      // sonst immer auf seite umleiten
                      else {
                        location.href= FOA.REQUESTURI;
                      }
                    }
                    // einloggen war nicht erfolgreich
                    else {
                      location.href= "/";
                    }
                 }
    });
  },

  /**
   * User-Registrierung
   */
  register: function() {

    $A($$("#overLayerRegisterContext a.sendForm")).each(function(oneLink) {
      Event.observe(oneLink, 'click', function(e) {
                                        Event.stop(e);
                                        UserAssignTools.checkFormRegisterContext();
                                      }.bindAsEventListener());
    }.bind(this));

    FOA.overlayContext = new ClassOverlay($("overLayerRegisterContext"), null, null);
  },

  checkFormRegisterContext: function() {

    var regForm        = $("overLayerRegisterContext");
    var emailError     = $$("#overLayerRegisterContext .emailError")[0];
    var exceptionError = $$("#overLayerRegisterContext .exceptionError")[0];
    var textError      = $$("#overLayerRegisterContext .textError")[0];
    var checkboxError  = $$("#overLayerRegisterContext .checkboxError")[0];
    var params         = "";
    var error          = 0;

    emailError.hide();
    exceptionError.hide();
    textError.hide();
    checkboxError.hide();

    // userdata
    $A(Form.getInputs(regForm, "text")).each(function(oneInput) {
      Element.setStyle(oneInput, { border: "1px solid black" });
      params += "&" + oneInput.name + "=" + oneInput.value;
      if (oneInput.value == "") {
        Element.setStyle(oneInput, { border: "1px solid red" });
        textError.show();
        error++;
      }
    });
    // password
    var pw = Form.getInputs(regForm, "password");
    if (pw[0].value != pw[1].value) {
      textError.show();
      Element.setStyle(pw[0], { border: "1px solid red" });
      Element.setStyle(pw[1], { border: "1px solid red" });
      error++;
    }
    else {
      $A(pw).each(function(oneInput) {
        Element.setStyle(oneInput, { border: "1px solid black" });
        params += "&" + oneInput.name + "=" + oneInput.value;
        if ((oneInput.value == "") || (oneInput.value.length < 6)) {
          Element.setStyle(oneInput, { border: "1px solid red" });
          textError.show();
          error++;
        }
      });
    }
    // privacy
    $A(Form.getInputs(regForm, "checkbox")).each(function(oneInput) {
      if (oneInput.checked == true) {
        params += "&" + oneInput.name + "=" + 1;
      }
      else {
        params += "&" + oneInput.name + "=" + 0;
        checkboxError.show();
        error++;
      }
    });

    if (error == 0) {
      // Benutzer anmelden
      new Ajax.Request("/interfaces/xml_user_data.php", {
        parameters: 'action=register' + params,
        onSuccess: function(AjaxResponse) {
                      var XMLDoc    = AjaxResponse.responseXML;
                      var response  = XMLDoc.getElementsByTagName("response")[0];
                      var success;
                      if ((success = response.getElementsByTagName("success"))
                       && success[0] && (success[0].firstChild.data == "true")) {
                        $$(".showRegisterFormular")[0].hide();
                        $$(".showActivateAccount")[0].show();
                      }
                      else {
                        var showError;
                        if (showError = response.getElementsByTagName("error")) {
                          var show = showError[0].firstChild.data;
                          var showElement;
                          if (showElement = $$("." + show)) {
                            showElement[0].show();
                          }
                        }
                      }
                   }
      });
    }
  }
}

var ProjectTools = {

  previewInterval : false,
  /**
   * Fügt ein Projekt zum Warenkorb hinzu
   */
  addProject: function(projectID, callback, confirmed) {

    if(!callback) {
      callback = function() {};
    }

    new Ajax.Request(OrderInterface.interfaceURL, {
      parameters: 'action=addProject'
                + '&project_id=' + projectID
                + '&confirmed='  + confirmed,
      onSuccess: callback,
      on403: UserAssignTools.login
    });
  },

  /**
   * legt eine Kopie von einem User-Projekt an
   * der AJAX-Request gibt die neue project_id zurück
   */
  copyProject: function(projectID, newProjectName, pageNr, pageData, onComplete) {

    new Ajax.Request('/interfaces/project_properties.php', {
      method : 'get',
      parameters : {
        action       : 'copyProject',
        project_id   : projectID,
        name         : newProjectName     ? newProjectName     : '',
        parts_number : pageNr             ? pageNr             : '',
        xml_data     : pageData           ? pageData           : ''
      },
      onSuccess : onComplete
    });
  },

  /**
   * legt eine Kopie von einem User-Projekt an
   * der AJAX-Request gibt die neue project_id zurück
   */
  renameProject: function(projectID, newProjectName, onComplete) {

    new Ajax.Request('/interfaces/project_properties.php', {
      method : 'get',
      parameters : {
        action       : 'renameProject',
        project_id   : projectID,
        name         : newProjectName     ? newProjectName     : ''
      },
      onSuccess : onComplete
    });
  },

  /**
   * Vorschau eines Projekts
   */
  preview: function(element) {
    // Projekt-ID, -Category herausfinden
    var projectID    = element.id.split('_')[1];
    var overlayEl    = $("overlayProjectPreview");
    var previewList  = getElementsByClass('previewList', overlayEl, 'div')[0];

    // preview-liste leeren
    while(previewList.hasChildNodes()) {
      previewList.removeChild(previewList.firstChild);
    }

    // overlay anzeigen
    FOA.overlayContext = new ClassOverlay(overlayEl, function() {clearInterval(ProjectTools.previewInterval);}, null);
    ProjectTools.refreshPreview(previewList, projectID, 0);
  },

  refreshPreview: function(previewList, projectID, collectionID, regenerate) {
     if(!collectionID) {
       collectionID = 0;
     }
     new Ajax.Updater(previewList, '/interfaces/project_properties.php?action=getAllProjectPartInfosForPreview&project_id=' + projectID + '&collection_id=' + collectionID + (regenerate ? '&regenerate' : ""), {onComplete: function(){ProjectTools.handleInterval(previewList, projectID, collectionID);}});
  },

  handleInterval : function (previewList, projectID, collectionID) {
     clearInterval(ProjectTools.previewInterval);
     if($('image_not_exist')) {
       ProjectTools.previewInterval = setInterval(function(){ProjectTools.refreshPreview(previewList, projectID, collectionID);}, 10000);
     }
  }
};

var TextTools = {

  /**
   * UserText holen
   */
  getUserText: function(textID, boxParams, onTextEditorClose) {

    var onComplete = function(AjaxResponse) {
      var XMLDoc   = AjaxResponse.responseXML;
      var textXML;

      if (textXML = XMLDoc.getElementsByTagName("xml_data")[0]) {
        textXML = textXML.firstChild.data;
      }

      var fontList = [];
      if (fontXMLList = XMLDoc.getElementsByTagName("font")) {
        $A(fontXMLList).each(function(aFontNode) {
           if (aFontNode.firstChild) {
             fontName = aFontNode.firstChild.data;
             fontList.push(fontName);
           }
        });
      }
      $("TextEditorWindow").show();
      FOA.textEditor = new ClassTextEditor(boxParams, onTextEditorClose, textXML, fontList, textID);
    }

    new Ajax.Request('/interfaces/project_properties.php', {
      method: 'post',
      parameters: {
        action   : 'getUserText',
        text_id  : textID
      },
      onComplete: onComplete
    });
  },

  /**
   * Text speichern
   */
  saveText: function(textID, formated_str, str, width, height, bgColor, onCompleteFct) {

    new Ajax.Request('/interfaces/project_properties.php', {
      method: 'post',
      parameters: {
        action     : "saveUserText",
        xml        : encodeURIComponent(formated_str),
        text_id    : textID,
        width_mm   : width,
        height_mm  : height,
        bgColor    : bgColor
      },
      onComplete: onCompleteFct
    });
  }
}

var FolderTools = {

  /**
   * Album umbenennen
   */
  rename: function(folderID, folderName, onCompleteFct) {

    if (folderName.length < 1) {
      return false;
    }

    var Encoder = new UTF8Encoder();

    // Ordner per Ajax umbenennen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=renameFolder'
                + '&folder=' + folderID
                + '&name=' + Encoder.urlencode(folderName),
      onComplete: onCompleteFct
    });
  },

  /**
   * aktualisiert ein Album in der Liste
   */
  refreshFolder: function(folderID, onComplete) {
    // Ordner per Ajax umbenennen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=getFolderInfo'
                + '&folder=' + folderID,
      onComplete: function(transport) {

        // Name und Bildanzahl ersetzen
        var XMLDoc = transport.responseXML;
        $('folderNameFolder_' + folderID).firstChild.data  = XMLDoc.getElementsByTagName('folder_name')[0].firstChild.data;
        $('imageAmountFolder_' + folderID).firstChild.data = XMLDoc.getElementsByTagName('file_amount')[0].firstChild.data;

        // Cover ersetzen, Größenberechnung, siehe mypics_gallery.inc.php
        var coverImgElement = $('folderCoverFolder_' + folderID);
        var coverImgURL     = XMLDoc.getElementsByTagName('cover_url')[0].firstChild.data;

        var size;
        if (size = coverImgURL.match(/size=([0-9]+)x([0-9]+)/)) {
          var width  = RegExp.$1;
          var height = RegExp.$2;
        }
        else {
          var width  = 31;
          var height = 31;
        }

        var coverAreaOffsetX = parseInt($('coverPositioning_coverAreaOffsetX').firstChild.data);
        var coverAreaOffsetY = parseInt($('coverPositioning_coverAreaOffsetY').firstChild.data);
        var coverAreaWidth   = parseInt($('coverPositioning_coverAreaWidth').firstChild.data);
        var coverAreaHeight  = parseInt($('coverPositioning_coverAreaHeight').firstChild.data);

        var coverMarginLeft  = coverAreaOffsetX + Math.floor((coverAreaWidth - width) / 2);
        var coverMarginTop   = coverAreaOffsetY + Math.floor((coverAreaHeight - height) / 2);
        var coverMarginRight = Math.floor((coverAreaWidth - width) / 2);

        Element.setStyle(coverImgElement, {
          marginTop:   coverMarginTop + 'px',
          marginLeft:  coverMarginLeft + 'px',
          marginRight: coverMarginRight + 'px',
          width: width + 'px',
          height: height + 'px'
        });
        coverImgElement.src = coverImgURL;

        // Wenn gegeben, onCompleteFunction ausführen
        if (typeof onComplete == 'function') {
          onComplete();
        }

      }
    });
  },

  /**
   * Lädt ein Album in die Gallerie
   */
  loadIntoGallery: function(folderID) {
    myGallery.load(folderID);
  },

  /**
   * Album löschen
   */
  drop: function(folderID, onCompleteFct) {

    // Ordner per Ajax umbenennen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=dropFolder'
                + '&folder=' + folderID,
      onComplete: onCompleteFct
    });
  },

  /**
   * Album löschen, Content in anderes Album verschieben
   */
  dropAndMove: function(folderID, newFolderID, onCompleteFct) {

    // Ordner per Ajax umbenennen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=dropFolderMoveContent'
                + '&folder=' + folderID
                + '&newFolder=' + newFolderID,
      onComplete: onCompleteFct
    });
  },

  /**
   * Entfernt ein Album aus der Albenliste
   */
  removeFromList: function(folderID) {
    Element.remove('Folder_' + folderID);
    var treeview;
    var albums;
    if ((treeview = $("folderListBox")) && (albums = $("folderListBox").getElementsByTagName('li')) && (albums.length > 0)) {
       (loadFolder.bind(albums[0]))();
    }
    else {
      //location.href = "/mypics/upload/";
    }
  },
  /**
   * Lädt den ersten Ordner in die Galerie. Wird nach dem Löschen eines Ordners verwendet.
   * Wenn kein Ordner existiert, wird der User auf die Upload-Seite geleitet
   * @author Nikolaj
   */
  loadFirstFolder: function() {
    // Ordner Liste holen
    var treeview;
    var albums;
    if ((treeview = $("folderListBox")) && (albums = $("folderListBox").getElementsByTagName('li')) && (albums.length > 0)) {
       (loadFolder.bind(albums[0]))();
    }
    else {
      // wenn nicht, auf die Upload-Seite umleiten
      //location.href = "/mypics/upload/";
    }
  }
}

var ImageTools = {

  /**
   * JS-Nachbildung der statischen getImageURL-Funktion des Image-Objekts
   */
  staticImageURL: function (uID, imgID, fTime, size, addBorder) {

    var domainCookie = getCookie(session_name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/pictures/'
          + uID + '/'
          + imgID
          //+ '.jpg'
          + (fTime || size || addBorder?'?':'')
          + (fTime?'&ftime=' + fTime:'')
          + (size?'&size='
              + parseFloat(size.width) + 'x' + parseFloat(size.height)
              + '&fitcanvas=' + (size.fitcanvas?'true':''):'')
          + (addBorder?'&addborder=' + addBorder:'')
          + '&' + FOA.SESSION.name + '=' + domainCookie;
  },

  /**
   * JS-Nachbildung der statischen getImageURL-Funktion des Image-Objekts für Coverbilder
   */
  staticCoverImageURL: function (uID, imgID, size, addBorder) {

    var domainCookie = getCookie(FOA.SESSION.name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/coverpicture/'
          + uID + '/'
          + imgID
          //+ '.jpg'
          + (size || addBorder?'?':'')
          + (size?'&size='
              + parseFloat(size.width) + 'x' + parseFloat(size.height)
              + '&fitcanvas=' + (size.fitcanvas?'true':''):'')
          + (addBorder?'&addborder=' + addBorder:'')
          + '&' + FOA.SESSION.name + '=' + domainCookie;
  },

  staticImageEditorURL: function (uID, imgID, width, height, params) {

    var domainCookie = getCookie(FOA.SESSION.name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/pictures/'
          + uID + '/'
          + imgID
          //+ '.jpg?'
          + '?size=' + parseFloat(width) + 'x' + parseFloat(height)
          + (params?params:'')
          + '&' + FOA.SESSION.name + '=' + domainCookie;
  },

  staticPoolEditorImageURL: function (imgID, width, height, params) {
    var domainCookie = getCookie(FOA.SESSION.name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/poolimages/'
          + imgID
          // + '.jpg?'
          + '?size=' + parseFloat(width) + 'x' + parseFloat(height)
          + (params?params:'')
          + '&' + FOA.SESSION.name + '=' + domainCookie;
  },

  staticPoolImageURL: function (imgID, fTime, size, addBorder) {

    var domainCookie = getCookie(FOA.SESSION.name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/poolimages/'
          + imgID
          //+ '.jpg'
          + (fTime || size || addBorder?'?':'')
          + (fTime?'&ftime=' + fTime:'')
          + (size?'&size='
              + parseFloat(size.width) + 'x' + parseFloat(size.height)
              + '&fitcanvas=' + (size.fitcanvas?'true':''):'')
          + (addBorder?'&addborder=' + addBorder:'')
          + '&' + FOA.SESSION.name + '=' + domainCookie;
  },

  staticSimplePoolImageURL: function (imgID) {

    var domainCookie = getCookie(FOA.SESSION.name);

    return "http://" + FOA.imageServers[(imgID % FOA.imageServers.length)]
          + '/poolimages/'
          + imgID
          //+ '.jpg'
          + '?' + FOA.SESSION.name + '=' + domainCookie;
  },

  /**
   * owner-switch für die staticEditorImageURL-Funktion
   */
  getStaticImageURLByOwner: function (owner, userID, imgID, imgType, width, height, params) {
    switch (owner) {
      case "pool":
        return ImageTools.staticPoolEditorImageURL(imgID, width, height, params);
      break;
      default:
        return ImageTools.staticImageEditorURL(userID, imgID, width, height, params);
      break;
    }
  },

  /**
   * Foto umbenennen
   */
  rename: function(imageID, imageName, onCompleteFct) {

    if (imageName.length < 1) {
      return false;
    }

    var Encoder = new UTF8Encoder();

    // Ordner per Ajax umbenennen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=renameImage'
                + '&image=' + imageID
                + '&name=' + Encoder.urlencode(imageName),
      onComplete: onCompleteFct
    });
  },

  /**
   * aktualisiert ein Foto in der Liste (nach Rotation, Bildbearbeitung, usw.)
   */
  refreshImage: function(imageID, onComplete) { },

  /**
   * Foto löschen
   */
  drop: function(imageID, onCompleteFct) {

    // Foto per Ajax löschen
    new Ajax.Request('/interfaces/xml_folder_and_image_admin.php', {
      parameters: 'action=removeImage'
                + '&image=' + imageID,
      onComplete: onCompleteFct
    });
  },

  /**
   * Entfernt ein Foto aus dem aktuell geladenen Album
   */
  removeFromList: function(imageID) {
    if ($('imageBox_' + imageID)) {

      var imageBox = $('imageBox_' + imageID);
      var imageNode = imageBox.getElementsByTagName('img')[0];

      var imageOffset = imageNode.id.replace(/imageOffset_/, '');
      myGallery.removeFromFilesList(imageOffset);

      // Bild entfernen
      Element.remove(imageBox.parentNode);

      // Gallerie ggf. wieder auffüllen
      myGallery.refreshView();
    }
  },

  /**
   * Foto in anderes Album verschieben
   */
  move: function(imageID, folderID, onCompleteFct) { },

  /**
   * Checkt ob der Upload wirklich abgeschlossen wurde
   */
  checkUploadFinished: function(onComplete) {
    // hier könnte man einen AJAX-Request einbauen um den serverseitigen uploadStatus abzufragen...
    onComplete();
  }
}

// Hook into window-object-attribute
window.FolderTools = FolderTools;

// Hook into window-object-attribute
window.ImageTools = ImageTools;
