
// For our popup div forms
var BNoverDiv = new Class({

	Implements: Options,

	options: { 
		printURL: null,
		submitURL: null,
		formName: null,
		oDivPlacement: null,
		oDivCSS: null,
		iDivCSS: null,
		oDivProcPlacement: null,
		oDivProcCSS: null,
		iDivProcCSS: null,
		grayout: false
	},

	initialize: function(options){

		this.setOptions(options) ;

		this.printURL = this.options.printURL ;
		this.submitURL = this.options.submitURL ;
		this.formName = this.options.formName ;
		this.oDivPlacement = this.options.oDivPlacement ;
		this.oDivCSS = this.options.oDivCSS ;
		this.iDivCSS = this.options.iDivCSS ;
		this.oDivProcPlacement = this.options.oDivProcPlacement ;
		this.oDivProcCSS = this.options.oDivProcCSS ;
		this.iDivProcCSS = this.options.iDivProcCSS ;
		this.grayout = this.options.grayout ;
		this.grayoutDiv = null ;
		this.retrieveHttpRequest = null ;
		this.postHttpRequest = null ;

		if (this.grayout) {
			this.grayoutDiv = new Element('div').inject(this.oDivPlacement[0], this.oDivPlacement[1]).setStyles({
				display: 'none',
				position: 'absolute'
			}) ;
		}
		this.outerDiv = new Element('div').inject(this.oDivPlacement[0], this.oDivPlacement[1]) ;
		this.innerDiv = new Element('div').inject(this.outerDiv, 'top') ;
		this.outerProcessingDiv = new Element('div').inject(this.oDivProcPlacement[0], this.oDivProcPlacement[1]) ;
		this.innerProcessingDiv = new Element('div').inject(this.outerProcessingDiv, 'top') ;
	}, 

	show: function(){
		this.outerProcessingDiv.setStyle('display','none') ;
		this.innerProcessingDiv.setStyle('display','none') ;
		if (!$chk(this.oDivCSS['height'])) {
			this.oDivCSS['height'] = this.outerDiv.getParent().getSize().y ;
		}
		this.outerDiv.setStyles(this.oDivCSS) ;
		if (!$chk(this.iDivCSS['height'])) {
			this.iDivCSS['height'] = this.innerDiv.getParent().getSize().y ;
		}
		this.innerDiv.setStyles(this.iDivCSS) ;
	},

	activate: function(params){
		this.show() ;
		if (this.grayout) {
			this.grayoutDiv.setStyles({
				height: this.outerDiv.getSize().y,
				width: this.outerDiv.getSize().x,
				backgroundColor: '#000000',
				opacity: .7,
				zIndex: 99,
				display: 'block'
			}) ;
		}
		var url = this.printURL ;
		if (params && $chk(params['query'])) {
			url = url + '&' + params['query'] ;
		}
		this.retrieveHttpRequest = new Request.HTML({ update: this.innerDiv, evalScripts: true }).get(url) ;
	},

	deactivate: function(){
		if (this.grayout) {
			this.grayoutDiv.setStyles({
				height: '0px',
				width: '0px',
				backgroundColor: 'transparent', 
				opacity: 0,
				display: 'none'
			}) ;
		}
		this.innerDiv.set('html', '') ;
		this.innerDiv.setStyles({ display: 'none' }) ;
		this.outerDiv.setStyles({ display: 'none' }) ;
	},

	deinitialize: function(){
		this.outerDiv.dispose() ;
	},

	postform: function(){
		this.innerDiv.setStyle('opacity', .5) ;
		this.outerProcessingDiv.setStyles(this.oDivProcCSS) ;
		this.innerProcessingDiv.setStyles(this.iDivProcCSS).set('html', '<span style="font-weight: bold; font-size: 12px">processing...</span>') ;
		this.postHttpRequest = new Request.HTML(this.submitURL, { 
			method: 'post', 
			data: $(this.formName).toQueryString(), 
			onComplete: this.processresponse.bind(this)
		}).request() ;
	},

	processresponse: function(text, xml){
		this.innerProcessingDiv.setStyle('display', 'none') ;
		this.outerProcessingDiv.setStyle('display', 'none') ;
		this.innerDiv.setStyle('opacity', 1) ;
		this.innerDiv.set('html', text) ;
		if ($chk($('processresponseScripts'))) {
			eval($('processresponseScripts').get('html')) ;
		}
	}
}) ;
