-1) { var s = source.indexOf("", e); // Se agregan las etiquetas al arreglo de datos scripts.push(source.substring(s_e+1, e)); // Se separan de la respuesta asíncrona source = source.substring(0, s) + source.substring(e_e+1); } // Iteración de cada script obtenido para ejecutarlo for(var i = 0; i < scripts.length; i++) { try { if (window.execScript) { window.execScript(scripts[i]) } else { eval(scripts[i]); } } catch(ex) { // error } } // Se devuelve el código ya limpio del script return source; } // END AJAX_ParseRequestScript /** * Analiza el tipo de petición y ejecuta una fucnión de acuerdo a ello. */ function AJAX_GetRequestType(url, state) { Ext.Ajax.request({ url: url, method: 'POST', params: { state: state, task: 'getAJAXRequestType' }, success: function(response, opts) { data = Ext.decode(response.responseText); switch(data.ajaxRequestType) { case 1: //console.log('Caso 1'); AJAX_Request(data.elID, data.url, data.insertionMethod, data.state, '', 0); break; case 2: //console.log('Caso 2'); AJAX_Request(data.elID, data.url, data.insertionMethod, data.state, '', 0); break; case 3: //console.log('Caso 3'); AJAX_LoadURL(data.url, data.state); break; } }, failure: function(response, opts) { //alert('AJAX_GetRequestType: server-side failure with status code ' + response.status); } }); } // END AJAX_GetRequestType /** * Genera el código del URL especificado */ function AJAX_LoadURL(url, state) { Ext.Ajax.request({ url: url, method: 'POST', params: { state: state }, success: function(response, opts) { recentHash = state; currentHash = state; window.location.hash = '!/' + state; var jsonData = Ext.decode(response.responseText); var fnName = jsonData.fn + '(args);'; var fn = new Function('args', fnName); fn(jsonData.args); //window[jsonData.fn](jsonData.args); @todo: eliminar después de probar todo //alert('AJAX_LoadURL: server-side success with status code ' + response.status + ', url: ' + url + ', state: ' + state); }, failure: function(response, opts) { //alert('AJAX_LoadURL: server-side failure with status code ' + response.status + ', url: ' + url + ', state: ' + state); } }); } // END AJAX_LoadURL var recentHash = undefined; var currentHash = window.location.hash.split('#!/')[1]; window.onload = function() { initialiseStateFromURL(); setInterval(initialiseStateFromURL, 500); } function initialiseStateFromURL() { //console.log('recentHash: ' + recentHash); //console.log('currentHash: ' + currentHash); if(recentHash == undefined && currentHash != undefined) { //console.log('Caso 1, desde bookmark'); recentHash = currentHash; AJAX_GetRequestType('http://blc-studio.com/intfc.php?App', currentHash); } if(recentHash != undefined && currentHash != undefined) { if(recentHash != currentHash) { //console.log('Caso 2, cambiaron de página, actualizar a hash: ' + currentHash); AJAX_GetRequestType('http://blc-studio.com/intfc.php?App', currentHash); } } currentHash = window.location.hash.split('#!/')[1]; } /** * Elimina un elemento del DOM definido por el id 'elID' */ function DOM_RemoveEl(elID) { if(Ext.get(elID)) { Ext.get(elID).remove(); } else { // TODO: notificar que el layer o elID no existe } } // END DOM_RemoveEl /** * Oculta un elemento definido por el id 'elID' */ function FX_HideEl(elID) { if(Ext.get(elID)) { Ext.get(elID).fadeOut({ endOpacity: 0, easing: 'easeOut', duration: .5, remove: false, useDisplay: true }); } else { // TODO: notificar que el layer o elID no existe } } // END FX_HideEl /** * Muestra un elemento definido por el id 'elID' * @ */ function FX_ShowEl(elID, endOpacity) { if(Ext.get(elID)) { endOpacity = endOpacity || 1; Ext.get(elID).fadeIn({ endOpacity: endOpacity, easing: 'easeOut', duration: .5, remove: false, useDisplay: true }); } else { // TODO: notificar que el layer o elID no existe } } // END FX_ShowEl /** * Muestra el elemento definido por showElID y oculta el elemento hideElID */ function FX_SwitchEl(hideElID, showElID) { if(Ext.get(showElID)) { if(Ext.get(showElID).isVisible()) { FX_HideEl(showElID); } var task = new Ext.util.DelayedTask(function() { FX_HideEl(hideElID); FX_ShowEl(showElID); }); task.delay(500); } else { // TODO: notificar que el layer o elID no existe } } // END FX_ShowEl /** * Proporciona un mecanismo para desplegar una mascara mientras se lee el contenido de la pagina */ function FX_LoadMask(elID) { if(Ext.get(elID)) { var height = Ext.lib.Dom.getViewHeight(true); var width = Ext.lib.Dom.getViewWidth(); Ext.get(elID).setStyle({ width: width + 'px', height: height + 'px' }).show(); Ext.get(elID).setOpacity(0.8); } else { // TODO: notificar que el layer o elID no existe } } // END FX_LoadMask /** * Función principal. * * Debe llamarse antes de enviar un formulario para validarlo de acuerdo a como estén especificados en los campos */ function validateForm(divContainer) { var isValid = true; /** * Función que regresa las posibles variaciones para los números telefónicos */ function phoneRegex () { return [ new RegExp(/^[\d\-\. \+\(\)]+$/), // cualquier combinación de carácteres validos new RegExp(/^[\d\-\. \+\(\)]+ # {0,1}\d+ *$/), // con extensión en forma de # new RegExp(/^[\d\-\. \+\(\)]+ ext {0,1}\d+ *$/) // con extensión en forma de ext ]; } /** * Función que regresa las posibles variaciones para las fechas */ function dateRegex () { var p_month = "((Enero)|(Febrero)|(Marzo)|(Abril)|(Mayo)|(Junio)|(Julio)|(Agosto)|(Septiembre)|(Octubre)|(Noviembre)|(Diciembre)|(Ene)|(Feb)|(Mar)|(Abr)|(May)|(Jun)|(Jul)|(Ago)|(Sep)|(Oct)|(Nov)|(Dic))"; var p_num = '\d{1,2}'; var year = '(\d{1,4}|\d{1,2})'; var month = '(' + p_num + '|' + p_month + ')'; var day = '\d{1,2}((th)|(rd)|(nd)|(st))?'; var spliter = '\s*[-/\\|\,\.]?\s*'; var reg_month_day = '((' + month + spliter + day + ')|' + '(' + day + spliter + month + ')|(' + month + '))'; var reg_date = '((' + year + spliter + reg_month_day +')|' + '(' + reg_month_day + spliter + year +')|' + reg_month_day + ')'; var time = '(\d{1,2}\s*[:-]?\s*\d{1,2}(\s*[:-]?\s*\d{1,2})?)' return [ new RegExp("(19|20)[0-9]{2}[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])"), // yyyy-mm-dd new RegExp('^' + reg_date + '\s+' + time + '$', 'i'), new RegExp('^' + time + '\s+' + reg_date + '$', 'i'), new RegExp('^' + reg_date + '$', 'i'), new RegExp('^' + time + '$', 'i') ]; } /** * Función que despliega el errorMsg después del field */ function raiseError(field, errorMsg) { var el = Ext.get(field.id); pos = el.getXY(); el.toggleClass('fieldError'); elError = Ext.get(field.name + '_error'); pos[0]-=7; pos[1]+=3; if(el.hasClass('errorDiv')){ Ext.DomHelper.insertAfter(el, {tag: 'div', id: field.name + '_error', cls: 'fieldErrorMsg', html: '*'}); /*var idTmp = field.name + '_error' var elTmp = Ext.get(idTmp); if(idTmp!='jobsFile_error') elTmp.setXY(pos);*/ } else{ if (elError == null){ Ext.DomHelper.insertAfter(el, {tag: 'span', id: field.name + '_error', cls: 'fieldErrorMsg', html: errorMsg}); } } } /** * Función que borra el error desplegado en la función raiseError */ function restoreFieldStyle(field) { el = Ext.get(field.id); elError = Ext.get(field.name + '_error'); el.removeClass('fieldError'); if (elError != null) { elError.remove(field.name + '_error'); } } /** * Función que valida que el field no este vacío. */ var validateRequired = function(field) { var regExp = /^\s+$/; if (field.value.length == 0 ||field.value == "" || field.value == null || regExp.test(field.value)) { errorMsg = field.name +' es requerido'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } /** * Función que valida que el field no este vacío. */ var validateValue = function(field) { var pattern = new RegExp("\/(.*)\/([gi]*)"); var matches = field.className.match(pattern); var regExp = /^\s+$/; if (field.value.length == 0 || field.value == "" || field.value == null || regExp.test(field.value) || field.value == matches[1] ) { errorMsg = 'Tiene que ser diferente a '+matches[1]; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } /** * Función que valida que el mail sea válido. */ var validateEmail = function(field) { if (field.value != "") { var regExp = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,}$/; var respuesta = regExp.test(field.value); if (!respuesta) { errorMsg = ' mail invalido'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que el field no este vacío. */ var validateMailValue = function(field) { if (field.value!="") { var pattern = new RegExp("\/(.*)\/([gi]*)"); var matches = field.className.match(pattern); var regExp = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,}$/; var respuesta = regExp.test(field.value); if (!respuesta || field.value == matches[1] ) { errorMsg = field.name +' mail invalido'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sea un número entero. */ var validateInteger = function(field) { if (field.value != "") { var regExp = /^[\-+]?\d+$/; var respuesta = regExp.test(field.value); if (!respuesta) { errorMsg = ' no es número entero'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sea un valor alfanumérico. */ var validateAlphanum = function(field) { if (field.value != "") { var regExp = /^[\w\sñÑáéíóúÁÉÍÓÚüÜ]+$/; var respuesta = regExp.test(field.value); if(!respuesta) { errorMsg = ' no es alfanúmerico'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sean carácteres. */ var validateAlpha = function(field) { if (field.value!="") { var regExp = /^[a-zA-Z\sñÑáéíóúÁÉÍÓÚüÜ]+$/; var respuesta = regExp.test(field.value); if (!respuesta) { errorMsg = 'No se permiten números'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sean números flotantes. */ var validateFloat = function(field) { if (field.value!="") { var regExp = /^((([1-9]\d*|0)?\.\d+)|([1-9]\d*))$/; var respuesta = regExp.test(field.value); if (!respuesta) { errorMsg = 'No es float'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sean número telefónico valido. */ var validatePhone = function(field) { if (field.value != "") { regExp = phoneRegex(); respuesta = false; for (var i = 0; i < regExp.length; i++) { if (regExp[i].test(field.value)) { respuesta = true; } } if (!respuesta) { errorMsg = 'No es un telefóno valido'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que sean fecha valida. */ var validateDate = function(field) { respuesta = false; if (field.value != "") { var regExp = dateRegex(); for (var i = 0; i < regExp.length; i++) { if (regExp[i].test(field.value)) { respuesta = true; } } if (!respuesta) { errorMsg = 'No es fecha valida'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } /** * Función que valida que el campo sea valido segun la expresión regular dado en el class del field. */ var validateCustom = function(field) { if (field.value!="") { var pattern = new RegExp("\/(.*)\/([gi]*)"); var matches = field.className.match(pattern); if (matches && matches[0]) { var validationPattern = new RegExp(matches[1],matches[2]); if(!field.value.match(validationPattern)) { errorMsg = 'No es valido'; isValid = false; raiseError(field, errorMsg); } else { restoreFieldStyle(field); } } } } /** * Función que valida que se haya seleccionado por lo menos 1 opción del radio group. */ var validateRadio = function(elementos) { var check = false; var campoError; Ext.each(elementos, function(campo, index) { campoError = campo; if(campo.checked) { check = true; } }); if (!check) { errorMsg = 'Selecciona una opción'; isValid = false; raiseError(campoError, errorMsg); } else { restoreFieldStyle(campoError); } } // Validación de campos requeridos en el formulario var fields = Ext.query(" #"+divContainer+" [class*=required]"); Ext.each(fields, function(field, index) { validateRequired(field); var el = Ext.get(field.id); if (el != null) el.on('blur', validateRequired.createCallback(field)); }); // Validación de campos requeridos en el formulario con valor inical var fields = Ext.query("#"+divContainer+" [class*=reqValue]"); Ext.each(fields, function(field, index) { validateValue(field); var el = Ext.get(field.id); //console.log('reqValue field.id '+field.value); if (el != null) el.on('blur', validateValue.createCallback(field)); }); // Validación de campos email en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-email]"); Ext.each(fields, function(field, index) { validateEmail(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateEmail.createCallback(field)); }); // Validación de campos email en el formulario con valor inicial var fields = Ext.query(" #"+divContainer+" [class*=reqMail]"); Ext.each(fields, function(field, index) { validateMailValue(field); var el = Ext.get(field.id); //console.log('reqMail field.value '+field.value); if(el != null) el.on('blur', validateMailValue.createCallback(field)); });validateMailValue // Validación de campos enteros en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-integer]"); Ext.each(fields, function(field, index) { validateInteger(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateInteger.createCallback(field)); }); // Validación de campos alphanuméricos en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-alphnum]"); Ext.each(fields, function(field, index) { validateAlphanum(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateAlphanum.createCallback(field)); }); // Validación de campos alpha en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-alpha]"); Ext.each(fields, function(field, index) { validateAlpha(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateAlpha.createCallback(field)); }); // Validación de campos floats en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-float]"); Ext.each(fields, function(field, index) { validateFloat(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateFloat.createCallback(field)); }); // Validación de campos telefóno en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-phone]"); Ext.each(fields, function(field, index) { validatePhone(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validatePhone.createCallback(field)); }); // Validación de campos fechas en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-date]"); Ext.each(fields, function(field, index) { validateDate(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateDate.createCallback(field)); }); // Validación de campos custom en el formulario var fields = Ext.query(" #"+divContainer+" [class*=validate-custom]"); Ext.each(fields, function(field, index) { validateCustom(field); var el = Ext.get(field.id); if(el != null) el.on('blur', validateCustom.createCallback(field)); }); //Validación de campos radio buttom en el formulario var fields = Ext.query(" #"+divContainer+" [class*=radio]"); if(fields.length>0){ validateRadio(fields); } // Validación de campos checkbox en el formulario var fields = Ext.query(" #"+divContainer+" [class*=checkbox]"); if(fields.length>0){ validateRadio(fields); } return isValid; }

BLC Studio operates as a collective of designers, developers, programmers, marketers, social media experts, filmmakers and artists working as one to create pretty much everything imaginable in bringing your brand to life.
We pride ourselves on the delivery of top quality projects, understanding the requirements and expectations of our clients and working closely with them to achieve quality objectives.
Design, Technology, Support, Marketing Online... We get it right