 var msg0 = "<font size='4'>9 x 9 = 81 </font>";
var msg1 = "<font size='4'>9 + 2 = 11</font>";

var ARROW  = "/i/a.png";
var ARROWH = "/i/ah.png";

var mtime,bate,bimsg=false;

function initG() {
	inWait();
	initUserInfo();
	InitGradeInfo(getGC().charAt(0));
	bate = document.getElementById("bat");
	outWait();
	mtime = setTimeout("showMessage()",3000);
}

function userChange(){
	InitGradeInfo(getGC().charAt(0));
}
function cg(g) {}

function srh() {
	setSC();
	GoTo('/s');
}

function scrFst() {
	if(setFQ(getGC().charAt(0))) {
		GoTo('/l');
	}
}

function startMessage(){mtime = setTimeout("showMessage()",1000);}
function stopMessage(){clearTimeout(mtime);}
function showMessage(){
	if(bimsg) {
		bate.innerHTML = msg0;
	} else {
		bate.innerHTML = msg1;
	}
	bimsg = !bimsg;
	startMessage();
}

function inArrow(id){
	document.getElementById(id).src=ARROWH;
}
function outArrow(id){
	document.getElementById(id).src=ARROW;
}
 var gde,gme,gmde;
 var gradeText = new Array();
 var gradeIsOpen = new Array();
 var gig, gmtime=0;
 
 function InitGradeInfo(g){
	gde = document.getElementById("gd");
	gme = document.getElementById("gm");
	gmde = document.getElementById("gmd");
	
	var pos =  new ObjPos(gde);
	gme.style.left= ""+(pos.left-2)+"px";
	gme.style.top= ""+(pos.top+18)+"px";
	
	gig = g;
	var xhGTReq = createAJAX();
	xhGTReq.open("GET", "/b", false);
	xhGTReq.send(null);
	gmde.innerHTML = giParse(xhGTReq.responseText);
 }

 function giParse(text){
	 var sb = "",sb1;
	 var values = text.split("\r");
	 var gds,gdds, selCls;
	 for ( var i = 0; i < values.length; i++) {
		gds = values[i].split("\n");
		sb += "<div class=gdm id=gdgm"+i+" onMouseOver=GradeOver() " +
				"onMouseOut=GradeOut()>" ;
		
		sb1 = "";
		gradeIsOpen[i] = false;
		for ( var j = 1; j < gds.length; j++) {
			gdds = gds[j].split("\t");
			gradeText[gdds[0]] = gdds[1];
			selCls = "gdn";
			if(gdds[0] == gig) {
				selCls = "gds";
				gde.innerHTML = gdds[1] ;
				gradeIsOpen[i] = true;
			}
			sb1 += "<div id=gd"+gdds[0]+" class="+selCls+" onMouseOver=GradeMOver('"+gdds[0]+"') " +
					"onMouseOut=GradeMOut('"+gdds[0]+"') onClick=GradeOnClick('"+gdds[0]+"')" +
					"> &nbsp; " + gdds[1] + "</div>";
		}
		if(gradeIsOpen[i]) {
			sb += "<a href=# class=ai onClick=GradeShowHide('"+i+"')><img id=gdi"+i+" src='"+IMG_PDOWN+"'></a> " + gds[0] + "</div>";
			sb += "<div id=gdd"+i+" class=gdmd>" +sb1 + "</div>";
		} else {
			sb += "<img id=gdi"+i+" src='"+IMG_PUP+"'> " + gds[0] + "</div>";
			sb += "<div id=gdd"+i+" class=dh>" +sb1 + "</div>";
		}
	 }
	 return sb;
 }
 
function ShowGradeMenu(){
	outGradeMenu();
	gme.style.display="";
	inSel();	
}
 
function HideGradeMenu(){
	gme.style.display="none";
}

function outGradeMenu(){
	clearTimeout(gmtime);
	gmtime = setTimeout("HideGradeMenu()",1000);
}

function GradeOver() {
	clearTimeout(gmtime);
}

function GradeOut() {
	outGradeMenu();
}

function GradeShowHide(id) {
	if(gradeIsOpen[id]){
		gradeIsOpen[id] = false;
		document.getElementById("gdd"+id).className="dh";
		document.getElementById("gdi"+id).src = IMG_PUP;
	} else {
		gradeIsOpen[id] = true;
		document.getElementById("gdd"+id).className="gdmd";
		document.getElementById("gdi"+id).src = IMG_PDOWN;
	}
}

function GradeMOver(g) {
	clearTimeout(gmtime);
	var tge = document.getElementById("gd"+g);
	selMOver(g == gig, tge);
}
function GradeMOut(g) {
	var tge = document.getElementById("gd"+g);
	selMOut(g == gig, tge);
	outGradeMenu();
}

function GradeOnClick(g) {
	clearTimeout(gmtime);
	document.getElementById("gd"+gig).className="gdn";
	gig = g;
	setTimeout("changeGrade()",0);
	gde.innerHTML = gradeText[g];
	HideGradeMenu();
	setGC(g);
}

function changeGrade() {
	cg(gig);
}
var HOST_URL = "http://www.math17.com/";
var QUE_NOT_FOUND ="Question not found.";

var TEXT_SKIPPED = "Skipped";
var TEXT_QST = "Question";
var TEXT_LEVEL = "Level ";
var TEXT_OPTIONS = "Options";
var TEXT_RGT_OPT = "Right Option";
var TEXT_RIGHT = "Right";
var TEXT_WRONG = "Wrong";
var TEXT_OMITED = "Omited";
var TEXT_DTL_ANS = "Detail Answer";
var TEXT_NAA = "No Application Available";
var TEXT_MNTS = "Minutes";
var TEXT_1MNT = "1 Minute";
var TEXT_HRS = "Hours";
var TEXT_HR = "Hour";
var ERROR_MESSAGE = "Error! Check your firewall and try again. Thank You";
var Learn_MESSAGE = "Set Learning Suggestions of Topics Level for Learning Page is successfully.\r\n Do you want  to Learn?";

var IMAGE_RIGHT = "<img src='/i/0y.png'>";
var IMAGE_WRONG = "<img src='/i/0z.png'>";
var IMAGE_DELETE= "<img src='/i/0z.png'>";
var IMG_CLOSE = "/i/z.png";
var IMAGE_CLOSE = "<img src='" + IMG_CLOSE + "'>";
var IMG_PDOWN = "/i/l.png";
var IMG_PUP = "/i/m.png";
var IMAGE_DOWN = "<img src='" + IMG_PDOWN + "'>";
var IMAGE_UP = "<img src='" + IMG_PUP + "'>";
var IMG_BACK = "/i/0b.png";
var IMG_NBACK = "/i/0c.png";
var IMG_NEXT = "/i/0d.png";
var IMG_NNEXT = "/i/0e.png";

var IMG_SFIRST = "/i/0g.png";
var IMG_SNFIRST = "/i/0h.png";
var IMG_SBACK = "/i/0i.png";
var IMG_SNBACK = "/i/0j.png";
var IMG_SNEXT = "/i/0k.png";
var IMG_SNNEXT = "/i/0l.png";
var IMG_SLAST = "/i/0m.png";
var IMG_SNLAST = "/i/0n.png";

var IMG_OPUP = "/i/0w.png";
var IMG_OPDOWN = "/i/0x.png";
var IMAGE_OPDOWN = "<img src='" + IMG_OPDOWN + "'>";
var IMAGE_OPUP = "<img src='" + IMG_OPUP + "'>";
var IMAGE_RFERENCE = "<img src='/i/0p.png'>";

var SCALE_AP = "/i/1r.png";
var SCALE_AA = "/i/1s.png";
var SCALE_AM = "/i/1t.png";
var SCALE_APM = "<img alt='Scale A Plus' src='/i/1u.png'>";
var SCALE_AAM = "<img alt='Scale A' src='/i/1v.png'>";
var SCALE_AMM = "<img alt='Scale A Minus' src='/i/1w.png'>";
var SCALE_B = "<img alt='Scale B' src='/i/gb.png'>";
var SCALE_C = "<img alt='Scale C' src='/i/gc.png'>";
var SCALE_D = "<img alt='Scale D' src='/i/gd.png'>";
var SCALE_E = "<img alt='Scale B' src='/i/ge.png'>";
var SCALE_F = "<img alt='Scale B' src='/i/gf.png'>";
var YELLOW_LIGHT = "<img src='/i/blg.png'>";

var IMG_NUM = new Array();
IMG_NUM[0] = "<img src='/i/m0.png'>";
IMG_NUM[1] = "<img src='/i/m1.png'>";
IMG_NUM[2] = "<img src='/i/m2.png'>";
IMG_NUM[3] = "<img src='/i/m3.png'>";
IMG_NUM[4] = "<img src='/i/m4.png'>";
IMG_NUM[5] = "<img src='/i/m5.png'>";
IMG_NUM[6] = "<img src='/i/m6.png'>";
IMG_NUM[7] = "<img src='/i/m7.png'>";
IMG_NUM[8] = "<img src='/i/m8.png'>";
IMG_NUM[9] = "<img src='/i/m9.png'>";


function createAJAX() {
   try { return new XMLHttpRequest(); } catch(e) {}
   try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
   try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
   alert("XMLHttpRequest not supported");
   return null;
 }

function TL(t,l) {
	this.t = t;
	this.l = l;
}

 var gdMap = new Array();
 function getGradeText(grade){
	var gdt = gdMap[grade];
	if(gdt == null){
		var xhGTReq = createAJAX();
		xhGTReq.open("GET", "/a?g="+grade, false);
		xhGTReq.send(null);
		gdt = readGTFunc(xhGTReq.responseText);
		gdMap[grade] = gdt;
	}
	return gdt;
 }

 function ParseText(value,gdt){
	try {
		var parser = new Parser(value,gdt);
		parser.parse();
		return parser.out;
	} catch(e) {
		throw "ParseText:"+value+"/"+e;
	}
 }
 
 function readGTFunc(strGT){
 	var gdt = InitGTObject();
 	var textFormaters = getTextFormaters();
 	var gts,key,value,nInd;
 	var gtbs = strGT.split("\r");
 	for ( var i = 0; i < 7; i++) {
 		if(gtbs[i].length>0){
 			gts = gtbs[i].split("\n");
 			for ( var j = 0; j < gts.length; j++) {
 				nInd = gts[j].indexOf("=");
 				key = gts[j].substr(0, nInd);
 				value = gts[j].substr(nInd + 1);
 				gdt[key] = new textFormaters[i](value);
 			}
 		}
 	}
 	
 	gdt[7] = getNameValue(gtbs[7]);
 	gdt[70] = getIds(gtbs[8]);
 	gdt[71] = getNameValue(gtbs[8]);
 	return gdt;
 }
 function getTextFormaters(){
 	var textFormaters = new Array();
 	textFormaters[0] = Text0Parm;
 	textFormaters[1] = Text1Parm;
 	textFormaters[2] = Text2Parm;
 	textFormaters[3] = Text3Parm;
 	textFormaters[4] = TextNParm;
 	textFormaters[5] = TextImageN;
 	textFormaters[6] = TextImage;
 	return textFormaters;
 }

 function InitGTObject(){
 	var obj = new Array();
 	obj[0] = new TextOnly();
 	obj[1] = new TableText();
 	return obj;
 }
  
 function getNameValue(gtbs){
	var gtb = new Array();
	var gts = gtbs.split("\n");
	var nInd;
	for ( var j = 0; j < gts.length; j++) {
		nInd = gts[j].indexOf("=");
		gtb[gts[j].substr(0, nInd)] = gts[j].substr(nInd + 1);
	}
	return gtb;
 }

 function getIds(gtbs){
	var gtb = new Array();
	var gts = gtbs.split("\n");
	var nInd;
	for ( var j = 0; j < gts.length; j++) {
		nInd = gts[j].indexOf("=");
		gtb[j] = gts[j].substr(0, nInd);
	}
	return gtb;
 }
 
 function Parser(value,gdt,prfx){
	this.gdt = gdt;
	this.prfx = prfx;
 	this.out="";
 	this.values=value.split('\t');
 	this.pos=0;	
 	this.parse = p_parse;
 	this.nextq = p_next;
 	this.curVal = p_curVal;
 	this.parseNext = p_parseNext;
 	this.hasNext = p_hasNext;
 }
 
 function p_parse(){
 	while(this.hasNext()){
 		this.parseNext();
 	}
 }
  
 function p_parseNext(){
	try {
		this.gdt[this.values[this.pos++]].parse(this);
		this.out +=" ";
	} catch(e){
		this.pos--;
		var val = this.values[this.pos];
		if(val == null){
			throw "Parse:Parameter not found for "+this.pos+"/"+this.values.length+":"+this.values+"/"+e;
		} else if(this.gdt == null){
			throw "Parse:Grade Text Array is null/"+e;
		} else if(this.gdt[val] == null){
			throw "Parse:Grade Text Object not found for "+val+"/Pos:"+this.pos+"/"+e;
		} else {
			throw "Parse:Unknown/"+e;
		}
	}
 }
 
function p_curVal(){
	return this.values[this.pos];
}
 
 function p_next(){
 	var s = this.values[this.pos++];
 	if(s.charAt(0)=='\f') {
 		s = ParseText(s.substr(1),this.gdt); 
 	}
	return s;
 }
  
function p_hasNext(){
	return this.pos<this.values.length;
}

 function TextOnly(){
 	this.parse = text_parse;
 }
 function text_parse(pars){
 	pars.out += pars.nextq();
 }

 function Text0Parm(value){
 	this.value = value;
 	this.parse = text_parseValue;
 }

 function Text1Parm(value){
 	var values = value.split('`')
 	this.prefix = values[0];
 	this.suffix = values[1];
 	this.parse = text_parse1;
 }
 function text_parse1(pars){
 	pars.out += this.prefix+pars.nextq()+this.suffix;
 }
 
 function Text2Parm(value){
 	var values = value.split('`');
 	this.prefix = values[0];
 	this.mid = values[1];
 	this.suffix = values[2];
 	this.parse = text_parse2;
 }
 function text_parse2(pars){
 	pars.out += this.prefix+pars.nextq()+this.mid+pars.nextq()+this.suffix;
 }
 function Text3Parm(value){
 	var values = value.split('`');
 	this.prefix = values[0];
 	this.mid1 = values[1];
 	this.mid2 = values[2];
 	this.suffix = values[3];
 	this.parse = text_parse3;
 }
 function text_parse3(pars){
 	pars.out += this.prefix+pars.nextq()+this.mid1+pars.nextq()+this.mid2+pars.nextq()+this.suffix;
 }

 function TextNParm(value){
 	this.values = value.split('`');
 	this.parse = text_parseN;
 }
 function text_parseN(pars){
 	pars.out += this.values[0];
 	for(var i=1;i<this.values.length;i++){
 		pars.out += pars.nextq()+this.values[i];
 	}
 }
  
 function TextImageN(value){
	this.value = "<img src=\"/k?n="+value+"\"  class=\"iq\"/> ";
 	this.parse = text_parseImgN;
 }
 function text_parseImgN(pars){
 	var	len = pars.nextq();
	for(var i=0;i<len;i++){
		pars.out += this.value;
	}
 }

 function TextImage(value){
 	this.value = "<img src=\"/k?n="+value+"\" class=\"iq\"/>";
 	this.parse = text_parseValue;
 }
 function text_parseValue(pars){
 	pars.out += this.value;
 }
 
 
 function Qstn(values,pos,gdt,grade){
	try {
		this.gdt = gdt;
		this.grade = grade;
		this.id = values[pos++];
		this.question = ParserQstn(values[pos++],gdt);
		this.options = ParserQstnOptions(values[pos++],gdt);
		this.ansopt = new Number(values[pos++]);
		this.shortq = qstn_shortQuestion;
		this.gid = qstn_gid;
	} catch (e) {
		throw "Qstn/Pos:"+pos+"/"+e;
	}
}

function qstn_gid() {
	return this.grade+this.id;
}

function qstn_shortQuestion() {
	return this.question.substring(0, this.question.indexOf("<BR>"));
}

function ParserQstn(value,gdt){
	var sb = "";
	var values = value.split("\n");
	for ( var i = 0; i < values.length; i++) {
		sb += ParseText(values[i], gdt) + "<BR>";
	}
	return sb;
}

function ParserQstnOptions(value,gdt){
	var values = value.split("\n");
	var opts = new Array();
	for ( var i = 0; i < values.length; i++) {
		opts[i] = ParseText(values[i],gdt);
	}
	return opts;
}


function getTimeString(tt) {
	var t = Math.round(tt);
	var time = "";
	var t1 = t % 60;
	if (t1 > 1) {
		time = "" + t1 + " " + TEXT_MNTS;
	}
	t = Math.floor(t / 60);
	if (t > 0) {
		if (t > 1) {
			time = "" + t + " " + TEXT_HRS + " " + time;
		} else {
			time = "" + t + " " + TEXT_HR + " " + time;
		}
	}
	if (time.length == 0) {
		time = TEXT_1MNT;
	}
	return time;
}

function sortStr(str, val) {
	var sb = "";
	var c;
	for ( var i = 0; i < str.length; i++) {
		c = str[i];
		if (val.indexOf(c) >= 0) {
			sb += c;
		}
	}
	return sb;
}

function TableText(){
 	this.parse = tt_parse;
 }
 function tt_parse(pars){
	var tc =  pars.nextq();
	var colcount = pars.nextq();
	var nCtr = 0;
	pars.out = "<table class=tt"+tc+" cellpadding=2><tr><td class=tt"+tc+pars.nextq()+">";
	while(pars.hasNext()){
		if(pars.curVal() != "\f") {
			pars.parseNext();
		} else {
			pars.pos++;
			pars.out += "</td>";
			nCtr++;
			if(nCtr== colcount) {
				pars.out += "</tr><tr>";
				nCtr =0;
			}
			pars.out += "<td class=tt"+tc+pars.nextq()+">";
		}
 	}
	pars.out += "</td></tr></table>";
 }
 
 function GoTo(url) {
	window.location.href = url;
}
 function GoToLearn() {
	 GoTo("/l");
} 
function setSC() {
	var ge = document.getElementById("s");
	setSCCookie(ge.value);
}
 
function searchEnter(field,e) {
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else if (e)
		keycode = e.keyCode;
	else
		return true;

	if (keycode == 13) {
		setSCCookie(field.value);
		window.location.href = "/s";
		return false;
	} else
		return true;
}

function setFQ(g) {
	var gs = document.getElementById("s");
	var s = gs.value;
	if(s == "") {
		return false;
	}
	if(s == "") {
		alert(QUE_NOT_FOUND);
		return false;
	}
	inWait();
	s = escape(s);
	var id = g + s;
	var xhReq = createAJAX();
	xhReq.open("GET", "/m?q="+id, false);
	xhReq.send(null);
	var val = xhReq.responseText;
	outWait();
	if(val!= ""){
		setFQCookie(val);
		return true;
	} else {
		alert(QUE_NOT_FOUND);
		return false;
	}
}

function searchWeb() {
	var g = gradeText[getGC().charAt(0)];
	var gs = document.getElementById("s");
	var s = g + " " + gs.value;
	window.open("http://www.google.com/cse?cx=002097777976339130104%3Age8wuj2vkji&ie=UTF-8&q="
					+ s + "&sa=Search", "Search",
			"status=1,toolbar=yes,resizable=yes,scrollbars=yes,menubar=yes"); 
}

var INTSTR = "0123456789";
function isInt(str) {
	var i = 0;
	if(str.charAt(0)=='-'){
		i++;
	}
	for (;i < str.length; i++) {
		if (INTSTR.indexOf(str.charAt(i)) == -1) {
			return false;
		}
	}
	return true;
}

function initLinkForward(g,id) {
	initUserId();
	var grade = getGC().charAt(0);
	if(g != grade) {
		setGC(g);
	}
	setFQCookie(id);
	GoTo("/l");
}

function ObjPos(obj) {
	var curleft = curtop = 0;
	do {
		curleft = curleft + obj.offsetLeft;
		curtop = curtop + obj.offsetTop;
	} while (obj = obj.offsetParent);
	this.left = curleft;
	this.top = curtop;
}
 
function onMOBut(obj){obj.className = 'dby';} 
function onMTBut(obj){obj.className = 'dbw';}
function inSel(){document.body.style.cursor='pointer';}
function outSel(){document.body.style.cursor='auto';}
function selMMOver(obj){inSel();obj.className="gdmo";}
function selMMOut(obj){outSel();obj.className="gdn";}
function selMMSOver(obj){inSel();obj.className="gdsh";}
function selMMSOut(obj){outSel();obj.className="gds";}

function inWait() {
	document.body.style.cursor = 'wait';
	document.getElementById("pw").style.display="";
}
function outWait(){
	document.body.style.cursor='auto';
	document.getElementById("pw").style.display="none";
}

function selMOver(isSel,obj) {
	if(isSel) {
		selMMSOver(obj);
	} else {
		selMMOver(obj);
	}
}
function selMOut(isSel,obj) {
	if(isSel) {
		selMMSOut(obj);
	} else {
		selMMOut(obj);
	}
}

function arrayCopy(inAry) {
	var ret = new Array();
	for ( var i = 0; i < inAry.length; i++) {
		ret[i] = inAry[i];
	}
	return ret;
}

function sendError(err) {
	if(isPublic) {
		var sb = "n= Error&";
		sb += "e= System &";
		sb += "t="+encodeURI(err)+"\r\n";
		var xhR = createAJAX();
		try{ xhR.overrideMimeType('text/html');} catch(e){}
		xhR.open("POST", "/w", true);
		xhR.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhR.setRequestHeader("Content-length", sb.length);
		xhR.setRequestHeader("Connection", "close");
		xhR.send(sb);
		alert(ERROR_MESSAGE);
	} else {
		alert(err);
	}
}

function randomPos(d) {
	return new Date().getTime()%d;
}

function randomOne() {
	return randomPos(10);
}

function writeCemiCircle(tc,desc) {
	var sb = startCemiCircle(tc)+desc+endCemiCircle(tc);
	return sb;
}

function isValidSpecial(keycode) {
	return (keycode==8 || keycode==9 || 
			keycode==37 || keycode==38 || keycode==46);
}

function startCemiCircle(tc) {
	var sb = "<table class="+tc+" width=100% cellspacing=0 cellpadding=0 border=0>";
	sb+= "<tr><td class="+tc+"lt ></td>";
	sb+= "<td class="+tc+"t ></td>";
	sb+= "<td class="+tc+"tr ></td></tr>";
	sb+= "<tr><td class="+tc+"l ></td>";
	sb+= "<td>";
	return sb;
}

function endCemiCircle(tc) {
	var sb = "</td>";
	sb+= "<td class="+tc+"rr ></td></tr>";
	sb+= "<tr><td class="+tc+"bl ></td>";
	sb+= "<td class="+tc+"bb ></td>";
	sb+= "<td class="+tc+"br ></td></tr>";
	sb+="</table>";
	return sb;
}

function numImgage(num) {
	var sb = "";
	if(num>0) {
		var i = num;
		while(i>0) {
			sb = IMG_NUM[i%10]+sb;
			i = Math.floor(i/10);
		}
	} else {
		sb = IMG_NUM[0];
	}
	return sb;
}
function readCookie(nameEQ) {
	var cName = getUserPrefix()+nameEQ;
	var ca = document.cookie.split(';');
	var val = "";
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(cName) == 0) {
			val= c.substring(cName.length,c.length);
			break;
		}
	}
	return val;
}

function readCookieRemove(nameEQ) {
	var val = readCookie(nameEQ);
	if(val!= ""){
		document.cookie=nameEQ;
	}
	return val;
}

function writeCookieExpiresLocal(prefix, value) {
	var date = new Date();
	date.setTime(date.getTime()+(8760*3600000));
	document.cookie = getUserPrefix()+prefix+value+"; expires="+date.toUTCString();
}

function writeCookieExpires(prefix, value) {
	var date = new Date();
	date.setTime(date.getTime()+(8760*3600000));
	document.cookie = getUserPrefix()+prefix+value+"; expires="+date.toUTCString()+"; path=/";
}

function writeCookie(prefix, value) {
	document.cookie = getUserPrefix()+prefix+value+"; path=/";
}

function setGC(value) {
	writeCookieExpires("1=",value)
}

function getGC() {
	var val = readCookie("1=");
	if(val== ""){
		val = "0";
		setGC(val);
	}
	return val;
}

function setSCCookie(val) {
	writeCookie("2=",val);
}

function getSC() {
	return readCookieRemove("2=");
}

function setFQCookie(val) {
	writeCookie("3=", val);
}
function getFQ() {
	return readCookieRemove("3=");
}

function setLevelCookie(value) {
	writeCookieExpires("4=",value)
}

function getLevelCookie() {
	return readCookie("4=");
}

function setOptCookie(value) {
	writeCookieExpiresLocal("8=",value);
}

function getOpt() {
	return readCookie("8=");
}

var VALID_ID_CHAR =" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var USER_COOKIE_NAMEEQ = "u=";
var DELETED_USER = "-";
var GUEST = "Guest";
var utime=0
var userInfo = null;
var inUser = false,inDiv=false;

function openUserSelection() {
	
	var umde = document.getElementById("umd");
	var sb= "";
	if(userInfo.length>0) {
		var sel = parseInt(userInfo[0]);
		sb= "<table cellspacing=0 cellpadding=0 border=0 width=100%>";
		sb +="<colgroup width=90%></colgroup>";
		sb +="<colgroup width=10%></colgroup>";
		for ( var i = 1; i < userInfo.length; i++) {
			if(userInfo[i] != DELETED_USER) {
				if(i!=sel){
					sb += "<tr><td><div class=gdn onclick=selUser("+i+") onMouseover='selMMOverUser(this)' " +
					"onMouseout='selMMOutUser(this)'>";
					sb+= userInfo[i] +"</div></td><td>";
					sb += "<div class=gdn onclick=delUser("+i+") onMouseover='selMMOverUser(this)' " +
					"onMouseout='selMMOutUser(this)' alt='Delete User'>";
					sb+= IMAGE_DELETE +"</div></td></tr>";
				} else {
					sb += "<tr><td><div class=gds onclick=selUser("+i+") onMouseover='selMMSOverUser(this)' " +
						"onMouseout='selMMSOutUser(this)'>";
					sb+= userInfo[i] +"</div></td><td>";
					sb += "<div class=gds onclick=delUser("+i+") onMouseover='selMMSOverUser(this)' " +
					"onMouseout='selMMSOutUser(this)' alt='Delete User'>";
					sb+= IMAGE_DELETE +"</div></td></tr>";
					
				}
			}
		}
		sb+="</table>"
	}
	umde.innerHTML = sb;
	var ume = document.getElementById("um");
	ume.style.display="";
}

function selUser(i) {
	userInfo[0] = "" +i;
	setUserDisplay();
	hideUserSelection();
	setTimeout("userChange()",0);
	writeUserInfo();
}

function selMMOverUser(obj) {
	selMMOver(obj);
	inUC();
}

function selMMOutUser(obj) {
	selMMOut(obj);
	outUC();
}

function selMMSOverUser(obj) {
	selMMSOver(obj);
	inUC();
}

function selMMSOutUser(obj) {
	selMMSOut(obj);
	outUC();
}

function onUserFocus(field) {
	if(field.value == GUEST) {
		field.value="";
	}
	inUser = true;
}
function onBlueUser() {
	inUser = false;
	checkHideUserSelection();
}

function checkHideUserSelection() {
	if(!inUser && !inDiv) {
		hideUserSelection();
	}
}

function enterNewUser(field,e) {
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else if (e)
		keycode = e.keyCode;
	else
		return true;

	if (keycode == 13) {
		setNewUser(field);
		return false;
	} else if(isValidSpecial(keycode) || VALID_ID_CHAR.indexOf(String.fromCharCode(keycode))>=0){
		return true;
	} else {
		return false;
	}
}

function okNewUser() {
	setNewUser(document.getElementById("nu"));
}

function setNewUser(fd) {
	var val = fd.value;
	if(val != GUEST && val != "") {
		var i = userInfo.length;
		for ( var j = 1; j < userInfo.length; j++) {
			if(userInfo[j] == fd.value) {
				i = j;
				break;
			}
		}
		userInfo[i] = fd.value;
		fd.value=GUEST;
		selUser(i);
	} else {
		selUser(0);
	}
	hideUserSelection();
}
function delUser(i) {
	userInfo[i] = DELETED_USER;
	if(i == parseInt(userInfo[0])) {
		selUser(0);
	}
	hideUserSelection();
}

function hideUserSelection() {
	var ume = document.getElementById("um");
	ume.style.display="none";
}

function inUC(){
	inDiv = true;
	clearTimeout(utime);
}

function outUC(){
	inDiv = false;
	utime = setTimeout("checkHideUserSelection()",1000);
}

function getUserPrefix() {
	return userInfo[0]+".";
}
function initUserId() {
	var ca = document.cookie.split(';');
	var val = "";
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(USER_COOKIE_NAMEEQ) == 0) {
			val= c.substring(USER_COOKIE_NAMEEQ.length,c.length);
			break;
		}
	}
	if(val != null) {
		userInfo = val.split(":");
	} else {
		userInfo =  new Array();
		userInfo[0] = "0";
	}
}

function initUserInfo() {
	initUserId();
	setUserDisplay();
}

function setUserDisplay() {
	var i = parseInt(userInfo[0]);
	var val = GUEST;
	if(i>0) {
		val = userInfo[i];
	}
	document.getElementById("user").innerHTML = val
}

function writeUserInfo() {
	var value = userInfo[0];
	for ( var i = 1; i < userInfo.length; i++) {
		value += ":" + userInfo[i];
	}
	var date = new Date();
	date.setTime(date.getTime()+(8760*3600000));
	document.cookie = USER_COOKIE_NAMEEQ+value+"; expires="+date.toUTCString()+"; path=/";
}

