jQuery.extend(
{
    request:function(key, defaultValue)
    {
	    var url = location.search;
	    defaultValue = defaultValue || "";
	    if(url.indexOf("?")==0)
	    {
		    var requests = url.substr(1);
		    var reg = new RegExp("(^|&)"+ key + "=([^&]*)(&|$)");
		    var arr = requests.match(reg);
		    if (arr !=null)
		    {
			    return unescape(arr[2]);
		    }
		    else
		    {
			    return defaultValue;
		    }
	    }
	    return defaultValue;
    },
    //get no request page url
    requestPage:function()
    {
	    var url = location.href;
	    if (arguments.length==1)
	    {
		    url = arguments[0];
	    }
	    return url.split("?")[0];
    },
    //rewrite url
    //setRequest({key:"page",value:"1"},{key:"type",value:"ppt"})
    //setRequest({key:"page",value:null})
    setRequest:function()
    {
	    var url = location.search;
	    var aParam = new Array();
	    var oParam = new Object();
	    if(url.indexOf("?")==0)
	    {
		    var requestStr = url.substr(1);
		    var requests = requestStr.split("&");
		    for(var i=0;i<requests.length;i++)
		    {
			    var key = requests[i].split("=")[0];
			    var val = requests[i].split("=")[1];
			    oParam[key] = val;
		    }
	    }
	    for(var i=0;i<arguments.length;i++)
	    {
	        if (arguments[i].value == null)
	        {
	            delete oParam[arguments[i].key];
	        }
	        else
	        {
		        oParam[arguments[i].key] = arguments[i].value;
		    }
	    }
	    for(o in oParam)
	    {
		    if (o!="" && o!=null)
		    {
			    aParam[aParam.length] = o + "=" + escape(oParam[o]);
		    }			
	    }
	    return aParam.join("&");
    },
    redirect:function()
    {
        var query = $.setRequest.apply(this, arguments);
        var url = this.requestPage() + "?" + query;
        location.href = url;
    }
})


jQuery.fn.numeric = function(decimal, callback)
{
	decimal = "";
	callback = typeof callback == "function" ? callback : function(){};
	this.keypress(
		function(e)
		{
			var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
			// allow enter/return key (only when in an input box)
			if(key == 13 && this.nodeName.toLowerCase() == "input")
			{
			    
				return true;
			}
			else if(key == 13)
			{			    
				return false;
			}
			var allow = false;
			// allow Ctrl+A
			if((e.ctrlKey && key == 97 /* firefox */) || (e.ctrlKey && key == 65) /* opera */) return true;
			// allow Ctrl+X (cut)
			if((e.ctrlKey && key == 120 /* firefox */) || (e.ctrlKey && key == 88) /* opera */) return true;
			// allow Ctrl+C (copy)
			if((e.ctrlKey && key == 99 /* firefox */) || (e.ctrlKey && key == 67) /* opera */) return true;
			// allow Ctrl+Z (undo)
			if((e.ctrlKey && key == 122 /* firefox */) || (e.ctrlKey && key == 90) /* opera */) return true;
			// allow or deny Ctrl+V (paste), Shift+Ins
			if((e.ctrlKey && key == 118 /* firefox */) || (e.ctrlKey && key == 86) /* opera */
			|| (e.shiftKey && key == 45)) return true;
			// if a number was not pressed
			if(key < 48 || key > 57)
			{
				/* '-' only allowed at start */
				/*if(key == 45 && this.value.length == 0) return true;*/
				/* only one decimal separator allowed */
				if(key == decimal.charCodeAt(0) && this.value.indexOf(decimal) != -1)
				{
					allow = false;
				}
				// check for other keys that have special purposes
				if(
					key != 8 /* backspace */ &&
					key != 9 /* tab */ &&
					key != 13 /* enter */ &&
					key != 35 /* end */ &&
					key != 36 /* home */ &&
					key != 37 /* left */ &&
					key != 39 /* right */ &&
					key != 46 /* del */
				)
				{
					allow = false;
				}
				else
				{
					// for detecting special keys (listed above)
					// IE does not support 'charCode' and ignores them in keypress anyway
					if(typeof e.charCode != "undefined")
					{
						// special keys have 'keyCode' and 'which' the same (e.g. backspace)
						if(e.keyCode == e.which && e.which != 0)
						{
							allow = true;
						}
						// or keyCode != 0 and 'charCode'/'which' = 0
						else if(e.keyCode != 0 && e.charCode == 0 && e.which == 0)
						{
							allow = true;
						}
					}
				}
				// if key pressed is the decimal and it is not already in the field
				if(key == decimal.charCodeAt(0) && this.value.indexOf(decimal) == -1)
				{
					allow = true;
				}
			}
			else
			{
				allow = true;
			}
			return allow;
		}
	)
	.blur(
		function()
		{
			var val = jQuery(this).val();
			if(val != "")
			{
				var re = new RegExp("^\\d+$|\\d*" + decimal + "\\d+");
				if(!re.exec(val))
				{
					callback.apply(this);
				}
			}
		}
	)
	return this;
}


jQuery.extend(
{
    ////////////////////////////////////////////////////////////
    // 名称:Cookie的操作
    // 功能:读写Cookie
    // 调用:
    // SetCookie(sName, sValue)
    // GetCookie(sName)
    ////////////////////////////////////////////////////////////
    //写Cookie
    setCookie:function(name,value)
    {
        var Days = 30; //此 cookie 将被保存 30 天
        var exp  = new Date();    //new Date("December 31, 9998");
        exp.setTime(exp.getTime() + Days*24*60*60*1000);
        document.cookie = name + "="+ escape (value) + ";path=/;expires=" + exp.toGMTString();
    },
    //读Cookie
    getCookie:function(name)
    {
        var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
        if(arr != null) return unescape(arr[2]); return null;
    },
    //删除Cookie
    delCookie:function(name)
    {
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval=getCookie(name);
        if(cval!=null) document.cookie= name + "="+cval+";path=/;expires="+exp.toGMTString();
    }
})


/*
 * $Author: wanghr100
 * $Date: 2007-03-27 20:15
 */
jQuery.fn.extend(
{
    //get select element selected value
	selectVal:function()
	{
	    var str = "";
		this.each(function(){
		        str += this.options[this.options.selectedIndex].value;
		    }
		);
		return str;
	},
	//selected by option index
	selectedIndex:function(index)
	{
	    this.each(
	        function(){
	            this.options[index].selected = true;
	        }
	    )
	},
	//selected by option value
	selectedValue:function(value)
	{
	    this.each(
	        function(){
	            for(var i=0;i<this.options.length;i++)
	            {
	                if(this.options[i].value == value)
	                {
	                    this.options[i].selected = true;
	                }
	            }
	        }
	    )
	},
	//selected by option text
	selectedText:function(text)
	{
	    this.each(
	        function(){
	            for(var i=0;i<this.options.length;i++)
	            {
	                if(this.options[i].text == text)
	                {
	                    this.options[i].selected = true;
	                }
	            }
	        }
	    )
	},
	checkboxVal:function()
	{
	    var aStr = new Array();
	    this.each(
	        function(){
                if(this.checked)
                {
                    aStr[aStr.length] = this.value;
                }
		   }
	    )
	    return aStr.join(",");
	}
	,
    //checkbox 
    checked:function()
    {
        this.each(
            function(){
                this.checked = !this.checked;
            }
        )
    }
});
