/**
 * @private
 */
Ext.define('Ext.exporter.file.ooxml.Relationship', {
    extend: 'Ext.exporter.file.Base',
 
    isRelationship: true,
 
    config: {
        idPrefix: 'rId',
 
        schema: '',
 
        target: '',
 
        /**
         * @private
         * All relationships targets should be relative paths to this parent folder.
         */
        parentFolder: null,
 
        /**
         * @private
         * Calculated as the `target` path relative to the parent folder
         */
        path: null
    },
 
    tpl: [
        '<Relationship Id="{id}" Type="{schema}" Target="{path}"/>'
    ],
 
    updateTarget: function(target) {
        this.calculatePath();
    },
 
    applyParentFolder: function(folder) {
        folder = folder || '';
        if(folder[folder.length - 1] == '/') {
            folder = folder.slice(0, folder.length - 1);
        }
        return folder;
    },
 
    updateParentFolder: function(folder) {
        this.calculatePath();
    },
 
    calculatePath: function() {
        var from = String(this.getParentFolder() || ''),
            to = String(this.getTarget() || ''),
            fromParts = from.split('/'),
            toParts = to.split('/'),
            length = Math.min(fromParts.length, toParts.length),
            samePartsLength = length,
            path = '',
            outputParts = [],
            i;
 
        for(i = 0; i < length; i++) {
            if (fromParts[i] !== toParts[i]) {
                samePartsLength = i;
                break;
            }
        }
 
        if (samePartsLength == 0) {
            path = to;
        } else {
            for (i = samePartsLength; i < fromParts.length; i++) {
                outputParts.push('..');
            }
 
            outputParts = outputParts.concat(toParts.slice(samePartsLength));
            path = outputParts.join('/');
        }
 
        this.setPath(path);
    }
});