var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

var up, down;
var min1, sec1;
var cmin1, csec1, cmin2, csec2;

function cand_num_key(curBtn)
{
	document.getElementById('cand_code').childNodes[0].nodeValue += ((document.getElementById('cand_code').childNodes[0].nodeValue.length<8)?curBtn.childNodes[0].nodeValue:'');
}

function mock_init()
{
	qnumKey		= new Array();
	qnumValue	= new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
	qnumMarked	= new Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
	qnumAns		= new Array();
	qnumABAns	= new Array(' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H');
	curQNum		= 1;

	document.getElementById('timeCell1').className = 'timeStr';
	document.getElementById('timeCell2').className = 'timeStr';

	for(var i=1;i<=20;i++)
	{
		document.getElementById('qnum_btn_out_' + i).className = 'qnum_out_1';
		document.getElementById('qnum_btn_in_' + i).className = 'qnum_in_1';
	}
}

function Minutes(data)
{
	for(var i=0;i<data.length;i++) if(data.substring(i,i+1)==":") break;
	return(data.substring(0,i));
}

function Seconds(data)
{
	for(var i=0;i<data.length;i++) if(data.substring(i,i+1)==":") break;
	return(data.substring(i+1,data.length));
}

function Display(min,sec)
{
	var disp;

	if (min <= 9)
		disp = " 0";
	else
		disp = " ";

	disp += min + ":";

	if (sec <= 9)
		disp += "0" + sec;
	else
		disp += sec;

	return(disp);
}

function Down()
{
	cmin2=1*Minutes(document.getElementById('q_min1').firstChild.nodeValue);
	csec2=0+Seconds(document.getElementById('q_sec1').firstChild.nodeValue);
	DownRepeat();
}

function DownRepeat()
{
	csec2--;

	if (csec2 == -1)
	{
		csec2 = 59;
		cmin2--;
	}

	document.getElementById('q_min1').firstChild.nodeValue = (cmin2<10)?'0' + cmin2:cmin2;
	document.getElementById('q_sec1').firstChild.nodeValue = (csec2<10)?'0' + csec2:csec2;
	document.getElementById('q_min2').firstChild.nodeValue = (cmin2<10)?'0' + cmin2:cmin2;
	document.getElementById('q_sec2').firstChild.nodeValue = (csec2<10)?'0' + csec2:csec2;
//	document.sw.disp2.value=Display(cmin2, csec2);

	if ((cmin2 == 5) && (csec2 == 0))
	{
		document.getElementById('timeCell1').className = 'timeStr_final';
		document.getElementById('timeCell2').className = 'timeStr_final';
	}

	if ((cmin2 == 0) && (csec2 == 0))
	{
		hideAllDiv();showDiv('exam_result');
		parserOutput('./questions.xml', './result.xsl', 'ans_div', '', '');
		qnumAns = document.getElementById('ans_div').firstChild.nodeValue.split(',');
		qNum_Ans_Compare();
	}
	else
	{
		down = setTimeout('DownRepeat()', 1000);
	}
}


function count_ans()
{
	var zero_values = 0;

	for(var i = 0, l = qnumValue.length; i < l; i++)
	{
		zero_values += ((qnumValue[i]==0)?1:0);
	}

	document.getElementById('count_no_answer').firstChild.nodeValue = zero_values;
	document.getElementById('count_answered').firstChild.nodeValue = 20 - zero_values;
}

function qNum_Ans_Compare()
{
	var right_count = 0;

	for (var i = 0; i <= 19; i++)
	{
		myCurQNum	= i + 1;
		myCurKey	= parseInt(qnumKey[i]);
		myQNumStyle	= ((qnumValue[i]==qnumAns[myCurKey - 1])?2:1);

		if (qnumValue[i]==qnumAns[myCurKey - 1])
		{
			document.getElementById('qnum_btn_out3_' + myCurQNum).className = 'qnum_out2_2';
			document.getElementById('qnum_btn_in3_' + myCurQNum).className = 'qnum_in2_2';
			right_count = right_count + 1;
		}
		else
		{
			document.getElementById('qnum_btn_out3_' + myCurQNum).className = 'qnum_out2_1';
			document.getElementById('qnum_btn_in3_' + myCurQNum).className = 'qnum_in2_1';
		}
	}

	document.getElementById('count_right').firstChild.nodeValue = right_count;
	document.getElementById('count_wrong').firstChild.nodeValue = 20 - right_count;
	document.getElementById('result_img1').src = ((right_count>=16)?'./pass_a.gif':'./fail_a.gif');
	document.getElementById('result_img2').src = ((right_count>=16)?'./pass_b.gif':'./fail_b.gif');
}

function qnumSq(myCurQNum, myQNumBtn)
{
	if ((qnumValue[myCurQNum - 1]==0) && (qnumMarked[myCurQNum - 1]==0))
	{
		document.getElementById('qnum_btn_out' + myQNumBtn + '_' + myCurQNum).className = 'qnum_out_1';
		document.getElementById('qnum_btn_in' + myQNumBtn + '_' + myCurQNum).className = 'qnum_in_1';
	}
	else if ((qnumValue[myCurQNum - 1]!=0) && (qnumMarked[myCurQNum - 1]==0))
	{
		document.getElementById('qnum_btn_out' + myQNumBtn + '_' + myCurQNum).className = 'qnum_out_2';
		document.getElementById('qnum_btn_in' + myQNumBtn + '_' + myCurQNum).className = 'qnum_in_2';
	}
	else if ((qnumValue[myCurQNum - 1]==0) && (qnumMarked[myCurQNum - 1]!=0))
	{
		document.getElementById('qnum_btn_out' + myQNumBtn + '_' + myCurQNum).className = 'qnum_out_3';
		document.getElementById('qnum_btn_in' + myQNumBtn + '_' + myCurQNum).className = 'qnum_in_3';
	}
	else if ((qnumValue[myCurQNum - 1]!=0) && (qnumMarked[myCurQNum - 1]!=0))
	{
		document.getElementById('qnum_btn_out' + myQNumBtn + '_' + myCurQNum).className = 'qnum_out_3_1';
		document.getElementById('qnum_btn_in' + myQNumBtn + '_' + myCurQNum).className = 'qnum_in_2_1';
	}
}

function qNum_Summary_Mark()
{
	for (var i = 0; i <= 19; i++)
	{
		qnumSq(i + 1, 2);
	}
}

function qNum_Mark()
{
	qnumMarked[curQNum - 1] = ((qnumMarked[curQNum - 1]==0)?1:0);
	document.getElementById('mark_btn').firstChild.nodeValue = ((qnumMarked[curQNum - 1]==0)?'覆覽標示':'刪除覆覽標示');
	qnumSq(curQNum, '');
}

function qNum_Ans(myAnsNum, myAns)
{
	qnumValue[curQNum - 1] = myAnsNum;
	document.getElementById('curAns').firstChild.nodeValue = myAns;
	qnumSq(curQNum, '');
}

function goto_qNum_Check(myQNum)
{
	document.getElementById('question_num2').firstChild.nodeValue = myQNum;
	parserOutput('./questions.xml', './questioncheck.xsl', 'qcPart', qnumKey[myQNum - 1], qnumValue[myQNum - 1]);
}

function goto_qNum(myQNum)
{
	curQNum = myQNum;

	if (curQNum==1)
	{
		document.getElementById('seqBtn_1').style.display = 'none';
		document.getElementById('seqBtn_2').style.display = 'block';
	}
	else if (curQNum==20)
	{
		document.getElementById('seqBtn_1').style.display = 'block';
		document.getElementById('seqBtn_2').style.display = 'none';
	}
	else
	{
		document.getElementById('seqBtn_1').style.display = 'block';
		document.getElementById('seqBtn_2').style.display = 'block';
	}

	document.getElementById('question_num').firstChild.nodeValue = curQNum;
	document.getElementById('curAns').firstChild.nodeValue = qnumABAns[qnumValue[myQNum - 1]];
	parserOutput('./questions.xml', './question.xsl', 'qPart', qnumKey[curQNum - 1], '');
	parserOutput('./questions.xml', './answers.xsl',  'aPart', qnumKey[curQNum - 1], '');
	document.getElementById('mark_btn').firstChild.nodeValue = ((qnumMarked[curQNum - 1]==0)?'覆覽標示':'刪除覆覽標示');
}

function qCount(type)
{
	var xmlhttp;
    var xmlDoc;
	var qEleCount=0;

    if (document.implementation && document.implementation.createDocument)
    {
        // Mozilla & Chrome
        try
        {
			if ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) || (navigator.userAgent.toLowerCase().indexOf('safari') > -1)) // Chrome
			{
				var xmlhttp = new window.XMLHttpRequest();
				xmlhttp.open('GET', './questions.xml', false);
				xmlhttp.send(null);
				var xmlDoc = xmlhttp.responseXML.documentElement;
				var questionsElements = xmlDoc.getElementsByTagName('question');

				if (type=='pic')
				{
					for (var i = 0, l = questionsElements.length; i < l; i++)
					{
						qEleCount += (questionsElements[i].hasAttribute('pic'))?1:0;
					}

					return qEleCount;
				}
				else if (type=='all')
				{
					return questionsElements.length;
				}
			}
			else // Firefox
			{
				xmlDoc = document.implementation.createDocument('', '', null);   
				xmlDoc.async = false;
				xmlDoc.load('./questions.xml');
				var questionsElements = xmlDoc.lastChild.getElementsByTagName('question');

				if (type=='pic')
				{
					for (var i = 0, l = questionsElements.length; i < l; i++)
					{
						qEleCount += (questionsElements[i].hasAttribute('pic'))?1:0;
					}

					return qEleCount;
				}
				else if (type=='all')
				{
					return questionsElements.length;
				}
			}
        }
        catch(e)
        {
            alert("error:001b");
        }
    }
    else if (typeof window.ActiveXObject != 'undefined')
    {       
		// IE
		var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
		xmldoc.async = false;
		xmldoc.load('./questions.xml');

		if (xmldoc.parseError.errorCode != 0)
		{
			var myErr = xmldoc.parseError;
			WScript.Echo("You have error " + myErr.reason);
		}
		else
		{
			if (type=='pic')
			{
				var questionsElements = xmldoc.lastChild.selectNodes('question');

				for (var i = 0, l = questionsElements.length; i < l; i++)
				{
					qEleCount += (questionsElements[i].getAttribute('pic'))?1:0;
				}

				return qEleCount;
			}
			else if (type='all')
			{
				return xmldoc.lastChild.selectNodes('question').length;
			}
		}
	}
	else
	{
		return 0;
		alert("Browser unknown!");
	}
}

Array.prototype.in_array = function(p_val)
{
	for (var i = 0, l = this.length; i < l; i++)
	{
		if (this[i] == p_val)
		{
			return true;
		}
	}

	return false;
}

function qArrayGenerate()
{
	var curQnumKey;
	var pic_total = qCount('pic'); //104;
	var pic_num = 5;
	var qCnt = qCount('all');

	while (qnumKey.length < pic_num)
	{
		curQnumKey = Math.round(Math.random() * (pic_total - 1)) + 1;

		if (!qnumKey.in_array(curQnumKey))
		{
			qnumKey.push(curQnumKey);
		}
	}

	while (qnumKey.length < 20)
	{
		curQnumKey = Math.round(Math.random() * (qCnt - pic_total - 1)) + pic_total + 1;

		if (!qnumKey.in_array(curQnumKey))
		{
			qnumKey.push(curQnumKey);
		}
	}
}

function parserOutput(xmlsrc, xslsrc, divportion, para00, para01)
{
	var xmlhttp, xslhttp;
    var xmlDoc;
    var xslDoc;

    if (document.implementation && document.implementation.createDocument)
    {
		// Mozilla





        try
        {
			if ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) || (navigator.userAgent.toLowerCase().indexOf('safari') > -1)) // Chrome
			{
				var xmlhttp = new window.XMLHttpRequest();
				xmlhttp.open('GET', xmlsrc, false);
				xmlhttp.send(null);
				var xmlDoc = xmlhttp.responseXML.documentElement; 
			}
			else // Firefox
			{
				xmlDoc = document.implementation.createDocument('', '', null);   
				xmlDoc.async = false;
				xmlDoc.load(xmlsrc);
			}
        }
        catch(e)
        {
            alert("error:001a");
        }

        try
        {
			if ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) || (navigator.userAgent.toLowerCase().indexOf('safari') > -1)) // Chrome
			{
				var xslhttp = new window.XMLHttpRequest();
				xslhttp.open('GET', xslsrc, false);
				xslhttp.send(null);
				var xslDoc = xslhttp.responseXML.documentElement; 
			}
			else // Firefox
			{
				xslDoc = document.implementation.createDocument('', '', null);
				xslDoc.async = false;    
				xslDoc.load(xslsrc);
			}
        }
        catch(e)
        {
            alert("error:002");
        }

        try
        {
            var xsltProcessor = new XSLTProcessor();
            xsltProcessor.importStylesheet(xslDoc);
			xsltProcessor.setParameter(null, "para00", para00);
			xsltProcessor.setParameter(null, "para01", para01);
            var oResultFragment = xsltProcessor.transformToFragment(xmlDoc, document);
            var oDiv = document.getElementById(divportion);
			oDiv.innerHTML = '';
            oDiv.appendChild(oResultFragment);
        }
        catch(e)
        {
            alert("error:003");
        }   
    }
    else if (typeof window.ActiveXObject != 'undefined')
    {       
		// IE
		var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0");
		var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
		var xslproc;
		xsldoc.async = false;
		xsldoc.load(xslsrc);

		if (xsldoc.parseError.errorCode != 0)
		{
			var myErr = xsldoc.parseError;
			WScript.Echo("You have error " + myErr.reason);
		}
		else
		{
			xslt.stylesheet = xsldoc;
			var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
			xmldoc.async = false;
			xmldoc.load(xmlsrc);

			if (xmldoc.parseError.errorCode != 0)
			{
				var myErr = xmldoc.parseError;
				WScript.Echo("You have error " + myErr.reason);
			}
			else
			{
				xslproc = xslt.createProcessor();
				xslproc.input = xmldoc;
				xslproc.addParameter("para00", para00);
				xslproc.addParameter("para01", para01);
				xslproc.transform();
				document.getElementById(divportion).innerHTML = xslproc.output;
			}
		}
	}
	else
	{
		alert("Browser unknown!");
	}
}

function hideAllDiv()
{
	document.getElementById('exam_num').style.display = 'none';
	document.getElementById('exam_guide').style.display = 'none';
	document.getElementById('exam_content').style.display = 'none';
	document.getElementById('exam_answer').style.display = 'none';
	document.getElementById('exam_result').style.display = 'none';
	document.getElementById('exam_check').style.display = 'none';
}

function showDiv(divID)
{
	document.getElementById(divID).style.display = '';
}

function querySt(ji)
{
	hu = window.location.search.substring(1);
	gy = hu.split("&");

	for (i=0;i<gy.length;i++)
	{
		ft = gy[i].split("=");

		if (ft[0] == ji)
		{
			return ft[1];
		}
	}
}

function mini_tip(icon, text, text_width)
{
	twidth = (text_width==0)? '' : 'width:' + text_width + 'px;';
	tip_str=(icon!='')?'<table cellpadding=\'0\' cellspacing=\'0\'><tr><td><img style="behavior:url(./iepngfix.htc)" src=\'' + icon + '\'></td><td style=\'font-size:13px;font-family:\"Microsoft JhengHei\",\"Microsoft YaHei\",simhei,sans-serif;' + twidth + 'padding:0px 0px 0px 5px;white-space:nowrap;\'>' + text + '</td></tr></table>':'<table cellpadding=\'0\' cellspacing=\'0\'><tr><td style=\'font-size:13px;font-family:\"Microsoft JhengHei\",\"Microsoft YaHei\",simhei,sans-serif;' + twidth + '\'>'+text+'</td></tr></table>';
	Tip(tip_str, BALLOON, true, ABOVE, true);
}

function isInt(x)
{
	var y=parseInt(x);
	if (isNaN(y)) return false;
	return x==y && x.toString()==y.toString();
}

String.prototype.trim = function ()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

String.prototype.trim2 = function() 
{ 
	return this.replace(/(^\s*)|(\s*$)/g, ""); 
}
