// czhao ess

var enable_alert = false;

function ess_alert(value){
	if (enable_alert){
		alert(value);
	}
}


// This will pass if first value is 0
function isInt1(x) {
	if (isNaN(x)) return false;
	return true;
}

function validateUserForm(mandatories, integers, oneWillDo){
	result = true;
	error = "";
	if(mandatories!=null){
		for (word in mandatories){
			var inputItem = document.getElementById(word);
			if (inputItem == null){
				ess_alert("no such element: "+word);
				error += i18n('No such element: ')+word;
				result = false;
			}
			else{
				if (inputItem.type == "radio"){
					var hasValue = false;
					var radioItem = document.getElementsByName(inputItem.name);
					for (i = 0; i < radioItem.length; i++){
						if (radioItem[i].checked){
							hasValue = true;
							break;
						}
					}
					if(!hasValue){
						error += i18n('Field cannot be blank: ')+mandatories[word]+"\n";
						result = false;
					}
				} else {
					if (inputItem.value == ""){
						error += i18n('Field cannot be blank: ')+mandatories[word]+"\n";
						result = false;
					}
				}
			}
		}
	}
	if (integers!=null){
		for (word in integers){
			var inputItem = document.getElementById(word);
			if (inputItem == null){
				ess_alert("no such element: "+word);
				error += i18n('No such element: ')+word;
				result = false;
			}
			else{
				if (inputItem.value != "" && !isInt1(inputItem.value)){
					error += integers[word]+i18n(' must be an integer.')+"\n";
					result = false;
				}
			}
		}
	}

	if (oneWillDo!=null) {	
		var allBlanks = true;
		for (word in oneWillDo){
			var inputItem = document.getElementById(word);
			if (inputItem == null){
				ess_alert("no such element: "+word);
				result = false;
			}
			else{
				if (inputItem.value != ""){
					allBlanks = false;
				}
			}
		}
		if (allBlanks) {
			result = false;
			error += i18n('One of this fields must be filled:');
			for (word in oneWillDo){
				error += oneWillDo[word]+"  ";
			}
		}
	}
	
	if (!result){
		alert(error);
	}
	return result;
}

//
//  Event Handles
//

function setOnClickEvent(elementId, functionToInvoke) {
	var img = document.getElementById(elementId);
	if (img == null) {
		ess_alert("setOnClickEvent() element not found: "+elementId);
	} else {
		img.onclick = functionToInvoke;
	}
}

function setOnChangeEvent(elementId, functionToInvoke) {
	var img = document.getElementById(elementId);
	if (img == null) {
		ess_alert("setOnChangeEvent() element not found: "+elementId);
	} else {
		img.onchange = functionToInvoke;
	}
}

function checkAllCheckboxes(check_name,checked){
	var check_boxes = document.getElementsByName(check_name);
	if (check_boxes == null){
		ess_alert("no such checkbox elements: "+check_name);
	}
	else{
		for ( i = 0; i < check_boxes.length ; i ++ ){
			check_boxes[i].checked = checked;
		}
	}
}

function getNumberOfCheckedItems(check_name){
	var check_boxes = document.getElementsByName(check_name);
	var total = 0 ;
	if (check_boxes == null){
		ess_alert("no such checkbox elements: "+check_name);
	}
	else{
		for ( i = 0; i < check_boxes.length ; i ++ ){
			if (check_boxes[i].checked == true){
				total ++;
			}
		}
	}
	return total;
}

function setHtmlValue(id,value){
	var textObj = document.getElementById(id);
	if (textObj == null){
		ess_alert("no such element : "+id);
	}
	else{
		textObj.innerHTML = value;
	}
}

function setSelectValue ( fieldName, value ) {
	var select = document.getElementById(fieldName);
	if (select == null ){
		ess_alert ("no such select element: "+fieldName);
	}
	else{
		for (i=0;i < select.length;i++)
		{
				if (select.options[i].value == value ){
					select.options[i].selected=true;
					break;
				}
				
		}
	}
}

function setInputValue ( fieldName, value ){
	var input = document.getElementById(fieldName);
	if (input == null){
		ess_alert("no such input element: "+fieldName);
	}
	else{
		input.value = value;
	}
}

function setRadioValue ( fieldName, value ){
	var radio = document.getElementsByName(fieldName);
	if (radio == null){
		ess_alert("no such radio element: "+fieldName);
	}
	else{
		for (i = 0; i < radio.length; i++){
			if (radio[i].value == value){
				radio[i].checked = true;
			}
			else {
				radio[i].checked = false;
			}
		}
	}
}

function setCheckboxValue ( fieldName, value ){
	var checkbox = document.getElementById(fieldName);
	if (checkbox == null){
		ess_alert("no such checkbox element: "+fieldName);
	}
	else{
		if (value != ""){
			checkbox.checked = true;
		}
	}
}

function setTextValue(id,value){
	var textObj = document.getElementById(id);
	if (textObj == null){
		ess_alert("no such element : "+id);
	}
	else{
		// Checks for browser's feature support and use the correct property 
		if (document.all) {
			textObj.innerText = value;
		} else {
			textObj.textContent = value;		// for Firefox
		}
	}
}

function setStyleVisibility( fieldName, value ) {
	var elem = document.getElementById(fieldName);
	if (elem == null) {
		ess_alert("setVisibility() no such element: "+fieldName);
	}
	else {
		if (value == true) {
			elem.style.visibility = "visible";
		}
		else {
			elem.style.visibility = "hidden";
		}
	}
}

function setStyleDisplay (id, bool){
	var item = document.getElementById(id);
	try{
		if (bool == true){
			item.style.display = "block";
		}
		else{
			item.style.display = "none";
		}
	}
	catch(e){}
}


// Data field limits

var limitGogrokID = 20;
var limitPassword = 30;
var limitEmail = 40;
var limitFamilyName = 50;
var limitOtherNames = 50;
var limitPwSecQuestionS = 45;
var limitPwSecAnswer = 45;


// Validation routines

function lengthLimitCheck(arrErrorTag, arrLimit, errorMessage){
	var result = true;
	for (word in arrLimit){
		setStyleVisibility(arrErrorTag[word],false);
		var inputItem = document.getElementById(word);
		if (inputItem != null) {
			if(inputItem.value.length > arrLimit[word]){
				setTextValue(arrErrorTag[word], errorMessage);
				setStyleVisibility(arrErrorTag[word],true);
				result = false;
			}
		}
	}
	return result;
}



// I18N Codes

// TODO: We have to figure out how to detect browser language and use the 
// correct language based on browser setting
//
// Of course this is subject to we already have the languages translated
// Default case is to use back the English strings.
//
function i18n(str) {
	var lang = "en";
	var resultStr = str;
	
	// Here we include languages that has been translated.
	if (lang == "tw") {					// Traditional Chinese
		if (window.i18nDict_tw && i18nDict_tw[str]) {
			resultStr = i18nDict_tw[str];
		}
	} else if (lang == "cn") {			// Simplified Chinese
		if (window.i18nDict_cn && i18nDict_cn[str]) {
			resultStr = i18nDict_cn[str];
		}
		
	} else if (lang == "xx") {			// Newly added translation
		if (window.i18nDict_xx && i18nDict_xx[str]) {
			resultStr = i18nDict_xx[str];
		}
	}
	
	return resultStr;
}

function isValidEmail(str){
  var filter=/^.+@.+\..{2,3}$/
  return (filter.test(str))
}

function getOffsetTop (id) {
  var ot = 0 ;
  try{
  el = document.getElementById(id);
  ot = el.offsetTop;
  while((el = el.offsetParent) != null)
   ot += el.offsetTop;
  }
  catch(e){}
  return ot;
}

// AJAX functions

function GetXmlHttpObject()
{ 
	var objXMLHttp=null
	if (window.XMLHttpRequest)
	{
		objXMLHttp=new XMLHttpRequest()
	}
	else if (window.ActiveXObject)
	{
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
	}

	return objXMLHttp;
}

function checkUserName(username,min,max){
	var result = false;
	try{
		result = username.length >= min && username.length <= max;
	}
	catch(e){}
	if(result){
		var filter=/^[a-zA-Z][a-zA-Z0-9_\-\@\.]+$/
	  	return (filter.test(username));
  	}
  	else{
  		return false;
  	}
}
