


/**
	@param id 		Number	article id
	@param modules		Object	id, title, url
	
	* Note the 'bind' on the event handlers , binds to this class
	
	* should auto cancel upon new request, need to test this
*/

var ModuleClass = new Class({

	initialize: function( modules, id  ){
	
		//remove modules if any exist
		//var mods = $$( "#moduleContainer .moduleInner" );
		//mods.each( function( e ){
			//$(e).remove(); });
		removeModules();
		
		//this.modules = new Array();
		this.modules = modules;
		
		this.id = id;
		//this.section = section
		this.moduleContainer = $('moduleContainer' );
		this.totalModules = this.modules.length;
		this.modAJAX;
		this.count = 0;
		//this.modules = new Array;
		//this.getModuleData();
		this.getModules();
	},
	
	/*
	minMax: function( value ){
		alert("VALUE : " + value );
	},
	*/
	
	//load modules if they exist
	getModules: function(){
		
		//if all modules are loaded or there are no modules at all finish up
		if( this.count >= this.totalModules || this.totalModule == 0 ){
			//alert("WE'RE DONE");
			this.onModulesLoaded();
		}else{
			var mod = this.modules[this.count];  //get the URL of the module
			var modURL = mod.url
			var modTitle = mod.title
			
			//create a container for this module with class "module", need to setup styles for this
			var innerMod = new Element('div', {
				'class': 'moduleInner'
			});
			
			innerMod.injectInside( this.moduleContainer );
			
			
			var moduleHeader = new Element( 'div', {
				'class': 'module'
			});
			
			moduleHeader.injectInside( innerMod );
			
			var title = new Element( 'h1');
			title.setText( modTitle );
			
			title.injectInside( moduleHeader );
			
			/*
			var maximize = new Element( 'a', {
				'id': 'the-smeal-blog-maximize',
				'href': '#',
				
				'events': {
			        'click': function(e){
						e = new Event(e).stop();
						minMax( 'max' );
			        }
			    }
			
			});
	
	
			var minimize = new Element( 'a', {
				'id': 'the-smeal-blog-minimize',
				'href': '#',
				
				'events': {
			        'click': function(e){
						e = new Event(e).stop();
						minMax( 'min' );
			        }
			    }
			
			});
	
			maximize.injectInside( moduleHeader );
			minimize.injectInside( moduleHeader );
			
			
			var imgMax = new Element( 'img', {
				'src': "images/maximize.gif"
			});
		
			var imgMin = new Element( 'img', {
				'src': "images/minimize.gif"
			});
			
			imgMax.injectInside( maximize );
			imgMin.injectInside( minimize );
			
			*/
			
			var content = new Element( 'div', {
				'id' : 'module_' + this.count,
				'class' : 'moduleContent'
			});
			
			var br = new Element( 'br', {
				'class': 'clear'
			});
			
			//maximize.injectInside( moduleHeader );
			//minimize.injectInside( moduleHeader );
			
			br.injectInside( moduleHeader );
			content.injectInside( innerMod );
			

			//set opacity to 0
			//var myFx = new Fx.Style($(innerMod), 'opacity').set(0);
			//inject the module into the moduleContainer
			//$(innerMod).injectInside( this.moduleContainer );
			
			this.count++;
			this.modAJAX = new Ajax(modURL, {
				evalScripts:true,  /* IMPORTANT, evalScripts is necessary if you want to run any code in the loaded page */
				autoCancel: true,
				method: 'get',
				update: $(content),
				//onFailure: showError(),  //always shown for some reason
				//onComplete: function(){ myFx.start(1); },  //fade in
				onSuccess: function(){ this.onModuleLoaded( content )}.bind(this)
				//onSuccess: this.getModules.bind(this)
			}).request();
			
			//rinse / repeat
		}
	},
	
	onModuleLoaded: function( e ){
		/* wont work, can't have href and onclick in the same element, setting a click on the li isn't very useable */
		/*
		var hasPlayList = $(e).getElements("ul").hasClass('playlist');
		if( hasPlayList == "true" ){
			var li = $(e).getElementsBySelector("li") // returns an array with all theli
			this.initializePlayList( li );
		}
		*/
		this.getModules();
	},
	
	/*
	setSelected: function( el ){
		el.addClass( 'activeVideo' );
	},

	playListClick: function( el ){
		el.addEvent('click', function( e ){
			e = new Event(e).stop();
			this.setSelected( el ); 
		}.bind(this)); 
	},
	
	
	initializePlayList: function( listItems ){

		var total = listItems.length;	
		for( var i=0; i < total; i++ ){
			var listItem = listItems[i];
			var href = listItem.getElement("a");
			this.playListClick( listItem );
		}
	},
	*/
	

	
	onModulesLoaded: function( response ){
		this.fireEvent( 'onModulesLoaded', {id:this.id}, 50 );
	}
	
});
/* allow our class to broadcast events to anyone listening */
ModuleClass.implement(new Events);
