// table system
dojo.require("dojo.widget.Tooltip");
dojo.require("dojo.json");
dojo.require("dojo.io.cookie");

// attach file and other
dojo.require("dojo.widget.TitlePane");
dojo.require("dojo.event.*");
dojo.require("dojo.lfx.html");
dojo.require("dojo.io");
dojo.require("dojo.io.IframeIO");

// TitlePane Extension
customTitlePaneLabelClick = function() {
    // summary: callback when label is clicked
    if (this.open) {
        dojo.lfx.wipeOut(this.containerNode, 250).play();
        this.labelNode.className=this.labelNodeClass + '_closed'
        this.open=false;
    } else {
        this.labelNode.className=this.labelNodeClass + '_open'
        dojo.lfx.wipeIn(this.containerNode, 250).play();
        this.open=true;
    }
}



function sendAttachFormCallback(type, data, evt)
{
    var fade_from = [255, 151, 58];
    if (type == 'error') {
        evt.binding.messageNode.className = 'error';
        evt.binding.messageNode.innerHTML = 'Internal Error: ' + data.message;
    } else {
        eval("var result = " + data); // replace with json later
        evt.binding.tableNode.innerHTML   = result.table;
        evt.binding.formFields.innerHTML  = result.form_fields;
        evt.binding.messageNode.innerHTML = result.message;
        evt.binding.messageNode.className = result.status;
        if (result.status == 'success')
        {
            fade_from = [102, 255, 102];
        }
    }
    dojo.lfx.html.highlight(evt.binding.messageNode, fade_from, 700).play(300);
}

function BoundAttachFileForm(url, messageid, tableid, formid, fieldsid, sendid)
{
    this.sendUrl     = url;
    this.messageNode = dojo.byId(messageid);
    this.tableNode   = dojo.byId(tableid);
    this.formNode    = dojo.byId(formid);
    this.formFields  = dojo.byId(fieldsid);
    this.sendNode    = dojo.byId(sendid);
    this.callback    = sendAttachFormCallback;
    var callback     = this.callback;
    var binding      = this;
    this.sendForm    = function()
        {
            var request = {url:       url,
                           handler:   callback,
                           transport: 'IframeTransport',
                           formNode:  dojo.byId(formid)};
            var bound = dojo.io.bind(request);
            bound.binding = binding;
        }
    this.init        = function()
        {
            dojo.event.connect(this.sendNode, 'onclick', this.sendForm);
        }
}

// table system
var cookie_data = { 'events': {} };
var cookie_inuse = 0;
var cookie_name = "pycon2009talksched";
var cookie_path = "/2009/conference/schedule/";
var cookie_expire = 31;
var cookie_synced = 0;

function stopProp(ev)
{
    ev = ev || window.event;
    if(ev.preventDefault) {
        ev.preventDefault();
    } else if('cancelBubble' in ev) {
        ev.cancelBubble = true;
    }
}

function int2id(val)
{
    var id = 'E';
    if (val < 100)
    {
       id += '0';
    }
    if (val < 10)
    {
        id += '0';
    }
    return id + val;
}

function id2int(val)
{
    return parseInt(val.substring(1), 10)
}

function cookie_delete_and_reload()
{
    if (cookie_inuse)
    {
        // all this maddness because different browsers are %$@@%425
        dojo.io.cookie.deleteCookie(cookie_name);
        dojo.io.cookie.set(cookie_name, '', 0, cookie_path)
        if (dojo.io.cookie.get(cookie_name) != null)
        {
            dojo.io.cookie.set(cookie_name, 'null', 0, cookie_path)
        }
    }
    document.location.reload();
}

function cookie_data_load(name, path, expire, syncable)
{
    if (cookie_inuse || !name)
    {
        return;
    }
    cookie_inuse = dojo.io.cookie.isSupported();
    if (!cookie_inuse)
    {
        return;
    }
    cookie_name = name;
    if (path)
    {
        cookie_path = path;
    }
    if (syncable)
    {
        cookie_synced = syncable
    }
    if (expire)
    {
        cookie_expire = expire;
    }
    data = dojo.io.cookie.get(name);
    if(!data) {
        data = "{ 'events': {} }";
    }
    eval("cookie_data = " + data);
}

function cookie_data_save()
{
    if (!cookie_inuse)
    {
        return;
    }
    cookie_data['resync'] = cookie_synced;
    data = dojo.json.serialize(cookie_data);
    dojo.io.cookie.set(cookie_name, data, cookie_expire, cookie_path);
    if (cookie_synced) {
        var savelinks = document.getElementsByName('syncundo');
        for(var k=0; k<savelinks.length; k++)
        {
            savelinks[k].className='icon_sync';
        }
        var savelinks = document.getElementsByName('syncsave');
        for(var k=0; k<savelinks.length; k++)
        {
            savelinks[k].className='icon_sync';
        }
    }
}

function cookie_select_event(id)
{
    if (!cookie_inuse)
    {
        return;
    }
    id = id2int(id);
    if (typeof(cookie_data.events[id]) == "undefined")
    {
        cookie_data.events[id] = 1;
        cookie_data_save();
    } else {
        if (cookie_data.events[id] == 0)
        {
            cookie_data.events[id] = 1;
            cookie_data_save();
        }
    }
}

function cookie_deselect_event(id)
{
    if (!cookie_inuse)
    {
        return 0;
    }
    id = id2int(id);
    if (typeof(cookie_data.events[id]) != "undefined")
    {
        if (cookie_data.events[id] == 1)
        {
            delete cookie_data.events[id];
            //cookie_data.events[id] = 0;
            cookie_data_save();
        }
        if (cookie_data.events[id] > 1)
        {
            return 0;
        }
    }
    return 1;
}

function init_selected_from_cookie(imgbaseurl)
{
    if (!cookie_inuse)
    {
        return;
    }
    for (var id in cookie_data.events)
    {
        if (cookie_data.events[id] > 0)
        {
            var elem = document.getElementById(int2id(id));
            // damn you opera!
            if (elem && elem.id == int2id(id))
            {
                // hilight event
                if(elem.className.substring(0,2) != 's_')
                {
                    elem.className = 's_' + elem.className;
                }
            } else {
                var elements = get_elements(int2id(id)+'T');
                for (var j=0;j<elements.length;j++)
                {
                    // hilight tutorial
                    if(elements[j].className.substring(0,2) != 's_')
                    {
                        elements[j].className = 's_' + elements[j].className;
                    }
                }
            }
        }
        if (cookie_data.events[id] > 1)
        {
            var imgurl = imgbaseurl + 'img/16-member.png';
            var alt = 'Presenter';
            var clsname = 'icon_author';
            var elemname = 'ICO'+id;
            var append = 1;
            if (cookie_data.events[id] == 3)
            {
                elemname = 'ICC'+id;
                clsname = 'icon_schair';
                imgurl = imgbaseurl + 'img/16-tag-pencil.png';
                alt = 'Session Chair';
                append = 0;
            }
            if (cookie_data.events[id] == 4)
            {
                elemname = 'ICR'+id;
                clsname = 'icon_srunner';
                imgurl = imgbaseurl + 'img/16-star-hot.png';
                alt = 'Session Runner';
                append = 0;
            }
            var icospans = document.getElementsByName(elemname);
            var data = '<img src="'+imgurl+'" alt="'+alt+'" title="'+alt+'"/>';
            for (var i=0;i<icospans.length;i++)
            {
                icospans[i].className = clsname;
                if (append)
                {
                    icospans[i].innerHTML = icospans[i].innerHTML + data;
                } else {
                    icospans[i].innerHTML = data;
                }

            }
        }
    }
}

function get_elements(id)
{
    // For IE? and Opera, we need to do something different
    // and get the acutal ID list! (yikes) get all the <td> elements
    // and look for ID's which START with the name. and then update
    // those. td.name does not work on ANY broswer, but name search
    // does in FireFox, and that is good enough for me, for now.
    var name = id;
    name = name.substring(0,name.lastIndexOf('T'));
    var elements = document.getElementsByName(name);
    if (elements.length > 0)
    {
        return elements;
    }
    var tags = document.getElementsByTagName("td");
    var res = new Array();
    var ind = 0;
    var tomatch = name + 'T';
    var i=0
    for (i=0;i<tags.length;i++)
    {
        var elem=tags[i];
        if (elem.id && elem.id.length > name.length &&
            elem.id.substring(0, tomatch.length) == tomatch)
        {
            elem.name = name
            res[ind] = elem;
            ind = ind + 1;
        }
    }
    return res;
}

function mouseover_tutorial(element)
{
    var elements = get_elements(element.id);
    if (elements.length > 1)
    {
        var prefix = '';
        if (element.className.substring(0,2) == 's_')
        {
            prefix = 's_';
        }
        elements[0].className = prefix + 'tutorial_h1';
        elements[1].className = prefix + 'tutorial_h2';
    }
}

function mouseout_tutorial(element)
{
    var elements = get_elements(element.id);
    if (elements.length > 1)
    {
        var prefix = '';
        if (element.className.substring(0,2) == 's_')
        {
            prefix = 's_';
        }
        elements[0].className = prefix + 'tutorial';
        elements[1].className = prefix + 'tutorial';
    }
}

function mouseclick(element)
{
    var name = element.className;
    if (name.substring(0,2) == 's_')
    {
        if(cookie_deselect_event(element.id))
        {
            element.className = name.substring(2);
            return 0;
        }

    } else {
        cookie_select_event(element.id);
        element.className = 's_' + name;
    }
    return 1;
}

function mouseclick_tutorial(element)
{
    var name = element.id.substring(0,element.id.lastIndexOf('T'));
    var cname = element.className;
    var elements = get_elements(element.id);
    if (elements.length > 1)
    {
        var prefix = 's_';
        if (cname.substring(0,2) == 's_')
        {
            if(!cookie_deselect_event(name))
            {
                return 1;
            }
            prefix = '';
        } else {
            cookie_select_event(name);
        }
        if (elements[0].className.substring(0,2) == 's_')
        {
            elements[0].className = prefix + elements[0].className.substring(2);
        } else {
            elements[0].className = prefix + elements[0].className;
        }
        if (elements[1].className.substring(0,2) == 's_')
        {
            elements[1].className = prefix + elements[1].className.substring(2);
        } else {
            elements[1].className = prefix + elements[1].className;
        }
        return prefix == 's_';
    } else {
        if (cname.substring(0,2) == 's_')
        {
            if(!cookie_deselect_event(name))
            {
                return 1;
            }
            element.className = cname.substring(2)
            return 0
        } else {
            cookie_select_event(name);
            element.className = 's_' + cname
            return 1
        }
    }
}

