/*
* jQuery Sort plugin
* Version 1.0.1 (2/1/09)
* @requires jQuery v1.2.3 or later
*
* Copyright (c) 2009 C. Pettit / ZeroPoint Development
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*  
*/

(function($) {

    $.fn.sort = function(sortAttr, sortDesc) {
        if (typeof (sortAttr) === "undefined") {
            return $(this);
        }
        if (sortAttr == "") {
            return $(this);
        }
        if (typeof (sortAttr) === "string") {
            
			var retObj = $(this).get().sort(function(a, b) {
			 	if (typeof ($(a).attr(sortAttr)) === "number") {
                    return $(a).attr(sortAttr) > $(b).attr(sortAttr) ? 1 : -1;
                }
                else {
                    return $(a).attr(sortAttr).toLowerCase() > $(b).attr(sortAttr).toLowerCase() ? 1 : -1;
                }
            });
			
            if (getSort(sortDesc)) {
                return $(retObj.reverse());
            }
            else {
                return $(retObj);
            }
        }
		setLoader();
        if (typeof (sortAttr) === "object") {
            if ((sortAttr).length) {
                var retObj = $(this).get().sort(function(a, b) {
                    var i = 0;
                    var retval = 1;
                    while (i < sortAttr.length) {
                        var al = $(a).attr(sortAttr[i]).toLowerCase();
                        var bl = $(b).attr(sortAttr[i]).toLowerCase();

                        if (al > bl) { retval = 1; break; }
                        if (bl > al) { retval = -1; break; }
                        i++;
                    }
                    return retval;

                });
                if (getSort(sortDesc)) {
                    return $(retObj.reverse());
                }
                else {
                    return $(retObj);
                }
            }
            else {
                var retObj = $(this).get().sort(function(a, b) {
                    var attrLen = 0;
                    for (var v in sortAttr) {
                        var al = $(a).attr(v).toLowerCase();
                        var bl = $(b).attr(v).toLowerCase();
                        if (al > bl) { return (getSort(sortAttr[v])) ? -1 : 1; }
                        if (bl > al) { return (getSort(sortAttr[v])) ? 1 : -1; }
                    }

                });
                return $(retObj);

            }
        }
    }
    function getSort(sortDesc) {
		setLoader();
        if (typeof sortDesc == "boolean") {
            return sortDesc;
        }
        else if (sortDesc.toLowerCase() == "desc") {
            return true;
        }
        else return false;
    }
})(jQuery);