﻿///<reference path="Extjs_Intellisense.js" />

LUL.LocationManager = function() {
    this.locations = [];
    this.drops = [];

    this.placeBefore = null;

    this.add = function(id) {
        this.locations.push(id);
        this.drops.push(new LUL.LocationDrop(id));
    }

    this.showMarkers = function() {
        for (var i = 0; i < this.locations.length; i++) {
            Ext.get(this.locations[i] + 'Bottom').dom.style.display = 'block';
        }
    }

    this.hideMarkers = function() {
        for (var i = 0; i < this.locations.length; i++) {
            Ext.get(this.locations[i] + 'Bottom').dom.style.display = 'none';
        }
    }
}

// global instans
var locationManager = new LUL.LocationManager();

LUL.LocationDrop = Ext.extend(Ext.dd.DropTarget, {
    notifyDrop: function(dd, e, data) {
        // hanterar bara tillägg av panel, annan drop hanteras av editorn... (var enklare så)
        if (data.newPanel) {
            // dölj kolumnmarkeringar
            locationManager.hideMarkers();
            data.callOnDrop.call(this, data.insertHere, data.insertBefore, data);
        }
    },

    notifyOver: function(dd, e, data) {
        // visa kolumnmarkeringar
        locationManager.showMarkers();

        var xy = e.getXY(), match = false, child;
        var children = Ext.get(this.dragElId).dom.childNodes;
        // hitta vart den ska placeras
        for (var i = 0; i < children.length; i++) {
            child = Ext.get(children[i]);
            var h = child.getHeight();
            if (h !== 0 && (child.getY() + /*(h / 2)*/h) > xy[1]) {
                match = true;
                break;
            }
        }

        // ny panel?
        if (data.newPanel) {
            if (match) {
                if (data.insertHere) Ext.get(data.insertHere).remove();
                data.insertHere = Ext.DomHelper.insertBefore(child, { tag: 'div', cls: 'insert-here', id: 'insertHereMarker' });
                data.insertBefore = child;
                return this.dropAllowed;
            }
            // befintlig panel
        } else {

            var px = dd.proxy;

            var parent = dd.panel.el.dom.parentNode;
            parent.style.display = 'none';

            if (match && child != locationManager.placeBefore && child.dom != parent && child != dd.proxy.proxy) {
                //Ext.get('header').dom.innerHTML = 'over ' + child.dom.id;
                px.getProxy().setWidth('auto');
                px.moveProxy(child.dom.parentNode, child.dom);
                locationManager.placeBefore = child;
                return this.dropAllowed;
            }
        }
        return this.dropNotAllowed;
    }
});
