﻿/************************************************
 * 
 * Types: Integer, NIF, Phone, CP1, CP2, Money, Percentage, Decimal, eMail, DateTime, OR2, XOR2, XORN, PwdCheck, Time
 *
 *
 ************************************************/

var xScreen = (screen.width - 500) / 2;
var yScreen = (screen.height - 240) /2;

function FieldToValidate(id, name, infoType, regExpr, message, mandatory)
{
	this.ControlId = id;
	this.ControlName = name;
	this.InfoType = infoType;
	this.RegExpr = regExpr;
	this.Message = message;
	this.Mandatory = mandatory;
}

function checkData(props)
{
	var message = "<UL TYPE='square'>";
	var fails = 0;
	
	for(i = 0; i < props.length; i++)
	{
		if(props[i].Mandatory)
		{
			if(props[i].InfoType != "PwdCheck" && props[i].InfoType != "XOR2" && props[i].InfoType != "XORN" && props[i].InfoType != "OR2" && document.getElementById(props[i].ControlId).value.length == 0)
			{
				message += "<LI>Tem de preencher o campo '" + props[i].ControlName + "'.";
				fails++;
			}
			else if(props[i].RegExpr != "")
			{
				var pattern = new RegExp(props[i].RegExpr);
				if(!pattern.test(document.getElementById(props[i].ControlId).value))
				{
					message += "<LI>" + props[i].Message;
					fails++;
				}
			}
			else
			{
				var pat;
				switch(props[i].InfoType)
				{
					case "Integer":
						pat = /^\d*$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero.";
							fails++;
						}
						break;
					case "NIF":
						pat = /^\d(9)$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
							fails++;
						}
						break;
					case "Phone":
						//pat = /^\d(9)$/;
						pat = /^(\+)?\d(9, 14)$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
							fails++;
						}
						break;
					case "CP1":
						pat = /^\d(4)$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 4 d&iacute;gitos.";
							fails++;
						}
						break;
					case "CP2":
						pat = /^\d(3)$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 3 d&iacute;gitos.";
							fails++;
						}
						break;
					case "Money":
						//pat = /^\d+([\.\,]\d(\d)?)?$/;
						pat = /^\d+(\,\d(\d)?)?$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor monet&aacute;rio correcto.";
							fails++;
						}
						break;
					case "Percentage":
						//pat = /^\d(\d)?([\.\,]\d(\d)?)?$/;
						pat = /^\d(\d)?(\,\d(\d)?)?$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value) && (document.getElementById(props[i].ControlId).value != '100' && document.getElementById(props[i].ControlId).value != '100,00' && document.getElementById(props[i].ControlId).value != '100.00' && document.getElementById(props[i].ControlId).value != '100,0' && document.getElementById(props[i].ControlId).value != '100.0'))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor correcto (Tem de ser entre 0 e 100. Ex: 25,34).";
							fails++;
						}
						break;
					case "Decimal":
						//pat = /^\d+([\.\,]\d(\d)?(\d)?)?$/;
						pat = /^\d+(\,\d(\d)?(\d)?)?$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor correcto (Ex. 10,50).";
							fails++;
						}
						break;
					case "eMail":
						pat = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' tem de conter um email v&aacute;lido.";
							fails++;
						}
						break;
					case "DateTime":
						pat = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' do tipo data tem de ter o formato 'dd/mm/aaaa'.";
							fails++;
						}
						else
						{
							var parts = document.getElementById(props[i].ControlId).value.split('/');
							var converted = new Date(parts[1] + "/" + parts[0] + "/" + parts[2]);
							if(converted.getFullYear() > parts[2] || converted.getMonth() > (parts[1]-1))
							{
								message += "<LI>A data inserida no campo '" + props[i].ControlName + "' n&atilde;o &eacute; v&aacute;lida.";
								fails++;
							}
						}
						break;
					case "Time":
						pat = /^\d{1,2}\:\d{1,2}$/;
						if(!pat.test(document.getElementById(props[i].ControlId).value))
						{
							message += "<LI>O campo '" + props[i].ControlName + "' do tipo Hora tem de ter o formato 'hh:mm'.";
							fails++;
						}
						break;
					case "OR2":
						var controls = props[i].ControlId.split('|');
						var controlsLbls = props[i].ControlName.split('|');
						if(document.getElementById(controls[0]).value == '' && document.getElementById(controls[1]).value == '')
						{
							message += "<LI>Tem de preencher o campo '" + controlsLbls[0] + "' ou o campo '" + controlsLbls[1] + "'.";
							fails++;
						}
						break;
					case "XOR2":
						var controls = props[i].ControlId.split('|');
						var controlsLbls = props[i].ControlName.split('|');
						if(document.getElementById(controls[0]).value == '' && document.getElementById(controls[1]).value == '')
						{
							message += "<LI>Tem de preencher o campo '" + controlsLbls[0] + "' ou o campo '" + controlsLbls[1] + "'.";
							fails++;
						}
						else if(document.getElementById(controls[0]).value != '' && document.getElementById(controls[1]).value != '')
						{
							message += "<LI>So pode preencher um dos campos: campo '" + controlsLbls[0] + "' ou o campo '" + controlsLbls[1] + "'.";
							fails++;
						}
						break;
					case "XORN":
						var controls = props[i].ControlId.split('|');
						var controlsLbls = props[i].ControlName.split('|');
						var counter = 0;
						var fTemp = '';
						for(kk = 0; kk < controls.length; kk++)
						{
							if(document.getElementById(controls[kk]).value != '')
								counter++;
								
							if(kk > 0)
								fTemp += ", ";
							
							fTemp += controlsLbls[kk];
						}
						if(counter == 0)
						{
							message += "<LI>Tem de preencher um dos seguintes campos: " + fTemp;
							fails++;
						}
						else if(counter > 1)
						{
							message += "<LI>S&oacute; pode preencher um dos seguintes campos campos: " + fTemp;
							fails++;
						}
						break;
					case "PwdCheck":
						var controls = props[i].ControlId.split('|');
						var controlsLbls = props[i].ControlName.split('|');
						if(document.getElementById(controls[0]).value == '' && document.getElementById(controls[1]).value == '')
						{
							message += "<LI>Tem de preencher o campo '" + controlsLbls[0] + "'.";
							message += "<LI>Tem de preencher o campo '" + controlsLbls[1] + "'.";
							fails += 2;
						}
						else if(document.getElementById(controls[0]).value != document.getElementById(controls[1]).value)
						{
							message += "<LI>Password original e confirma&ccedil;&atilde;o s&atilde;o diferentes.";
							fails ++;
						}
						break;
				}
			}
		}
		else
		{
			if(props[i].InfoType == "PwdCheck" || document.getElementById(props[i].ControlId).value.length > 0)
			{
				if(props[i].RegExpr != "")
				{
					var pattern = new RegExp(props[i].RegExpr);
					if(!pattern.test(document.getElementById(props[i].ControlId).value))
					{
						message += "<LI>" + props[i].Message;
						fails++;
					}
				}
				else
				{
					var pat;
					switch(props[i].InfoType)
					{
						case "Integer":
							pat = /^\d*$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero.";
								fails++;
							}
							break;
						case "NIF":
							pat = /^\d(9)$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
								fails++;
							}
							break;
						case "Phone":
							//pat = /^\d(9)$/;
							pat = /^(\+)?\d(9, 14)$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
								fails++;
							}
							break;
						case "CP1":
							pat = /^\d(4)$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
								fails++;
							}
							break;
						case "CP2":
							pat = /^\d(3)$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de ser um n&uacute;mero com 9 d&iacute;gitos.";
								fails++;
							}
							break;
						case "Money":
							//pat = /^\d+([\.\,]\d(\d)?)?$/;
							pat = /^\d+(\,\d(\d)?)?$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor monet&aacute;rio correcto.";
								fails++;
							}
							break;
						case "Percentage":
							//pat = /^\d(\d)?([\.\,]\d(\d)?)?$/;
							pat = /^\d(\d)?(\,\d(\d)?)?$/;
							pat2 = /^\d(3)$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value) && (document.getElementById(props[i].ControlId).value != '100' && document.getElementById(props[i].ControlId).value != '100,00' && document.getElementById(props[i].ControlId).value != '100.00' && document.getElementById(props[i].ControlId).value != '100,0' && document.getElementById(props[i].ControlId).value != '100.0'))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor correcto (Tem de ser entre 0 e 100. Ex: 25,34).";
								fails++;
							}
							break;
						case "Decimal":
							//pat = /^\d+([\.\,]\d(\d)?(\d)?)?$/;
							pat = /^\d+(\,\d(\d)?(\d)?)?$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' n&atilde;o tem um valor correcto.";
								fails++;
							}
							break;
						case "eMail":
							pat = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' tem de conter um email v&aacute;lido.";
								fails++;
							}
							break;
						case "DateTime":
							pat = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' do tipo data tem de ter o formato 'dd/mm/aaaa'.";
								fails++;
							}
							else
							{
								var parts = document.getElementById(props[i].ControlId).value.split('/');
								var converted = new Date(parts[1] + "/" + parts[0] + "/" + parts[2]);
								if(converted.getFullYear() > parts[2] || converted.getMonth() > (parts[1]-1))
								{
									message += "<LI>A data inserida no campo '" + props[i].ControlName + "' n&atilde;o &eacute; v&aacute;lida.";
									fails++;
								}
							}
							break;
						case "Time":
							pat = /^\d{1,2}\:\d{1,2}$/;
							if(!pat.test(document.getElementById(props[i].ControlId).value))
							{
								message += "<LI>O campo '" + props[i].ControlName + "' do tipo Hora tem de ter o formato 'hh:mm'.";
								fails++;
							}
							break;
						case "PwdCheck":
							var controls = props[i].ControlId.split('|');
							var controlsLbls = props[i].ControlName.split('|');
							if(document.getElementById(controls[0]).value != document.getElementById(controls[1]).value)
							{
								message += "<LI>Password original e confirma&ccedil;&atilde;o s&atilde;o diferentes.";
								fails ++;
							}
							break;
					}
				}
			}
		}
	}
	
	if(fails > 0)
	{
		showDialogMessage('Error', message + "</UL>");
		return false;
	}
	else return true;
}



function openWin(sPath, oId, sMode, iWidth, iHeight)
{
	//alert("I'm here!!!!");
	if(!iWidth) iWidth = 500;
	if(!iHeight) iHeight = 300;
	
	var xScreen = window.top.screenTop + 30;//(screen.width - 800) / 2;
	var yScreen = window.top.screenLeft + 30;//(screen.height - 600) /2;
	
	var sParams = "";
	if(sMode == "1" || sMode == "2")
		sParams = "dialogHeight: " + iHeight + "px; dialogWidth: " + iWidth + "px; dialogTop: px; dialogLeft: px; edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll: no;";
	else sParams = 'screenX=' + xScreen + ',left=' + xScreen + ',screenY=' + yScreen + ',top=' + yScreen + ',toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,fullscreen=0,width=' + iWidth + ',height=' + iHeight;
	
	if(oId > 0)
		sPath += "?oId=" + oId;
	//alert(sMode);

	switch (sMode)
	{
		case "1":	window.showModalDialog(sPath, null, sParams);		break;
		case "2":	window.showModelessDialog(sPath, null, sParams);	break;
		default:	window.open(sPath, "window_" + oId, sParams);		break;
	}
}

function openWin2(sPath, oId, sMode, iWidth, iHeight, btnToClick)
{
	//alert("second open win!!!");
	//alert(btnToClick);
	if(!iWidth) iWidth = 500;
	if(!iHeight) iHeight = 300;
	
	var xScreen = window.top.screenTop + 30;//(screen.width - 800) / 2;
	var yScreen = window.top.screenLeft + 30;//(screen.height - 600) /2;
	
	sParams = "dialogHeight: " + iHeight + "px; dialogWidth: " + iWidth + "px; dialogTop: px; dialogLeft: px; edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll: no;";
	
	if(sPath.indexOf('?') > 0)
		sPath += "&oId=" + oId;
	else sPath += "?oId=" + oId;

	if(window.showModalDialog(sPath, null, sParams))
	{
		//alert('here');alert(document.all[btnToClick].value);
		document.getElementById(btnToClick).click();
		//alert('clicked');
	}
}

function refreshOpener()
{
	try
	{
		window.opener.document.getElementById('refresh').click();
	}
	catch(ex)
	{}
}

function refreshQuit()
{
	try
	{
		window.opener.document.getElementById('refresh').click();
	}
	catch(ex)
	{}
	
	window.close();
}
