var Reportes_ventas=function(){
	this.baseUrl=null;
	this.windowId=null;
	this.initializeEnviroment=function(url,winId){
		this.baseUrl=url;
		this.windowId=winId;
		
		this.initializeGUIComponets();
		this.initializeListeners();
	}
	this.initializeGUIComponets=function(){
		/*Checkboxes*/
		$('.i-checks').iCheck({
			checkboxClass: 'icheckbox_square-green',
			radioClass: 'iradio_square-green',
		});
		/*------------------------------- Reporte de ventas -------------------------------*/
		var inicio_reporte_venta=$("#"+this.windowId+" #reportes-venta-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
				var newDate=new Date(ev.date);
				if(!isNaN(newDate)){
					newDate.setDate(newDate.getDate());
					fin_reporte_venta.datepicker("update", newDate);
					$('#reportes-venta-hasta')[0].focus();
				}
		});
		var fin_reporte_venta=$("#"+this.windowId+" #reportes-venta-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_venta.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_venta.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
		/*--------------------------- Reporte de ventas credito---------------------------*/
		var inicio_reporte_venta_credito=$("#"+this.windowId+" #reportes-venta-credito-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
				var newDate=new Date(ev.date);
				if(!isNaN(newDate)){
					newDate.setDate(newDate.getDate());
					fin_reporte_venta_credito.datepicker("update", newDate);
					$('#reportes-venta-credito-hasta')[0].focus();
				}
		});
		var fin_reporte_venta_credito=$("#"+this.windowId+" #reportes-venta-credito-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_venta_credito.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_venta_credito.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
		/*----------------------------- Reporte de utilidades -----------------------------*/
		var inicio_reporte_utilidad=$("#"+this.windowId+" #reportes-utilidad-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
				var newDate=new Date(ev.date);
				if(!isNaN(newDate)){
					newDate.setDate(newDate.getDate());
					fin_reporte_utilidad.datepicker("update", newDate);
					$('#reportes-utilidad-hasta')[0].focus();
				}
		});
		var fin_reporte_utilidad=$("#"+this.windowId+" #reportes-utilidad-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_utilidad.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_utilidad.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
		/*----------------------------- Reporte de comisiones ---------------------------*/
		var inicio_reporte_comisiones=$("#"+this.windowId+" #reportes-comisiones-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
				var newDate=new Date(ev.date);
				if(!isNaN(newDate)){
					newDate.setDate(newDate.getDate());
					fin_reporte_comisiones.datepicker("update", newDate);
					$('#reportes-comisiones-hasta')[0].focus();
				}
		});
		var fin_reporte_comisiones=$("#"+this.windowId+" #reportes-comisiones-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_comisiones.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_comisiones.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
		/*------------------------ Reporte de ventas por lineas -------------------------*/
		var inicio_reporte_ventasxlinea=$("#"+this.windowId+" #reportes-ventasxlinea-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
			var newDate=new Date(ev.date);
			if(!isNaN(newDate)){
				newDate.setDate(newDate.getDate());
				fin_reporte_ventasxlinea.datepicker("update", newDate);
				$('#reportes-ventasxlinea-hasta')[0].focus();
			}
		});
		var fin_reporte_ventasxlinea=$("#"+this.windowId+" #reportes-ventasxlinea-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_ventasxlinea.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_ventasxlinea.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
		/*----------------------- Reporte de productos estrellas -----------------------*/
		var inicio_reporte_productosestrellas=$("#"+this.windowId+" #reportes-productosestrellas-desde").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			autoclose:true
		}).on('changeDate',function(ev){
			var newDate=new Date(ev.date);
			if(!isNaN(newDate)){
				newDate.setDate(newDate.getDate());
				fin_reporte_productosestrellas.datepicker("update", newDate);
				$('#reportes-productosestrellas-hasta')[0].focus();
			}
		});
		var fin_reporte_productosestrellas=$("#"+this.windowId+" #reportes-productosestrellas-hasta").datepicker({
			language:'es',
			format:'yyyy-mm-dd',
			beforeShowDay:function(date){
				if (!inicio_reporte_productosestrellas.datepicker("getDate").valueOf()) {
					return date.valueOf()>=new Date().valueOf();
				} else {
					return date.valueOf()>inicio_reporte_productosestrellas.datepicker("getDate").valueOf()-1;
				}
			},
			autoclose:true
		}).on('changeDate',function(ev){});
	}
	/*Eventos*/
	this.initializeListeners=function(){
		var _this=this;
		/*BOTON Generar reporte de ventas  (CLICK)*/
		$("#"+this.windowId+" #reportes-ventas-generar-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-ventas-form");
			if(_this.validar($frm)){
				window.open(_this.baseUrl+"reportes/reporte_ventas?devs="+$('#'+_this.windowId+' #reportes-venta-devoluciones').is(':checked')+"&prods="+$('#'+_this.windowId+' #reportes-venta-productos').is(':checked')+"&w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			}
		});
		/*BOTON Generar reporte de ventas  credito (CLICK)*/
		$("#"+this.windowId+" #reportes-ventas-credito-generar-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-ventas-credito-form");
			if(_this.validar($frm)){
				window.open(_this.baseUrl+"reportes/reporte_ventas_credito?w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			}
		});
		/*BOTON Generar reporte de utilidades  (CLICK)*/
		$("#"+this.windowId+" #reportes-utilidad-generar-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-utilidades-form");
			if(_this.validar($frm)){					
				window.open(_this.baseUrl+"reportes/reporte_utilidades?w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			}
		});
		/*BOTON Generar reporte de comisiones  (CLICK)*/
		$("#"+this.windowId+" #reportes-comisiones-generar-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-comisiones-form");
			if(_this.validar($frm)){					
				window.open(_this.baseUrl+"reportes/reporte_comisiones?e=true&w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			}
		});
		/*BOTON Generar reporte de ventas por linea  (CLICK)*/
		$("#"+this.windowId+" #reporte-ventasxlinea-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-ventasxlinea-form");
			if(_this.validar($frm)){
				window.open(_this.baseUrl+"reportes/reporte_lineas?prods="+$('#'+_this.windowId+' #reportes-ventasxlinea-productos').is(':checked')+"&w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			}
		});
		/*BOTON Generar reporte de productos estellas (CLICK)*/
		$("#"+this.windowId+" #reportes-productosestrellas-btn").click(function(e){
			e.preventDefault();
			$frm=$("#"+_this.windowId+" #reporte-productosestrellas-form");
			if(_this.validar($frm)){		
				window.open(_this.baseUrl+"reportes/reporte_productos_estrellas?w="+_this.b64EncodeUnicode(JSON.stringify(_this.getWheres($frm))));
			} 
		});
	},
	/*------- FUNCIONES -------*/
	/*Validar datos*/
	this.validar=function($frm){
		var _this=this;
		var valid=true;
		/*Validar inputs*/
		$.each($frm.find($("input, select")),function(i,el){
			$el=$(el);
			if($el.attr("data-required")==="required"){
				switch($el.prop("tagName")){
					case "INPUT":
						switch($el.attr("type")){
							case "text": case "number": /*textbox*/
								if($el.val()===""){
									valid=false;
									_this.showMsg("error","Ingrese un valor v&aacute;lido para el campo: "+$el.attr("data-fieldName"));
									$el.focus();
								}
							break;
						}
					break;
					case "SELECT":/*Select*/
						if($el.val()==null || $el.val()===""){
							valid=false;
							_this.showMsg("error","Ingrese un valor v&aacute;lido para el campo: "+$el.attr("data-fieldName"));
							$el.focus();
						}
					break;
				}
			}
			return valid;		
		});
		return valid;
	}
	this.getWheres=function($frm){
		var wheres={};
		$.each($frm.find(".report-field"),function(i,el){
			$el=$(el);
			if($el.prop("tagName")=="INPUT"){
				switch($el.attr("type")){
					case "text": case "number": /*textbox*/
						if($el.val()!="")
							wheres[$el.attr("data-fieldDBName")]=$el.val();
					break;
				}
			}else if($el.prop("tagName")=="SELECT"){/*Select*/
				if($el.val()!="")
					wheres[$el.attr("data-fieldDBName")]=$el.val();
			}
		});
		return wheres;
	}
	this.b64EncodeUnicode=function(str) {
		return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
			return String.fromCharCode('0x' + p1);
		}));
	}
	/*Mostrar mensajes*/
	this.showMsg=function(tipo, mensaje){
		toastr.options = {
			"closeButton": true,
			"progressBar": true,
			"positionClass": "toast-top-right"
		}
		toastr[tipo](mensaje);
	}
	
};