LoadMonitor = {
    '_callbacks': [],
    'onContentLoaded': function(cb) {
        this._callbacks.push(cb);
    },
    'trigger': function() {
        for(var i = 0; i < this._callbacks.length; i++) {
            this._callbacks[i]();
        }
    }
}

function rwidget(name, id) {
  url = '/frontend/assets/rwidget/' + name;
  new Ajax.Request(url, {onSuccess: function(r) {
    $(id).innerHTML = r.responseText;
  }})
}

function get_player(player_name) {
       if (player_name == undefined) {
           player_name = 'the_player';
       }
       if (navigator.appName.indexOf("Microsoft") != -1) {
           return window[player_name]
       } else {
           return document[player_name]
       }
   }

function toggle_checkboxes_by_column(hcb, col) {
	tbl = find_parent_node(hcb, 'table');
	rows = tbl.getElementsByTagName('tr');
	for(var i = 0; i < rows.length; i++) {
        var c = rows[i].select('input[type=checkbox]')[0];
		c.checked = hcb.checked;
	}
}

function make_audible(object, events_list) {
    object._listeners = [];
    if (events_list == undefined) {
        throw "Empty events list";
    }
    for(var i = 0; i < events_list.length; i++) {
        object._listeners[events_list[i]] = [];
    }
    
    object._dispatch = function(e) {
        for(var i = 0; i < this._listeners[e.name].length; i++) {
            this._listeners[e.name][i](e);            
        }
    }    
    
    object.addEventListener = function(e_name, callback) {
        this._listeners[e_name].push(callback);
    }

    object.removeEventListener = function(e_name, callback) {
        old_listeners = this._listeners[e_name];
        this._listeners[e_name] = [];
        for(var i = 0; i < old_listeners.length; i++) {
            if (old_listeners[i] != callback) {
                this._listeners[e_name].push(old_listeners[i]);
            }
        }
    }    
}

function make_ul(arr) {
    ul = tag('ul');
    for(var i = 0; i < arr.length; i++) {
        li = tag('li');
        li.innerHTML = arr[i];
        ul.appendChild(li);
    }
    
    return ul;
}

function get_body() {
    return document.getElementsByTagName('body')[0];
}

function log(str) {
    try {
        window.console.log(str);
    } catch(e) {
        return;
    }
}

function parse_json(str) {
    try {
        if (str.body) {
            str = str.body;
        }
        return eval('(' + str + ')');
    } catch(e) {
        log('[parse_json] ' + e.toString());
        log('[parse_json] ' + str.toString());
        return false;
    }
}

function in_array(needle, haystack) {
    for(var i = 0; i < haystack.length; i++) {
        if (needle == haystack[i]) {
            return true;
        }
    }
    return false;
}

function array_filter(a, b) {
    var a2 = [];
    for(var i = 0; i < a.length; i++) {
        if (!in_array(a[i], b)) {
            a2.push(a[i]);
        }
    }
    return a2;
}

JSLoader = {
    '_scripts': [],
    '_callbacks': [],
    '_on_script_loaded': function(http_response) {
        get_body().appendChild(tag('script', {}, response.body));
        if (this._callbacks[http_response.request.location] != undefined) {
            this._callbacks[http_response.request.location]();
        }    
    }, 
    'load': function(script_name, callback) {
        if (this._scripts.length == 0) {
            script_elements = document.getElementsByTagName('script');
            for (var i = 0; i < script_elements.length; i++) {
                script_element = script_elements[i]; 
                if (script_element.src != '') {
                    this._scripts.push(script_element.src);
                }
            }           
        }


        new_src = 'http://' + location.host + '/assets/' + script_name + '.js';
        needed = !in_array(new_src, this._scripts);
        if (needed) {
            this._callbacks[new_src] = callback;
            this._scripts.push(new_src);
            HTTPClient.GET(new_src, this._on_script_loaded.bind(this));
        } else { // script already added, trigger callback immediately
            if (this._callbacks[new_src] != undefined) {
                this._callbacks[new_src]();
            }
        }        
    }
}


function add_javascript(script_name, callback) {
    JSLoader.load(script_name, callback);
}

function add_stylesheet(n) {
    url = '/assets/' + n + '.css';
    link_elements = document.getElementsByTagName('link');
    needed = true;
    for(var i = 0; i < link_elements.length; i++) {
        link_element = link_elements[i];
        if (link_element.rel == 'stylesheet') {
            if (url == link_element.href) {
                needed = false;
                break;
            }
        }
    }
    if (needed) {
        new_link = document.createElement('link');
        new_link.rel = 'stylesheet';
        new_link.href = url;
        new_link.type = 'text/css';
        document.getElementsByTagName('head')[0].appendChild(new_link);
    }
}

function set_password_visibility(flag, fields_id) {
    for(var i = 0; i < fields_id.length; i++) {
        if (field = document.getElementById(fields_id[i])) {
            field.type = flag?'text':'password';
        }
    }
}

function track_default_value(el, dv, make_password) {
    if (el.value == '') {
        el.value = dv;
        if (make_password) {
            el.type = 'text';
        }        
    }
    return true;
}

function reset_field_value(el, dv, make_password) {
    if (el.value == dv) {
        el.value = '';
        if (make_password) {
            el.type = 'password';
        }
    }
    return true;    
}

function set_preferred_view(flag) {
    data = {list_posts_as: flag}
    HTTPClient.POST('/admin/user/do_set_preferred_view', data, function(response) {
        if (response.body == "1") {
            location.reload();
        }
    })
}

function find_parent_node(el, node_type, class_name) {
    while(el = el.parentNode) {
        if (el.nodeName.toLowerCase() == node_type.toLowerCase()) {
            if (class_name) {               
                if (Element.hasClassName(el, class_name)) {                             
                   return el;
                }
            } else {
                return el;
            }
        }
    }
    return false;
}

function submit_channel_switcher(el) {
    if(el.options[el.selectedIndex].value == '') {
        return;
    }
    frm = find_parent_node(el, 'form');
    frm.submit();
}

wopen = function(url, title, attributes) {
    attributesString = '';
    if (attributes) {
        str = new Array();
        for(k in attributes) {
            str.push(k + '=' + attributes[k]);
        }
        attributesString = str.join(', ');
    }

    nw = window.open(url, title, attributesString);
    return nw;
}

function form_add_value(frm, name, value) {
    hid = document.createElement('input');
    hid.type = 'hidden';
    hid.name = name;
    hid.value = value;
    frm.appendChild(hid);
    return hid;
}

function txt(str) {
    return document.createTextNode(str);
}

function tag(name, attributes, content) {
    el = document.createElement(name);
    if (attributes != undefined) {
	for(var k in attributes) {
	    if (k == 'class') {
	        el.className = attributes[k];
	    } else {
	        el.setAttribute(k, attributes[k]);
	    }
        }
    }
    if (content != undefined) {
		if (typeof(content) == 'object') {
			el.appendChild(content);
		} else {
        	el.innerHTML = content;
		}
    }

    return el;
}

function toggle_checkbox_row(cb) {
    if (cb.checked) {
        its_row = find_parent_node(cb, 'tr');
        Element.removeClassName(its_row, 'ruled');
    } else {
        its_row = find_parent_node(cb, 'tr');
    }    
}
function check_row_checkboxes(row) {


    inputs = row.getElementsByTagName('input');

    for(var i = 0; i < inputs.length; i++) {
        if (inputs[i].type.toLowerCase() == 'checkbox') {
            inputs[i].click();
        
        }
    } 
}

function highlight_row(el) {
    if (Element.hasClassName(el, 'drag-handle')) {
        return;
    }
    if (el.nodeName.toLowerCase() == 'tr') {
        r = el;
    } else {
        r = find_parent_node(el, 'tr')
    }
    Element.addClassName(r, 'ruled');
}

function unhighlight_row(el) {
    if (Element.hasClassName(el, 'drag-handle')) {
        return;
    }    
    if (el.nodeName.toLowerCase() == 'tr') {
        r = el;
    } else {
        r = find_parent_node(el, 'tr')
    }
    Element.removeClassName(r, 'ruled');
}

function find_row_checkbox_or_radio(row) {
    inputs = row.getElementsByTagName('input');
    found = false;
    for(var i = 0; i < inputs.length; i++) {
        if (inputs[i].type.toLowerCase() == 'checkbox') {
            found = inputs[i];
            break;
        }
    }
    if (found == false) {
        for(var i = 0; i < inputs.length; i++) {
            if (inputs[i].type.toLowerCase() == 'radio') {
                found = inputs[i];
                break;
            }
        }        
    }
    
    return found;
}

function tr_toggle_active(el) {

    switch(el.nodeName.toLowerCase()) { 
        case 'a':
        case 'img':
            cb = false;
            row = false;
            break;
        case 'input':
            cb = el;
            row = find_parent_node(cb, 'tr');
            set_by_cb = true;
            break;
        case 'tr':
            row = el;
            cb = find_row_checkbox_or_radio(row);
            set_by_cb = false;
            break;
        default:
            if (Element.hasClassName(el, 'drag-handle')) {
               row = false;
               cb = false;
            } else {
                row = find_parent_node(el, 'tr');
                cb = find_row_checkbox_or_radio(row);
                set_by_cb = false;
            }
            break;
    }
    
    if (!cb && !row) {
        return;
    }
    
    if (set_by_cb) {
        if (cb.checked) {
            Element.addClassName(row, 'active');
        } else {
            Element.removeClassName(row, 'active');
        }
    } else {
        if (Element.hasClassName(row, 'active')) {
            Element.removeClassName(row, 'active');        
            cb.checked = false;
        } else {
            Element.addClassName(row, 'active');     
            cb.checked = true;   
        }
    }
}

function add_ruler(table) {
    rows = table.getElementsByTagName('tr');
    for(var i = 1; i < rows.length; i++) {
        row = rows[i];
        row.setActive = function(f) {
            if (f) {
                Element.addClassName(this, 'active')            
            } else {
                Element.removeClassName(this, 'active')            
            }   
        }
        row.toggleActive = function() {
            this.setActive(!Element.hasClassName(this, 'active'));
        }
        if (!Element.hasClassName(row, 'header')) {
            Event.observe(row, 'mouseover', function(e) {highlight_row(Event.element(e))});
            Event.observe(row, 'mouseout', function(e) {unhighlight_row(Event.element(e))});
            Event.observe(row, 'click', function(e) {tr_toggle_active(Event.element(e));});
        }
    }    
}

function add_table_ruler() {
    tables = document.getElementsByTagName('table');
    for(var k = 0; k < tables.length; k++) {
        table = tables[k];
        if ((Element.hasClassName(table, 'data') || Element.hasClassName(table, 'folder')) && (Element.hasClassName(table, 'noruler') == false)) {
            add_ruler(table)
        }
    }
}
Event.observe(window, 'load', function() {
    setTimeout(add_table_ruler, 200);
});


function mark_row(tbl, callback) {
    rows = tbl.getElementsByTagName('tr');
    for(var i = 0; i < rows.length; i++) {
        row = rows[i];
        if (!Element.hasClassName(row, 'header')) {
            if (callback(row)) {
                Element.addClassName(row, 'marked');
            }
        }
    }
}

function content_loaded() {
    LoadMonitor.trigger();
} 

function create_autocomplete_window(r) {
    list_container = document.createElement('div');
    list_container.className = 'autocomplete-results';
    
    list_ul = document.createElement('ul');
    for(i = 0; i < r.length; i++) {
        list_li = document.createElement()
    }
    
    list_container.appendChild(ul);
    
    b = document.getElementsByTagName('body')[0];
    b.appendChild(list_container);
}

function find_coords(el) {
    y = 0;
    x = 0;
    yel = el;
    xel = el;
    while(yel) {
        y += yel.offsetTop;
        yel = yel.offsetParent;
    }
    
    while(xel) {
        x += xel.offsetLeft;
        xel = xel.offsetParent;
    }
    
    return {x: x, y: y}
}


function make_transparent(el, op) {
    el.style.filter = 'alpha(opacity=' + (op * 100) + ')';
    el.style.opacity = op;
}

function cover_page() {
    cover = document.createElement('div');
    b = document.getElementsByTagName('body')[0];
	b.style.position = 'relative';
    b.appendChild(cover);
    cover.style.position = 'absolute';
    cover.style.top = '0';
    cover.style.left = '0';
    cover.style.bottom = '0';
    cover.style.right = '0';
	cover.style.width = '100%';
    cover.style.zIndex = '999';
    cover.style.backgroundColor = '#000000';

	if (Element.getHeight(cover) < 50) {
		// IE 6 doesn't stretch the cover to fill the page's height
		cover.style.height = (document.getElementById('container').clientHeight + document.getElementById('footercontainer').clientHeight) + 'px';
	}

	try {
		make_transparent(cover, 0.3);
    	Effect.Appear(cover, {duration: 6, to: 0.3});
	} catch(e) {}    
	
	cover.uncover = function() {
        this.parentNode.removeChild(this)	        
	}
	
	return cover;
}

function node2html(n) {
    dummy = document.createElement('div');
    dummy.appendChild(n);
    return dummy.innerHTML;
}


function make_popup_menu(id) {
    var el = $(id);
    Event.observe(id, 'mouseover', function(e) {
        Element.addClassName(el, 'hover');
    });
    Event.observe(id, 'mouseout', function(e) {
        Element.removeClassName(el, 'hover')
    });    
}

function highlight_login_form(e) {
	try {
		location.href = '#top';
		$('username').focus();
		setTimeout(function() {
			new Effect.Highlight($('username'));		
		}, 300);
		setTimeout(function() {
			new Effect.Highlight($('password'));					
		}, 500);
		setTimeout(function() {
			new Effect.Highlight($('submit-button'));					
		}, 700);			
	} catch(ex) {
	}    
  Event.stop(e);	
}

function make_login_link(link_id) {
	
	Event.observe($(link_id), 'click', function(e) {
        highlight_login_form(e);
	})
}


document.observe("dom:loaded", function() {
    $$('td.mg').each(function(cl) {
        cl.style.cursor = 'pointer';
        Event.observe(cl, 'click', function(e) {
            el = Event.element(e);
            nn = el.nodeName + '';
            if (nn.toLowerCase() != 'td') {
                return;
            }
            lnk = Element.select(el, 'a')[0];
            href = lnk.href;
            location.href = href;
        })
    })
});
