
// 12/12/01 - Chris - Changed the "reset the right hand page" link
//                    from:  rhsindex.html
//                    to:    ../rhsindex.html
//        Also tweaked bottom nav bar links slightly

// 12/9/01 - JS - Changed FUNCTION_CALL constant second argument from 'leftframe' to
//	'bod.leftframe' to comply with the new frame layout. (Also changed this value in
//	the anchors on the random pages.)

// %L - Last used arguments (not counting frame)
var FUNCTION_CALL = "javascript:top.bod.Generate(%L,'bod.leftframe')"
// %T - The title of the random search
// %I - Where the image and link is
// %J - The function call (do a similar search)
var DEFAULT_TEXT = "<FONT FACE=\"arial,helvetica\">" +
        "\r<TABLE WIDTH=\"100\%\" BORDER=\"0\"><TR><TD>" +
	"\r<CENTER>" +
	"\r<H3 style=\"color:#003399; font-weight:bold; font-size:12pt; font-family:Arial,Helvetica,sans-serif\">%T</H3>" +
	"\r<div style=\"color:#003399; font-weight:normal; font-size:11pt; font-family:Arial,Helvetica,sans-serif\">When you think you know any of the kanji below, click on them to" +
	"\rbring up information in the right-hand window, and see if you were" +
	"\rcorrect... good luck..." +
	"\r<BR><BR>" +
	"\r%I" +
	"\r<BR><BR>" +
	"\r<A HREF=\"%J\">Next kanji</A><BR><BR>" +
	"\r<A HREF=\"../rhsindex.html\" TARGET=\"rightframe\">Reset the right hand page</A><BR><BR>" +
	"\r<HR SIZE=1><BR>" +
	"\r<A HREF=\"randomindex.html\">Random Index</A><BR>" +
	"\r<A HREF=\"../../../index.html\" TARGET=\"_top\">Main Page</A></div>" +
	"\r</CENTER>" +
        "\r</TD></TR></TABLE>" +
	"\r</FONT>" +
	"\r</BODY>"

var IMG_HEIGHT = 50
var IMG_WIDTH = 50
var DEFAULT_BG = "#000033"
var DEFAULT_FG = "#FFFFCC"
var DEFAULT_LN = "#CC00FF"
var DEFAULT_VLN = "#990099"
var DEFAULT_TARGET = "rightframe"
var DEFAULT_TITLE = "Kanji List"
var MAX_PER_LINE = 8
// Messing with constants is a bad habit, even if they're not _real_ constants :P
var strDefaultBG = DEFAULT_BG,strDefaultFG = DEFAULT_FG,strDefaultLn = DEFAULT_LN,strDefaultVLn = DEFAULT_VLN,strDefaultTarget = DEFAULT_TARGET,strDefaultText = DEFAULT_TEXT

var objLevel = new Array(),objKanji = null
var strUsing = ""
var intNumber = 1

function Kanji(strTitle) {
	this.title = strTitle || DEFAULT_TITLE
	this.text = strDefaultText
	this.bgcolor = strDefaultBG
	this.fgcolor = strDefaultFG
	this.lncolor = strDefaultLn
	this.vlncolor = strDefaultVLn
	this.target = strDefaultTarget
	this.character = new Array()
	this.good = new Array()
	this.Colors = function(strBG,strFG,strLn,strVLn) {
		this.bgcolor = strBG || DEFAULT_BG,strDefaultBG = this.bgcolor
		this.fgcolor = strFG || DEFAULT_FG,strDefaultFG = this.fgcolor
		this.lncolor = strLn || DEFAULT_LN,strDefaultLn = this.lncolor
		this.vlncolor = strVLn || DEFAULT_VLN,strDefaultVLn = this.vlncolor
	}
	this.Text = function(strNewText) {
		this.text = strNewText || DEFAULT_TEXT,strDefaultText = this.text
	}
	this.Target = function(strNewTarget) {
		this.target = strNewTarget || DEFAULT_TARGET,strDefaultTarget = this.target
	}
	this.Add = function() {
		var j,intLast
		for (j = 0 ; j < arguments.length ; j += 2) {
			intLast = this.character.length
			this.character[intLast] = {
				url:arguments[j] || "",
				image:arguments[j + 1] || ""
			}
			this.good[intLast] = intLast
		}
	}
	this.GetRand = function () {
		var k,strRetval,intRandval
		if (!this.good.length) {
			this.good = new Array(this.character.length)
			for (k = 0 ; k < this.good.length ; k++) {
				this.good[k] = k
			}
		}
		// IE5.0 doesn't support splice here, nor pop.
		//return this.good.splice(Math.floor(Math.random() * this.good.length),1)[0]
		strRetval = this.good[randval = Math.floor(Math.random() * this.good.length)]
		this.good[randval] = this.good[this.good.length - 1]
		this.good.length--
		return strRetval
	}
	this.All = function() {
		var l,strGrow = new Array()
		for (l = 0 ; l < this.character.length ; l++) {
			// Note: IE5.0 doesn't support the push method.
			//strGrow.push(this.character[l].url)
			//strGrow.push(this.character[l].image)
			strGrow[strGrow.length] = this.character[l].url
			strGrow[strGrow.length] = this.character[l].image
		}
		return strGrow
	}
	this.Eat = function(objHungry) {
		// Good thing this is just Javascript, or I'd get flogged for doing this. :)
		var o,strNewArr = (objHungry && objHungry.All()) || new Array(0)
		for (o = 0 ; o < strNewArr.length ; o += 2) {
			this.Add(strNewArr[o],strNewArr[o + 1] || "")
		}
	}
}

function Generate(strTag,intNumber,strWhere) {
	var i,intRand,strHead,strBuild = "<table width = \"100%\">\r	<tr><td valign = \"top\" align = \"center\">"
	var strWhat = (strWhere ? "top." + strWhere + "." : "")
	if (strTag != strUsing) {
		strUsing = strTag
		if (!(objKanji = objLevel[strTag])) {
			alert("The kanji index " + strTag + " does not exist!")
			return
		}
	}
	strHead = "<html>" +
		"\r<head>" +
		"\r<title>" + objKanji.title + "</title>" +
		"\r</head>" +
		"\r<body bgcolor = " + objKanji.bgcolor + " text = " + objKanji.fgcolor + " link = " + objKanji.lncolor + " vlink = " + objKanji.vlncolor + ">\r"
	for (i = 0 ; i < intNumber ; i++) {
		if (!((intRand = objKanji.GetRand()) + 1)) {
			// Erg, won't let me use the "|| return" :P
			alert("The kanji index " + strTag + " has no characters!")
			return
		}
		// Because the next line starts with an "(", it thinks it's one giant old-fashioned function call, so I have to stick a semicolon in there.
		strBuild += "\r		<a " + (objKanji.target ? "target = \"" + objKanji.target + "\"" : "") + " href = \"" + objKanji.character[intRand].url + "\"><img border = 0 height = " + IMG_HEIGHT + " width = " + IMG_WIDTH + " src = \"" + objKanji.character[intRand].image + "\" alt = \"\"></a>";
		((i + 1) % MAX_PER_LINE) || (strBuild += "\r	</td></tr><tr><td valign = \"top\" align = \"center\">")
	}
	strBuild += "\r	</td></tr>\r</table>"
	strHead += objKanji.text.replace(/\%I/g,strBuild).replace(/\%T/g,objKanji.title).replace(/\%J/g,FUNCTION_CALL.replace(/\%L/g,String(((Number(strUsing) || strUsing == 0) && strUsing) || ("'" + strUsing + "'")) + "," + String(intNumber))) + "\r</body></html>"
	eval(strWhat + "document.open(\"text/html\")")
	eval(strWhat + "document.write(strHead)")
	eval(strWhat + "document.close()")
}
