ArchiveController = new Class({
	initialize: function(version) {
		this.name = 'Archive';
		this.currentFilterTag = 'lveDaily';
		this.isFetching = false;

		this.Frame = $('ARCHIVE');
		this.view = {
			Arrowleft : $('arrows_archive_left'),
			Arrowright : $('arrows_archive_right'),
			Cursor: $('cursordiv'),
			mainWall : $('archive-content-area'),
			ArchiveDump : $('archive-content-dump'),
			ArchiveBackgroundLayer:$('archive_Backing_layer'),
			Title : $('Archive_Title'),
			closeButton : $('Archive_Close_Button'),
			ArchiveCols: function() {
				return $$('.archive_active_cols');
			},
			hide : function(how, args) {
				var views = Scene_Archive.view;
				if (args == undefined) var args = [];
				for (view in Scene_Archive.view) {
					if (args.some(function(item, index) {
						return item == view;
					})) continue;
					if (typeOf(views[view]) != "function") views[view].view(how);
					if (typeOf(views[view]) == "function" && view != 'hide') {
						var els = views[view]().view(how);
					}
				}
			}
		};
		
		$('archive-content-area-title').set('morph',{duration:1850,link: 'cancel'});
		$('archive-content-area').set('morph',{duration:1250,link: 'cancel'});
		this.panelStartNumArray = [];
		this.panelEndNumArray = [];
		this.currentPanelNum = 0;
		this.archive_max_rows = 15;
		this.archive_max_cols = 3;
		this.direction = 0;
 		
		if (version == 'light') {
		}

		js_fetch_Archive = {};

		// Morphs
		this.archiveContainerFX = new Fx.Morph('ARCHIVE', {
			duration: 250,
			link: 'cancel',
			'transition': Fx.Transitions.Quart.easeOut
		});


		this.Frame.hide();
		this.Frame.setStyle('opacity', 0.0);

		$('ARCHIVE').addEvent('click:relay(#arrows_archive_right)', function() {
			if (!Scene_Archive.isFetching) {
				Scene_Archive.go_fetch_archive_backward();
			}
		});

		$('ARCHIVE').addEvent('click:relay(#arrows_archive_left)', function() {
			if (!Scene_Archive.isFetching) {
				Scene_Archive.go_fetch_archive_forward();
			}
		});
		
		this.view.closeButton.addEvent('click', function() {
			if (!Scene_Archive.isFetching) {
				Director.archiveCloseHandler();
			}
		});
		
	},

	PresentAtLaunch: function(fromTag) {
	},

	PresentScene : function(fromScene) {
		Scene_Archive.est_eventsForArchiveController();
		$('archive-content-dump').empty();
		$('archive-content-area').empty();
 		$('archive-content-area-title').empty();
		// fade in frame
		this.Frame.view('show');
		this.archiveContainerFX.start({
			opacity: 1.0
		});
		this.view.mainWall.view('show');
 		// fade in background layer
		this.view.ArchiveBackgroundLayer.view(1);
		this.view.ArchiveDump.view('hide');
 		// grab the latest archive
		this.go_fetch_latest_archive();
 		// hide previous button
		this.view.Arrowleft.view('hide');
		
		
	},

 
	go_fetch_latest_archive : function() {
		$$('.archive_cols').destroy();
		this.isFetching = true;

		var newhtml = new Request.HTML({
			url: 'pullArchive.php',
			async: true,
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				Scene_Archive.didRecieveNewArchive(responseTree);
			},

			onFailure: function() {
 				Scene_Archive.isFetching = false;
			}
		}).get({
			'postid':1000000,
			'direction':'back'
		});

 	},


	didRecieveNewArchive: function(newhtml, direction) {
 		$('archive-content-dump').adopt( newhtml );
		this.repositionArchive();
	},




	go_fetch_archive_backward : function() {
		this.isFetching = true;
		spinner.show();
		Scene_Archive.currentPanelNum ++;
		Scene_Archive.direction = -1;
		Scene_Archive.view.Arrowleft.view(1);
		(Scene_Archive.currentPanelNum == 0 ) ? Scene_Archive.view.Arrowleft.view(0) : Scene_Archive.view.Arrowleft.view(1);
		if(Scene_Archive.panelStartNumArray.length > Scene_Archive.currentPanelNum){  
 			
			$$('.archive_active_cols').removeClass('archive_active_cols').addClass('archive_deactive_cols');
			$$('.Archive_Month_Title').removeClass('activeTitle').addClass('archive_deactive_title'); 
			Scene_Archive.deleteAndAnimateNewItems();  
			Scene_Archive.isFetching = false;
			return; 
		}
		
 		var newhtml = new Request.HTML({url:'pullArchive.php','async':true,
			'onSuccess':function(responseTree, responseElements, responseHTML, responseJavaScript) {
 				Scene_Archive.didRecieveNewArchive(responseTree, 1);
  			},

			'onFailure': function() {
 				Scene_Archive.isFetching = false;
			}

		}).get({'postid':Scene_Archive.panelEndNumArray[ Scene_Archive.currentPanelNum - 1 ] ,'direction':'back'});
 	},





	go_fetch_archive_forward : function() {
		this.isFetching = true;
		if(Scene_Archive.currentPanelNum == 0 )  return;
		spinner.show();
		Scene_Archive.currentPanelNum --; 
		var direction = 'forward';
		Scene_Archive.direction = 1;
		(Scene_Archive.currentPanelNum == 0) ? Scene_Archive.view.Arrowleft.view(0) : Scene_Archive.view.Arrowleft.view(1);
		if(Scene_Archive.panelStartNumArray.length > Scene_Archive.currentPanelNum){  
 			
			$$('.archive_active_cols').removeClass('archive_active_cols').addClass('archive_deactive_cols');
			$$('.Archive_Month_Title').removeClass('activeTitle').addClass('archive_deactive_title'); 
			Scene_Archive.deleteAndAnimateNewItems();
			Scene_Archive.isFetching = false;  
			return; 
		}
		
		var newhtml = new Request.HTML({url:'pullArchive.php','async':true,
			'onSuccess':function(responseTree, responseElements, responseHTML, responseJavaScript) {
				Scene_Archive.didRecieveNewArchive(responseTree, -1);
			},

			'onFailure': function() {
				Scene_Archive.isFetching = false;
			}
		}).get({'postid':Scene_Archive.panelStartNumArray[ Scene_Archive.currentPanelNum ]  ,'direction':'forward'});
 	},
	
	
	
	
	







	repositionArchive : function() {
		$$('.archive_active_cols').removeClass('archive_active_cols').addClass('archive_deactive_cols');
		$$('.Archive_Month_Title').removeClass('activeTitle').addClass('archive_deactive_title');
		months = $$('#archive-content-dump .archive_byMonth');
		var spacer = ((window.getSize().x - 900) / 2);

		// TODO: what are max_rows?
		var archive_max_rows = this.archive_max_rows;
		var archive_max_cols = this.archive_max_cols;
		var colcount = 0;
		var mcount = 0;
		
				
		var titleoffset = Math.max( (window.getSize().y * .5) - 250 , 120 );
		var itemsoffset = Math.max( (window.getSize().y * .5) - 150 , 160 );
		
		months.each(function(items, index) {
			if(mcount > 0) return; 
 			mcount ++;
			
			var monthStr = items.get('indexer').toInt();
 			if(months.length >1){ monthcount = months[index + 1].get('indexer').toInt() - monthStr; }else{
 				monthcount = $('archive-content-dump').getLast().get('indexer').toInt() - monthStr; 
			}
			//work out how many cols
			 expectedColumns = Math.ceil( monthcount / archive_max_rows );
			expectedColumns = Math.min( expectedColumns , archive_max_cols ); //no more than 3 cols
			var expectedRemainder = monthcount - ((expectedColumns-1) * archive_max_rows );
			if(expectedRemainder < 5){ //if col is just a few elements, make the row count larger
				expectedColumns = Math.max(1, expectedColumns-1);
				archive_max_rows = Math.ceil(monthcount / expectedColumns);
 			}
			
			//now if more than x entries deep, gen new archive col
			for (var a = 0; a < expectedColumns; a++) {
					if (colcount > (expectedColumns-1) ) continue;
					var newArchiveColumn = new Element('div.archive_cols.archive_active_cols');
					newArchiveColumn.setStyles({'left':300 * colcount + spacer});
 					newArchiveColumn.inject('archive-content-area');
					newArchiveColumn.currentPanelNum = Scene_Archive.currentPanelNum;
					var remainder = monthcount - ((a + 1) * archive_max_rows);
					
					(remainder < 0) ? remainder = monthcount - (a * archive_max_rows) : remainder = ((a + 1) * archive_max_rows);
					(remainder > archive_max_rows) ? remainder = archive_max_rows : remainder = remainder;
					
  					var strcount = monthStr + (a * archive_max_rows);
					var newarr = $('archive-content-dump').clone().getElements('h5').slice(strcount, strcount+remainder);
 					newArchiveColumn.adopt(newarr);
					colcount++;
			}
			
			var newtitle = new Element('div.Archive_Month_Title.activeTitle');
			//add element//
 			newtitle.inject('archive-content-area-title');
			newtitle.currentPanelNum = Scene_Archive.currentPanelNum;
			newtitle.view('hide').element.set('html',items.get('html'));
			 
  		});
		
		
  		if($$('.archive_active_cols').length==0) return;
		$$('.archive_active_cols').view('hide');

		//setTimeout(function() {
		
			
 			js_fetch_Archive.oldestfetchid = $$('.archive_active_cols')[$$('.archive_active_cols').length - 1].getElements('h5').getLast().get('postid').toInt();
			js_fetch_Archive.latestfetchid = $$('.archive_active_cols')[0].getElements('h5')[0].get('postid').toInt();
			Scene_Archive.panelStartNumArray[ Scene_Archive.currentPanelNum ] = js_fetch_Archive.latestfetchid;
			Scene_Archive.panelEndNumArray[ Scene_Archive.currentPanelNum ] = js_fetch_Archive.oldestfetchid;
			if (js_fetch_Archive.oldestfetchid <= 5) { Scene_Archive.view.Arrowright.view(0); } else { Scene_Archive.view.Arrowright.view('in'); }
		 	Scene_Archive.reestablishEvents();
			$('archive-content-dump').empty();
			Scene_Archive.isFetching = false;
			Scene_Archive.deleteAndAnimateNewItems();

		//}, 0);
	},




	deleteAndAnimateNewItems : function() {

		var self = this;
		var colLen = $$('.archive_active_cols').length;
		var colWidth = 300;
		var spacing = ((window.getSize().x - (colLen * colWidth)) * .5)  + (colLen*18);
		var titleoffset = Math.max( (window.getSize().y * .5) - 250 , 120 );
		var itemsoffset = Math.max( (window.getSize().y * .5) - 150 , 160 );	
		
		spinner.hide();
 
		//shift panel postions
		var leftPosition = $('archive-content-area').getPosition().x;
		var newleftPosition = (this.currentPanelNum) * window.getSize().x;


 		$$('.activeTitle').each(function(items, index) {
			items.setStyles({
					'top': titleoffset , 
					'left' : ((window.getSize().x *.5) -175) + newleftPosition 
			}).view('show');
		});
		
  		$$('.archive_active_cols').each(function(items, index) {
			items.setStyles({
					'top': itemsoffset , 
					'left' : newleftPosition + spacing + (colWidth * index) 
				}).view('show');
		});		
     	
 
		$('archive-content-area-title').morph({
			'left': -(self.currentPanelNum * window.getSize().x)
		}).chain(function() {
			///if ($$('.archive_deactive_title').length > 0) $$('.archive_deactive_title').destroy();
			//if ($$('.archive_deactive_cols').length > 0) $$('.archive_deactive_cols').destroy();
			self.isFetching = false;
		});
	
	
		$('archive-content-area').morph({
			'left': -(self.currentPanelNum * window.getSize().x)
		});
			
 

		
		
	},
	
	

	
	est_eventsForArchiveController : function() {
		
		document.onmousemove = null;
		document.onmousemove = function(e) {
			var event = e || window.event;
			window.mouseY = event.clientY;
			window.mouseX = event.clientX;
			document.getElementById('cursordiv').style.left = window.mouseX + 5 + "px";
			document.getElementById('cursordiv').style.top = window.mouseY + 10 + "px";
		};

		//Scene_Archive.view.Cursor.view('show');
 	},
	
	
	reestablishEvents : function() {

		/**
		 * Archive
		 */

		$$('.archive_active_cols h5').removeEvents();
		$$('.archive_active_cols h5').each(function(items, index) {
			items.addEvent('click', function(event) {
				var postID = this.getAttribute('postid');
				var postitle = this.getAttribute('posttitle');
 				/*
				// show post
				Director.showScene(Scene_Post);

				*/
 				// show post
				Director.loadPost(postID,postitle);
			});
			items.addEvent('mouseover', function() {
//				$('captionthumb').set('src', GLOBAL['rootlibraryurl'] + this.get('thumb'));
				$('captionthumb').set('src', 'library/'+this.get('thumb'));
			});
			items.addEvent('mouseout', function() {
				$('captionthumb').set('src', 'img/spacer.gif');
			});
		});
	},

	removeEventsFromArchive : function() {
		$('cursordiv').view('hide');
		document.onmousemove = null;
	},

	directorDidRequestResize : function() {
 		if ($$('.archive_cols').length == 0) return;
 		var newleftPosition = (this.currentPanelNum) * window.getSize().x;
		var colWidth = 300;
		var colLen = $$('.archive_active_cols').length;
		var spacing = ((window.getSize().x - (colLen * colWidth)) * .5)  + (colLen*18);
		
		var titleoffset = Math.max( (window.getSize().y * .5) - 250 , 120 );
		var itemsoffset = Math.max( (window.getSize().y * .5) - 150 , 160 );
		

   		$('archive-content-area').setStyles({
			'left': -(newleftPosition)
 		});	
		

   		$('archive-content-area-title').setStyles({
			'left': -(newleftPosition)
 		});				


		$$('.archive_active_cols').each(function(items, index) {
			items.setStyles({
					'top': itemsoffset , 
					'left' : newleftPosition + spacing + (colWidth * index) 
				});
		});	
		
		$$('.activeTitle').each(function(items, index) {
			items.setStyles({
					'top': titleoffset , 
					'left' : ((window.getSize().x *.5) -175) + newleftPosition 
			});
		}); 	
		
		$$('.archive_deactive_title').each(function(items, index) {
			var newleftPosition = (items.currentPanelNum) * window.getSize().x;
			items.setStyles({
					'top': titleoffset , 
					'left' : ((window.getSize().x *.5) -175) + newleftPosition 
				});
		});	
		
		$$('.archive_deactive_cols').each(function(items, index) {
			var newleftPosition = (items.currentPanelNum) * window.getSize().x;
			items.setStyles({
					'top': itemsoffset , 
					'left' : ((window.getSize().x *.5) -175) + newleftPosition 
			});
		}); 	
		
 
 
	},

	directorDidChangeVersionControl : function(version) {

	},

	closeScene : function(toScene) {
		this.removeEventsFromArchive();

		// remove content-dump

 
		// fade out container
		this.archiveContainerFX.start({
			opacity: 0.0
		}).chain(function() {
			this.Frame.view('hide');
			$('archive-content-dump').empty();
			$('archive-content-area').empty();
			$('archive-content-area-title').empty();
		}.bind(this));
	}
});
