/**
 * @author Egloo
 */

jQuery.getQuery = function() {
    
    var result = null;
    var query = location.hash;
    
    var re = new RegExp("^[^#]*#(.+)$");
    if(re.test(query)) {
        var req = re.exec(query)[1];
        req = req.split("&");

        result = {};
        for(i = 0; i < req.length; i++) {
            var r_item = req[i].split("=");
            if(r_item[0] != "" && r_item[1] != "") {
                result[r_item[0]] = r_item[1];
            }
        }
    }

    return result;
}

jQuery.setQuery = function(query) {
    if(query == null || query == undefined) 
        return;
    
    var q = "";
    
    if(typeof query == "object")  {
        if(query instanceof Array) {
            // if Array
            for(var key in query) {
                if(query[key] != "") {
                    q += key + "=" + query[key] + "&";
                }
            }
            
        } else {
            // if Object
            $.each(query, function(key, val) {
                if(val != "") {
                    q += key + "=" + val + "&";
                }
            });
            
        }
    } else if(typeof query == "string") {
        // if String
        q = query;
    }
    
	q = q.replace(/^(.*)&$/, "$1");
//	if(q && q.length < 2) q = "#";
    window.location.hash = q;
}

jQuery.queryBuffer = {};

jQuery.addToBuffer = function(name, value) {
    this.queryBuffer[name] = value;
}

jQuery.flushBuffer = function() {
    this.setQuery(this.queryBuffer);
    this.queryBuffer = {};
}

jQuery.fn.serializeForm = function(taprefix) {
    var params = {};

    $(this).find("input[@name]").each(function() {
        params[String($(this).attr("name"))] = $(this).val();
    });
    $(this).find("select[@name]").each(function() {
        params[String($(this).attr("name"))] = $(this).val();
    });
    $(this).find("input[@type='radio']:checked").each(function() {
        params[String($(this).attr("name"))] = $(this).val();
    });
    $(this).find("input[@type='checkbox']").each(function() {
        params[String($(this).attr("name"))] = ($(this).get(0).checked) ? "1" : "";
    });
    $(this).find("textarea[@name]").each(function() {
        params[String($(this).attr("name"))] = tinyMCE.getInstanceById($(this).attr("name") + taprefix).getHTML();
    });

    return params;
}