﻿// JavaScript Document
var jsonlib	= new function(){
	/*プロパティ定義*/
	this.version= '0.9.5';
	this.data	= new Object();	
	
	/*メソッド定義*/
	this.createJSON	=(function(){
		return function(_name,_json){
			this[_name] = new json(_json);
		}
	})();
	
	this.checkJSON = (function(){
		var _return;
		return function(_obj){
			_return	= new String();
			_chkJson(_obj,'');
			return _return;
		}
		function _chkJson(_obj,_name){
			var __name	=(_name)? _name:'';
			for(var _i in _obj){
				var _name_	=__name+'/'+_i;
				if(typeof(_obj[_i])=='string'||typeof(_obj[_i])=='number'||typeof(_obj[_i])=='boolean'||_obj[_i]==null){
					_return	+= _name_+'/:'+_obj[_i]+'\n';
				}else if(_obj[_i][0]){
					_return	+=_name_+'[配列構造]\n';
					_chkJson(_obj[_i],_name_);
				}else{
					_chkJson(_obj[_i],_name_);
				}
			}
		}
	})();

	this.setJSON_repet	=(function(){
		var _return;
		var _num;
		return function(_obj,_template,_index,_keyfield,_keyword,_type){
		/*
		_keyfield	検索対象項目
		_keyword	検索キーワード
		_type		出力形式
		*/
			_return	= new Array();
			_num	= new Number();
			
			if(_index){
				if(typeof(_index)=='object'){
					var	_key	= _index.INDEX.split('/').join('.');
					var	_sort	= (_index.SORT.match(/-/))? 'reverse':'sort';
					var	_length	= (_index.LENGTH)? _index.LENGTH:'all';
				}else if(typeof(_index)=='string'){
					var	_key	=_index.split('/').join('.');
					var	_sort	= 'sort';
					var	_length	= 'all';
				}
				var	_temp	= new Array();
				var	_n	= new Number();
				var _INDEX	= new Array();
				var	__INDEX	= new Object();
				for(var _i in _obj){
					var _num	= 1000000+_n
					_temp[_n++] = eval('_obj["'+_i+'"].'+_key)+_num;
					__INDEX[eval('_obj["'+_i+'"].'+_key)+_num]=[_i]
				}
				if(_sort=='sort'){
					_temp.sort();
				}else{
					_temp.sort();
					_temp.reverse();
				}
				for(var _i=0; _temp.length>_i; _i++){
					if(_i==_length) break;
					var _id_	= __INDEX[_temp[_i]];
					_INDEX[_id_]=_id_;
				}
			}else{
				var	_INDEX	= _obj;
			}
			
			if(_keyfield&&_keyword){
				var	_key	= _keyfield.split('/').join('.');
				for(var _i in _INDEX){
					var	_word	= eval('_obj["'+_i+'"].'+_key);
					if(_word.toString().match(_keyword)){
						_return[_num++]	= jsonlib.setJSON(_obj[_i],_template);
					}
				}
			}else{
				for(var _i in _INDEX){
					_return[_num++]	= jsonlib.setJSON(_obj[_i],_template);
				}
			}
			if(_type){
				if(_type.match(/array/g)){
					return _return;
				}else{
					return _return.join(_type);
				}
			}else{
				return _return.join('');
			}
		};
	})();

	this.setJSON = (function(){
		var _return;
		var _JSONarray;
		var _test;
		var _Conversion;

		return function(_obj,_template,_conv){
			_Conversion	= (_conv)? true:false;
			_test	= new String();
			_JSONarray	= new Object();
			_return		= _template.replace(/\r/g,'').replace(/\n/g,'≪BR≫');
//			_return		= _return.replace(/\[\[.+?\{\{.+?\}\}.+?\]\]/g,'-');
			_chkJsonArray(_obj,'',_Conversion);
			_chkJson(_obj,'');
			_return	= _return.replace(/if\(@@.*?@@\,{{.*?}}\)/g,'');
			_return	= _return.replace(/if\(@@.*?@@\,{{.*?}}{{(.*?)}}\)/g,'$1');
			return _return.replace(/≪BR≫/g,'\n');
		}
		function _chkJsonArray(_obj,_name,_realName){
			var __name		=(_name)? _name:'';
			var __realName	=(_realName)? _realName:'';
			for(var _i in _obj){
				var	_name_		= __name+'/'+_i;
				var	_realName	= __realName+'/'+_i;
					_name_		= _name_.replace(/\/\d+$/g,'');
				if(typeof(_obj[_i])=='string'||typeof(_obj[_i])=='number'||typeof(_obj[_i])=='boolean'||_obj[_i]==null){
				}else{
					if(_obj[_i][0]){
						_test+=_name_+'：'+_obj[_i].length+'\n';
						var	_regex	= new RegExp('\\[\\['+_name_+'\\/{{(.+?)}}'+_name_+'\\/\\]\\]');
						var	_temp	= _return.match(_regex);
						var	_word	= new Array();
						for(var _j=0; _obj[_i].length>_j; _j++){
							_word[_j]	= RegExp.$1.replaceAll(_name_+'/**num**',_name_+'/'+_j);
							_word[_j]	= _word[_j].replaceAll(_realName+'/**num**',_realName+'/'+_j);
						}
						_return	= _return.replace(_regex,_word.join('≪BR≫'));
					}
					_chkJsonArray(_obj[_i],_name_,_realName);
				}
			}
		}
		function _chkJson(_obj,_name){
			var __name	=(_name)? _name:'';
			for(var _i in _obj){
				var _name_	= __name+'/'+_i;
				if(typeof(_obj[_i])=='string'||typeof(_obj[_i])=='number'||typeof(_obj[_i])=='boolean'||_obj[_i]==null){
					
					var	_word	= (_obj[_i]==='0')? '0':(_obj[_i]===0)? 0:(_obj[_i])? _obj[_i]:'';
					
					_JSONarray[_name_]	= _word;
					var	_regex_String	= new RegExp('@@'+_name_+'/@@','g');
					var	_regex_HTML		= new RegExp('@＜'+_name_+'/＞@','g');
					var	_regex_kome		= new RegExp('@※'+_name_+'/※@','g');
					var	_regex_Price	= new RegExp('@,'+_name_+'/,@','g');

					var	_regex_IF		= new RegExp('if\\(@@'+_name_+'/@@,{{(.+?)}}{{(.+?)}}\\)','i');
					var	_temp_IF		= _return.match(_regex_IF);
					while(_temp_IF){
						_regex_IF		= new RegExp('if\\(@@'+_name_+'/@@,{{(.+?)}}{{(.+?)}}\\)','i');
						_temp_IF		= _return.match(_regex_IF);
						_word	= (_word=='')? false:(_word=='false')?false:_word;
						_return	= (_temp_IF&&_word)? _return.replace(_regex_IF,RegExp.$1):_return.replace(_regex_IF,RegExp.$2);
					}
		
					var	_regex_IF		= new RegExp('if\\(@@'+_name_+'/@@,{{(.+?)}}\\)','i');
					var	_temp_IF		= _return.match(_regex_IF);
					while(_temp_IF){
						_regex_IF		= new RegExp('if\\(@@'+_name_+'/@@,{{(.+?)}}\\)','i');
						_temp_IF		= _return.match(_regex_IF);
						_word	= (_word=='')? false:(_word=='false')?false:_word;
						_return	= (_temp_IF&&_word)? _return.replace(_regex_IF,RegExp.$1):_return.replace(_regex_IF,'');
					}
					if(_Conversion){
						_return	= _return.replace(_regex_String,_word);
					}else{
						_return	= _return.replace(_regex_String,_word.toString().replace(/\|/ig,'<br />'));
					}
					_return	= _return.replace(_regex_HTML,_word.toString().unescapeJson().convertHTML());
//					_return	= _return.replace(_regex_HTML,_word.toString().unescapeJson().convertHTML());
					_return	= _return.replace(_regex_Price,ketatori(_word));
					_return	= _return.replace(_regex_kome,makeAtP(_word));
				}else{
					_chkJson(_obj[_i],_name_);
				}
			}
		}
	})();

	/*ローカル関数系*/
	function json(_json){
		this.data	= _json;
	}
}

