/*
functions.js
*/

var Serializer =
{
	/**
	 * JSON szabványnak megfelelően karakterlánccá alakítja a bemeneti paramétert
	 *
	 * @param data {Mixed} Ez lesz átalakítva
	 * @return {String} Szabványos JSON string
	 */
	JSON: function(data)
	{
		switch(typeof data)
		{
			case 'string':
				return '"'+data.replace(/"/ig, '\\"')+'"';
			break;
		
			case 'boolean':
				return (data) ? 'true' : 'false';
			break;
		
			case 'number':
				return data;
			break;
		
			case 'object':
				if(isNull(data)) return 'null';
				
				var item	= new Array();
				for(var k in data)
				{
					if(isFunction(data[k])) continue;
					if(isArray(data))
						item.push(this.JSON(data[k]));
					else
						item.push('"'+k+'":'+this.JSON(data[k]));
				}
				
				if(isArray(data))
					return '['+item.join(',')+']';
				else
					return '{'+item.join(',')+'}';			
			break;
		}		
	},
	
	/**
	 * Átalakít egy objektumot POST/GET formára pl.: {name:'firstName lastName', age:12,..} => name=firstName%20lastName&age=12
	 *
	 * @param data {Mixed} Ez lesz átalakítva
	 * @param prefix {String} Rekurzív hívásnál van jelentősége
	 * @return {String}
	 */
	URL: function(data, prefix)
	{
		prefix = prefix ? prefix : null;
		switch(typeof data)
		{
			case 'string':
				return prefix+'='+encodeURIComponent(data);
			break;
		
			case 'boolean':
				return prefix+'='+(data ? 'true' : 'false');
			break;
		
			case 'number':
				return prefix+'='+data;
			break;
		
			case 'object':
				if(isNull(data)) return prefix+'=null';
				var item = new Array();
				if(isArray(data))
				{
					for(var i=0 ; i<data.length ; i++)
					{
						prefix = (isNull(prefix) ? 'data' : prefix);
						item.push(this.URL(data[i], prefix+'['+i+']'));
					}
				}
				else
				{
					for(var k in data)
					{
						if(isFunction(data[k])) continue;
						var p = isNull(prefix) ? k : prefix+'['+k+']';
						item.push(this.URL(data[k], p));
					}
				}
				return item.join('&');
			break;
		}
	}
}
