// JavaScript Document/**
/* @author Joshua Gulledge
 * Bethel College, Mishawaka, IN 
 * Using MooTools 1.2 AJAX library (Extended)
 * Verson: 0.0.1
 */
var bc_ajax = new Class({
	Implements: [Options, Events], // Mootool classes
		options: { 
			container: 'ajax_popup_holder',// the div ID,
			containerClass: 'ajax_popup',
			containerWrapper: 'ajax_wrapper',
			containerWidth: 620,
			instance: 'ajax',
			popup: true, // is it a pop up or in page?
			popupId: 'classic',
			showLoader: true, // ajax loading effect?
			loaderUrl: '/login/images/ajax-loader.gif', // the image url
			debug: false,
			centerHeight: 0
		},
	initialize: function(options){
		this.setOptions(options);
		
		// Do request 
	},
	/******************
		Define vars:
	*******************/
	fading: false,
	setHeight: false,
	timeDifferance: 1000,
	lastSent: 0,
	/******************
		Define methods:
	*******************/
	debug: function(d){
		this.options.debug = d;
	},
	loadingImage: function(){
		//alert('Loading');
		this.fillContainer( '<img src="' + this.options.loaderUrl + '" alt="Loading" class="loader" style="display:block; margin:auto;" />' );
	},
	fillContainer: function(content){
		if( this.options.popup ){
			//alert('popup');
			var inst =  this.options.instance;
			var text = '<div id="'+this.options.containerWrapper+'"><div class="ajax_banner"><a href="#close" id="ajax_close'+inst+'" >Close X</a></div><div class="ajax_center"><div class="ajax_content">'+content+'</div></div><div class="ajax_footer"></div></div>';
			$(this.options.container).set('html', text);
			// now add event to it:
			var d = this.options.debug;
			$('ajax_close'+inst).addEvent('click', function(){
				eval(inst+'.closeContainer()');
				//closeAjax(inst);
				if( d ){
					console.log('Attach close event');
				}
			});
			// set it in the right place:
			this.updateWindow();
		}
		else{
			//alert(' No Popup ' + this.options.popup);
			$(this.options.container).set('html', content);
		}
	},
	deleteContainer: function(){
		$(this.options.container).set('html', '');
		this.closeContainer();
	},
	openContainer: function(){
		if( this.options.debug ){
			console.log('Open container');
		}
		// If container does not exist, then create it
		if( !$chk($(this.options.container)) ){
			// 1. create the holder/container
			var holder  = new Element('div', {id: this.options.container});
			// 2. inject it
			holder.inject(document.body, 'top');
			// now add class
			$(this.options.container).addClass(this.options.containerClass);
			// limit body height:
			this.setHeight = true;
			//this.updateWindow();
		}
		// fade in and set the style to visible
		if( !this.fading){
			this.fading = true; 
			 $(this.options.container).setStyles({
				opacity: 0,
				display:'block',
				visibility: 'visible'

			});			
			$(this.options.container).get('tween').start('opacity', 1).chain(function(){
				this.fading = false;
			}.bind(this)); 
			//console.log('ran fading thingy');
		}
		
	},
	closeContainer: function(){
		// Fade out
		if( this.options.debug ){
			console.log('Close me!');
		}
		if( !this.fading){
			this.fading = true; 
			//$(this.options.container).get('tween').start('height', 50);
			$(this.options.container).get('tween').start('opacity', 0).chain(function(){
				$(this.options.container).setStyles({
					//display:'none',
					visibility: 'hidden'
				});
				this.fading = false;
				// Restore body height
				if( this.setHeight ){
					//document.body.erase('height');
				}
			}.bind(this));
		}
	},
	start: function( input ){
		//this.openContainer(); //this.loadingImage();
		if( this.options.debug ){
			console.log('Post');
		}
		var d = new Date();
		var sec = d.getTime();
		if( (sec - this.lastSent) < this.timeDifferance){
			return;
		}
		this.lastSent = sec;
		
		var inst =  this.options.instance;
		if( $defined(input) ){
			if(input.url == null){
				input.url = 'http://www.bethelcollege.edu/admission/ajax/majors.php';
			}
			if( input.method == null ){
				input.method = 'post';
			}
			if( input.data == null ){
				input.data = eval(inst+'.getData()');
			}
			if( input.onRequest == null ){
				input.onRequest = function(){ eval(inst+'.openContainer()'); eval(inst+'.loadingImage()'); };
			}
			if( input.onSuccess == null ){
				input.onSuccess = function(txt){ eval(inst+'.response(txt)'); };
			}
			if( input.onFailure == null ){
				input.onFailure = function(){ eval(inst+'.failure()'); };
			}
		}
		else{
			var input = {
				url: 'http://www.bethelcollege.edu/admission/ajax/majors.php',
				method: 'post',
				data: eval(inst+'.getData()'),
				onRequest: function(){ eval(inst+'.loadingImage()'); eval(inst+'.openContainer()'); },
				onSuccess: function(txt){ eval(inst+'.response(txt)'); },
				onFailure: function(){ eval(inst+'.failure()'); }
			}
			
		}
		var req = new Request(input);
		/* ORG 
		var req = new Request({
			url: 'http://www.bethelcollege.edu/admission/ajax/majors.php',
			method: 'post',
			data: eval(inst+'.getData()'),
			onRequest: function(){ eval(inst+'.openContainer()'); eval(inst+'.loadingImage()'); },
			onSuccess: function(txt){ eval(inst+'.response(txt)'); },
			onFailure: function(){ eval(inst+'.failure()'); } 
			});*/
		
		req.send();
	}, 
	/*******************
		To be extended 
	********************/
	response: function(txt){
		this.fillContainer(txt);
	},
	failure: function(){
		this.fillContainer('The request failed.');
	},
	getData: function(){
		// get form data
		//alert('Get Data');
		var params = "action=31&show_code=yes";
		/*if( con ){
			var m_element = document.forms['survey_form'].elements['major_code']; 
			params += "&type=concentration&major_code=" + m_element.value; 
		}
		else{
			params += "&type=majors";
		} */
		return params;
	},
	loadData: function(formData){
		// set form data
		//var element = document.forms[formData.name].elements[input_name];
		//element.value = value;
		// close 
		this.closeContainer(); 
	},
	/*updateWindow: function (){
		try{
			$(this.options.containerWrapper).setStyles({
				'position': 'absolute',
				'top': ( (window.getSize().y - $(this.options.containerWrapper).style.height.toInt()) / 2 + window.getScroll().y) + 'px',
				'left': ( (window.getSize().x - $(this.options.containerWrapper).style.width.toInt()) / 2 + window.getScroll().x) + 'px'
			});
			//alert('Update Window');
		}catch(f){ /*alert(f);* / }
	}*/
	updateWindow: function (){
		try{
			// Set width:
			$(this.options.containerWrapper).setStyles({
				'width': this.options.containerWidth.toInt() + 'px'
			});
			if ( this.options.centerHeight > 0 ) {
				// set height of center:
				$$('div.ajax_popup div.ajax_center').setStyle('height', this.options.centerHeight);
			}
			var tmp_y = $(this.options.containerWrapper).offsetHeight.toInt();
			//console.log("update window tmp Y: "+tmp_y);
			tmp_y = tmp_y *1;//container
			$(this.options.containerWrapper).setStyles({
				'position': 'absolute',
				'top': ( (window.getSize().y - tmp_y )/ 2 + window.getScroll().y) + 'px',
				'left': ( ($(this.options.container).offsetWidth.toInt() - $(this.options.containerWrapper).offsetWidth.toInt()) / 2  ) + 'px'
			});
			//alert('Update Window');
		}catch(f){ console.log(f);/**/ }
	}
	
	
});


