
(function($) {
    $.extend({
        cocktailSort: function(array, sortfunc) {
            if ($.isArray(array)) {
                var begin = -1;
                var end = array.length - 2;
                var swapped;
                var i;
                do {
                    swapped = false;
                    begin++;
                    for (var i = begin; i <= end; i++) {
                        if (sortfunc(array[i], array[i + 1]) > 0) {
                            var temp = array[i];
                            array[i] = array[i + 1];
                            array[i + 1] = temp;
                            swapped = true;
                        }
                    }
                    if (!swapped) break;
                    end--;
                    for (var i = end; i >= begin; i--) {
                        if (sortfunc(array[i], array[i + 1]) > 0) {
                            var temp = array[i];
                            array[i] = array[i + 1];
                            array[i + 1] = temp;
                            swapped = true;
                        }
                    }
                } while (swapped);
            }
        }
    });
})(jQuery);

(function($) {
    $.extend({
        binarySearch: function(array, reference, comparefunc) {
            if ($.isArray(array)) {
                var mid, min = 0, max = array.length - 1;
                while (min <= max) {
                    mid = min + Math.floor((max - min) / 2);
                    var cmp = comparefunc(reference, array[mid]);
                    if (cmp > 0) {
                        min = mid + 1;
                    } else if (cmp < 0) {
                        max = mid - 1;
                    } else {
                        return mid;
                    }
                }
            }
            return -1;
        }
    });
})(jQuery);


(function($) {

    var list;
    var loaded;

    $.extend({
        
        preload: function(array,complete) {
          list = [];
          loaded = 0;
          for (var i in array) {
            var img = new Image();
            list.push(img);
            img.onload = function() { loaded++; if (loaded==list.length) complete(); };
            img.src = array[i];
          }
        },

        formatPrice: function(price) {
          var p=price.toString();
          if (p.length>3) {
            return p.substr(0,p.length-3)+','+p.substr(p.length-3);
          } else {
            return p;
          }
        },  

        serializeState: function(object) {
            var output = [];
            for (var param in object) {
              output.push(param + '-' + encodeURIComponent(object[param].toString().replace('-','xdash').replace('.','xdot')));
            }
            return output.join('.');
        }, 

        deserializeState: function(s1) {
          var object=new Object();
          $.each(s1.split('.'),function(i,s2){
            var s3=s2.split('-');
            object[s3[0]]=decodeURIComponent(s3[1]).replace('xdash','-').replace('xdot','.');
          });
          return object;
        }

    });
})(jQuery);


