function FlexinAddValidatorsToForm(frm) {
    var elements = $(frm).select('[validation]');
    //alert(elements.length);
    for(var i=0; i < elements.length; i++) {
        var el = $(elements[i]);
        
        //alert ('processing element ' + el.identify());
        //alert ('element is visible? ' + el.visible());
        
        // first add validations to the form...
        validations = eval('new Array' + el.getAttribute('validation')); 
        
        if(validations.length) {  
            var lv = new LiveValidation(el,
                {
                    validMessage: ""    
                }); 
            
                
            lv.validFieldClass = "valid";
            lv.invalidFieldClass = "error";
            lv.messageClass = "validationmessage";
            lv.invalidClass = "error";
                 
            for(var j=0; j < validations.length; j++) {
                v = validations[j];
                switch(v.type) {
                    case "required":
                        var options = new Object;
                        options.failureMessage = v.errorMessage;
                        
                        lv.add( Validate.Presence, 
                            options );
                        break;
                    case "minchars":
                        var options = new Object;
                        options.tooShortMessage = v.errorMessage;
                        options.minimum = v.chars; 
                        
                        lv.add( Validate.Length, 
                            options );
                        break;
                    case "maxchars":
                        var options = new Object;
                        options.tooLongMessage = v.errorMessage;
                        options.maximum = v.chars; 
                        
                        lv.add( Validate.Length, 
                            options );
                        break;
                    case "minvalue":
                        var options = new Object;
                        options.failureMessage = v.errorMessage;
                        options.minimum = v.value; 
                        
                        lv.add( Validate.Numericality, 
                            options );
                        break;
                    case "maxvalue":
                        var options = new Object;
                        options.failureMessage = v.errorMessage;
                        options.maximum = v.value; 
                        
                        lv.add( Validate.Numericality, 
                            options );
                        break;
                    case "regex":
                    
                        break;
                    default:
                        // let's not do anything...
                    
                }
            }
        }
    }    
}


function FlexinInitialiseForm(frm) {
    // add validations to the form...
    FlexinAddValidatorsToForm(frm);
    //alert('Initialising form ' + frm.getAttribute('id'));
    
    
    // add related object functionality...
    elements = $(frm).select('[widgettype=relatedobjectwidget]');
    for(var i=0; i < elements.length; i++) {
        //alert('relatedobject: ' + elements[i]);
        elements[i].observe('focus', function(event) {
            el = event.findElement();
            new Autocomplete(el.identify(), { 
                serviceUrl:'ajaxserver.php?_c=' + el.getAttribute('relatedclass') + '&_a=getrelatedjson&_l=' + flexinMeta.getSettingValue('lang') + '&',
                minChars:2, 
                maxHeight:400,
                width:el.getWidth(),
                deferRequestBy: 750,
                // callback function:
                onSelect: function(value, data){
                    $(el.getAttribute('valuefieldid')).setValue(data);
                    //alert('You selected: ' + value + ', ' + data);
                  }
              });
        });  
        /*new Autocomplete($(elements[i]).identify(), { 
                serviceUrl:'ajaxserver.php?_c=' + el.getAttribute('relatedclass') + '&_a=getrelatedjson&_l=' + flexinMeta.getSettingValue('lang') + '&',
                minChars:2, 
                maxHeight:400,
                width:el.getWidth(),
                deferRequestBy: 750,
                // callback function:
                onSelect: function(value, data){
                    $(el.getAttribute('valuefieldid')).setValue(data);
                    //alert('You selected: ' + value + ', ' + data);
                  }
              }); */
    }
    // add related object widget new button functionality...
    elements = $(frm).select('[widgettype=relatedobjectwidget_new]');
    for(var i=0; i < elements.length; i++) {
        elements[i].observe('click', function(event) {
            var el = event.findElement();
            // opening popup...
            var x = (screen.width - 780) / 2;
            if(!x)
                x = 100;
            var y = 125; 
            var link = 'index.php?_l=' + flexinMeta.getSettingValue('lang') + '&_c=' + el.readAttribute('relatedclass') + '&_a=adminNew&_s=1&_pe=' + el.readAttribute('elementid');
            var windowName = el.readAttribute('id') + '_rof';
            var windowFeatures = 'width=780, height=625, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, copyhistory=no, resizable=yes, left=' + x + ', top=' + y + ', screenX=' + x + ', screenY=' + y + '';
            //alert(windowName);
            page = (window.open(
                link, 
                '_blank', 
                windowFeatures));
            if(page) {
                page.focus();
                
                $(el).observe('flexin:relatedobjectcreated', function(event) {
                    alert('we got the trigger!!!');
                })
            }               
        });
    
    }
    
    // adding functionality to the add row buttons...
    elements = $(frm).select('[widgettype=buttoninserttablerow]');
    //alert(frm.getAttribute('id') + ': ' + elements.length);
    for(var i=0; i < elements.length; i++) {
        elements[i].observe('click', function(event) {
            var el = event.findElement();
            var tbody = $(el.getAttribute('tbody'));
            var maxrows = el.getAttribute('maxrows');    
            var currentrows = $(tbody).childElements().length - 1;
            if(currentrows < maxrows) {     
                var newRow = $(tbody).childElements()[0].cloneNode(true);
                $(tbody).insert(newRow);
                newRow.show();
                if(currentrows + 1 == maxrows) {
                    // max rows reached...
                    el.hide();
                }
            }
            // let us reinitialise the form to make sure we won't have any issue with validators...
            FlexinAddValidatorsToForm($(el.up('form')));
            
        });
    }
    

}



