﻿RegistrationCivilStatus = {

	deleteFile: false,	//Set this flag when there is an attached file and the user clicks on modify button
						//Useful only on PersonalProfile (Update candidate)
						
    init: function() {		
        RegistrationCivilStatus.setEventHandlers();
        RegistrationCivilStatus.hideWaitingImage();        
        $(".validationWarning").hide();
        $(".RegistrationCivilStatusAjaxLoader").hide();
        if(TFI.Candidate.pageMode == TFI.Const.EnumPageMode.Edit) { //PersonalProfile
			$(".btnSubmitCS").val("Enregistrer");			
        }
        RegistrationCivilStatus.deleteFile = false; //Default value
        RegistrationCivilStatus.initHover();
        TFI.ClientUtils.initPopup(".pnlLookUpDepartmentsLD");        
    },
    
    initHover: function(){
        if($.browser.msie) {
		$("input.submit[type=submit]")
			.focus(function(){ $(this).addClass("submit-hover") } )
			.blur(function(){ $(this).removeClass("submit-hover") })
			.hover(function(){ $(this).addClass("submit-hover") }, function() { $(this).removeClass("submit-hover") } );
		$("input.linkButton")
			.focus(function() { $(this).addClass("linkButton-hover") } )
			.blur(function() { $(this).removeClass("linkButton-hover") } )
			.hover(function() { $(this).addClass("linkButton-hover") }, function() { $(this).removeClass("linkButton-hover") } );
        $("input.submit[type=button]")
			.focus(function(){ $(this).addClass("submit-hover") } )
			.blur(function(){ $(this).removeClass("submit-hover") })
			.hover(function(){ $(this).addClass("submit-hover") }, function() { $(this).removeClass("submit-hover") } );
	    }
    },

    setEventHandlers: function() {
        $(".btnSubmitCS").unbind().click(RegistrationCivilStatus.onClickSubmit);
        $(".btnCancelCS").unbind().click(RegistrationCivilStatus.onClickCancel);
        $(".btnUploadFileCS").unbind().click(RegistrationCivilStatus.onClickUpload);
        $(".btnUploadedFileCS").unbind().click(RegistrationCivilStatus.onClickModifyUpload);
        $(".txtPostalCodeCS").unbind().change(RegistrationCivilStatus.onChangePostalCode);
        $(".txtTownCS").unbind().change(RegistrationCivilStatus.onChangeTown);
        $(".btnCancelCitiesCS").unbind().click(RegistrationCivilStatus.onClickCancelCities);
        $(".btnValidateCitiesCS").unbind().click(RegistrationCivilStatus.onClickValidate); 
    },
    
    validate: function() {
        var result = TFI.Validation.validateGroup("CivilStatus");
        if(TFI.Candidate.pageMode != TFI.Const.EnumPageMode.Edit) {
            result = TFI.Validation.validateGroup("CreateCivilStatus") && result; 
        }
        if (result) {
            $(".validationWarning").hide(); 
        } else {
            $(".validationWarning").show(); 
        }
        return result;
    },
    
    saveValues: function(candidateCV) {
        var selected;
        
        if(candidateCV != null) {
            //if(RegistrationCivilStatus.validate()) {
                //Gender / Civility
                selected = TFI.ClientUtils.getSelectedItems(".rblGenderCS");
                if(selected.length > 0) {
                    candidateCV.civilStatus.candidate.CivilityId = selected[0].value;
                    candidateCV.civilStatus.candidate.CivilityName = selected[0].text;
                }
                //Name and surname
                candidateCV.civilStatus.candidate.FirstName = $(".txtNameCS").val().toUpperCase();
                candidateCV.civilStatus.candidate.LastName = $(".txtSurnameCS").val().toUpperCase();
                //Birthdate
                candidateCV.civilStatus.candidate.BirthDate = TFI.ClientUtils.getDate(".txtBirthdayCS");
                //Handicap
                selected = TFI.ClientUtils.getSelectedItems(".rblHandicapCS");
                if(selected.length > 0 && selected[0].value == 1) {
                    candidateCV.Aptitude.handicapCandidate.HasOtherHandicap = 1;
                } else {
                    candidateCV.Aptitude.handicapCandidate.HasOtherHandicap = 0;
                }
                //Address
                candidateCV.civilStatus.candidate.Street1 = $(".txtAddress1CS").val().toUpperCase();
                candidateCV.civilStatus.candidate.Street2 = $(".txtAddress2CS").val().toUpperCase();
                candidateCV.civilStatus.candidate.ZipCode = $(".txtPostalCodeCS").val();
                candidateCV.civilStatus.candidate.City = $(".txtTownCS").val().toUpperCase();
                candidateCV.civilStatus.candidate.CountryId = $(".ddlCountryCS").val();
                //candidateCV.civilStatus.candidate.CountryName = no needed;
                //Contact
                candidateCV.civilStatus.candidate.Phone1 = $(".txtTelephoneCS").val();
				candidateCV.CandidateCVs = TFI.Candidate.candidateCV.CandidateCVs;
				candidateCV.CVIndexes = TFI.Candidate.candidateCV.CVIndexes;
				if(TFI.Candidate.pageMode == TFI.Const.EnumPageMode.Edit) {
				    if (candidateCV.CVIndexes!=null) {
				        candidateCV.CVIndexes.filled = false;
                        candidateCV.CVIndexes.isParsed = "0";
                    }
                }
                // Changes the login, if the old email and the old login are equals
                if (candidateCV.civilStatus.candidate.Login != null && 
                    candidateCV.civilStatus.candidate.Login.toUpperCase() == candidateCV.civilStatus.candidate.Email.toUpperCase())
                {
                    candidateCV.civilStatus.candidate.OldLogin = candidateCV.civilStatus.candidate.Login; // Old Login
                }
                candidateCV.civilStatus.candidate.Email = $(".txtEmailCS").val();                
				candidateCV.civilStatus.candidate.Login = $(".txtEmailCS").val(); // New Login   
                candidateCV.civilStatus.candidate.BelongedBUGroupId = TFI.ClientServices.Candidate.GetWSLeaCandidateBU().value;   								               
                //Authorization
                selected = TFI.ClientUtils.getSelectedItems(".rblAutomatedVoiceCallCS");
                if(selected.length > 0 && selected[0].value == 1)
                    candidateCV.civilStatus.candidate.HasContacteurAuthorization = 1;
                else
                    candidateCV.civilStatus.candidate.HasContacteurAuthorization = 0;
                //Email Authorization
                selected = TFI.ClientUtils.getSelectedItems(".rblEmailMessagesCS");
                if(selected.length > 0 && selected[0].value == 1)
                    candidateCV.civilStatus.candidate.HasEmailContactAuthorization = 1;
                else
                    candidateCV.civilStatus.candidate.HasEmailContactAuthorization = 0;
				//If edit mode, save also driving licenses
				if(TFI.Candidate.pageMode == TFI.Const.EnumPageMode.Edit) { //PersonalProfile
					//Has vehicle
					selected = TFI.ClientUtils.getSelectedItems(".rblVehicleCS");
					if(selected.length > 0 && selected[0].value == 1) {
						candidateCV.Mobility.CandidateMobility.HasMeansTransportation = 1;
						candidateCV.civilStatus.candidate.HasMeansTransportation = 1;
				    }
					else {
						candidateCV.Mobility.CandidateMobility.HasMeansTransportation = 0;
						candidateCV.civilStatus.candidate.HasMeansTransportation = 0;
					}
					//Driving licenses
					candidateCV.Mobility.DrivingLicenses = RegistrationCivilStatus.getDrivingLicenses();
				}
            //} else {
            //    candidateCV = null;
            //}
        }
        return candidateCV;
    },
    
    getDrivingLicenses: function() {
        var licenses = [];
        
        $(".chlDrivingLicensesCS :input:checked").each(function(index, element) {
            licenses.push( { DrivingLicenseId: element.value } ); // No DrivingLicenseName
        });
        return licenses;    
    },    

    onClickSubmit: function(e) {
        RegistrationCivilStatus.showWaitingImage();
        if(RegistrationCivilStatus.validate()) {
			if(TFI.Candidate.pageMode == TFI.Const.EnumPageMode.Edit) { //PersonalProfile
				TFI.Candidate.updateCandidateCivilStatus(RegistrationCivilStatus.deleteFile,
					function(result) {
					if(result) {
						PersonalProfile.refreshPanelDisplay();
					} else {
						//TODO: what if Save CivilStatus fails
						alert(TFI.Labels.getLabel("msgErrorUpdatingProfile"));
						RegistrationCivilStatus.hideWaitingImage();
					}
				});
			} else { //Registration
				var candidate = TFI.Candidate.candidateCV;
			    candidate = RegistrationCivilStatus.saveValues(candidate);
			    unicityInfo = TFI.Candidate.getUniqueControlStructure(candidate.civilStatus.candidate);
			    if (unicityInfo.code == TFI.Const.EnumUnicityControl.notExist) {
				    Registration.showPanel(TFI.Const.EnumRegistrationViewPanels.TargetJob);
				} else {
				    Registration.showPanel(TFI.Const.EnumRegistrationViewPanels.Unicity, unicityInfo);
				}           
			}    
        }
        else {
            RegistrationCivilStatus.hideWaitingImage();
        }
        return false;
    },
    
    onClickCancel: function(e) {		
		$(".pnlLogin").removeClass("hidden");		
		if(TFI.Candidate.pageMode == TFI.Const.EnumPageMode.Edit) { //PersonalProfile
			PersonalProfile.showPanel(TFI.Const.EnumPersonalProfileViewPanels.DisplayProfile);
		} else { // Reload Registration
		    window.location = window.location;
		}		
				
        return false;
    },

    onClickUpload: function(e) {
		$(".uploadCV .trWarning").removeClass("warning");
        RegistrationCivilStatus.uploadFile($(".divCS .fupUploadCvCS"), ".RegistrationCivilStatusAjaxLoader", false)
        return false;
    },
    
    onClickModifyUpload: function(e)
    {
		//There is an attached file and the user clicks on modify button
		$(".gambeo .uploadCV .tdWhite1 p").css("margin-bottom","24px");
		RegistrationCivilStatus.deleteFile = true;
        RegistrationCivilStatus.hideModifyUpload();
        return false;
    },

    hideUploadControls: function()
    {
        $(".divCS .fupUploadCvCS").hide()
        $(".btnUploadFileCS").hide()
        $(".litFileTypesCS").hide()
    },
    
    showUploadControls: function()
    {
        $(".divCS .fupUploadCvCS").show()
        $(".btnUploadFileCS").show()
        $(".litFileTypesCS").show()
    },
    
    uploadFile : function(uploadControl, ajaxLoader, parseCv) {
        RegistrationCivilStatus.hideUploadErrors();
        var genericHandler = (parseCv) ? '/Tools/UploadFileParseCv.ashx' : '/Tools/UploadFile.ashx';
        //Use validator here (when they become available)
        if(uploadControl.val() == "")
        {
            alert("Aucun fichier n'a été sélectionné pour l'envoi de CV.");
        }
        else
        {
        
            //Starting setting some animation when the ajax starts and completes
            //Show ajax loader animated gif image and text message
            $(ajaxLoader).ajaxStart(function(){
                if(parseCv) { 
                    RegistrationInscriptionExpress.hideUploadControls()
                }else{
                    RegistrationCivilStatus.hideUploadControls()
                }
                $(this).show()
            })
            //Hide ajax loader animated gif image and text message
            .ajaxComplete(function(){
                $(this).hide()
            });
            
            $.ajaxFileUpload
            (
                {
                    url: genericHandler,
                    secureuri: false,
                    fileElementId: uploadControl.attr("id"),
                    dataType: 'json',
                    success: function (data)
                    {
                        if(typeof(data) != 'undefined')
                        {
                            if(data.First == 0)
                            {
								$(".gambeo .uploadCV .tdWhite1 p").css("margin-bottom","5px");
								
                                if(data.Second == null && parseCv)
                                {
                                    $(".litParserErrorMsgCS").show()
                                    RegistrationCivilStatus.restoreUploadControls(parseCv);
                                    $(".uploadCV .trWarning").addClass("warning");
                                }else{
                                    TFI.Candidate.candidateCV.CandidateCVs = data.Second.CandidateCVs;
                                    TFI.Candidate.candidateCV.CVIndexes = data.Second.CVIndexes;
                                    if (parseCv) {
                                        RegistrationCivilStatus.fillForm(data.Second);
                                        Registration.showPanel(TFI.Const.EnumRegistrationViewPanels.CivilStatus);
                                    }
                                    RegistrationCivilStatus.showModifyUpload(TFI.Candidate.candidateCV.CandidateCVs.candidate_CV.AttachDocumentName.replace("&nbsp;"," "));
                                }
                            }
                            else
                            {
                                RegistrationCivilStatus.restoreUploadControls(parseCv);
                                RegistrationCivilStatus.showUploadErrorMessage(data.First);
                                $(".uploadCV .trWarning").addClass("warning");
                                $(".gambeo .uploadCV .tdWhite1 p").css("margin-bottom","40px");
                            }
                        }
                    },
                    error: function (data, status, e)
                    {
                        RegistrationCivilStatus.restoreUploadControls(parseCv)
                        RegistrationCivilStatus.showUploadErrorMessage("Unknown");
                        $(".uploadCV .trWarning").addClass("warning");
                    }
                }
            );
        }
        return false;
    },
    
    restoreUploadControls: function(parseCv)
    {
        if(parseCv) { 
            RegistrationInscriptionExpress.showUploadControls()
        }else{
            RegistrationCivilStatus.showUploadControls()
        }
    },

    fillForm: function(candidateCV)
    {
        //Gender / Civility
        RegistrationCivilStatus.selectInputListItem(".rblGenderCS", candidateCV.civilStatus.candidate.CivilityId);
        //Name and surname
        $(".txtNameCS").val(TFI.ClientUtils.titleCase(candidateCV.civilStatus.candidate.FirstName));
        $(".txtSurnameCS").val(TFI.ClientUtils.titleCase(candidateCV.civilStatus.candidate.LastName));
        //Birthdate
        try
        {
            var myDate = eval("new " + candidateCV.civilStatus.candidate.BirthDate.replace("/",""))
            var myFormattedDate = myDate.getDate() + "/" + (myDate.getMonth()+1) + "/" + myDate.getFullYear()
            $(".txtBirthdayCS").val(myFormattedDate);
        }
        catch(e)
        {
            $(".txtBirthdayCS").val("");
        }
        //Handicap
        RegistrationCivilStatus.selectInputListItem(".rblHandicapCS", candidateCV.Aptitude.handicapCandidate);
        //Address
        $(".txtAddress1CS").val(TFI.ClientUtils.titleCase(candidateCV.civilStatus.candidate.Street1));
        $(".txtAddress2CS").val(TFI.ClientUtils.titleCase(candidateCV.civilStatus.candidate.Street2));
        $(".txtPostalCodeCS").val(candidateCV.civilStatus.candidate.ZipCode);
        $(".txtTownCS").val(TFI.ClientUtils.titleCase(candidateCV.civilStatus.candidate.City));
        //Country by default France 
        if (candidateCV.civilStatus.candidate.CountryId > 0)
        {
            $(".ddlCountryCS").val(candidateCV.civilStatus.candidate.CountryId);
        }
        //Contact
        $(".txtTelephoneCS").val(candidateCV.civilStatus.candidate.Phone1);
        $(".txtEmailCS").val(candidateCV.civilStatus.candidate.Email);
    },

    showModifyUpload: function(fileName)
    {
        $(".divCS .fupUploadCvCS").hide()
        $(".btnUploadFileCS").hide()
        $(".btnUploadedFileCS").show()
        $(".txtUploadedFileCS").val(fileName).show()
    },

    hideModifyUpload: function()
    {
        $(".btnUploadedFileCS").hide()
        $(".txtUploadedFileCS").hide()
        $(".divCS .fupUploadCvCS").show()
        $(".btnUploadFileCS").show()
    },
    
    showUploadErrorMessage: function(enumFileManagerStatus)
    {
        RegistrationCivilStatus.hideUploadErrors()
        switch(enumFileManagerStatus)
        {
            case 1:
                $(".litUploadEmptyFileErrorMsgCS").show()
                break
            case 2: 
                $(".litUploadFileTooBigErrorMsgCS").show()
                break
            case 3:
                $(".litUploadFileNotSupportedErrorMsgCS").show()
                break
            case -1: //Unknown
                $(".litUploadGeneralExceptionErrorMsgCS").show()
                break
            case 4:
                $(".litUploadGeneralExceptionErrorMsgCS").show()
                break
        }
    },
    
    hideUploadErrors: function()
    {
        $(".litUploadEmptyFileErrorMsgCS").hide()
        $(".litUploadFileTooBigErrorMsgCS").hide()
        $(".litUploadFileNotSupportedErrorMsgCS").hide()
        $(".litUploadGeneralExceptionErrorMsgCS").hide()
        $(".litUploadSaveFailedErrorMsgCS").hide()
    },
    
    fillFormWithCvData: function(candidateCV)
    {
        //Gender / Civility
        selected = TFI.ClientUtils.getSelectedItems(".rblGenderCS");
        if(selected.length > 0) {
            candidateCV.civilStatus.candidate.CivilityId = selected.value;
            candidateCV.civilStatus.candidate.CivilityName = selected.text;
        }
        
        //Name and surname
        candidateCV.civilStatus.candidate.FirstName = $(".txtNameCS").val().toUpperCase();
        candidateCV.civilStatus.candidate.LastName = $(".txtSurnameCS").val().toUpperCase();
        //Birthdate
        candidateCV.civilStatus.candidate.BirthDate = TFI.ClientUtils.getDate(".txtBirthdayCS");
        //Handicap
        selected = TFI.ClientUtils.getSelectedItems(".rblHandicapCS");
        if(selected.length > 0 && selected.value == 1) {
            candidateCV.Aptitude.handicapCandidate = {"HasOtherHandicap" : 1};
        } else {
            candidateCV.Aptitude.handicapCandidate = null;
        }
        
        //Address
        candidateCV.civilStatus.candidate.Street1 = $(".txtAddress1CS").val().toUpperCase();
        candidateCV.civilStatus.candidate.Street2 = $(".txtAddress2CS").val().toUpperCase();
        candidateCV.civilStatus.candidate.ZipCode = $(".txtPostalCodeCS").val();
        candidateCV.civilStatus.candidate.City = $(".txtTownCS").val().toUpperCase();
        candidateCV.civilStatus.candidate.CountryId = $(".ddlCountryCS").val();
        //candidateCV.civilStatus.candidate.CountryName = no needed;
        
        //Contact
        candidateCV.civilStatus.candidate.Phone1 = $(".txtTelephoneCS").val();
        candidateCV.civilStatus.candidate.Email = $(".txtEmailCS").val();

        //Authorization
        selected = TFI.ClientUtils.getSelectedItems(".rblAutomatedVoiceCallCS");
        if(selected.length > 0 && selected.value == 1)
            candidateCV.civilStatus.candidate.HasContacteurAuthorization = 1;
        else
            candidateCV.civilStatus.candidate.HasContacteurAuthorization = 0;

        //Email Authorization
        selected = TFI.ClientUtils.getSelectedItems(".rblEmailMessagesCS");
        if(selected.length > 0 && selected.value == 1)
            candidateCV.civilStatus.candidate.HasEmailContactAuthorization = 1;
        else
            candidateCV.civilStatus.candidate.HasEmailContactAuthorization = 0;
    },

    //Add this function to TFI.ClientUtils    
    selectInputListItem: function(list, value)
    {
        $(list + " input").each(
            function(index, element) {
                //alert(element.value)
                element.checked = (element.value == value);
            });
    },
    
    showWaitingImage: function()
    {
    	$(".btnSubmitCS").hide();
    	$(".btnCancelCS").hide();
	    $(".AjaxLoaderEnregistrerCS").show();
    },
    
    hideWaitingImage: function()
    {
    	$(".btnSubmitCS").show();
    	$(".btnCancelCS").show();
	    $(".AjaxLoaderEnregistrerCS").hide();	    
    },                
    
    getCities: function(postalCode)
    {			
		var res = TFI.ClientServices.Candidate.GetCitiesList(postalCode);									
				
		eval("var result = " + res.value);
		
		return result;
							
    },
    
    getCitiesAutocomplete: function(town)
    {			
		var res = TFI.ClientServices.Candidate.GetCitiesListAutocomplete(town);									
				
		if (res.value != "")
				eval("var result = " + res.value);
		
		return result;
							
    },
    
    onChangePostalCode: function()
    {		
		if ($(".ddlCountryCS")[0].value == 1)
		{
			var selector = $(".txtPostalCodeCS");	
			var postalCode = selector[0].value.trim();	
			if (postalCode.length > 1)
			{			
				var cities = RegistrationCivilStatus.getCities(postalCode).cities;	
				if (cities.length > 1)
				{
					RegistrationCivilStatus.show(cities);
				}
				else if (cities.length == 1)
				{
					$(".txtTownCS").val(TFI.ClientUtils.titleCase(cities[0].text.trim()));					
					$(".txtPostalCodeCS").val(cities[0].value);
				}
				else
				{
					$(".txtTownCS").val("");
				}
			}
		}		
    },
    
    onChangeTown: function()
    {
		if ($(".ddlCountryCS")[0].value == 1)
		{
			var selector = $(".txtTownCS");	
			var town = selector[0].value.trim();	
			if (town.length > 1)
			{			
				var cities = RegistrationCivilStatus.getCitiesAutocomplete(town).cities;	
				if (cities.length > 1)
				{
					RegistrationCivilStatus.show(cities);
				}
				else if (cities.length == 1)
				{
					$(".txtTownCS").val(TFI.ClientUtils.titleCase(cities[0].text));
					$(".txtPostalCodeCS").val(cities[0].value);
				}
			}
		}	
    },
    
    show: function(cities) {		   
		$(".litError").hide();    
        TFI.ClientUtils.createCheckboxList(".pnlCitiesBlockUI", cities, null, "chkCities");    
        $.blockUI({ message: $(".pnlCities") });        
        
        return false;    
    },
    
    hide: function() {
        $.unblockUI({ message: $(".pnlCities") });
        window.scrollTo(280,280);
        return false;
    },    
    
           
    onClickCancelCities: function(){
		$(".litError").hide();
		RegistrationCivilStatus.hide();    
		return false;
    },
    
    onClickValidate: function(e) {
		var isValid = TFI.Validation.areNSelected($(".pnlCitiesBlockUI"), 1);
		if (isValid)
		{
			$(".pnlCitiesBlockUI :input:checked").each(function(index, element) {
				$(".txtTownCS").val(TFI.ClientUtils.titleCase(element.attributes.text.value));
				$(".txtPostalCodeCS").val(element.attributes.value.value);
			});			
						
			RegistrationCivilStatus.hide();
		}
		else
		{
			$("#litError").addClass("warning");
			$(".litError").show();
		}
		
        return false;
    }
};