/**
 * @Author: RAGBIT GmbH
 * @Developer: Anatolij Rau
 * @Date: 12.12.08
 * @Version: 2.1
 **/

function easyPopup() {
	this.min_width 						= 250;
	this.max_width 						= 0;
	this.prev_button 					= '&lt;&lt;';
	this.next_button 					= '&gt;&gt;';
	this.please_wait 					= 'Bitte warten'
	this.close_btn 						= 'Close';
	
	/** Disable body **/
	this.cover_body 			= true;
	this.cover_bgcolor 	= '#575757';
	this.cover_transparenz= 20; // % 
	
	this.posDiff = 200;	// Move differece
	
	/** Position settings **/
	this.use_mouse_position 	= false; // get mouse position
	/** OR **/
	this.position_top = 80; // position from top
	this.position_top_unit = 'px'; // Unit (px | % | em)
	this.evalScriptTags = true;

	/** Non configurable vars **/
	this.dragEnabled = false;
	this.element;
	this.start_x = -1;
	this.start_y = -1;
	this.new_x;
	this.new_y;
	this.debug = false;
	this.mouse_pos_x;
	this.mouse_pos_y;
	this.last_zIndex = 1000;
	this.is_ie = ((navigator.appName == "Microsoft Internet Explorer" || window.ActiveXObject)? true: false );

	var self = this;
	/**
	 * Methode message
	 **/
	easyPopup.prototype.message  = function(message, title, css_class) {		
		
		if (!document.body) {
			window.setTimeout(function(){this.message(message, title, css_class);}, 100);
			return false;
		}

		
		var bf_element = this.create_bf_element();

		var easy_message = document.createElement("div");
		easy_message.id = 'easy_message';
		easy_message.style.position = 'absolute';
		easy_message.style.top = '50px';
		easy_message.style.left = '-999999px';
		easy_message.style.top = '20px';
		easy_message.style.left = '0px';
		easy_message.style.display = 'block';
		easy_message.style.backgroundColor = '#FFF';
		easy_message.style.zIndex = self.last_zIndex+1;
		if (css_class) easy_message.className = css_class;
		document.body.appendChild(easy_message);
	
		// Close button erzeugen
		var easy_message_close = document.createElement("div");
		easy_message_close.id = 'easy_message_close';
		easy_message_close.style.position = 'absolute';
		easy_message_close.style.right ='0px';
		easy_message_close.style.cursor = 'pointer';
		easy_message_close.onclick = (function (easy_message, object, bf_element) {
		return function() {
		object.close(easy_message, bf_element);
		};
		})(easy_message, this, bf_element);
		
		easy_message.appendChild(easy_message_close);
		easy_message_close.innerHTML = this.close_btn;
	
		// Titel erzeugen
		var easy_message_title = document.createElement("div");
		easy_message_title.id = 'easy_message_title';
	
		easy_message_title.onmousedown = (function (easy_message, object) {
		return function() {
		object.startStopDrag(easy_message, object);
		};
		})(easy_message, this);
		
		easy_message_title.onmouseup = (function (easy_message, object) {
		return function() {
		object.startStopDrag(easy_message, object);
		};
		})(easy_message, this);
	
		easy_message.appendChild(easy_message_title);
		easy_message_title.innerHTML = title;
	
		// Content erzeugen
		var easy_message_content = document.createElement("div");
		easy_message_content.id = 'easy_message_content';
		easy_message.appendChild(easy_message_content);
		
		var block_body_outer = document.createElement("div");
		block_body_outer.className = 'block_body_outer';
		easy_message_content.appendChild(block_body_outer);

		var easy_message_body = document.createElement("div");
		easy_message_body.className = 'block_body';
		easy_message_body.id = 'easy_message_body';
		block_body_outer.appendChild(easy_message_body);
		easy_message_body.innerHTML = message;

		var easy_message_bottom = document.createElement("div");
		easy_message_bottom.className = 'block_bottom';
		easy_message_bottom.id = 'easy_message_bottom';
		block_body_outer.appendChild(easy_message_bottom);
		easy_message_body.innerHTML = message;

		// Button
		var button = document.createElement("input");
		button.type = 'button';
		button.value = 'Ok';
		button.onclick = (function (easy_message, object, bf_element) {
		return function() {
		object.close(easy_message, bf_element);
		};
		})(easy_message, this, bf_element);
		easy_message_bottom.appendChild(button);
		
		easy_message.style.display = 'block';		
		
		if (this.use_mouse_position) {
			if (is_ie) var pos_diff = this.getScrollPos(); else pos_diff = 0;
			
			/** top **/
			if (pos_diff+mouse_pos_y-easy_message.offsetHeight > 0)
				easy_message.style.top = pos_diff+mouse_pos_y+'px';
			else 
				easy_message.style.top = '0px';
			
			/** Left **/
			if (mouse_pos_x+(easy_message.offsetWidth/2) > document.body.offsetWidth)
				easy_message.style.left = (Math.round((document.body.offsetWidth-easy_message.offsetWidth)))+'px';
			else 
				easy_message.style.left = (Math.round(mouse_pos_x-(easy_message.offsetWidth/2)))+'px';
		}
		else {
			easy_message.style.top = ( this.getScrollPos()+this.position_top )+this.position_top_unit;
			easy_message.style.left = (Math.round((document.body.offsetWidth-easy_message.offsetWidth)/2))+'px';
		}
		
		this.set_bf_element(bf_element);
		this.last_zIndex++;
	}
	
	/**
	 * Methode popup
	 **/
	easyPopup.prototype.popup = function( url, title, class_name, cur_id, id_prefix ) {
		if (!document.body) {
			window.setTimeout(function(){this.popup( url, title, class_name, cur_id, id_prefix );}, 100);
			return false;
		}
		var bf_element = this.create_bf_element();
		
		if (cur_id) {
			if (document.getElementById( id_prefix+(cur_id-1))) var prev_url = document.getElementById(id_prefix+(cur_id-1)).name;
			if (document.getElementById( id_prefix+(cur_id+1))) var next_url = document.getElementById(id_prefix+(cur_id+1)).name;
			//alert(next_url);
		}
			
		// easy_popup erzeugen
		var easy_popup = document.createElement("div");
		easy_popup.id = 'easy_popup';
		easy_popup.style.top = '50px';
		easy_popup.style.left = '-999999px';
		easy_popup.style.display = 'block';
		easy_popup.style.backgroundColor = '#FFF';
		easy_popup.style.position = 'absolute';
		easy_popup.style.zIndex = this.last_zIndex;
		if (class_name) easy_popup.className = class_name;
		document.body.appendChild(easy_popup);
		//easy_popup.style.width = res[0]+24+'px';
		//alert(easy_popup.style.width);
		//easy_popup.style.width = 600


		// Close button erzeugen
		var easy_popup_close = document.createElement("div");
		easy_popup_close.id = 'easy_popup_close';
		easy_popup_close.style.position = 'absolute'; 
		easy_popup_close.style.right= '0px'; 
		easy_popup_close.style.cursor = 'pointer';
		easy_popup_close.onclick = (function (easy_popup, object, bf_element) {
		return function() {
		object.close(easy_popup, bf_element);
		};
		})(easy_popup, this, bf_element);
		easy_popup.appendChild(easy_popup_close);
		easy_popup_close.innerHTML = this.close_btn;

		// Titel erzeugen
		var easy_popup_title = document.createElement("div");
		easy_popup_title.id = 'easy_popup_title';
	
		easy_popup_title.onmousedown = (function (easy_popup, object) {
		return function() {
		object.startStopDrag(easy_popup, object);
		};
		})(easy_popup, this);
		
		easy_popup_title.onmouseup = (function (easy_popup, object) {
		return function() {
			object.startStopDrag(easy_popup, object);
		};
		})(easy_popup, this);
	
		easy_popup.appendChild(easy_popup_title);
		easy_popup_title.innerHTML = title;
		
	
		// Content erzeugen
		var easy_popup_content = document.createElement("div");
		easy_popup_content.id = 'easy_popup_content';
		easy_popup.appendChild(easy_popup_content);
		
		var block_body_outer = document.createElement("div");
		block_body_outer.className = 'block_body_outer';
		easy_popup_content.appendChild(block_body_outer);

		var easy_popup_body = document.createElement("div");
		easy_popup_body.className = 'block_body';
		easy_popup_body.id = 'easy_popup_body';
		block_body_outer.appendChild(easy_popup_body);
		easy_popup_body.innerHTML = this.please_wait;

		var easy_popup_bottom = document.createElement("div");
		easy_popup_bottom.className = 'block_bottom';
		easy_popup_bottom.id = 'easy_popup_bottom';
		block_body_outer.appendChild(easy_popup_bottom);
		var data = '';
		if (prev_url) data += '	<a href="javascript:displayeasy_popup(\''+prev_url+'\', \''+title+'\', '+(cur_id-1)+', \''+id_prefix+'\');">'+prev_button+'</a>\n';
		if (next_url) data += '	<a href="javascript:displayeasy_popup(\''+next_url+'\', \''+title+'\', '+(cur_id+1)+', \''+id_prefix+'\');">'+next_button+'</a>\n';
		easy_popup_bottom.innerHTML = data;
		
		this.getUrl(url, easy_popup_body, easy_popup, bf_element);
	
		easy_popup.style.display = 'block';		

		if (this.use_mouse_position) {
			/** top **/
			if (this.is_ie) var pos_diff = this.getScrollPos(); else pos_diff = 0;
			
			if (pos_diff+this.mouse_pos_y-easy_popup.offsetHeight > 0)
				easy_popup.style.top = pos_diff+this.mouse_pos_y+'px';
			else 
				easy_popup.style.top = '0px';
		}
		else {
			easy_popup.style.top = ( this.getScrollPos()+this.position_top )+this.position_top_unit;
		}
		this.last_zIndex++;
	}

	/**
	 * Methode: startStopDrag
	 **/
	 easyPopup.prototype.startStopDrag = function(win, object) {	
		if (!object) object = this;
		if (object.dragEnabled) {
			object.dragEnabled = false;
			object.start_x = -1;
			object.start_y = -1;
		} else {
			if (win.style.position != 'absolute') win.style.position = 'absolute';
			if (!win.style.left) win.style.left = (object.mouse_pos_x - (win.offsetWidth/2)) + 'px';
			if (!win.style.top) win.style.top = (object.mouse_pos_y - (win.offsetHeight/2)) + 'px';
			object.last_zIndex++;
			win.style.zIndex = object.last_zIndex;
			object.element = win;
			object.dragEnabled = true;
		}
	}
	
	/**
	 * Methode: create_bf_element
	 **/
	easyPopup.prototype.create_bf_element = function() {
		if (this.cover_body) {
			var bf_element = document.createElement("div");
			bf_element.id = 'bf_element';
			bf_element.style.top = '0px';
			bf_element.style.left = '0px';
			bf_element.style.position = 'absolute';
			bf_element.style.width = 100+'%';
			bf_element.style.backgroundColor = this.cover_bgcolor;
			bf_element.style.opacity = this.cover_transparenz/100;
			bf_element.style.filter =  'Alpha(opacity='+this.cover_transparenz+')'
			this.set_bf_element(bf_element);
			document.body.appendChild(bf_element);
			return bf_element;
		}
		else return false;
	}

/**
	 * Methode: set_bf_element
	 **/
	easyPopup.prototype.set_bf_element = function(bf_element) {
		if (bf_element) {
			var size = this.getWinSize();
			bf_element.style.width = 100+'%';
			bf_element.style.height = 100+'%';
			
			if (bf_element.offsetHeight != 0) {
				if (bf_element.offsetHeight < size.h) bf_element.style.height = size.h+'px';
			}
			else window.setTimeout(function(){self.set_bf_element(bf_element);}, 10);
			bf_element.style.zIndex = this.last_zIndex-1;
		} 
	}


	/**
	 * Methode: getScrollPos
	 **/
	easyPopup.prototype.getScrollPos = function() {
		if ( document.documentElement && document.documentElement.scrollTop) posy = document.documentElement.scrollTop;
		else if (document.body.scrollTop) posy = document.body.scrollTop;
		else posy = document.body.scrollTop;
		return posy;
	}
	
	/**
	 * Methode: close
	 **/
	easyPopup.prototype.close = function(easy_popup, bf_element) {
		if (typeof easy_popup != 'object') easy_popup = document.getElementById('easy_popup');
		if (typeof easy_popup == 'object') document.body.removeChild(easy_popup);
		if (!bf_element) bf_element = document.getElementById('bf_element')
		if (bf_element) document.body.removeChild(bf_element); 
	}

	/**
	 * Methode: getWinSize
	 **/
	easyPopup.prototype.getWinSize = function(win) {
		if(!win) win = window;
		var pos = {x:0,y:0};
		pos.w = parseInt(win.document.body.scrollWidth);
		pos.h = parseInt(win.document.body.scrollHeight);
		return pos;
	}
	
	/**
	 * Methode: getXY
	 **/
	easyPopup.prototype.getXY = function(e) {
		self.mouse_pos_x = (window.Event) ? e.pageX : event.clientX;
		self.mouse_pos_y = (window.Event) ? e.pageY : event.clientY;
		//alert(self.dragEnabled);
		if (self.dragEnabled) {
			
			if (self.element){
				if (self.is_ie) var pos_diff = self.getScrollPos(); else pos_diff = 0;
				var left = parseInt(self.element.style.left);
				var top = parseInt(self.element.style.top);
			}
			//alert(self.mouse_pos_x+' > '+(left-self.posDiff)+' && '+self.mouse_pos_x+' < '+(left+self.element.offsetWidth+self.posDiff)+' && '+(self.mouse_pos_y+pos_diff)+' > '+(top-self.posDiff)+' && '+self.mouse_pos_y+' < '+(top+self.element.offsetHeight+self.posDiff));
			if (self.mouse_pos_x > left-self.posDiff && self.mouse_pos_x < left+self.element.offsetWidth+self.posDiff && (self.mouse_pos_y+pos_diff) > top-self.posDiff && self.mouse_pos_y < top+self.element.offsetHeight+self.posDiff) {
				
				if (self.start_x == -1) { self.start_x = self.mouse_pos_x-left; self.start_y = self.mouse_pos_y-top; }
				new_x = self.mouse_pos_x-self.start_x;	
				new_y = self.mouse_pos_y-self.start_y;
				if (self.element){
					self.element.style.left = (new_x)+'px';
					self.element.style.top = (new_y)+'px';
				}
			}
			else self.startStopDrag(null);
		}
	}

	/**
	 * Methode: getUrl
	 **/
	easyPopup.prototype.getUrl = function(url, container, popup, bf_element){
		var page_request = false
		if (window.XMLHttpRequest) // if Mozilla, Safari etc
		page_request = new XMLHttpRequest()
		else if (window.ActiveXObject){ // if IE
		try {
		page_request = new ActiveXObject("Msxml2.XMLHTTP")
		} 
		catch (e){
		try{
		page_request = new ActiveXObject("Microsoft.XMLHTTP")
		}
		catch (e){}
		}
		}
		else
		return false
		page_request.onreadystatechange=function(){
		self.load(page_request, container, popup)
		}
		page_request.open('GET', url, true)
		page_request.send(null)
		return false;
	}

	/**
	 * Methode: load
	 **/
	easyPopup.prototype.load = function (page_request, container, popup, bf_element){
		var easy_popup = popup;
		if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
		if (page_request.responseText) {
			container.innerHTML=page_request.responseText;
			if (this.evalScriptTags) this.runRequestScripts(container);
	
			
			if (this.min_width > 0 && easy_popup.offsetWidth < this.min_width) easy_popup.style.width = this.min_width+'px';
			if (this.max_width > 0 && easy_popup.offsetWidth > this.max_width) easy_popup.style.width = this.max_width+'px';
			if (this.use_mouse_position) {
				if (this.mouse_pos_x+(easy_popup.offsetWidth/2) > document.body.offsetWidth) {
					easy_popup.style.left = (Math.round((document.body.offsetWidth-easy_popup.offsetWidth)))+'px';
				}
				else {
					easy_popup.style.left = (Math.round(this.mouse_pos_x-(easy_popup.offsetWidth/2)))+'px';
				}
			}
			else easy_popup.style.left = (Math.round((document.body.offsetWidth-easy_popup.offsetWidth)/2))+'px';
			
			//easy_popup.style.last_zIndex+20;
			self.set_bf_element(bf_element);
		}
	}

	/**
	 * Methode: getUrl
	 **/
	easyPopup.prototype.runRequestScripts = function(container) {
		var end = container.childNodes.length;
		for (var i = 0; i < end; i++ ) {
			if (container.childNodes[i].tagName == 'SCRIPT') {
				eval(container.childNodes[i].innerHTML);
			}
		}
	}

	window.onload = function() {document.onmousemove = self.getXY;}
}
	
var easyPopup = new easyPopup();
