Advertisement
Guest User

jachable

a guest
Oct 25th, 2007
1,496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Documentado creado el 19 de Octubre de 2007.
  2.  */
  3. var error='Debe elegir una opción válida';  //Mensaje de error
  4. var mostrar = false;     //Bandera para mostrar|ocultar la tabla de búsqueda avanzada
  5. var cuenta_producto = 0; //Número de productos en la lista
  6. var cons = 0;
  7.  
  8. var clave_producto = Array();   //Almacena las claves de los productos, impidiendo que se anexe más de una vez el mismo.
  9. var datos_producto = Array();
  10.  
  11. //set_origenpedido(valor) asigna al campo hidden temporal (tmp_pedido) el valor 0 contrato o 1 particular
  12. function set_origenpedido(valor){
  13.     var input, combo, tmp;
  14.     combo = document.getElementById('cliente_nombre');
  15.     input = document.getElementById('clave_contrato');
  16.  
  17.     if(valor == 0){
  18.         combo.setAttribute('disabled', true);
  19.         input.removeAttribute('disabled');
  20.     }
  21.         else{
  22.             input.value='';
  23.             input.setAttribute('disabled', true);
  24.             combo.removeAttribute('disabled');
  25.         }
  26.        
  27.     tmp = document.getElementById('tmp_pedido');
  28.     tmp.value = valor;
  29.    
  30.     //Si es un contrato agregar buscar clave del cliente. Si es un particular remover clave del cliente.
  31.     var combo_box = document.getElementById('tipo_busqueda');
  32.     if(tmp.value == 0 && combo_box.options.length == 5){ //Agregar 
  33.         var choice;
  34.             choice = document.createElement('option');
  35.             choice.value = 5;
  36.             choice.appendChild(document.createTextNode('Clave del Cliente'));
  37.             combo_box.appendChild(choice);             
  38.     }
  39.         else if(tmp.value == 1 && combo_box.options.length == 6){ //Quitar
  40.             combo_box.removeChild(combo_box.lastChild);
  41.         }
  42.        
  43.     return;
  44. }
  45.  
  46. //showHidden() Muestra u oculta la tabla de búsqueda avanzada
  47. function showHidden(){
  48.     var tabla_busqueda = document.getElementById('b_avanzada');
  49.  
  50.     if(!mostrar){
  51.         mostrar = true;
  52.         tabla_busqueda.style.display = 'block';
  53.     }
  54.         else{
  55.             mostrar = false;
  56.             tabla_busqueda.style.display = 'none';
  57.         }
  58.  
  59.     return;
  60. }
  61.  
  62. //reiniciaControles() Limpia los controles principales de búsqueda avanzada
  63. function reiniciaControles(){
  64.     var criterio = document.getElementById('criterio');
  65.     criterio.removeAttribute('value');
  66.     criterio.value = '';
  67.  
  68.     var combo_box = document.getElementById('resultado');
  69.     while(combo_box.childNodes.length > 0)
  70.         combo_box.removeChild(combo_box.childNodes[0]);
  71.     var choice;
  72.         choice = document.createElement('option');
  73.         choice.appendChild(document.createTextNode('---SELECCIONE---'));
  74.         combo_box.appendChild(choice);
  75.    
  76.     //limpiaPuntosEntrega();
  77.     activarAdd();
  78.     return;
  79. }
  80.  
  81. //buscarCriterio() Búsqueda Avanzada según el tipo seleccionado y el criterio escrito en la Tabla Productos con el script get_producto.
  82. function buscarCriterio(){
  83.     activarAdd();
  84.     var  tipo_busqueda = document.getElementById('tipo_busqueda').value;
  85.     var  criterio = document.getElementById('criterio').value;
  86.     if(tipo_busqueda != "" && tipo_busqueda != "---SELECCIONE---"){
  87.         if(criterio != ""){
  88.             if(tipo_busqueda == 5)
  89.                 return alert('Aún no esta implementada la opción\nClave del Cliente');
  90.             var ajaxReq = ajaxFunction();
  91.             if(ajaxReq){
  92.                 // Create a function that will receive data sent from the server
  93.                 ajaxReq.onreadystatechange = function(){
  94.                     if(ajaxReq.readyState == 4){
  95.                         if(ajaxReq.status == 200){
  96.                     //Activese solo para debuguear
  97.                             //var valor = ajaxReq.responseText;
  98.                             //alert(valor);
  99.                         var valor   = ajaxReq.responseXML.getElementsByTagName('evaluado')[0].firstChild.data;
  100.                         var mensaje = ajaxReq.responseXML.getElementsByTagName('mensaje')[0].firstChild.data;
  101.  
  102.                             if(valor == 1){ //Existen Clientes
  103.                                 //alert(mensaje);                          
  104.                                 var xmlDoc = ajaxReq.responseXML;
  105.                                 var listaNombres = xmlDoc.getElementsByTagName('nombres')[0];
  106.                                 var nombresProductoXML = listaNombres.getElementsByTagName('nombre_producto');
  107.        
  108.                                 var listaClaves = xmlDoc.getElementsByTagName('claves')[0];
  109.                                 var clavesClienteXML = listaClaves.getElementsByTagName('clave_producto');
  110.                                 var nombre_producto = new Array();
  111.                                 var clave_producto = new Array();                      
  112.                                 var currentState = null;
  113.        
  114.                                 for(var i=0; i< nombresProductoXML.length; i++){
  115.                                     currentState = nombresProductoXML[i];
  116.                                     nombre_producto[i] = currentState.childNodes[0].nodeValue;
  117.                                     currentState = null;
  118.                                     currentState = clavesClienteXML[i];
  119.                                     clave_producto[i] = currentState.childNodes[0].nodeValue;                          
  120.                                 }
  121.                
  122.                             //Generar el combo
  123.                                 var combo_box = document.getElementById('resultado');                                              
  124.                                 while(combo_box.childNodes.length > 0)
  125.                                     combo_box.removeChild(combo_box.childNodes[0]);
  126.                                 // Agrega algunas opciones:
  127.                                 var choice;
  128.                                     choice = document.createElement('option');
  129.                                     choice.appendChild(document.createTextNode('---SELECCIONE---'));
  130.                                     combo_box.appendChild(choice);                       
  131.                                     for(var i=0; i < nombre_producto.length; i++){
  132.                                         choice = document.createElement('option');
  133.                                         choice.value = clave_producto[i];
  134.                                         choice.appendChild(document.createTextNode(nombre_producto[i]));
  135.                                     combo_box.appendChild(choice);
  136.                                     }
  137.                             }
  138.                                 else{//No existen Productos
  139.                                     var combo_box = document.getElementById('resultado');  
  140.                                     while(combo_box.childNodes.length > 0)
  141.                                         combo_box.removeChild(combo_box.childNodes[0]);
  142.                                     var choice;
  143.                                         choice = document.createElement('option');
  144.                                         choice.appendChild(document.createTextNode('---SELECCIONE---'));
  145.                                         combo_box.appendChild(choice);
  146.                                     alert(mensaje);
  147.                                 }
  148.                         }//Valida Status
  149.                     }//Valida State
  150.                 }//onreadystatechange
  151.                 criterio = encodeURI(criterio);
  152.                 var aleatorio=Math.random();
  153.                 ajaxReq.open("GET", "get_producto.php?act=1&tipo_busqueda="+tipo_busqueda+"&criterio="+criterio+"&rnd="+aleatorio, true);
  154.                 ajaxReq.send(null);
  155.             }//Valida Ajax
  156.             else
  157.                 alert("El Navegador no soporta llamados al objeto XMLHttpRequest");
  158.         }//Valida Criterio y Tipo_Busqueda
  159.         else
  160.             return  alert("Debe escribir un criterio de búsqueda");
  161.     }//Valida Tipo_Busqueda
  162.         else
  163.             return  alert(error);
  164. }
  165.  
  166. //Activa el boton para agregar los puntos de entrega en función del cliente seleccionado.
  167. function activarAdd(){
  168.     var resultado =     document.getElementById('resultado').value;
  169.     var anexa_fila =    document.getElementById('anexa_producto');
  170.  
  171.     if(resultado != "" && resultado != "---SELECCIONE---"){
  172.         anexa_fila.removeAttribute("disabled");
  173.     }
  174.         else{
  175.                 anexa_fila.setAttribute('disabled', true);
  176.             }
  177. }
  178.  
  179. function getDatos(producto_clave){ //Cero (0) busca si la clave es válida, uno (1) crea la fila con la información de la BD /*accion, */
  180.     var ajaxReq = ajaxFunction();
  181.     if(ajaxReq){
  182.         ajaxReq.onreadystatechange = function(){
  183.             if(ajaxReq.readyState == 4){
  184.                 if(ajaxReq.status == 200){  //Activese solo para debuguear
  185.                 //var valor = ajaxReq.responseText; alert(valor);
  186.                 var valor   = ajaxReq.responseXML.getElementsByTagName('evaluado')[0].firstChild.data;
  187.                 var mensaje = ajaxReq.responseXML.getElementsByTagName('mensaje')[0].firstChild.data;
  188.  
  189.                     if(valor == 1){ //Existe la Clave del producto
  190.                         //alert(mensaje);
  191.                         var claveXML    = ajaxReq.responseXML.getElementsByTagName('clave_producto')[0].firstChild.data;
  192.                         var nombreXML   = ajaxReq.responseXML.getElementsByTagName('nombre_producto')[0].firstChild.data;
  193.                         var umedidaXML  = ajaxReq.responseXML.getElementsByTagName('umedida_producto')[0].firstChild.data;
  194.                         var precioXML   = ajaxReq.responseXML.getElementsByTagName('precio_producto')[0].firstChild.data;
  195.                        
  196. //---------------------- Inicia declaración de variables ---------------------------
  197.                         var col_nombre= Array('filaprod','producto_id','cantidad','descripcion','umedida','precio','importe', 'Quitar');
  198.                         var tabla='valores_producto';
  199.                         var valores_control =   document.getElementById(tabla); //tbody valores_producto
  200.                         var consecutivo = cons++;
  201.                         var id_control = cuenta_producto++;
  202. //---------------------- Termina declaración de variables ---------------------------
  203.                         var fila_control =  document.createElement("tr");
  204.                         fila_control.setAttribute('id',col_nombre[0]+consecutivo);
  205.                    
  206.                         var columna_clave       = document.createElement('input');  //Tipo text
  207.                         var columna_cantidad    = document.createElement('input');  //Tipo text
  208.                         var columna_descripcion = document.createElement('input');  //Tipo text
  209.                         var columna_umedida     = document.createElement('input');  //Tipo text
  210.                         var columna_precio      = document.createElement('input');  //Tipo text
  211.                         var columna_importe     = document.createElement('input');  //Tipo text
  212.                         var btnBorrar =         document.createElement('input');    //Tipo button
  213.                        
  214.                         set_Atributos(columna_clave, col_nombre[1]+'[]', col_nombre[1]+id_control, claveXML,  8, 0);    //Columna de Clave
  215.                         columna_clave.onfocus= function(){ this.blur(); };
  216.                        
  217.                         set_Atributos(columna_cantidad, col_nombre[2]+'[]', col_nombre[2]+id_control, 0,  4, 0);        //Columna de Cantidad
  218.                         columna_cantidad.onkeyup=
  219.                         function(){
  220.                             if(!isNaN(this.value) && this.value > 0){   //alert('Cantidad Válida para '+this.id);
  221.                                 this.value = parseInt(this.value,10)
  222.                                 calculaImporte(this.id);
  223.                             }
  224.                                 else{
  225.                                     var tam = this.id.charAt(this.id.length-1);
  226.                                     var importe = document.getElementById('importe'+tam);
  227.                                     importe.value = 0;
  228.                                     alert('Cantidad Inválida\nPor Favor escriba el # de productos');
  229.                                 }
  230.                         };
  231.                        
  232.                         set_Atributos(columna_descripcion,  col_nombre[3]+'[]', col_nombre[3]+id_control, nombreXML, 20, 0);    //Columna de Descripción
  233.                         columna_descripcion.onfocus= function(){ this.blur(); };
  234.                        
  235.                         set_Atributos(columna_umedida, col_nombre[4]+'[]', col_nombre[4]+id_control, umedidaXML,  10, 0);       //Columna de Unidad de Medida
  236.                         columna_umedida.onfocus= function(){ this.blur(); };
  237.                        
  238.                         set_Atributos(columna_precio, col_nombre[5]+'[]', col_nombre[5]+id_control, precioXML,  6, 0);  //Columna de Precio
  239.                         columna_precio.onfocus= function(){ this.blur(); };
  240.                        
  241.                         set_Atributos(columna_importe, col_nombre[6]+'[]', col_nombre[6]+id_control, 0,  6, 0); //Columna de Importe
  242.                         columna_importe.onfocus= function(){ this.blur(); };
  243.                        
  244.                         set_Atributos(btnBorrar,col_nombre[7]+'[]',col_nombre[7]+consecutivo,'Quitar', 6,2);    //Columna del botón Quitar
  245.                         btnBorrar.onclick= function(){ remove_fila(tabla, col_nombre[0]+consecutivo); }
  246.                    
  247.                         fila_control.appendChild(crearColumna(columna_clave));      //Clave
  248.                         fila_control.appendChild(crearColumna(columna_cantidad));   //Cantidad
  249.                         fila_control.appendChild(crearColumna(columna_descripcion));//Descripción
  250.                         fila_control.appendChild(crearColumna(columna_umedida));    //Unidad de Medida
  251.                         fila_control.appendChild(crearColumna(columna_precio));     //Precio
  252.                         fila_control.appendChild(crearColumna(columna_importe));    //Importe
  253.                         fila_control.appendChild(crearColumna(btnBorrar));          //Borrar
  254.                        
  255.                         valores_control.appendChild(fila_control);
  256.  
  257.                     }
  258.                         else{//No existe el Producto
  259.                             alert(mensaje);
  260.                         }
  261.                 }//Valida Status
  262.             }//Valida State
  263.         }//onreadystatechange
  264.         var aleatorio=Math.random();
  265.         ajaxReq.open("GET", "get_producto.php?act=2&producto_clave="+producto_clave+"&rnd="+aleatorio, true);
  266.         ajaxReq.send(null);
  267.     }//Valida Ajax
  268.     else
  269.         alert("El Navegador no soporta llamados al objeto XMLHttpRequest");
  270.        
  271.     return;
  272. }
  273.  
  274. //addFila() Agrega los productos del pedido a la tabla TBODY valores_producto, recibe hotkey (false|true) anexo por clave o B. Avanz.
  275. function addFila(hotkey){
  276.     var arr_ = Array();
  277.     var producto;
  278.     arr_= clave_producto;
  279.    
  280.     if(hotkey){
  281.         producto = document.getElementById('clave_producto').value;
  282.         if(producto == '' || producto == ' ' || isNaN(producto))
  283.             return alert('Debe escribir la clave del producto!!');
  284.     }
  285.        else{
  286.            producto = document.getElementById('resultado').value;
  287.            }
  288.  
  289.     var existe = false;
  290.     for(var i=0; i < arr_.length; i++){
  291.         if(producto == arr_[i]){
  292.             existe = true;
  293.             break;
  294.         }
  295.     }
  296.  
  297.     if(existe){
  298.         alert('El elemento ya fue agregado, por favor ingrese uno diferente');
  299.         return;
  300.     }
  301.         else{
  302.             add_Clave(producto,'producto'); //producto
  303.             //Busqueda de datos consulta ajax
  304.             getDatos(producto); //Crea fila de inputs con la información de la BD /*1, */
  305.         }
  306.        
  307.     return;
  308. }
  309.  
  310. //set_Atributos() Establece los atributos del elemento creado, en este caso input
  311. function set_Atributos(input_pe, nombre, id, valor, tamanio, tipo){
  312.     var tipo_input;
  313.    
  314.     switch(tipo){
  315.         case 0: tipo_input = 'text';
  316.             break;
  317.         case 1: tipo_input = 'hidden';
  318.             break;
  319.         case 2: tipo_input = 'button';
  320.             break;
  321.         default: alert('La opción no es válida');
  322.             break;
  323.     }
  324.    
  325.     input_pe.setAttribute('type',tipo_input);
  326.     input_pe.setAttribute('name',nombre);
  327.     input_pe.setAttribute('id',id);
  328.     input_pe.setAttribute('value',valor);
  329.     input_pe.setAttribute('size',tamanio);
  330.  
  331.     return input_pe;
  332. }
  333.  
  334. //crearColumna() Crea una columna para los Inputs recibidos
  335. function crearColumna(elemento){
  336.     var columna = document.createElement("td");
  337.     columna.appendChild(elemento);
  338.     return columna;
  339. }
  340.  
  341. //remove_fila(tabla,  id_elem)
  342. function remove_fila(tabla, id_elem){
  343.     var cadena ='';
  344.     var tipo;
  345.  
  346.     switch(tabla){
  347.         case 'valores_producto':    cadena = 'Producto';    tipo=0;
  348.             break;
  349.         default: alert('La opción no es válida');
  350.             break;
  351.     }
  352.  
  353.     var valores_ =  document.getElementById(tabla); //tbody
  354.     var val_ = document.getElementById(id_elem);
  355.  
  356.     if(confirm('Desea Quitar este '+cadena+'\nAl presionar Aceptar será eliminado')){
  357.     //busqueda del valor a borrar
  358.         if (val_.hasChildNodes()){
  359.             var children = val_.childNodes;
  360.             for (var i = 0; i < children.length; i++){
  361.                 if(children[i].nodeType == 1){ //http://developer.mozilla.org/en/docs/DOM:element.nodeType              //alert(children[i].nodeName);
  362.                     if(children[i].hasChildNodes()){
  363.                         var td = children[i].childNodes;
  364.                         for (var j = 0; j < td.length; j++){    //alert(td[j].nodeName);    //Paso por INPUTS
  365.                             //alert('nombre: '+td[j].nodeName +'\ntipo: '+td[j].nodeType +'\nvalor: '+td[j].value+'\nid: '+td[j].id+'\nname: '+td[j].name);
  366.                             if(tipo == 0){
  367.                                 if(td[j].name == 'producto_id[]'){
  368.                                     remove_Clave(td[j].value,'producto');//alert('valor a buscar: '+td[j].value);
  369.                                 }
  370.                             }
  371.                         }//Recorrido por lo elementos de la fila (Inputs), tomando solo el valor del campo vehiculo_id o chofer_id
  372.                     }//Si tiene hijos (columnas) los revisara uno por uno
  373.                 }//Recorre los items de la fila solo si son de tipo Elemento
  374.             }//Pasa el ID de la fila como parametro.
  375.         }//Si tiene hijos entra
  376.     //fin busqueda
  377.  
  378.     valores_.removeChild(val_);
  379.     alert('Se ha borrado el elemento de la Tabla '+cadena);
  380.                
  381.         if(tipo == 0){
  382.             cuenta_producto--;                  //alert('cuenta producto:'+cuenta_producto);
  383.         }
  384.                    
  385.         corrigeID(tabla);
  386.        
  387.     }
  388.         else{
  389.             alert('El elemento '+cadena+' No será borrado');
  390.             }
  391.  
  392.     return;
  393. }
  394.  
  395. //add_Clave() Agregar la clave del vehiculo, chofer
  396. function add_Clave(clave, nombre_arreglo){
  397.     var i=0;
  398.     switch(nombre_arreglo){
  399.         case 'producto':  i = clave_producto.length;    clave_producto[i]= clave;   //var arr_= clave_producto; //contenido
  400.             break;
  401.         default: alert('La opción no es válida');
  402.             break;
  403.     }
  404.     return;
  405. }
  406.  
  407. //remove_Clave() Agregar la clave del productos
  408. function remove_Clave(clave, nombre_arreglo){
  409.     var i=0;
  410.     var existe=false;
  411.     var pos;
  412.     switch(nombre_arreglo){
  413.         case 'producto':  var arr_= clave_producto;
  414.             break;
  415.         default: alert('La opción no es válida');
  416.             break;
  417.     }
  418.  
  419.     var tmp = new Array();
  420.     for(i=0; i < arr_.length; i++){
  421.         if(arr_[i] == clave){
  422.             pos = i;
  423.             existe = true;
  424.             break;
  425.         }
  426.     }
  427.  
  428.     if(existe){
  429.         for(j=0, i=0; j < arr_.length; j++){
  430.             if(j != pos){
  431.                 tmp[i++]=arr_[j];
  432.             }
  433.         }
  434.         clave_producto = tmp;
  435.     }
  436.  
  437.     return;
  438. }
  439.  
  440. /* Esta Función cambiará los ID del grupo pasado como parámetro donde 0.- valores_producto
  441.  * Los ID deben quedar en forma secuencial para que las funciones no tengan problemas para acceder a los datos y realizar las operaciones.
  442.  */
  443. //corrige_ID(tabla_valores)
  444. function corrigeID(tabla_valores){
  445.     var valores_ = document.getElementById(tabla_valores);
  446.     var nuevo_id = -1;
  447.     var tipo;
  448.     switch(tabla_valores){
  449.         case 'valores_producto':  tipo=0;   break;
  450.         default: alert('La opción no es válida'); break;
  451.     }
  452.  
  453.     if (valores_.hasChildNodes()){
  454.         var children = valores_.childNodes;
  455.         for (var i = 0; i < children.length; i++){
  456.             if(children[i].nodeType == 1){ //http://developer.mozilla.org/en/docs/DOM:element.nodeType              //alert(children[i].nodeName);
  457.                 if(children[i].hasChildNodes()){
  458.                     var tr = children[i].childNodes;
  459.                     for (var j = 0; j < tr.length; j++){            //alert(tr[j].nodeName);
  460.                         if(tr[j].hasChildNodes()){
  461.                             var ele = tr[j].childNodes;
  462.                             for (var k = 0; k < ele.length; k++){   //alert('nombre: '+ele[k].nodeName +'\ntipo: '+ele[k].nodeType +'\nvalor: '+ele[k].value+'\nid: '+ele[k].id+'\nname: '+ele[k].name);                               
  463.                                 if(ele[k].nodeType == 1){           //alert(nuevo_id);
  464.                                     if(tipo == 0){
  465.                                         if(ele[k].name == 'producto_id[]')
  466.                                             ele[k].id = 'producto_id'+nuevo_id;
  467.                                         if(ele[k].name == 'cantidad[]')
  468.                                             ele[k].id = 'cantidad'+nuevo_id;
  469.                                         if(ele[k].name == 'descripcion[]')
  470.                                             ele[k].id = 'descripcion'+nuevo_id;
  471.                                         if(ele[k].name == 'umedida[]')
  472.                                             ele[k].id = 'umedida'+nuevo_id;
  473.                                         if(ele[k].name == 'precio[]')
  474.                                             ele[k].id = 'precio'+nuevo_id;
  475.                                         if(ele[k].name == 'importe[]')                                         
  476.                                             ele[k].id = 'importe'+nuevo_id;
  477.                                     }
  478.                                 }//Cambio de IDs
  479.                             }//Recorrido de elementos Input
  480.                         }//Evalua si tiene hijos
  481.                     }//Recorrido de elementos TD
  482.                     nuevo_id++;
  483.                 }//Evalua si tiene hijos
  484.             }//Evalua si el nodo es de tipo elemento
  485.         }//Recorrido de los hijos de valores_pe, valores_caseta, valores_vehiculo, valores_chofer
  486.         //Se corrije el contador variable global
  487.         if(tipo == 0)
  488.             cuenta = nuevo_id;
  489.     }//Evalua si tiene hijos el Nodo
  490.  
  491.     return true;
  492. }
  493.  
  494. //calculaImporte(id_cantidad) recibe el ID del campo cantidad y a partir de este obtiene el precio (multiplica) y lo fija en importe
  495. function calculaImporte(id_cantidad){
  496.     var tam = id_cantidad.charAt(id_cantidad.length-1);
  497.     var cantidad = document.getElementById(id_cantidad);
  498.     var precio = document.getElementById('precio'+tam);
  499.     var importe = document.getElementById('importe'+tam);
  500.    
  501.     importe.value = precio.value * cantidad.value;
  502.    
  503.     return;
  504. }
  505.  
  506. //function validar_llenado() Comprueba que los importes sean mayor a cero y devuelve TRUE. Si no es asi envia un mensaje de error y devuelve FALSE
  507. function validar_llenado(){
  508.     var i, importe;
  509.     if(cuenta_producto > 0){
  510.         for(i=0; i < cuenta_producto; i++){
  511.             importe = document.getElementById('importe'+i);
  512.             if(importe.value == 0){
  513.                 alert('Debe escribir una cantidad para los productos');
  514.                 return false;
  515.             }
  516.         }
  517.     }
  518.         else{
  519.             alert('Debe agregar productos a su pedido antes de guardar\nSi no desea guardar presione Cancelar');
  520.             return false;
  521.         }
  522.    
  523.     return true;
  524. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement