// uitbreiding array object
Array.prototype.find = function (element) 
{
  for (var keys in this) 
  {
    if (this[keys] == element) 
    {
      return keys;
      break;
    }  
  }
  return -1;
};
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

var MaakumScript = {
	getMouseLocation: function(e) {
		if( !e ) { e = window.event; } 
		if( e ) {
			if(isNaN(Event.pointerX(e)) == false)
				return [Event.pointerX(e), Event.pointerY(e)];
		}
		return false;
	},
	getDimensions : function() {
		if(document.all)
		{
			return [document.body.clientWidth,document.body.clientHeight];
		}
		else
		{
			return [window.innerWidth,window.innerHeight];
		}
	},
	getDimensionScroll : function() {
		if(document.all)
		{
			return [document.body.scrollLeft,document.body.scrollTop];
		}
		else
		{
			return [window.scrollMaxX,window.scrollMaxY];
		}
	},
	getScroll : function() {
		/*if(document.all)
		{
			return [document.body.scrollLeft,document.body.scrollTop];
		}
		else
		{
			return [window.scrollMaxX,window.scrollMaxY];
		}*/
		var scrOfX = 0, scrOfY = 0;
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			scrOfY = window.pageYOffset;
			scrOfX = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			scrOfY = document.body.scrollTop;
			scrOfX = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			scrOfY = document.documentElement.scrollTop;
			scrOfX = document.documentElement.scrollLeft;
		}
	  return [ scrOfX, scrOfY ];
	},
	hideElements : function (elt) { 
		$A(document.getElementsByTagName(elt)).findAll( function(s) {
			s.style.visibility = "hidden";
		});
	},
	showElements : function (elt) { 
		$A(document.getElementsByTagName(elt)).findAll( function(s) {
			s.style.visibility = "visible";
		});
	},
	isIE : function() {
		return navigator.appVersion.indexOf('MSIE') > 0;
	},
	ieVersion : function() {
		if(this.isIE())
			return parseFloat(navigator.appVersion.split("MSIE")[1]);	
		return 0;
	}
};

var MaakumPopup = Class.create({
	point : [],
	dims : [],
	popupId : '',
	showOverlay : true,
	initialize : function() { // html element
		
	},
	show : function(e, eltId, width, height) // event e, eltId - id van element (event = false => dan centreren)
	{
		var me = this;
		
		this.popupId = eltId;
		
		var dim = MaakumScript.getDimensions();
		var dimscrol = MaakumScript.getDimensionScroll();
		var scrol = MaakumScript.getScroll();
		var point = false, posX, posY;
		if(e)
		{
			point = MaakumScript.getMouseLocation(e);	
		}
		
		if(point) 
		{
			posX = point[0]; posY = point[1];
		}
		else
		{
			if(arguments.length == 4)
			{
				posX = scrol[0] + (dim[0]-width)/2; 
				posY = scrol[1] + (dim[1]-height)/2;
			}
			else
			{
				posX = scrol[0] + dim[0]/2; 
				posY = scrol[1] + dim[1]/2;
			}
		}
		//alert('x ' + posX + ', y ' + posY + '-s' + scrol[0] + ',' + scrol[1]);

		if(this.showOverlay)
		{
			// maak overlay element aan
			if($('overlay'))
				$('overlay').remove();
			document.body.appendChild(new Element('div', {'id':'overlay'}));
			$('overlay').setStyle({top:'0px', left:'0px', width:(dim[0]+dimscrol[0]) + 'px', height:(dim[1]+dimscrol[1]) + 'px'});
			$('overlay').show();
			
			$('overlay').observe('click', me.clickOverlay.bindAsEventListener(me));
			//$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden' });
		}
		$(this.popupId).setStyle({left:posX + 'px', top:posY + 'px'});
		
		var closeButton = $$('#' + eltId + ' div[class=closebutton]');
		if(closeButton.length)
		{
			closeButton = closeButton[0];
			closeButton.observe('click', me.hide.bindAsEventListener(me));
		}
		
		if(arguments.length == 4) // dimensies opgegeven
		{
			$(this.popupId).setStyle({width:width, height:height});
		}
		new Draggable(this.popupId);
		Effect.Appear(this.popupId);
		//$(this.popupId).show();
	},
	hide : function() {
		//alert('hide!');
		//$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
		$(this.popupId).fire("MaakumPopup:hide");
		if($('overlay'))
			$('overlay').remove();
		Effect.Fade(this.popupId);
		//$(this.popupId).hide();
	},
	clickOverlay : function(e) {
		var el = Event.element(e);

		while(Element.up(el))
		{
			if(el.hasClassName(this.popupId))
			{
				return;
			}
			el = Element.up(el);
		}

		this.hide();
	}
});