﻿// $Id: jquery.cookie.compressed.js,v 1.2 2008/02/14 05:23:14 redbox2000drupalorg Exp $
//jQuery操作cookie的插件,大概的使用方法如下:(1)设置cookie的值  example $.cookie(’the_cookie’, ‘the_value’);(2)新建一个cookie 包括有效期 路径 域名等  example $.cookie(’the_cookie’, ‘the_value’, {expires: 7, path: ‘/’, domain: ‘jquery.com’, secure: true});  (3)新建cookie  example $.cookie(’the_cookie’, ‘the_value’); (4)删除一个cookie  example $.cookie(’the_cookie’, null);
//jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};

jQuery.cookie = function(name, value, options) {
	if (typeof value != 'undefined') {
		options = options || {};
		if (value === null) {
			value = '';
			options.expires = -1
		}
		if ('object' == typeof value) {
			value	= this.urlencode(value);
		}
		var expires = '';
		if (options.expires
				&& (typeof options.expires == 'number' || options.expires.toUTCString)) {
			var date;
			if (typeof options.expires == 'number') {
				date = new Date();
				date.setTime(date.getTime()
						+ (options.expires * 24 * 60 * 60 * 1000))
			} else {
				date = options.expires
			}
			expires = '; expires=' + date.toUTCString()
		}
		var path = options.path ? '; path=' + (options.path) : '';
		var domain = options.domain ? '; domain=' + (options.domain) : '';
		var secure = options.secure ? '; secure' : '';
		document.cookie = [ name, '=', encodeURIComponent(value), expires, path, domain, secure ].join('')
	} else {
		var cookieValue = null;
		if (document.cookie && document.cookie != '') {
			var cookies = document.cookie.split(';');
			for ( var i = 0; i < cookies.length; i++) {
				var cookie = jQuery.trim(cookies[i]);
				if (cookie.substring(0, name.length + 1) == (name + '=')) {
					cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
					var s='';
					if (-1 != cookieValue.indexOf('&')) {
						cookieValue	= this.urldecode(cookieValue);
					}
					break
				}
			}
		}
		return cookieValue;
	}
};
/**
 * 序列化对象
 * 
 * @param	Object	obj		待序列化对象
 * @param	String	perfix	前缀
 * @return	String			序列化后的对象
 */
jQuery.urlencode	= function (obj, perfix) {
	var buffer	= [];
	for (var i in obj) {
		var idx	= null == perfix	? encodeURIComponent(i)	: perfix+'%5B'+encodeURIComponent(i)+'%5D';
		if (null != obj) {
			if ('object' == typeof obj[i] || 'array' == typeof obj[i]) {
				buffer.push(this.urlencode(obj[i], idx));
			} else if ('string' == typeof obj[i]) {
				buffer.push(idx+'='+encodeURIComponent(obj[i]));
			} else if ('number' == typeof obj[i]) {
				buffer.push(idx+'='+obj[i]);
			}
		}
	}
	return	buffer.join('&');
};

jQuery.urldecode	= function (str) {
	var	elements	= str.split('&');
	var obj			= {};
	for (var i =0;i < elements.length;i ++) {
		var	equPos	= elements[i].indexOf('=');
		if (-1 != equPos && 0 != equPos) {
			var	name	= decodeURIComponent(elements[i].substr(0, equPos));
			var	value	= decodeURIComponent(elements[i].substr(equPos+1));
			var	realName= name.replace(/^([^\[]+).*?$/, "$1");
			if (realName == name) {
				obj[name]	= value;
			}/* else {
				var	struct	= name.substr(realName.length+1).replace(']', '').split('[');
				var	bfCode	= '';
				var	bfSimbol= [];
				for (var i = 0;i < struct.length;i ++) {
					bfCode	+= '{"'+struct[i]+'":';
					bfSimbol.push('}');
				}
				bfCode	+= bfSimbol.join('');
				obj[realName]	= eval('('+bfCode+')');;
			}*/
		}
	}
	return	obj;
}