/**
* Javascript implementation of the Levenshtein
* algorithm
*
* Copyright Tudor Barbu ( tudor@it-base.ro )
*
* www.web-spot.ro
*
*/

Levenshtein = {
    /**
    * returns the Levenshtein distance
    * between two strings
    *
    * @param string str1
    * @param string str2
    */
    distance: function( str1, str2 ) {
        var cost;

        if ( str1.length == 0 ) {
            return str2.length;
        }
        if ( str2.length == 0 ) {
            return str1.length;
        }

        var m = str1.length;
        var n = str2.length;

        var matrix = new Array();
        matrix[0] = new Array();

        for (var i = 0; i < n+1; i++) {
            matrix[0][i] = i;
        }

        for (var i = 1; i < m+1; i++) {
            matrix[i] = new Array();
            matrix[i][0] = i;
            for (var j = 1; j < n+1; j++) {
                cost = ( str1.charAt( i-1 ) == str2.charAt( j-1 ) ) ? 0 : 1;
                matrix[i][j] = Levenshtein.minimum( matrix[i-1][j]+1, matrix[i][j-1]+1, matrix[i-1][j-1] + cost );
            }
        }

        return matrix[m][n];
    },
    /**
    * gets the minimum between 2 or more numbers
    *
    * @access private
    *
    */
    minimum: function() {
        if ( arguments.length == 0 ) {
            return false;
        }
        var min = arguments[0];
        for ( var index = 1; index < arguments.length; index++ ) {
            if ( min > arguments[index] ) {
                min = arguments[index];
            }
        }
        return min;
    }
}