// student form

// set the default values
function setDefaults()
{
	myForm.medicalTest.checked = true;
	myForm.fName.value = 'First';
	myForm.mName.value = 'Middle';
	myForm.lName.value = 'Last';
	myForm.fName.style.color = '#666';
	myForm.mName.style.color = '#666';
	myForm.lName.style.color = '#666';
	myForm.passType[0].checked = true;
	myForm.studentStatus[0].focus();
	myForm.jobTitle.selectedIndex  = 1;
	alert("One copy of the establishment card is required");	
}

// to show and hids appropriate options and attachments on the form
function showAndHide ()
{
	// new visa
	if (myForm.visaStatus[0].checked == true)
	{
		visaTypeSec.style.display = "block";
		urgentProcessingSec.style.display = "block";
		urgentStampingSec.style.display = "block";
		renewalSec2.style.display = "none";
		renewalSec3.style.display = "none";
		urgentSec.style.display = "none";
		lostIdSec.style.display = "none";
		myForm.lostId.checked = false;
		langSec.style.display = "block";
		studentId.style.display = "none";
	}
	
	// renewal
	if (myForm.visaStatus[1].checked == true)
	{
		visaTypeSec.style.display = "none";
		myForm.visaType[0].checked = false;
		renewalSec2.style.display = "block";
		renewalSec3.style.display = "block";
		urgentSec.style.display = "block";
		lostIdSec.style.display = "block";
		urgentProcessingSec.style.display = "none";
		urgentStampingSec.style.display = "none";
		myForm.urgentProcessing.checked = false;
		myForm.urgentStamping.checked = false;
		langSec.style.display = "none";
		studentId.style.display = "block";
	}
	
	// new visa
	if (myForm.visaType[0].checked == true)
	{
		urgentProcessingSec.style.display = "block";
		inCountrySec.style.display = "block";
		if (myForm.inCountry[0].checked == true){ localAmendmentSec.style.display = "block"; } else { localAmendmentSec.style.display = "none"; }
	}  else {
		myForm.inCountry[1].checked = false;
		myForm.inCountry[0].checked = false;
	}
	
	// renewal or transfer
	if (myForm.visaType[1].checked == true ||  myForm.visaStatus[1].checked == true)
	{
		myForm.localAmendment[0].checked = false;
		myForm.localAmendment[1].checked = false;
		myForm.inCountry[0].checked = false;
		myForm.inCountry[1].checked = false;
		localAmendmentSec.style.display = "none";
		inCountrySec.style.display = "none";
	}
	
	if (myForm.inCountry[0].checked == true)
	{ 
		localAmendmentSec.style.display = "block"; 
	} else { 
		localAmendmentSec.style.display = "none";
		myForm.localAmendment[0].checked = false;
		myForm.localAmendment[1].checked = false;
	}
	
	// if in country and local change show the right fields to calculate the fine
	if (myForm.localAmendment[0].checked == true)
	{
		preVisaSec.style.display = "block";
		preVisaIssuePlaceSec.style.display = "block";
		
		if (myForm.preVisa[0].checked == true)
		{
			visitVisa1.style.display = "block";
			visitVisa2.style.display = "block";
			resVisa1.style.display = "none";
			resVisa2.style.display = "none";
		}
		if (myForm.preVisa[1].checked == true)
		{
			visitVisa1.style.display = "none";
			visitVisa2.style.display = "none";
			resVisa1.style.display = "block";
			resVisa2.style.display = "block";
		}
		// hide the fields for the fine
	} else	{
		preVisaSec.style.display = "none";
		preVisaIssuePlaceSec.style.display = "none";
		visitVisa1.style.display = "none";
		visitVisa2.style.display = "none";
		resVisa1.style.display = "none";
		resVisa2.style.display = "none";
		myForm.preVisa[0].checked = false;
		myForm.preVisa[1].checked = false;
		myForm.preVisaIssuePlace[0].checked = false;
		myForm.preVisaIssuePlace[1].checked = false;
		myForm.DOE.value = "";
		myForm.DOVE.value = "";
		myForm.DOVC.value = "";
		myForm.visitVisaExtended[0].checked = false;
		myForm.visitVisaExtended[1].checked = false;
	}

	// for undergraduate the only job status is "student"
	if (myForm.studentStatus[0].checked == true)
	{
		myForm.jobTitle.selectedIndex  = 1;
		myForm.jobTitle.disabled = true;
	}
	if (myForm.studentStatus[1].checked == true) { myForm.jobTitle.disabled = false; }
	
	if (myForm.visaType[1].checked == true)	
	{
		myForm.urgentProcessing.checked = false;
		urgentProcessingSec.style.display = "none";		
	}
	
	// if applicant is outside, get outside contact details
	if(myForm.inCountry[1].checked == true)
	{
		insideContactSec.style.display = "none";
		outsideContactSec.style.display = "block";
	} else {
		insideContactSec.style.display = "block";
		outsideContactSec.style.display = "none";
	}
}

function setRequirements () {
	// new visa requirement
	if (myForm.visaStatus[0].checked == true)
	{
		newVisaAttachments.style.display = "block";
		newPassportCopies.style.display = "block";
		newPhoto.style.display = "block";
		renewVisaAttachments.style.display = "none";
		// sponsor pass copy for transfer 
		// and also 5 photos :)
		if ( myForm.visaType[1].checked == true) 
		{
			sponsorPassCopy.style.display = "block";
			transferPhoto.style.display = "block";
			newPhoto.style.display = "none";
		} else {
			sponsorPassCopy.style.display = "none";
			transferPhoto.style.display = "none";
			newPhoto.style.display = "block";
		}
	
		if ( myForm.localAmendment[0].checked == true)
		{
			laAttachment.style.display = "block";
			newPassportCopies.style.display = "none";
			newPhoto.style.display = "none";
			if (myForm.preVisa[0].checked == true)
			{
				visitVisaAtachment.style.display = "block";
				residentVisaAttachment.style.display = "none";
			}
			if (myForm.preVisa[1].checked == true)
			{
				residentVisaAttachment.style.display = "block";
				visitVisaAtachment.style.display = "none";
			}
		} else {
			laAttachment.style.display = "none";
		}
	} else {
		newVisaAttachments.style.display = "none";
		laAttachment.style.display = "none";
	}
	// renew visa requirements
	if (myForm.visaStatus[1].checked == true)
	{
		renewVisaAttachments.style.display = "block";
		if (myForm.lostId.checked == true) { originalIdSec.style.display = "none";} else { originalIdSec.style.display = "block";}
	} else {
		renewVisaAttachments.style.display = "none";
	}
}
	
function transferAlert() {	
	if (myForm.visaType[1].checked == true)	
	{	
		alert("Residence visa MUST be valid at least for one month");
	}
}

function setSerivces ()
{
	if (myForm.visaStatus[0].checked == true )
	{
		if (myForm.expressService.checked == true) 
		{
			myForm.urgentProcessing.checked = false;
			myForm.urgentProcessing.disabled = true;
			myForm.urgentStamping.checked = false;
			myForm.urgentStamping.disabled = true;
			myForm.medicalTest.checked = false;
			myForm.medicalTest.disabled = true;
		} else {
			myForm.urgentProcessing.disabled = false;
			myForm.urgentStamping.disabled = false;
			myForm.medicalTest.disabled = false;
		}
	}
	// renew fee
	if (myForm.visaStatus[1].checked == true ) 
	{	
		// express: include urgent and medical, and disable them
		if (myForm.expressService.checked == true) 	
		{ 
			myForm.urgent.checked = false;
			myForm.urgent.disabled = true;
			myForm.medicalTest.checked = false;
			myForm.medicalTest.disabled = true;
		}
		//not express: uncheck urgent and enable urgent and medical
		else {
			myForm.urgent.disabled = false;
			myForm.medicalTest.disabled = false;	
		}
	}
}
// calculate fee
// if express, disable options that express already includes
function calFee() 
{
	var fee = 1000;
	
	// new visa fee
	if (myForm.visaStatus[0].checked == true )
	{
		fee = 1000;
		// dependant transfer
		if (myForm.visaType[1].checked == true) { fee = 1650; }
		
		// incountry and local amendment
		if (myForm.inCountry[0].checked == true) {fee = fee + 810;}
		if (myForm.localAmendment[0].checked == true) {fee = fee + 810;}

		if (myForm.expressService.checked == true) { fee = fee + 600; }
		if ((myForm.urgentProcessing.checked == true || myForm.urgentProcessing.disabled == true) && myForm.visaType[0].checked == true) {fee = fee + 250;}
		if (myForm.urgentStamping.checked == true || myForm.urgentStamping.disabled == true) {fee = fee + 250;}	
	}
	
	// renew fee
	if (myForm.visaStatus[1].checked == true ) 
	{	
		fee = 850;
		if (myForm.expressService.checked == true) { fee = fee + 300; }
		if (myForm.lostId.checked == true) { fee = fee + 560; }
		if (myForm.urgent.checked == true || myForm.urgent.disabled == true) { fee = fee + 250; }
	}
	
	// medical is same for both new and renewal
	if (myForm.medicalTest.checked == true || myForm.medicalTest.disabled == true) { fee = fee + 100; }
	
	// display the fee and update the fee hidden field
	fee = addCommas(fee);
	paymentAmount.innerHTML = fee;
	myForm.feeAmount.value = fee;
}

// calculate the fine
function calFine()
{
	var fine = 0;
	var today = new Date();
	//Set 1 day in milliseconds
	var one_day=1000*60*60*24;
	
	// days added to the fine because of the processing time at TECOM
	var processingDays = 7; // normal takes 7 days
	if (myForm.urgentProcessing.checked == true) {processingDays = 4;}	 // urgentProcessing takes 4 days
	if (myForm.expressService.checked == true) {processingDays = 2;} // express takes 2 days
	
	//visit visa
	if (myForm.visaStatus[0].checked == true && myForm.preVisa[0].checked == true && myForm.inCountry[0].checked == true && myForm.localAmendment[0].checked == true)
	{
		var DOE = fixDateFormat (myForm.DOE.value);
		var DOE = new Date(DOE);
		
		//Calculate difference between today and date of entry, and convert to days
		var daysPassed = (today.getTime()-DOE.getTime())/one_day;
		var daysRemaining = 0;
		
		// calculate number of days for which fine has to be paid
		if (myForm.visitVisaExtended[0].checked == true) {daysRemaining = daysPassed+processingDays-(30);}
		if (myForm.visitVisaExtended[1].checked == true) {daysRemaining = daysPassed+processingDays-(90);}
		
		// if daysRemaining is minus, there is no fine
		if (daysRemaining>0) 
		{
			// change the number to integer
			var daysRounded = parseInt(daysRemaining);

			var baseFine = 0;
			if (daysRounded<180) {baseFine = 2030;}
			if (180<daysRounded && daysRounded<365) {baseFine = 5030;}
			if (daysRounded>365) {baseFine = 10030;}
			
			if (myForm.preVisaIssuePlace[0].checked == true) {fine = baseFine + 280 + 30*daysRounded;}
			if (myForm.preVisaIssuePlace[1].checked == true) {fine = 280 + 100*daysRounded;}
		}
	}
	
	//residence visa
	if (myForm.preVisa[1].checked == true && myForm.inCountry[0].checked == true && myForm.localAmendment[0].checked == true)
	{
		var DOVE = fixDateFormat (myForm.DOVE.value);
		var DOVC = fixDateFormat (myForm.DOVC.value);
		
		var DOVE= new Date(DOVE);
		var DOVC= new Date(DOVC);
		var dateV = DOVE;
		if (DOVE.getTime() > DOVC.getTime()) {dateV = DOVC;}
		
		//Calculate difference btw the two dates, and convert to days
		var daysPassed = (today.getTime()-dateV.getTime())/one_day;
		
		var daysRemaining = daysPassed+processingDays-(30);
		
		// if daysRemaining is minus, there is no fine
		if (daysRemaining>0) 
		{
			var daysRounded = parseInt(daysRemaining);
			
			if (myForm.preVisaIssuePlace[0].checked == true) 
			{
				fine = 10*daysRounded + 270;
				if (daysRounded>180){fine = fine + 10*(daysRounded-180);}
				if (daysRounded>365){fine = fine + 10*(daysRounded-365);}
			}
			if (myForm.preVisaIssuePlace[1].checked == true) {fine = 25*daysRounded + 270;}
		}
	}
	
	//renewal visa
	if (myForm.visaStatus[1].checked == true)
	{
		var dailyFine = 10; // DXB

		// Specifics	

			var RED = fixDateFormat(myForm.RED.value);
			var RED = new Date(RED);	

			//Calculate difference between today and date of entry, and convert to days
			var daysPassed = (today.getTime()-RED.getTime())/one_day;

			//validity
			var validity = 60;

			//date of fine - date of entry - validity
			var days = parseInt(daysPassed);

			if(days > 30) {
				var fine = ((days - 30) * dailyFine) + 2500;
			}	

			if(days >= 91) {
			    var SecondDailyFine = 20; 
				var fine = ((days - 90) * SecondDailyFine) + 2500 + 2500;
			}

			if(days >= 366) {
			    var ThirdDailyFine = 30; 
				var fine = ((days - 365) * ThirdDailyFine) + 2500 + 2500;
			}	
	}
	
	fine1 = addCommas(fine);
	fineAmount.innerHTML = fine1;
	myForm.fine.value = fine1;
	
	if (fine>0) {fineSec.style.display = "block";}
	else {fineSec.style.display = "none";}
}

// calculate the age (years)
function calAge()
{
	var DOB = fixDateFormat (myForm.DOB.value);
	var birthday= new Date(DOB);
	var today = new Date();
	$ageArray = DateDiff(today,birthday);
	age = $ageArray[1];
	month = $ageArray[0];
	
	if (age>24 && myForm.studentStatus[0].checked == true && myForm.visaType[0].checked == true) { alert("Since the applicant is more than twenty four years old, the visa request is subjected to Immigration's approval."); }
	if (age<16 && myForm.visaType[0].checked == true) { alert("The applicant cannot be less than 16 years old."); }
	
	if ((age<17) || (age==17 && month<6)) 
	{ 
		myForm.medicalTest.checked = false; 
		myForm.medicalTest.disabled = false; 
		medicalTestSec.style.display = "none";
	}
	if ((age>17) || (age==17 && month>5)) 
	{
		if (myForm.expressService.checked == false) { myForm.medicalTest.checked = true; }
		medicalTestSec.style.display = "block"; 
	}
	
	if (myForm.DOB.value == '') { medicalTestSec.style.display = "block"; }
	calFee();
}

// call all necessary functions
function callAllFunctions()
{
	showAndHide();
	setSerivces();
	setRequirements();
	calFee();
    calFine();
}