Imprimir = function(config)
{
	this.config  	= config;
	this.paginas 	= new Array();
	this.seccionesImpresion 	= new Array();
	this.init();
};

Imprimir.prototype = {

	init : function(){
		
		// crea popup y escribe en el
		this.vistaPrevia = window.open();
		
		this.vistaPrevia.document.write("<html>\n");
		this.vistaPrevia.document.write("<head>\n");
		this.vistaPrevia.document.write("<title></title>\n");
		this.vistaPrevia.document.write("<script defer src='objetos/js/print.js'></script>\n");
		this.vistaPrevia.document.write("<script defer src='objetos/js/printHid.js'></script>\n");
		this.vistaPrevia.document.write("<link rel='stylesheet' type='text/css' href='css/imprimir.css'/>\n");
		this.vistaPrevia.document.write("<body>\n");
		this.vistaPrevia.document.write("<center>\n");
		this.vistaPrevia.document.write("<div id='contenido' style='width:500px;'></div>\n");
		this.vistaPrevia.document.write("<form name='imp' id='imp'>\n") 
		this.vistaPrevia.document.write("<input name='btnImprimir' id='btnImprimir' type='button' value='Imprimir'/>\n");
		this.vistaPrevia.document.write("</form>\n");	
		this.vistaPrevia.document.write("</center>\n");
		this.vistaPrevia.document.write("</body>\n");
		this.vistaPrevia.document.write("</html>\n");
		this.vistaPrevia.document.close();
		
		this.vistaPrevia.document.getElementById('btnImprimir').onclick = this.ImprimirContenido.createDelegate(this);
		
		this.recuperarObj();
	
	},

	calculaAlto		: function(){ /*inicio, fin*/
		var altoTotal = 0;
		
		for(var i = 0; i < this.seccionesImpresion.length; i++){
			indice = this.seccionesImpresion[i].indice;
			id	   = this.config.colapsador.elSecciones.updateManager.datosForm[indice].colapsador.elColapsado.dom.id;
			this.seccionesImpresion[i].height = this.vistaPrevia.document.getElementById(id).offsetHeight;
			// this.config.colapsador.elSecciones.updateManager.datosForm[indice].colapsador.elColapsado.dom.offsetHeight;
			altoTotal += this.seccionesImpresion[i].height;
		}
		return altoTotal;
	},
	
	
	recuperarObj  	: function(){
		var i = 1;
		var iSecc = 0;  // id de secciones
		// var objSeccion = creaObjSeccion();
		
		// expande las secciones
		while (this.config.colapsador.elSecciones.updateManager.datosForm[i]){
			if(this.config.colapsador.elSecciones.updateManager.datosForm[i].imprimir){
				//this.config.colapsador.elSecciones.updateManager.datosForm[i].colapsador.elColapsado.autoHeight(false, 0, null, null);
				//this.config.colapsador.elSecciones.updateManager.datosForm[i].umSeccion.el.dom.style.overflow = 'visible';
			
				this.seccionesImpresion[iSecc] = new Object();
				this.seccionesImpresion[iSecc].id 			= this.config.colapsador.elSecciones.updateManager.datosForm[i].colapsador.elColapsado.dom.id;
				this.seccionesImpresion[iSecc].titulo 		= this.config.colapsador.elSecciones.updateManager.datosForm[i].titulo;
				this.seccionesImpresion[iSecc].webservice	= this.config.colapsador.elSecciones.updateManager.datosForm[i].webservice;
				this.seccionesImpresion[iSecc].height  		= this.config.colapsador.elSecciones.updateManager.datosForm[i].colapsador.elColapsado.dom.offsetHeight;
				//alert(document.getElementById(this.config.colapsador.elSecciones.updateManager.datosForm[i].colapsador.elColapsado.dom.id).offsetHeight);
				this.seccionesImpresion[iSecc].indice  		= i;
				iSecc++;
			}
			i++;
		}
		
		contenido = this.config.colapsador.elSecciones.dom.innerHTML.replace(/HEIGHT: 1px/g,'');
			
		this.vistaPrevia.document.getElementById('contenido').innerHTML = contenido;

	},
	
	obtienePaginas  : function(){
		var altoPagina	   = this.config.altoPagina; // 898;
		var altoEncabezado = 0;
		var seccionInicio;
		var ie				= -1;
		var iPaginas		= 0;
		
		if (this.config.params.encabezado.mostrar){
			ie = this.buscarSeccion(this.config.params.encabezado.seccion);
			if(ie != -1){
				altoEncabezado = this.seccionesImpresion[ie].height;
			}
		}
		
		seccionInicio  = this.buscarSeccion(this.config.params.seccionInicio);
		if (seccionInicio == -1){
			seccionInicio = 1;
		}
		
		altoPx = 30 + altoEncabezado;
		
		for(var i = 0; i < this.seccionesImpresion.length; i++){
			if (i != ie){
				altoPx += 30 + this.seccionesImpresion[i].height;
				
				if (altoPx > altoPagina){
					this.paginas[iPaginas] = new Object();
					this.paginas[iPaginas].inicio 	= seccionInicio;
					this.paginas[iPaginas].fin		= i - 1;
					seccionInicio = i;
					altoPx 		  = 30 + altoEncabezado + this.seccionesImpresion[i].height;
					iPaginas++;
				}
			}
		}
		this.paginas[iPaginas] = new Object();
		this.paginas[iPaginas].inicio 	= seccionInicio;
		this.paginas[iPaginas].fin		= i - 1;
	},

	
	buscarSeccion : function (seccion){
		for(var i = 0; i < this.seccionesImpresion.length; i++){
			if(this.seccionesImpresion[i].indice == seccion){
				return i;
			}
		}
		return -1;
	},
	
	ImprimirContenido  : function (obj){
		this.calculaAlto()
		this.obtienePaginas();
		var params = '';
		params = 'npag=' + this.paginas.length + '&';
		
		// obtiewne parametros de config
		for(var p in this.config.params){
			if(typeof this.config.params[p] != 'object'){
				params += p + '=' + this.config.params[p] + '&';
			}else{
				for(var p1 in this.config.params[p]){
					if(typeof this.config.params[p][p1] != 'function'){
						params += p1 + '=' + this.config.params[p][p1] + '&';
					}
				}
			}
		}

		// paginas de impresion
		for(var i = 0; i < this.paginas.length; i++){
			params += 'pIni' + i + '=' + this.paginas[i].inicio + '&';
			params += 'pfin' + i + '=' + this.paginas[i].fin + '&';
		}
		
		// webservices de impresion
		for(var i = 0; i < this.seccionesImpresion.length; i++){
			w = this.seccionesImpresion[i].webservice // .split('?')
			params += 't' + i + '=' + this.seccionesImpresion[i].titulo + '&';
			params += 'w' + i + '=' + w + '&';
		}

		this.vistaPrevia.printHidden( this.config.webservice + '?' + params);
	}	
};

