//alert( "Start consistency script" ) ;

function consistency$setChanged() {
    var changesObject = document.getElementById( "consistency$hasChanges" ) ;
    
    if( changesObject ) {
        changesObject.value = "true" ;
    }
    else {
        alert( getMessage( "consistency-001" ) ) ;
        //alert( "Consistency object not found!" ) ;
    }
}

//alert( "Script: consistency$setAutomaticRollback" ) ;

function consistency$setAutomaticRollback() {
    var automaticObject = document.getElementById( "consistency$automaticRollback" ) ;
    
    if( automaticObject ) {
        automaticObject.value = "true" ;
    }
    else {
        alert( getMessage( "consistency-002" ) ) ;
        //alert( "Consistency object (automatic rollback) not found!" ) ;
    }
}

//alert( "Script: ignoreFields" ) ;

var ignoreFields = new Array() ;

//alert( "Script: consistency$addIgnoreField" ) ;

function consistency$addIgnoreField( fieldName ) {
    ignoreFields[ ignoreFields.length ] = fieldName ;
}

//alert( "Script: consistency$isIgnoredField" ) ;

function consistency$isIgnoredField( fieldName ) {
    // Check ignorable on naming convention
    var fieldParts = fieldName.split( ':' ) ;
    for( var i = 0 ; i < fieldParts.length ; i++ ) {
        if( fieldParts[i].indexOf( '__search__' ) == 0 ) {
            return( true ) ;
        }
    }

    // Check registered ignorable field
    for( var ignoreFieldIndex = 0 ; ignoreFieldIndex < ignoreFields.lengh ; ignoreFieldIndex ) {
        if( ignoreFields[ ignoreFieldIndex ] == fieldName ) {
            return( true ) ;
        }
    }
    
    return( false ) ;
}

//alert( "Script: consistency$getFieldType" ) ;

function consistency$getFieldType( element ) {

    var type = null ;

    if( !element.type && element[0] && element[0].type == "radio" ) {
        // the item is an array of radio items
        type = "radiogroup";
    }
    else {
      type = element.type;
    }

    return( type ) ;    
}

//alert( "Script: consistency$isFieldChanged" ) ;

function consistency$isFieldChanged( element ) {

    var type = consistency$getFieldType( element ) ;
    
    // Do not check hidden fields
    if( type == "hidden" ) {
        return( false ) ;
    }
    
    var result = false ;
    
    //alert( "Check field '" + element.name + "'. Type = " + type ) ;
    
    if ( type == "password" || type == "text" || type == "textarea" ) {
        // Check defaultValue and value
        result = element.value != element.defaultValue ;
    }
    else if ( type == "checkbox" || type == "radio" ) {
        // Check defaultChecked and checked
        result = element.checked != element.defaultChecked ;
    }
    else if ( type == "radiogroup" ) {
        // Check defaultChecked and checked from array
        for( var i = 0; i < element.length; i++ ) {
            if( element[i].checked != element[i].defaultChecked ) {
                result = true ;
            }
        }
    }
    else if ( type == "select-one" ) {
        var options = element.options ;
        var hasDefaultSelected = false ;
        var selectedIndex = -1 ;

        for( var i = 0; i < options.length ; i++ ) {
            if( options[i].selected ) {
                selectedIndex = i ;
            }
            
            if( options[i].defaultSelected ) {
                hasDefaultSelected = true ;
            }
        
            if( options[i].selected != options[i].defaultSelected ) {
                result =  true ;
            }
        }
        
        // No default selected, but because first value is selected we will ignore that
        if( !hasDefaultSelected && selectedIndex == 0 ) {
            result = false ;
        }

    }
    else if (type == "select-multiple" ) {
        var options = element.options ;
        
        //alert( 'Checking select -> ' + type ) ;
        
        for( var i = 0; i < options.length ; i++ ) {
            //alert( 'i=' + i + 'Option[i].selected = ' + options[i].selected + ', options[i].defaultSelected = ' + options[i].defaultSelected ) ;
        
            if( options[i].selected != options[i].defaultSelected ) {
                result =  true ;
            }
        }
    }
    
    //if( result ) { alert( 'Item ' + element.id + ' has changed!' ) ; }
    
    return( result ) ;
}

//alert( "Script: consistency$hasChanges" ) ;

function consistency$hasChanges() {
    for( var formIndex = 0 ; formIndex < document.forms.length ; formIndex++ ) {
        var form = document.forms[formIndex];

        // return true when one of the items in any form have been changed by the user
        for (var elementIndex = 0 ; elementIndex < form.elements.length ; elementIndex++) {
            var element = form.elements[ elementIndex ] ;

            if( !element.type ) {
                continue ;
            }
            
            if( consistency$isIgnoredField( element.name ) ) {
                continue ;
            }
            
            if( consistency$isFieldChanged( element ) ) {
                return( true ) ;
            }
        }
    }
    
    return( false ) ;
}

//alert( "Script: consistency$checkChanges" ) ;

function consistency$checkRemove( iErrorMessage ) {

    var errormessage = getMessage(  "consistency-005" ) ;
    
    if( iErrorMessage ) {
        errormessage = iErrorMessage ;
    }

    var changesObject = document.getElementById( "consistency$hasChanges" ) ;
    var result = true ;
    
    if( changesObject ) {
        if( changesObject.value != "true" ) {
            // Loop through all objects and look if they are changed
            if( consistency$hasChanges() ) {
                changesObject.value = "true" ;
            }
        }
        
        if( changesObject.value == "true" ) {
            alert( getMessage( "consistency-006" ) ) ;
            return( false ) ;
        }
    }

    return( confirm( iErrorMessage ) ) ;
}


function consistency$checkChanges() {
    var changesObject = document.getElementById( "consistency$hasChanges" ) ;
    var result = true ;
    
    if( changesObject ) {
        if( changesObject.value != "true" ) {
            // Loop through all objects and look if they are changed
            if( consistency$hasChanges() ) {
                changesObject.value = "true" ;
            }
        }
    
        if( changesObject.value == "true" ) {
            var automaticObject = document.getElementById( "consistency$automaticRollback" ) ;
            if( automaticObject ) {
                var setRollback = false ;
                
                if( automaticObject.value == "true" ) {
                    setRollback = true ;
                }
                
                if( !setRollback ) {
                    setRollback = confirm( getMessage( "consistency-003" ) ) ;
                    //setRollback = confirm( "U heeft wijzigingen aangebracht. Wilt u deze ongedaan maken?" ) ;
                }
            
                if( setRollback ) {
                    var rollbackObject = document.getElementById( "consistency$doRollback" ) ;
                    
                    if( rollbackObject ) {
                        rollbackObject.value = "true" ;
                    }
                    else {
                        alert( getMessage( "consistency-004" ) ) ;
                        //alert( "Rollback object not found!" ) ;
                    }
                }
                else {
                    result = false ;
                }
            }
            else {
                alert( getMessage( "consistency-002" ) ) ;
                //alert( "Consistency object (automatic rollback) not found!" ) ;
            }
        }
    }
    else {
        alert( getMessage( "consistency-001" ) ) ;
        //alert( "Consistency object not found!" ) ;
    }

    return( result ) ;
}


//alert( "Script: Done" ) ;
