$(function(){
	var editor = ace.edit("editor");
	editor.setOption("fontSize","16px");
	//editor.setTheme("ace/theme/twilight");
	
	editor.session.setMode("ace/mode/json");
	
	$("#input_textarea").focus();
	$("#input_textarea").on('keyup',function(){
		var beginTime = +new Date();
		var txt = $(this).val();
		if($.trim(txt)=='') {
			editor.setValue("");
			return;
		}
		
		try{
			var result = jsonlint.parse(txt);	
			if($.trim(txt)==''){
				editor.setValue("");
				return;
			}
			
			var jsonObj = JSON.parse(txt);
			var jsonStr = JSON.stringify(jsonObj, null, 4);
			editor.setValue(jsonStr);
		}catch(error){
			//console.log(error);
			var arr=$(this).val().split(',');
			var error_str = "/* 解析 JSON 出错了，具体错误^处已指出 */ \n";
			error_str += error.message + "\n";// + '\n\n'  + arr.join('\n') + '\n';
			var i="Parse error on line ".length;
			var j=error.message.indexOf(":");
			var error_index=parseInt(error.message.substring(i,j)) + 8;

			error_str += "\n\n";
			error_str += "/* 此处的错误行数: " + error_index + "行. */ \n";
			
			let result = arr.map((item, index, array) => {
				if (index === array.length - 1) {
					// 最后一个元素
					return item;
				} else {
					// 非最后一个元素
				}
				
				if(item.indexOf("\n") < 0){
					return item + ",\n";
				}
				return item + ",";
			  //return item.replace(/\n/g, '');
			});
			
			//error_str += result.join(',\n') + '\n';
			error_str += result.join('') + '\n';
			editor.setValue(error_str);
		}
		
		var endTime = +new Date();
		console.log("time:"+(endTime-beginTime)+"ms");
	});

});