$(document).ready(function () {
        initializeRegistrationFlow();
});

	
(function () {

	var tabRegistration = "#tabRegistration";
    var registrationTabs = ['general', 'media', 'driver-docs', 'vehicle', 'vehicle-docs', 'confirmation'];
    var currentTab = 'general';
    var registrationState = { driverId: 0, vehicleId: 0, lastTab: '' };

    initializeRegistrationFlow = function () {
        bindRegistrationNav();
        fetchRegistrationState();
    };

    bindRegistrationNav = function () {
        $(document).on('click', '#btn-tab-prev', function () {
            goRelativeTab(-1);
        });
        $('#btn-start-new-session').on('click', function () {
            if (!confirm('Start a new registration? This will clear your current session.')) {
                return;
            }
            fcom.ajax(fcom.makeUrl('DriverRegistration', 'resetRegistrationSession'), '', function () {
                registrationState = { driverId: 0, vehicleId: 0, lastTab: '' };
                loadGeneralTab();
            });
        });
        updateTabButtons();
    };

    handleNextClick = function () {
        if (currentTab === 'general') {
            var frmGeneral = document.forms['fromDriver'];
            if (frmGeneral) {
                setupDriver(frmGeneral);
                return;
            }
            goRelativeTab(1);
            return;
        }
        if (currentTab === 'media') {
            if (registrationState.driverId > 0) {
                setupMedia(registrationState.driverId);
                return;
            }
            goRelativeTab(1);
            return;
        }
        if (currentTab === 'driver-docs') {
            var frmDriverDocs = document.forms['frmDocuments'];
            if (frmDriverDocs) {
                setupDriverDocuments(frmDriverDocs);
                return;
            }
            goRelativeTab(1);
            return;
        }
        if (currentTab === 'vehicle') {
            var frmVehicle = document.forms['frmVehicle'];
            if (frmVehicle) {
                setupVehicle(frmVehicle);
                return;
            }
            goRelativeTab(1);
            return;
        }
        if (currentTab === 'vehicle-docs') {
            var frmVehicleDocs = document.forms['frmDocuments'];
            if (frmVehicleDocs) {
                setupVehicleDocuments(frmVehicleDocs);
                return;
            }
            goRelativeTab(1);
            return;
        }
        goRelativeTab(1);
    };

    fetchRegistrationState = function () {
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'registrationState'), '', function (t) {
            var ans = JSON.parse(t);
            if (ans.status) {
                registrationState.driverId = ans.driverId || 0;
                registrationState.vehicleId = ans.vehicleId || 0;
                registrationState.lastTab = ans.lastTab || '';
                navigateToTab(registrationState.lastTab || 'general');
                return;
            }
            loadGeneralTab();
        });
    };

    setRegistrationState = function (tab) {
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'setRegistrationState'), 'tab=' + encodeURIComponent(tab), function () {
        });
    };

    setCurrentTab = function (tab) {
        currentTab = tab;
        updateTabButtons();
        setRegistrationState(tab);
    };

    updateTabButtons = function () {
        var idx = registrationTabs.indexOf(currentTab);
        $('#btn-tab-prev').prop('disabled', idx <= 0);
    };

    relayoutTabActions = function () {
        var $tab = $(tabRegistration);
        var $form = $tab.find('form').first();
        var $actions = $tab.find('.registration-tab-actions--bottom').first();
        if ($actions.length && $form.length && !$actions.closest('form').length) {
            $form.append($actions);
        }
        var $right = $tab.find('.registration-tab-actions__right').first();
        if ($right.length === 0) {
            return;
        }
        var $submit = $tab.find('form button[type="submit"], form input[type="submit"]').last();
        if ($submit.length === 0) {
            return;
        }
        if ($submit.parent().is($right)) {
            return;
        }
        $right.append($submit);
    };

    goRelativeTab = function (direction) {
        var idx = registrationTabs.indexOf(currentTab);
        var nextIdx = idx + direction;
        if (nextIdx < 0 || nextIdx >= registrationTabs.length) {
            return;
        }
        navigateToTab(registrationTabs[nextIdx]);
    };

    navigateToTab = function (tab) {
        if (!tab || tab === 'general') {
            loadGeneralTab(registrationState.driverId || 0);
            return;
        }
        if (tab === 'media') {
            if (registrationState.driverId > 0) {
                mediaForm(registrationState.driverId);
            } else {
                loadGeneralTab();
            }
            return;
        }
        if (tab === 'driver-docs') {
            if (registrationState.driverId > 0) {
                addDriverDocumentForm(registrationState.driverId);
            } else {
                loadGeneralTab();
            }
            return;
        }
        if (tab === 'vehicle') {
            if (registrationState.driverId > 0) {
                addVehicleForm(registrationState.driverId);
            } else {
                loadGeneralTab();
            }
            return;
        }
        if (tab === 'vehicle-docs') {
            if (registrationState.driverId > 0 && registrationState.vehicleId > 0) {
                addVehicleDocumentForm(registrationState.driverId, registrationState.vehicleId);
            } else if (registrationState.driverId > 0) {
                addVehicleForm(registrationState.driverId);
            } else {
                loadGeneralTab();
            }
            return;
        }
        if (tab === 'confirmation') {
            if (registrationState.driverId > 0) {
                profileConfirmation(registrationState.driverId);
            } else {
                loadGeneralTab();
            }
        }
    };

	loadGeneralTab = function (id) {
        driverForm(id);
    };

    driverForm = function (id) {
		$('#general-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('general');
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'form', [id]), '', function (t) {
            $(tabRegistration).html(t);
            updateTabButtons();
            relayoutTabActions();
        });
    };

    setupDriver = function (frm) {

		if (!$(frm).validate())

            return;

		fcom.ajax(fcom.makeUrl('DriverRegistration', 'setupDriver'), fcom.frmData(frm), function(t) {

            var ans = JSON.parse(t);

			if(ans.status == 1){
                registrationState.driverId = ans.driverId || registrationState.driverId;
				if (!ans.docExists){
					$("#driver-docs-tab").hide();
				}
				
				if (ans.openMediaForm) {
					mediaForm(ans.driverId);
               	 	return;
            	}
				
				
				
		        if (ans.driverId > 0) {
					addDriverDocumentForm(ans.driverId);
                	return false;
            	}

			}else{

				//alert(ans.msg);

				$.mbsmessage(ans.msg, true, 'alert alert--danger');

			}

		});

		return false;

	};





    mediaForm = function (driverId) {
		$('#media-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('media');
		
		$('#general-tab').off('click.mediaHandler').on('click.mediaHandler', function() {
            driverForm(driverId)
        });
		
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'mediaForm', [driverId]), '', function (res) {
            $(tabRegistration).html(res);
            updateTabButtons();
            relayoutTabActions();
        });

    };

	

	setupMedia = function (driverId) {

        addDriverDocumentForm(driverId);

    };



    removeImg = function (driverId) {

        if (!confirm(langLbl.confirmDeleteImage)) {

            return;

        }

        fcom.updateWithAjax(fcom.makeUrl('DriverRegistration', 'removeImage', [driverId]), '', function (t) {

            mediaForm(driverId);

        });

    };





    addDriverDocumentForm = function (driverId) {
		$('#driver-docs-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('driver-docs');
		$('#media-tab').off('click.mediaHandler').on('click.mediaHandler', function() {
            mediaForm(driverId)
        });
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'driverDocumentsForm'), '', function (t) {
			
			let isJson = false;
			let ans = null;
	
			try {
				ans = JSON.parse(t);
				isJson = true;
			} catch (e) {
				isJson = false;
			}
			
			$("#driver-docs-tab").show();
			if (isJson){
				if(ans.status == 1){
					if (!ans.docExists) {
						addVehicleForm();
						$("#driver-docs-tab").hide();
						return false;
					}
				}
			}else{
            	$(tabRegistration).html(t);
                updateTabButtons();
                relayoutTabActions();
			}
        });



    };



    setupDriverDocuments = function (frm) {

        if (!$(frm).validate())

            return;

        var data = fcom.frmData(frm);

		

		fcom.ajax(fcom.makeUrl('DriverRegistration', 'setupDriverDocuments'), fcom.frmData(frm), function(t) {

			var ans = JSON.parse(t);

			

			if(ans.status == 1){

				addVehicleForm(ans.driverId);

			}else{

				$.mbsmessage(ans.msg, true, 'alert alert--danger');

			}

		});

		

        /*fcom.updateWithAjax(fcom.makeUrl('DriverRegistration', 'setupDriverDocuments'), data, function (t) {

            addVehicleForm();

        });*/

    };

	

	addVehicleForm = function (driverId) {
		$('#vehicle-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('vehicle');
		$('#driver-docs-tab').off('click.mediaHandler').on('click.mediaHandler', function() {
            addDriverDocumentForm(driverId)
        });
        
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'vehicleForm', []), '', function (t) { 
            $(tabRegistration).html(t);
            updateTabButtons();
            relayoutTabActions();
        });
    };

	

	setupVehicle = function (frm) {

		if (!$(frm).validate())

            return;

			fcom.ajax(fcom.makeUrl('DriverRegistration', 'setupVehicle'), fcom.frmData(frm), function(t) {

				var ans = JSON.parse(t);

				if(ans.status == 1){
                    registrationState.driverId = ans.driverId || registrationState.driverId;
                    registrationState.vehicleId = ans.vehicleId || registrationState.vehicleId;

					if (ans.vehicleId > 0) {

						addVehicleDocumentForm(ans.driverId, ans.vehicleId);

                		return false;

            		}

			}else{

				$.mbsmessage(ans.msg, true, 'alert alert--danger');

			}

		});

		return false;

	

	}

	

	

	

	addVehicleDocumentForm = function (driverId, id) {
		$('#vehicle-docs-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('vehicle-docs');
		
		$('#vehicle-tab').off('click.mediaHandler').on('click.mediaHandler', function() {
            addVehicleForm(driverId)
        });
		
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'vehicleDocumentsForm', [id]), '', function (t) { 
			let isJson = false;
			let ans = null;
			try {
				ans = JSON.parse(t);
				isJson = true;
			} catch (e) {
				isJson = false;
			}
			 
			$("#vehicle-docs-tab").show();
			if (isJson){
				if(ans.status == 1){
					if (!ans.docExists) {
						profileConfirmation(ans.driverId);
						$("#vehicle-docs-tab").hide();
						return false;
					}
				}
			}else{
            	$(tabRegistration).html(t);
                updateTabButtons();
                relayoutTabActions();
			}
        
            //$(tabRegistration).html(t);

        });

    };



    setupVehicleDocuments = function (frm) {
        if (!$(frm).validate())
            return;

        var data = fcom.frmData(frm);

        fcom.ajax(fcom.makeUrl('DriverRegistration', 'setupVehicleDocuments'), data, function (t) {

			profileConfirmation(t.userId);

        });

    };

	

	profileConfirmation = function (id) {
		
		$('ul').addClass('ul-disabled');

		$('#confirmation-tab').addClass('active').siblings().removeClass('active');
        setCurrentTab('confirmation');
        fcom.ajax(fcom.makeUrl('DriverRegistration', 'profileConfirmation', [id]), '', function (t) { 
            $(tabRegistration).html(t);
            updateTabButtons();
            relayoutTabActions();
        });
    };


})();



$(document).on('click', '.fileType-Js', function () {

    var node = this;

    $('#form-upload').remove();

    var driverId = document.frmDocuments.driverId.value;

    var documentId = $(node).attr('data-field_id');

    var frm = '<form enctype="multipart/form-data" id="form-upload" style="position:absolute; top:-100px;" >';

    frm = frm.concat('<input type="file" name="file" />');

    frm = frm.concat('<input type="hidden" name="document_id" value="' + documentId + '"></form>');

    $('body').prepend(frm);

    $('#form-upload input[name=\'file\']').trigger('click');

    if (typeof timer != 'undefined') {

        clearInterval(timer);

    }

    timer = setInterval(function () {

        if ($('#form-upload input[name=\'file\']').val() != '') {

            clearInterval(timer);

            $val = $(node).val();

            $.ajax({

                url: fcom.makeUrl('DriverRegistration', 'uploadDriverDocuments', [driverId]),

                type: 'post',

                dataType: 'json',

                data: new FormData($('#form-upload')[0]),

                cache: false,

                contentType: false,

                processData: false,

                beforeSend: function () {

                    $(node).val('Loading..');

					$.mbsmessage('Loading..', true, 'alert alert--process');

                },

                complete: function () {

                    $(node).val($val);

                },

                success: function (ans) {

					

                    if (!ans.status) {

						$.mbsmessage(ans.msg, true, 'alert alert--danger');

                        //fcom.displayErrorMessage(ans.msg);

                        return;

                    }

					$.mbsmessage(ans.msg, true, 'alert alert--success');

                    //fcom.displaySuccessMessage(ans.msg);

                    $('.text-danger').remove();

                    $('#input-formfield' + documentId).html(ans.msg);

                    $('#formfield_' + documentId).val(ans.file);

                    if (ans.status == true) {

                        $('#input-formfield' + documentId).removeClass('text-danger');

                        $('#input-formfield' + documentId).addClass('text-success');

                    } else {

                        $('#input-formfield' + documentId).removeClass('text-success');

                        $('#input-formfield' + documentId).addClass('text-danger');

                    }

                },

                error: function (xhr, ajaxOptions, thrownError) {

                    alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);

                }

            });

        }

    }, 500);

});





$(document).on('click', '.fileType-vehicle-doc-Js', function () {

    var node = this;

    $('#form-upload').remove();

    var vehicleId = document.frmDocuments.vehicleId.value;

    var documentId = $(node).attr('data-field_id');

    var frm = '<form enctype="multipart/form-data" id="form-upload" style="position:absolute; top:-100px;" >';

    frm = frm.concat('<input type="file" name="file" />');

    frm = frm.concat('<input type="hidden" name="document_id" value="' + documentId + '"></form>');

    $('body').prepend(frm);

    $('#form-upload input[name=\'file\']').trigger('click');

    if (typeof timer != 'undefined') {

        clearInterval(timer);

    }

    timer = setInterval(function () {

        if ($('#form-upload input[name=\'file\']').val() != '') {

            clearInterval(timer);

            $val = $(node).val();

            $.ajax({

                url: fcom.makeUrl('DriverRegistration', 'uploadVehicleDocuments', [vehicleId]),

                type: 'post',

                dataType: 'json',

                data: new FormData($('#form-upload')[0]),

                cache: false,

                contentType: false,

                processData: false,

                beforeSend: function () {

                    $(node).val('Loading..');

					$.mbsmessage('Loading..', true, 'alert alert--process');

                },

                complete: function () {

                    $(node).val($val);

                },

                success: function (ans) {



                    if (!ans.status) {

                        //fcom.displayErrorMessage(ans.msg);

						$.mbsmessage(ans.msg, true, 'alert alert--danger');

                        return;

                    }

					$.mbsmessage(ans.msg, true, 'alert alert--success');

                    $('.text-danger').remove();

                    $('#input-formfield' + documentId).html(ans.msg);

                    $('#formfield_' + documentId).val(ans.file);

                    if (ans.status == true) {

                        $('#input-formfield' + documentId).removeClass('text-danger');

                        $('#input-formfield' + documentId).addClass('text-success');

                    } else {

                        $('#input-formfield' + documentId).removeClass('text-success');

                        $('#input-formfield' + documentId).addClass('text-danger');

                    }

                },

                error: function (xhr, ajaxOptions, thrownError) {

                    alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);

                }

            });

        }

    }, 500);

});



$(document).on('click', '.File-Js-Profile', function () {

    var node = this;

    $('#form-upload').remove();

    var driver_id = $(node).attr('data-driver_id');

    var frm = '<form enctype="multipart/form-data" id="form-upload" style="position:absolute; top:-100px;" >';

    frm = frm.concat('<input type="file" name="file" />');

    $('body').prepend(frm);

    $('#form-upload input[name=\'file\']').trigger('click');

    if (typeof timer != 'undefined') {

        clearInterval(timer);

    }

    timer = setInterval(function () {

        if ($('#form-upload input[name=\'file\']').val() != '') {

            clearInterval(timer);

            $val = $(node).val();

            $.ajax({

                url: fcom.makeUrl('DriverRegistration', 'setUpImage', [driver_id]),

                type: 'post',

                dataType: 'json',

                data: new FormData($('#form-upload')[0]),

                cache: false,

                contentType: false,

                processData: false,

                beforeSend: function () {

					$.mbsmessage('Loading..', true, 'alert alert--process');

                },

                complete: function () {

                    $(node).val($val);

                },

                success: function (ans) {

                    if (ans.status == 1) {

                        //fcom.displaySuccessMessage(ans.msg);

                        mediaForm(ans.driver_id);

                    } else {

						$.mbsmessage(ans.msg, true, 'alert--danger alert');

                    }

                    //reloadList();



                    /*

                     alert(ans);	

                     mediaForm(ans.driver_id);		

                     reloadList();						

                     */},

                error: function (xhr, ajaxOptions, thrownError) {

                    alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);

                }

            });

        }

    }, 500);

});
