function GaleriaGUIModel(viewHolder) {
	//Observar esta propriedade eh obrigatorio nos models
	//o model precisa saber a view que o exibe. 
	//passa o nome do handler
    this.currentView = viewHolder;
    this.modelWasLoaded = false;
    this.categorias	= new Hash();
    this.galeria = null;
    
	this.getGaleria = function(){
		var textFunc = this.currentView.valueOf();
		var myRequest = new Request({method: 'post', 
									url: './content/getGaleria.php',
									onSuccess: function(dataFromServer) {viewHandler.getView(textFunc).currentModel.getGaleriaCallback(dataFromServer)}
									});
		myRequest.send();
	}
	
	this.getGaleriaCallback = function (result){
		this.galeria = JSON.decode(result);
		
		//para desconsiderar as entidades - pegar somente a entidade 0
		this.galeria = this.galeria[1];
		
		this.modelWasLoaded = true;
		viewHandler.getView(this.currentView).draw();
	}
	
	//VO
	/*
	class GaleriaVO {
		public $id = null;
		public $type = null; // 0=entidade, 1=categoria, 2=album, 3=foto
		public $title = null;
		public $descr = null;
		public $date = null;
		public $image = null;
		public $qty = null;
		public $children = null;
	}
	 */

	this.childrenTypeTitles = {//informa o nome dos filhos de cada typo
		1:'Álbuns',
		2:'Fotos'
	}
	
}

function GaleriaGUIView(viewHolder) {
	this.id = ( new Date() ).getTime();
	this.currentModel = new GaleriaGUIModel(viewHolder);
    this.currentView = viewHolder;
    this.currentViewInstanceTemplate = 'viewHandler.getView(\'' + this.currentView +'\')';
    this.categoriaSelecionada = null;
    this.albumSelecionado = null;
    this.photoSelecionada = null;
    this.photoPosList = new Array();
    
	this.draw = function() {
		if(!this.currentModel.modelWasLoaded){
			return;
		}
		
		var viewContentBuffer = '';
		viewContentBuffer = templateManager.loadTemplate('galeriaTemplate');
		if(browser.tipo=='IE'){
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOVER@@@/g, 'onmouseenter');
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOUT@@@/g, 'onmouseleave');
		}else{
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOVER@@@/g, 'onmouseover');
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOUT@@@/g, 'onmouseout');
		}
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@IMG_PATH@@@/g, IMG_PATH);
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@METHOD_PATH@@@/g, this.currentViewInstanceTemplate);
		
		viewHandler.drawView(viewHolder, viewContentBuffer);
		
		this.callCategorias();
	}
	
	this.applyContent = function(target,viewContentBuffer){
		if(browser.tipo=='IE'){
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOVER@@@/g, 'onmouseenter');
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOUT@@@/g, 'onmouseleave');
		}else{
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOVER@@@/g, 'onmouseover');
			viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@MOUSEOUT@@@/g, 'onmouseout');
		}
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@IMG_PATH@@@/g, IMG_PATH);
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@METHOD_PATH@@@/g, this.currentViewInstanceTemplate);
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /&lt;/g, "<" );
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /&gt;/g, ">" );
		viewHandler.getElementDirectly(target).innerHTML = viewContentBuffer;
	}
	
	this.callCategorias = function(){
		this.categoriaSelecionada = null;
		
		var elementContentBuffer = '';
		elementContentBuffer = templateManager.loadTemplate('folderThumb_galeriaTemplate');
		var currentList = '';
		//var categorias = this.currentModel.categorias;
		var categorias = this.currentModel.galeria.children;
		
		for ( var key in categorias) {
			var value = categorias[key];
			var categoriaElement = elementContentBuffer;
			categoriaElement = templateManager.setVars(categoriaElement, /@@@ID@@@/g, value.id);
			categoriaElement = templateManager.setVars(categoriaElement, '@@@NOME@@@', value.title);
			categoriaElement = templateManager.setVars(categoriaElement, '@@@IMG@@@', 'gv/cat_' + value.id + '.jpg');
			categoriaElement = templateManager.setVars(categoriaElement, '@@@DATE@@@', '');
			categoriaElement = templateManager.setVars(categoriaElement, '@@@QTD@@@', value.qty);
			categoriaElement = templateManager.setVars(categoriaElement, '@@@TIPO@@@', this.currentModel.childrenTypeTitles[value.type]);
			categoriaElement = templateManager.setVars(categoriaElement, '@@@METHOD@@@', 'callAlbuns');
			currentList += categoriaElement;
		}
		this.applyContent('thumbsHolder',currentList);
		viewHandler.loading_stop();
	}
	
	this.callAlbuns = function(categoria){
		this.categoriaSelecionada = categoria;
		this.albumSelecionado = null;
		
		var viewContentBuffer = '';
		viewContentBuffer = templateManager.loadTemplate('tituloSecao_galeriaTemplate');
		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@NOME@@@', 
			this.currentModel.galeria.children[this.categoriaSelecionada].title);
		
		var elementContentBuffer = '';
		elementContentBuffer = templateManager.loadTemplate('folderThumb_galeriaTemplate');
		var currentList = '';
		var albuns = this.currentModel.galeria.children[this.categoriaSelecionada].children;
		
		for ( var key in albuns) {
			var value = albuns[key];
			var albumElement = elementContentBuffer;
			if(value.date != '0000-00-00'){
				var mydate = new MyDate();
				mydate.setMyDateDBFormat(value.date);
				var novaData = mydate.formatDate('dd/MM/yyyy')+'<br/>';
			}else{
				var novaData = '';
			}
			var firstChild = -1;
			for ( var key in value.children) { // pega o primeiro filho (fotos) e sai do loop - isso serve para exibir a foto da chamada do album
				firstChild = key;
				break;
			}
			albumElement = templateManager.setVars(albumElement, /@@@ID@@@/g, value.id);
			albumElement = templateManager.setVars(albumElement, '@@@NOME@@@', value.title);
			albumElement = templateManager.setVars(albumElement, '@@@IMG@@@', 'gv/fotosp/'+ value.id +'_'+ firstChild +'.jpg');
			//albumElement = templateManager.setVars(albumElement, '@@@DATE@@@', mydate.formatDate('dd/MM/yyyy')+'<br/>');
			albumElement = templateManager.setVars(albumElement, '@@@DATE@@@', novaData);
			albumElement = templateManager.setVars(albumElement, '@@@QTD@@@', value.qty);
			albumElement = templateManager.setVars(albumElement, '@@@TIPO@@@', this.currentModel.childrenTypeTitles[value.type]);
			albumElement = templateManager.setVars(albumElement, '@@@METHOD@@@', 'callPhotos');
			currentList += albumElement;
		}

		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@THUMBS@@@', currentList);
		this.applyContent('thumbsHolder',viewContentBuffer);
	}
	
	this.callPhotos = function(album){
		this.albumSelecionado = album;
		this.photoSelecionada = null;
		
		var viewContentBuffer = '';
		viewContentBuffer = templateManager.loadTemplate('tituloSecao_galeriaTemplate');
		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@NOME@@@', 
			this.currentModel.galeria.children[this.categoriaSelecionada].title);
		var albumViz = templateManager.loadTemplate('albumViz_galeriaTemplate');
		
		var elementContentBuffer = '';
		elementContentBuffer = templateManager.loadTemplate('photoThumb_galeriaTemplate');
		var currentList = '';
		var album = this.currentModel.galeria.children[this.categoriaSelecionada].children[this.albumSelecionado];
		var photos = album.children;

		this.photoPosList = [];
		var actualPos = 0;
		for (key in photos){
			var albumElement = elementContentBuffer;
			var value = photos[key];
			albumElement = templateManager.setVars(albumElement, /@@@ID@@@/g, value.id);
			albumElement = templateManager.setVars(albumElement, '@@@NOME@@@', value.title);
			albumElement = templateManager.setVars(albumElement, '@@@ACTUALPOS@@@', actualPos);
			this.photoPosList.push(value.id);
			actualPos++;
			albumElement = templateManager.setVars(albumElement, '@@@IMG@@@', 'gv/fotosp/'+album.id+'_'+value.id+'.jpg');
			currentList += albumElement;
		}

		if(album.date != '0000-00-00'){
			var mydate = new MyDate();
			mydate.setMyDateDBFormat(album.date);
			var novaData = '( '+mydate.formatDate('dd/MM/yyyy')+' )';
		}else{
			var novaData = '';
		}
		albumViz = templateManager.setVars(albumViz, '@@@NOME@@@', album.title);
		albumViz = templateManager.setVars(albumViz, '@@@DATE@@@', novaData);
		
		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@THUMBS@@@', albumViz);
		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@PHOTOS@@@', currentList);
		this.applyContent('thumbsHolder',viewContentBuffer);
	}
	
	this.zoomPhoto = function(photo,actualPos){
		this.photoSelecionada = photo;
		this.posicaoAtual = actualPos;
		
		viewHandler.show_fullGlass();
		
		//this.applyContent('fullGlassContent','');//zera conteudo
		viewHandler.loading_start();
		
		var album = this.currentModel.galeria.children[this.categoriaSelecionada].children[this.albumSelecionado];
		var myImage = [IMG_PATH+'gv/fotosg/'+album.id+'_'+photo+'.jpg'];
		var currentView = this.currentView;
		var loader = new Asset.image(myImage, {
			onerror: function(){
    			alert('Erro. Imagem não encontrada!');
    			viewHandler.loading_stop();
    			viewHandler.getView(currentView).closeZoom();
    		},
        	onload: function() {
               	//new Element('div',{ style:'height:480px; width:640px; position:absolute; top;0; left:55px; cursor: pointer; background:url('+myImage+') no-repeat center;', onclick:'viewHandler.getView("'+currentView+'").closeZoom();' }).inject($('photoZoom'));
               	viewHandler.getView(currentView).drawPhoto();
        	}
    	});
	}
	
	this.drawPhoto = function(){
		var viewContentBuffer = '';
		viewContentBuffer = templateManager.loadTemplate('photoZoom_galeriaTemplate');
		var album = this.currentModel.galeria.children[this.categoriaSelecionada].children[this.albumSelecionado];
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@ID@@@/g, this.photoSelecionada);
		viewContentBuffer = templateManager.setVars(viewContentBuffer, '@@@IMG@@@', 'gv/fotosg/'+album.id+'_'+this.photoSelecionada+'.jpg');
		viewContentBuffer = templateManager.setVars(viewContentBuffer, /@@@ACTUALPOS@@@/g, this.posicaoAtual);
		
		this.applyContent('fullGlassContent',viewContentBuffer);
		viewHandler.getElementDirectly('fullGlassContent').style.display = '';
		
		if(this.posicaoAtual == 0){
			viewHandler.getElementDirectly('prevPhotoBtn').style.display = 'none';
		}else{
			viewHandler.getElementDirectly('prevPhotoBtn').style.display = '';
		}
		if(this.posicaoAtual+1 == this.photoPosList.length){
			viewHandler.getElementDirectly('nextPhotoBtn').style.display = 'none';
		}else{
			viewHandler.getElementDirectly('nextPhotoBtn').style.display = '';
		}
		viewHandler.loading_stop();
	}
	
	
	this.nextPhoto = function(actualPos){
		var nextPos = actualPos+1;
		this.zoomPhoto(this.photoPosList[nextPos],nextPos);
	}
	
	this.prevPhoto = function(actualPos){
		var prevPos = actualPos-1;
		this.zoomPhoto(this.photoPosList[prevPos],prevPos);
	}
	
	this.closeZoom = function(){
		this.photoSelecionada = null;
		viewHandler.unregisterView('fullGlassContent');
		viewHandler.getElementDirectly('fullGlassContent').innerHTML= '';
		viewHandler.hide_fullGlass();
	}
	
	this.evalTipo = function(dbType){
		
	}
	
	this.voltar = function(){
		if(this.albumSelecionado != null){
			this.callAlbuns(this.categoriaSelecionada);
		}else{
			this.callCategorias();
		}
	}
	
	this.start= function() {
		viewHandler.loading_start();
		this.currentModel.getGaleria();
		
	}
	
	this.rollOverBtn = function(btn){
		viewHandler.getElementDirectly(btn).style.borderColor = '#333';
	}
	
	this.rollOutBtn = function(btn){
		viewHandler.getElementDirectly(btn).style.borderColor = '#ccc';
	}
	
	this.unload= function() {
		this.currentModel = null;
	}
	
	/*
    * Metodo obrigatorio nas views
    * para garantir flexibilidade a view.
    * A view nao depende do seu holder para ser exibida.
    */
    this.setViewHolder = function(viewHolder) {
	     this.currentView = viewHolder;
    }
    
}