
var NewPopup = function(){
	this.initialize.apply(this, arguments);
};

NewPopup.prototype = {
	options: {},
	tap: null,
	visible: false,
	
	initialize: function(popup) {
		var popup = this.byID(popup);
		var options = this.extend({
			target: null,
			width:	370,
			height: 150,
			popup: popup
		}, arguments[1] || {});
		
		if (options.target && typeof(options.target) != 'object')
			options.target = $(options.target);
		else if (options.target && typeof(options.target) == 'object')
		{
			var tmpArr = [];
			for(var i=0; i < options.target.length; i++)
				tmpArr.push($(options.target[i]));
			
			options.target = tmpArr;

		}
		
		this.options = options;
		this.preloadImages('tap.gif', 'box.gif', 's.gif', 'e.gif', 'n.gif', 'w.gif', 'close.gif');
		this.setup();

	},
	
	positioningPopup: function(off) {
		var scrOffset = this.scrollOffset();
		var popup = this.options.popup;
		
		var PDims	= [this.options.width + 40, this.options.height + 130];
		
		if (this.options.target && typeof(this.options.target) != 'object')
		{
			var targetOffset = this.cumulativeOffset(this.options.target);
		}
		else
		{
			var targetOffset = off;
		}
		
		if (targetOffset[1] <= (this.options.height + 130)) 
		{
			this.hide(this.tap);
			off[1] = off[1] + 60;
			off[0] = off[0] - this.options.width / 2;
		}
		else
			this.show(this.tap);	

		if (targetOffset[1] <= 0 || targetOffset[1] <= (this.options.height + 130))
			off[1] = off[1]+this.options.height+85;

		popup.style.left = off[0] + scrOffset[0] - 100 + 'px';
		popup.style.top = off[1] + scrOffset[1] - PDims[1] + 'px';
	},
	
	raisePopup: function(Offsets)
	{
		this.positioningPopup(Offsets);
		this.selecters('hidden');
		this.show(this.options.popup);
	},
	
	setup: function() {
		var options	= this.options;
		var popup	= this.options.popup;
		var content = popup.innerHTML;

		if (this.options.target)
		{
			
			if (typeof(this.options.target) != 'object')
			{
				var target	= this.byID(this.options.target);
				
				target.callerObj = this;
				target.onclick = function(event) {
					if (this.callerObj && this.callerObj.visible) {
						this.callerObj.hide(this.callerObj.options.popup);
						this.callerObj.hide(this.callerObj.tap);
						return false;
					}
					
					var event = event || window.event;
					var Offsets	= [event.clientX, event.clientY];
					this.callerObj.selecters('hidden');
					this.callerObj.show(this.callerObj.options.popup);
					this.callerObj.positioningPopup(Offsets);
					return false;
				};
			}
			else
			{

				for(var i=0; i < this.options.target.length; i++)
				{
					var target	= this.byID(this.options.target[i]);
					
					if (target) {
						target.callerObj = this;
						target.onclick = function(event) {
							var event = event || window.event;
							var Offsets	= [event.clientX, event.clientY];
	
							if (this.callerObj && this.callerObj.visible) {
								this.callerObj.hide(this.callerObj.options.popup);
								this.callerObj.hide(this.callerObj.tap);
								return false;
							}
							
							this.callerObj.selecters('hidden');
							this.callerObj.show(this.callerObj.options.popup);
							this.callerObj.positioningPopup(Offsets);
							return false;
						};
					}
				} // enf for cycle
			}
		}
		
		//alert(target.offsetTop);
//		target.style.border 	= '1px solid red';
		popup.innerHTML 		= '';
		popup.style.position	= 'absolute';
		popup.style.visibility	= 'hidden';
		popup.style.width 		= options.width + 50 + 'px';
		popup.style.height 		= options.height + 120 + 'px';
		popup.style.textAlign 	= 'left';
		popup.style.left 		= 0 + 'px';
		popup.style.top			= 0 + 'px'; //TOffset[1] - PDims.height + 'px';
		popup.style.zIndex 		= 10;
		
		var div1 = this.div("pop_popup pop_header");
		var div2 = this.div("pop_sizex", 1);
		var img  = new Image();
			img.src = "/images/popup/close.gif";
			img.alt = "Close Popup";
			img.title = "Close Popup";
			img.border = 0;
			img.callerObj = this;
			img.onclick = function() {
				this.callerObj.hide(this.callerObj.options.popup);
				this.callerObj.hide(this.callerObj.tap);
				this.callerObj.selecters('visible');
			};
			
		div2.appendChild(img);
		div1.appendChild(div2);
		
		var div3 = this.div("pop_popup pop_content");
		var div4 = this.div("pop_sizex pop_sizey", 1, 1);
			div4.innerHTML = content;
		div3.appendChild(div4);
		
		var div5 = this.div("pop_popup");
		var div7 = this.div("pop_nw pop_left");
		var div8 = this.div("pop_n pop_left pop_sizex", 1);
		var div9 = this.div("pop_ne pop_left");
		var div10 = this.div("pop_clear");
		var div11 = this.div("pop_w pop_left pop_sizey", 0, 1);
		var div12 = this.div("pop_left pop_sizey pop_sizex", 1, 1);
		var div13 = this.div("pop_e pop_left pop_sizey", 0, 1);
		var div14 = this.div("pop_clear");
		var div15 = this.div("pop_sw pop_left");
		var div16 = this.div("pop_s pop_left pop_sizex", 1);
		var div17 = this.div("pop_se pop_left");
		var div18 = this.div("pop_clear");
		var div19 = this.div("pop_tap");
		this.tap  = div19;
		
		div5.appendChild(div7);
		div5.appendChild(div8);
		div5.appendChild(div9);
		div5.appendChild(div10);
		div5.appendChild(div11);
		div5.appendChild(div12);
		div5.appendChild(div13);
		div5.appendChild(div14);
		div5.appendChild(div15);
		div5.appendChild(div16);
		div5.appendChild(div17);
		div5.appendChild(div18);
		div5.appendChild(div19);
		
		popup.appendChild(div1);
		popup.appendChild(div3);
		popup.appendChild(div5);
		
		this.hide(popup);
	},
	
	div: function(className, setSizeX, setSizeY) {
		var div = document.createElement("DIV");
		if (className) div.className = className;

		if (setSizeX)	div.style.width = this.options.width + 'px';
		if (setSizeY)	div.style.height = this.options.height + 'px';
		
		return div;
	},
	
	hide: function(element) {
		var element = this.byID(element);

		callerObj = this;
		
		if (this.options.popup == element) {
			
			if (typeof(this.options.beforeClose) == 'function') {
				this.options.beforeClose(this);
			}
			
			Element.setOpacity(element, 1);

			new Effect.Opacity(element, {
				duration: 0.7, 
				from: 1, 
				to: 0,
				afterFinish: function(){
					try {
						element.style.visibility = 'hidden';
					} catch (err) {}
					callerObj.visible = false;
				}
			});
			
			return false;
		}

		try {
/*			element.style.display = 'none'; */
			element.style.visibility = 'hidden';
		} catch (err) {}
		
		this.visible = false;
	},
	
	show: function(element) {
		var element = this.byID(element);
		callerObj = this;
		
		if (this.options.popup == element) {
		// popup open
			if (typeof(this.options.beforeOpen) == 'function') {
				this.options.beforeOpen();
			}
			
			Element.setOpacity(element, 0);
			try {
				switch (element.tagName) 
				{
					case "DIV" : element.style.display = 'block'; break;
					default: element.style.display = '';
				}
				element.style.visibility = 'visible';
			} catch (err) {}

			
		    if(/MSIE/.test(navigator.userAgent) && 0) 
		    {
				new Effect.ScrollTo(document.body, {duration: 0.2,
					afterFinish: function() {
						Element.setOpacity(element, 1);
						callerObj.visible = true;
					}
				});
		    	
		    }
		    else
		    {
				new Effect.Parallel([
					new Effect.ScrollTo(document.body, {sync: true, duration: 0.2,
						afterFinish: function() {
						}
					}) ,
					new Effect.Opacity(element, {
						duration: 0.7, 
						sync: true,
						from: 0, 
						to: 1,
						afterFinish: function(){
							callerObj.visible = true;
						}
					})
					/* */
				]);
		    }
			
			return false;
		}
		
		try {
			switch (element.tagName) 
			{
				case "DIV" : element.style.display = 'block'; break;
				default: element.style.display = '';
			}
			element.style.visibility = 'visible';
		} catch (err) {}

		this.visible = true;
	},
	
	selecters: function(command)
	{
			var frm = document.getElementsByTagName("FORM");
			if (!frm) return false;
			
			var selecters = frm[0].getElementsByTagName("select");
			for(var i=0; i < selecters.length; i++) {
				if ((typeof (selecters[i]) == "object"))
				{
					try {
						selecters[i].style.visibility = command;
					} catch (err) {}
				}
			}
	},
		
	findElement: function(element, tagName) {
		var element = this.byID(element);
		while (element.parentNode && (!element.tagName ||
	    	(element.tagName.toUpperCase() != tagName.toUpperCase())))
	    element = element.parentNode;
		return element;
	},
	
	extend: function(destination, source) {
		for (var property in source) destination[property] = source[property];
		return destination;
	},
	
	byID: function(el) {
		if (typeof el == 'string') el = document.getElementById(el);
		return el;
	},
	
	cumulativeOffset: function(element) {
		var valueT = 0, valueL = 0;
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return [valueL, valueT];
	},
	
	getDimensions: function(element) {
		element = this.byID(element);

		if (element.style.display != 'none')
			return {width: element.offsetWidth, height: element.offsetHeight};

		// All *Width and *Height properties give 0 on elements with display none,
		// so enable the element temporarily
		var els = element.style;
		var originalVisibility = els.visibility;
		var originalPosition = els.position;
			els.visibility = 'hidden';
			els.position = 'absolute';
			els.display = '';
		var originalWidth = element.clientWidth;
		var originalHeight = element.clientHeight;
			els.display = 'none';
			els.position = originalPosition;
			els.visibility = originalVisibility;
		return {width: originalWidth, height: originalHeight};
	},
	
	scrollOffset: function() {
		var deltaX =  window.pageXOffset
				|| document.documentElement.scrollLeft
				|| document.body.scrollLeft
				|| 0;
		var deltaY =  window.pageYOffset
				|| document.documentElement.scrollTop
				|| document.body.scrollTop
				|| 0;
		return [deltaX, deltaY];
	},
	
	preloadImages: function() { 

		var d = document; 
		if(d.images) { 
	  		if(!d.MM_p) d.MM_p = [];
		    var i,j = d.MM_p.length,a = arguments; 
		    for(i=0; i < a.length; i++)
			    if (a[i].indexOf("#") != 0) { 
			    	d.MM_p[j] = new Image; 
			    	d.MM_p[j++].src = '/images/popup/' + a[i];
			    }
		}
	}


};
