/* ### Admin Validation Functions ###
/* 	### Gets control object
	### Uses object "title" property to refer to control
   ### */
function ValidateEditor()
{
	var objForm = document.forms[0];
	var objControl;
	var ReturnVal = true;
	for (objNr = 0; objNr < objForm.length; objNr++)
	{
		objControl = objForm.elements[objNr];
		//alert("objControl.id: " + objControl.id);
		if (objControl.id.indexOf ("wnf_") != -1)
		{
			if (objControl.id.indexOf ("-1") != -1)
			{
				//alert("Required Item: " + objControl.value + " :: value status: " + objControl.value.length);
				ReturnVal = RequiredCheck(objControl);
			}
			if (ReturnVal)
			{
				//Note, the filetype select combobox MUST be present
				ReturnVal = FormatCheck(objControl);
			}
			if (!ReturnVal)
			{
				objControl.focus();
				break;
			}
		}
	}
	if (ReturnVal)
	{
		objForm.submit();
	}
	return ReturnVal;
}

function deleteDBItem(OwnerItemID, DisplayName)
{
	answer = confirm("Are you sure you want to remove this item [" + DisplayName + "]?")
	if (answer !=0) 
	{
		window.location = "?DELETE=" + OwnerItemID;
	}
}

function deleteFile(OwnerItemID, coreID, DisplayName)
{
	answer = confirm("Are you sure you want to remove this file [" + DisplayName + "]?")
	if (answer !=0) 
	{
		window.location = "?DELETEFILE=" + OwnerItemID + "&CORE=" + coreID;
	}
}

function FileUpload(OwnerItemID, coreID, DisplayName)
{
	var objForm = document.forms[0];
	var allOK = true;
	var objFileBrw = document.getElementById("FileBrowser_" + OwnerItemID);
	if (objFileBrw)
	{
		if (objFileBrw.value == "")
		{
			alert("Please select a file to upload for " + DisplayName + ".");
			objFileBrw.focus();
			allOK = false;
			return(false);
		}
		if (allOK == true)
		{
			objForm.encoding = "multipart/form-data";
			objForm.action = "?CORE=" + coreID;
			objForm.method = "post";
			objForm.submit();
		}
	}
	else
	{
		alert("Undefined Control\n[" + "FileBrowser_" + OwnerItemID + "] - is not a form object.");
	}
}

function RequiredCheck(objControl)
{
	var ReturnVal = true;
	if (objControl.value != null)
	{
		//### Do checkbox "is required" Check ###
		if (objControl.id.indexOf ("#chk") != -1)
		{
			if(!objControl.checked)
			{
				alert("Required Field:\n[" + objControl.title + "] must be accepted.");
				ReturnVal = false;
			}
		}
		else if (objControl.value.length <= 0)
		{
			alert("Required Field:\n[" + objControl.title + "] must be filled in.");
			ReturnVal = false;
		}
	}
	return ReturnVal;
}

function FormatCheck(objControl, strType, SelectedFileType)
{
	var ReturnVal = true;
	if (objControl.value != null)
	{
		//### Do a check for invalid control characters and remove ###
		var ControlArray = new Array()
		var Position;
		if (objControl.id.indexOf ("rt1") != -1)
		{
			//### Do not filter line-breaks in text areas
			ControlArray[0] = "\f";
			ControlArray[1] = "\t";
		}
		else
		{
			ControlArray[0] = "\f";
			ControlArray[1] = "\n";
			ControlArray[2] = "\r";
			ControlArray[3] = "\t";
		}
		for (CtrlID = 0; CtrlID < ControlArray.length; CtrlID++)
		{
			while (objControl.value.indexOf(ControlArray[CtrlID]) > -1) 
			{
				Position = objControl.value.indexOf(ControlArray[CtrlID]);
				objControl.value = "" + (objControl.value.substring(0, Position) + "" + 
				objControl.value.substring((Position + ControlArray[CtrlID].length), objControl.value.length));
			}
		}
		var MaxVal = (objControl.id.substring(objControl.id.indexOf("#M") + 2, objControl.id.indexOf("M#")) * 1);
		if (objControl.value.length > MaxVal && MaxVal != -2)
		{
			alert("Value too long:\n[" + objControl.title + "] does not allow entries with more than [" + MaxVal + "] characters.\nYou have [" + objControl.value.length + "].");
			ReturnVal = false;
		}
		else
		{
			//### Do Text Field Formatting Check ###
			if (objControl.id.indexOf ("#chk") != -1)
			{
				ReturnVal = wnf_CheckBox(objControl);
			}
			//### Do Text Field Formatting Check ###
			if (objControl.id.indexOf ("#txt") != -1)
			{
			}
			//### Do Email Field Formatting Check ###
			if (objControl.id.indexOf ("#email") != -1)
			{
				ReturnVal = wnf_EmailCheck(objControl);
			}
			//### Do telephone/cell/fax Field Formatting Check ###
			if (objControl.id.indexOf ("#tel") != -1)
			{
				ReturnVal = wnf_TelCheck(objControl);
			}
			//### Do integer/whole Field Formatting Check ###
			if (objControl.id.indexOf ("#int") != -1)
			{
				ReturnVal = wnf_NumberCheck(objControl, "int");
			}
			//### Do double/decimal Field Formatting Check ###
			if (objControl.id.indexOf ("#dbl") != -1)
			{
				ReturnVal = wnf_NumberCheck(objControl, "dbl");
			}
			//### Do date Field Formatting Check ###
			if (objControl.id.indexOf ("#dat") != -1)
			{
				ReturnVal = wnf_DateCheck(objControl);
			}
			//### Do combo/select Field Formatting Check ###
			if (objControl.id.indexOf ("#cbo") != -1)
			{
				ReturnVal = wnf_ComboCheck(objControl);
			}
			//### Do RichText area update ###
			if (objControl.id.indexOf ("#rt2") != -1)
			{
				updateTextArea(objControl.id);
				ReturnVal = true;
			}
			//### Do Image file Check ###
			if (strType)
			{
				if(strType == "FILE")
				{
					if ((SelectedFileType * 1) == 1)
					{
						ReturnVal = wnf_FileCheck("image", objControl);
					}
					else if ((SelectedFileType * 1) == 2)
					{
						ReturnVal = wnf_FileCheck("document", objControl);
					}
					else if ((SelectedFileType * 1) == 3)
					{
						ReturnVal = wnf_FileCheck("video", objControl);
					}
					else
					{
						ReturnVal = wnf_FileCheck("", objControl);
					}
				}
			}
		}
	}
	return ReturnVal;
}

function wnf_CheckBox(objOwner)
{
	var ReturnVal = true;
	if (objOwner.checked)
	{
		objOwner.value = "TRUE"
	}
	else
	{
		objOwner.checked = true;
		objOwner.value = "FALSE"
	}
	return ReturnVal;
}

function wnf_FileCheck(strType, objOwner)
{
	var ReturnVal = false;
	var TypeKnown = false;
	var IsAllowedType = false;
	var AllowedArray = new Array()
	if (strType == "image")
	{
		//### Do not filter line-breaks in text areas
		AllowedArray[0] = ".jpg";
		AllowedArray[1] = ".jpeg";
		AllowedArray[2] = ".gif";
		AllowedArray[3] = ".png";
		TypeKnown = true;
	}
	else if (strType == "document")
	{
		AllowedArray[0] = ".doc";
		AllowedArray[1] = ".pdf";
		TypeKnown = true;
	}
	else if (strType == "video")
	{
		AllowedArray[0] = ".wmv";
		AllowedArray[1] = ".avi";
		TypeKnown = true;
	}
	else
	{
		alert("File Checker received invalid type-string: " + strType);
		TypeKnown = false;
		ReturnVal = false;
	}
	if (TypeKnown)
	{
		var SelectedFileName = objOwner.value.toLowerCase()
		if (SelectedFileName.length <= 0)
		{
			alert("A valid " + strType + " file must be selected in order to upload it.");
			ReturnVal = false;
		}
		else
		{
			if (SelectedFileName.indexOf (":\\") != -1)
			{
				var AllowedList = "";
				var IsFirst = true;
				for (ExtID = 0; ExtID < AllowedArray.length; ExtID++)
				{
					if (SelectedFileName.indexOf (AllowedArray[ExtID]) != -1)
					{
						IsAllowedType = true;
					}
					if(IsFirst)
					{
						IsFirst = false;
					}
					else
					{
						AllowedList += ", ";
					}
					AllowedList += "[" + AllowedArray[ExtID] + "]";
				}
				if (IsAllowedType)
				{
				}
				else
				{
					alert("The selected file [" + SelectedFileName + "] is not an allowed " + strType + " type.\n\nOnly " + strType + " types of " + AllowedList + " are allowed.");
					ReturnVal = false;
				}
			}
			else
			{
				alert("A valid " + strType + " file selection must be made.\n\nPlease click the [Browse] button.");
				objOwner.value = "";
				ReturnVal = false;
			}
		}
	}
	return ReturnVal;
}

function wnf_DateCheck(objOwner)
{
}

function wnf_TelCheck(objOwner)
{
	var ReturnVal = false;
	var AllowString = "0123456789 -";
	ReturnVal = CharChecker(AllowString, objOwner.value);
	if (!ReturnVal)
	{
		alert("Invalid value:\n[" + objOwner.title + "] should be a valid number value.\nSpaces and dashes are allowed.");
	}
	return ReturnVal;
}

function wnf_ComboCheck(objOwner)
{
	var ReturnVal = false;
	if (objOwner.options)
	{
		if (objOwner.value != "#---#")
		{
			ReturnVal = true;
		}
		else
		{
			alert("Item selection:\n[" + objOwner.title + "] needs to have an option selected.");
		}
	}
	else
	{
		alert("Invalid Control Object:\n[" + objOwner.title + "] must be a valid select/combobox.");
	}
	return ReturnVal;
}

function NumberTrimmer(NumberString)
{
	while (NumberString.indexOf(" ") > -1) 
	{
		Position = NumberString.indexOf(" ");
		NumberString = "" + (NumberString.substring(0, Position) + "" + 
		NumberString.substring((Position + 1), NumberString.length));
	}
	return NumberString;
}

function wnf_NumberCheck(objOwner, strType, MinVal, MaxVal)
{
	var ReturnVal = false;
	var AllowString = "";
	if (strType == "int")
	{
		AllowString = "0123456789";
	}
	else
	{
		//Assume double
		AllowString = ".0123456789";
	}
	objOwner.value = NumberTrimmer(objOwner.value);
	var NumberVal = objOwner.value;
	var SignModder = 1;
	var NoComma = CommaUser(objOwner);
	var NoNumber = isNaN(NumberVal);
	if (NoNumber)
	{
		ReturnVal = false;
	}
	else if (!NoComma)
	{
		ReturnVal = false;
	}
	else
	{
		if (MinVal != null && NumberVal < MinVal)
		{
			ReturnVal = false;
		}
		else if (MaxVal != null && NumberVal > MaxVal)
		{
			ReturnVal = false;
		}
		else
		{
			if ((NumberVal * 1) < 0)
			{
				SignModder = -1;
			}
			NumberVal *= SignModder;
			ReturnVal = CharChecker(AllowString, "" + NumberVal + "");
		}
	}
	if (!NoNumber)
	{
		NumberVal *= SignModder;
		objOwner.value = NumberVal;
	}
	if (!ReturnVal)
	{
		if (NumberVal < MinVal)
		{
			alert("Invalid value:\n[" + objOwner.title + "] value is not allowed to be less than [" + MinVal + "], you provided [" + NumberVal + "].");
		}
		else if (NumberVal > MaxVal)
		{
			alert("Invalid value:\n[" + objOwner.title + "] value is not allowed to be more than [" + MaxVal + "], you provided [" + NumberVal + "].");
		}
		else if (!NoComma)
		{
			//Message already given.
		}
		else
		{
			if (strType == "int")
			{
				alert("Invalid value:\n[" + objOwner.title + "] should be a valid whole number value.\ni.e. 100\nNo decimal or non-numeric values allowed.");
			}
			else
			{
				alert("Invalid value:\n[" + objOwner.title + "] may only be a valid numeric value.\ni.e. 125.50\nNo spaces, currency- or percentage symbols are allowed.");
			}
		}
	}
	return ReturnVal;
}

function CommaUser(objOwner)
{
	var ReturnVal = false;
	var CommaCounter = 0;
	var Replacer = "";
	while (objOwner.value.indexOf(",") > -1) 
	{
		if (objOwner.value.indexOf (",") != -1)
		{
			CommaCounter++;
			if (CommaCounter == 1)
			{
				Replacer = ".";
			}
			else
			{
				Replacer = "";
			}
		}
		Position = objOwner.value.indexOf(",");
		objOwner.value = "" + (objOwner.value.substring(0, Position) + Replacer + 
		objOwner.value.substring((Position + 1), objOwner.value.length));
	}
	if (CommaCounter > 1)
	{
		ReturnVal = false;
		alert("Please do not include thousand seperators.\nIt has been removed, please confirm the changed value.");
	}
	else if (CommaCounter == 1)
	{
		ReturnVal = false;
		alert("For decimal values, please use the . (dot) instead of comma.\nIt has been changed, please confirm the changed value.");
	}
	else
	{
		ReturnVal = true;
	}
	return ReturnVal;
}

function CharChecker(CharString, SourceString)
{
	var ReturnVal = false;
	var CurrChr;
	var allNum = "";
	var AllCharsValid = true;
	for (ChrNr = 0; ChrNr < SourceString.length; ChrNr++)
	{
		CurrChr = SourceString.charAt(ChrNr);
		for (AllowNr = 0; AllowNr < CharString.length; AllowNr++)
		{
			if (CurrChr == CharString.charAt(AllowNr))
			{
				break;
			}
		}
		if (AllowNr == CharString.length)
		{
			AllCharsValid = false;
			break;
		}
	}
	ReturnVal = AllCharsValid;
	return ReturnVal;
}

function wnf_EmailCheck(objOwner)
{
	var ReturnVal = true;
	var at = "@"
	var dot = "."
	var PassedEmail = objOwner.value;
	var lat = PassedEmail.indexOf(at)
	var lstr = PassedEmail.length
	var ldot = PassedEmail.indexOf(dot)
	//### No @ sign ###
	if (ReturnVal && PassedEmail.indexOf(at) == -1)
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### @ sign at start or end of string ###
	if (ReturnVal && (PassedEmail.indexOf(at) == -1 || PassedEmail.indexOf(at) == 0 || PassedEmail.indexOf(at) == lstr))
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### . (dot) at start or end of string ###
	if (ReturnVal && (PassedEmail.indexOf(dot) == -1 || PassedEmail.indexOf(dot) == 0 || PassedEmail.indexOf(dot) == lstr))
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### Two @@ ###
	if (ReturnVal && (PassedEmail.indexOf(at,(lat+1)) != -1))
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### . (dot) placement near @ ###
	if (ReturnVal && (PassedEmail.substring(lat-1,lat) == dot || PassedEmail.substring(lat+1,lat+2) == dot))
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### . (dot) 2 chars behind @ (basically one char domain name) ###
	if (ReturnVal && (PassedEmail.indexOf(dot,(lat+2)) == -1))
	{
		alert("Invalid Email Address:\nEmail [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### email address has spaces ###
	if (ReturnVal && (PassedEmail.indexOf(" ")!=-1))
	{
		alert("Invalid Email Address:\nSpaces are not allowed in email [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	//### email address has linebreaks ###
	if (ReturnVal && (PassedEmail.indexOf("\n") != -1 || PassedEmail.indexOf("\r") != -1 || PassedEmail.indexOf("\t")!=-1))
	{
		alert("Invalid Email Address:\nControl characters are not allowed in email [" + PassedEmail + "] provided for field [" + objOwner.title + "]")
		ReturnVal = false;
	}
	return ReturnVal;
}

