function getPageSize(){
  var xScroll, yScroll;
  if (window.innerHeight && window.scrollMaxY) { 
    xScroll = document.body.scrollWidth;
    yScroll = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
    xScroll = document.body.scrollWidth;
    yScroll = document.body.scrollHeight;
  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    xScroll = document.body.offsetWidth;
    yScroll = document.body.offsetHeight;
  }
  var windowWidth, windowHeight;
  if (self.innerHeight) { // all except Explorer
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  } else if (document.body) { // other Explorers
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  } 
  // for small pages with total height less then height of the viewport
  if(yScroll < windowHeight){
    pageHeight = windowHeight;
  } else { 
    pageHeight = yScroll;
  }
  
  // for small pages with total width less then width of the viewport
  if(xScroll < windowWidth){ 
    pageWidth = windowWidth;
  } else {
    pageWidth = xScroll;
  }
  
  arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
  return arrayPageSize;
}

var MoodalBox = new Class({
	Implements: [Options],

	options: {
		// Прозрачность оверлея после показа всплывающего окна
		destinationOverlayOpacity: 0.7,
		
		// Возможность спрятать окно кликом по оверлею
		allowManualClose: true
	},

	// @param element — идентификатор элемента окна.
	// @param overlay — идентификатор элемента оверлея.
	initialize: function(element, overlay, options)
	{
		this.setOptions(options);

		this.element = $(element);
		this.overlay = $(overlay);

		if(this.options.allowManualClose)
			this.overlay.addEvent("click", this.hide.bind(this));

		this.targetCoords = this.element.getCoordinates();

		// Эффекты для показывания/скрытия окна и оверлея
		this.fx = {
			overlayAnimation: new Fx.Tween(this.overlay, { property: "opacity" }),
			elementAnimation: new Fx.Tween(this.element, { property: "opacity" })
		}
	},

	// покажет всплывающее окно
	show: function()
	{
		this.setPosition();
		
		// Запускаем анимацию
		this.fx.overlayAnimation.start(0, this.options.destinationOverlayOpacity);
		this.fx.elementAnimation.start(0, 1);
	},

	// скроет всплывающее окно
	hide: function()
	{
		// Запускаем анимацию
		this.fx.overlayAnimation.start(this.options.destinationOverlayOpacity, 0);
		this.fx.elementAnimation.start(1, 0);
	},

	// корректируем позицию всплывающего окна и размеры оверлея
	setPosition: function()
	{
		this.element.setStyles({
			"marginLeft": -(this.targetCoords.width / 2),
			"marginTop": /*window.getScrollTop()*/-(this.targetCoords.height / 2)
		});

    var a = getPageSize();
    this.overlay.setStyles({
      "top": 0,//window.getScrollTop(),
      "height": a[1]
    });
	}
});

window.basket={}; // js-зеркало корзины // format: {id:{'quantity':quantity}, ... }
function addToBasket(param){
  // reset
  $('popup_status_edit').style.display='none';
  $('popup_name').innerHTML='';
  $('popup_price').innerHTML='';
  $('popup_id').innerHTML='';
  $('popup_form').id.value='';
  $('popup_form').quantity.value=1;
  $('popup_submit_add').style.display='';
  $('popup_submit_edit').style.display='none';
  // set
  var fEdit = $chk(param['id']) && $chk(window.basket[ param['id'] ]); // true - редактирование
  if(fEdit){
    $('popup_status_edit').style.display='';
  }
  if($chk(param['name'])){
    $('popup_name').innerHTML=param['name'];
  }
  if($chk(param['price'])){
    $('popup_price').innerHTML=param['price'];
  }
  if($chk(param['id'])){
    $('popup_id').innerHTML=param['id'];
    $('popup_form').id.value=param['id'];
  }
  if(fEdit){
    $('popup_form').quantity.value=window.basket[ param['id'] ]['quantity'];
  }
  if(fEdit){
    $('popup_submit_add').style.display='none';
    $('popup_submit_edit').style.display='';
  }
  // show
  var popupFx = null;
  $('popup_form').__MoodalBox=popupFx=$chk($('popup_form').__MoodalBox)?$('popup_form').__MoodalBox:new MoodalBox("Popup", "Overlay");
  popupFx.show();
}


window.addEvent('domready',function(){
  var popup_form_dom=$('popup_form');
	if($chk(popup_form_dom)){
    popup_form_dom.addEvent('submit',function(e){
      e.stop();

      new Request.JSON({
        url:popup_form_dom.action,
        onComplete:function(pJSON){
					if($chk(pJSON) && $chk(pJSON['success']) && pJSON['success']){
            if($chk(pJSON['result'])){ // товар добавлен успешно
              if($chk(pJSON['informer']) && $chk($('basket_informer'))){ // обновление информера
                $('basket_informer').innerHTML=pJSON['informer'];
              }
              if($chk(pJSON['basket'])){ // обновление js-зеркала корзины
                window.basket=pJSON['basket'];
              }
            }
	  			}
				}
      }).post({
        'request_type':'json',
        'id':popup_form_dom.id.value,
        'quantity':popup_form_dom.quantity.value
      });
      popup_form_dom.__MoodalBox.hide();

      return true;
    });
  }
});
