


var Register = new Object;


Register.checkRequired = function (elem) {
    msg = new ErrorMessage(elem,'This field is required.');
    if (elem.value.length == 0) {
        msg.show();
        return false;
    } else {
        msg.hide();
        return true;
    }
}

Register.checkUsername = function (elem) {
    //console.log('running Register.checkUsername('+elem.value+')');

    if (Register.checkRequired(elem)) {
//console.log('passed required test');

    var rpcUrl = '/rpc/check_username.php';

    var spinner = new Spinner(elem);

    var msg = new ErrorMessage(elem, 'This user name is already registered.');
    this.onSuccess = function (transport) {
        var response = transport.responseText || 'no response text';
        spinner.hide();
        if (response == 1) { msg.show(); }//console.log('failed test!'); }
        else               { msg.hide(); }//console.log('passed test!'); }
    }

    this.onFailure = function () {
        //console.log('failed test!');
        spinner.hide();
    }

    spinner.show(elem);
    var request = new Ajax.Request(rpcUrl,
        {
            method: 'get',
            parameters: {username: elem.value},
            onSuccess: this.onSuccess,
            onFailure: this.onFailure
        }
    );
//console.log('request:');
//console.dir(request);

    }
}

Register.checkPasswords = function (elemId1, elemId2) {
    var ok1 = Register.checkRequired($(elemId1));
    var ok2 = Register.checkRequired($(elemId2));
    if (ok1 && ok2) {
        var elem = $(elemId1);
        msg = new ErrorMessage(elem,'Passwords do not match.');
        if ($(elemId1).value != $(elemId2).value) {
            msg.show();
        } else {
            msg.hide();
        }
    }
}

Register.checkEmail = function (elem) {
    if (Register.checkRequired(elem)) {

        var regex = /^(.*)@(.*).(.*)$/;
        if (!elem.value.match(regex)) {
            var errTxt = 'Please enter a valid email address.';
            msg = new ErrorMessage(elem, errTxt);
            msg.show();
        } else {
    
            var rpcUrl = '/rpc/check_email.php';
            var spinner = new Spinner(elem);
            var errTxt = 'This email address is already registered.';
            msg = new ErrorMessage(elem, errTxt);
            this.onSuccess = function (transport) {
                var response = transport.responseText || 'no response text';
                spinner.hide();
                if (response == 1) { msg.show(); }
                else               { msg.hide(); }
            }
        
            this.onFailure = function () {
                spinner.hide();
            }
        
            spinner.show(elem);
            var request = new Ajax.Request(rpcUrl,
                {
                    method: 'get',
                    parameters: {email: elem.value},
                    onSuccess: this.onSuccess,
                    onFailure: this.onFailure
                }
            );
        }
    }
}

Register.checkWebsite = function (elem) {
    var regex = /^(http|https):\/\/([\w.]+)/;
    var errTxt = 'Please enter a valid website address.';
    msg = new ErrorMessage(elem, errTxt);
    if (elem.value.length > 0 && !elem.value.match(regex)) {
        msg.show();
    } else {
        msg.hide();
    }
}



Spinner = function(inputElem) {
    this.id = 'spinner_'+inputElem.name;

    this.show = function (elem) {
    
        var left = DomUtils.getElementWidth(elem) + DomUtils.getElementLeft(elem) + 20;
        var top  = DomUtils.getElementTop(elem);
        sp = document.createElement('img');
        sp.src = '/images/spinner_mac.gif';
        sp.id = this.id;
        elem.parentNode.parentNode.appendChild(sp);
        sp.style.position = 'absolute';
        sp.style.left = left+'px';
        sp.style.top  = top+'px';
        sp.style.display = '';
    
    }
    this.hide = function () {
        $(this.id).parentNode.removeChild($(this.id));
    }
}



ErrorMessage = function (elem, errorMessage) {
    this.id = 'error_'+elem.name;

    this.show = function () {

        //var left = DomUtils.getElementWidth(elem) + DomUtils.getElementLeft(elem) + 20;
        //var top  = DomUtils.getElementTop(elem);
        msg = $(this.id);
        if (!msg) {
//console.log('creating msg element');
            msg = document.createElement('span');
            msg.className = "error";
            msg.id = this.id;
            elem.parentNode.parentNode.appendChild(msg);
        }
        while (msg.childNodes.length > 0) msg.removeChild(msg.firstChild);
        msg.appendChild(document.createTextNode(errorMessage));
        //msg.style.position = 'relative';
        //msg.style.left = '10px';
        //msg.style.top  = top+'px';
        msg.style.display = '';
    
    }
    this.hide = function () {
        if ($(this.id)) $(this.id).parentNode.removeChild($(this.id));
    }




}


