function parsearScriptAjax(datosHTML){ var posini = datosHTML.lastIndexOf('//BEGIN_JAVASCRIPT_AJAX'); var posfin = datosHTML.lastIndexOf('//END_JAVASCRIPT_AJAX'); if (posini!=-1 && posfin!=-1){ solojs = datosHTML.substring(posini+24, posfin); var oScript = document.createElement('script'); oScript.text = solojs; document.getElementsByTagName("head").item(0).appendChild(oScript); return true; } return false; } function posicionelemento(element) { if (typeof element == "string") element = document.getElementById(element); if (!element) return { top:0,left:0 }; var y = 0; var x = 0; while (element.offsetParent) { x += element.offsetLeft; y += element.offsetTop; element = element.offsetParent; } return {top:y,left:x}; } function mostrar_elementos_generica(elementos_mostrados, elementos_mostrar, objeto){ objeto.each(function() { if(jQuery(this).hasClass('hide')){ if(elementos_mostrar>0){ jQuery(this).removeClass('hide'); elementos_mostrar = elementos_mostrar-1; elementos_mostrados++; } } } ); return elementos_mostrados; } //Función que comprueba si el número introducido es entero function is_int(value){ if((parseFloat(value) == parseInt(value)) && !isNaN(value)) { return true; } else { if(value=="") return true; else return false; } } /* * Copyright 2009 Matthew Eernisse (mde@fleegix.org) * and Open Source Applications Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // UTILIZADO PARA LA OBTENCIÓN DEL LOCAL TIME if (typeof fleegix == 'undefined') { var fleegix = {}; } if (typeof fleegix.date == 'undefined') { fleegix.date = {}; } fleegix.date.util = {}; fleegix.date.util.weekdayLong = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; fleegix.date.util.weekdayShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; fleegix.date.util.monthLong = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; fleegix.date.util.monthShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; fleegix.date.util.meridian = { 'AM': 'AM', 'PM': 'PM' } fleegix.date.util.monthLongEsp = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']; fleegix.date.util.locale = "en_US"; fleegix.date.util.supportedFormats = { // abbreviated weekday name according to the current locale 'a': function (dt) { return fleegix.date.util.weekdayShort[dt.getDay()]; }, // full weekday name according to the current locale 'A': function (dt) { return fleegix.date.util.weekdayLong[dt.getDay()]; }, // abbreviated month name according to the current locale 'b': function (dt) { return fleegix.date.util.monthShort[dt.getMonth()]; }, 'h': function (dt) { return fleegix.date.util.strftime(dt, '%b'); }, // full month name according to the current locale 'B': function (dt) { if (fleegix.date.util.locale == "es_ES") return fleegix.date.util.monthLongEsp[dt.getMonth()]; else return fleegix.date.util.monthLong[dt.getMonth()]; }, // preferred date and time representation for the current locale 'c': function (dt) { return fleegix.date.util.strftime(dt, '%a %b %d %T %Y'); }, // century number (the year divided by 100 and truncated // to an integer, range 00 to 99) 'C': function (dt) { return fleegix.date.util.calcCentury(dt.getFullYear());; }, // day of the month as a decimal number (range 01 to 31) 'd': function (dt) { return fleegix.date.util.leftPad(dt.getDate(), 2, '0'); }, // same as %m/%d/%y 'D': function (dt) { return fleegix.date.util.strftime(dt, '%m/%d/%y') }, // day of the month as a decimal number, a single digit is // preceded by a space (range ' 1' to '31') 'e': function (dt) { return fleegix.date.util.leftPad(dt.getDate(), 2, ' '); }, // month as a decimal number, a single digit is // preceded by a space (range ' 1' to '12') 'f': function () { return fleegix.date.util.strftimeNotImplemented('f'); }, // same as %Y-%m-%d 'F': function (dt) { return fleegix.date.util.strftime(dt, '%Y-%m-%d'); }, // like %G, but without the century. 'g': function () { return fleegix.date.util.strftimeNotImplemented('g'); }, // The 4-digit year corresponding to the ISO week number // (see %V). This has the same format and value as %Y, // except that if the ISO week number belongs to the // previous or next year, that year is used instead. 'G': function () { return fleegix.date.util.strftimeNotImplemented('G'); }, // hour as a decimal number using a 24-hour clock (range // 00 to 23) 'H': function (dt) { return fleegix.date.util.leftPad(dt.getHours(), 2, '0'); }, // hour as a decimal number using a 12-hour clock (range // 01 to 12) 'I': function (dt) { return fleegix.date.util.leftPad( fleegix.date.util.hrMil2Std(dt.getHours()), 2, '0'); }, // day of the year as a decimal number (range 001 to 366) 'j': function (dt) { return fleegix.date.util.leftPad( fleegix.date.util.calcDays(dt), 3, '0'); }, // Hour as a decimal number using a 24-hour clock (range // 0 to 23 (space-padded)) 'k': function (dt) { return fleegix.date.util.leftPad(dt.getHours(), 2, ' '); }, // Hour as a decimal number using a 12-hour clock (range // 1 to 12 (space-padded)) 'l': function (dt) { return fleegix.date.util.leftPad( fleegix.date.util.hrMil2Std(dt.getHours()), 2, ' '); }, // month as a decimal number (range 01 to 12) 'm': function (dt) { return fleegix.date.util.leftPad((dt.getMonth()+1), 2, '0'); }, // minute as a decimal number 'M': function (dt) { return fleegix.date.util.leftPad(dt.getMinutes(), 2, '0'); }, // Linebreak 'n': function () { return '\n'; }, // either `am' or `pm' according to the given time value, // or the corresponding strings for the current locale 'p': function (dt) { return fleegix.date.util.getMeridian(dt.getHours()); }, // time in a.m. and p.m. notation 'r': function (dt) { return fleegix.date.util.strftime(dt, '%I:%M:%S %p'); }, // time in 24 hour notation 'R': function (dt) { return fleegix.date.util.strftime(dt, '%H:%M'); }, // second as a decimal number 'S': function (dt) { return fleegix.date.util.leftPad(dt.getSeconds(), 2, '0'); }, // Tab char 't': function () { return '\t'; }, // current time, equal to %H:%M:%S 'T': function (dt) { return fleegix.date.util.strftime(dt, '%H:%M:%S'); }, // weekday as a decimal number [1,7], with 1 representing // Monday 'u': function (dt) { return fleegix.date.util.convertOneBase(dt.getDay()); }, // week number of the current year as a decimal number, // starting with the first Sunday as the first day of the // first week 'U': function () { return fleegix.date.util.strftimeNotImplemented('U'); }, // week number of the year (Monday as the first day of the // week) as a decimal number [01,53]. If the week containing // 1 January has four or more days in the new year, then it // is considered week 1. Otherwise, it is the last week of // the previous year, and the next week is week 1. 'V': function () { return fleegix.date.util.strftimeNotImplemented('V'); }, // week number of the current year as a decimal number, // starting with the first Monday as the first day of the // first week 'W': function () { return fleegix.date.util.strftimeNotImplemented('W'); }, // day of the week as a decimal, Sunday being 0 'w': function (dt) { return dt.getDay(); }, // preferred date representation for the current locale // without the time 'x': function (dt) { return fleegix.date.util.strftime(dt, '%D'); }, // preferred time representation for the current locale // without the date 'X': function (dt) { return fleegix.date.util.strftime(dt, '%T'); }, // year as a decimal number without a century (range 00 to // 99) 'y': function (dt) { return fleegix.date.util.getTwoDigitYear(dt.getFullYear()); }, // year as a decimal number including the century 'Y': function (dt) { return fleegix.date.util.leftPad(dt.getFullYear(), 4, '0'); }, // time zone or name or abbreviation 'z': function () { return fleegix.date.util.strftimeNotImplemented('z'); }, 'Z': function () { return fleegix.date.util.strftimeNotImplemented('Z'); }, // Literal percent char '%': function (dt) { return '%'; } }; fleegix.date.util.getSupportedFormats = function () { var str = ''; for (var i in fleegix.date.util.supportedFormats) { str += i; } return str; } fleegix.date.util.supportedFormatsPat = new RegExp('%[' + fleegix.date.util.getSupportedFormats() + ']{1}', 'g'); fleegix.date.util.strftime = function (dt, format) { var d = null; var pats = []; var dts = []; var str = format; // If no dt, use current date d = dt ? dt : new Date(); // Allow either Date obj or UTC stamp d = typeof dt == 'number' ? new Date(dt) : dt; // Grab all instances of expected formats into array while (pats = fleegix.date.util.supportedFormatsPat.exec(format)) { dts.push(pats[0]); } // Process any hits for (var i = 0; i < dts.length; i++) { key = dts[i].replace(/%/, ''); str = str.replace('%' + key, fleegix.date.util.supportedFormats[key](d)); } return str; }; fleegix.date.util.strftimeNotImplemented = function (s) { throw('fleegix.date.util.strftime format "' + s + '" not implemented.'); }; fleegix.date.util.leftPad = function (instr, len, spacer) { var str = instr.toString(); // spacer char optional, default to space var sp = spacer ? spacer : ' '; while (str.length < len) { str = sp + str; } return str; }; /** * Calculate the century to which a particular year belongs * @param y Integer year number * @return Integer century number */ fleegix.date.util.calcCentury = function (y) { var ret = parseInt(y/100); ret = ret.toString(); return fleegix.date.util.leftPad(ret); }; /** * Calculate the day number in the year a particular date is on * @param dt JavaScript date object * @return Integer day number in the year for the given date */ fleegix.date.util.calcDays = function(dt) { var first = new Date(dt.getFullYear(), 0, 1); var diff = 0; var ret = 0; first = first.getTime(); diff = (dt.getTime() - first); ret = parseInt(((((diff/1000)/60)/60)/24))+1; return ret; }; /** * Adjust from 0-6 base week to 1-7 base week * @param d integer for day of week * @return Integer day number for 1-7 base week */ fleegix.date.util.convertOneBase = function (d) { return d == 0 ? 7 : d; }; fleegix.date.util.getTwoDigitYear = function (yr) { // Add a millenium to take care of years before the year 1000, // (e.g, the year 7) since we're only taking the last two digits // If we overshoot, it doesn't matter var millenYear = yr + 1000; var str = millenYear.toString(); str = str.substr(2); // Get the last two digits return str }; /** * Return 'AM' or 'PM' based on hour in 24-hour format * @param h Integer for hour in 24-hour format * @return String of either 'AM' or 'PM' based on hour number */ fleegix.date.util.getMeridian = function (h) { return h > 11 ? fleegix.date.util.meridian.PM : fleegix.date.util.meridian.AM; }; /** * Convert a 24-hour formatted hour to 12-hour format * @param hour Integer hour number * @return String for hour in 12-hour format -- may be string length of one */ fleegix.date.util.hrMil2Std = function (hour) { var h = typeof hour == 'number' ? hour : parseInt(hour); var str = h > 12 ? h - 12 : h; str = str == 0 ? 12 : str; return str; }; /** * Convert a 12-hour formatted hour with meridian flag to 24-hour format * @param hour Integer hour number * @param pm Boolean flag, if PM hour then set to true * @return String for hour in 24-hour format */ fleegix.date.util.hrStd2Mil = function (hour, pm) { var h = typeof hour == 'number' ? hour : parseInt(hour); var str = ''; // PM if (pm) { str = h < 12 ? (h+12) : h; } // AM else { str = h == 12 ? 0 : h; } return str; }; // Constants for use in fleegix.date.util.add fleegix.date.util.dateParts = { YEAR: 0, MONTH: 1, DAY: 2, HOUR: 3, MINUTE: 4, SECOND: 5, MILLISECOND: 6, QUARTER: 7, WEEK: 8, WEEKDAY: 9 }; /** * Add to a Date in intervals of different size, from * milliseconds to years * @param dt -- Date (or timestamp Number), date to increment * @param interv -- Number, a constant representing the interval, * e.g. YEAR, MONTH, DAY. See fleegix.date.util.dateParts * @param incr -- Number, how much to add to the date * @return Integer day number for 1-7 base week */ fleegix.date.util.add = function (dt, interv, incr) { if (typeof dt == 'number') { dt = new Date(dt); } function fixOvershoot(){ if (sum.getDate() < dt.getDate()){ sum.setDate(0); } } var sum = new Date(dt); with (fleegix.date.util.dateParts) { switch(interv){ case YEAR: sum.setFullYear(dt.getFullYear()+incr); // Keep increment/decrement from 2/29 out of March fixOvershoot(); break; case QUARTER: // Naive quarter is just three months incr*=3; // fallthrough... case MONTH: sum.setMonth(dt.getMonth()+incr); // Reset to last day of month if you overshoot fixOvershoot(); break; case WEEK: incr*=7; // fallthrough... case DAY: sum.setDate(dt.getDate() + incr); break; case WEEKDAY: //FIXME: assumes Saturday/Sunday weekend, but even this is not fixed. // There are CLDR entries to localize this. var dat = dt.getDate(); var weeks = 0; var days = 0; var strt = 0; var trgt = 0; var adj = 0; // Divide the increment time span into weekspans plus leftover days // e.g., 8 days is one 5-day weekspan / and two leftover days // Can't have zero leftover days, so numbers divisible by 5 get // a days value of 5, and the remaining days make up the number of weeks var mod = incr % 5; if (mod == 0) { days = (incr > 0) ? 5 : -5; weeks = (incr > 0) ? ((incr-5)/5) : ((incr+5)/5); } else { days = mod; weeks = parseInt(incr/5); } // Get weekday value for orig date param strt = dt.getDay(); // Orig date is Sat / positive incrementer // Jump over Sun if (strt == 6 && incr > 0) { adj = 1; } // Orig date is Sun / negative incrementer // Jump back over Sat else if (strt == 0 && incr < 0) { adj = -1; } // Get weekday val for the new date trgt = strt + days; // New date is on Sat or Sun if (trgt == 0 || trgt == 6) { adj = (incr > 0) ? 2 : -2; } // Increment by number of weeks plus leftover days plus // weekend adjustments sum.setDate(dat + (7*weeks) + days + adj); break; case HOUR: sum.setHours(sum.getHours()+incr); break; case MINUTE: sum.setMinutes(sum.getMinutes()+incr); break; case SECOND: sum.setSeconds(sum.getSeconds()+incr); break; case MILLISECOND: sum.setMilliseconds(sum.getMilliseconds()+incr); break; default: // Do nothing break; } } return sum; // Date }; /** * Get the difference in a specific unit of time (e.g., number * of months, weeks, days, etc.) between two dates. * @param date1 -- Date (or timestamp Number) * @param date2 -- Date (or timestamp Number) * @param interv -- Number, a constant representing the interval, * e.g. YEAR, MONTH, DAY. See fleegix.date.util.dateParts * @return Integer, number of (interv) units apart that * the two dates are */ fleegix.date.util.diff = function (date1, date2, interv) { // date1 // Date object or Number equivalent // // date2 // Date object or Number equivalent // // interval // A constant representing the interval, e.g. YEAR, MONTH, DAY. See fleegix.date.util.dateParts. // Accept timestamp input if (typeof date1 == 'number') { date1 = new Date(date1); } if (typeof date2 == 'number') { date2 = new Date(date2); } var yeaDiff = date2.getFullYear() - date1.getFullYear(); var monDiff = (date2.getMonth() - date1.getMonth()) + (yeaDiff * 12); var msDiff = date2.getTime() - date1.getTime(); // Millisecs var secDiff = msDiff/1000; var minDiff = secDiff/60; var houDiff = minDiff/60; var dayDiff = houDiff/24; var weeDiff = dayDiff/7; var delta = 0; // Integer return value with (fleegix.date.util.dateParts) { switch (interv) { case YEAR: delta = yeaDiff; break; case QUARTER: var m1 = date1.getMonth(); var m2 = date2.getMonth(); // Figure out which quarter the months are in var q1 = Math.floor(m1/3) + 1; var q2 = Math.floor(m2/3) + 1; // Add quarters for any year difference between the dates q2 += (yeaDiff * 4); delta = q2 - q1; break; case MONTH: delta = monDiff; break; case WEEK: // Truncate instead of rounding // Don't use Math.floor -- value may be negative delta = parseInt(weeDiff); break; case DAY: delta = dayDiff; break; case WEEKDAY: var days = Math.round(dayDiff); var weeks = parseInt(days/7); var mod = days % 7; // Even number of weeks if(mod == 0){ days = weeks*5; }else{ // Weeks plus spare change (< 7 days) var adj = 0; var aDay = date1.getDay(); var bDay = date2.getDay(); weeks = parseInt(days/7); mod = days % 7; // Mark the date advanced by the number of // round weeks (may be zero) var dtMark = new Date(date1); dtMark.setDate(dtMark.getDate()+(weeks*7)); var dayMark = dtMark.getDay(); // Spare change days -- 6 or less if(dayDiff > 0){ switch(true){ // Range starts on Sat case aDay == 6: adj = -1; break; // Range starts on Sun case aDay == 0: adj = 0; break; // Range ends on Sat case bDay == 6: adj = -1; break; // Range ends on Sun case bDay == 0: adj = -2; break; // Range contains weekend case (dayMark + mod) > 5: adj = -2; break; default: // Do nothing break; } }else if(dayDiff < 0){ switch (true) { // Range starts on Sat case aDay == 6: adj = 0; break; // Range starts on Sun case aDay == 0: adj = 1; break; // Range ends on Sat case bDay == 6: adj = 2; break; // Range ends on Sun case bDay == 0: adj = 1; break; // Range contains weekend case (dayMark + mod) < 0: adj = 2; break; default: // Do nothing break; } } days += adj; days -= (weeks*2); } delta = days; break; case HOUR: delta = houDiff; break; case MINUTE: delta = minDiff; break; case SECOND: delta = secDiff; break; case MILLISECOND: delta = msDiff; break; default: // Do nothing break; } } // Round for fractional values and DST leaps return Math.round(delta); // Number (integer) };