
    function toggleVisible(elem) {
        toggleElementClass("invisible", elem);
    }

    function makeVisible(elem) {
        removeElementClass(elem, "invisible");
    }

    function makeInvisible(elem) {
        addElementClass(elem, "invisible");
    }

    function isVisible(elem) {
        // you may also want to check for
        // getElement(elem).style.display == "none"
        return !hasElementClass(elem, "invisible");
    }
    
    // validations 
    // patterns
    URL_PATT = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/;
    EMAIL_PATT = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    UID_PATT = /^[a-zA-Z0-9_]+$/;

    function writeMesg(msg, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        swapDOM(cssid, DIV({'id':cssid}, msg));
    }

    function validateLink(elem, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (! URL_PATT.test(elem.value)) {
            writeMesg("Este enlace es invalido!", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }

    function validateEmail(elem, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (! EMAIL_PATT.test(elem.value)) {
            writeMesg("Este email(correo electronico) es invalido!", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }

    function validateUser(elem, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (!UID_PATT.test(elem.value)) {
            writeMesg("El nombre de usuario es invalido! Puede usar solo letras, numeros, y _", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }

    function validatePasswords(elem1, elem2, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (compare(elem1.value,elem2.value) != 0) { 
            writeMesg("Su clave y confirme de clave no son los mismos!", cssid);
            elem1.style.backgroundColor = "#FFCCCC";
            elem2.style.backgroundColor = "#FFCCCC";
            return false;
        } else if (elem1.value.length < 4) {
            writeMesg("Su clave es muy corto (menos de 4 letras)", cssid);
            elem1.style.backgroundColor = "#FFCCCC";
            elem2.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem1.style.backgroundColor = "#FFFFFF";
            elem2.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }


    function validateTerms(elem, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (!elem.checked ) {
            writeMesg("Debe aceptar los términos del servicio(Mira en la columna izquierda)", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }

    function validateComment(elem, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        if (elem.value.length >= 500) {
            writeMesg("Su comentario es demasiado grande!", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else if (elem.value.length == 0) {
            writeMesg("Este campo es obligatorio.", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }

    function validateRequired(elem, maxsize, cssid) {
        cssid = typeof(cssid) != 'undefined' ? cssid : "formerrormessage"; 
        maxsize = typeof(maxsize) != 'undefined' ? maxsize : 25; 
        if (elem.value.length >= maxsize) {
            writeMesg("Este campo es demasiado grande!", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else if (elem.value.length == 0) {
            writeMesg("Este campo es obligatorio.", cssid);
            elem.style.backgroundColor = "#FFCCCC";
            return false;
        } else {
            elem.style.backgroundColor = "#FFFFFF";
            return true;
        }
    }
    
function textCounter(theField, charsLeft, maxChars) {
	if (theField.value.length > maxChars) {
		theField.value = theField.value.substring(0, maxChars);
	} else {
		charsLeft.value = maxChars - theField.value.length;
	}
}
