jQuery.fn.window = function(args){
        var borderConst = "border",
        widthConst = "Width",
        heightConst = "Height",
        topConst = "Top",
        rightConst = "Right",
        leftConst = "Left",
        bottomConst = "Bottom"
    ;
        var $helperNode = $('<div id="dynwin_'+args.dir+'" ></div>');
        var $node = this, 
            s = $node[0].style,
            dims = null,
            hs = null, 
            pn = null,
            lightColor = args.lightColor || "#dddddd", 
            darkColor = args.darkColor || "#555555",
            bgColor = s["backgroundColor"], 
            endColor = args.endColor || bgColor,
            staticProps = {}, 
            anims = [],
//            duration = args.duration ? args.duration / 2 : 250,
            duration = args.duration,
            dir = args.dir || "left", 
            pConst = 0.51, 
            transparentColor = "transparent"
            onEnd = args.onEnd || function(){},
            // IE6 workaround: IE6 doesn't support transparent borders
            convertColor = function(color){
                var re = new RegExp("#000000|#000|black|rgb(0,0,0)", "i");
                return re.test(color.replace(/ /, "")) ? "#000001" : color;
            };
        if($.browser.msie && parseInt($.browser.version) < 7){
            endColor = convertColor(endColor);
            lightColor = convertColor(lightColor);
            darkColor = convertColor(darkColor);
            bgColor = convertColor(bgColor);
            transparentColor = "black";
            $helperNode[0].style.filter = "chroma(color='#000000')";
        }
        var init = (function($n){
            return function(){
                var p = $n.position();
//				alert('p.top = '+p.top+', p.left = '+p.left);
                dims = {
//                    top: p.top,
//                    left: p.left,
                    top: 2,
                    left: 0,
                    width: parseInt($n.css("width")),
                    height: parseInt($n.css("height"))
                };
            }
        })($node);
        init();
        hs = {
//            position: "absolute",
//			visibility: "hidden",
			opacity:0.1,
            top: dims["top"] + "px",
            left: dims["left"] + "px",
            height: "0",
            width: "0",
//            zIndex: args.zIndex || (s.zIndex || 0),
            zIndex: 22,
            border: "0 solid " + transparentColor,
            fontSize: "0"
        };
        dims["endHeight"] = dims["height"] * pConst; 
        dims["endWidth"] = dims["width"] * pConst; 
        var props = [ {}, 
            {
                top: dims["top"],
                left: dims["left"]
            }
        ];
        var dynProperties = {
            left: [leftConst, rightConst, topConst, bottomConst, widthConst, heightConst, "end" + heightConst, leftConst],
            right: [rightConst, leftConst, topConst, bottomConst, widthConst, heightConst, "end" + heightConst, leftConst]
        }
        // property names
        pn = dynProperties[dir];

        staticProps[pn[5].toLowerCase()] = dims[pn[5].toLowerCase()] + "px";
        staticProps[pn[4].toLowerCase()] = "0";
        staticProps[borderConst + pn[1] + widthConst] = dims[pn[4].toLowerCase()] + "px";
        staticProps[borderConst + pn[1] + "Color"] = bgColor;

        var p = props[0];
        p[borderConst + pn[1] + widthConst] = 30 + "px"; 
        p[borderConst + pn[1] + "Color"] = "#404D5E"; 
        p[borderConst + pn[2] + widthConst] = 12 + "px";
        p[borderConst + pn[3] + widthConst] = 7 + "px";
        p[pn[2].toLowerCase()] = dims[pn[2].toLowerCase()] + "px";
        p[pn[7].toLowerCase()] = dims[pn[7].toLowerCase()] + "px";
        p[pn[5].toLowerCase()] = 300 + "px";

        $.extend(hs, staticProps);
        $helperNode.css(hs);
        $("#win_inner").append($helperNode);

//        $helperNode.animate(p, {duration: 4000, queue: "global", scope: "doOpen"});
        return p;
};
 
