
var URL_INTERFACE = '/interfaces/project_properties.php';

/************* Class for projectEditor-formular to change the format **************/
var pageEditorForm = Class.create();
pageEditorForm.prototype = {

  initialize:function() {},

   onCompleteStart:function(AjaxResponse) {
     Form.enable(this.projectForm);

     // overwrite onCompleteStart-function in formValidation
    FOA.overlayContext = new ClassOverlay($("overLayerProjectPreloader"), null, null);

    var XMLDoc        = AjaxResponse.responseXML;
    var product_type = XMLDoc.getElementsByTagName('product')[0].getAttribute("type");
    var format       = XMLDoc.getElementsByTagName('product')[0].getAttribute("format");
    var page_count   = XMLDoc.getElementsByTagName('product')[0].getAttribute("page_count");
    var page_width   = XMLDoc.getElementsByTagName('product')[0].getAttribute("page_width");
    var page_height  = XMLDoc.getElementsByTagName('product')[0].getAttribute("page_height");
    var cup_height   = XMLDoc.getElementsByTagName('product')[0].getAttribute("cup_height");
    var cover_color  = XMLDoc.getElementsByTagName('product')[0].getAttribute("cover_color");
    var linen_color  = XMLDoc.getElementsByTagName('product')[0].getAttribute("linen_color");
    var leather_color  = XMLDoc.getElementsByTagName('product')[0].getAttribute("leather_color");
    var page_color   = XMLDoc.getElementsByTagName('product')[0].getAttribute("page_color");
    var project_name = XMLDoc.getElementsByTagName('product')[0].getAttribute("project_name");
    var cover        = XMLDoc.getElementsByTagName('product')[0].getAttribute("booktype");
    var surface      = XMLDoc.getElementsByTagName('product')[0].getAttribute("surface");


    // formatNmae setzen
    var formatName;
    var formatSelect;
    if ((formatSelect = $(product_type + "_format")) && (formatName = $("projectFormatName"))) {
      formatName.firstChild.data = formatSelect.options[formatSelect.selectedIndex].firstChild.data;
    }

    // projectOptionens
    var project_options;
    if (XMLDoc.getElementsByTagName('project_options')[0]
    && (project_options = XMLDoc.getElementsByTagName('project_options')[0].attributes)) {
      $A(project_options).each(function(aAttribute) {
        FOA.Project.options[aAttribute.nodeName] = aAttribute.nodeValue;
      });
    }

    project.destruct();

    // start Editor
    startEditor(true, project.userID, project.projectID, format, cover, surface, page_width, page_height, page_count, cover_color, linen_color, leather_color, page_color, project.showPage, product_type, true, FOA.Project.options,cup_height);
  },

  // die funktion kommt im Editor beim Formatwechsel zum Zug
  start:function(e) {

    Event.stop(e);

    // daten des aktuellen ProjectParts mitgeben und speichern
    var activePageData = project.getDataFromActivePage();
    var params =  'action='                + this.sendAction
                + '&windowToken='          + windowToken
                + '&params[product_type]=' + this.productType
                + '&' + Form.serialize(this.projectForm)
                + '&' + $H(activePageData).toQueryString();

    Form.disable(this.projectForm);
    var AjaxObject = new Ajax.Request(
                          URL_INTERFACE, {
                            method : 'post',
                            parameters: params,
                            on403: UserAssignTools.login,
                            onSuccess: this.onCompleteStart.bind(this)
                          });
  }
}

/************* Class formValidation **************/
var formValidation = Class.create();
formValidation.prototype = {

  initialize:function(productType, projectForm, sendAction, formAttributes) {

    this.productType      = productType;
    this.projectForm      = projectForm;
    this.activeFormEl     = "";
    this.sendAction       = sendAction;
    this.observer         = new ObserverHandler();
    var projectSelectEl   = getElementsByClass("projectSelect", projectForm);
    var project_name      = Form.getInputs(this.projectForm , "text" , "name")[0];
    var project_name_data = project_name ? project_name.value : '';

    // resetFormular(this.projectForm);

    // formular neu setzen
    if (typeof formAttributes != "undefined") {
      $H(formAttributes).each(function(oneAttribute) {
         var aFormElement;
         if (aFormElement = $(this.productType + "_" + oneAttribute.key)) {
           if (aFormElement.nodeName.toLowerCase() == 'p') {
             aFormElement.firstChild.data = oneAttribute.value;
           }
           if(aFormElement.type == "text") {
             aFormElement.value = oneAttribute.value;
           }
           if(aFormElement.type == "select-one") {
             $A(aFormElement).each(function(aOption) {
               if (aOption.value == oneAttribute.value) {
                 aOption.selected = true;
                 var formatName;
                 if ((oneAttribute.key == "format") && (formatName = $("projectFormatName"))) {
                   formatName.firstChild.data = aOption.firstChild.data;
                 }
               }
             });
           }
         }
      }.bind(this));
    }

    if (project_name) {
      project_name.value = project_name_data;
    }

    for (var b=0; b < projectSelectEl.length; b++) {
      var doAction = projectSelectEl[b].className.split(" ")[1];
      this.observer.setObserver(projectSelectEl[b], "change", this.getProjectAttributes.bind(this, projectSelectEl[b], doAction));
    }
  },

   getProjectAttributes:function(formEl, ajaxAction) {

    this.activeFormEl = formEl;
    var params        = Form.serialize(this.projectForm);

    Form.disable(this.projectForm);

    var AjaxObject = new Ajax.Request(
                          URL_INTERFACE, {
                            method: 'post',
                            asynchronous : false,
                            parameters: 'action=' + ajaxAction
                                      + "&productType=" + this.productType
                                      + "&" + params,
                            onComplete: this.setProjectAttributes.bind(this)
                          });
  },

  setProjectAttributes:function(res) {

    var XMLDoc          = res.responseXML;
    var projectParams   = XMLDoc.getElementsByTagName("projectParams")[0];
    var error           = projectParams.getElementsByTagName("error");

    // allgemein
    var surfaces        = projectParams.getElementsByTagName("surface");
    var price           = projectParams.getElementsByTagName("price");

    // Bücher
    var booktypes       = projectParams.getElementsByTagName("booktype");
    var showFormItems   = projectParams.getElementsByTagName("showformular");

    // Leinwand / Aludibond / Poster
    var width           = projectParams.getElementsByTagName("width");
    var height          = projectParams.getElementsByTagName("height");

    // für Tassen
    var areas           = projectParams.getElementsByTagName("area");
    var diameter        = projectParams.getElementsByTagName("diameter");
    var cupheight       = projectParams.getElementsByTagName("cupheight");
    var cupname         = projectParams.getElementsByTagName("cupname");

    // allgemeine Elemente
    var pagePriceEl     = $(this.productType + "_price");
    var surfaceFormEl   = $(this.productType + "_surface");

    // Bücher-Elemente
    var booktypeFormEl  = $(this.productType + "_booktype");
    var pageFormEl      = $(this.productType + "_page_count");

    // Leinwand / Aludibond-Elemente
    var widthFormEl     = $(this.productType + "_width");
    var heightFormEl    = $(this.productType + "_height");

    // Tassen-Elemente
    var pageDiameterEl   = $(this.productType + "_diameter");
    var pageCupheightEl  = $(this.productType + "_cupheight");
    var areaFormEl       = $(this.productType + "_area");

    if (error[0]) {
      Form.reset(this.projectForm);
    }

    Form.enable(this.projectForm);

    var sendedFormParams = this.projectForm.serialize(true);

    // set width and height
    if(width.length > 0 && height.length > 0) {
      var checkedWidth  = width[0].getAttribute('value');
      var checkedHeight = height[0].getAttribute('value');

      $H(sendedFormParams).each(function(oneFormItem) {
        if (oneFormItem[0] == "params[width]") {
          checkedWidth = oneFormItem[1];
        }
        if (oneFormItem[0] == "params[height]") {
          checkedHeight = oneFormItem[1];
        }
      });
      this.setNewOptions(widthFormEl, width, checkedWidth);
      this.setNewOptions(heightFormEl, height, checkedHeight);
    }

    // set new booktypes
    if(booktypes.length > 0) {
      var bookTypeNode = $A(booktypes).find(function(oneBooktype) {
        return (oneBooktype.getAttribute('value') == $F(booktypeFormEl));
      }) || $A(booktypes)[0];

      var pages = bookTypeNode.getElementsByTagName("page");
      var checkedBooktype = bookTypeNode.getAttribute("value");
    }

    // set new booktypes and pages(page_count) by format
    if (this.activeFormEl.id == (this.productType + "_format")) {
      if(areas.length > 0) {
        this.setNewOptions(areaFormEl, areas);
      }
      else {
        if(this.productType == 'photobook') {
          this.setNewOptions(booktypeFormEl, booktypes, checkedBooktype);
          this.setNewOptions(pageFormEl, pages, pageFormEl.value);
          this.setNewOptions(surfaceFormEl, surfaces);
        }
      }
    }

    // set new pages(count) by booktype
    if (this.activeFormEl.id == (this.productType + "_booktype")) {
      this.setNewOptions(pageFormEl, pages, pageFormEl.value);
    }
    // set new price by params
    if ((price.length > 0) && $(this.productType + "_price")) {
      pagePriceEl.firstChild.data = price[0].getAttribute("value");
    }

    // set new Diameter by params
    if ((diameter.length > 0) && $(this.productType + "_diameter")) {
      pageDiameterEl.firstChild.data = diameter[0].getAttribute("value");
    }

    // set new Height of Cup by params
    if ((cupheight.length > 0) && $(this.productType + "_cupheight")) {
      pageCupheightEl.firstChild.data = cupheight[0].getAttribute("value");
    }

    if (cupname.length > 0) {
      // var iconElements = getElementsByClass("icon", $("sendForm_cup"));
      //iconElements[0].len;
      var iconElements = $$(".icon.cup");
      iconElements[0].className = "icon cup " + cupname[0].getAttribute("value") ;
    }
    // show / hide formelements
    this.showFormElements(showFormItems);
  },

  showFormElements:function(showFormItems) {

    var showFormItemsArray;
    if (showFormItems[0] && (showFormItemsArray = showFormItems[0].getElementsByTagName("item"))) {
      $A(showFormItemsArray).each(function(oneFormItem) {
         var oneFormElement;
        if (oneFormElement = $(this.productType + "_" + oneFormItem.getAttribute("value"))) {
          oneFormElement.parentNode.style.display = oneFormItem.getAttribute("display");
          if (oneFormItem.getAttribute("display") == "block") {
            oneFormElement.disabled = false;
          }
          else {
            oneFormElement.disabled = true;
          }
        }
      }.bind(this));
    }
   },

  setNewOptions:function(selectFormEl, optionList, checked) {
    // clear Optionlist
    while (selectFormEl.hasChildNodes()) {
      selectFormEl.removeChild(selectFormEl.firstChild);
    }
    // fill Optionlist
    for (i=0; i<optionList.length; i++) {
      var value      = optionList[i].getAttribute("value");
      var value_lang = optionList[i].getAttribute("value_lang");

      selectFormEl.options[i] = new Option(value_lang, value);
      if (checked == value) {
        selectFormEl.options[i].selected = true;
      }
    }
   },

   // overwrite start function when the form action is not in use
  start:function(e, productType) {

     Event.stop(e);

    var projectName = $(productType + "_name").value;

    if(projectName.length == 0) {
      alert($("photobook_name").errorEmpty);
      return false;
    }
    else {
      $('sendForm_' + productType).submit();
    }
  }
}

/************* Class ProjectOverview **************/
var ProjectOverview = Class.create();
ProjectOverview.prototype = {

  initialize:function() {

    this.activeProject = "";
    this.allProjects   = new Array();
    var navigation     = $('myproductsNaviagation');

    var allProducts;
    if (navigation && (allProducts = navigation.getElementsByTagName("a"))) {

      // Alle Produkttypen durchlaufen
      for (var i = 0; i < allProducts.length; i++) {
        // Click-Observer für die Navigation setzen
        obs.setObserver(allProducts[i], "click", this.showProjectForm.bindAsEventListener(this, allProducts[i]));

        // Formular zu dem produkttyp finden
        var projectForm = $('sendForm_' + allProducts[i].className);

        // Den Sonderfall behandeln, wenn "show all" angeklickt wurde => überspringen!
        if (!projectForm) {
          continue;
        }

        // Alle Projekte des Produkttyps laden und durchlaufen
        var allProjects = $$(".projectList .projectEntry_" + allProducts[i].className);
        for (var a=0; a<allProjects.length; a++) {
          this.allProjects[this.allProjects.length] = allProjects[a];
        }

        // Ausnahme Es wurde kein Formular übergeben
        if (projectForm.tagName.toLowerCase() == "form") {
          var projectFormButton = getElementsByClass("imgButton", projectForm, 'input')[0];
          // Formulare je Produkttyp vorbereiten
          formValidator = new formValidation(allProducts[i].className, projectForm, "startNewProject");
          // an der Stelle soll das Formular ohne JavaScript abgeschickt werden
          obs.setObserver(projectFormButton, "click", formValidator.start.bindAsEventListener(formValidator, allProducts[i].className));
        }
      }
    }
     // Projekte nach ProduktType aus- und einblenden
    var productTypeChooser = $('pt_chooser');
    if(productTypeChooser) {
      var checkboxes = productTypeChooser.getElementsByTagName("input");

      for(var i = 0; i < checkboxes.length; i++) {
          // Click-Observer für die Navigation setzen
          obs.setObserver(checkboxes[i], "click", this.showProjectsList.bind(checkboxes[i]));
      }
    }
  },



  initNavigation:function(cssClass) {
    var initNavigationEl;
    if (initNavigationEl = $$("#myproductsNaviagation ." + cssClass)[0]) {
      this.showProjectsForm(0, initNavigationEl);
    }
  },

   /*showProjectsForm:function(e, El) {

    if (!El) return false;

     Event.stop(e);

     // Formular produkttypspezifisch anzeigen
     var projectForms  = getElementsByClass("projectForm", $("ProjectOverview"));
     $A(projectForms).each(function(oneForm) {
       Element.hide(oneForm);
    });

    // Zeige alle Produkttypen?
    if (El && El.className == 'all' && $('myLastProject')) {
      Element.show('myLastProject');
    }
    else {
      if ($('myLastProject')) {
        Element.hide('myLastProject');
      }

      if (El && $('form_' + El.className)) {
        Element.show('form_' + El.className);
      }
      else {
        Element.show('form_empty');
      }
    }

    // ----------------------------------------------------------------------------

    // show Projects by productclass
    var projectBlocks = $$("#projectList .projectBlock");

    // Zeige alle Produkttypen?
    if (El.className == 'all') {
      $A(projectBlocks).each(function(oneBlock) {
        Element.show(oneBlock);
      });
      return;
    }

    // Sonst: Erst alle Blöcke verstecken
    $A(projectBlocks).each(function(oneBlock) {
      Element.hide(oneBlock);
    });

    // Den aktiven Block zeigen
    if ($("projectClass_" + El.className)) {
      Element.show("projectClass_" + El.className);
    }

  },*/

   showProjectForm:function(e, El) {

    if (!El) return false;

     Event.stop(e);
     FOA.overlayProjectForm = new ClassOverlay($("overLayerProjectOverview"), null, null);

     // Formular produkttypspezifisch anzeigen
     var projectForms  = getElementsByClass("projectForm", $("ProjectOverview"));
     $A(projectForms).each(function(oneForm) {
       Element.hide(oneForm);
    });

    // Zeige alle Produkttypen?

    var displayedForm;
    if (El && (displayedForm = $('form_' + El.className)) ) {
      Element.show(displayedForm);
      Element.show(displayedForm.parentNode.parentNode);
    }

    // ----------------------------------------------------------------------------

  },

  showProjectsList: function() {
    var productType = this.id.split("_")[1];
    if(productType == 'all') {
    var inputFields = $('pt_chooser').getElementsByTagName('input');
    for(var i=1; i < inputFields.length; i++) {
        inputFields[i].checked = this.checked;
        ProjectOverview.prototype.showProjectsList.bind(inputFields[i])();
    }
    return;
    }

    if(!(element = $('projectClass_' + productType))) {
      return;
    }

    if(this.checked) {
      Element.show(element);
    }
    else {
      $('chooser_all').checked = false;
      Element.hide(element);
    }
  },


   overProjectByID:function(e) {
     if(this.activeProject != e.id) {
      Element.setStyle(e.id, { backgroundColor: 'rgb(244,244,244)'});
     }
  },

  outProjectByID:function(e) {
    if(this.activeProject != e.id) {
      Element.setStyle(e.id, { backgroundColor: 'rgb(255,255,255)'});
    }
  },

  activeProjectByID:function(e) {
    for (var i=0; i<this.allProjects.length; i++) {
       var el  = $(this.allProjects[i]);
       var inf = getElementsByClass("info", el);
       Element.setStyle(inf[0], { display: 'none' });
       Element.setStyle(el, { backgroundColor: 'rgb(255,255,255)'});
    }

    inf = getElementsByClass("info", e);
    Element.setStyle(inf[0], { display: 'block' });
    Element.setStyle(e.id, { backgroundColor: 'rgb(235,249,210)'});
    this.activeProject = e.id;
  }
}
