function changeText(element, text)
{
    while (element.hasChildNodes()) {
        element.removeChild(element.firstChild);
    }
    element.appendChild(document.createTextNode(text));
}

function hide(element)
{
    element.style.visibility='hidden';
}

function show(element)
{
    element.style.visibility='visible';
}


var whitespace = " \t\n\r";

function isEmpty(s)
{
    return ((s == null) || (s.length == 0))
}

function isNumber(s, min, max)
{
    var n;
    n = Number(s);
    if ((!isWhitespace(s)) && (n != NaN) && (n >= min) && (n <= max)) {
        return true;
    } else {
        return false;
    }
}

function isHour(s, min, max)
{
    var h, m;
    s = removeWhitespace(s);
    if (s.substr(s.length-3)=='hs.') {
        s=s.substr(0, s.length-3);
    } else if (s.substr(s.length-2)=='hs') {
        s=s.substr(0, s.length-2);
    }  else if (s.substr(s.length-1)=='h') {
        s=s.substr(0, s.length-1);
    }
    
    s = removeWhitespace(s);
    s = s.split(':');
    if (s.length==2 && (h=Number(s[0]))!=NaN && h>=min && h<=max && (m=Number(s[1]))!=NaN && m>=0 && m<60) {
        return true;
    } else {
        return false;
    }
}

function removeWhitespace(s)
{
    var i, s2;
    for (i=0; i<s.length; i++) {
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) {
            break;
        }
    }
    
    s=s.substr(i);
    
    for (i=s.length; i>0; i--) {
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) {
            break;
        }
    }
    
    s = s.substr(0, i+1);
    return s;
}

function isWhitespace(s)
{
    var i;
    // Is s empty?
    if (isEmpty(s)) {
        return true;
    }
    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.
    for (i = 0; i < s.length; i++) {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) {
            return false;
        }
    }
    // All characters are whitespace.
    return true;
}

function isEmail(s)
{
    if (isEmpty(s)) {
        return false
    }
    
    // is s whitespace?
    if (isWhitespace(s)) {
        return false;
    }
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;
    
    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) {
        i++
    }
    
    if ((i >= sLength) || (s.charAt(i) != "@")) {
        return false;
    } else {
        i += 2;
    }
    
    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")) {
        i++
    }
    
    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) {
        return false;
    } else {
        return true;
    }
}

function getPosition(element)
{
    var pos = { x:0 ,y:0 };
    do {
        pos.x += parseInt(element.offsetLeft);
        pos.y += parseInt(element.offsetTop);
        element = element.offsetParent;
    } while (element);
    return pos;
}

// Validation

function validateDecimalField(element, min, max, number_digits, fraction_digits)
{
    var n;
    s = element.value.replace(/,/, '.');
    n = Number(s);
    if ((!isWhitespace(s)) && (n != NaN) && (n >= min) && (n <= max)) {
        if (Math.floor(n).toString().length > number_digits) { // The number is too long
            element.style.color = '#ff0000';
        } else {
            element.style.color = '#000000';
            element.value = n.toFixed(fraction_digits).toString();
        }
    } else {
        element.style.color = '#ff0000';
    }
}

function validateEmail(element)
{
    if (isEmail(element.value)) {
        element.style.color = '#000000';
    } else {
        element.style.color = '#ff0000';
    }
}

function isKeypress(event)
{
    return (event.keyCode == 13);
}

function getRadioValue(name)
{
    var elements = document.getElementsByName(name);
    for (i = 0; i < elements.length; i++) {
        if (elements[i].checked) {
            return elements[i].value;
        }
    }
    return false;
}

function inArray(needle, haystack)
{
    for (var i = 0; i < haystack.length; i++) {
        if (haystack[i] == needle) {
            return true;
        }
    }
    return false;
}
