
// Author:   Mohammed A. Khan
// Project:  Design Zone

var monthDays = new Array(12);
monthDays[0] = "31";    // Jan
monthDays[1] = "28";    // Feb
monthDays[2] = "31";    // Mar
monthDays[3] = "30";    // Apr
monthDays[4] = "31";    // May
monthDays[5] = "30";    // Jun
monthDays[6] = "31";    // Jul
monthDays[7] = "31";    // Aug
monthDays[8] = "30";    // Sep
monthDays[9] = "31";    // Oct
monthDays[10] = "30";   // Nov
monthDays[11] = "31";   // Dec

//set the Project End Date. It adds nbMonth to the Project Start Date. 
function setProjectEndDate(nbMonths){
	form=document.forms.NewProjectRequest;	
	if (validateDate(form.ProjectStartDate)){
		startdate=new Date(form.ProjectStartDate.value);
		enddate=startdate;
		enddate.setMonth(enddate.getMonth()+nbMonths);
		month=enddate.getMonth()+1;
		day=enddate.getDate();
		year=enddate.getFullYear();
		if (month<10) month="0"+month;
		if (day<10) day="0"+day;
		form.ProjectEndDate.value=month+"/"+day+"/"+year;	
	}
}


function isSelected2(choice)
{
   var done = false;
   
   if(typeof(choice) != "undefined")
   {
      if((choice[0] != null) && (choice[1] != null))
      {
         if(!(choice[0].checked) && !(choice[1].checked))
         {
            alert("Please choose an option.");
            choice[0].select();
            choice[0].focus();
         }
         else
         {
            done = true;
         }
      }
   }
   
   return(done);
}

function isSelected3(choice)
{
   var done = false;
   
   if(typeof(choice) != "undefined")
   {
      if((choice[0] != null) && (choice[1] != null) && (choice[2] != null))
      {
         if(!(choice[0].checked) && !(choice[1].checked) && !(choice[2].checked))
         {
            alert("Please choose an option for each agreement under \'Engagement Sponsor Prerequisites Check List\'");
            choice[0].select();
            choice[0].focus();
         }
         else
         {
            done = true;
         }
      }
   }
   
   return(done);
}

function validateAID(uid)
{
   var done = false;

   if(typeof(uid) != "undefined")
   {
      if(uid.value.length == 8)
      {
         var regex = /^a[0-9a-z]{7}$/i
      
         if(uid.value.match(regex))
         {
            done = true;
         }
         else
         {
            alert("AID must start with \'a\'");
         }
      }
      else
      {
         alert("AID must be 8 characters");         
      }
      
      if(!done)
      {
         uid.select();
         uid.focus();
      }
   }
      
   return(done);
}

function validateAIDXID(uid)
{
   var done = false;

   if(typeof(uid) != "undefined")
   {
      if(uid.value.length == 8)
      {
         var regex = /^[ax][0-9a-z]{7}$/i
         
         if(uid.value.match(regex))
         {
            done = true;
         }
         else
         {
            alert("AID / XID must start with \'a\' or \'x\'");
         }
      }
      else
      {
         alert("AID / XID must be 8 characters");         
      }
      
      if(!done)
      {
         uid.select();
         uid.focus();
      }
   }
      
   return(done);
}

function validateEmail(emailId)
{
   var done = false;
   
   var regex = /\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\.info)|(\.sex)|(\.biz)|(\.aero)|(\.coop)|(\.museum)|(\.name)|(\.pro)|(\..{2,2}))$)\b/gi

   if(typeof(emailId) != "undefined")
   {
      if(!emailId.value.match(regex))
      {
         alert("Please enter a valid email address");
      }
      else
      {
         done = true;
      }

      if(!done)
      {
         emailId.select();
         emailId.focus();
      }
   }
      
   return(done);
}

function isLeapYear(year)
{
   var done = false;
   
   if((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)))
   {
      done = true;
   }
   
   return(done);
}

function validateDate(date)
{
   var done = false;

   if(typeof(date) != "undefined")
   {   
      if(date.value != "")
      {
         if(date.value.length == 10)
         {
            var mm = date.value.substring(0, 2);
            var dd = date.value.substring(3, 5);
            var yyyy = date.value.substring(6);
            var d = new Date();
            
            if((mm > 0 && mm < 13) && (dd > 0 && dd < 32) && (yyyy >= d.getFullYear()))
            {
               var t1 = Date.UTC(yyyy, mm - 1, dd, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds())
               var t2 = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds())
               
               if(t1 >= t2)
               {
                  // Leap Year Feb 29 days
                  if((mm == 2) && (dd == 29) && isLeapYear(yyyy))
                  {
                     done = true;
                  }
                  else if((dd > monthDays[mm - 1]))
                  {
                     var days = monthDays[mm - 1];
                     
                     // Leap Year Feb 29 days
                     if((mm == 2) && isLeapYear(yyyy))
                     {
                        days++;
                     }

                     alert("The entered month has " + days + " days. Please re-enter");
                  }
                  else
                  {
                     done = true;         
                  }
               }
               else
               {  date.select();
         			date.focus();
					done=confirm("The date you have entered is in the past. Please confirm.");
               }
            }
            else
            {
              if((mm > 0 && mm < 13) && (dd > 0 && dd < 32) && (yyyy < d.getFullYear())){
              	date.select();
         		date.focus();
              	done=confirm("The date you have entered is in the past. Please confirm.");
              }
              else alert("The date you have entered is invalid. Please re-enter");
            }
         }
         else
         {
            alert("Please enter a date in the following format (mm/dd/yyyy)");
         }   
      }
      else
      {
         alert("Please enter a date (mm/dd/yyyy)");
      }
 
      if(!done)
      {
         date.select();
         date.focus();
      }
   }
      
   return(done);
}

function validatePhone(phone)
{
   var done = false;

   // Phone number can contain(regular expression): 0-9, Space, +, (), -
   var regex = /^[0-9 +()-]+$/

   if(typeof(phone) != "undefined")
   {   
      if(phone.value.match(regex))
      {
         done = true;
      }
      else
      {
         alert("Please enter a phone number");
      }

      if(!done)
      {
         phone.select();
         phone.focus();
      }
   }
      
   return(done);
}

function validateFax(phone)
{
   var done = false;

   // Phone number can contain(regular expression): 0-9, Space, +, (), -
   var regex = /^[0-9 +()-]+$/

   if(typeof(phone) != "undefined")
   {   
      if((phone.value == "") || (phone.value.match(regex)))
      {
         done = true;
      }
      else
      {
         alert("Please enter a phone number");
      }

      if(!done)
      {
         phone.select();
         phone.focus();
      }
   }
      
   return(done);
}

function isEmpty(empty){
   var done = false;
   
   if(typeof(empty) != "undefined")   {   
      if(empty.value == "")      {
         alert("Please enter a value");
         empty.focus();
      }
      else      {
         done = true;
      }
   }
      
   return(done);
}

function isSelected(empty){
	var done=(empty.length>1);
	if (!done){
		alert("Please add at least one user");
		empty.focus();
	}
	return(done);
}

function isNumber(no){
   var done = false;

   // Number can contain(regular expression): 0-9
   var regex = /^\d+$/

   if(typeof(no) != "undefined")
   {   
      if(no.value.match(regex))
      {
         done = true;
      }   
      else
      {
         alert("Please enter a number");
      }

      if(!done)
      {
         no.select();
         no.focus();
      }
   }
   
   return(done);
}

function isDropSelected(drop)
{
   var done = false;
   if(typeof(drop) != "undefined")
   {   
      var option = drop.options[drop.selectedIndex].text;
      if(option.indexOf("Please Choose One")!=-1)
      {   
         alert("Please choose one option");
         drop.focus();
      }
      else
      {
         done = true;
      }
   }
   else {done=true;}
   return(done);
}

function validateUserIdsTextBoxAllowNone(userIds)
{
   var done = false;

   var regex = /^([ax][0-9a-z]{7}\s*(\s|,)\s*)*([ax][0-9a-z]{7}\s*)$/i

   if(typeof(userIds) != "undefined")
   {   
      if((userIds.value == "") || (userIds.value.match(regex)))
      {
         done = true;
      }
      else
      {
         alert("Please enter user Ids: id1, id2, ...");
      }

      if(!done)
      {
         userIds.select();
         userIds.focus();
      }
   }
   
   return(done);
}

function validateUserIdsTextBox(userIds)
{
   var done = false;

   var regex = /^([ax][0-9a-z]{7}\s*(\s|,)\s*)*([ax][0-9a-z]{7}\s*)$/i

   if(typeof(userIds) != "undefined")
   {   
      if(userIds.value.match(regex))      
      {
         done = true;
      }
      else
      {
         alert("Please enter user Ids: id1, id2, ...");
      }

      if(!done)
      {
         userIds.select();
         userIds.focus();
      }
   }
   
   return(done);
}


/*This function selects all the UsersIds in the SELECT object 
  so all the UserIDs are sent with the form.
  This function should be called before each SUBMIT. */
function selectUsersID(formName){
	for (i=1; i<document.forms[formName].elements["UsersID[]"].options.length; i++)
		document.forms[formName].elements["UsersID[]"].options[i].selected=true;
}

//This function check that the project name does not already exists 
function checkProjectName(formName,project){
	var done = isEmpty(project);
	var projects=document.forms[formName].elements["ProjectsName"];
	
	/*it checks if the project filled by the user does not already exists.
	  It makes sense only if the user is adding a project to an existing engagement,
	  so only if the object that display all the project name is within the form
	 */
	if ((typeof(projects)!="undefined") && done){
		for (i=1; i<projects.options.length; i++)
			if (projects.options[i].value.toUpperCase()==project.value.toUpperCase()) done=false;
		if (!done) alert('This project name already exists within the engagement');
		 
         }
         if (!done){
         	project.select();
         	 project.focus();
	}
        return done
}

// This function do some tasks that are mandatory to be done before the form is reloaded and there is multiple select within
function reloadForm(formName){
	selectUsersID(formName);
	document.forms[formName].submit()	
}

function submitNewEngagementForm(){
   var done = false;	   
  var form;
  form=document.forms["NewEngagementRequest"];
   done = isDropSelected(form.EngagementSiteChoice) &&
          isEmpty(form.EngagementAlias) &&
          isEmpty(form.ExternalPartnerCompanyName) &&
          isEmpty(form.ExternalPartnerAddressLine1) &&
          isEmpty(form.ExternalPartnerCity) &&
          isEmpty(form.ExternalPartnerCountry) &&
          isEmpty(form.ExternalPartnerLastName) &&
          isEmpty(form.ExternalPartnerFirstName) &&
          validatePhone(form.ExternalPartnerPhone) &&
          validateFax(form.ExternalPartnerFax) &&
          validateEmail(form.ExternalPartnerEmail);
         
   if (done) form.action="new_project_request.php";
   return(done);
}

function submitNewProjectForm(){
   var done = false;
   formName="NewProjectRequest";   
   selectUsersID("NewProjectRequest");
   
   done = validateAID(document.forms[formName].SponsorEmployeeNumber) &&
          
          validateAID(document.forms[formName].AdminEmployeeNumber) &&
          
          checkProjectName(formName,document.forms[formName].ProjectName) &&
          isEmpty(document.forms[formName].ProjectObjectives) &&
          isDropSelected(document.forms[formName].SBE) &&
          isDropSelected(document.forms[formName].SBE1) &&
          isEmpty(document.forms[formName].SBE1Location);
          
         //the external partner site is not mandatory if one has been asscoiated from another project
         //but, even if a project has been selected, if the user starts to fill site information the other field needs to be checked.
          if ((document.forms[formName].NumberOfSitesAssociated.value==0) || (document.forms[formName].NumberOfSitesAssociated.value>0 && document.forms[formName].SiteName.value!="") )
          	 done = done && checkExternalSite(document.forms[formName]);
          	 
          done= done && isNumber(document.forms[formName].NumberOfTIUsers) &&
          isNumber(document.forms[formName].NumberOfPartnerUsers)
   		if (!document.forms[formName].elements["addUsersLater"].checked) {
         	done=done && isSelected(document.forms[formName].elements["UsersID[]"]);
   		}
   		if (!document.forms[formName].elements["addToolsLater"].checked) {
         	done=done && oneToolSelectedAtLeast(document.forms[formName])
				 &&	isSelected2(document.forms[formName].licenseApproval);         	
   		}
   		
		done= done && validateAIDXID(document.forms[formName].EDAEmployeeNumber) &&
			isSelected2(document.forms[formName].ClearCaseRequiredChoice) &&
			isSelected2(document.forms[formName].ClearQuestRequiredChoice) &&
			isSelected2(document.forms[formName].WTSRequiredChoice) &&
			isSelected2(document.forms[formName].LinuxRequiredChoice) &&
			
			isSelected2(document.forms[formName].SolarisRequiredChoice);
		if (document.forms[formName].LinuxRequiredChoice[0].checked) 
			done=done && isNumber(document.forms[formName].LinuxNumberOfCPU);
		if (document.forms[formName].SolarisRequiredChoice[0].checked) 			
			done=done && isNumber(document.forms[formName].SolarisNumberOfCPU);
          
          //isDropSelected(document.forms[formName].ZoneTypeNeededChoice);
         done = done && validateDate(document.forms[formName].ProjectStartDate) &&
          validateDate(document.forms[formName].ProjectEndDate);
          if (done) {
				formValidated();
				document.forms[formName].action="process_new_project_request.php";
          }

   return(done);
}

function draftNewProjectForm(){
   	var done = false;
   	formName="NewProjectRequest";   
   	selectUsersID("NewProjectRequest");
	done=checkProjectName(formName,document.forms[formName].ProjectName);
	if (done){
		 document.forms[formName].action="process_new_project_request.php?save=draft";
		 document.forms[formName].submit();
	}
	return done;
}	

function submitUserManagementForm()
{
	var done = false;
   	//is it a ADD USER request?
	if (typeof(document.forms["UserManagementRequest"].elements["UsersID[]"])!="undefined"){
		selectUsersID("UserManagementRequest");
	    //yes, check one user has been added at least
	   	done = isSelected(document.forms["UserManagementRequest"].elements["UsersID[]"]) ;
	}
	else{
	   		done=oneCheckBoxAtLeast(document.forms["UserManagementRequest"]);
	   	
		if (!done) {alert("Please, select at least one user.")};
	}
	if (done) {
				formValidated();
				document.forms["UserManagementRequest"].action="process_user_management.php";
	}
	return(done);
}

function submitUserDelegationForm()
{
	var done = false;
	done =validateAIDXID(document.forms["UserDelegation"].AddUserByID);
	if (done) {
			formValidated();
			document.forms["UserDelegation"].action="task_update.php";
	}
	return(done);
}


function submitToolManagementForm()
{
	var done = false;
	done=oneToolSelectedAtLeast(document.forms["ToolManagementRequest"]);
	if(typeof(document.forms["ToolManagementRequest"].licenseApproval) != "undefined") done=done &&	isSelected2(document.forms["ToolManagementRequest"].licenseApproval);

	if (done) {
			formValidated();
			document.forms["ToolManagementRequest"].action="process_tool_management.php";
	}
	return(done);
}

/*return true if 1 check box at least is checked*/
function oneToolSelectedAtLeast(form){
	var done = false;
	var saveField="";
   	for (i=0;i<=form.length;i++){
   		if(typeof(form.elements[i])=="object"){
   			//get the first tool field to do a focus on it if one tool has not been selected
   			if (form.elements[i].name.substring(0,5)=="Tool_" && saveField=="") {saveField=form.elements[i]};
   			if (form.elements[i].checked && form.elements[i].name.substring(0,5)=="Tool_") {done=true;}
		}
   	}
   	if (!done) {
   	 	saveField.select();
        saveField.focus();
   		alert("Please, select at least one Tool.")};
   	return done;
}

/*return true if 1 check box at least is checked*/
function oneCheckBoxAtLeast(form){
	var done = false;
   	for (i=0;i<=form.length;i++){
   		if(typeof(form.elements[i])=="object"){
   			if (form.elements[i].checked) {done=true;}
		}
   	}
   	if (!done) {alert("Please, select at least one Item.")};
   	return done;
}


/*return true if 1 check box is checked*/
function oneCheckBoxOnly(form){
	var done = false;
	var nb=0;
	
   	for (i=0;i<=form.length;i++){
   		if(typeof(form.elements[i])=="object"){
   			if (form.elements[i].checked) {nb++}
		}
   	}
   	done=(nb==1);

   	if (nb==0) {alert("Please, select one external site.")};
   	if (nb>1) {alert("Please, select ONLY one external site.")};
   	
   	return done;
}

function checkContactsInfo(form){
	done=true;
	numberOfContacts=form.numberOfContacts.value;
    for(i=0;i<numberOfContacts;i++){
          done=done && isEmpty(form.elements["ContactLastName"+i])&&
          isEmpty(form.elements["ContactFirstName"+i])&&
          validatePhone(form.elements["ContactPhone"+i])&&
          validateEmail(form.elements["ContactEmail"+i]);
    }    
    return done;
}
//check site info and contacts info
function checkExternalSite(form){
	done= isEmpty(form.SiteName) &&
          isEmpty(form.SiteAddressLine1) &&
          isEmpty(form.SiteCity) &&
          isEmpty(form.SiteCountry) &&
          checkContactsInfo(form);
    return done;
}

function submitCCReplicationManagementForm(){
	var done = true;
	var form;
	form=document.forms["CCReplicationManagementRequest"];
	if (typeof(form.Vob)=="undefined") {
		//the user wants to remove a replication
		done=oneCheckBoxAtLeast(form);
	}
	else {
		//the user wants to add a new replication
		done=done && isEmpty(form.elements["Vob"])&&
		    isSelected2(form.elements["From"]);
		//if it is a replication from DZ to TI, 2 other fields are mandatory
		if (form.elements["From"][1].checked){
			done = done && isEmpty(form.elements["TargetOwner"]) &&
				isEmpty(form.elements["AllowedVobOwner"]);
		}  
		done=done && isEmpty(form.elements["TargetUnixGroup"]);

	}
	if (done) {
				formValidated();
				form.action="process_ccreplication_management.php";
	}
    return done;
}

function submitNonCCReplicationManagementForm(){
	var done = true;
	var form;
	form=document.forms["NonCCReplicationManagementRequest"];
	if (typeof(form.addDb)=="undefined") {
		//the user wants to remove a replication
		done=oneCheckBoxAtLeast(form);
		if (done) {
				formValidated();
				form.action="process_nonccreplication_management.php";
		}
	}
	else {
		//the user wants to add a new replication
		numberOfDb=form.numberOfDb.value;
		for(i=0;i<=numberOfDb;i++){
			done=done && isEmpty(form.elements["Db_"+i])&&
			isEmpty(form.elements["Source_"+i])&&
			isEmpty(form.elements["Destination_"+i])&&
			isEmpty(form.elements["DestGroup_"+i])&&
			isEmpty(form.elements["DestOwner_"+i])&&
			isSelected2(form.elements["File_"+i]) &&
		    isSelected2(form.elements["Oneshot_"+i]);
		    if (form.elements["Oneshot_"+i][1].checked){
		       	done=done && isDropSelected(form.elements["selectFrequencyNumber_"+i])&&
		    		isDropSelected(form.elements["selectFrequencyPeriod_"+i]);
		    }
		}  
		if (form.addDb.value==0)	{
			//the user is not clicking on the "add another db" button.
			if (done) {
				formValidated();
				form.action="process_nonccreplication_management.php";
			}
		} 
		else {
			//the user wants to add another db to be replicated. the page should be reloaded with new fields
  		}
	}
    return done;
}

function submitWebManagementForm(){
	var done = true;
	var form;
	form=document.forms["WebManagementRequest"];
	if (typeof(form.BusinessJustification)=="undefined") {
		//the user wants to remove a web
		done=oneCheckBoxAtLeast(form);
	}
	else {
		//the user wants to add a new web
		numberOfWeb=form.numberOfWeb.value;
		done=done && isEmpty(form.elements["BusinessJustification"]) &&
		    validateAIDXID(form.elements["AddUserByID"]);		
		for(i=0;i<=numberOfWeb;i++){		
			done=done && isEmpty(form.elements["Url_"+i]);
		}
	}
	if (form.addWeb.value==0)	{
		if (done) {
					formValidated();
					form.action="process_web_management.php";
		}
	}
	else {
		//the user wants to add another Web to be replicated. the page should be reloaded with new fields
  	}
    return done;
}


function submitPartnerManagementForm(){

	var done = false;
	var form;
	form=document.forms["PartnerManagementRequest"];
	//if the SItename input is not there, it means we are not adding a new site
	if (typeof(form.elements["SiteName"])=="undefined")	{	
		if (form.elements["addContactToAnExistingSite"].value==1) done=oneCheckBoxOnly(form); else done=oneCheckBoxAtLeast(form);
	}
	else done=checkExternalSite(form);
	
	if (done){
		//if the user has clicked on the addcontact button we should not send the form, we should just reload it
		if (typeof(document.forms["PartnerManagementRequest"].addContact)!="undefined") {
			if (document.forms["PartnerManagementRequest"].addContact.value==0)	{
				formValidated();
				document.forms["PartnerManagementRequest"].action="process_partner_management.php";
			} else done=checkContactsInfo(form);
		}
		else {
				formValidated();
				document.forms["PartnerManagementRequest"].action="process_partner_management.php";
		}
	}
	return(done);
}


function submitEngagementManagementForm()
{
   var done = false;

   done = validateDate(document.forms["EngagementManagementRequest"].neededByDate) &&
   	isDropSelected(document.forms["EngagementManagementRequest"].lengthOfTimeToKeepData);
   if (done) {
				formValidated();
				document.forms["EngagementManagementRequest"].action="process_engagement_management.php";
   }
   return(done);
}

function submitStatusChangeRequestForm(formName)
{
   var done = false;

   done = isDropSelected(document.forms[formName].StateId);

   return(done);
}

function submitSiteForm(formName)
{
   var done = false;

   done = isEmpty(document.forms[formName].name) && isEmpty(document.forms[formName].code);
   if (done) {
				formValidated();
				document.forms[formName].action="site_update.php";
   }

   return(done);
}


function newWindow(pageurl, pageName, w, h, scroll, pos)
{
   var win = null;
   
   if(pos == "random")
   {
      LeftPosition = (screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
      TopPosition = (screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
   }
   
   if(pos == "center")
   {
      LeftPosition = (screen.width)?(screen.width-w)/2:100;
      TopPosition = (screen.height)?(screen.height-h)/2:100;
   }
   else if((pos != "center" && pos != "random") || pos == null)
   {
      LeftPosition=0;
      TopPosition=20;
   }
   
   settings = "width=" + w + ",height=" + h + ",top=" + TopPosition + ",left=" + LeftPosition + ",scrollbars=" + scroll + ",location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes";
   win = window.open(pageurl, pageName, settings);
   
   return(false);
}

function jumpNowOnClick(url)
{
  window.location.href = url;
}

function redirectNow(url)
{
  window.location = url;
}

//generic function that removes all the selected items from a SELECT object
function removeSelectedItem(select)
{
	count=select.options.length-1;
	for (j=0; j<count; j++)	{
		i=1;
		while ( (!(select.options[i].selected)) && (i<select.options.length-1) )
			i++;
		if  (!(select.options[i].selected)) i=select.options.length;
		while (i<select.options.length-2){
			select.options[i].text=select.options[i+1].text;
			select.options[i].value=select.options[i+1].value;
			select.options[i].selected=select.options[i+1].selected;
			i++
		}
		select.options[i]=null;
	}
}

//this function is called when a form is successfully  validated
function formValidated(){
	//display a message to the users
	showLayer('pleaseWait',true);
	centerLayer('pleaseWait');
}

