@extends('layouts.master')

@section('navigation')
    @if (Auth::user()->role == 1)
        @include('local.managers.admins._new_navigation')
    @elseif(Auth::user()->role == 2)
        @include('local.managers.sCoords._new_navigation')
    @elseif(Auth::user()->role == 3)
        @include('local.managers.pCoords._new_navigation')
    @endif
@stop

@section('main')
    <div class="row">
        <div class="col-md-12">
            <div id="quinquennium" data-quinquennium-id="{{ $current_quinquennium->id }}"></div>
            <div id="program" data-program-id="{{ $program->id }}"></div>
            @for ($i = date('Y', strtotime($current_quinquennium->start_date)); $i < date('Y', strtotime($current_quinquennium->end_date)); $i++)
                <div class="mini-plan">
                    <table class="table table-bordered">
                        <thead>
                            <tr class="bg-danger text-center">
                                <th class="text-center col-md-1">Academic Year</th>
                                <th class="text-center col-md-3">Learning Outcome to be assessed</th>
                                <th class="text-center col-md-4">Learning Objectives</th>
                                <th class="text-center col-md-4">Courses to use for assessment</th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <th class="active academic-year text-center" rowspan="1"><span
                                        class="year-start">{{ $i }}</span>-<span
                                        class="year-end">{{ $i + 1 }}</span></th>
                                <td class="outcome-cell">
                                    <select name="outcome" class="outcome form-control">
                                        @foreach ($outcomes as $outcome)
                                            <option value="{{ $outcome->id }}">{{ $outcome->name }}</option>
                                        @endforeach
                                    </select>
                                </td>
                                <td class="objectives-cell">
                                    <div class="objective-select-wrapper">
                                        <select name="objectives[]" class="objective shortened-select form-control">
                                        </select>
                                        <span
                                            class="glyphicon glyphicon-remove text-danger icon-btn remove-objective"></span>
                                        <br><br>
                                    </div>
                                    <button class="add-objective btn btn-success pull-right btn-xs"><span
                                            class="glyphicon glyphicon-plus"></span></button>
                                </td>
                                <td>
                                    <div class="course-select-wrapper">
                                        <select name="courses[]" class="course shortened-select form-control">
                                            @foreach ($courses as $course)
                                                <option value="{{ $course->id }}" data-course-code="{{ $course->code }}"
                                                    data-course-number="{{ $course->number }}"
                                                    data-course-name="{{ $course->name }}">
                                                    {{ $course->code }}{{ $course->number }}: {{ $course->name }}
                                                </option>
                                            @endforeach
                                        </select>
                                        <span class="glyphicon glyphicon-remove text-danger icon-btn remove-course"></span>
                                        <br><br>
                                    </div>
                                    <button class="add-course btn btn-success pull-right btn-xs"><span
                                            class="glyphicon glyphicon-plus"></span></button>
                                </td>
                                <td></td>
                            </tr>
                        </tbody>
                    </table>
                    <div>
                        <button class="add-outcome btn btn-success pull-right btn-sm"><span
                                class="glyphicon glyphicon-plus"></span>Add Learning Outcome</button>
                        <br><br><br>
                    </div>
                </div>
            @endfor

            <div class="text-center">
                <button id="button-create-rubric" class="btn btn-lg btn-primary save">
                    <span class="glyphicon glyphicon-floppy-disk"></span>
                    Save
                </button>
            </div>
        </div>
    </div>

@stop

@section('included-js')

@stop

@section('javascript')

    // --------------------------------------------------------------------------
    // Page Load
    // --------------------------------------------------------------------------

    // Hide all 'x' buttons for courses and objectives
    $('.remove-course, .remove-objective').hide();

    $('.outcome').each(function()
    {
    fetchObjectives($(this));
    });

    // --------------------------------------------------------------------------
    // Events
    // --------------------------------------------------------------------------

    // On clicking a button to add outcome
    $('.add-outcome').on('click', function(e)
    {
    var table = $(this).closest('.mini-plan').find('table');
    addOutcome(table);
    });

    // On clicking a button to remove a course
    $('table').on('click', '.remove-objective', function(e)
    {
    removeObjective($(this));
    });

    // On clicking a button to remove a course
    $('table').on('click', '.remove-course', function(e)
    {
    removeCourse($(this));
    });

    // On clicking the x to remove an outcome from the plan
    $('table').on('click', '.remove-outcome', function(e)
    {
    var table = $(this).closest('.mini-plan').find('table');
    var row = $(this).closest('tr');
    removeOutcome(table, row);
    });

    // On clicking a button to add a objective
    $('.add-objective').on('click', function(e)
    {
    var table = $(this).closest('.mini-plan').find('table');
    var objective_select_wrapper = $(this).parent().find('.objective-select-wrapper:last');
    var select = $(this).parent().find('select:last');
    var selected_objective_id = select.find(':selected').val();
    var clone = objective_select_wrapper.clone();
    clone.insertAfter(objective_select_wrapper);
    objective_select_wrapper.parent().find('.remove-objective').show();
    });

    // On clicking a button to add a course
    $('.add-course').on('click', function(e)
    {
    var table = $(this).closest('.mini-plan').find('table');
    var course_select_wrapper = $(this).parent().find('.course-select-wrapper:last');
    var select = $(this).parent().find('select:last');
    var selected_course_id = select.find(':selected').val();
    var clone = course_select_wrapper.clone();
    clone.insertAfter(course_select_wrapper);
    course_select_wrapper.parent().find('.remove-course').show();
    });

    // When user selects another outcome
    $('.outcome').on('change', function(e)
    {
    fetchObjectives($(this));
    });

    // Gather, structure and send data to server for saving
    $('.save').on('click', function(e)
    {
    var five_year_plan = new Object();
    five_year_plan.quinquennium_id = $('#quinquennium').data('quinquennium-id');
    five_year_plan.program_id = $('#program').data('program-id');
    five_year_plan.mini_plans = new Array();

    $('.mini-plan').each(function(index){

    var mini_plan = new Object();

    mini_plan.year_start = $(this).find('.year-start').text();
    mini_plan.year_end = $(this).find('.year-end').text();

    // Array for outcome objects
    mini_plan.outcomes = new Array();

    $(this).find('.outcome').each(function(index){

    // Outcome object
    var outcome = new Object();

    outcome.id = $(this).find(':selected').val();
    outcome.objectives = new Array();
    outcome.courses = new Array();

    // Gather objective information
    $(this).closest('tr').find('.objective').each(function()
    {
    var objective = new Object();

    objective.original_id = $(this).find(':selected').val();
    objective.text = $(this).find(':selected').text();

    outcome.objectives.push(jQuery.extend({}, objective));

    objective = null;
    });

    // Gather course information
    $(this).closest('tr').find('.course').each(function()
    {
    var course = new Object();

    course.code = $(this).find(':selected').data('course-code');
    course.number = $(this).find(':selected').data('course-number');
    course.name = $(this).find(':selected').data('course-name');

    outcome.courses.push(jQuery.extend({}, course));
    course = null;
    });

    mini_plan.outcomes.push(jQuery.extend({}, outcome));
    outcome = null;

    });

    five_year_plan.mini_plans.push(jQuery.extend({}, mini_plan));
    mini_plan = null;
    });

    //console.log(five_year_plan);

    $.post(
    "{{ URL::action('FiveYearPlansController@store', [$program->id]) }}",
    {
    five_year_plan: JSON.stringify(five_year_plan)
    },
    function(data)
    {
    //console.log(data);
    var response = data;

    //console.log('status: '+response.status);
    if(response.status == 'success')
    {
    //console.log('success');
    window.location = response.redirect_url;
    }
    else
    {
    jsError(response.message);
    }
    },
    "json"
    )
    .fail( function(xhr, status, error) {

    //console.log('fail:'+error);
    // Always scroll to the top
    $(this).scrollTop(0);
    $('html').animate({scrollTop:0}, 1);
    $('body').animate({scrollTop:0}, 1);

    jsError(error);

    // Show js error with default message
    $('#js-error-row').fadeIn('slow', function () {
    $(this).delay(3000).fadeOut('slow');
    });
    }
    );
    });

    // --------------------------------------------------------------------------
    // Functions
    // --------------------------------------------------------------------------

    // Removes a objective
    function removeObjective(button)
    {
    var objective_select_wrapper = button.parent();

    // If only one objective will remain, hide 'x' button
    if(objective_select_wrapper.siblings('.objective-select-wrapper').length == 1)
    {
    objective_select_wrapper.siblings('.objective-select-wrapper').find('.remove-objective').hide();
    }

    // Remove objective
    objective_select_wrapper.remove();
    }

    // Removes a course
    function removeCourse(button)
    {
    var course_select_wrapper = button.parent();

    // If only one course will remain, hide 'x' button
    if(course_select_wrapper.siblings('.course-select-wrapper').length == 1)
    {
    course_select_wrapper.siblings('.course-select-wrapper').find('.remove-course').hide();
    }

    // Remove course
    course_select_wrapper.remove();
    }


    // Checks whether a mini plan has outcomes
    function hasOutcomes(table)
    {
    if(table.find('.outcome-cell').length > 0)
    return true;
    else
    return false;
    }

    // Add an outcome to a mini (annual) plan
    function addOutcome(table)
    {
    var header_rowspan = Number(table.find('.academic-year').attr('rowspan'));

    var clone = table.find('tbody tr:first').clone(true, true);

    // Remove academic year
    clone.children(':first').remove();

    // Remove all objectives and course except the first ones
    clone.find('.objective-select-wrapper').not(':first').remove();
    clone.find('.course-select-wrapper').not(':first').remove();

    // Add removal button
    clone.children(':last').append('<span class="glyphicon glyphicon-remove text-danger icon-btn remove-outcome"></span>');

    if(hasOutcomes(table))
    {
    table.find('tbody').append(clone);

    table.find('.academic-year').attr('rowspan', header_rowspan+1);
    }
    }

    // Remove an Outcome
    function removeOutcome(table, row)
    {
    var header_rowspan = Number(table.find('.academic-year').attr('rowspan'));

    row.remove();
    table.find('.academic-year').attr('rowspan', header_rowspan-1);
    }

    // Fetch objectives associated to an outcome and program
    function fetchObjectives(outcome)
    {
    var outcome_id = outcome.find(':selected').val();
    var program_id = $('#program').data('program-id');

    $.post(
    "{{ URL::action('ObjectivesController@fetch') }}",
    {
    outcome_id: outcome_id,
    program_id: program_id,
    format: 'select'
    },
    function(data)
    {
    var select = outcome.closest('tr').find('.objective');
    if(data == '')
    {
    select.prop('disabled', true);
    select.empty().append('<option value="0"><span class="glyphicon glyphicon-remove"></span> None</option>');
    }
    else
    {
    select.prop('disabled', false);
    select.empty().append(data);
    }

    if(select.length > 1) {
    select.first().parent().siblings('.objective-select-wrapper').remove();
    }
    }
    );
    }

@stop