﻿/**
 * jQuery vereist
 */
var loadingTimeout;
var functionList = [];

// Wordt bij elke pagina call aangeroepen.
function DriveOn_init() {
    unload();

//    // Functies uit de functionList uitvoeren
//    $.each(functionList, function() {
//        eval(this());
//    });

    $('.logo').bind('mouseover', bindAI).bind('mouseout', unbindAI);
}

// Toon de melding dat de User binnenkort z'n Password moet wijzigen
function DriveOn_PwChangeWarning(msg) {
    // Div die zichtbaar wordt
    var div = $('<div Id="PwChangeWarning"><p>' + msg + '</p></div>').appendTo($('body'));
    
    // Sluitknop
    var cls = $('<img src="/Images/close.gif" alt="X" width="9" height="9" Id="PwChangeWarningClose" />');

    // Click event onder sluitknop zorgt er voor dat de waarschuwing tijdens de
    // huidige sessie niet meer getoond wordt.
    cls.click(function() {
        $.ajax({
            type: "POST",
            async: true,
            url: window.location.href.replace('\.aspx.+', '.aspx') + "/HidePwChangeWarning",
            data: "{ }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                // Verstop de melding als de opdracht succesvol is verwerkt
                $('#PwChangeWarning').slideUp(function() { $(this).remove(); });
            }
        });
    });
    
    // Hang de sluitknop aan de melding en toon de melding
    div.prepend(cls).slideDown();
}

// (De)selecteer alle checkboxes in een gridview
function GridViewCheckAll(el) {
    // geklikte checkbox
    var $el = $(el);
    
    // Checked of niet?
    var checked = $el.attr('checked');
    
    // Tellen in hoeveelste kolom de checkboxes zich bevinden
    var prev = $el.parent().prevAll().length;

    // Parent tabel ophalen
    var p = $el.parent();
    while (!p.is('table')) {
        p = p.parent();
    }

    // Vink alle checkboxes in de #e kolom aan/uit
    $('tr', p).each(function() {
        $('td:eq(' + prev + ') input[type="checkbox"]', $(this)).attr('checked', checked);
    });
}

// Lanceer het "loading..." scherm na XX msec
function load() {
    loadingTimeout = window.setTimeout("doLoad()", 50);
}

// Creeer het "loading..." scherm
function doLoad() {
    // Loader
    $('<div><img src="/Images/ajax-loader.gif" alt="" /></div>')
        .attr('Id', 'loadingPanel')
        .appendTo($('body'))
        .addClass('loadingPanel');
        
    // Schaduw
    $('<div />')
        .attr('Id', 'loadingPanelShadow')
        .appendTo($('body'))
        .addClass('loadingPanelShadow');
}

// Verwijder het "loading..." scherm
function unload() {
    // Annuleer het lanceren van het laadscherm als we binnen de timeout zitten
    window.clearTimeout(loadingTimeout);
    
    var p = $('#loadingPanel, #loadingPanelShadow');

    if (p.length > 0) {
        p.remove();
    }
}

function bindAI() {
    $('body').bind('keydown', appInfo);
}

function unbindAI() {
    $('body').unbind('keydown', appInfo);
}

function appInfo(e) {
    if (e.keyCode == 16) {
        alert($('#appInfo').html().replace(/<BR\/?>/gi, "\n"));
    }
}

// Schakelt menu-items in/uit afhankelijk van geklikte tab en diens status
function tabSwitchMenuActions(tabContainerID, tabIndex, targetPanel, activeTabIndex) {
    var ref;
    var tabItems = $('#' + tabContainerID + ' > ul li');

    $('#' + activeTabIndex).val(tabIndex);
    
    for (var i = 0; i < tabItems.length; i++) {
        ref = $(tabItems[i]).find('a:first').attr('ref');
        
        if (typeof(ref) == "undefined")
            continue;

        ref = ref.split(';')
        var menu = $('div.divMenu');

        if (i == tabIndex) {
            switch ($(targetPanel).css('display')) {
                case 'none':
                    $.each(ref, function() {
                        menu.find('a[ref="' + this + '"]').css('display', 'block');
                    });
                    break;
                default:
                    $.each(ref, function() {
                        menu.find('a[ref="' + this + '"]').hide();
                    });
                    break;
            }
        } else {
            $.each(ref, function() {
                menu.find('a[ref="' + this + '"]').hide();
            });
        }
    }
}

// Fix voor probleem met IE en datepicker
jQuery.fn.extend({
    fire: function(evttype) {
        el = this.get(0);
        if (document.createEvent) {
            var evt = document.createEvent('HTMLEvents');
            evt.initEvent(evttype, false, false);
            el.dispatchEvent(evt);
        } else if (document.createEventObject) {
            el.fireEvent('on' + evttype);
        }
        return this;
    }
});

// Vul de datum van vandaag in in 'tgt' na het aanvinken van checkbox 'cbx'.
function DoneClick(cbx, tgt) {
    var dateTimeBox = $('#' + tgt);
    if (cbx.checked == true) {
        var date  = new Date();
        var day   = date.getDate();
        var month = date.getMonth() + 1;
        dateTimeBox.val((day < 10 ? '0' : '') + day + '-' + (month < 10 ? '0' : '') + month + '-' + date.getFullYear());
    } else {
        dateTimeBox.val('');
    }
}

function toggle(strCheckboxId) {
    var cb = $('#' + strCheckboxId);
    cb.attr('checked', !cb.attr('checked'));
}

function toggleMe(cb) {
    cb.checked = !cb.checked;
}


function IsValidDate(val) {
    // Per set van getallen krijgen we een entry in dateParts[], dus
    // 10-12-2008 levert een array [10, 12, 2008].
    var dateParts = val.match(/\d+/g);

    // Controleren of er drie entries zijn
    if (dateParts && dateParts.length == 3) {
        // Nieuw datumobject aanmaken (deze wenst jaar, maand, dag als parameters,
        // waarbij januari = 0)
        var newDate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);

        // Geef true terug als de maand van de nieuwe datum overeenkomt met key
        // 1  en het jaar overeenkomt met key 0
        return dateParts[1] == newDate.getMonth() + 1 && dateParts[0] == newDate.getDate();
    }

    // Standaard false teruggeven
    return false;
}


// Controlefunctie voor datumveld
function cusDate_Validate(sender, args) {
    var tgt = $('#' + sender.controltovalidate);
    var txt = tgt.val();
    var fmt = tgt.attr('ref');

    switch (fmt) {
        case 'FullDate':
            args.IsValid = IsValidDate(txt) == true && /^(\d{1,2}-){2}\d{4}$/.test(txt);
            break;

        case 'GbaDate':
            args.IsValid = /^(\d{1,2}-){2}\d{4}$/.test(txt);
            break;

        case 'GbaSearch':
            args.IsValid = /^(\d{1,2}-){0,2}\d{4}$/.test(txt);
            break;

        default:
            args.IsValid = true;
    }
}