//<![CDATA[

/////////////////////////////////////////////////////////////////
// Funciones genericas
///////////////////////////////////////////////////////////////// 

//Anadir un input a un form
function addInput(form,name,value) {
    var s = document.createElement('input');
    s.setAttribute('type', 'hidden');
    s.setAttribute('name', name);
    s.setAttribute('value', value);
    form.appendChild(s);
}

// Returns if the passed value x is a valid (float) number and shows
// a message if its not.
function checkNumberAlert(x,msg) {
    if (checkNumber(x)) {
        alert(msg);
        return false;
    } else return true;
}

//Returns if the passed value x is a valid (float) number.
function checkNumber(x){
    var anum=/(^-?\d+$)|(^-?\d+\.\d+$)/;
    var testresult = false;
    if (anum.test(x)) testresult=true;
    return testresult;
}

// Checkea si un string de fecha está en formato válido:
// DD/MM/YYYY
function isValidDate(dateStr, showAlert)
{
    var datePat = /^(\d{1,2})(\/)(\d{1,2})\2(\d{4})$/; // requires 4 digit year

    var matchArray = dateStr.match(datePat); // is the format ok?
    if (matchArray == null)
    {
        if (showAlert)
            alert(dateStr + " no tiene un formato válido.");
        return false;
    }

    day = matchArray[1]; // parse date into variables
    month = matchArray[3];
    year = matchArray[4];
    if (month < 1 || month > 12) // check month range
    {
        if (showAlert)
            alert("El mes tiene que estar entre 1 y 12.");
        return false;
    }

    if (day < 1 || day > 31)
    {
        if (showAlert)
            alert("El día tiene que estar entre 1 y 31.");
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31)
    {
        if (showAlert)
            alert("El mes "+month+" no tiene 31 días.")
        return false;
    }

    if (month == 2) // check for february 29th
    {
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day==29 && !isleap))
        {
            if (showAlert)
                alert("Febrero del año " + year + " no tiene " + day + " días.");
            return false;
        }
    }
    return true;
}

/////////////////////////////////////////////////////////////////
// Fin funciones genericas
///////////////////////////////////////////////////////////////// 


/////////////////////////////////////////////////////////////////
// Funciones de idlikees
///////////////////////////////////////////////////////////////// 

//Selecciona o deselecciona la imagen de user (invierte el estado)
function selectUser(img) {
    var str_class = "avatar23";
    if(img.selected!=true) {
        str_class += "selected";
        img.selected = true;
    } else img.selected = null;
    img.className = str_class;
}

//Invita los users seleccionados
function invite(id) {
    var p = $(id+"_p");
    //var users = new Array();
    var users = "";
    for(var i=0; i<p.childNodes.length; i++) {
        child = p.childNodes[i];
        if(child.selected) {
            //users.push(parseInt(child.id.split("_")[1]));
            users += child.id.split("_")[1];
            users += ",";
        }
    }
    var txt = $(id+"_emails");
    var emails = "";
    if(txt != null)
        emails = txt.value;
    if(users.length < 1 && emails == "") {
        alert("Seleccione algún usuario a invitar")
    } else {
        f = $(id+"_form");
        addInput(f,"users",users);
        addInput(f,"emails",emails);
        addInput(f,"type",id.split("_")[1]);
    }
}

function hide_show_email_div(id) {
    var div = $(id+"_mail_div");
    if(div.style.display == "")
    {
        div.style.display = 'none';
    }
    else
    {
        div.style.display = '';
        $(id+"_emails").focus();
    }
}

// Comprueba las fechas de la búsqueda y hace submit del form
function searchSubmit()
{
    var error = false;
    var from = $('from').value;
    error = (from.length != 0) && (!isValidDate(from, true));

    var to = $('to').value;
    error = error || ((to.length != 0) && (!isValidDate(to, true)));

    if (!error)
        $('search_form').submit();

    return false;
}

/////////////////////////////////////////////////////////////////
// Fin funciones de idlikees
///////////////////////////////////////////////////////////////// 


/////////////////////////////////////////////////////////////////
// Funciones de grupos y contactos
///////////////////////////////////////////////////////////////// 
// Para obtener toda la lista de los contactos
function getContacts()
{
    var contactslist;
    contactslist = $("contactslist");
    if (contactslist)
        return contactslist.childNodes;
    else
        return null;
}

// Selecciona o deselecciona todos los contactos en función del select
function selectAllContacts(select)
{
    var contacts = getContacts();
    if (!contacts)
        return;
    var numContacts = contacts.length;
    for (i=0;i<numContacts;i++)
    {
        var contact = contacts[i];
        if (contact.nodeName == "DIV")
            selectContact(contact, select);
    }
}

// Selecciona o deselecciona en función de "select" un contacto
function selectContact(contact, select)
{
    if (!contact)
        return;

    contact.selected = select;
    if (select)
        contact.className='contactsselected';
    else
        contact.className='contactsunselected';
}


// Devuelve un array con los id's de los contactos seleccionados'
function selectedContacts()
{
    var selected = new Array();
    var contacts = getContacts();
    if (contacts)
    {
        var numContacts = contacts.length;
        for (i=0;i<numContacts;i++)
        {
            var contact = contacts[i];
            if ((contact.nodeName == "DIV") && (contact.selected == true))
                selected.push(contact.id);
        }
    }
    return selected;
}

// Función genérica para llamar a una acción a hacer con los contactos seleccionados. 
// Puede indicarse el nombre del select del que sacar el grupo seleccionado y
// el nombre del input en el que se pondran los contactos.
function doSomethingWithContacts(formName, contactsParamName, submit)
{
    var selected = selectedContacts()
    if (selected.length == 0)
        alert("Seleccione algún contacto.")
    else
    {
        f = $(formName);
        addInput(f,contactsParamName,selected)
        if (submit)
            f.submit();
    }
}

// Función para borrar contactos
function deleteContacts()
{
    doSomethingWithContacts("delete_contacts_form", "contacts", true);
}

// Función para enviar un mensaje a contactos
function sendMessageToContacts()
{
    doSomethingWithContacts("send_message_form", "user_id", true);
}

// Función para añadir contactos a un grupo
function addContactsToGroup()
{
    doSomethingWithContacts("new_contacts_to_group_form", "contacts", false);
}

// Función para borrar contactos de un grupo
function deleteContactsFromGroup()
{
    doSomethingWithContacts("del_contacts_from_group_form", "contacts", false);
}

/////////////////////////////////////////////////////////////////
// Fin funciones de grupos y contacto
///////////////////////////////////////////////////////////////// 


/////////////////////////////////////////////////////////////////
// Funciones de mensajes
///////////////////////////////////////////////////////////////// 

// Devuelve un array con los id's de los mensajes seleccionados'
function selectedMessages()
{
    var selected = new Array();
    var nodeslist;
    nodeslist = $("maillist");
    if (nodeslist)
        nodes = nodeslist.childNodes;
    if (nodes)
    {
        var numNodes = nodes.length;
        for (var i=0;i<numNodes;i++)
        {
            var node = nodes[i];
            var numMessages = node.childNodes.length
            if ((node.nodeName == "P") && (numMessages > 0))
            {
                var messages = node.childNodes;
                for (var j=0;j<numMessages;j++)
                {
                    var message = messages[j];
                    if ((message.nodeName == "INPUT") && (message.checked == true))
                        selected.push(message.value);
                }
            }
        }
    }
    return selected;
}

// Función genérica para llamar a una acción a hacer con los contactos seleccionados.
// Puede indicarse el nombre del select del que sacar el grupo seleccionado y
// el nombre del input en el que se pondran los contactos.
function doSomethingWithMessages(formName)
{
    var selected = selectedMessages()
    if (selected.length == 0)
        alert("Seleccione algún mensaje.")
    else
    {
        f = $(formName);
        addInput(f,"messages",selected)
        f.submit();
    }
}

// Función para borrar mensajes
function deleteMessages()
{
    doSomethingWithMessages("delete_messages_form");
}

// Función para archivar mensajes
function archiveMessages()
{
    doSomethingWithMessages("archive_messages_form");
}

/////////////////////////////////////////////////////////////////
// Fin funciones de mensajes
///////////////////////////////////////////////////////////////// 

/////////////////////////////////////////////////////////////////
// Funciones de barra de contactos
/////////////////////////////////////////////////////////////////

var selectedBarContactImg = null;

//Selecciona la imagen de contacto en la barra de contactos
function selectBarContact(img)
{
    // Deseleccionamos la anterior si había
    if (selectedBarContactImg != null)
        selectedBarContactImg.className = "avatar23";

    // Seleccionamos la que toca y nos la guardamos
    if (img != null)
        img.className = "avatar23-contactselected";
    selectedBarContactImg = img;
}

/////////////////////////////////////////////////////////////////
// Fin funciones de barra de contactos
/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////
// Funciones drag&drop
/////////////////////////////////////////////////////////////////

function makeDroppable(id, classHover)
{
    Droppables.add(id, {
        accept: ['avatar23','avatar23-contactselected'],
        hoverclass: classHover,
        onDrop: function(element) {
            $(id).value = element.name;
        }
    });
}

function makeDroppableConcat(id, classHover, textConcat)
{
    Droppables.add(id, {
        accept: ['avatar23','avatar23-contactselected'],
        hoverclass: classHover,
        onDrop: function(element)
        {
            var value = $('message_to_users').value;
            var name = element.name + textConcat;
            if (value.indexOf(name) == -1)
                value = value + name;
            $('message_to_users').value = value;
        }
    });
}

function makeDroppableGroupsConcat(id, classHover)
{
    Droppables.add(id, {
        accept: 'groupnamedrag',
        hoverclass: classHover,
        onDrop: function(element)
        {
            var code = element.innerHTML.substr(0, element.innerHTML.indexOf('('));
            code = code.substring(1, code.length -1);
            var id = 'group_' + code;
            var objectExists = $(id);
            if(objectExists == null){
                var main_div = $('groups_to_send');
                var span_element = document.createElement('span');
                span_element.id = id;
                span_element.innerHTML = " " + code + " ";
                span_element.innerHTML += "<a href='javascript:void(0);' onclick='removeGroupToSend(\"" + id + "\")'>X</a>"
                main_div.appendChild(span_element);
                Element.show(main_div);
            }
        }
    });
}

function makeDroppableRedirectProfile(id, classHover)
{
    Droppables.add(id, {
        accept: ['avatar23','avatar23-contactselected'],
        hoverclass: classHover,
        onDrop: function(element)
        {
            var id = element.id.replace("icon_", "");
            window.location = '/profiles/' + id;
        }
    });
}

/////////////////////////////////////////////////////////////////
// Fin funciones drag&drop
/////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////
// Funciones envio mensajes a grupos idlikee
/////////////////////////////////////////////////////////////////

function removeGroupToSend(group_id){
    var main_div = $('groups_to_send');
    var group = $(group_id);
    var childNodes = Element.childElements(group.parentNode);
    Element.remove(group);
    if(childNodes.length == 2){
        Element.hide(main_div);
    }
}

function removeIdlikeeGroupToSend(group_id){
    var main_div = $('idlikees_group_to_send');
    var group = $(group_id);
    var childNodes = Element.childElements(group.parentNode);
    Element.remove(group);
    if(childNodes.length == 2){
        Element.hide(main_div);
    }
}

function checkGroups(){
    var edit = $('g_send');
    var main_div = $('groups_to_send');
    var childNodes = Element.childElements(main_div);

    var currentNode = null;
    for( var i = 0; i < childNodes.length; i++){
        currentNode = childNodes[i];
        if(currentNode.tagName == 'SPAN'){
            var value = currentNode.id.split('_')[1];
            if(i == (childNodes.length -1))
                edit.value += value;
            else
                edit.value = edit.value + value + ",";
        }
    }

    var idlikeeEdit = $('g_idlikee_send');
    var main_div_idlikee = $('idlikees_group_to_send');
    var childNodesIdLikee = Element.childElements(main_div_idlikee);

    var currentNodeIdLikee = null;
    for( i = 0; i < childNodesIdLikee.length; i++){
        currentNodeIdLikee = childNodesIdLikee[i];
        if(currentNodeIdLikee.tagName == 'SPAN'){
            if(i == (childNodesIdLikee.length -1))
                idlikeeEdit.value += currentNodeIdLikee.value;
            else
                idlikeeEdit.value = idlikeeEdit.value + currentNodeIdLikee.value + ";";
        }
    }
}

function createGroup(groupType,groupName,idlikee_id,rol_id){
    var main_div = $('idlikees_group_to_send');
    var span_element = document.createElement('span');
    var id = groupName.replace(':','');
    id = 'group_' + groupType + "_" + id.replace(' ','_');
    span_element.id = id;
    span_element.value = idlikee_id + "," + rol_id
    span_element.innerHTML = " " + groupType + " de '" + groupName + "' ";
    span_element.innerHTML += "<a href='javascript:void(0);' onclick='removeIdlikeeGroupToSend(\"" + id + "\")'>X</a>"
    main_div.appendChild(span_element);
    Element.show(main_div);
}
/////////////////////////////////////////////////////////////////
// Fin funciones envio mensajes a grupos idlikee
/////////////////////////////////////////////////////////////////

//]]>


