/*
//this file copyright Apposite Ltd 2005
*/
add_event(window,'load',init_textboxes);
add_event(window,'load',init_buttons);

/*
select boxes should loose focus on change?
*/


function init_textboxes(){
    //auto selects text in textboxes
    
    var select_all = function(e){
        
        var input = event_obj(e);
        if (input.select){
            input.select();
        }
    }
    
    var inputs = document.getElementsByTagName('input');
    
    for (var i=0; i<inputs.length; i++){
        var input_type = inputs[i].type.toLowerCase();
        if (input_type == "text" || input_type == "password" || input_type == "file"){
            add_event(inputs[i],'focus',select_all);
        }
    }
}

function init_buttons(){
    
    var confirm_action = function(e){
        var ele = KJD.getParentByAttribute(e.target, 'confirm', true);

        var confirm_text = ele.getAttribute('confirm');
        if (confirm_text){
            if (!window.confirm(confirm_text)){
                preventDefault(e);
                cancelBubble(e);
                return false;
            }
        }
    }
    var validate_form = function(e){
        //validates the fields in a form
        //returns true if data is valid (or unable to validate)
        //returns false if data is invalid, and sets focus to the first invalid field
        
        //get the form
        var err_msgs = '';
        var button = event_obj(e);
        var eles = button.form.elements;
    
        
        //go backwards through the fields focusing on any invalid field.
        //this way the focus will be left on the first invalid field.
        for (var i=eles.length-1; i>=0; i--){
            var ele = eles[i];
            var datatype = ele.getAttribute('datatype');
            
            if (datatype && (datatype!='html')){
                
                var msg = '';
                var value = trim(ele.value);
                var friendly_name = ele.name;
                var min = ele.getAttribute('minvalue');
                var max = ele.getAttribute('maxvalue');
                var min_len = ele.getAttribute('minlength');
                var max_len = ele.getAttribute('maxlength');
                
                if (ele.getAttribute('required') && ((value.length==0) || (datatype == 'int' && Number(value)==0))) {
                    msg = friendly_name +' is required.';
                }
                else {
                    switch (datatype){
                    case 'email':
                        var regexp_email = /[\s]*[\w-_\.]+\@[\w]+\.[\w]+[\s]*/;
                        if ((value.length > 0) && !value.match(regexp_email)){
                            msg = "'" + value + "' is not a valid email address.\nPlease enter a valid email address (eg 'someone@hotmail.com').\n"
                        }
                    case 'html':
                    case 'text':
                        if (min_len && (value.length == 0)){
                            msg = "'" + friendly_name + "' required.\n";
                        }
                        if (min_len && (value.length < min_len)){
                            msg = "'" + friendly_name + "' is too short, Minimum length of " + friendly_name + " is " + min_len + " characters.\n";
                        }
                        if (max_len && (value.length > max_len)){
                            msg = "'" + friendly_name + "' is too long, Maximum length of " + friendly_name + " is " + max_len + " characters.\n";
                        }
                        break;
                    
                    case 'real':
                    case 'int':
                        value = (1 * value);
                        if (isNaN(value)){
                            msg = "'" + friendly_name + "' must be a number.";
                        }
                        else if (min && (value < min)){
                            msg = "'" + friendly_name + "' must be greater than "+ min +".";
                        }
                        else if (max && (value > max)){
                            msg = "'" + friendly_name + "' must be no more than "+ max +".";
                        }
                        break;
                        
                    case 'bool':
                        //do nothing always valid
                        break;
                    
                    case 'date':
                        //FIXME: write date check
                        break;
                    
                    case 'time':
                        //FIXME:
                        //if (!value.match(/([0-9]{2})(:[0-9]{2})?(:[0-9]{2})?\s?(am|pm)?/i)){
                        //    msg = "'" + friendly_name + "' must be in a valid time format (eg '6:45 pm' or '18:45')";
                        //}
                        break;
                        
                    default:
                        debug('Unknown datatype "'+ datatype +'"');
                    }
                }
                
                var table = get_parent(ele,'table'); 
                if (msg){
                    //prepend msg to err messages
                    err_msgs = msg +'\n'+ err_msgs;
                    
                    //remove 'updated' class from container

                    replace_class(table,'updated','error');
                    ele.focus();
                }
                else {
                    //remove any update/error styles
                    remove_class(table,'updated,error');
                }
            }
        }
        
        if (err_msgs != ''){
            //one or more errors, don't submit the form
            alert(err_msgs);
            preventDefault(e);
            cancelBubble(e);
            return false;
        }
        else {
            return true;
        }
    }
    
    var inputs = document.getElementsByTagName('input');
    
    for (var i=0; i<inputs.length; i++){
        var input_type = inputs[i].type.toLowerCase();
        if (input_type == "submit"){
            var confirm_text = inputs[i].getAttribute('confirm');
            if (confirm_text){
                add_event(inputs[i],'click',confirm_action);
            }
            else {
                add_event(inputs[i],'click',validate_form);
            }
        }
    }
    
    //confirm links
    var links = KJD.getElementsByAttribute('confirm', 'a');
    
    for (i=0; i<links.length; i++){
        KJD.addEvent(links[i],'click',confirm_action);
    }
}

