var _el_last = -1;
var ajax_status_default = "";
var ajax_status_working_background = "#888888";
var ajax_status_success_background = "#666666";
var ajax_status_original_background = "";
var ajax_error = false;
Ajax.Responders.register({
    onCreate: function(){
        ajax_status_original_background = $('ajax_status').style.background;
        $('ajax_status').innerHTML = 'working...';
        $('ajax_status').style.background = ajax_status_working_background;
    },
    onComplete: function(){
        if(ajax_error == false)
        {
            $('ajax_status').innerHTML = 'ok.';
            $('ajax_status').style.background = ajax_status_success_background;
            setTimeout(function() {
                $('ajax_status').innerHTML = ajax_status_default;
                $('ajax_status').style.background = ajax_status_original_background;
                //alert($('ajax_status').style.background);
            },900);
        } else {
            ajax_error = true;
        }
    }
});
function PageLoad()
{
    ajax_status_default = $('ajax_status').innerHTML;
    set_colors_inuse();
    $('txtName').observe('keyup', name_onkeyup);  // onTextKeypress defined in main.html.erb
    $('txtName').observe('keypress', name_onkeypress);
}

//function uses 2 vars declared in the view
function set_colors_inuse()
{

    //alert('asdf');
    anchors = document.getElementsByTagName("a");
    for(var i=0;i<anchors.length;i++) {
        var c = anchors[i].getAttribute('color');
        if(c==null) continue;
        var a = anchors[i].getAttribute('action');
        if(a==null) continue;
        //alert(bg_color_inuse.toLowerCase() + " " + c.toLowerCase() + " " +  a);
        if((fg_color_inuse.toLowerCase()==c.toLowerCase() && a == 'setTextColor')
           ||(bg_color_inuse.toLowerCase()==c.toLowerCase() && a == 'setBackgroundColor'))
        {
            anchors[i].style.borderColor = "yellow";
        }
        else
        {
            anchors[i].style.borderColor = "gray";
        }

    }
}
addLoadEvent(PageLoad);

var on_failure = function(transport)
{
    alert(transport.responseText);
    $('ajax_status').innerHTML = 'something went wrong...' + (transport.responseText || 'no response text');
    ajax_error = true;
}
var on_success = function(transport, action)
{
    var resp = transport.responseText || 'no response test';
    if(action) action();
}



// AJAX EVENTS

function whenclick_onclick(el)
{
    //alert(el.value);
    if (_el_last != el.value)
    {
        new Ajax.Request('whenclick/' + el.value,
                         {
                             method:'post',
                             onSuccess: function(transport) {
                                 on_success(transport, function() { _el_last = el.value;});
                             },
                             onFailure: function(transport) { on_failure(transport); }
                         });
    }
    return true;
}


function chkSites_onclick(event) {

    var el = Event.element(event);
    var site_id = el.getAttribute('site_id');
    var searchengine_id = el.getAttribute('id').split("_")[1];
    var ajax_Add = function ()
    {
        new Ajax.Request('json_add_engine/' + searchengine_id
                         , {
                             method:'post',
                             onSuccess: function(transport) {
                                 on_success(transport, function() {
                                     new_site_id = transport.responseText;
                                     el.setAttribute('site_id', new_site_id);
                                 });
                             },
                             onFailure: function(transport) { el.checked = false; on_failure(transport); }

                         });

    }
    var ajax_Remove = function ()
    {
        new Ajax.Request('sites/' + site_id + '/delete',
                         {
                             method:'post',
                             onSuccess: function(transport) {
                                 on_success(transport, function(){
                                     el.setAttribute('site_id') = '-1';
                                 });
                             },
                             onFailure: function(transport) { el.checked = true; on_failure(transport); }
                         });
    }
    if(el.checked) { ajax_Add();  } else { ajax_Remove(); }
    el.disabled =true;
    setTimeout(function() { el.disabled = false }, 1000 );

}

function lstIsDefault_onchange(event)
{
    var lstel = Event.element(event);
    var default_searchengine_id = lstel.getValue();

    //check inputs for valid engine ID
    if(default_searchengine_id.match(/\d+/)==null) {
        return;
    }  else
    {
        if(default_searchengine_id < 1) {
            return
        }
    }
    var ajax_update = function()
    {
        new Ajax.Request('json/update/defaultengine/{0}'.format(default_searchengine_id),
                         {
                             method:'post',
                             onSuccess: function(transport) {
                                 on_success(transport,null);
                             },
                             onFailure: function(transport) { on_failure(transport); }
                         });
    }
    ajax_update();
}

function setTextColor(color)
{
    fg_color_inuse = color;
    ajax_setcolor('foreground_color',color);
    set_colors_inuse();
}
function setBackgroundColor(color)
{
    bg_color_inuse = color;
    ajax_setcolor('background_color',color);
    set_colors_inuse();
}

function ajax_setcolor(action, color){
    new Ajax.Request('json/update/{0}'.format(action),
                     {
                         method:'post',
                         parameters: {color: color},
                         onSuccess: function(transport) {
                             on_success(transport,null);
                         },
                         onFailure: function(transport) { on_failure(transport); }
                     });
}

var delay_write_ms = 1200;
var time_out;
function name_onkeyup(evt)
{
    //clearTimeout(time_out);
    //time_out  =  setTimeout(update_name,delay_write_ms);
    if(!/^[a-zA-Z0-9\_]*$/.test(this.value))
    {
        //this.value = this.value.substring(0,this.value.length - 1);
        name_msg("Searchcloud name is bad.",0); return;
    } else {
        if (Event.KEY_RETURN != evt.keyCode) {
            name_msg("",0);
        }
        return;
    }

}
function name_onkeypress(evt)
{
    //if(this.value =) { this.value = ""; return }

    if (Event.KEY_RETURN == evt.keyCode) {
        Event.stop(evt);  //todo: does not work as hoped
        update_name();
    }
    return;

}
function name_msg(s,color) {
    $("name_message").innerHTML = s;
    if(color==0) {
        $("name_message").style.color =  "red";
    } else {
        $("name_message").style.color =  "green";
    }
}
function callback_update_name(transport) {
    resp = transport.responseText.evalJSON();
    //alert(resp.response)
    try {
        server_code = parseInt(resp.response);
        if ( server_code == -1 )
        {
            name_msg("Badly formatted name. Only use numbers or characters.", 0);
        }
        else if (server_code == -2) {
            name_msg("This name is already in use. Please try another name.", 0);
        }
        else if (server_code == 0) {
            name_msg("This name is available to you.", 1);
        }
        else
        {
	    cloud_url = "{0}.{1}".format($('txtName').value,g_domain);
	    $("linkback").href = "http://" + cloud_url;
            name_msg("saved! click <a target='_blank'  href='http://{0}'>{0}</a>".format(cloud_url),1);
        }
    } catch(err)
    {    name_msg("there was an error saving the searchcloud name.{0}".format(err.message),0); }
}
function update_name(check_only)
{
    newname = $('txtName').value;
    if(newname.length > 0){
        new Ajax.Request('json_update_name',
                         {
                             method:'post',
                             parameters: {new_name: newname, check_only: check_only},
                             onSuccess: function(transport) {
                                 callback_update_name(transport);
                                 on_success(transport);
                             },
                             onFailure: function(transport) { on_failure(transport); }

                         });return false;
    }

}



