var color_on = '#fff5f3';
var color_off = '#ffffff';

function onLoad(view) {
    switch(view) {		
        default:
        case 'table':
        onTableLoad.initialize('tr', 'hover');
        break;
        
        case 'calendar':
        onCalendarLoad.initialize('cal_holder');
        break		
    }
}

onCalendarLoad = {
    initialize: function(holder) {
        var cal_holder = $(holder);
        var links = cal_holder.getElementsByTagName('A');
        for (var i=0; i < links.length; i++) {
            var elem = links[i];
            elem.onclick = function(event) {
                if(!event) event = window.event;
                onTableLoad.popInfo(this, Event.pointerX(event), Event.pointerY(event));				
                return false;
            }		
        }
    
    }
}

onTableLoad = {
    element: null,
    order_button: [],
    
    initialize: function(tag, class_name) {
        if (onLayoutLoad.section == 'rooms') return;
        var self = this;
        var allElements = document.getElementsByTagName(tag);
        for (var i = 0; i < allElements.length; i++) {
            var elem = allElements[i];
            if (elem.className == class_name) {
                
                // set event handlers
                elem.onclick = function(event) { 		
                    if(!event) event = window.event;
                    self.popInfo(this, Event.pointerX(event), Event.pointerY(event));
                }
                elem.onmouseover = function() { this.style.background = color_on }
                elem.onmouseout = function() { this.style.background = color_off }
            }
        }

        var orderButtons = $('orders').getElementsByTagName('A');
        for (var i = 0; i < orderButtons.length; i++) {			
            var orderButton = orderButtons[i];
            if (!orderButton.id) console.warn('cannot find ordering button '+i+' id');
            
            orderButton.onclick = function() {
                var order;
                if (self.order_button[this.id]) order = self.order_button[this.id]; 
                else order = 'DESC';								
                onLayoutLoad.searchRequest('table', this.id, order);								
                var next_order;				
                next_order = (order == 'DESC')?'ASC':'DESC';
                self.order_button[this.id] = next_order;				
                return false;
            }
        }
    },
    
    closePopInfo: function() {
        this.element.parentNode.removeChild(this.element);
    },
        
    popInfo: function(element, x, y) {
        var prev;
        if(prev = this.element) {
            if (prev.parentNode)
                prev.parentNode.removeChild(prev);			
        }
        var holder = this.element = document.createElement('div');
        
        var popInfoStateHandler = {
            onCreate: function() {
                holder.innerHTML = '<div style="text-align:center; padding-top:30px; padding-bottom:30px;">Laadimine...</div>';
            }
        };
        Ajax.Responders.register(popInfoStateHandler);

        var fillHolder = function(response) {
            holder.innerHTML = response.responseText;
        };
        popInfoReq = new Ajax.Request(window.location.href, {method:'get', parameters: 'action=popinfo&hide_template=1&ProspectId='+element.id, onComplete: fillHolder.bind(this)});
        holder.id = 'popinfo';
        holder.style.position = 'absolute';
        holder.className = 'popinfo';
        holder.style.left = parseInt(x - 187)+'px';
        holder.style.top = parseInt(y - 10)+'px';
        
        $('main').appendChild(holder);
    }
};

onLayoutLoad = {	
    // user
    buttons: 	['table', 'calendar'],
    search: 	['show'],
    detail:     ['show_detail'],
    tabs:		['rooms_open', 'rooms_closed'],
    
    // defaults
    view: 		'table', 	
    section:	'training', 
    tab:		'rooms_open', 

    init: function(section, onLoadRender) {
        var self = this;
        new Ajax.Request('?action=initialize&hide_template=1&section='+section, {onComplete: function(data){
            $('header').innerHTML = data.responseText;
            self.initialize(section, onLoadRender);
        }});
    },     
       
    initialize: function(section, onLoadRender) {        
        if (section) this.section = section;
        if ($(this.view)) $(this.view).className = 'icons-sel';
        this.stateHandler('loading_global');
        
        this.interceptLinks(onLayoutLoad.buttons, this.searchRequest);
        
        if (section == 'training') {
            this.periodHandler('period', '0');
            this.interceptLinks(['period'], this.periodHandler, 'onchange');
            this.interceptLinks(onLayoutLoad.search, this.searchRequest);
            this.interceptLinks(onLayoutLoad.detail, this.popupDetail);
        }
        
        if (section == 'rooms') {
            this.interceptLinks(['roomname'], this.searchRequest, 'onchange');
            this.interceptLinks(onLayoutLoad.tabs, this.tabsHandler);
        }
        
        if (onLoadRender) this.renderRequest(onLoadRender);
    },
       
    periodHandler: function(period, sel_value) {
        var period = $(period);
        var selected = period.options.selectedIndex;
        if (!sel_value) var sel_value = period.options[selected].id;
        
        var dc1 = new Date();
        var dc2 = new Date();
        var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
        
        switch(sel_value) {
            case '0':
            dc2 = false;
            break;
            
            case '1':
            dc1.add('m',1);
            dc1.setDate(1);
            
            dc2.add('m',1);
            dc2.setDate(daysInMonth[dc2.getMonth()]);
            break;
            
            case '2':
            dc2.add('d',7);			
            break;

            case '3':
            dc2.add('d',14);
            break;
            
            case '4':
            dc1.setDate(1);
            dc2.setDate(daysInMonth[dc2.getMonth()]);
            break;
        }
        
        if (dc1) $('dc1').value = formatDate(dc1,'d.M.y');
        else $('dc1').value = 'pp.kk.aaaa';
        
        if (dc2) $('dc2').value = formatDate(dc2,'d.M.y');
        else $('dc2').value = 'pp.kk.aaaa';
        
    },	
    
    tabsHandler: function(button, render) {
        //clear
        onLayoutLoad.tabs.each(function(i){
            $(i).className = '';
            try{
                $(i+'_h').style.display = 'none';
            } catch(e) { console.warn(e) }
        });
        
        //select tab
        onLayoutLoad.tab = button;
        $(button).className = 'tabs-sel';
        $(button+'_h').style.display = 'block';
    },
    
    stateHandler: function(container) {
        var globalLoading = {
            onCreate: function() {
                $(container).style.display = 'block';
            },
            onComplete: function() {
                if (Ajax.activeRequestCount == 0) {
                    $(container).style.display = 'none';
                    if (onLayoutLoad.section=='rooms') onLayoutLoad.tabsHandler(onLayoutLoad.tab);
                }
            }
        }
        Ajax.Responders.register(globalLoading);
    },
    
    interceptLinks: function(ar, func, mevent) {
        if (!mevent) mevent = 'onclick';
        ar.each(function(i) {
            if (!$(i)) { console.warn('element '+i+' cannot be found'); return }
                if (mevent=='onclick')
                $(i).onclick = function() {
                    func(i);
                    return false;
                }
                if (mevent=='onchange')
                $(i).onchange = function() {
                    func(i);
                    return false;
                }
        });		
    },
        
    updateLayout: function(response, json) {
        $('content').innerHTML = response.responseText;
        onLoad(json['view']);
    },
    
    popupDetail: function() {
        var pw = 750;
        var ph = 300;
        
        this.view = 'details';
        var param_str = onLayoutLoad.serializeSearch();        
        window.open('?action=search_'+onLayoutLoad.section+'&section='+onLayoutLoad.section+'&hide_template=1&view='+this.view+'&'+param_str, "Detailvaade", "menubar=no,width="+pw+",height="+ph+",toolbar=no,scrollbars=yes,resizable=yes");
    },
    
    serializeSearch: function(field, order) {        
        var params = ['teacher', 'roomname', 'inssales', 'client', 'period', 'dc1', 'dc2', 'status'];
        var params_pair = [];
        var value;
        for (var i = 0; i<params.length; i++) {
            if (!$(params[i])) continue;
            Try.these(
                function () {
                    var box = $(params[i]).options;
                    if (!box) {
                        value = $(params[i]).value;
                    } else{
                        value = box[box.selectedIndex].id;
                    }
                }
            );
            
            if (value == 0) continue;
            params_pair.push(params[i]+'='+value);
        }
        if (field && order) {
            params_pair.push('field='+field);
            params_pair.push('order='+order);
        }
            
        return params_pair.join("&");
   
    },

    searchRequest: function(button, field, order) {
        if (!this.view) this.view = 'table';
        if (this.view == 'details') this.view = 'table';
        if (button == 'table' || button == 'calendar') { 
            this.view = button;
            for(var key=0; key < onLayoutLoad.buttons.length; key++) { // clear
                $(onLayoutLoad.buttons[key]).className = 'icons';
            }
            $(this.view).className = 'icons-sel';
        }        
        var param_str = onLayoutLoad.serializeSearch(field, order);
        var search = new Ajax.Request(window.location.pathname, {method:'post', parameters:'action=search_'+onLayoutLoad.section+'&section='+onLayoutLoad.section+'&hide_template=1&view='+this.view+'&'+param_str, onComplete: onLayoutLoad.updateLayout});
    },
        
    renderRequest: function(view) {				
        var render = new Ajax.Request(window.location.pathname, {method:'get', parameters:'action=render&section='+onLayoutLoad.section+'&hide_template=1&view='+view, onComplete: onLayoutLoad.updateLayout});
    }	
}

