/**
options {
onOk : '',
onCancel : '',
drag:false,
show:false,
onCenter:false}
*/

var cWindow = Class.create({
    initialize:function(){
	this.type = arguments[0];
    this.windowElement = false;
    this.draggable = false;
    var id=0;
    var optionIndex = 1;
    // For backward compatibility like win= new Window("id", {...}) instead of win = new Window({id: "id", ...})
    if (arguments.length > 1) {
      if (typeof arguments[1] == "string" ) {
        id = arguments[1];
        optionIndex = 2;
      }
      else
        id = arguments[1] ? arguments[1].id : null;
	}

    var options = Object.extend({
            onOk:'',
            onCancel:'',
			btnName:'OK',
            drag:true,
            show:false,
            onCenter:true
    }, arguments[optionIndex] || {});


     this.params = arguments[optionIndex+1] || {};
     this.options = options;
     this.create(id);

     if (this.options.show) {
        this.show();
     }
    },

    setContent:function(content) {
    	if (this.windowElement) {
            $('content'+this.windowElement.id).update(content);
        }
        if (this.options.onCenter) {
            this.onCenter();
        }
    },
    setPosition:function(left, top) {
        if (this.windowElement) {
            this.windowElement.setStyle({'left': left ? left : 0, 'top': top ? top : 0});
        }
    },
    setTitle:function(title) {
        if (this.windowElement) {
            $('title'+this.windowElement.id).update(title);
        }
    },

    setAjaxContent:function(url, options, onComplete, cache) {
        options = options || {};
        cache = cache ? false : true;
        onComplete = onComplete || false;
         //this.onComplete = null;
        if (typeof onComplete == 'function'){
            this.onComplete = onComplete; // Заносим ф.ю. обработчик ревльтата в переменную
        }

        // Системный обработчик
        if (! this._onCompleteHandler)
            this._onCompleteHandler = this._setAjaxContent.bind(this);

        JsHttpRequest.query(url, options, this._onCompleteHandler, cache);


    },

    _setAjaxContent:function(result, errors) {
        this.setContent(result['content']);
		this.setTitle(result['title']);

        if (this.onComplete)
              this.onComplete(result, errors);
        this.onComplete = null;
    },

    onCenter:function() {
		Position.Center(this.windowElement.id);
    },

    close:function() {
    	this.destroy();
    },

    show:function() {
         if (this.windowElement) {
			// fix problem setPosition
            var _sh = function(){this.windowElement.style.display=''; this.hideShowCovered(); }.bind(this);
            _sh.delay(0.02);
            delete(_sh);

         }
    },

    hide:function() {
         this.windowElement.hide();
    },

    create:function(id) {
        if (!id) {
            id = "win_" + new Date().getTime();
        }
        this.windowElement = new Element('div');

		this.windowElement.setStyle("display:none;z-index:1000;position:absolute;top:0");
        this.windowElement.id = id;
        delete(id);

        this.windowElement.innerHTML = windowContent.createAlert(this.windowElement.id, this.options.btnName, this.type);

        document.body.appendChild(this.windowElement);

        if (this.options.drag) {
            var listener = this.hideShowCovered.bind(this);
            this.draggable = new Draggable(this.windowElement.id, {revert:false, handle:'dragable'+this.windowElement.id, 'onDrag':listener});
        }

        //events

        if (typeof this.options.onOk == 'function')
        {
            this.eventOk = this.options.onOk.bindAsEventListener(this);
            $('onOk' + this.windowElement.id).observe('click', this.eventOk);
        }
        else
        {
            this.onClose = this._onClose.bindAsEventListener(this);
            $('onOk' + this.windowElement.id).observe('click', this.onClose);
        }

        if ($('onCancel' + this.windowElement.id))
        {
            if (typeof this.options.onCancel == 'function')
            {
                this.eventCancel = this.options.onCancel.bindAsEventListener(this);
                $('onCancel' + this.windowElement.id).observe('click', this.eventCancel);
            }
            else
            {
                this.eventCancel = this.onClose || this._onClose.bindAsEventListener(this);
                $('onCancel' + this.windowElement.id).observe('click', this.eventCancel);
            }
        }
        cWindows.add(this);
    },

    destroy:function() {
        this.hide();
        this.hideShowCovered(true);
        cWindows.del(this);
        if (this.options.drag) this.draggable.destroy();
        document.body.removeChild(this.windowElement);
    },

    _onClose:function() {
        this.destroy();
    },

    hideShowCovered:function (_s) {

     if (Prototype.Browser.IE)
     {
        var tags = new Array("applet", "select");
        var p = this.windowElement.cumulativeOffset();

        var EX1 = p.left;
        var EX2 = this.windowElement.getWidth() + EX1;
        var EY1 = p.top;
        var EY2 = this.windowElement.getHeight() + EY1;

            for (var k = tags.length; k > 0; )
            {
                var ar = document.getElementsByTagName(tags[--k]);
                var cc = null;
                for (var i = ar.length; i > 0;)
                {
                    cc = ar[--i];
                    cc = $(cc);
                	if (cc.id != 'nohidden')
					{
                        p = cc.cumulativeOffset();
                        var CX1 = p.left;
                        var CX2 = cc.getWidth() + CX1;
                        var CY1 = p.top;
                        var CY2 = cc.getHeight() + CY1;

                        if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
                            cc.style.visibility = "visible";
                        } else {
                            cc.style.visibility = _s ? "visible" : "hidden";
                        }
                  }
              }
          }
      }
    }

});

var windowContent =
{
	createAlert:function(id, btnName, type)
	{
		var conf = '';
		if (type && type == 'confirm')
		{
            conf = '<td width="10"><td><td align="center" valign="bottom"><table cellspacing="0" cellpadding="0" border="0"><tr> <td><img alt="" src="'+layout_url+'/img/btns/btn_portal_red_l.jpg"/></td> <td width="80" class="btn_portal_bg_red" style="cursor:pointer" id="onCancel'+id+'" align="center"><a class="btn_txt" href="javascript:void(0);" onclick="return false;">Отмена</a></td> <td><img alt="" src="'+layout_url+'/img/btns/btn_portal_red_r.jpg"/></td></table></td>';
		}
		return '<table cellpadding="0" cellspacing="0" width="275"><tr><td><table id="dragable'+id+'" cellpadding="0" cellspacing="0" width="100%"><tr> <td width="1%"> <img src="'+layout_url+'/img/info/title_lft.jpg" alt=""></td> <td width="98%" class="info_title txt_title_info" nowrap> <span id="title'+id+'">Название</span></td> <td width="1%"> <img src="'+layout_url+'/img/info/title_rght.jpg" alt=""></td></tr></table></td></tr><tr> <td class="bg_info" valign="top" align="center"><table width="100%" border="0" cellpadding="0" cellspacing="0" class="txt_info2"><tr> <td align="center" valign="middle"> <span id="content'+id+'">контент</span></td></tr><tr> <td height="10"></td></tr><tr><table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin: 10px 0px 10px 0px"><tr> <td align="center" valign="bottom"><table cellspacing="0" cellpadding="0" border="0"><tr> <td> <img alt="" src="'+layout_url+'/img/btns/btn_portal_red_l.jpg"/></td> <td width="80" class="btn_portal_bg_red" align="center" style="cursor:pointer" id="onOk'+id+'"><a class="btn_txt" href="javascript:void(0);" onClick="return false;">'+btnName+'</a></td> <td> <img alt="" src="'+layout_url+'/img/btns/btn_portal_red_r.jpg"/></td> '+conf+'</table></tr></table></tr></table></td></tr></table>';
	}
}
// Регистр окон
var cWindows = {
    wins:{},
    get:function(id) {
        if (this.wins[id]) {
            return this.wins[id];
        }
    },
    add:function(cWindow) {
        this.wins[cWindow.windowElement.id] = cWindow;
    },
    del:function(cWindow) {
        if (typeof cWindow == 'object') {
            delete(this.wins[cWindow.windowElement.id]);
        }
        else {
            delete(this.wins[cWindow]);
        }
    }
}
//alert_msg alert_title