/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
 * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
 * full text of the license. */

/**
 * @requires OpenLayers/Popup/Framed.js
 * @requires OpenLayers/Util.js
 */

/**
 * Class: OpenLayers.Popup.ShadowFramedCloud
 * 
 * Inherits from: 
 *  - <OpenLayers.Popup.Framed>
 */
OpenLayers.Popup.ShadowFramedCloud = 
  OpenLayers.Class(OpenLayers.Popup.Framed, {

    /** 
     * Property: contentDisplayClass
     * {String} The CSS class of the popup content div.
     */
    contentDisplayClass: "olFramedCloudPopupContent",

    /**
     * APIProperty: autoSize
     * {Boolean} Framed Cloud is autosizing by default.
     */
    autoSize: true,

    /**
     * APIProperty: panMapIfOutOfView
     * {Boolean} Framed Cloud does pan into view by default.
     */
    panMapIfOutOfView: true,

    /**
     * APIProperty: imageSize
     * {<OpenLayers.Size>}
     */
    imageSize: new OpenLayers.Size(676, 736),

    /**
     * APIProperty: isAlphaImage
     * {Boolean} The FramedCloud does not use an alpha image (in honor of the 
     *     good ie6 folk out there)
     */
    isAlphaImage: true,

    /** 
     * APIProperty: fixedRelativePosition
     * {Boolean} The Framed Cloud popup works in just one fixed position.
     */
    fixedRelativePosition: false,

    /**
     * Property: positionBlocks
     * {Object} Hash of differen position blocks, keyed by relativePosition
     *     two-character code string (ie "tl", "tr", "bl", "br")
     */
    positionBlocks: {
        "tl": {
            'offset': new OpenLayers.Pixel(0/*40, 44*/, 0/*27*/),
			'padding': new OpenLayers.Bounds(8, 60, 20, 9),
			'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'), 
					anchor: new OpenLayers.Bounds(0, 72, 39, 0), 
					position: new OpenLayers.Pixel(0, 0)
                }, 
				{ //top-right
                    size: new OpenLayers.Size(39, 'auto'), 
					anchor: new OpenLayers.Bounds(null, 72, 0, 0), 
					position: new OpenLayers.Pixel(-621, 0)
                }, 
				{ //bottom-left
                    size: new OpenLayers.Size('auto', 38), 
					anchor: new OpenLayers.Bounds(0, 34, 39, null), 
					position: new OpenLayers.Pixel(0, -611)
                }, 
				{ //bottom-right
                    size: new OpenLayers.Size(39, 38), 
					anchor: new OpenLayers.Bounds(null, 34, 0, null), 
					position: new OpenLayers.Pixel(-621, -611)
                }, 
				{ // stem
                    size: new OpenLayers.Size(81, 54), 
					anchor: new OpenLayers.Bounds(null, 0, 0, null), 
					position: new OpenLayers.Pixel(0, -685)
                }
            ]
		}, 
		"tr": {
            'offset': new OpenLayers.Pixel(0/*-32, -40*/, 0/*27*/),
			'padding': new OpenLayers.Bounds(8, 60, 20, 9),
			'blocks': [
                { // top-left
                    size: new OpenLayers.Size('auto', 'auto'),
					anchor: new OpenLayers.Bounds(0, 72, 39, 0), 
					position: new OpenLayers.Pixel(0, 0)
				}, 
				{ //top-right
					size: new OpenLayers.Size(39, 'auto'), 
					anchor: new OpenLayers.Bounds(null, 72, 0, 0), 
					position: new OpenLayers.Pixel(-621, 0)
				}, 
				{ //bottom-left
					size: new OpenLayers.Size('auto', 38), 
					anchor: new OpenLayers.Bounds(0, 34, 39, null), 
					position: new OpenLayers.Pixel(0, -611)
				}, 
				{ //bottom-right
					size: new OpenLayers.Size(39, 38), 
					anchor: new OpenLayers.Bounds(null, 34, 0, null), 
					position: new OpenLayers.Pixel(-621, -611)
				}, 
				{ // stem
					size: new OpenLayers.Size(81, 54), 
					anchor: new OpenLayers.Bounds(0, 0, null, null), 
					position: new OpenLayers.Pixel(-225, -685)
				}
			]
		}, 
		"bl": {
			'offset': new OpenLayers.Pixel(0/*45*/, 0/*-30*/), 
			'padding': new OpenLayers.Bounds(8, 29, 20, 40), 
			'blocks': [
				{ // top-left
					size: new OpenLayers.Size('auto', 'auto'), 
					anchor: new OpenLayers.Bounds(0, 38, 39, 32), 
					position: new OpenLayers.Pixel(0, 0)
				}, 
				{ //top-right
					size: new OpenLayers.Size(39, 'auto'), 
					anchor: new OpenLayers.Bounds(null, 38, 0, 32), 
					position: new OpenLayers.Pixel(-621, 0)
				}, 
				{ //bottom-left
					size: new OpenLayers.Size('auto', 55), 
					anchor: new OpenLayers.Bounds(0, -17, 39, null), 
					position: new OpenLayers.Pixel(0, -611)
				}, 
				{ //bottom-right
					size: new OpenLayers.Size(39, 55), 
					anchor: new OpenLayers.Bounds(null, -17, 0, null), 
					position: new OpenLayers.Pixel(-621, -611)
				}, 
				{ // stem
					size: new OpenLayers.Size(81, 37), 
					anchor: new OpenLayers.Bounds(null, null, 0, 0), 
					position: new OpenLayers.Pixel(-101, -674)
				}
			]
		}, 
		"br": {
			'offset': new OpenLayers.Pixel(0/*-27*/, 0/*-30*/), 
			'padding': new OpenLayers.Bounds(8, 29, 20, 40), 
			'blocks': [
				{ // top-left
					size: new OpenLayers.Size('auto', 'auto'), 
					anchor: new OpenLayers.Bounds(0, 38, 39, 32), 
					position: new OpenLayers.Pixel(0, 0)
				}, 
				{ //top-right
					size: new OpenLayers.Size(39, 'auto'), 
					anchor: new OpenLayers.Bounds(null, 38, 0, 32), 
					position: new OpenLayers.Pixel(-621, 0)
				}, 
				{ //bottom-left
					size: new OpenLayers.Size('auto', 55), 
					anchor: new OpenLayers.Bounds(0, -17, 39, null), 
					position: new OpenLayers.Pixel(0, -611)
				}, 
				{ //bottom-right
					size: new OpenLayers.Size(39, 55), 
					anchor: new OpenLayers.Bounds(null, -17, 0, null), 
					position: new OpenLayers.Pixel(-621, -611)
				}, 
				{ // stem
					size: new OpenLayers.Size(81, 37), 
					anchor: new OpenLayers.Bounds(0, null, null, 0), 
					position: new OpenLayers.Pixel(-328, -674)
				}
			]
		}
    },

    /**
     * APIProperty: minSize
     * {<OpenLayers.Size>}
     */
    minSize: new OpenLayers.Size(105, 10),

    /**
     * APIProperty: maxSize
     * {<OpenLayers.Size>}
     */
    maxSize: new OpenLayers.Size(600, 660),

    /** 
     * Constructor: OpenLayers.Popup.FramedCloud
     * 
     * Parameters:
     * id - {String}
     * lonlat - {<OpenLayers.LonLat>}
     * contentSize - {<OpenLayers.Size>}
     * contentHTML - {String}
     * anchor - {Object} Object to which we'll anchor the popup. Must expose 
     *     a 'size' (<OpenLayers.Size>) and 'offset' (<OpenLayers.Pixel>) 
     *     (Note that this is generally an <OpenLayers.Icon>).
     * closeBox - {Boolean}
     * closeBoxCallback - {Function} Function to be called on closeBox click.
     */
    initialize:function(id, lonlat, contentSize, contentHTML, anchor, closeBox, 
                        closeBoxCallback) {

        this.imageSrc = OpenLayers.Util.getImagesLocation() + 'shadow-cloud-popup-relative.png';
        OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments);
        this.contentDiv.className = this.contentDisplayClass;
    },

    /** 
     * APIMethod: destroy
     */
    destroy: function() {
        OpenLayers.Popup.Framed.prototype.destroy.apply(this, arguments);
    },

    CLASS_NAME: "OpenLayers.Popup.ShadowFramedCloud"
});

