﻿function DersProgram(configs) {

    function parseTime(subject) {
        var myregexp = /^([0-9]{2}):([0-9]{2}):[0-9]{2}$/im;
        var match = myregexp.exec(subject);
        if (match != null){
            return {num:parseInt(match[1] + match[2]),text:match[1] +':'+ match[2]};
        }
        return null;
    }

    var isAllowed = false;
    var defaults = { lineheight: 19, startfrom: 9, endto: 23, program: null };

    if (configs != null) {
        for (var key in configs) {
            defaults[key] = configs[key];
        }
    }

    if (defaults['program'] == null)
        return;

    for (var key in defaults['program']) {
        for (var i = 0; i < defaults['program'][key].length; ++i) {
            var obj=parseTime(defaults['program'][key][i]['start']);
            defaults['program'][key][i]['starttext'] = obj['text'];
            defaults['program'][key][i]['start'] = obj['num'];
            
            obj=parseTime(defaults['program'][key][i]['end']);
            defaults['program'][key][i]['endtext'] = obj['text'];
            defaults['program'][key][i]['end'] = obj['num'];
        }
    }

    isAllowed = true;
    var days = [{ id: 1, text: 'Pazartesi' },
                 { id: 2, text: 'Salı' },
                 { id: 3, text: 'Çarşamba' },
                 { id: 4, text: 'Perşembe' },
                 { id: 5, text: 'Cuma' },
                 { id: 6, text: 'Cumartesi' },
                 { id: 0, text: 'Pazar' }
                  ];

    this.DrawTable = function(conf) {
        if (!isAllowed)
            return;
        var dest = conf['dest'];
        var zoom = conf['zoom'];
        var txtzoom = conf['txtzoom'] || conf['zoom'];
        var wdt = dest.width();
        var hgt = dest.height();
        dest.css('width', wdt * zoom);
        dest.css('height', hgt * zoom);
        var headerfirstwidth = (45 * zoom);
        var defaultlineheight = defaults['lineheight'] * zoom;
        var fontsize = 100 * txtzoom;
        var html = [];

        html.push('<div>');
        html.push('<table><tbody>');
        html.push('<tr>');

        html.push('<td style="width:' + headerfirstwidth + 'px;">&nbsp;</td>');
        for (var i = 0; i < days.length; i++) {
            html.push('<td class="PA_header PA_bld" style="font-size:' + fontsize + '%">');
            html.push(days[i]['text']);
            html.push('</td>');
        }
        html.push('</tr>');
        html.push('</tbody></table>');
        html.push('</div>');

        html.push('<div>');
        html.push('<table><tbody>');
        html.push('<tr>');
        html.push('<td style="width:' + headerfirstwidth + 'px;">');
        html.push('<div class="PA_wrapper">');
        html.push('<div class="PA_slots">');
        var firstRun = true;
        for (var i = defaults['startfrom']; i < defaults['endto']; i++) {
            html.push('<div class="PA_slot PA_hourend PA_bld PA_cnt" style="height:' + (defaultlineheight) + 'px;font-size:' + fontsize + '%;' + (firstRun ? 'border-top:#ccc 1px solid;' : '') + '">');
            if (i < 10)
                html.push('0');
            html.push(i);
            html.push(':00')
            html.push('</div>');
            html.push('<div class="PA_slot PA_hourend PA_bld PA_cnt" style="height:' + (defaultlineheight) + 'px;font-size:' + fontsize + '%;' + 'border-bottom:#ccc 1px solid;' + '">&nbsp;</div>');
            firstRun = false;
        }
        html.push('</div>');
        html.push('</div>');
        html.push('</td>');
        html.push('<td colspan="7">');
        html.push('<div class="PA_wrapper">');
        html.push('<div class="PA_slots">');

        var firstRun = true;
        for (var i = defaults['startfrom']; i < defaults['endto']; i++) {

            html.push('<div class="PA_slot" style="height:' + defaultlineheight + 'px;' + (firstRun ? 'border-top:#ccc 1px solid;' : '') + '" />');
            html.push('<div class="PA_slot PA_hourend" style="height:' + defaultlineheight + 'px" />');
            firstRun = false;
        }

        html.push('</div>');
        html.push('</div>');
        html.push('</td>');
        html.push('</tr>');

        html.push('<tr>');
        html.push('<td>');
        html.push('</td>');
        for (var i = 0; i < days.length; i++) {
            html.push('<td class="day' + (i + 1) + '">');
            html.push('<div class="PA_wrapper">');
            html.push('<div class="PA_slots">');

            var gunobj = defaults['program']['d' + days[i]['id']];

            if (gunobj != null && gunobj.length > 0) {
                for (var j = 0; j < gunobj.length; j++) {
                    var tmp = gunobj[j]['start'] / 100;
                    var starttime = Math.floor(tmp) + ((tmp - Math.floor(tmp)) / .6);
                    tmp = gunobj[j]['end'] / 100;
                    var endtime = Math.floor(tmp) + ((tmp - Math.floor(tmp)) / .6);


                    var timediff = (endtime - starttime);
                    var timetostart = starttime - defaults['startfrom'];
                    var height = (Math.round(timediff * defaultlineheight) + timediff) * 2 - 2;
                    var top = (Math.round(timetostart * defaultlineheight) + timetostart) * 2 - 1;
                    html.push('<div class="PA_pr" style="border:1px solid ' + darkColor(gunobj[j]['color'], 30) + ';background-color:' + gunobj[j]['color'] + ';left:0px;top:' + top + 'px;height:' + height + 'px;line-height:auto;font-size:' + (fontsize*.8) + '%;color:' + darkColor(gunobj[j]['color'], 60) + '">');
                    html.push('<div style="height:' + (18 * txtzoom) + 'px;line-height:' + (18 * txtzoom) + 'px;font-weight:bold;background-color:' + darkColor(gunobj[j]['color'], 20) + ';color:' + darkColor(gunobj[j]['color'], 60) + '">' + gunobj[j]['starttext'] + ' - ' + gunobj[j]['endtext'] + '</div>')
                    html.push(gunobj[j]['text']);
                    html.push('</div>');
                }
            }

            html.push('</div>');
            html.push('</div>');
            html.push('</td>');
        }
        html.push('</tr>');


        html.push('</tbody></table>');
        html.push('</div>');

        dest.empty();
        dest.html(html.join(''));
    };

    function darkColor(hexcolor, factor) {
        var color = { r: 0, g: 0, b: 0 };
        var myregexp = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/im;
        var match = myregexp.exec(hexcolor);
        if (match != null) {
            color['r'] = parseInt(match[1], 16);
            color['g'] = parseInt(match[2], 16);
            color['b'] = parseInt(match[3], 16);
        }
        for (var key in color) {
            var tmp = color[key] - Math.round(color[key] / 100) * factor;
            if (tmp < 0)
                tmp = 0;
            else if (tmp > 255)
                tmp = 255;
            color[key] = tmp;
        }

        var hexcolor = ['#'];
        for (var key in color) {
            var tmp = color[key].toString(16);
            if (tmp.length == 1)
                hexcolor.push('0');
            hexcolor.push(tmp);
        }

        return hexcolor.join('');
    }
}
