/**
 * File boxes.js
 * This file stores all cross-template java script code used in HTML user interface for boxes.
 * This file depends on the Prototype java script library.
 *
 * @author Andrew Mikhailov <amihailov@infostroy.com.ua>
 **/

/**
 * Boxes namespace
 **/
var Boxes = {
  /**
   * BOF: boxAdvancedSearch
   */
  boxAdvancedSearch : {
    initialize : function(url, keyword_element_id, brand_element_id, category_element_id, sub_category_element_id, concept_element_id, stock_element_id, toon_element_id) {
      this.url = url;
      this.keyword_element_id       = keyword_element_id;
      this.brand_element_id         = brand_element_id;
      this.category_element_id      = category_element_id;
      this.sub_category_element_id  = sub_category_element_id;
      this.concept_element_id       = concept_element_id;
      this.stock_element_id         = stock_element_id;
      this.toon_element_id          = toon_element_id;

      this.initElement(keyword_element_id);
      this.initElement(concept_element_id);
      this.initElement(category_element_id);
      this.initElement(sub_category_element_id);
      this.initElement(brand_element_id);
      this.initElement(stock_element_id);
      this.initElement(toon_element_id);

      this.openMenu();
      this.selectCategory();
    },

    resetFilters : function() {
      var item = null;
      item = document.getElementById('advanced_search_keyword');
      item.value = '';
      item = document.getElementById('advanced_search_concept');
      item.value = '0';
      item = document.getElementById('advanced_search_category');
      item.value = '0';
      item = document.getElementById('advanced_search_sub_category');
      item.value = '0';
      item = document.getElementById('advanced_search_brand');
      item.value = '0';
      item = document.getElementById('advanced_search_stock');
      item.checked = '';
      item.form.submit();
    },

    openMenu : function() {
      var active_value = document.getElementById('advanced_search_concept').value;
      var menu_list = document.getElementsByClassName('block_menu');

      for (var i = 0; i < menu_list.length; i++) {
        var el = menu_list[i].getElementsByTagName('ul');
        el = el[0];
        var button = menu_list[i].getElementsByTagName('button');
        if (button[0]) {
          button = button[0];
        } else {
          button = null;
        }

        if ('ul_short_'+active_value != el.id) {
          if (button && button.className == 'close') {
            button.onclick();
          }
        } else {
          if (button && button.className == 'open') {
            button.onclick();
          }
        }
      }
    },

    initElement : function (id) {
      var element = document.getElementById(id);
      var use_highlight = false;

      switch (id) {
        case 'advanced_search_concept':
          element.onchange = function() {
            this.form.submit();
          }
          use_highlight = true;
        break;

        case 'advanced_search_category':
          element.onchange = function() {
            this.form.submit();
          }
          use_highlight = true;
        break;

        case 'advanced_search_brand':
        case 'advanced_search_sub_category':
          element.onchange = function() {
            this.form.submit();
          }
          use_highlight = true;
        break;

        case 'advanced_search_toon':
        case 'advanced_search_stock':
        case 'advanced_search_keyword':
          element.onchange = function() {
            this.form.submit();
          }
        break;

        default:
          element.onchange = function() {
              this.form.submit();
          }
        break;
      }

      if (element.value=="0" && use_highlight) {
        element.style.backgroundColor = '#BAD3E7';
      }
    },

    selectCategory : function() {

      var menu_list = document.getElementsByClassName('block_menu');
      var sel_concept_id = (document.getElementById('advanced_search_concept').value != "0" )?document.getElementById('advanced_search_concept').value:null;
      var category_id = document.getElementById('advanced_search_category').value;

      for (var i = 0; i < menu_list.length; i++) {
        var links = menu_list[i].getElementsByTagName('a');

        for (var j = 0; j < links.length; j++) {
          var id_list = links[j].id.split('_');

          var concept_id = sel_concept_id?sel_concept_id:id_list[2];
          if (links[j].id != 'menu_category_'+concept_id+'_'+category_id) {
            links[j].style.fontWeight = "";
          } else {
            links[j].style.fontWeight = "bold";
          }
        }
      }
    },

    appendAfter : function(node, newNode) {
      if (node.nextSibling) {
        node.parentNode.insertBefore(newNode, node.nextSibling);
      } else {
        node.parentNode.appendChild(newNode);
      }
    },

    getLink : function(params) {
      if (!params) {
        params = '';
      }
      var url = this.url;

      var brand_value = params.filter_brands?params.filter_brands:$(this.brand_element_id).value;
      if (brand_value != '0') {
        url += '&filter_brands=' + brand_value;
      }

      var category_value = params.filter_category?params.filter_category:$(this.category_element_id).value;
      if (category_value != '0') {
        url += '&filter_category=' + category_value;
      }

      var sub_category_value = params.filter_subcategory?params.filter_subcategory:$(this.sub_category_element_id).value;
      if (sub_category_value != '0') {
        url += '&filter_subcategory=' + sub_category_value;
      }

      var concept_value  = params.filter_concept?params.filter_concept:$(this.concept_element_id).value;
      if (concept_value != '0') {
        url += '&concept=' + concept_value;
      }

      var toon_value  = params.maximum_display_items?params.maximum_display_items:$(this.toon_element_id).value;
      if (toon_value != '0') {
        url += '&maximum_display_items=' + toon_value;
      }

      if (this.url == url) {
        if (Boxes.boxSearch.checkKeyword(this.keyword_element_id)) {
          url += '&keywords=' + escape( $(this.keyword_element_id).value );
        }
      } else {
        if ($(this.keyword_element_id).value.length > 0) {
          url += '&keywords=' + escape( $(this.keyword_element_id).value );
        }
      }

      if (this.url != url) {
        url += '&stock=' + ($(this.stock_element_id).checked ? 'on' : 0);
      }

      return url;
    },

    refresh : function() {
      var url = this.getLink();
      if (url != this.url) {
        document.location = url;
      }
      return false;
    }
  },
  /**
   * EOF: boxAdvancedSearch
   */

  boxCartDirectOrder : {
    delayHide : function(id) {
      setTimeout('$(\'' + id + '\').hide();', 300);
    }
  },
  boxConfirmation : {
    initialize : function(id) {
      this.id = id;
    },
    submit : function() {
      $(this.id).submit();
    }
  },
  boxCurrencies : {
    changeCurrencies: function() {
      var form = document.forms['currencies'];
      if (form) {
        var action = form.action;
        var select_value = form.currency.options[form.currency.options.selectedIndex].value;
        var url_currencies = action+'&currency='+ select_value;

        document.location = url_currencies;
      }
    }
  },
  boxLoginPage : {
    initialize : function(form_id) {
      this.form_id = form_id;
    },
    refresh : function() {
      $(this.form_id).submit();
    }
  },
  boxProductsListing : {
    initialize : function(url, maximum_display_items, page, sort, keywords, category_path) {
      this.url = url;
      this.maximum_display_items = maximum_display_items;
      this.page = page;
      this.sort = sort;
      this.keywords = keywords;
      this.category_path = category_path;

      this.pageIsSet = false;
    },
    refresh : function() {
      var url = this.url,
        form = document.filters,
        justSubmit = false;
      if (url == '' && (form.action.indexOf('?') != -1)) {
        url = '?';
      }
      if (undefined != this.maximum_display_items && -1 != this.maximum_display_items && 0 != this.maximum_display_items) {
        document.filters.maximum_display_items.value = this.maximum_display_items;
      }
      if (undefined != this.page && -1 != this.page) {
        document.filters.page.value = this.page;
        if (!this.pageIsSet) document.filters.page.value = 1;
      }
      if (undefined != this.sort && -1 != this.sort) {
        document.filters.sort.value = this.sort;
      }
      if (undefined != this.keywords && '' != this.keywords) {
        url += '&keywords=' + this.keywords;
      }
      if (undefined != this.category_path && '' != this.category_path) {
        document.filters.category_path.value = this.category_path;
      }
      if (!this.url) {
        justSubmit = true;
      }
      submitForm(form, url, justSubmit);
      return false;
    },
    setMaximumDisplayItemsTop : function(maximum_display_items) {
      this.maximum_display_items = maximum_display_items;
    },
    setMaximumDisplayItemsBottom : function(maximum_display_items) {
      this.maximum_display_items = maximum_display_items;
    },
    setPage : function(page) {
      this.page = page;
      this.pageIsSet = true;
    },
    setSort : function(sort) {
      this.sort = sort;
    },
    addProductToCart : function(id) {
      document.filters.products_listing_quantity.value   = $('boxProductListing_' + id).value;
      document.filters.products_listing_quantity.name    = 'qty';
      document.filters.products_listing_product_id.value = id;
      document.filters.products_listing_product_id.name  = 'prId';
      document.filters.products_listing_action.name      = 'ac';
      document.filters.products_listing_process.name     = 'process';
      this.refresh();
    }
  },
  boxCustomerAssortment : {
    toggle : function (id) {
      $$('#' + id).each(function(item) {
        item.toggle();
      });
    }
  },
  boxSearch : {
    initialize : function(url, keyword_element_id, keyword_length_message, order_element_id) {
      this.url = url;
      this.keyword_element_id = keyword_element_id;
      this.order_element_id = order_element_id;
      this.keyword_length_message = keyword_length_message;
    },
    refresh : function(set_order) {
      var url = this.url;
      if (!set_order){
        if (this.checkKeyword(this.keyword_element_id)) {
          var objKeyword = document.getElementById(this.keyword_element_id);
          if (objKeyword && objKeyword.value) {
            url += '&keywords=' + escape(objKeyword.value);
          } else {
            if (objKeyword.tagName && objKeyword.tagName == 'META') {
              var input_list = document.getElementsByTagName('input');
              for(var i = 0; i < input_list.length; i++) {
                if (input_list[i].id && input_list[i].id == this.keyword_element_id) {
                  url += '&keywords=' + escape(input_list[i].value);
                }
              }
            } else
              return false;
          }
        } else {
          return false;
        }
      } else {
        url += '&orderstatus=' + $(this.order_element_id).value;
      }
      document.location = url;
      return false;
    },
    checkKeyword : function(input_id) {
      if (input_id) {
        var objKeyword = document.getElementById(input_id);//$(input_id).value.trim();
        if (objKeyword) {
          if (objKeyword.value && objKeyword.value.length < 3) {
            alert(this.keyword_length_message);
            return false;
          } else {
            if (objKeyword.tagName && objKeyword.tagName == 'META') {
              var input_list = document.getElementsByTagName('input');
              for(var i = 0; i < input_list.length; i++) {
                if (input_list[i].id && input_list[i].id == input_id) {
                  if (input_list[i].value && input_list[i].value.length < 3) {
                    alert(this.keyword_length_message);
                    return false;
                  }
                }
              }
            }
            return true;
          }
        } else {
          return true;
        }
      } else {
        return true;
      }
    }
  },
  boxShoppingCart : {
    initialize : function(url) {
      this.url = url;
    },
    refresh : function() {
      var url = this.url;
      document.location = url;
      return false;
    }
  }
};

Date.prototype.lastday = function() {
  var d = new Date(this.getFullYear(), this.getMonth(), 0);
  return d.getDate();
};

function set_count_day(elem) {
  var sDay = document.getElementById(elem + '[day]');
  var date_month = document.getElementById(elem + '[month]').value;
  var date_year = document.getElementById(elem + '[year]').value;
  var old_day = sDay.value;
  var d = new Date(date_year, date_month, 1);

  if(sDay.length != d.lastday()) {
    sDay.length = 0;
    for (i = 1; i <= d.lastday(); i++) {
      if (document.createElement) {
        var newDay = document.createElement("option");
        newDay.text = i;
        newDay.value = i;
        (sDay.options.add) ? sDay.options.add(newDay) : sDay.add(newDay, null);
      } else {
        sDay.options[i] = new Option(i, i, false, false);
      }
    }

    if(old_day <= d.lastday()) {
      sDay.value = old_day;
    } else {
      sDay.value = d.lastday();
    }
    document.getElementById(elem + '[date]') = date_year + '-' + date_month + '-' + sDay.value;
  }
}

function submitForm(form, url, justSubmit) {
  var queryString = '';
  if (!justSubmit && (form.method == 'get' || form.method == 'GET')) {
    if (url == undefined) {
      url = '';
    }
    if (form.action) {
      url = (url) ? form.action + url : form.action;
    } 
    queryString = Form.Methods.serialize(form, false);
    if (url != '?') {
      queryString = "&" + queryString;
    }
    url += queryString;
    document.location = url;
  } else {
    form.submit();
  }
}
