var testmode = false;
var ainum=0;
var onChat = false;
var nums = [0,1,2,3,4,5];
var tomos = ['Joker "J" Tomosophia','Jipanglish','TomoUniversalis','JeeTech','長澤智也','장지택'];
var tpics = ['img/joker0.png','img/joker1.png','img/joker2.jpg','img/joker3.jpg','img/joker4.jpg','img/joker5.jpg'];
var turls = ['tomosophia','http://twitter.com/jipanglish','http://twitter.com/tomouniversalis','http://twitter.com/jeetech','http://smart.fm/users/jipanglish','http://twitter.com/jeetech'];
var posNames = {v:'動詞','n':'名詞','aj':'形容詞'};
var gramNames = {'be':'Be動詞','gen':'一般動詞','past':'過去形','have':'完了形','progressive':'進行形','passive':'受動態','modal':'助動詞','inf':'不定詞','ger':'動名詞','ing':'現在分詞','pp':'過去分詞','that':'that節','wh':'疑問詞節','wh_inf':'疑問詞＋不定詞節','pn':'人称代名詞','n':'名詞','a_n':'冠詞','aj':'形容詞','ipn':'指示代名詞'};
var userpic;
var userid;
var username;
var myItems = {};
var myItemKeys = ['patterns','grammar','words','allowed_patterns','pattern_names'];
function searchG(ev,sval){
	if(ev.target.tagName.toUpperCase() != 'A'){
		var newWindow = window.open('http://google.com/search?hl=en&q="'+sval+'"', '_blank');
	}
	//location.href = "http://google.com/search?hl=en&q="+sval;
}

$(document).ready(function(){
	for(var i=0;i<myItemKeys.length;i++){
		myItems[myItemKeys[i]] = $("#u_"+myItemKeys[i]).val().split("&");
	}
	for(var i=0;i<myItems['patterns'].length;i++){
		vpIdMap[myItems['pattern_names'][i]] = myItems['patterns'][i];
	}
	if($("#userpage").val()==1){
		userpic = $("#userimg").val();
		userid = $("#userid").val();
		username = $("#username").val();
	}
	if($("#eloading").length != 0){
		isIndex = true;
		cArea = 'newcomment';
	}
	if($("#regword").length != 0){
		cArea = 'regword';
	}
	$('#chat').bind('click',function(){
		openChat();
	});
	$('#chatarea').bind('keydown',function(e){
		if(e.keyCode == 13){
			if(waiting == false){
				myComment();
			}
		}
	});
	$('#chatPane').hide();
	$('#chatarea').attr('disabled','disabled');
	/*$('#foot').bind('click',function(){
		$('#foot2').toggle('blind');
	});*/
	if($('#onUserInfo').val() == 1 && $('#iknowname').val() == ''){
		setTimeout("changeHello()",5000);
	}
	processEnterKey();
});
function aiStatus(){
	$('#aiStatus').html(words['v'].length+' '+vp.length);
	$('#aiStButton').overlay({mask: '#000',top:'center'});
}
var cArea = 'homecomment';
var isIndex = false;
var newTimer;
var waiting = false;
function myComment(){
	waiting = true;
	ainum++;
	var rnums = nums.rand();
	$('#aicomment').html('<div id="ainum-'+ainum+'" class="ncbox"><img height="50px" src="'+$('#iknowimg').val()+'" class="ncimg"><a href="http://smart.fm/users/'+$('#iknowname').val()+'" target="_blank">'+$('#iknowname').val()+'</a><br />'+$('#chatarea').val()+'</div>'+$('#aicomment').html());
	$('#chatarea').val('Tomosophia からの返信を待っています...');
	$('#chatarea').attr('disabled','disabled');
	$('#ainum-'+ainum).hide();
	$('#ainum-'+ainum).css({opacity:0});
	if(ainum == 1){
		$('#eloading2,#eloading').remove();
	}
	$('#ainum-'+ainum).show("blind",function(){
		removeOne();
		if(testmode){
			var anitime = 100;
		}else{
			var anitime = 1000;
		}
		$('#ainum-'+ainum).animate({opacity:1},anitime,function(){
			ainum++;
			$('#chatarea').val('');
			$('#chatarea').attr('disabled','');
			$('#chatarea').focus();
			waiting = false;
			newComment();
		});
	});
}
function removeOne(){
	if(isIndex){
		remnum = 5;
	}else{
		remnum = 3;
	}
	if(onChat){
		$('#ainum-'+(ainum-remnum)).remove();
	}else{
		$('#ainum-'+(ainum-remnum-1)).remove();
	}
}
function newComment(initial){
	if(initial){
		if($('#aiStButton').length != 0){
			var allWords = 0;
			var stEcho = '';
			for(var i in words){
				var posWords = 0;
				var posEcho = '';
				if(posNames[i]!=undefined){
					for(var k in words[i]){
						posWords+=words[i][k].length;
						allWords+=words[i][k].length;
						for(var j=0;j<words[i][k].length;j++){
							posEcho += '<a href="words.php?id='+words[i][k][j].id+'" target="_blank">'+words[i][k][j].word+'</a> ';
						}
					}
					stEcho+='<div><span class="posDis nopop" id="posDis-'+i+'" title="全要素表示・非表示">'+posNames[i]+':'+posWords+'語</span><div id="posEcho-'+i+'" class="posEcho">'+posEcho+'</div></div>';
				}
			}
			stEcho ='使用語句 全 '+allWords+' 語'+stEcho+'<hr />';
			var allWords = vPatterns.length;
			var posEcho = '';
			for(var k=0;k<vPatterns.length;k++){
				posEcho += '<a href="patterns.php?name='+vPatterns[k].name+'" target="_blank" class="size12">'+pNames[vPatterns[k].name]+'</a> ';
			}
			stEcho+='<div><span class="posDis nopop" id="posDis-vPatterns" title="全要素表示・非表示">動詞パターン:'+allWords+'</span><div id="posEcho-vPatterns" class="posEcho">'+posEcho+'</div></div><hr />';
			var allWords = allGrammar.length;
			var posEcho = '';
			for(var k=0;k<allGrammar.length;k++){
				posEcho += '<a href="grammar.php?id='+allGrammar[k]+'" target="_blank">'+gramNames[allGrammar[k]]+'</a> ';
			}
			stEcho+='<div><span class="posDis nopop" id="posDis-grammar" title="全要素表示・非表示">文法:'+allWords+'</span><div id="posEcho-grammar" class="posEcho">'+posEcho+'</div></div>';
		}
		$(".overlayStatus").html(stEcho);
		$(".posEcho").hide();
		$(".posDis").bind("click",function(){
			$("#posEcho-"+$(this).attr("id").split("-")[1]).toggle("blind");
		});
		aiStatus();
	}
	if(vPatterns.length==0 || (eobj.vpname!=undefined && eobj.vpname.length==1 && allVp.search(eobj.vpname[0])===false)){
		$("#eloading,#eloading2").html('あなたの頭脳を反映したA.I.を起動するには更なる語彙や文法、動詞パターンの学習が必要です！<br /><a	href="'+$("#base").val()+'words.php">語彙一覧</a> <a href="'+$("#base").val()+'grammar.php">文法一覧</a> <a href="'+$("#base").val()+'patterns.php">動詞パターン一覧</a>');
		$("#chat,#aiStButton").html("");
		$('#chat,#aiStButton,.reloader').css({"visibility":"hidden"});
	}else{
		var jval0 = forJipanglish();
		var jval = capitalize(jval0.val);
		if($("#userpage").val()==1){
			var temppic = userpic;
			var tempname = username;
			var tempurls = 'http://smart.fm/users/'+username;
		}else{
			if(onChat){
				var rnums = 0;
			}else{
				var rnums = nums.rand();
			}
			var temppic = tpics[rnums];
			var tempname = tomos[rnums];
			var tempurls = turls[rnums];
		}
		$('#aicomment').html('<div id="ainum-'+ainum+'" class="ncbox" onClick="searchG(event,\''+jval.replace("'","\\'")+'\')"><img height="50px" src="'+temppic+'" class="ncimg"><a href="'+tempurls+'" target="_blank" class="chatName">'+tempname+'</a><br />'+jval+' (<a href="'+$("#base").val()+'patterns.php?name='+jval0.pattern.name+'">'+pNames[jval0.pattern.name]+'</a>)</div>'+$('#aicomment').html());
		$('#ainum-'+ainum).hide();
		$('#ainum-'+ainum).css({opacity:0});
		showComment();
	}
}
function showComment(){
	if(onChat){
		var showNo = ainum + 1;
	}else{
		var showNo = ainum;
	}
	if(ainum != 0){
		if(ainum == 1){
			$('#eloading2,#eloading').remove();
		}
		$('#ainum-'+(showNo-1)).show("blind",function(){
			removeOne();
			if(testmode){
				var anitime = 100;
			}else{
				var anitime = 1000;
			}
			$('#ainum-'+(showNo-1)).animate({opacity:1},anitime,function(){
				if(!onChat){
					ainum++;
					if(testmode){
						newTimer = setTimeout("newComment()",1);
					}else{
						newTimer = setTimeout("newComment()",3000);
					}
				}
			});
		});
	}else{
		ainum++;
		newComment();
	}
}
function openChat(){
	if(onChat){
		onChat = false;
		$('#chatPane').hide('blind',function(){
			$('#'+cArea).animate({height:'-=100'},1000);
			alert2("チャットモードを終了しました");
			$('#chatarea').attr('disabled','disabled');
			$('#chat').html('チャットモード');
			ainum=0;
			$('#aicomment').html("");
			newComment();
		});
	}else{
		clearTimeout(newTimer);
		onChat = true;
		$('#'+cArea).animate({height:'+=100'},1000,function(){
			$('#chatPane').show('bounce');
			alert2("チャットモードを開始しました",function(){
				$('#chatarea').attr('disabled','');
				$('#chatarea').focus();
			});
			$('#chat').html('チャット終了');
			ainum=-1;
			$('#aicomment').html("");
			sayHello();
		});
	}
}
function sayHello(){
	if($("#userpage").val()==1){
		var temppic = userpic;
		var tempname = username;
		var tempurls = 'http://smart.fm/users/'+username;
	}else{
		if(onChat){
			var rnums = 0;
		}else{
			var rnums = nums.rand();
		}
		var temppic = tpics[rnums];
		var tempname = tomos[rnums];
		var tempurls = turls[rnums];
	}
	$('#aicomment').html('<div id="ainum-'+ainum+'" class="ncbox" onClick="searchG(event,\'hello\')"><img height="50px" src="'+temppic+'" class="ncimg"><a href="'+tempurls+'" target="_blank" class="chatName">'+tempname+'</a><br />Hello!</div>'+$('#aicomment').html());
	$('#ainum-'+ainum).hide();
	$('#ainum-'+ainum).css({opacity:0});
	showComment();
}
function processEnterKey(){
	$('body').bind('keydown',function(e,ui){
			if(e.keyCode ==13 && (e.target.id == 'wsearch'||e.target.id == 'wsearch2')){
				wideSearch('kensaku'+e.target.id.replace('wsearch',''));
			};
	});
}

function plusWord(wid,uid,plus){
	if(uid == ''){
		alert('この機能を使うにはログインが必要です。');
	}else{
		if(plus != 1){
			var delVp0 = vpDelInheritW(wid);
			var delVp = delVp0[0];
			var delVpName = delVp0[1];
			if(delVp.length == 0){
				var conf = 1;
			}else{
				var conf = confirm(delVpName.join(", ")+" will also be deleted. sure?");
			}
		}else{
			var conf = true;
		}
		if(conf){
			var parameter = $.param({id:wid,uid:uid,plus:plus});
			$.ajax({
				url: $('#base').val()+'php/plusWord.php',
				type: 'POST',
				data: parameter,
				dataType: 'json',
				success: function(data) {
					createXml(uid);
					if(plus == 1){
						alert2('マイボキャブラリーに語句を追加しました。');
						$("#plusW-"+wid).html('<span class="plusW" onclick="plusWord('+wid+','+uid+',0)">-</span>');
						myItems['words'].push(wid);
					}else{
						alert2('マイボキャブラリーから語句をはずしました。');
						$("#plusW-"+wid).html('<span class="plusW" onclick="plusWord('+wid+','+uid+',1)">+</span>');						if(delVp.length != 0){
							plusPatterns(delVp,uid,0);
						}
						myItems['words'].pop2(wid);
					}
				},
				error: function(data){
					alert('データ変更に失敗しました。もう一度お試しください。');
				}
			});
		}
	}
}
function vpDelInheritW(wid){
	var delVp = [];
	var delVpName = [];
	for(var i in myItems["pattern_names"]){
		var vpnum = vpmap[myItems["pattern_names"][i]];
		if(vpnum!=undefined && vPatterns[vpnum].v.length == 1 && vPatterns[vpnum].v[0].id == wid){
			delVp.push(vpIdMap[vPatterns[vpnum].name]);
			delVpName.push(vPatterns[vpnum].name);
		}
	}
	return [delVp,delVpName];
}
function plusPatterns(wid,uid,plus){
	var delGram = [];
	if(uid == ''){
		alert('この機能を使うにはログインが必要です。');
	}else{
		if(isArray(wid)){
			delGram = wid;
		}else{
			delGram.push(wid);
		}
		var delGramName = [];
		for(i=0;i<delGram.length;i++){
			delGramName.push(vpNameMap[delGram[i]]);
		}
		var parameter = $.param({id:delGram.join("&"),uid:uid,plus:plus});
		$.ajax({
			url: $('#base').val()+'php/plusPatterns.php',
			type: 'POST',
			data: parameter,
			dataType: 'json',
			success: function(data) {
				createVPXml(uid);
				if(plus == 1){
					alert2('マイ動詞パターンに新しいパターンを追加しました。');
					$("#plus-"+wid).html('<span class="plusW" onclick="plusPatterns('+wid+','+uid+',0)">-</span>');
					myItems['patterns'] = myItems['patterns'].merge(delGram);
					myItems['pattern_names'] = myItems['pattern_names'].merge(delGramName);
				}else{
					if(!isArray(wid)){
						alert2('マイ動詞パターンからパターンをはずしました。');
						$("#plus-"+wid).html('<span class="plusW" onclick="plusPatterns('+wid+','+uid+',1)">+</span>');
						myItems['patterns'] = myItems['patterns'].diff(delGram);
						myItems['pattern_names'] = myItems['pattern_names'].diff(delGramName);
					}
				}
			},
			error: function(data){
				alert('データ変更に失敗しました。もう一度お試しください。');
			}
		});
	}
}
function gDelInherit(owid,wid,delGram,already){
	if(gramap[wid]!=undefined){
		delGram.merge(myItems['grammar'].intersect(gramap[wid]));
		if(wid =="be" || wid=="gen"){
			if(myItems['grammar'].intersect(['be','gen']).length<2){
				delGram.merge(myItems['grammar'].intersect(gramap['be|gen'])).unique();
			}
		}
	}
	delGram.pop2(owid);
	already.push(wid);
	var tempDelGram = delGram;
	for(var i=0;i<tempDelGram.length;i++){
		if(already.search(tempDelGram[i])===false){
			var res =gDelInherit(owid,tempDelGram[i],tempDelGram,already);
			delGram.merge(res[0]).unique();
			already.merge(res[1]).unique();
		}
	}
	delGram.unique();
	already.unique();
	return [delGram,already];
}
function vpDelInherit(tempMyG){
	var delVp = [];
	var delVpName = [];
	for(var i in myItems["pattern_names"]){
		var vpnum = vpmap[myItems["pattern_names"][i]];
		if(vpnum!=undefined && vPatterns[vpnum].grammar != undefined && vPatterns[vpnum].grammar.length != 0){
			if(vPatterns[vpnum].grammar.intersect(tempMyG).length!=vPatterns[vpnum].grammar.length){
				delVp.push(vpIdMap[vPatterns[vpnum].name]);
				delVpName.push(vPatterns[vpnum].name);
			}
		}
	}
	return [delVp,delVpName];
}
function plusGrammar(wid,uid,plus){
	if(uid == ''){
		alert('この機能を使うにはログインが必要です。');
	}else{
		var delGram = [];
		if(plus != 1){
			var already= [];
			var tempDelGram = gDelInherit(wid,wid,delGram,already);
			var tDelG = tempDelGram[0];
			delGram = tDelG;
			var tempDel = delGram.push2(wid,undefined,true);
			var tempMyG = myItems['grammar'].diff(tempDel);
			for(var i in begen){
				if(tempMyG.intersect(begen[i]).length==0){
					tempMyG.pop2(i);
				}
			}
			var delVp0 = vpDelInherit(tempMyG);
			var delVp = delVp0[0];
			var delVpName = delVp0[1];
			if(delGram.length==0 && delVp.length == 0){
				var conf = 1;
			}else{
				var learn = '';
				if(delGram.length!=0){
					for(var i=0;i<delGram.length;i++){
						if(i!=0){
							learn +='、';
						}
						learn += gNames[delGram[i]];
					}
				}
				if(delVpName.length!=0){
					learn +='と';
					for(var i=0;i<delVpName.length;i++){
						if(i!=0){
							learn +='、';
						}
						learn += "["+pNames[delVpName[i]]+"]";
					}
				}
				var conf = confirm(learn+"も同時にはずされます。実行してよろしいですか？");
			}
		}else{
			var conf = true;
		}
		if(conf){
			delGram.push(wid);
			var parameter = $.param({id:delGram.join("&"),uid:uid,plus:plus});
			$.ajax({
				url: $('#base').val()+'php/plusGrammar.php',
				type: 'POST',
				data: parameter,
				dataType: 'json',
				success: function(data) {
					createGrammarXml(uid);
					if(plus == 1){
						alert2('マイ文法に新しい文法を追加しました。');
						for(var i in begen){
							if(delGram.intersect(begen[i]).length!=0){
								delGram.push(i);
							}
						}
						myItems['grammar'] = myItems['grammar'].merge(delGram);
						myItems['grammar'].unique();
					}else{
						alert2('マイ文法から文法をはずしました。');
						myItems['grammar'] = myItems['grammar'].diff(delGram);
						for(var i in begen){
							if(myItems['grammar'].intersect(begen[i]).length==0){
								myItems['grammar'].pop2(i);
							}
						}
						if(delVp.length != 0){
							plusPatterns(delVp,uid,0);
						}
					}
					checkGDependency(uid);
				},
				error: function(data){
					alert('データ変更に失敗しました。もう一度お試しください。');
				}
			});
		}
	}
}
function checkGDependency(uid){
	for(var wid in grammar){
		if(myItems['grammar'].search(wid)!==false){
			$("#plus-"+wid).html('<span class="plusW" onclick="plusGrammar(\''+wid+'\','+uid+',0)">-</span>');
		}else{
			if(grammar[wid]['grammar'] == undefined || grammar[wid]['grammar'].intersect(myItems['grammar']).length==grammar[wid]['grammar'].length){
				$("#plus-"+wid).html('<span class="plusW" onclick="plusGrammar(\''+wid+'\','+uid+',1)">+</span>');
			}else{
				$("#plus-"+wid).html('<span class="plusW2">x</span>');
			}
		}
	}
}
function createXml(uid){
	if(uid==undefined){
		uid='';
	}
	var parameter = $.param({uid:uid});
	$.ajax({
 		url: $('#base').val()+'php/createXml.php',
		type: 'POST',
		data: parameter,
  		success: function(data) {
			//alert2(data+'words of xml crated!');
  		},
		error: function(data){
			alert(data);
		}
	});
}
function createVPXml(uid){
	if(uid==undefined){
		uid='';
	}
	var parameter = $.param({uid:uid});
	$.ajax({
 		url: $('#base').val()+'php/createVPXml.php',
		type: 'POST',
		data: parameter,
  		success: function(data) {
			
  		},
		error: function(data){
			alert(data);
		}
	});
}
function createGrammarXml(uid){
	if(uid==undefined){
		uid='';
	}
	var parameter = $.param({uid:uid});
	$.ajax({
 		url: $('#base').val()+'php/createGrammarXml.php',
		type: 'POST',
		data: parameter,
  		success: function(data) {
			
  		},
		error: function(data){
			alert(data);
		}
	});
}
