/* Copyright (c) 2006-2007 Mathias Bank (http://www.mathias-bank.de)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * Version 2.1
 * 
 * Thanks to 
 * Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
 * Tom Leonard for some improvements
 * 
 */

(function($) {
    /**
     * Prepares the parameter output
     */
    var _output = function (qString, strParamName) {
        if (qString==null) {
            return null;
        }

        var returnVal = [];
        for (var i=0;i<qString.length; i++){
            if (escape(unescape(qString[i].split("=")[0])) == strParamName){
                returnVal.push(qString[i].split("=")[1]);
            }
        }


        if (returnVal.length==0) {
            return null;
        } else {
            if (returnVal.length==1) {
                return returnVal[0];
            } else {
                return returnVal;
            }
        }
        
    }
    
    /**
     * Returns get parameters.
     *
     * If the desired param does not exist, null will be returned
     *
     * To get the document params:
     * @example value = $(document).getUrlParam("paramName");
     * 
     * To get the params of a html-attribut (uses src attribute)
     * @example value = $('#imgLink').getUrlParam("paramName");
     */
    $.fn.getURLParam = function(strParamName) {
        strParamName = escape(unescape(strParamName));

        var returnVal = new Array(),
            qString = null,
            strHref,
            strQueryString;

        if ($(this).attr("nodeName")=="#document") {
            //document-handler

            if (window.location.search.search(strParamName) > -1 ){
                return _output(
                    window.location.search.substr(
                        1, window.location.search.length
                    ).split("&"), strParamName
                );
            }

        } else if ($(this).attr("src")!="undefined") {
            strHref = $(this).attr("src")
            if ( strHref.indexOf("?") > -1 ){
                strQueryString = strHref.substr(strHref.indexOf("?")+1);
                return _output(strQueryString.split("&"), strParamName);
            }
        } else if ($(this).attr("href")!="undefined") {
            strHref = $(this).attr("href")
            if ( strHref.indexOf("?") > -1 ){
                strQueryString = strHref.substr(strHref.indexOf("?")+1);
                return _output(strQueryString.split("&"), strParamName);
            }
        }
        
        return null;
    };
    
    /**
     * Returns get parameters.
     *
     * If the desired param does not exist, null will be returned
     *
     * @example value = $.getURLParam("paramName");
     */
    $.getURLParam = function(strParamName) {
        if (window.location.search.search(strParamName) < 0) {
            return null;
        }
        
        return _output(
            window.location.search.substr(1,window.location.search.length)
                .split("&"), strParamName
        );
    };
})(jQuery);

