// -*- js-standard: domwindow, prototype;  -*-

/* NOTE: despite the names of these functions, they use prototype.js as an
   AJAX helper, not jsolait.
   
   TODO: Rename and move in to commandlets.js / hopper.js / edit_catrev.js as
    appropriate */ 

function jsolait_do_planit_on_graph(graph_type)
{
    if (graph_type == "custom")
    {
        jsolait_do_fetch_graph(graph_type);
    }
    else
    {
        var frm1 = document.forms['graphdrawer'];
        var grph_name = frm1['graph_chooser'].options[frm1['graph_chooser'].selectedIndex].value;
        var frm = document.forms['form_'+grph_name];
        
        if(frm['datatable'].value != "")
        {
            jsolait_do_fetch_graph(graph_type);
            return;
        }
        
        var data_body = { ajax_planit:1,
                          pl_subcatlist: frm['subcatlist'].value,
                          pl_catlist: frm['catlist'].value,
                          pl_enddate: frm['enddate'].value,
                          pl_startdate: frm['startdate'].value,
                          pl_graph_type: graph_type,
                          pl_graph_subj: frm['graph_subj'].value,
                          pl_graph_limit: frm['graph_limit'].value,
                          pl_graph_name: grph_name }
            
        var dump = $('graph_load_point');
        var response = function(req)
        {
            var graphs_node=null;                    
            for(var k=0; k < req.responseXML.childNodes.length; ++k)
            {
                if(req.responseXML.childNodes.item(k).tagName == "Graphs")
                    graphs_node = req.responseXML.childNodes.item(k);
            }
            var valid_xml=false;
            if (graphs_node && graphs_node.tagName == "Graphs")
            {
                for(var i=0; i<graphs_node.childNodes.length; ++i)
                {
                    if(graphs_node.childNodes.item(i).tagName == "Graph")
                    {
                        valid_xml=true;
                        var tmp_node = graphs_node.childNodes.item(i);
                        for(var j=0; j<tmp_node.childNodes.length; ++j)
                        {
                            var tagname = tmp_node.childNodes.item(j).tagName;
                            var string = null
                            
                            //this is for mozilla and ie compability
                            //first works on ie but doesn't throw on mozilla, its undefined
                            //and second works for mozilla but throws exception in ie so...
                            string = tmp_node.childNodes.item(j).xml;
                            if(!string)
                                string = (new XMLSerializer()).serializeToString(tmp_node.childNodes.item(j));
                                
                            if (tagname)
                                frm[tagname].value=string;
                        }
                    }
                }
            }
            
            if(valid_xml)
                jsolait_do_fetch_graph(graph_type);
            else
                dump.innerHTML = '<span>There is no data to draw this graph.</span>';
        }
        
        new Ajax.Request("/sinatra/gnpd/ajax/", 
                        { method:"POST",
                          parameters: data_body,
                          onSuccess: response });
        
        if (dump)
        {
            dump.innerHTML = '<span>Running PlanIt <img src="/gnpd/images/loading.gif"></span>';
        }
    }
}


function jsolait_do_fetch_graph(graph_type)
{
    var frm = document.forms['graphdrawer'];
    if (!frm)
    {
        return false;
    }
    
    var threed = frm['threed'].checked ? '1' : '0';

    var chart_type = frm['charttype'].options[frm['charttype'].selectedIndex].value;
    var grph_name = frm['graph_chooser'].options[frm['graph_chooser'].selectedIndex].value;
    frm = document.forms['form_'+grph_name];

    if (!frm)
    {
        return false;
    }

    var description = "default";

    if ("standard"==graph_type)
    {
        var tmp_frm = document.forms['graphdrawer'];
        description = grph_name + " - " + tmp_frm['charttype'].options[tmp_frm['charttype'].selectedIndex].text;
    }
    else if ("trend"==graph_type)
    {
        var tmp_frm = document.forms['graphdrawer'];
        description = tmp_frm['graph_chooser'].options[tmp_frm['graph_chooser'].selectedIndex].text;
    }
    else if ("custom"==graph_type)
    {
        var tmp_frm = document.forms['graphdrawer'];
        description = tmp_frm['graph_chooser'].options[tmp_frm['graph_chooser'].selectedIndex].text;
    }

    var cs = frm['chartspec'].value;
    var cd = frm['datatable'].value;

    // update the planit criteria so it includes the 3d property
    if ( 1==threed )
    {
        var re = /<three_dimensional>no<\/three_dimensional>/;
        
        frm['planit_criteria'].value = frm['planit_criteria'].value.replace(re, "<three_dimensional>yes</three_dimensional>");
        re = /three_dimensional=false/;
        cs = cs.replace(re, "three_dimensional=yes");
        re = /two_dimensional=true/;
        cs = cs.replace(re, "two_dimensional=false");
    }

    try
    {
        var response = function(req)
        {
            if (req.responseText)
            {
                var full_uri = null;
                var thumb_uri = null;
                var path = null;
                eval(req.responseText);
                if (thumb_uri && full_uri && path)
                {
                    var dump = $('graph_load_point');
                    if (dump)
                    {
                        dump.innerHTML = '<img src="'+full_uri+'" style="border:0px none">';
                    }

                    var uri_input = document.forms['form_'+grph_name]["uri"];
                    if (uri_input)
                    {
                        uri_input.value = full_uri;
                    }

                    var thumb_uri_input = document.forms['form_'+grph_name]["thumb_uri"];
                    if (thumb_uri_input)
                    {
                        thumb_uri_input.value = thumb_uri;
                    }

                    var path_input = document.forms['form_'+grph_name]["path"];
                    if (path_input)
                    {
                        path_input.value = path;
                    }


                    if ("standard"==graph_type)
                    {
                        var re =/graphtype=.*/gi;
                        frm['chartspec'].value = cs.replace(re, "graphtype="+chart_type);
                        
                        re = /<chart_type><\/chart_type>/gi;
                        frm['planit_criteria'].value = frm['planit_criteria'].value.replace(re, "<chart_type>"+chart_type+"</chart_type>");
                    }

                    var description_input = document.forms['form_'+grph_name]["description"];

                    if (description_input)
                    {
                        description_input.value = description;
                    }

                    var add_to_graph = $('add_graph_to_list');
                    if (add_to_graph)
                    {
                        add_to_graph.style.display = "block";
                    }
                    else
                    {
                        alert("error");
                    }

                }
            }
        }
        var url_data;
        if ("custom"==graph_type)
        {
            var re = /title=.*/g;       // remove the title from the chartspec
            cs = cs.replace( re, "");   // remove the title

            // Add proper xsize and ysize to chartspec
            re = /xsize=\d*/g;
            cs = cs.replace( re, "xsize=750");
            re = /ysize=\d*/g;
            cs = cs.replace( re, "ysize=600");

            url_data = { ajax_graph: 1, gd_chartdata: cd, gd_chartspec: cs };
        }
        else
        {
            url_data = { ajax_graph: 1, gd_chartdata: cd, gd_chartspec: cs,
                         gd_charttype: chart_type, gd_threed: threed};
        }
        
        new Ajax.Request("/sinatra/gnpd/ajax/",
            { method: "POST",
              parameters: url_data,
              onSuccess: response });
        
        var dump = $('graph_load_point');
        if (dump)
        {
            dump.innerHTML = '<span>Drawing graph <img src="/gnpd/images/loading.gif"></span>';
        }
        return false;
    }
    catch (e)
    {
        return false;
    }
}

function jsolait_do_delete_graph()
{
    if(!confirm("Are you sure you want to delete this graph?")){
        return;
    }
    var select = $('graph_chooser');
    for (var i = 0;i<select.options.length;++i)
    {
        if(select.options[i].selected)
            break
    }
    var id = select.options[i].value;

    var data_body = { ajax_submit: 1, cr_graph_id: id, cr_graph_action: "delete" }; 

    var response = function(req)
    {
        if(req.responseText == "SUCCESS")
        {
            select.removeChild(select.options[i]);
        }
    }
    
    new Ajax.Request("/sinatra/gnpd/ajax/", 
        { method: "POST", 
          parameters: data_body,
          onSuccess: response }); 
}


function jsolait_do_save_graph()
{
    var frm = document.forms['planit_save_graph'];
    if (!frm)
        return false;
    
    var radio_editorial_checked = false;
    if (frm['radio_editorial'] != null && frm['radio_editorial'].checked)
        radio_editorial_checked =  true;
        
    var radio_embed_checked = frm['radio_embed'].checked;
    var nm = frm['seg_name'].value;    

    var url_data;
    try
    {
        if (radio_editorial_checked)
        {
            var cd = frm['seg_chartdata'].value;
            var cs = frm['seg_chartspec'].value;    
            url_data = { ajax_submit: 1, seg_chartdata: cd, seg_chartspec: cs,
                         seg_name: nm, seg_uri: planit_graph_uri };
        }
        else if (radio_embed_checked)
        {   
            var co = frm['sug_crosstaboptions'].value;
            var sc = frm['sug_search_criteria'].value;    

            url_data = { ajax_submit: 1, sug_crosstab_options: co,
                              sug_name: nm, sug_search_criteria: sc };
        }

        new Ajax.Updater("jsolait_container", "/sinatra/gnpd/ajax/", 
                { method: "POST", 
                  parameters: url_data});         
        return false;
    }
    catch (e)
    {
        return false;
    }
}

function jsolait_do_edit_comment()
{
    try
    {
        var cform = document.forms['hopper_edit'];
        var item_id = cform['c_item_id'].value;
        hide_message();
        
        var data_body = { ajax_submit: 1,
                          c_id: cform['c_id'].value,
                          c_item_id: cform['c_item_id'].value,
                          c_hopper_id: cform['c_hopper_id'].value,
                          c_edit_comment: cform['c_edit_comment'].value,
                          c_edit_submit: 1 };

        var response = function(req)
        {
            if (req.responseText)
            {
                hide_all_comment();
                add_comment_to([item_id]);
            }
        }
        
        new Ajax.Request("/sinatra/gnpd/ajax/", 
                { method: "POST", 
                  parameters: data_body,
                  onSuccess: response }); 
        
        return false;
    }
    catch(e)
    {
        return true;
    }
    return true;
}

function jsolait_do_delete_comment(comment_id, item_id, uri)
{
    var data_body = { ajax_submit: 1, c_id: comment_id,
                      c_delete: undefined, c_delete_submit: 1 };
    hide_message();
    var response = function(req)
    {
        if (req.responseText)
        {
            hide_all_comment();//moves the comment reply/edit forms away so they dont get trashed
            add_comment_to([item_id]);
            var jsc = document.getElementById('jsolait_container');
            jsc.innerHTML = req.responseText;
        }
    }
    
    new Ajax.Request("/sinatra/gnpd/ajax/", 
            { method: "POST", 
              parameters: data_body,
              onSuccess: response });  
}

function jsolait_do_delete_hopper(hopper_id, uri)
{
    var data_body = { ajax_submit: 1, hu_hopper: hopper_id,
                     hu_action: "delete" };    
    hide_message();
    var response = function(req)
    {
        if (req.responseText)
       {
           var hopper = document.getElementById('hopper_box_view_'+hopper_id);
           var isErrorMessage= (new RegExp(/class='tt_error'/i)).test(req.responseText);
           
           if (hopper)
           {
                var jsc = document.getElementById('jsolait_container');                    
                jsc.innerHTML = req.responseText;
                hopper.style.display =isErrorMessage?'block': 'none';
            }
        }
    }
    
    new Ajax.Request("/sinatra/gnpd/ajax/", 
            { method: "POST", 
              parameters: data_body,
              onSuccess: response });  
}

function jsolait_do_leave_hopper(hopper_id, uri)
{
    var data_body = { ajax_submit: 1, hu_hopper: hopper_id,
                       hu_action: "leave" };     
    hide_message();
    var response = function (req)
    {
        if (req.responseText)
        {
            var hopper = document.getElementById('hopper_box_view_'+hopper_id);
            if (hopper)
            {
                var jsc = document.getElementById('jsolait_container');
                jsc.innerHTML = req.responseText;
                hopper.style.display = 'none';
            }
        }
    }
    
    new Ajax.Request("/sinatra/gnpd/ajax/", 
            { method: "POST", 
              parameters: data_body,
              onSuccess: response });  
}

function jsolait_do_update_hopper_watch(hopper_id, interval)
{
    try
    {
        var data_body = { ajax_submit: 1, hu_hopper: hopper_id,
                          hu_action: "watch", hu_period:  interval};         
        hide_message();

        new Ajax.Updater("jsolait_container", "/sinatra/gnpd/ajax/", 
                         { method: "POST", parameters: data_body }); 
        
    }
    catch(e)
    {
        var hwform = document.forms['hwatch_form_'+hopper_id];
        if (hwform)
        {
            hwform.submit();
        }
    }
}

function jsolait_do_add_comment()
{
    try
    {
        var cform = document.forms['hopper_add_edit'];
        var item_id = cform['c_item_id'].value;
        hide_message();
        
        var data_body= { ajax_submit: 1, c_id: cform['c_id'].value,
                         c_item_id: cform['c_item_id'].value,
                         c_hopper_id: cform['c_hopper_id'].value,
                         c_add_comment: cform['c_add_comment'].value,
                         c_add_submit: 1 }
        
        var response = function(req)
        {
            if (req.responseText)
            {
                hide_all_comment();
                add_comment_to([item_id]);
                cform['c_add_comment'].value = '';
            }
        }
        
        new Ajax.Request("/sinatra/gnpd/ajax/", 
                { method: "POST", 
                  parameters: data_body,
                  onSuccess: response });  
        
        return false;
    }
    catch(e)
    {
        return true;
    }
    
    return true;
}

function add_comment_to(ids)
{
    for (var i = 0; i < ids.length; ++i)
    {
        new Ajax.Updater("hopper_comments_"+ids[i], "/sinatra/gnpd/ajax/", 
                {
                  method: "POST", 
                  parameters: { c_generate_comments: ids[i] }
                });                
    }
}

