size = function (obj) {
  var len = obj.length ? obj.length : 0;
    for (var k in obj)
      len++;
  return len;
}

$(document).ready(function() { 
   $('#loading').ajaxStart(function() {$(this).show();});
   $('#loading').ajaxStop(function() {$(this).fadeOut();});

   $('.ccontrols a').hover(
        function() {
            var obj = $(this).parent().prev();
            obj.attr('src', obj.attr('src').replace('.gif', '_active.gif'));
        },
        function() {
            var obj = $(this).parent().prev();
            obj.attr('src', obj.attr('src').replace('_active', ''));
        }
    );

    ctabs = $('div.tabs');
    if(ctabs.length > 0) {
        ctabs.each(function() {
            tabs.init($(this));
        });
    }

    setTimeout(banners.refresh, banners.interval);
    
    
    if($('#date').length > 0) {
        timetable.init(null, $('#date'));
    }
    
     if($('.doctors-answers input[type=radio]').length > 0) jmagic.checkbox($('.doctors-answers input[type=radio]'));
     $('a[href^=#extract-voting-]').click(function() {
         var id = $(this).attr('href').replace('#extract-', '');
         var a = $('#answers-'+id);
         if(a.css('display').toLowerCase() == 'none') {
             a.slideDown();
         } else {
             a.slideUp();
         }
         return false;
     });
});

banners = {
    interval: 20000,

    refresh: function() {
        $.get('/update_banners/top/2/', function(res) {
            $('#tizer').html(res);
            setTimeout(banners.refresh, banners.interval);
        });
    }
}

ghtml = {
    options: function(list, selected, first) {
        var code = '';
        if (first && first !== undefined) {
            code += '<option value="">'+first+'</option>';
        }
        $.each(list, function(i, n) {
            code += '<option value="'+i+'" ';
            if (selected && selected !== undefined && selected == i) {
                code += 'selected = "selected"';
            }
            code += '>'+n+'</option>';
        });
        return code;
    }
}

tv = {
    margin: 0,
    timeout: 5000,
    timer: null,
    moving: false,
    autoplay: false,
    img_height: 114,
    init: function(options) {
        if(options && options !== undefined) {
            if(options.img_height && options.img_height !== undefined) tv.img_height = options.img_height;
            if(options.timeout && options.timeout !== undefined) tv.timeout = options.timeout;
        }
    },
    img_count: function() {
        return $('#tizer-moving').find('img').length;
    },
    move: function(){
        if(tv.moving) return false;

        var new_margin = 0;
        tv.moving = true;
        if(tv.margin >= -tv.img_height*(tv.img_count()-2)) {
            var new_margin = tv.margin-tv.img_height;
        }
        
        $('#tizer-moving').animate({marginTop: new_margin+'px'}, 200, function() {
            tv.margin = new_margin;
            tv.moving = false;

            tv.timer = setTimeout(function(){tv.move()}, tv.timeout);
        });

    },
    play: function(){
        if(!tv.autoplay) {
            tv.autoplay = true;
            tv.timer = setTimeout(function(){tv.move()}, tv.timeout);
        } else {
            tv.autoplay = false;
            clearTimeout(tv.timer);
        }
    }
}

tabs = {
    obj: null,
    tab_list: new Array(),
    layers: new Array(),
    init: function(obj) {
        if(!obj || obj === undefined) return false;

        this.obj = obj;
        this.tab_list = obj.find('ul.tabs-controls > li');
        this.layers = obj.find('div.tabs-layer');

        this.tab_list.click(function() {
            var o = $(this);
            if(o.hasClass('active')) return false;

            tabs.tab_list.removeClass('active');
            o.addClass('active');
            var i = o.index();
            tabs.layers.removeClass('active');
            $(tabs.layers[i]).addClass('active').find('ul.panoram-controls').each(function() {
                $(this).jcarousel({
                    initCallback: function(carousel) {
                        $(carousel.list).find('img').click(function() {
                            $(this).parent().parent().find('img.active').removeClass('active');
                            $(this).addClass('active').parent().parent().parent().parent().parent().prev().remove().end().before(
                                '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">'+
'<param name="movie" value="'+$(this).attr('alt')+'" />'+
'<param name="quality" value="high" /> <embed type="application/x-shockwave-flash" width="100%" height="340" src="'+$(this).attr('alt')+'" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" quality="high"></embed>'+
'</object>'
                            );
                                /*.find('param[name=movie]').attr('value', $(this).attr('alt')).end()
                                .find('embed').attr('src', $(this).attr('alt'));*/
                        });
                    }
                });
            });

            return false;
        });
    }
}

voting = {
    id: 0
}


timetable = {
    data: {}, 
    bsDiv: '<div id="bs_timetable_helper" class="bs_timetable_helper"></div>',
    interval: 0,
    c: null,
    o: null, 

    init: function(data, obj) {
        timetable.data = data;
        if(!obj || obj === undefined || obj.length == 0) return false;

        timetable.o = obj;

        $(document).ready(function() {
            obj.parent().append(timetable.bsDiv);

            $('td.free a').live('click', function() {
                var tt = $(this).attr('href').replace('#', '').replace('_', ' ').replace(/\-/g, '.');
                var tta = tt.split(':');
                tta.pop();
                timetable.o.val(tta.join(':'));
                timetable.hide();
                return false;
            });
        });
    },

    get_interval: function() {
        if(timetable.interval) return timetable.interval;

       var res = 0;
       $('input[name=ctype]').each(function() {
           if($(this).attr('checked')) res = $(this).val();
       });

       timetable.interval = res == 'ctype_1' ? 30 : res == 'ctype_2' ? 15 : 45;
       return timetable.interval;
    },

    draw: function() {
        if(!timetable.data || timetable.data === undefined) return false;

        if(!timetable.c) timetable.c = $('#bs_timetable_helper');
        var c = timetable.c;

        var code = '<table class="bs_timetable_table">';
        code += '<thead><tr>';
        code += '<th class="f">&nbsp;</th>';
        // для рисования клеточек по 15 мин
        var lim = (12*60)/15;
        for(var i =0;i<lim;i++) {
            code += '<th><span style="background-position: -'+(i*10)+'px 0px;">&nbsp;</span></th>';
        }
        code += '<th class="l"><a href="javascript:void(0)" onclick="timetable.hide();">x</a></th></tr></thead><tbody '+(size(timetable.data)*14 > 153 ? '' : 'style="height: '+(size(timetable.data)*14)+'px;"')+'>';

        var date = '';
        var free = false;

        for(var j in timetable.data) {
            date = j.replace(/\-/g, '.');
            code += '<tr>';
            code += '<td class="f">'+date+'</td>';

            hour = 8;
            mc = 0;
            var t = '';

            for(var k =0;k<lim;k++) {
                t = hour+':'+(mc.toString().length == 1 ? '0'+mc : mc)+':00';
                // проверка свободного времени
                free = timetable.check_free(date, t, timetable.data[j]);

                code += '<td '+(free?'class="free"':'')+'>'+(free?'<a href="#'+j+'_'+t+'" title="Записаться на '+date+' '+(hour+':'+(mc.toString().length == 1 ? '0'+mc : mc))+'">&nbsp;</a>':'<span>&nbsp;</span>')+'</td>';
                mc += 15;
                if(mc >= 60) {
                    hour++;
                    mc = 0;
                }
                if(hour == 13) hour++;


            }
            code += '<td class="l">&nbsp;</td></tr>';
        }

        code += '</tbody></table>';
        code += '<ul class="ts_legend"><li class="ts_legend_busy"><span>&nbsp;</span>Занято</li><li class="ts_legend_free"><span>&nbsp;</span>Свободно</li></ul>'
        c.html(code);

        $(document).ready(function() {
            $('.bs_timetable_table td').hover(
                function() {
                    var o = $(this);
                    var i = o.index();
                    o.parent().addClass('cross_a');
                    $('.bs_timetable_table tr').each(function() {
                        $($(this).find('td')[i]).addClass('cross_ap');
                    });
                },
                function() {
                    var o = $(this);
                    var i = o.index();
                    o.parent().removeClass('cross_a');
                    $('.bs_timetable_table tr').each(function() {
                        $($(this).find('td')[i]).removeClass('cross_ap');
                    });
                }
            );
        });

        return timetable;
    },

    check_free: function(d, t, data) {
        var interval = timetable.get_interval();
        var da = d.split('.');
        var ta = t.split(':');
        var start = new Date(da[2], da[1], da[0], ta[0], ta[1], ta[2]);
        var finish = new Date(start.valueOf()+(interval*60000));

        var free = false;

        var t_start  = 0;
        var t_finish  = 0;
        for(var i in data) {
            t_start = new Date(da[2], da[1], da[0], data[i].start.split(':')[0], data[i].start.split(':')[1], data[i].start.split(':')[2]);
            t_finish = new Date(da[2], da[1], da[0], data[i].finish.split(':')[0], data[i].finish.split(':')[1], data[i].finish.split(':')[2]);
            if((start > t_finish) || (finish <= t_start)) free = true;
            else free = false;
            if(!free) return free;
        }
        return free;
    },

    load: function(t) {
        var dt = $('#date');
        var dtv = dt.val();
        dt.val('загрузка...').attr('disabled', true);

       var t = 0;
       $('input[name=ctype]').each(function() {
           if($(this).attr('checked')) t = $(this).val();
       });
       
       var doctor = $('#doctor').val();
       if(doctor) {
           $.getJSON('/load_timetable/'+t+'/'+doctor+'/', function(res) {
               timetable.data = res;
               if(size(res) == 0)  {
                   dt.val('требует уточнения');
                   timetable.hide();
                   return false;
               }

                dt.val(dtv == 'требует уточнения' || dtv == 'загрузка...' ? '' : dtv).removeAttr('disabled');
                timetable.draw();
            });
       } else {
           setTimeout(function() {timetable.load()}, 100);
       }
    },

    show: function() {
        if(timetable.c) timetable.c.fadeIn();
    },

    hide: function() {
        if(timetable.c) timetable.c.fadeOut();
    }
}
