/**
 * Javascript code to store data as JSON strings in cookies. 
 * It uses prototype.js 1.5.1 (http://www.prototypejs.org)
 * 
 * Author : Lalit Patel
 * Website: http://www.lalit.org/lab/jsoncookies
 * License: Creative Commons Attribution-ShareAlike 2.5
 *          http://creativecommons.org/licenses/by-sa/2.5/
 * Version: 0.3
 * Updated: Jun 22, 2007 3:40pm
 */
 
var CookieJar = Class.create();

CookieJar.prototype = {

	// Append before all cookie names to differntiate them.
	appendString: "__CJ_",

	/**
	 * Initializes the cookie jar with the options.
	 */
	initialize: function(name, options) {
		
		this.options = {
        expires: 3600,		// seconds (1 hr)
        path: '',			// cookie path
        domain: '',			// cookie domain
        secure: ''			// secure ?
		};
		Object.extend(this.options, options || {});

		if (this.options.expires != '') {
			var date = new Date();
			date.setTime(date.getTime() + (this.options.expires * 1000));
			this.options.expires = '; expires=' + date.toGMTString();
		}
		if (this.options.path != '') {
			this.options.path = '; path=' + escape(this.options.path);
		}
		if (this.options.domain != '') {
			this.options.domain = '; domain=' + escape(this.options.domain);
		}
		if (this.options.secure == 'secure') {
			this.options.secure = '; secure';
		} else {
			this.options.secure = '';
		}
		
	},
	
	enable: function() {
		this.put('test', 1);
		v = this.get('test');
		return v == 1;
	},
	/**
	 * Adds a name values pair.
	 */
	put: function(name, value) {
		name = this.appendString + name;
		cookie = this.options;
		var type = typeof value;
		switch(type) {
		  case 'undefined':
		  case 'function' :
		  case 'unknown'  : return false;
		  case 'boolean'  : 
		  case 'string'   : 
		  case 'number'   : value = String(value.toString());
		}
		var cookie_str = name + "=" + escape(Object.toJSON(value));
		try {
			document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Removes a particular cookie (name value pair) form the Cookie Jar.
	 */
	remove: function(name) {
		name = this.appendString + name;
		cookie = this.options;
		try {
			var date = new Date();
			date.setTime(date.getTime() - (3600 * 1000));
			var expires = '; expires=' + date.toGMTString();
			document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Return a particular cookie by name;
	 */
	get: function(name) {
		name = this.appendString + name;
		var cookies = document.cookie.match(name + '=(.*?)(;|$)');
		if (cookies) {
			return (unescape(cookies[1])).evalJSON();
		} else {
			return null;
		}
	},

	/**
	 * Empties the Cookie Jar. Deletes all the cookies.
	 */
	empty: function() {
		keys = this.getKeys();
		size = keys.size();
		for(i=0; i<size; i++) {
			this.remove(keys[i]);
		}
	},

	/**
	 * Returns all cookies as a single object
	 */
	getPack: function() {
		pack = {};
		keys = this.getKeys();

		size = keys.size();
		for(i=0; i<size; i++) {
			pack[keys[i]] = this.get(keys[i]);
		}
		return pack;
	},

	/**
	 * Returns all keys.
	 */
	getKeys: function() {
		keys = $A();
		keyRe= /[^=; ]+(?=\=)/g;
		str  = document.cookie;
		CJRe = new RegExp("^" + this.appendString);
		while((match = keyRe.exec(str)) != undefined) {
			if (CJRe.test(match[0].strip())) {
				keys.push(match[0].strip().gsub("^" + this.appendString,""));
			}
		}
		return keys;
	}

};


function vote(id) {
   jar = new CookieJar("votes", {expires:3600*24*365, path: "/"});
	if (jar.enable()) {
		if (jar.get('voted'+id) != 1) {
			new Ajax.Request("/ajax/ca/fotos-primaria/?action=vote&id="+id, { method:'get',
				onSuccess: function(transport) {
					var jd;
					eval('jd = ' + transport.responseText);
					if (jd.ERROR == 0) {
						$('votebutton'+id).hide();
						$('msgok'+id).show();
						$('votes'+id).update(jd.VOTS);
						// Guardar cookie
						jar.put('voted'+id, 1);
					}
					else { // no captcha
						$('votebutton'+id).hide();
						$('msgalready'+id).show();
						jar.put('voted'+id, 1);				
					}
				},
				onFailure: function() { alert('Error calling Ajax...') }
			});
		}
		else { // ja votat
			$('votebutton'+id).hide();
			$('msgalready'+id).show();				
		}
	}
	else {
		$('votebutton'+id).hide();
		$('msgcookie'+id).show();
	}
}
