//VERLIB1.JS Module #1 Version 1.0.0
// Developed by Mateen Qazi for Vector Kinetics Inc.


// ============================ GLOBAL VARIABLES  ============================ 

var NORMAL=0;
var TEXT=1;
var BUTTON=2;
var RADIO=3;
var CHECK=4;
var TAREA=5;
var LIST=6;
var MLIST=7;
var PASSWORD=8;
var EMAIL=11;
var ZIP=12;

var TEXT_RL=1;				// Default required length for a text field.
var TAREA_RL=5;				// Default required length for a text area.
var LIST_DEF="default";			// Default selection for lists.
var BAD_CHARS=":;/\!%";
var EMAIL_BAD_CHARS="~#|\/?\&:;/\!%+()*^+ ";
var TAREA_BAD_CHARS="\"\`\\";
var childWindow;

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

//----------------------------------------------------------------------------------------
function On(obj) {
	obj.className="TableHL";
	}

//----------------------------------------------------------------------------------------
function Off(obj) {
	obj.className="TableEA";
	}

//----------------------------------------------------------------------------------------
function OffLB(obj) {
	obj.className="TableLB";
	}


//----------------------------------------------------------------------------------------
function js_Submit(form,name) {
	if (fn_Verify(form,name)) {
		form.from.value=name;
		form.submit();
		}
	else {
		return false;
		}
	}


//----------------------------------------------------------------------------------------
function FocusUser() { 
	document.forms[0].p_req_User.focus();
	}


//----------------------------------------------------------------------------------------
function BadUser() { 
	alert("Bad UserName or Password");
	document.forms[0].p_req_User.focus();
	}


//----------------------------------------------------------------------------------------
function js_Send(form,name) {
	form.from.value=name;
	form.submit();
}


//----------------------------------------------------------------------------------------
function SendFile(form,name) {

	if ((name=="UPLOAD_FILE") && (form.UploadFile.value.length < 4)) {
		alert("Please choose a file first.");
		form.UploadFile.focus();
		return;
		}

	form.from.value=name;
	form.FileName.value=form.UploadFile.value;
	form.submit();
}


//----------------------------------------------------------------------------------------
function SpecificCheck(form,name) {
	form.t_Broker.focus();
	if (name=="ADD_BROKER" && form.t_Broker.value=="") {
		alert("Please Provide a valid Broker Name.");
		form.t_Broker.focus();
		return(-1);
		}

}


//----------------------------------------------------------------------------------------
function closePopUp() {
	if (childWindow && childWindow.open && !childWindow.closed) {
		childWindow.close();
		}
}

//----------------------------------------------------------------------------------------
function popUp(url,state) {

	var xMax;
	var yMax;

	if (document.all) {
		xMax=screen.width;
		yMax=screen.height;
		}
	else {
		if (document.layers) {
			xMax=window.outerWidth;
			yMax=window.outerHeight;
			}
		else {
			xMax=640;
			yMax=480;
			}
		}

	var xOffset=(xMax-200)/2;
	var yOffset = (yMax-200)/2;

	switch (state) {
		case 0: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=300,height=215,screenX='+xOffset+',screenY='+yOffset+',top='+yOffset+',left='+xOffset+'');
				break;
		case 1: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=300,height=400');
				break;
		case 2: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=300,height=400');
				break;
		case 3: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=400,height=500');
				break;
		case 4: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=400,height=500');
				break;
		case 5: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=425,height=500');
				break;
		case 6: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=450,height=250');
				break;
		case 7: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=450,height=250');
				break;
		case 8: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=550,height=600');
				break;
		case 9: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=550,height=525');
				break;
		case 10: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=300,height=200');
				break;
		case 11: childWindow=open(url,"popUpWindow",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=350,height=250');
				break;
			}

	childWindow.focus();
	if (childWindow.opener == null) {
		childWindow.opener = self;
		}
}


//----------------------------------------------------------------------------------------
function fn_Verify(form,from) {

var val=0;
var i=0;
var form_len=form.length;
var temp;

for (i=0;i<form_len;i++) {
	f_name=form.elements[i].name;

	if (fn_ParseType(f_name) == TEXT) {
		val=form.elements[i].value;
		if (!fn_CheckRequired(TEXT,f_name,val,TEXT_RL)) {
			form.elements[i].focus();
			alert("You forgot to fill a required filed.");
			return false;
			}

		if (!fn_CheckIfEmail(f_name,val)) {
			form.elements[i].focus();
			alert("Not a valid e-mail address.");
			return false;
			}

		if (!fn_CheckIfUSZip(f_name,val)) {
			form.elements[i].focus();
			alert("Does not seem to be a correct US Zip Code.");
			return false;
			}

		if (!fn_CheckBadChars(f_name,val,NORMAL)) {
			form.elements[i].focus();
			temp="Your input value '"+val.toUpperCase()+"' Contains illegal characters."
			alert(temp);
			return false;
			}

		if (!fn_CheckIfPhone(f_name,val)) {
			form.elements[i].focus();
			alert("Bad Phone Number.");
			return false;
			}	

		if (!fn_CheckIfNumber(f_name,val)) {
			form.elements[i].focus();
			alert("Use Numbers Only.");
			return false;
			}

		if (!fn_CheckIfCreditCard(f_name,val)) {
			form.elements[i].focus();
			alert("Not a valid Credit Card Number.");
			return false;
			}
		}

	if (fn_ParseType(f_name) == PASSWORD) {
		if (form.elements[i].value.length < 4 || form.elements[i].value.charAt(0) > 0) {
			form.elements[i].focus();
			alert("This field is required.\nHas to be at least 4 characters.\nCannot start with a number.");
			return false;
			}
		}

	if (fn_ParseType(f_name) == CHECK) {
		if (!fn_CheckRequired(CHECK,f_name,0,0) && !form.elements[i].checked) {
			form.elements[i].focus();
			alert("You forgot to check a required item.");
			return false;
			}
		}

	if (fn_ParseType(f_name) == TAREA) {
		val=form.elements[i].value;
		if (!fn_CheckBadChars(f_name,val,TAREA)) {
			alert("There are bad characters in this field.");
			form.elements[i].focus();
			return false;
			}
		if (!fn_CheckRequired(TAREA,f_name,val,TAREA_RL)) {
			form.elements[i].focus();
			alert("You forgot to fill a required field.");
			return false;
			}
		}


	if (fn_ParseType(f_name) == LIST) {        	
		val=form.elements[i].options[form.elements[i].options.selectedIndex].value;
		if (!fn_CheckRequired(LIST,f_name,val,LIST_DEF)) {
			form.elements[i].focus();
			alert("You forgot to select a value.");
			return false;
			}
		}

	if (fn_ParseType(f_name) == MLIST) {
		var cnt=form.elements[i].length;
		var j=0;
		var k=0;
		for (j=0;j<cnt;j++) {
			if (form.elements[i].options[j].selected)
				k++;
				}

		if (k==0 && !fn_CheckRequired(MLIST,f_name)) {
			form.elements[i].focus();
			alert("You forgot to select a value.");
			return false;
			}
		}
	}

	if (from=="PROCESS_SIGNUP" || from=="UPDATE_PROFILE" || from=="UPDATE_ACCOUNT") {
		if (form.l_req_State.options[form.l_req_State.options.selectedIndex].value!="OU" && form.l_req_Country.options[form.l_req_Country.options.selectedIndex].value!="US") {
			alert("Please Select the 'Non US State' Option, or Correct Your Country Selection");
			form.l_req_State.focus();
			return false;
			}
		if (form.l_req_State.options[form.l_req_State.options.selectedIndex].value=="OU" && form.l_req_Country.options[form.l_req_Country.options.selectedIndex].value=="US") {
			alert("Please Select the Appropriate Country, or Correct Your State Selection");
			form.l_req_Country.focus();
			return false;
			}
		if (form.l_req_State.options[form.l_req_State.options.selectedIndex].value=="OU" && form.l_req_Country.options[form.l_req_Country.options.selectedIndex].value!="US" && form.t_NonUSState.value.length<1) {
			alert("Please provide a State or Province name, or the closest thing to it.");
			form.t_NonUSState.focus();
			return false;
			}

		}

	if (from=="NEW_REQUEST_EX" || from.indexOf("UPDATE_REQUEST_")!=-1) {
		var message;
		if (form.l_req_Type.options[form.l_req_Type.options.selectedIndex].value=="Rental" && (form.l_UntilDate.options[form.l_UntilDate.options.selectedIndex].value=="default" || form.l_UntilMonth.options[form.l_UntilMonth.options.selectedIndex].value=="default" || form.l_UntilYear.options[form.l_UntilYear.options.selectedIndex].value=="default")) {
			if (form.l_UntilDate.options[form.l_UntilDate.options.selectedIndex].value=="default") {
				message="You have selected the Rental option.\nPlease Select a Correct 'Rental Until' Date.";
				form.l_UntilDate.focus();
				}
			else if (form.l_UntilMonth.options[form.l_UntilMonth.options.selectedIndex].value=="default") {
				message="You have selected the Rental option.\nPlease Select a Correct 'Rental Until' Month.";
				form.l_UntilMonth.focus();
				}
			else if (form.l_UntilYear.options[form.l_UntilYear.options.selectedIndex].value=="default") {
				message="You have selected the Rental option.\nPlease Select a Correct 'Rental Until' Year.";
				form.l_UntilYear.focus();
				}
			alert(message);
			return false;
			}
		}

return true;
}


//----------------------------------------------------------------------------------------
function fn_ParseType(f_name) {
var ret=0;

	tag=f_name.substring(0,2);
	switch (tag) {
	case "t_": ret=1;
			break;
	case "b_": ret=2;
			break;
	case "r_": ret=3;
			break;
	case "c_": ret=4;
			break;
	case "a_": ret=5;
			break;
	case "l_": ret=6;
			break;
	case "m_": ret=7;
			break;
	case "p_": ret=8;
			break;
		}

return ret;
}


//----------------------------------------------------------------------------------------
function fn_CheckRequired(f_type,f_name,f_value,f_req) {

	if (f_type==TEXT && f_name.indexOf("_req_")!=-1 && f_value.length < f_req) {
		return false;
		}
	else if (f_type==TAREA && f_name.indexOf("_req_")!=-1 && f_value.length < f_req) {
		return false;
		}
	else if (f_type==LIST && f_name.indexOf("_req_")!=-1 && f_value==f_req) {
		return false;
		}
	else if (f_type==CHECK && f_name.indexOf("_req_")!=-1 ) {
		return(false);
		}
	else if (f_type == MLIST && f_name.indexOf("_req_") != -1) {
        return false;
		}
	else if (f_type == PASSWORD && f_name.indexOf("_req_") != -1) {
        return false;
		}

return true;
}


//----------------------------------------------------------------------------------------
function fn_CheckCard(number) {

	var checksum = 0;
	for (var i = number.length - 1; i >= 0; i--) {
		var isOdd = ((number.length - i) % 2 != 0) ? true : false;
		digit = number.charAt(i);
		
		if (isOdd) {
			checksum += parseInt(digit);
			}
		else {
			var evenDigit = parseInt(digit) * 2;
			if (evenDigit >= 10) checksum += 1 + (evenDigit - 10);
			else checksum += evenDigit;
			}
		}

return (checksum%10);
}


//----------------------------------------------------------------------------------------
function fn_CheckIfCreditCard(f_name,f_value) {

if (f_name.indexOf("_cc_") != -1) {
	if (!fn_IsNumeric(f_value)) {
		return false;
		}

	if (fn_CheckCard(f_value)) {
		return false;
		}
	}

return true;
}


//----------------------------------------------------------------------------------------
function fn_CheckIfUSZip(f_name,f_value) {

if (f_name.indexOf("uszip") != -1) {
	var  N_Test=parseInt(f_value);
	var S_Test=""+N_Test;
	N_Test=S_Test.length;

	if ((parseInt(f_value) < 5) || (N_Test < 5)) 
		return false;
	else
		return true;
	}

return true;
}


//----------------------------------------------------------------------------------------
function fn_IsNumeric(number) {

	var i=0;
	var j=0;
	var num="";
	var IsNum=0;
	var slen=number.length;

	for (i=0;i<slen;i++) {
		num=number.charAt(i);
		for (j=0;j<10;j++) {
			if ((parseInt(num) == j) || (num == "-")) {
				IsNum=1;
				}
			}
		if (IsNum) {
			IsNum=0;
			}
		else {
			return 0;
			}
		}   

return 1;
}


//----------------------------------------------------------------------------------------
function fn_CheckIfPhone(f_name,f_value) {

if (f_name.indexOf("phone") != -1) {
   if (!fn_IsNumeric(f_value)) {
      return false;
      }
   }

return true;
}


//----------------------------------------------------------------------------------------
function fn_CheckIfNumber(f_name,f_value) {

if (f_name.indexOf("_num_") != -1) {
   if (!fn_IsNumeric(f_value)) {
      return false;
      }
   }

return true;
}


//----------------------------------------------------------------------------------------
function fn_CheckIfEmail(f_name,f_value) {
var lf_value=f_value;
var lf_name=f_name;
var f_len=lf_value.length;
var i=0;
var atCnt=0;
var str_temp="";
var after_dot="";


if (lf_name.indexOf("email") != -1) {

	var atPos=lf_value.indexOf("@"); 
	if (atPos == -1)
		return false;

	if (atPos == 0) 
		return false;

	if ((lf_value.charAt(atPos+1) == ".") || (lf_value.charAt(atPos-1) == ".")) 
		return false;
    
	for (i=0;i<f_len;i++) {
		if (lf_value.charAt(i) == "@") {
			atCnt++;
			if (atCnt > 1)
			return false;
			}
		}

	before_At=lf_value.substring(0,atPos);
	var balen=before_At.length; 
	var dotPos_bat=before_At.indexOf("."); 

	if (dotPos_bat == 0)
		return false;

	if (dotPos_bat != -1) {
		while (before_At.indexOf(".") != -1) {
			before_At=before_At.substring(dotPos_bat+1,atPos);    
			dotPos_bat=before_At.indexOf("."); 
			if ((before_At.charAt(dotPos_bat+1) == "@") || (before_At.charAt(dotPos_bat-1) == "@") || (before_At.charAt(dotPos_bat+1) == ".") || (before_At.charAt(dotPos_bat-1) == "."))
				return false;
			}
		}


	var dotPos=lf_value.indexOf(".",atPos+1);
	if (dotPos == -1)
		return false;

	if (dotPos == 0)
		return false;

	if ((lf_value.charAt(dotPos+1) == "@") || (lf_value.charAt(dotPos-1) == "@")) 
		return false;

	if ((lf_value.charAt(dotPos+1) == ".") || (lf_value.charAt(dotPos-1) == ".")) 
		return false;
        
	var space=lf_value.indexOf(" ");   
	if (dotPos == -1)
		return false;

	after_dot=lf_value.substring(dotPos,f_len);
	if (after_dot.indexOf("@") != -1)
		return false;

	var adlen=after_dot.length; 
	after_dot=after_dot.substring(1,adlen);    

	if (after_dot.indexOf(".") != -1) {
		dotPos=after_dot.indexOf(".")+1;
		while (after_dot.indexOf(".") != -1) {
			after_dot=after_dot.substring(dotPos,adlen);    
			adlen=after_dot.length;
			dotPos=after_dot.indexOf(".")+1; 
			}
		}

	if (after_dot.length < 2)
		return false;

	if (!fn_CheckBadChars(lf_name,lf_value,EMAIL))
		return false;
	}
return true;
}


//----------------------------------------------------------------------------------------
function fn_CheckBadChars(f_name,f_value,ent) {
var lf_value=f_value;
var lf_name=f_name;
var i=0;

if (ent == TEXT) {
	var f_len=BAD_CHARS.length;
	for (i=0;i<f_len;i++) {
		bad_char=BAD_CHARS.charAt(i);
		if (f_value.indexOf(bad_char) != -1)
			return false;
		}
	}

if (ent == EMAIL) {
	var f_len=EMAIL_BAD_CHARS.length;
	for (i=0;i<f_len;i++) {
		bad_char=EMAIL_BAD_CHARS.charAt(i);
		if (f_value.indexOf(bad_char) != -1)
			return false;
		}
	}

if (ent == TAREA) {
	var f_len=TAREA_BAD_CHARS.length;
	for (i=0;i<f_len;i++) {
		bad_char=TAREA_BAD_CHARS.charAt(i);
		if (f_value.indexOf(bad_char) != -1)
			return false;
		}
	}

return true;
}


//----------------------------------------------------------------------
function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){   
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}

//----------------------------------------------------------------------
function stripCharsInBag(s, bag){
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

//----------------------------------------------------------------------
function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

//----------------------------------------------------------------------
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

//----------------------------------------------------------------------
function isDate(dtStr){

	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

//----------------------------------------------------------------------
function ValidateDOB(form) {

	var date=form.l_req_BirthDate.options[form.l_req_BirthDate.options.selectedIndex].value;
	var month=form.l_req_BirthMonth.options[form.l_req_BirthMonth.options.selectedIndex].value;
	var year=form.l_req_BirthYear.options[form.l_req_BirthYear.options.selectedIndex].value;
	var dob=month+"/"+date+"/"+year;

	if (isDate(dob)==false){
		form.l_req_BirthDate.focus();
		return false;
		}
	return true;
}


//----------------------------------------------------------------------
function AddVariable(form,name) {

	var y=0;
	var k=0;
	var myopt="";
	var flag=1;
	var tie=form.l_TieVars.options[form.l_TieVars.options.selectedIndex].value;
	var formvar=form.t_VarName.value;
	var formval=form.t_VarValue.value;
	var tiedvar=tie+"="+formvar+"="+formval;

	for (var y=0;y<form.m_FormVars.length;y++){
		myopt=form.m_FormVars.options[y];
		if (myopt.value==tiedvar){
			flag=0;
			k=y;
			}
		}

	if (flag){
		form.m_FormVars.options[form.m_FormVars.length]=new Option(tiedvar,tiedvar,0,0); 
		form.l_TieVars.selectedIndex=0;
		form.t_VarName.value="";
		form.t_VarValue.value="";
		}
	else {
		alert("This variable set already exists");
		return;
		}
}

//----------------------------------------------------------------------
function RemoveVariable(form,name) {

	var cnt=form.m_FormVars.length;
	var j=0;
	var k=0;

	for (j=0;j<cnt;j++) {
		if (form.m_FormVars.options[j].selected) {
			k++;
			}
		}

	if (k==0) {
		form.m_FormVars.focus();
		alert("You have to select an item/items to delete frist.");
		return false;
		}

	for (j=cnt-1;j>0;j--) {
		if (form.m_FormVars.options[j].selected) {
			form.m_FormVars.options[j]=null;
			}
		}
}


//----------------------------------------------------------------------
function PrepFV(form) {

	var i=0;
	var formvar="";
	for (i=1;i<form.m_FormVars.length;i++) {
		formvar+=form.m_FormVars.options[i].value+"|";
		}

	form.FormVars.value=formvar;
}
