// load survey CSS dynamically
function loadCSS(filename) {
	var fileref=document.createElement("link");
	fileref.setAttribute("rel", "stylesheet");
	fileref.setAttribute("type", "text/css");
	fileref.setAttribute("href", filename);
	document.getElementsByTagName("head")[0].appendChild(fileref);
}

function truncateField(thisObj,maxChars) {
	if (thisObj.value.length > maxChars) 
		{ thisObj.value = thisObj.value.substring(0,maxChars); }
}
var SURVEY_VALIDATE = Array();
function trimText(txt) {
	txt = txt.replace(/^\s*(\S*)\s*$/,"$1",txt);
	return txt;
}

function validateRequired(thisForm) {
	if (!SURVEY_VALIDATE.length)
		return true;
	for (var i=0;SURVEY_VALIDATE[i];i++) {
		// not blank
		if (SURVEY_VALIDATE[i].type == 1 && !trimText(thisForm[SURVEY_VALIDATE[i].question].value)) {
			alert(SURVEY_VALIDATE[i].title+" cannot be blank");
			return false;
		}
		// email mask
		if (SURVEY_VALIDATE[i].type == 2 && !isEmailFormat(thisForm[SURVEY_VALIDATE[i].question].value)) {
			alert(SURVEY_VALIDATE[i].title+" isn't a valid email");
			return false;
		}
		// date mask
		if (SURVEY_VALIDATE[i].type == 3 && !isValidDate(thisForm[SURVEY_VALIDATE[i].question].value,'yyyy-mm-dd')) {
			alert(SURVEY_VALIDATE[i].title+" isn't a valid date");
			return false;
		}
		// custom mask
		if (SURVEY_VALIDATE[i].type == 6) {
			var thisRegEx = new RegExp(SURVEY_VALIDATE[i].mask);
			if (!thisRegEx.test(thisForm[SURVEY_VALIDATE[i].question].value)) {
				alert(SURVEY_VALIDATE[i].title+" doesn't match the required format");
				return false;
			}
		}
	}
	return true;
}

function isEmailFormat(emailString) {
	var validEmailMask = /^[0-9a-z_]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,5}$/i;
	// if email is in correct RFC 822 format, the following substitution should validate
	return validEmailMask.test(emailString);
}

function telephoneFrmt(formElement) {
	formElement.value = formElement.value.replace(/\D+/g,"");
	if (formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})(\d+)/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})(\d+)/g,"1 ($1) $2-$3 x$4");
	} else if (formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^1(\d{3})(\d{3})(\d{4})/g,"1 ($1) $2-$3");
	} else if (formElement.value.replace(/^(\d{3})(\d{3})(\d{4})(\d+)/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^(\d{3})(\d{3})(\d{4})(\d+)/g,"($1) $2-$3 x$4");
	} else {
		formElement.value = formElement.value.replace(/^(\d{3})(\d{3})(\d{4})/g,"($1) $2-$3");
	}	
}

function PSCodeFrmt(formElement) {
	formElement.value = formElement.value.toUpperCase().replace(/[^A-Z0-9]+/g,"");
	if (formElement.value.replace(/^([A-Z]\d[A-Z])(\d[A-Z]\d)$/g,"true") == "true") {
		formElement.value = formElement.value.replace(/^([A-Z]\d[A-Z])(\d[A-Z]\d)$/g,"$1 $2");
	} else {
		formElement.value = "";
	}	
}

function isValidDate(dateString,DateFormatString) {
	if (trimText(dateString) == "") {
		return true;
	} else if (getDateArray(dateString, DateFormatString)) {
		var ymd = getDateArray(dateString, DateFormatString);
		var dateObj = new Date(ymd[0],ymd[1]-1,ymd[2]);
		var compYear = dateObj.getYear().toInt() < 1000 ? dateObj.getYear().toInt() + 1900 : dateObj.getYear().toInt();
		var compMonth = dateObj.getMonth().toInt()+1;
		var compDay = dateObj.getDate().toInt();
		if (ymd[0] > 1800 && ymd[0] < 2300 && ymd[0] == compYear && ymd[1] == compMonth && ymd[2] == compDay) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}
// always returns year, month, day
function getDateArray(dtString,dtFrmt) {
	var separator = "-";
	if (dtFrmt.indexOf('/') != -1) {
		separator = "/";
	} else if (dtFrmt.indexOf('.') != -1) {
		separator = ".";
	}
	var dtFrmtArray = dtFrmt.toLowerCase().split(separator);
	var dtStringArray = dtString.split(separator);
	var ymd = new Array;
	var parseError = false;
	if (dtFrmtArray.length == 3 && dtStringArray.length == 3) {
		for (i=0;i<3;i++) {
			if (dtFrmtArray[i].charAt(0) == "m") {
				ymd[1] = parseInt(dtStringArray[i],10);
			} else if (dtFrmtArray[i].charAt(0) == "d") {
				ymd[2] = parseInt(dtStringArray[i],10);
			} else if (dtFrmtArray[i].charAt(0) == "y") {
				ymd[0] = parseInt(dtStringArray[i],10);
			} else {
				parseError = true;
			}
		}
	} else {
		parseError = true;
	}
	if (parseError) {
		return null;
	} else {
		return ymd;
	}
}
function verifySurveyResponse(thisForm) {
	var responseControl = thisForm["response[]"];
	var controlType = responseControl[0] ? responseControl[0].type : responseControl.type;
	var responseValid = false;
	if (controlType == "checkbox") {
		for (var i = 0; responseControl[i]; i++) {
			if (responseControl[i].checked)
				responseValid = true;
		}
		if (!responseValid) {
			alert(GL("Please select at least one option",""));
			responseControl[0].focus();
		} else return true;
	}
	if (controlType == "radio") {
		for (var i = 0; responseControl[i]; i++) {
			if (responseControl[i].checked)
				responseValid = true;
		}
		if (!responseValid) {
			alert("Please choose an option");
			responseControl[0].focus();
		} else return true;
	}
	if (controlType == "textarea") {
		if (responseControl.replace(/\s+/,"") == "") {
			alert("Please enter a response");
			responseControl.focus();
		} else return true;
	}
	return false;
}
function checkCaptcha(thisObj,ajaxScript,c,i) {
	if (thisObj.value.length == 6)
		AjaxRequest(ajaxScript, function (ro) {captchaResponse(ro,c,i);}, "checkCaptcha", "captcha", thisObj.value);
	else
		document.getElementById("captcha_check").innerHTML = "";
}
function captchaResponse(resObj,c,i) {
	document.getElementById("captcha_check").innerHTML = (AjaxResParam(resObj, "correct") == "true" ? "<strong style=\"color: green;\">"+c+"</strong>" :  "<strong style=\"color: red;\">"+i+"</strong>");
}
