﻿//////////////////////////////////////////
//		WORDS							//
//////////////////////////////////////////

function W(sWord)
{
	gShowWord (sWord);
}

function L(i)
{
	gShowLocalWord(i);
}

// Local word: HanDeDict only
function gShowLocalWord(i)
{
	// Clear perfs
	gPerfsClear ();

	// Set the layout if not done
	gCheckLayout ();
	
	// Set the info page
	JmvcSetPage ('frameInfo', 'word');
	
	// Save current word
	var oWord = top.oParsedText.wordInfos[i];
	top.sCurrentWord = top.sText.substr (oWord.i, oWord.n);
	
	// Save current word index
	top.iLocalWordI = i;
	
	// Set WordChanged flag
	top.bWordChanged = true;
	
	// Update display
	JmvcUpdateAllViews ();
}

function gShowWord (sWord)
{
	// Clear perfs
	gPerfsClear ();

	// Set the layout if not done
	gCheckLayout ();
	
	// Set the info page
	JmvcSetPage ('frameInfo', 'word');
	
	// Save current word
	top.iLocalWordI = -1;
	top.sCurrentWord = sWord;
	
	// Set the info loader
	gSetInfoLoader ();
	
	// Update display
	JmvcUpdateAllViews ();
	
	// debug
	switch (top.sDict)
	{
	case 'ddb':
		
		// 	Load data
		var sSimplified = '';
		if (top.sLangSource == 'cn'  &&  top.bSimplified)
			sSimplified = 'simpl=1&';
		gLoadData ('words.php', OnWordDDB, 'get', sSimplified + 'dict=' + top.sDict + '&id=' + sWord);
		break;
		
	case 'handedict':
		gLoadData ('words.php', OnWordHanDeDict, 'get', 'dict=' + top.sDict + '&id=' + sWord);
		break;
	}
}
		
function OnWordHanDeDict (url, transport)
{
	// Time stamp
	gPerfsResponse (transport.responseText.length);
	
	// Update local data
	top.info = eval ("(" + transport.responseText + ")");
	top.iLocalWordI = -1;
	top.bWordChanged = true;
	
	// Update display
	JmvcUpdateAllViews ();
	
	// Show perfs
	gPerfsShow ();
}

function OnWordDDB (url, transport)
{
	// Time stamp
	gPerfsResponse (transport.responseText.length);
	
	// Update local data
	top.info = transport.responseXML.documentElement;
	top.bWordChanged = true;
	
	// Update display
	JmvcUpdateAllViews ();
	
	// Show perfs
	gPerfsShow ();
}

function OnWriteWord (view, page)
{
	// Ignore if not relevant
	if (!top.bWordChanged)
		return;
	
	// debug
	switch (top.sDict)
	{
	case 'ddb':
		OnWriteWordDDB (view, page);
		break;
		
	case 'handedict':
		OnWriteWordHanDeDict(view, page);
		break;
	}
}
	
function OnWriteWordHanDeDict (view, page)
{
	// Get a string buffer
	var buf = new StringBuffer ();

	// Begin main header table
	buf.append ("<table  class='ht1'><tr><td>");
	buf.append ("<table><tr style='overflow:hidden;'><td class='hh1''>HanDeDict</td></tr></table>");
	
	// If a text is available add the link to the word lists	
	if (top.oParsedText)
	{
		buf.append ("</td><td class='serBack'><a href='javascript:gSetMainList();'>Main list</a>");
		
		if (top.sLangSource == 'cn')
			buf.append ("</td><td class='serBack'><a href='javascript:gSetSimplTradList();'>Simpl/trad. list</a>");
	}
	
	// End main header table
	buf.append ("</td></tr></table>");
	
	// Write the header
	JGetFrameHeader (view).innerHTML = buf.toString();
	
	// Get a string buffer
	buf = new StringBuffer ();

	// Get local word (JavaScript object)
	var i = top.iLocalWordI;
	var oWord;
	if (i >= 0)
		oWord = top.oParsedText.wordInfos[i];
	else
		oWord = top.info;
		
	var j = 0
	var w = oWord.w[j];
	
	// Get Chinese word
	var sChinese = top.sCurrentWord;
	
	buf.append("<table>");
	
	buf.append ("<tr><td style='width:20px;'>&nbsp;</td><td" + top.sCLang + " colspan='2' style='font-weight:bold; font-size:24pt; color:black;'>" + sChinese + "</td></tr>");
	
	for (var j = 0; j < oWord.w.length; j++)
	{
		var w = oWord.w[j];
		
		// Japanese: check reference word
		if (w.s)
		{
			sChinese = w.s;
			if (sChinese != top.sText.substr (oWord.i, oWord.n))
				bHighlight = true;
		}
		
		buf.append("<tr style='height:20px;'><td></td><td></td><td></td></tr>");
		
		buf.append("<tr>");
		
		if (oWord.w.length > 1)
			buf.append("<td style='width:15px;'>" + (j+1) + "</td>");
		else
			buf.append("<td style='width:15px;'>&nbsp;</td>");
		
		buf.append ("<td colspan='2'><span style='color:royalblue; background:lightgoldenrodyellow; border:khaki solid 1px; padding-left:10px; padding-right:10px; font-size:11pt;'>" + w.p + "</span></td>");
		buf.append("</tr>");
		
		buf.append("<tr style='height:10px;'><td></td><td></td><td></td></tr>");
		
		var meaning = w.d;
		var nBegin = 0;
		var sense;
		
		while (true)
		{
			var nEnd = meaning.indexOf ("//", nBegin);
			
			if (nEnd < 0)
			{
				buf.append (WriteHanDeDictSense (meaning.substring(nBegin)));
				break;
			}
			
			buf.append(WriteHanDeDictSense (meaning.substring(nBegin, nEnd)));
			
			nBegin = nEnd + 2;
		}
	}
	
	buf.append("</table>");
	
	// Write server info in the frame inner content
	JGetFrameContent (view).innerHTML = buf + gXitiAjax (top.sLangSource + "_word_handedict");

}

function WriteHanDeDictSense(sense)
{
	var meaning;
	var flags = "";
	var unvalidatedEntry = false;
	
	var buf = new StringBuffer ();

	// Read meaning
	var i = sense.indexOf('/');
	if (i >= 0)
		meaning = sense.substr(0,i);
	else
		meaning = sense.substr(0);

	// Read flags
	var i = sense.indexOf('/');
	while (true)
	{
		if (i < 0)
			break;
		
		var c = sense.charAt(i+1);
		
		switch (c)
		{
		case 'u':
			unvalidatedEntry = true;
			break;
			
		case 'X':
		case 'x':
			break;
			
		default:
			flags += c;
			break;
		}
		
		i = sense.indexOf('/', i+1);
	}
	
	buf.append("<tr><td></td><td>");
	
	if (unvalidatedEntry)
		buf.append("<span title='Unvalidated entry' style='color:lightsteelblue; cursor:default; padding-left:5px; padding-right:5px;'>u </span>");
	else
		buf.append("&nbsp;");
	
	buf.append("</td><td>");
	buf.append("<span style='font-family:serif; font-size:14pt; color:black; padding-top:5px;'>" + meaning + "</span>");
	buf.append(WriteHanDeDictFlags(flags));
	buf.append("</td>");
	
	buf.append("</tr><td></td><td></td><td>");
	
	// Read examples
	i = sense.indexOf('/X');
	while (true)
	{
		if (i < 0)
			break;
		
		var j = sense.indexOf('/x', j+1);
		
		var label = sense.substring(i+2,j);
		var text;
		
		i = sense.indexOf('/X', i+1);
		if (i >= 0)
			text = sense.substring(j+2,i);
		else
			text = sense.substring(j+2);
		
		buf.append ("<ul style='list-style-type:circle; margin:0; padding:0; margin-left:30px; margin-top:5px; margin-bottom:10px;'>");
		buf.append("<li" + top.sCLang + ">" + label + ": " + text + "</li>");
		buf.append ("</ul>");
	}
	
	buf.append("</td>");
	
	return buf.toString();
}

function WriteHanDeDictFlags(flags)
{
	var buf = new StringBuffer ();
	buf.append("<span style='padding-left: 10px; color:red;'>");
	
	for (var i = 0; i < flags.length; i++)
	{
		var flag = flags.charAt(i);

		// Ignore 'u'; 'X' et 'x' should not be in flags
		if (flag == 'u')
			continue;
		
		if (i > 0)
			buf.append(", ");
		
		var value;
		switch (flag)
		{
		case 'A':		value = "adj.";					break;
		case 'B':		value = "buddhism";				break;
		case 'C':		value = "psych.";				break;
		case 'D':		value = "adv.";					break;
		case 'E':		value = "eig.";					break;
		case 'F':		value = "famil. name";			break;
		case 'G':		value = "geschichte";			break;
		case 'H':		value = "interjektion";			break;
		case 'I':		value = "philosophie";			break;
		case 'J':		value = "agrar";				break;
		case 'K':		value = "kunst";				break;
		case 'L':		value = "literatur";			break;
		case 'M':		value = "musik";				break;
		case 'N':		value = "astronomie";			break;
		case 'O':		value = "geologie";				break;
		case 'P':		value = "pronomen";				break;
		case 'Q':		value = "präposition";			break;
		case 'R':		value = "religion";				break;
		case 'S':		value = "subst.";				break;
		case 'T':		value = "textil.";				break;
		case 'V':		value = "verb";					break;
		case 'Z':		value = "zähl.";				break;
		
		case 'a':		value = "architektur";			break;
		case 'b':		value = "bio";					break;
		case 'c':		value = "chemie";				break;
		case 'd':		value = "druckwesen";			break;
		case 'e':		value = "essen";				break;
		case 'f':		value = "vorname";				break;
		case 'h':		value = "physik";				break;
		case 'i':		value = "EDV";					break;
		case 'j':		value = "militär";				break;
		case 'k':		value = "konjunktion";			break;
		case 'l':		value = "politik";				break;
		case 'm':		value = "medizin";				break;
		case 'n':		value = "meteorologie";			break;
		case 'o':		value = "organisation";			break;
		case 'g':		value = "geographie";			break;
		case 'p':		value = "person";				break;
		case 's':		value = "sport";				break;
		case 't':		value = "technik";				break;
		case 'v':		value = "vulgär";				break;
		case 'w':		value = "werk";					break;
		case 'y':		value = "mathematik";			break;
		
		
		
		default:		value = "[" + flag + "]";		break;
		}
		
		buf.append(value);
	}
	buf.append("</span>");

	return buf.toString();
}

function OnWriteWordDDB (view, page)
{
	// Get a string buffer
	var buf = new StringBuffer ();

	// Begin main header table
	buf.append ("<table  class='ht1'><tr><td>");
	buf.append ("<table><tr style='overflow:hidden;'><td class='hh1''>DDB - Soothill &amp; Hodous</td></tr></table>");
	
	// If a text is available add the link to the word lists	
	if (top.oParsedText)
	{
		buf.append ("</td><td class='serBack'><a href='javascript:gSetMainList();'>Main list</a>");
		
		if (top.sLangSource == 'cn')
			buf.append ("</td><td class='serBack'><a href='javascript:gSetSimplTradList();'>Simpl/trad. list</a>");
	}
	
	// End main header table
	buf.append ("</td></tr></table>");
	
	// Write the header
	JGetFrameHeader (view).innerHTML = buf.toString();
	
	var eDocument = top.info;
	
	// debug
	var buf = new StringBuffer();
	
	// REFERENCE WORD
	var sWord = eDocument.getElementsByTagName('id')[0].firstChild.data;
	buf.append ("<table><tr><td" + top.sCLang +  "class='zh' style='font-size:24pt; font-weight:bold; padding-right:20px; color:navy; vertical-align:top;'>" + sWord)
	
	// debug
	var bDone = false;
	
	// debug
	var eListSimplified = eDocument.getElementsByTagName('s');

	if (eListSimplified)
	{
		for (var i = 0; i < eListSimplified.length; i++)
		{
			if (bDone)
				buf.append (", ");
			else
			{
				buf.append ("<span style='padding-left:20px; color:gray;'>(");
				bDone = true;
			}
			
			var sSimplified = eListSimplified[i].firstChild.nodeValue;
			buf.append ("<a href=\"javascript:gSetSimplified(true);W('" + sSimplified + "');\" style='color:gray; text-decoration:none;' title='Simplified variant'>" + sSimplified + "</a>");
		}
	}
	
	// debug
	var eListTraditional = eDocument.getElementsByTagName('t');
	
	if (eListTraditional)
	{
		for (var i = 0; i < eListTraditional.length; i++)
		{
			if (bDone)
				buf.append (", ");
			else
			{
				buf.append ("<span style='padding-left:20px; color:gray;'>(");
				bDone = true;
			}
			
			var sTraditional = eListTraditional[i].firstChild.nodeValue;
			buf.append ("<a href=\"javascript:gSetSimplified(false);W('" + sTraditional + "');\" style='color:gray; text-decoration:none;' title='Traditional variant'>" + sTraditional + "</a>");
		}
	}
	
	if (bDone)
		buf.append (")</span>");
		
	buf.append ("</td><td style='vertical-align:bottom; padding-bottom:3px;'>");
	
	var eDdb = eDocument.getElementsByTagName('ddb')[0];
	
	if (eDdb)
	{
		buf.append ("<table>");
		
		var eDdbWords = eDdb.getElementsByTagName('w');
		for (var i = 0; i < eDdbWords.length;  i++)
		{
			var eWord = eDdbWords[i];
			
			var p, m, r, eChild, data;
			p = "";
			m = "";
			r = "";
			
			for (var j=0; j <eWord.childNodes.length; j++)
			{
				eChild = eWord.childNodes[j];
				data = eChild.firstChild.data;
				
				switch (eChild.nodeName)
				{
				case 'p':	p = data;		break;
				case 'm':	m = data;		break;
				case 'r':	r = data;		break;
				}
			}
			
			buf.append ("<tr><td class='tdXref'><a class='aXref' href=\"http://www.buddhism-dict.net/cgi-bin/xpr-ddb.pl?"
				+ r + "\" target='_blank' title=\"non-members can log in with 'guest'\">DDB</a></td><td class='tdPinyin'>"
				+ p + "</td><td class='tdDefinition'>"
				+ m + "</td></tr>");
		}
		
		buf.append ("</table>");
	}
	
	else
		buf.append ("(none)");
	
	buf.append ("</td></tr></table>");
	
	// SIMILAR WORDS IN DDB
	
	var eSim = eDocument.getElementsByTagName('sim')[0];
	if (eSim)
	{
		buf.append ("<div class='hd1' style='color:salmon; font-family:serif;'>Similar words in DDB</div>");
		
		buf.append ("<table>");
		var eSimWords = eSim.getElementsByTagName('w');
		for (var i = 0; i < eSimWords.length;  i++)
		{
			var eWord = eSimWords[i];
			
			var h, p, m, r, eChild, data;
			h = "";
			p = "";
			m = "";
			r = "";
			
			for (var j=0; j <eWord.childNodes.length; j++)
			{
				eChild = eWord.childNodes[j];
				data = eChild.firstChild.data;
				
				switch (eChild.nodeName)
				{
				case 'h':	h = data;		break;
				case 'p':	p = data;		break;
				case 'm':	m = data;		break;
				case 'r':	r = data;		break;
				}
			}
			
			if (h != sWord)
				buf.append ("<tr><td  class='tdXref'><a class='aXref' href=\"http://www.buddhism-dict.net/cgi-bin/xpr-ddb.pl?"
					+ r + "\" target='_blank' title=\"non-members can log in with 'guest'\">DDB</a></td><td" + top.sCLang +  "class='tdChinese zh'>"
					+ h + "</td><td class='tdPinyin'>"
					+ p + "</td><td class='tdDefinition'>"
					+ m + "</td></tr>");
			else
				buf.append ("<tr style='color:salmon; background:lightyellow;'><td><a href=\"http://www.buddhism-dict.net/cgi-bin/xpr-ddb.pl?" + r + "\" target='_blank'>DDB</a></td><td>" + h + "</td><td>" + p + "</td><td> " + m + "</td></tr>");
		}
		buf.append ("</table>");
	}
	
	else
	{
		// buf.append ("<div class='hd1' style='color:gray; font-family:serif;'>Similar words in DDB</div>");
		// buf.append ("(none)");
	}
	
	
	// SOOTHILL
	
	var eSoo = eDocument.getElementsByTagName('soo')[0];
	if (eSoo)
	{
		buf.append ("<div class='hd1' style='color:salmon; font-family:serif;'>Soothill &amp; Hodous</div>");
		
		buf.append ("<table>");
		
		var eSooWords = eSoo.getElementsByTagName('w');
		for (var i = 0; i < eSooWords.length;  i++)
		{
			var eWord = eSooWords[i];
			
			var h, p, m, r, eChild, data;
			h = "";
			p = "";
			m = "";
			r = "";
			
			for (var j=0; j <eWord.childNodes.length; j++)
			{
				eChild = eWord.childNodes[j];
				data = eChild.firstChild.data;
				
				switch (eChild.nodeName)
				{
				case 'h':	h = data;		break;
				case 'p':	p = data;		break;
				case 'm':	m = data;		break;
				case 'r':	r = data;		break;
				}
			}
			
			buf.append ("<tr><td" + top.sCLang +  "class='tdChinese zh'>"
				+ h + "</td><td class='tdPinyin'>"
				+ p + "</td><td class='tdDefinition'>"
				+ m + "</td></tr>");
		}
		
		buf.append ("</table>");
	}
	
	else
	{
		// buf.append ("<div class='hd1' style='color:gray; font-family:serif;'>Soothill &amp; Hodous</div>");
		// buf.append ("(none)");
	}
	
	// Write server info in the frame inner content
	JGetFrameContent (view).innerHTML = buf + gXitiAjax (top.sLangSource + "_word_ddb");
}
