// _validator - an object that is a container for a field to validate

var standardMessages = new Array();
standardMessages[standardMessages.length] = new _standardMessages("isEmpty", "Du måste fylla i %fieldname%.")
standardMessages[standardMessages.length] = new _standardMessages("isEmailMandatory", "Fältet %fieldname% måste vara en giltig e-postadress.")
standardMessages[standardMessages.length] = new _standardMessages("isEmailOptional", "Fältet %fieldname% måste vara tomt eller innehålla en giltig e-postadress.")
standardMessages[standardMessages.length] = new _standardMessages("isNumber", "Fältet %fieldname% måste vara numerisk .")
standardMessages[standardMessages.length] = new _standardMessages("isChecked", "Kryssrutan %fieldname% måste vara i kryssad.")
standardMessages[standardMessages.length] = new _standardMessages("containsOnlyAlphaNum", "Fältet %fieldname% kan endast innehålla alfanumeriska tecken.")
standardMessages[standardMessages.length] = new _standardMessages("notFirstOption", "Du måste göra ett val i menyn %fieldname%.")

function _validator(form, bNotConcatMsg)
{
	this.bNotConcatMsg = bNotConcatMsg
	this.form = form;
	this.elements = new Array();
	this.addNew = addNew;
}

function fve(el, func, msg, xtra, focusFunc, label)
{
	this.func = func;
	this.el = el;
	this.label = label;
	this.msg = msg;
	this.xtra = xtra;
	this.focusFunc = focusFunc;
}

function addNew(e)
{
	//alert("adding this: " + e.func + "\nField: " + e.el)
	this.elements[this.elements.length] = e;
}

function Validate(validator)
{
	var msg = "";
	var elErr = null;
	for(var i = 0; i < validator.elements.length; i++) // varje element
	{
		//alert("validating this rule: " + validator.elements[i].func);
		var sFunc = validator.elements[i].func;
		var sFocusFunc = validator.elements[i].focusFunc;
		var sMsg  = GetMessage(validator.elements[i]);
		var elName = validator.elements[i].el;
		var bOk = eval(sFunc + "('" + validator.formID + "', '" + validator.elements[i].el + "','" + sMsg + "','" +  validator.elements[i].xtra + "')")
		if(validator.bNotConcatMsg){ // if alert each element separate
			if(!bOk){ // if failed to validate
				alert(sMsg);
				eval(sFocusFunc);
				validator.form.elements[validator.elements[i].el].focus();
			}
		}else // if alert at end
			if(!bOk){
				elName = validator.elements[i].el;
				eval(sFocusFunc);
				(msg.length == 0) ? elErr = validator.form.elements[validator.elements[i].el] : void(0); // get reference to first element that fails
				msg = msg + "\n" + sMsg; // add error-message to a string
			}
		}
		
		if(!validator.bNotConcatMsg && msg.length > 0){
			// make sure the tab of element is visible, otherwise we get javascript focus-error
			if(elErr.name == 'FILENAME' || elErr.name == 'TITLE' )
				SetTab(1);
			alert(msg)
			elErr.focus();
	}
	return (msg.length > 0) ? false : true;
}

function atLeastOne(formID, elID, msg, els)
{
	var bOk=false;
	var arrEls = els.split(",")
	for(var i=0; i<arrEls.length;i++)
	{
		if(document.forms[formID].elements[arrEls[i]].value != '')
			bOk = true;
	}
	return bOk;
}

function isEmpty(formID, elID)
{
	return (document.forms[formID].elements[elID].value == '') ? false: true;
}

function isNumber(formID, elID)
{
	var el = document.forms[formID].elements[elID]
	var retVal;
	if(el.value.length > 0)
		retVal = !isNaN(el.value)
	else
		retVal = false; //true om tomt värde är okej. false om tomt värde ej är ok
	return retVal;
}

function isChecked(formID, elID)
{
	var el = document.forms[formID].elements[elID];
	return el.checked;
}

function isDate(formID, elID)
{
	var el = document.forms[formID].elements[elID];
	var szDateString = el.value;
	var retVal;
	if(el.value.length > 0)
		retVal = new Date(szDateString);
	else
		retVal = true;
	
	if ((!retVal) || (isNaN(retVal)) )
		retVal = false;
	else
		retVal = true;
	
	return retVal;
}


function isMobileNumber(formID, elID)
{
	var el = document.forms[formID].elements[elID]
	var retVal;
	if(el.value.length > MINLENGTH_MNUMBER && el.value.length < MAXLENGTH_MNUMBER)
		retVal = !isNaN(el.value)
	else
		retVal = false;
	return retVal;
}

function isFilledIsEmail(formID, elID) {
	if(document.forms[formID].elements[elID].value.length > 0)
		return isEmail(formID,elID)
	else
		return true;
}


function isEmailMandatory(formID, elID)
{
	var el = document.forms[formID].elements[elID]
	var retVal;
	var szVal = el.value;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(szVal);
	
}



function isEmailOptional(formID, elID) {
	var el = document.forms[formID].elements[elID]
	var retVal;
	if(el.value.length == 0)
		return true;
	else
		return isEmailMandatory(formID, elID)
}


function isFilename(formID, elID)
{	
	var el = document.forms[formID].elements[elID]
	var retVal = true;
	if(document.theForm.elements["FILENAME"].value == "")
	{
		alert("You need to enter a filename");
		document.theForm.elements["FILENAME"].focus()
		retVal=false
	}else{
		if (!isExternal)
			document.theForm.elements["FILENAME"].value = NormalizeObjectName(document.theForm.elements["FILENAME"].value );
		retVal=true
	}
	return retVal;
}

function notFirstOption(formID, elID)
{
	var el = document.forms[formID].elements[elID]
	var retVal;
	var szVal = el.options.selectedIndex;
			
	if(szVal > 0)
		return true;
	else
		return false;
	
}

function containsOnlyAlphaNum(formID, elID)
{
	var el = document.forms[formID].elements[elID]
	var retVal;
	var szVal = el.value;
			
	var oExpr = new RegExp("[^A-Za-z0-9_]", "ig");
	var arr = oExpr.exec(szVal);
	if(arr)
		return false;
	else
		return true;
	
}

// getSelectedIDs - gets all the checked checkboxes and returns a string 
// with all those ids concatinated as a CGI GET variables.
function getSelectedIDs(form, suffix) {
	var retVal="";
	for(var i = 0; i < form.length; i++){
		if(form.elements[i].name.indexOf(suffix) >= 0 && form.elements[i].type == "checkbox")
			if(form.elements[i].checked)
				retVal = retVal +  "&id=" + form.elements[i].name;
	}
	return retVal;
}

function getSelectedID(form, suffix) {
	var retVal="";
	for(var i = 0; i < form.length; i++){
		if(form.elements[i].name.indexOf(suffix) >= 0 && form.elements[i].type == "checkbox")
			if(form.elements[i].checked)
				retVal = form.elements[i].name;
	}
	return retVal;
}

// getSelectedText - gets all the checked checkboxes and returns a string 
// with all those texts values concatinated (useful for javascript alert-warnings)
function getSelectedText(form, suffix){
	var retVal="";
	for(var i = 0; i < form.length; i++){
		if(form.elements[i].name.indexOf(suffix) >= 0 && form.elements[i].type == "checkbox")
			if(form.elements[i].checked)
				if(form.elements[form.elements[i].name + '_name'])
					retVal = ConcatStr(retVal,"'" + form.elements[form.elements[i].name + '_name'].value+"'",",\n");
	}
	return retVal;
}
	
// ConcatStr - concatinates a string to another adding a deliminator in between if 
// string is not nothing
function ConcatStr(str, newStr, delim)
{
	if(str.length > 0)
		return str + delim + newStr;
	else
		return newStr;
}

function doConfirm(str, txt){
	str = str.replace(/\$\$/g,txt);
	return window.confirm(str)
}


function doGo(bConfirmed,url)	{
	if(bConfirmed)
		location.href = url;
}

function _standardMessages(jscript_fn, msg)
{
	this.jscript_fn = jscript_fn;
	this.msg = msg;
}

function GetMessage(oFVE)
{
	if(oFVE.msg == "")
	{
		szJScript_fn = oFVE.func;
		for(var j = 0; j < standardMessages.length; j++)
		{
			if(szJScript_fn == standardMessages[j].jscript_fn)
			{
				szDefaultMsg = standardMessages[j].msg;
				var oExpr = new RegExp("%fieldname%", "ig");
				szDefaultMsg = szDefaultMsg.replace(oExpr, "\"" + oFVE.label + "\"");
				return szDefaultMsg;
			}
		}
	
	}else
		return oFVE.msg
}
