/**************************************************************************/
/* PRO CMS 3.0A  \inc\javas\validate.js                                   */
/* ===========                                                            */
/* Updated: 05/06/2008                                                    */
/* THIS SCRIPT REQUIRES PROTOTYPE                                         */
/* Copyright (c)2008 by Intersys Network                                  */
/* For more information visit: http://www.intersysnetwork.com             */
/*                                                                        */
/* This program is NOT a free software. You MUST NOT redistribute it      */
/* and/or modify it under any the terms without Intersys Network proper   */
/* authorization.                                                         */
/**************************************************************************/
var ISLOADED = 1;   /* */
var DATEFORMAT = 1; /* 1 = DD/MM/AAAA o 2 = MM/DD/AAAA */

/* VARS FOR MESSAGE FUNCTIONS */
var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

/* VALIDATION FUNCTIONS*/

/* VERIFY REQUIRED FIELD */
function validRequired(fieldName,errorMsg,hideTime,setFocus) {
	var result = true;
	if ($F(fieldName) == ""){
		inlineMsg(fieldName,errorMsg,hideTime,setFocus);
		result = false;
	}

 return result;
}

/* FUNCTIONS TO PROCCESS NUMBERS AND CHARACTERS STRINGS */
function allDigitsInt(str) {
	return inValidCharSet(str,"0123456789");
}
function allDigits(str) {
	return inValidCharSet(str,"0123456789.");
}
function allDigitsPercent(str) {
	return inValidCharSet(str,"0123456789.%");
}
function allDigitsChars(str) {
	return inValidCharSet(str,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-");
}
function allPhoneNumber(str) {
	return inValidCharSet(str,"0123456789()-+ ");
}
function inValidCharSet(str,charset){
	var result = true;
	// Note: doesn't use regular expressions to avoid early Mac browser bugs
	for (var i=0;i<str.length;i++) {
		if (charset.indexOf(str.substr(i,1))<0)	{
			result = false;
			break;
		}
	}

return result;
}

/* VERIFY VALID EMAIL ADDRESS */
function validEmail(fieldName,errorMsg,fieldRequired,hideTime,setFocus) {
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus))
		result = false;

	if (result) {
		if ($F(fieldName).length == 0) {
			result = true;
		} else if ( ($F(fieldName).length < 3) || !isEmailAddr($F(fieldName)) )  {
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}
/* VERIFY IF IT'S A CORRECT EMAIL */
function isEmailAddr(email) {
	var result = true;
	invalidChars = " /:,;"
	for (i=0; i<invalidChars.length; i++) {
		// does it contain any invalid characters?
		badChar = invalidChars.charAt(i)
		if (email.indexOf(badChar,0) > -1) {
			result = false;
		}
	}
	atPos = email.indexOf("@",1) // there must be one "@" symbol
	if (atPos == -1) {
		result = false;
	}
	if (email.indexOf("@",atPos+1) != -1) { // and only one "@" symbol
		result = false;
	}
	periodPos = email.indexOf(".",atPos)
	if (periodPos == -1) {   // and at least one "." after the "@"
		result = false;
	}
	if (periodPos+3 > email.length) {// must be at least 2 characters
		result = false;
	}


return result;
}

/* VERIFY VALID NUMBERS */
function validNum(fieldName,errorMsg,fieldRequired,hideTime,setFocus){
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)){ result = false;	}
 	if (result){
		if (!allDigits($F(fieldName))){
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* VERIFY VALID NUMBERS WITH/AND/OR PERCENT SIGN */
function validNumOrPercent(fieldName,errorMsg,fieldRequired,hideTime,setFocus){
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
	if (result){
		if (!allDigitsPercent($F(fieldName))){
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* VERIFY VALID NUMBERS AND CHARACTERS */
function validNumAndChars(fieldName,errorMsg,fieldRequired,hideTime,setFocus){
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
 	if (result){
		if (!allDigitsChars($F(fieldName))){
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* VERIFY VALID INTEGER */
function validInt(fieldName,errorMsg,fieldRequired,hideTime,setFocus) {
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
 	if (result){
 		var num = parseInt($F(fieldName),10);
 		if (isNaN(num))	{
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* VERIFY VALID ONLY NUMBER INTEGER */
function validIntNumber(fieldName,errorMsg,fieldRequired,hideTime,setFocus) {
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
 	if (result){
		if (!allDigitsInt($F(fieldName))){
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* VERIFY VALID PHONE NUMBERS */
function validPhoneNumber(fieldName,errorMsg,fieldRequired,hideTime,setFocus){
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
 	if (result){
		if (!allPhoneNumber($F(fieldName))){
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* COMPARE TWO FIELDS */
function compareFields(fieldNameA,fieldNameB,errorMsg,hideTime,setFocus) {
	var result = true;
	if ($F(fieldNameA) != $F(fieldNameB))	{
		inlineMsg(fieldNameB,errorMsg,hideTime,setFocus);
		result = false;
	}

 return result;
}

/* VERIFY VALID DATE */
function validDate(fieldName,errorMsg,fieldRequired,hideTime,setFocus) {
	var result = true;
	if (fieldRequired && !validRequired(fieldName,errorMsg,hideTime,setFocus)) { result = false; }
 	if (result){
 		var elems = $F(fieldName).split("/");
 		result = (elems.length == 3); /* only 3 parts */
 		if (result){
 			/* for format DD/MM/YYYY */
 			if ( DATEFORMAT == 1) {
	 			var day = parseInt(elems[0],10);
	  			var month = parseInt(elems[1],10);
	 			var year = parseInt(elems[2],10);
 			/* for format MM/DD/YYYY */
 			}else if (DATEFORMAT == 2) {
 				var month = parseInt(elems[0],10);
  				var day = parseInt(elems[1],10);
 				var year = parseInt(elems[2],10);
 			}
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
				 allDigits(elems[1]) && (day > 0) && (day < 32) &&
				 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
  		if (!result) {
			inlineMsg(fieldName,errorMsg,hideTime,setFocus);
			result = false;
		}
	}

 return result;
}

/* SHOWERROR ON GIVEN FIELD */
function showError(fieldName,errorMsg,hideTime,setFocus) {
	inlineMsg(fieldName,errorMsg,hideTime,setFocus);
	result = false;

 return result;
}

/*
 * MESSAGE & ERROR FUNCTIONS
 */
/*
 * BUILD OUT THE DIVS, SET ATTRIBUTES AND CALL THE FADE FUNCTION
 */
function inlineMsg(target,string,autohide,setfocus) {
	var msg;
	var msgcontent;
	if(!document.getElementById('msg')) {
		msg = document.createElement('div');
		msg.id = 'msg';
		msgcontent = document.createElement('div');
		msgcontent.id = 'msgcontent';
		document.body.appendChild(msg);
		msg.appendChild(msgcontent);
		msg.style.filter = 'alpha(opacity=0)';
		msg.style.opacity = 0;
		msg.alpha = 0;
	} else {
		msg = document.getElementById('msg');
		msgcontent = document.getElementById('msgcontent');
	}
	msgcontent.innerHTML = string;
	msg.style.display = 'block';
	var msgheight = msg.offsetHeight;
	var targetdiv = document.getElementById(target);
	if (setfocus == 1){
		targetdiv.focus();
	}
	var targetheight = targetdiv.offsetHeight;
	var targetwidth = targetdiv.offsetWidth;
	var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
	var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
	msg.style.top = topposition + 'px';
	msg.style.left = leftposition + 'px';
	clearInterval(msg.timer);
	msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
	if(!autohide) {
		autohide = MSGHIDE;
	}
	window.setTimeout("hideMsg()", (autohide * 1000));
}

/* HIDE THE FORM ALERT */
function hideMsg(msg) {
	var msg = document.getElementById('msg');
	if(!msg.timer) {
		msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
	}
}

/* FADE THE MESSAGE BOX */
function fadeMsg(flag) {
	if(flag == null) {
		flag = 1;
	}
	var msg = document.getElementById('msg');
	var value;
	if(flag == 1) {
		value = msg.alpha + MSGSPEED;
	} else {
		value = msg.alpha - MSGSPEED;
	}
	msg.alpha = value;
	msg.style.opacity = (value / 100);
	msg.style.filter = 'alpha(opacity=' + value + ')';
	if(value >= 99) {
		clearInterval(msg.timer);
		msg.timer = null;
	} else if(value <= 1) {
		msg.style.display = "none";
		clearInterval(msg.timer);
	}
}


/* CALCULATE THE POSITION OF THE ELEMENT IN
 * RELATION TO THE LEFT OF THE BROWSER
 */
function leftPosition(target) {
	var left = 0;
	if(target.offsetParent) {
		while(1) {
			left += target.offsetLeft;
			if(!target.offsetParent) {
				break;
			}
			target = target.offsetParent;
		}
	} else if(target.x) {
		left += target.x;
	}
 return left;
}

/* CALCULATE THE POSITION OF THE ELEMENT IN
 * RELATION TO THE TOP OF THE BROWSER WINDOW
 */
function topPosition(target) {
	var top = 0;
	if(target.offsetParent) {
		while(1) {
			top += target.offsetTop;
			if(!target.offsetParent) {
				break;
			}
			target = target.offsetParent;
		}
	} else if(target.y) {
		top += target.y;
	}
 return top;
}

/* PRELOAD THE ARROW */
if(document.images) {
	arrow = new Image(7,80);
	arrow.src = "/artwork/tripflow/msg_arrow.gif";
}