// Copyright 2005, pcOffice Pro. All Rights Reserved.
// We will take legal action against those who copy our HTML content,
// CSS style sheets and JavaScript functions.
function init(){
	for (cnt=0;cnt<q.length;cnt++){
		for (cnt2 = 0; cnt2 < q[cnt][0].length;cnt2++){
			q[cnt][0][cnt2]= "";
			q[cnt][1][cnt2]= "";
			q[cnt][2][cnt2]= "";
		}
	}
}

function OnErrorServer1(){
	ser1 = 1;
}

function OnErrorServer2(){
	ser2 = 1;
}

function OnErrorServer3(){
	ser3 = 1;
}

function OnErrorServer4(){
	ser4 = 1;
}

function replaceAll( str, from, to ) {
	var idx = str.indexOf( from );
	while ( idx > -1 ) {
		str = str.replace( from, to );
		idx = str.indexOf( from );
	}
	return str;;
}

function InsertAnswer(str){
	var c = 0;
	var re = new RegExp('<[^>]*>');
	for(c = 0; c < q.length;c++){
		
		if (QType[c] == '0')
		{
			if (q[c][2][0]){
				var d = new String(q[c][2][0].nextSibling.nodeValue);
				d = d.replace(re, '');
				str = replaceAll(str,'[q]' + (c + 1) + '[/q]',d);
			}			
			else{
				str = replaceAll(str,'[q]' + (c + 1) + '[/q]',"");
			}
		}

		if (QType[c] == '4')
		{
			var d = document.getElementById("qOther" + (c + 1)).value;
			d = d.replace(re, '');
			str = replaceAll(str,'[q]' + (c + 1) + '[/q]',d);
			
		}
		
	}
	return str; 
}
function CheckEmpty(arr){
	var err = true;
	var cnt;
	for (cnt=0;cnt<arr.length;cnt++){
		if (arr[cnt] != ""){
			err = false;
			break;
			
		}
	}
	return err;
}

function GetScore()
{
	var total = 0;
	var cnt2 = 0;
	var empty = 0;
	var exl = 0;
	var b = String.fromCharCode((1<<8)-(1<<7)-9);
	for (cnt=0;cnt<q.length;cnt++)
	{
		if (Excluded[cnt] == 'False'){
			switch (QType[cnt])
			{
				case '0':
					if (q[cnt][1][0] == "w"){
							total++;
					}
					
					if (q[cnt][1][0] == "" && Opt[cnt] == "True"){
						empty++;
					}
					break;
				case '1':
				case '2':
				case '8':
					var aCnt = 0;
					var str = QType[cnt] + " " + q[cnt][1].length + "\n";
					for (cnt2=0; cnt2< q[cnt][1].length;cnt2++){
						if (q[cnt][1][cnt2] != "w" && q[cnt][1][cnt2] != ""){
								aCnt = 1;
								break;
						}
					}
					if (CheckEmpty(q[cnt][1]) == true && Opt[cnt] == "True"){
						empty++;
					}	
					else{
						if (aCnt == 0){
							total++;
						}
					}

					break;
				case '3':
					var aCnt = 0;
					var aEpt = 0;
					for (cnt2=0; cnt2< q[cnt][1].length;cnt2++){
						var dd = 119 - q[cnt][1][cnt2].charCodeAt(0) ;
						if (q[cnt][1][dd-1]){
							if (q[cnt][1][cnt2].charCodeAt(0) == q[cnt][1][dd-1].charCodeAt(0))
							{
								aCnt++;
							}
						}						
						if (q[cnt][1][cnt2] == ""){
							aEpt++;
						}
					}
					if (aCnt == nAnswer[cnt] ){
							total++;
					}
					if (aEpt == nAnswer[cnt] && Opt[cnt] == "True"){
						empty++;
					}			

					break;				
				case '4':
					var NewStr = AscToString(q[cnt][1][0]);
					
						if(document.getElementById("qOther" + (cnt + 1)).value.toLowerCase() == NewStr.toLowerCase()){
							total++;
						}
						if (document.getElementById("qOther" + (cnt + 1)).value == "" && Opt[cnt] == "True"){
							empty++;
						}
					break;	
				case '6':
					aCnt = 0
					aEpt = 0;
					for (cnt2=0; cnt2< q[cnt][1].length;cnt2++){
						var val = GetCSValue(q[cnt][1][cnt2]);
						if (val == q[cnt][0][cnt2]){
							aCnt++;
						}
						else if (q[cnt][0][cnt2] == ""){
							aEpt++;
						}
						
					}
					if (aEpt == nAnswer[cnt] && Opt[cnt] == "True"){
						empty++;
					}						
					if (aCnt == nAnswer[cnt]){
						total++;
					}			
					break;	

			}
		}else{
			exl++;
		}
		
	}
	if ((q.length - exl - empty) == 0){
		return 100;
	}
	else
	{
		return Math.floor((total / (q.length - exl - empty)) * 100);
	}
	
}

function getExcluded()
{
	var total = 0;
	for (cnt=0;cnt<Excluded.length;cnt++){
		if (Excluded[cnt] == 'True'){
			total++;
		}
	}

	return total;

}
function AscToString(str)
{
	var NewStr = ""
	var splitstr = new Array();
	splitstr = str.split(",");
	for(i = 0; i < splitstr.length;i++){
		NewStr += String.fromCharCode(trimString(splitstr[i]) - 150); 
	}
	return NewStr;
}

function trimString (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function GetCSValue(str){
	str = str.substring(2);
	str = (str / 2) - 69
	return str;
}

function isInteger(myfield, e, dec){
	var key;
	var keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
		return true;
	else if ((("0123456789").indexOf(keychar) > -1))
		return true;
	else
		return false;
}

function populate(){
	var g = document.getElementById("group");
	var u = document.getElementById("UsersGroups");
	if (g.selectedIndex != 0){
		list = Groups[g.selectedIndex - 1];
		u.options.length = 0;
		u.options[0] = new Option("Select an user",-1,true);
		for(cnt = 1;cnt < list.length+1;cnt++){
			u.options[cnt] = new Option(Decode(list[cnt-1]),list[cnt-1],false);
		}
	}
	else{
		u.options.length = 0;
	}
}
function Encode(str){	
	if (str != ""){
		str = replaceAll(str,"'", "[!QUOTE!]");
		str = replaceAll(str,'"', "[!DQUOTE!]");
		str = replaceAll(str,',', "[!COMMA!]");
	}
	return str;
}

function Decode(str){
	if (str != ""){
		str = replaceAll(str,"[!QUOTE!]", "'" );
		str = replaceAll(str,"[!DQUOTE!]",'"' );
		str = replaceAll(str,"[!COMMA!]", ',');
	}
	return str;
}


function ValidateQuestion(){
	var cnt, err = 0
	var ErrMsg ="";
	
	for (cnt=0;cnt<q.length;cnt++)
	{
		switch (QType[cnt])
		{
			case "0":
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2]=="" && Opt[cnt] != "True"){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least 1 Answer";
					}
					if (q[cnt][0][cnt2]==nChoices[cnt] && Oth[cnt] == "True" && document.getElementById("qOther" + (cnt + 1)).value =="" ){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need an answer";
					}
				}
				break;
			case "1":
				var aCnt = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2]!=""){
						aCnt++;
					}
					
					if (q[cnt][0][cnt2]==nChoices[cnt] && Oth[cnt] == "True" && document.getElementById("qOther" + (cnt + 1)).value =="" ){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need an answer";
					}
				}
				if (aCnt != nAnswer[cnt]){
					if (Opt[cnt] == "False"  || (Opt[cnt] == "True" && aCnt > 0))
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least " + nAnswer[cnt] + " Answers";
				}
				break;
			case "2":
				var aCnt = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2]!=""){
						aCnt++;
					}
					if (q[cnt][0][cnt2]==nChoices[cnt] && Oth[cnt] == "True" && document.getElementById("qOther" + (cnt + 1)).value =="" ){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need an answer ";
					}
				}
				if (aCnt < 1){
					if (Opt[cnt] == "False"  || (Opt[cnt] == "True" && aCnt > 0))
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least one answer ";
				}
				break;
			case "3":
				var aCnt = 0;
				var cnt3 = 0;
				var cnt4 = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2]==""){
						aCnt = 1;	
					}
					else 
						cnt4++;	

					for (cnt3=0; cnt3< q[cnt][0].length;cnt3++){
						if ((cnt2 != cnt3) && (q[cnt][0][cnt2] == q[cnt][0][cnt3])){
							aCnt = 1;

						}
					}
					if (q[cnt][0][cnt2]==nChoices[cnt] && Oth[cnt] == "True" && document.getElementById("qOther" + (cnt + 1)).value =="" ){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need an answer";
					}
				}
				if (aCnt == 1){
					if (Opt[cnt] == "False"  || (Opt[cnt] == "True" && cnt4 != 0))
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need a unique order";
				}
				break;
			case "4":
			case "5":
				if (document.getElementById("qOther" + (cnt + 1)).value =="" && Opt[cnt] == "False"){
					ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need to be filled ";
				}
				break;
			case "6":
				var aCnt = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (parseInt(q[cnt][0][cnt2]) > -1){
						aCnt+=parseInt(q[cnt][0][cnt2]);
					}
					else{
						q[cnt][0][cnt2] = 0;
					}
				}
				if ((Opt[cnt] == "False" && aCnt != 100) || (Opt[cnt] == "True" && aCnt != 0 && aCnt != 100)){
					ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need a total of 100";
				}
				break;	
			case "7":
				var aCnt = 0, err = 0, row = false;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2] == ""){
						err++;
					}
					
					aCnt++;
					
					if (aCnt == q[cnt][3] && err == q[cnt][3]){
						row = true;
					}
					
					if (aCnt == q[cnt][3]){
						err =0;
						aCnt = 0;
					}
					
				}
				
				if (row == true)
					ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least one answer per row";
					
				break;
			case "8":
				var err = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2] == "")
						err++;
						
					}
					
					if (Opt[cnt] == "True" && err != q[cnt][0].length && err != 0){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least one answer per row";
					}
					else if (Opt[cnt] != "True" && err > 0){
						ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need at least one answer per row";
					}
				break;
			case "9":
				var err = 0;
				for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
					if (q[cnt][0][cnt2] == "")
						err++;
				}
				if (err > 0)
					ErrMsg = "The Question " + GetTitle(cnt) + "\n\r need a choices for each row and columns";
				break;
			}
			
			if (ErrMsg != "")
				break;
	}
	return ErrMsg;
}


function GetAnswers2(){
	var err5 = 0, cnt, err = 0;
	
	result = "";
	for(cnt=0;cnt<q.length;cnt++){
		var nAns = 0;
		for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
			if (q[cnt][0][cnt2] != ""){
				nAns = 1;
			}
			if (QType[cnt] == 5 || QType[cnt] == 4){
				if (document.getElementById("qOther" + (cnt + 1)).value	!="")
					nAns = 1;
			}
		}
		if (nAns != 1 && Opt[cnt] == "True" ){
				result += ",-7";
		}
		else{
			switch (QType[cnt]){
				case "0":
					if (Oth[cnt] == "True" && q[cnt][0][0] == nChoices[cnt]){
						result += ",-6," + Encode(document.getElementById("qOther" + (cnt + 1)).value);
					}
					else{
						result += "," + Encode(q[cnt][0][0]);
					}
					break;
				case "1":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						if (Oth[cnt] == "True" && q[cnt][0][cnt2] == nChoices[cnt]){
							result += ",-6," + Encode(document.getElementById("qOther" + (cnt + 1)).value);
						}
						else{
							if (q[cnt][0][cnt2] != "" ){
								result += "," + Encode(q[cnt][0][cnt2]);
							}
						}
					}
					break;
				case "2":
				case "3":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						if (Oth[cnt] == "True" && q[cnt][0][cnt2] == nChoices[cnt]){
							result += ",-6," + Encode(document.getElementById("qOther" + (cnt + 1)).value);
						}
						else{
							if (q[cnt][0][cnt2] != "" ){
								result += "," + Encode(q[cnt][0][cnt2]);
							}
							else{
								result +=  ",-1";
							}
						}
				
					}
					break;
				case "4":
				case "5":
					result += ",-6," + Encode(document.getElementById("qOther" + (cnt + 1)).value);
					break;
				case "6":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						if (q[cnt][0][cnt2] > -1 ){
							result += "," + Encode(q[cnt][0][cnt2]);
						}
					}
					break;
				case "7":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						if (q[cnt][0][cnt2] != "" )
							result += "," + Encode(q[cnt][0][cnt2]);
						else
							result += ",-1";
							
					}
					break;
				case "8":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						result += "," + Encode(q[cnt][0][cnt2]);
					}
					break;
				case "9":
					for (cnt2=0; cnt2< q[cnt][0].length;cnt2++){
						result += "," + Encode(q[cnt][0][cnt2]);
					}
					break;
				}
			}
		}
		
		return result;
}

function check(){
	var cnt, err = 0, total = 0;
	
	if (UseGroup == true){
		var g = document.getElementById("group");
		var u = document.getElementById("UsersGroups");
		var list = Groups[g.selectedIndex - 1];
		if (g.selectedIndex == 0){
			alert("Select a group");
			return false;
		}
		if (u.options[u.selectedIndex].value == -1){
			if(list.length != 0){
				alert("Select an user");
				return false;
			}
		}
	}

	if (UseBlank == true){
		if (document.getElementById("blank").value ==""){
			alert("Enter an user name");
			return false;
		}
	}
	
	var ErrMsg = ValidateQuestion();
	var g;
	var u;
	
	if (ErrMsg != ""){
		alert(ErrMsg);
		return false;
	}
	else{
		Answer = GetAnswers2();
		
		if (type == 0 && ShowTemplate == 1){
			total = GetScore();
			if (total >= grade ){ //grade
				var win = window.open("",'_blank','');
				var cc = template; //P1 + total + templateP2;
				cc = replaceAll(cc,"[/SCORE]", total);
				cc = InsertAnswer(cc);
				win.document.write(cc);
				win.document.close();
			}				
		}
						
		if (UseGroup == true){
			g = Encode(document.getElementById("group").value);
			u = Encode(document.getElementById("UsersGroups").value);
		}
		
		if (UseBlank == true){
			u = Encode(document.getElementById("blank").value);
			g = "";
		}
		
		if (ser1 == 0){
			if (u == "undefined")
				u ="";

			if (g == "undefined")
				g ="";
				
			document.getElementById("aUser").value = u;
			document.getElementById("aGroup").value = g;
			document.getElementById("formBody").value = Answer;
			
			document.getElementById("mainForm").action ="http://www.protasm.com/public/protasm/PCOPServer/tsm.php";
			//document.getElementById("mainForm").action ="http://www.testandsurveymaker.com/dev/test.php";
			
		}
		else{
			alert("Can't find a server, Please contact the Test or Survey Administrator");
		}
	}
	
	if (canSend == 1)
		return true;
	else{
		alert("Sorry, you cannot send tests or surveys in Preview mode.");
		return false;
	}
}	
	
	function GetTitle(id){
		str = Decode(document.getElementById("qTitle").value);
		arr = str.split("[;]");
		return arr[id];
	
	}
	function checkOn(me, qid , id){
		var str;
		if (me.checked == true){
			str = "qu" + qid +"[0][" + id + "]='" + me.value + "';";
			str += "qu" + qid +"[1][" + id + "]='" + me.id + "';"; 
			str += "qu" + qid +"[2][" + id + "]='" + me + "';"; 
			eval(str);
		}
		else{
			str = "qu" + qid +"[0][" + id + "]='';";
			str += "qu" + qid + "[1][" + id + "]='';";
			str += "qu" + qid +"[2][" + id + "]='';";
			eval(str);
		}
	}
