<?php
class JSON{

	public static function content($pagina){
		$archivo1 = dirname(__FILE__).'/../page/'.$pagina.'.php';
		$archivo2 = dirname(__FILE__).'/../page/'.$pagina.'/'.$_GET['accion'].'.php';
		if(empty($_GET['accion']) && file_exists($archivo1)){
			echo include_php($archivo1);
		}elseif(!empty($_GET['accion']) && file_exists($archivo2)){
			echo include_php($archivo2);
		}else{
			echo JSON::array2json(array('error' => 'Error del servidor: 404.'));
		}
	}

	public static function json2array($json){
		if(get_magic_quotes_gpc()){
			$json = stripslashes($json);
		}
		$json = substr($json, 1, -1);
		$json = str_replace(array(":", "{", "[", "}", "]"), array("=>", "array(", "array(", ")", ")"), $json);
		$json = preg_replace('$([a-zA-Z0-9]+)\=\>([a-zA-Z0-9]+)$', '$1:$2', $json);
		@eval("\$json_array = array({$json});");
		return $json_array;
	}

	public static function array2json($arr) {
		$parts = array();
		$is_list = false;

		$keys = array_keys($arr);
		$max_length = count($arr)-1;
		if($keys[0] == 0 && $keys[$max_length] == $max_length){
			$is_list = true;
			for($i=0; $i<count($keys); $i++){
				if($i != $keys[$i]){
					$is_list = false;
					break;
				}
			}
		}

		foreach($arr as $key=>$value){
			if(is_array($value)){ //Custom handling for arrays
				if($is_list) $parts[] = JSON::array2json($value); /* :RECURSION: */
				else $parts[] = '"' . $key . '":' . JSON::array2json($value); /* :RECURSION: */
			}else{
				$str = '';
				if(!$is_list) $str = '"' . $key . '":';

				//Custom handling for multiple data types
				if(is_numeric($value)) $str .= $value; //Numbers
				elseif($value === false) $str .= 'false'; //The booleans
				elseif($value === true) $str .= 'true';
				else $str .= '"' . addslashes($value) . '"'; //All other things
				// :TODO: Is there any more datatype we should be in the lookout for? (Object?)

				$parts[] = $str;
			}
		}
		$json = implode(',',$parts);

		if($is_list) return '[' . $json . ']';//Return numerical JSON
		return '{' . $json . '}';//Return associative JSON
	}
	
}
?>