/**
 * Transition-Klasse zur nx4-Umstellung.
 */
qx.Class.define("kes.jsbase.sort.BaseSorter",
{
  type : 'static',

  statics :
  {
    sortIntAscending       : function(o1, o2) { return nx4.jsbase.sort.BaseSorter.sortIntAscending(o1, o2); },
    sortIntDescending      : function(o1, o2) { return nx4.jsbase.sort.BaseSorter.sortIntDescending(o1, o2); },
    sortBraSizesAscending  : function(a, b)   { return nx4.jsbase.sort.BaseSorter.sortBraSizesAscending(a, b); },
    sortBraSizesDescending : function(a,b)    { return nx4.jsbase.sort.BaseSorter.sortBraSizesDescending(a, b); }
  }
});

/**
 * Enthaelt verschiedene Sortierroutinen.
 * Die Menge der Funktionen sollte mit kes.jsbase.table.BaseSorter korrespondieren.
 * Die Klassen sind deswegen nicht voneinander abgeleitet um die groesstmoegliche 
 * Geschwindigkeit zu erreichen.
 */
qx.Class.define("nx4.jsbase.sort.BaseSorter",
{
  type : 'static',

  statics :
  {
    sortAscending : function(x, y)
    {
      if(x.toLowerCase)
        x = x.toLowerCase();
      if(y.toLowerCase)
        y = y.toLowerCase();
      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    },

    sortDescending : function(x, y)
    {
      if(x.toLowerCase)
        x = x.toLowerCase();
      if(y.toLowerCase)
        y = y.toLowerCase();
      return ((x > y) ? -1 : ((x < y) ? 1 : 0));
    },

    sortIntAscending : function(o1, o2)
    {
      var obj1 = parseInt(o1);
      var obj2 = parseInt(o2);
      return (obj1 > obj2) ? 1 : ((obj1 == obj2)?0:-1);
    },

    sortIntDescending : function(o1, o2)
    {
      var obj1 = parseInt(o1);
      var obj2 = parseInt(o2);
      return (obj1 < obj2) ? 1 : ((obj1 == obj2)?0:-1);
    },

    /**
     * Spezielle Sortierfunktion fuer BH-Groessen.
     * Wenn keine BH-Groessen geliefert werden, wieder einfacher String-Vergleich.
     * @param a Vergleichswert 1
     * @param b Vergleichswert 2
     * @return -1, 0, 1 je nachdem wie der Vergleich ausgeht
     */
    sortBraSizesAscending : function(a, b)
    {
      var x = a.toLowerCase();
      var y = b.toLowerCase();

      //wenn die Greossen gleich sind
      if(x == y)
        return 0;

      if(x.match(/^[a-z] [0-9]+$/) && y.match(/^[a-z] [0-9]+$/))
      {
        x = x.split(" ");
        y = y.split(" ");

        //B > A
        if(x[0] > y[0])
          return 1;

        //A < B
        if(x[0] < y[0])
          return -1;

        //ab hier gilt A == A
        if(x[1] == y[1])
          return 0;

        //hier dann die Zahlwerte vergleichen
        return ((parseInt(x[1]) < parseInt(y[1])) ? -1 : ((parseInt(x[1]) > parseInt(y[1])) ? 1 : 0));
      }
      else
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    },

    /**
     * Die BH-Sortierung ist so aufwaendig, dass wir diesen zusaetzlichen Methodenaufruf auch noch absetzen koennen.
     */
    sortBraSizesDescending : function(a,b)
    {
      return kes.jsbase.sort.BaseSorter.sortBraSizesAscending(b, a);
    }

  }

});

