/*
 * Created on Dec 14, 2005
 *
 * Author:					Raffaele Camanzo [CaRa] - <raffaele.camanzo@lince.it>
 * Modification History:
 *          Xxx yy, zzzz.   [UsEr]
 *
 * Description:
 *          This file contains some general purpose javascript functions
 *
 */

function getCookie(name) {
    var token = name + "=";
    
    if(document.cookie.length > 0) {
        var startvalue = document.cookie.indexOf(token);
        if(startvalue != -1) {
            startvalue += token.length;
            endvalue = document.cookie.indexOf(";", startvalue);
            if(endvalue == -1) {
                endvalue = document.cookie.length;
            }
            return unescape(document.cookie.substring(startvalue, endvalue));
        }
    }
}

function setCookie(name, value) {
    var todayDate = new Date();
    var expDate = new Date();
    
    // Half an hour
    expDate.setTime(todayDate.getTime() + 30 * 60 * 1000);
    document.cookie = name+'='+escape(value)+'; expires=' + expDate.toGMTString();
}

function openNewsWindow(idNotizia) {
    setCookie('newsWindow', idNotizia);
    window.open('news_popup.php','news','width=520,height=420,scrollbars=yes');

    return false;
}

function openEventsWindow(idEvento) {
    setCookie('eventsWindow', idEvento);
    window.open('events_popup.php','news','width=520,height=420,scrollbars=yes');

    return false;
}

function goToPageBook(idLibro) {
    setCookie('idLibro', idLibro);
    window.location = "libro.php";

    return false;
}

function goToPageAuthor(idAutore) {
    setCookie('idAutore', idAutore);
    window.location = "autore.php";

    return false;
}

function updatePageAuthor(idAutore) {
    setCookie('idAutore', idAutore);
    window.location = "autore_uback.php";
    
    return false;
}

function insertPageAuthor() {
    window.location = "autore_nback.php";
    
    return false;
}

function updatePageBook(idLibro) {
    setCookie('idLibro', idLibro);
    window.location = "libro_uback.php";
    
    return false;
}

function insertPageBook() {
    window.location = "libro_nback.php";
    
    return false;
}

function goToPageColl(idCollana) {
    setCookie('idCollana', idCollana);
    window.location = "collana.php";

    return false;
}

function updatePageColl(idCollana) {
    setCookie('idCollana', idCollana);
    window.location = "collana_uback.php";
    
    return false;
}

function insertPageColl() {
    window.location = "collana_nback.php";
    
    return false;
}

function validateEmail(field, alerttxt) {
    with(field) {
        apos = value.indexOf("@");
        dotpos = value.lastIndexOf(".");
        if((apos < 1) || ((dotpos - apos) < 2)) {
            alert(alerttxt);
            return false;
        } else {
            return true;
        }
    }
}

function checkContactForm()
{
    var cname, cemail, csubject, cmessage;
    with(window.document.contactform)
    {
        cname    = sendername;
        cemail   = sender;
        csubject = subject;
        cmessage = body;
    }
    
    if(trim(cemail.value) == '')
    {
        alert("L'indirizzo email é un campo obbligatorio.");
        cemail.focus();
        return false;
    }
    else if(!isEmail(trim(cemail.value)))
    {
        alert("L'indirizzo email inserito sembra non essere corretto.");
        cemail.focus();
        return false;
    }
    else if(trim(cname.value) == '')
    {
        alert("Il nome del mittente é un campo obbligatorio.");
        cname.focus();
        return false;
    }
    else if(trim(csubject.value) == '')
    {
        alert("L'oggetto della email é un campo obbligatorio.");
        csubject.focus();
        return false;
    }
    else if(trim(cmessage.value) == '')
    {
        alert("Il corpo del messaggio é un campo obbligatorio");
        cmessage.focus();
        return false;
    }
    else
    {
        cname.value    = trim(cname.value);
        cemail.value   = trim(cemail.value);
        csubject.value = trim(csubject.value);
        cmessage.value = trim(cmessage.value);
        return true;
    }
}

function checkBuyForm()
{
    var cbook, ccopies, cname, cemail, csubject, cmessage;
    with(window.document.buyform)
    {
        cbook    = bookId;
        ccopies  = copies;
        cname    = sendername;
        cemail   = sender;
        csubject = subject;
        cmessage = body;
    }
    
    if((trim(cbook.value) == '') || (trim(cbook.value) == '0'))
    {
        alert("E' necessario selezionare almeno uno dei libri nell'elenco.\nIn caso non trovassi il libro che stai cercando comunicacelo\nattraverso la sezione 'Contattaci'");
        cbook.focus();
        return false;
    }
    if((trim(ccopies.value) == '') || (trim(ccopies.value) == '0'))
    {
        alert("E' necessario selezionare il numero di copie che vuoi acquistare.");
        ccopies.focus();
        return false;
    }
    if(trim(cemail.value) == '')
    {
        alert("L'indirizzo email é un campo obbligatorio.");
        cemail.focus();
        return false;
    }
    else if(!isEmail(trim(cemail.value)))
    {
        alert("L'indirizzo email inserito sembra non essere corretto.");
        cemail.focus();
        return false;
    }
    else if(trim(cname.value) == '')
    {
        alert("Il nome del mittente é un campo obbligatorio.");
        cname.focus();
        return false;
    }
    else
    {
        cbook.value    = trim(cbook.value);
        ccopies.value  = trim(ccopies.value);
        cname.value    = trim(cname.value);
        cemail.value   = trim(cemail.value);
        csubject.value = trim(csubject.value);
        cmessage.value = trim(cmessage.value);
        return true;
    }
}

/*
Strip whitespace from the beginning and end of a string
Input : a string
*/
function trim(str)
{
    return str.replace(/^\s+|\s+$/g,'');
}

/*
Check if a string is in valid email format. 
Returns true if valid, false otherwise.
*/
function isEmail(str)
{
    var regex = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
    return regex.test(str);
}

/*
 * This method searches for the next element node given an input node.
 * If the input node is an element, such element is returned; if not
 * the function recursively acts on the nextSibling till founds an
 * element node or no element node found in the right-sibling nodes
 *
 * param: A DOM node
 */
function getNextElement(node) {
    if(node.nodeType == 1) {
        return node;
    }
    if(node.nextSibling) {
        return getNextElement(node.nextSibling);
    }

    return null;
}

/*
 * Sets the className value of the input element
 * or appends it to the existing ones (if any)
 *
 * param element: The element where the new className is set
 * param value: the className value (or the value to be appended
 *              to the className existing value)
 *
 */
function addClass(element, value) {

    if(! element.className) {
        element.className = value;
    } else {
        var newClassName = element.className;
        newClassName += " ";
        newClassName += value;
        element.className = newClassName;
    }
}

/*
 * This function inserts an element after the target
 * one, this is made because the DOM API does not
 * have such function but only the insertBefore one
 *
 * param newElement: The element to insert in the document
 * param targetElement: The element after which insert the new one in the document
 */
function insertAfter(newElement, targetElement) {
    var genitore = targetElement.parentNode;
    if(genitore.lastChild == targetElement) {
        genitore.appendChild(newElement);
    } else {
        genitore.insertBefore(newElement, targetElement.nextSibling);
    }
}






