/*
popupHandle: id or object
popupUrl: string
option: array {
	title: string ['popup'(default) | string]
	clickValid: boolean [true(default)| false]
	doubleclickValid: boolean [false(default) | true]
	//mode: string ['hiddenDiv' | 'url']
}
-----------------------------------------------------------------------------------*/

var Popup = Class.create({
	initialize : function(popupHandle, option) {
		if (!document.getElementsByTagName){ return null; }
	
		this.oHandle	= (typeof popupHandle == 'string')? $(popupHandle) : popupHandle;
		//this.sUrl		= popupUrl + "&output=popup";
		this.arrOption	= option? option : {};
		
		if(!this.oHandle) { return null}
		
		var clickValid = (typeof this.arrOption.clickValid) != 'undefined'? this.arrOption.clickValid : true;
		var doubleclickValid = (typeof this.arrOption.doubleclickValid) != 'undefined'? this.arrOption.doubleclickValid : false;
		if (clickValid) {
			this.oHandle.onclick = this.fOpen.bind(this);
		}
		if (doubleclickValid) {
			this.oHandle.onclick = dummy;
			this.oHandle.ondblclick = this.fOpen.bind(this);
		}
		
		return true;
					
	},
		
	fOpen : function() {
		this.fEmpty();
		this.fGetOverlay().onclick = this.fClose.bind(this);			
		this.fGetClose().onclick = this.fClose.bind(this);
		
		var title = this.arrOption.title ? this.arrOption.title : ' ';
		this.fGetTitle().innerHTML = title;
				
		return false;
	},
		
		
	fClose : function() {
		Element.hide(this.fGetWindow());
		Element.hide(this.fGetOverlay());
		showSelectBoxes();
		return false;			
	},
	
	fSetOverLaySize : function() {
		//Element.clonePosition(this.fGetOverlay(), $('page_container'), {setWidth:true, setHeight:true});
		var oOverlay = this.fGetOverlay();
		var arrayPageSize = getPageSize();
		oOverlay.style.width = arrayPageSize[0] + 'px';
		oOverlay.style.height =  arrayPageSize[1] + 'px';
	},
	
	fEmpty: function() {
		this.fGetWindowContent().innerHTML = '';
	},
	
	fGetHandle : function() {
		return this.oHandle;
	},
	
	fGetWindow : function() {
		return Popup.oWindow;
	},
	
	fGetWindowContent : function() {
		return Popup.oContent;
	},
	
	fGetOverlay : function() {
		return Popup.oOverlay;
	},
	
	fGetClose : function() {
		return Popup.oClose;
	},
	
	fGetTitle : function() {
		return Popup.oTitle;
	},
	
	fGetHeader : function() {
		return Popup.oHeader;
	},
	
	fSetPosition : function() {
		var arrayPageScroll = getPageScroll();
		var arrayPageSize = getPageSize();
		var firstChild = Element.firstDescendant(this.fGetWindowContent());
		var innerWidth = Element.getStyle(firstChild, 'width');
		innerWidth = innerWidth ? parseInt(innerWidth) : 400;
		var left = (arrayPageSize[2] - innerWidth)/2 + arrayPageScroll[0];
		var top = 30 + arrayPageScroll[1];
		var oWindow = this.fGetWindow();
		oWindow.style.top = top + 'px';
		oWindow.style.left = left + 'px';
	},
	
	fSetSize : function() {
		var oContent = this.fGetWindowContent();
		var oWindow = this.fGetWindow();
		var oFirstChild = Element.firstDescendant(oContent);
		var sWidth = Element.getStyle(oFirstChild, 'width')
		oWindow.style.width = sWidth? sWidth : '300px';
	},
	
	fResizeOverLay : function() {
		//var arrayPageScroll = getPageScroll();
		var oWindow = this.fGetWindow();
		var pageheight = Position.cumulativeOffset(oWindow).top + Element.getDimensions(oWindow).height;
//		this.fSetOverLaySize();
//		var arrayPageSize = getPageSize();
		var overLayHeight = Element.getHeight(this.fGetOverlay());
		if(overLayHeight < pageheight ) {
			this.fGetOverlay().style.height = pageheight + 30 + 'px';
		}
		
		/*var popupTop = 30 + arrayPageScroll[1];
		
		var oWindow = this.fGetWindow();
		var windowHeight = Element.getHeight(oWindow);
		
		if(windowHeight + popupTop > arrayPageSize[1]) {
			this.fGetOverlay().style.height = windowHeight + popupTop + 60 + 'px';
		}*/
	},
	
	fShowContent : function() {
		
		var objOverlay = this.fGetOverlay();
		this.fSetOverLaySize();
		Element.show(objOverlay);
		
		hideSelectBoxes();
		showSelectBoxes(this.fGetWindowContent());
		
		this.fSetPosition();
		
		var oWindow = this.fGetWindow();
		Element.show(oWindow);
		
		this.fSetSize();
		//new Effect.Grow(this.fGetWindow());
		this.fResizeOverLay();
		//this.fSetDimension();
	}
	
});


/*
popupHandle: id or object
popupUrl: string
option: array {
	title: string (default 'popup')
	clickValid: boolean (default true)
	dblclickValid: boolean (default false)
}
-----------------------------------------------------------------------------------*/

var PopupURL = Class.create(Popup, {
	initialize : function($super, popupHandle, popupUrl, option) {
		if(!$super(popupHandle, option)) {return null}
		
		this.sUrl		= popupUrl + "&output=popup";
		if(!this.sUrl) {return null;}
	},
		
	fOpen : function($super) {
		$super();
		
		if (this.fGetHandle().id) {
			Spinner.create(this.fGetHandle().id);
		}
		
		var url = this.sUrl;
		
		
		var oContent = this.fGetWindowContent();
		new Ajax.Updater(oContent, url, {
			onComplete : this.fShowContent.bind(this),
			onFailure : function(resp) {
				alert("Oops, there's been an error.");
			}
		});
		return false;
	},
		
		
	fClose : function($super) {
		this.fGetTitle().innerHTML = '';
		return $super();			
	},
	
	fShowContent : function($super) {
		if(this.fGetHandle().id) {
			Spinner.close(this.fGetHandle().id);
		}
		$super();
	}	
	
});



var PopupHiddenDiv = Class.create(Popup, {
	initialize : function($super, popupHandle, div, option) {
		if(!$super(popupHandle, option)) {return null}
		this.oDiv = (typeof div == 'string')? $(div) : div;
		if (!this.oDiv) {return null;}
	},
		
	fOpen : function($super) {
		
		$super();
		//Element.show(this.fGetWindow());
		var windowContent = this.fGetWindowContent();
		windowContent.appendChild(this.oDiv);
		Element.show(this.oDiv);
		
		this.fShowContent();
		
		
		return false;
		//if( + position.top > )
	},
		
	fClose : function($super) {
		Element.hide(this.oDiv);
		document.body.appendChild(this.oDiv);
		return $super();			
	}

//	
//	fShowContent : function() {
//	},
//	

	
});



function initPopup(){

	var objBody = document.getElementsByTagName("body").item(0);
	
	var objOverlay = Popup.oOverlay = document.createElement("div");
	objOverlay.setAttribute('id', 'popup_Overlay');
	objBody.appendChild(objOverlay);
	objOverlay.style.width = '100%';
	objOverlay.style.height = '100%';
	objOverlay.style.display = 'none';
	
	var objPopup = Popup.oWindow = document.createElement("div");
	objPopup.setAttribute('id', 'popup_Window');
	objPopup.style.display = 'none';
	objBody.appendChild(objPopup);
	
	var objHeader = Popup.oHeader = document.createElement("div");
	objHeader.setAttribute('id', 'popup_WindowHeader');
	objPopup.appendChild(objHeader);
	
	var oHeaderLeft = document.createElement('div');
	oHeaderLeft.setAttribute('id', 'popup_HeaderLeftFix');
	objHeader.appendChild(oHeaderLeft);
	
	var oHeaderCenter = document.createElement('div');
	oHeaderCenter.setAttribute('id', 'popup_HeaderCenterFix');
	objHeader.appendChild(oHeaderCenter);
	
	var oHeaderRight = document.createElement('div');
	oHeaderRight.setAttribute('id', 'popup_HeaderRightFix');
	objHeader.appendChild(oHeaderRight);
	
	var objTitle = Popup.oTitle = document.createElement("p");
	objTitle.setAttribute('id', 'popup_Title');
	objTitle.className = 'title';
	oHeaderCenter.appendChild(objTitle);
	
	var objClose = Popup.oClose = document.createElement("a");
	objClose.className = 'close';
	objClose.setAttribute('href', '#');
	objClose.setAttribute('title', 'Cerrar ventana');
	oHeaderCenter.appendChild(objClose);
	
	var objContent = Popup.oContent = document.createElement("div");
	objContent.setAttribute('id', 'popup_WindowContent');
	objPopup.appendChild(objContent);
	
	var objFooter = document.createElement("div");
	objFooter.setAttribute('id', 'popup_WindowFooter');
	objPopup.appendChild(objFooter);
	
	var objFooterLeft = document.createElement("div");
	objFooterLeft.setAttribute('id', 'popup_FooterLeftFix');
	objFooter.appendChild(objFooterLeft);
	
	var objFooterCenter = document.createElement("div");
	objFooterCenter.setAttribute('id', 'popup_FooterCenterFix');
	objFooter.appendChild(objFooterCenter);
	
	var objFooterRight = document.createElement("div");
	objFooterRight.setAttribute('id', 'popup_FooterRightFix');
	objFooter.appendChild(objFooterRight);

}

Event.observe(document, 'dom:loaded', initPopup);


