| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003 |
- /**
- * jQuery.browser.mobile (http://detectmobilebrowser.com/)
- *
- * jQuery.browser.mobile will be true if the browser is a mobile device
- *
- **/
- (function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);
- /*! jQuery JSON plugin 2.4.0 | code.google.com/p/jquery-json */
- (function(jQuery){'use strict';var escape=/["\\\x00-\x1f\x7f-\x9f]/g,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},hasOwn=Object.prototype.hasOwnProperty;jQuery.toJSON=typeof JSON==='object'&&JSON.stringify?JSON.stringify:function(o){if(o===null){return'null';}
- var pairs,k,name,val,type=jQuery.type(o);if(type==='undefined'){return undefined;}
- if(type==='number'||type==='boolean'){return String(o);}
- if(type==='string'){return jQuery.quoteString(o);}
- if(typeof o.toJSON==='function'){return jQuery.toJSON(o.toJSON());}
- if(type==='date'){var month=o.getUTCMonth()+1,day=o.getUTCDate(),year=o.getUTCFullYear(),hours=o.getUTCHours(),minutes=o.getUTCMinutes(),seconds=o.getUTCSeconds(),milli=o.getUTCMilliseconds();if(month<10){month='0'+month;}
- if(day<10){day='0'+day;}
- if(hours<10){hours='0'+hours;}
- if(minutes<10){minutes='0'+minutes;}
- if(seconds<10){seconds='0'+seconds;}
- if(milli<100){milli='0'+milli;}
- if(milli<10){milli='0'+milli;}
- return'"'+year+'-'+month+'-'+day+'T'+
- hours+':'+minutes+':'+seconds+'.'+milli+'Z"';}
- pairs=[];if(jQuery.isArray(o)){for(k=0;k<o.length;k++){pairs.push(jQuery.toJSON(o[k])||'null');}
- return'['+pairs.join(',')+']';}
- if(typeof o==='object'){for(k in o){if(hasOwn.call(o,k)){type=typeof k;if(type==='number'){name='"'+k+'"';}else if(type==='string'){name=jQuery.quoteString(k);}else{continue;}
- type=typeof o[k];if(type!=='function'&&type!=='undefined'){val=jQuery.toJSON(o[k]);pairs.push(name+':'+val);}}}
- return'{'+pairs.join(',')+'}';}};jQuery.evalJSON=typeof JSON==='object'&&JSON.parse?JSON.parse:function(str){return eval('('+str+')');};jQuery.secureEvalJSON=typeof JSON==='object'&&JSON.parse?JSON.parse:function(str){var filtered=str.replace(/\\["\\\/bfnrtu]/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*jQuery/.test(filtered)){return eval('('+str+')');}
- throw new SyntaxError('Error parsing JSON, source is not valid.');};jQuery.quoteString=function(str){if(str.match(escape)){return'"'+str.replace(escape,function(a){var c=meta[a];if(typeof c==='string'){return c;}
- c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}
- return'"'+str+'"';};}(jQuery));
- $.fn.scrollTo = function( target, options, callback ){
- if(typeof options == 'function' && arguments.length == 2){ callback = options; options = target; }
- var settings = $.extend({
- scrollTarget : target,
- offsetTop : 50,
- duration : 10,
- easing : 'swing'
- }, options);
- return this.each(function(){
- var scrollPane = $(this);
- var scrollTarget = (typeof settings.scrollTarget == "number") ? settings.scrollTarget : $(settings.scrollTarget);
- var scrollY = (typeof scrollTarget == "number") ? scrollTarget : scrollTarget.offset().top + scrollPane.scrollTop() - parseInt(settings.offsetTop);
- scrollPane.animate({scrollTop : scrollY }, parseInt(settings.duration), settings.easing, function(){
- if (typeof callback == 'function') { callback.call(this); }
- });
- });
- }
- /*
- * Date Format 1.2.3
- * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
- * MIT license
- *
- * Includes enhancements by Scott Trenda <scott.trenda.net>
- * and Kris Kowal <cixar.com/~kris.kowal/>
- *
- * Accepts a date, a mask, or a date and a mask.
- * Returns a formatted version of the given date.
- * The date defaults to the current date/time.
- * The mask defaults to dateFormat.masks.default.
- */
- var dateFormat = function () {
- var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
- timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
- timezoneClip = /[^-+\dA-Z]/g,
- pad = function (val, len) {
- val = String(val);
- len = len || 2;
- while (val.length < len) val = "0" + val;
- return val;
- };
- // Regexes and supporting functions are cached through closure
- return function (date, mask, utc) {
- var dF = dateFormat;
- // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
- if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
- mask = date;
- date = undefined;
- }
- // Passing date through Date applies Date.parse, if necessary
- date = date ? new Date(date) : new Date;
- if (isNaN(date)) throw SyntaxError("invalid date");
- mask = String(dF.masks[mask] || mask || dF.masks["default"]);
- // Allow setting the utc argument via the mask
- if (mask.slice(0, 4) == "UTC:") {
- mask = mask.slice(4);
- utc = true;
- }
- var _ = utc ? "getUTC" : "get",
- d = date[_ + "Date"](),
- D = date[_ + "Day"](),
- m = date[_ + "Month"](),
- y = date[_ + "FullYear"](),
- H = date[_ + "Hours"](),
- M = date[_ + "Minutes"](),
- s = date[_ + "Seconds"](),
- L = date[_ + "Milliseconds"](),
- o = utc ? 0 : date.getTimezoneOffset(),
- flags = {
- d: d,
- dd: pad(d),
- ddd: dF.i18n.dayNames[D],
- dddd: dF.i18n.dayNames[D + 7],
- m: m + 1,
- mm: pad(m + 1),
- mmm: dF.i18n.monthNames[m],
- mmmm: dF.i18n.monthNames[m + 12],
- yy: String(y).slice(2),
- yyyy: y,
- h: H % 12 || 12,
- hh: pad(H % 12 || 12),
- H: H,
- HH: pad(H),
- M: M,
- MM: pad(M),
- s: s,
- ss: pad(s),
- l: pad(L, 3),
- L: pad(L > 99 ? Math.round(L / 10) : L),
- t: H < 12 ? "a" : "p",
- tt: H < 12 ? "am" : "pm",
- T: H < 12 ? "A" : "P",
- TT: H < 12 ? "AM" : "PM",
- Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
- o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
- S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
- };
- return mask.replace(token, function ($0) {
- return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
- });
- };
- }();
- // Some common format strings
- dateFormat.masks = {
- "default": "ddd mmm dd yyyy HH:MM:ss",
- shortDate: "m/d/yy",
- mediumDate: "mmm d, yyyy",
- longDate: "mmmm d, yyyy",
- fullDate: "dddd, mmmm d, yyyy",
- shortTime: "h:MM TT",
- mediumTime: "h:MM:ss TT",
- longTime: "h:MM:ss TT Z",
- isoDate: "yyyy-mm-dd",
- isoTime: "HH:MM:ss",
- isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
- isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
- };
- // Internationalization strings
- dateFormat.i18n = {
- dayNames: [
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
- ],
- monthNames: [
- "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
- "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
- ]
- };
- // For convenience...
- Date.prototype.format = function (mask, utc) {
- return dateFormat(this, mask, utc);
- };
- /*
- * http://code.google.com/p/flexible-js-formatting/
- *
- * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
- Date.parseFunctions = {count:0};
- Date.parseRegexes = [];
- Date.formatFunctions = {count:0};
- Date.prototype.dateFormat = function(format, ignore_offset) {
- if (Date.formatFunctions[format] == null) {
- Date.createNewFormat(format);
- }
- var func = Date.formatFunctions[format];
- if (ignore_offset || ! this.offset) {
- return this[func]();
- } else {
- return (new Date(this.valueOf() - this.offset))[func]();
- }
- };
- Date.createNewFormat = function(format) {
- var funcName = "format" + Date.formatFunctions.count++;
- Date.formatFunctions[format] = funcName;
- var code = "Date.prototype." + funcName + " = function(){return ";
- var special = false;
- var ch = '';
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- // escape character start
- if (!special && ch == "\\") {
- special = true;
- }
- // escaped string
- else if (!special && ch == '"') {
- var end = format.indexOf('"', i+1);
- if (end==-1)
- {
- end = format.length;
- }
- code += "'" + String.escape(format.substring(i+1, end)) + "' + ";
- i = end;
- }
- // escaped character
- else if (special) {
- special = false;
- code += "'" + String.escape(ch) + "' + ";
- }
- else {
- code += Date.getFormatCode(ch);
- }
- }
- eval(code.substring(0, code.length - 3) + ";}");
- };
- Date.getFormatCode = function(character) {
- switch (character) {
- case "d":
- return "String.leftPad(this.getDate(), 2, '0') + ";
- case "D":
- return "Date.dayNames[this.getDay()].substring(0, 3) + ";
- case "j":
- return "this.getDate() + ";
- case "l":
- return "Date.dayNames[this.getDay()] + ";
- case "S":
- return "this.getSuffix() + ";
- case "w":
- return "this.getDay() + ";
- case "z":
- return "this.getDayOfYear() + ";
- case "W":
- return "this.getWeekOfYear() + ";
- case "F":
- return "Date.monthNames[this.getMonth()] + ";
- case "m":
- return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
- case "M":
- return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
- case "n":
- return "(this.getMonth() + 1) + ";
- case "t":
- return "this.getDaysInMonth() + ";
- case "L":
- return "(this.isLeapYear() ? 1 : 0) + ";
- case "Y":
- return "this.getFullYear() + ";
- case "y":
- return "('' + this.getFullYear()).substring(2, 4) + ";
- case "a":
- return "(this.getHours() < 12 ? 'am' : 'pm') + ";
- case "A":
- return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
- case "g":
- return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
- case "G":
- return "this.getHours() + ";
- case "h":
- return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
- case "H":
- return "String.leftPad(this.getHours(), 2, '0') + ";
- case "i":
- return "String.leftPad(this.getMinutes(), 2, '0') + ";
- case "s":
- return "String.leftPad(this.getSeconds(), 2, '0') + ";
- case "X":
- return "String.leftPad(this.getMilliseconds(), 3, '0') + ";
- case "O":
- return "this.getGMTOffset() + ";
- case "T":
- return "this.getTimezone() + ";
- case "Z":
- return "(this.getTimezoneOffset() * -60) + ";
- case "q": // quarter num, Q for name?
- return "this.getQuarter() + ";
- default:
- return "'" + String.escape(character) + "' + ";
- }
- };
- Date.parseDate = function(input, format) {
- if (Date.parseFunctions[format] == null) {
- Date.createParser(format);
- }
- var func = Date.parseFunctions[format];
- return Date[func](input);
- };
- Date.createParser = function(format) {
- var funcName = "parse" + Date.parseFunctions.count++;
- var regexNum = Date.parseRegexes.length;
- var currentGroup = 1;
- Date.parseFunctions[format] = funcName;
- var code = "Date." + funcName + " = function(input){\n"
- + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, z = 0;\n"
- + "var d = new Date();\n"
- + "y = d.getFullYear();\n"
- + "m = d.getMonth();\n"
- + "d = d.getDate();\n"
- + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
- + "if (results && results.length > 0) {" ;
- var regex = "";
- var special = false;
- var ch = '';
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- if (!special && ch == "\\") {
- special = true;
- }
- else if (special) {
- special = false;
- regex += String.escape(ch);
- }
- else {
- obj = Date.formatCodeToRegex(ch, currentGroup);
- currentGroup += obj.g;
- regex += obj.s;
- if (obj.g && obj.c) {
- code += obj.c;
- }
- }
- }
- code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0)\n"
- + "{return new Date(y, m, d, h, i, s, ms).applyOffset(z);}\n"
- + "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
- + "{return new Date(y, m, d, h, i, s).applyOffset(z);}\n"
- + "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
- + "{return new Date(y, m, d, h, i).applyOffset(z);}\n"
- + "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
- + "{return new Date(y, m, d, h).applyOffset(z);}\n"
- + "else if (y > 0 && m >= 0 && d > 0)\n"
- + "{return new Date(y, m, d).applyOffset(z);}\n"
- + "else if (y > 0 && m >= 0)\n"
- + "{return new Date(y, m).applyOffset(z);}\n"
- + "else if (y > 0)\n"
- + "{return new Date(y).applyOffset(z);}\n"
- + "}return null;}";
- Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
- eval(code);
- };
- Date.formatCodeToRegex = function(character, currentGroup) {
- switch (character) {
- case "D":
- return {g:0,
- c:null,
- s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
- case "j":
- case "d":
- return {g:1,
- c:"d = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{1,2})"};
- case "l":
- return {g:0,
- c:null,
- s:"(?:" + Date.dayNames.join("|") + ")"};
- case "S":
- return {g:0,
- c:null,
- s:"(?:st|nd|rd|th)"};
- case "w":
- return {g:0,
- c:null,
- s:"\\d"};
- case "z":
- return {g:0,
- c:null,
- s:"(?:\\d{1,3})"};
- case "W":
- return {g:0,
- c:null,
- s:"(?:\\d{2})"};
- case "F":
- return {g:1,
- c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
- s:"(" + Date.monthNames.join("|") + ")"};
- case "M":
- return {g:1,
- c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
- s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
- case "n":
- case "m":
- return {g:1,
- c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
- s:"(\\d{1,2})"};
- case "t":
- return {g:0,
- c:null,
- s:"\\d{1,2}"};
- case "L":
- return {g:0,
- c:null,
- s:"(?:1|0)"};
- case "Y":
- return {g:1,
- c:"y = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{4})"};
- case "y":
- return {g:1,
- c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
- + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
- s:"(\\d{1,2})"};
- case "a":
- return {g:1,
- c:"if (results[" + currentGroup + "] == 'am') {\n"
- + "if (h == 12) { h = 0; }\n"
- + "} else { if (h < 12) { h += 12; }}",
- s:"(am|pm)"};
- case "A":
- return {g:1,
- c:"if (results[" + currentGroup + "] == 'AM') {\n"
- + "if (h == 12) { h = 0; }\n"
- + "} else { if (h < 12) { h += 12; }}",
- s:"(AM|PM)"};
- case "g":
- case "G":
- case "h":
- case "H":
- return {g:1,
- c:"h = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{1,2})"};
- case "i":
- return {g:1,
- c:"i = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"};
- case "s":
- return {g:1,
- c:"s = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"};
- case "X":
- return {g:1,
- c:"ms = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{3})"};
- case "O":
- case "P":
- return {g:1,
- c:"z = Date.parseOffset(results[" + currentGroup + "], 10);\n",
- s:"(Z|[+-]\\d{2}:?\\d{2})"}; // "Z", "+05:00", "+0500" all acceptable.
- case "T":
- return {g:0,
- c:null,
- s:"[A-Z]{3}"};
- case "Z":
- return {g:1,
- c:"s = parseInt(results[" + currentGroup + "], 10);\n",
- s:"([+-]\\d{1,5})"};
- default:
- return {g:0,
- c:null,
- s:String.escape(character)};
- }
- };
- Date.parseOffset = function(str) {
- if (str == "Z") { return 0 ; } // UTC, no offset.
- var seconds ;
- seconds = parseInt(str[0] + str[1] + str[2]) * 3600 ; // e.g., "+05" or "-08"
- if (str[3] == ":") { // "+HH:MM" is preferred iso8601 format ("O")
- seconds += parseInt(str[4] + str[5]) * 60;
- } else { // "+HHMM" is frequently used, though. ("P")
- seconds += parseInt(str[3] + str[4]) * 60;
- }
- return seconds ;
- };
- Date.today = function() {
- var now = new Date();
- now.setHours(0);
- now.setMinutes(0);
- now.setSeconds(0);
-
- return now;
- }
- // convert the parsed date into UTC, but store the offset so we can optionally use it in dateFormat()
- Date.prototype.applyOffset = function(offset_seconds) {
- this.offset = offset_seconds * 1000 ;
- this.setTime(this.valueOf() + this.offset);
- return this ;
- };
- Date.prototype.getTimezone = function() {
- return this.toString().replace(
- /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
- /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3").replace(
- /^.*?[0-9]{4} \(([A-Z]{3})\)/, "$1");
- };
- Date.prototype.getGMTOffset = function() {
- return (this.getTimezoneOffset() > 0 ? "-" : "+")
- + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
- + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
- };
- Date.prototype.getDayOfYear = function() {
- var num = 0;
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- for (var i = 0; i < this.getMonth(); ++i) {
- num += Date.daysInMonth[i];
- }
- return num + this.getDate() - 1;
- };
- Date.prototype.getWeekOfYear = function() {
- // Skip to Thursday of this week
- var now = this.getDayOfYear() + (4 - this.getDay());
- // Find the first Thursday of the year
- var jan1 = new Date(this.getFullYear(), 0, 1);
- var then = (7 - jan1.getDay() + 4);
- document.write(then);
- return String.leftPad(((now - then) / 7) + 1, 2, "0");
- };
- Date.prototype.isLeapYear = function() {
- var year = this.getFullYear();
- return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
- };
- Date.prototype.getFirstDayOfMonth = function() {
- var day = (this.getDay() - (this.getDate() - 1)) % 7;
- return (day < 0) ? (day + 7) : day;
- };
- Date.prototype.getLastDayOfMonth = function() {
- var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
- return (day < 0) ? (day + 7) : day;
- };
- Date.prototype.getDaysInMonth = function() {
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- return Date.daysInMonth[this.getMonth()];
- };
- Date.prototype.getQuarter = function() {
- return Date.quarterFromMonthNum[this.getMonth()];
- };
- Date.prototype.getSuffix = function() {
- switch (this.getDate()) {
- case 1:
- case 21:
- case 31:
- return "st";
- case 2:
- case 22:
- return "nd";
- case 3:
- case 23:
- return "rd";
- default:
- return "th";
- }
- };
- String.escape = function(string) {
- return string.replace(/('|\\)/g, "\\$1");
- };
- String.leftPad = function (val, size, ch) {
- var result = new String(val);
- if (ch == null) {
- ch = " ";
- }
- while (result.length < size) {
- result = ch + result;
- }
- return result;
- };
- Date.quarterFromMonthNum = [1,1,1,2,2,2,3,3,3,4,4,4];
- Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
- Date.monthNames =
- ["January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"];
- Date.dayNames =
- ["Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday"];
- Date.y2kYear = 50;
- Date.monthNumbers = {
- Jan:0,
- Feb:1,
- Mar:2,
- Apr:3,
- May:4,
- Jun:5,
- Jul:6,
- Aug:7,
- Sep:8,
- Oct:9,
- Nov:10,
- Dec:11};
- Date.patterns = {
- ISO8601LongPattern: "Y\\-m\\-d\\TH\\:i\\:sO",
- ISO8601ShortPattern: "Y\\-m\\-d",
- ShortDatePattern: "n/j/Y",
- LongDatePattern: "l, F d, Y",
- FullDateTimePattern: "l, F d, Y g:i:s A",
- MonthDayPattern: "F d",
- ShortTimePattern: "g:i A",
- LongTimePattern: "g:i:s A",
- SortableDateTimePattern: "Y-m-d\\TH:i:s",
- UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
- YearMonthPattern: "F, Y"};
- /**
- *
- * @author: Malishev Dmitry <dima.malishev@gmail.com>
- */
- var _DEBUG = true;
- var _DEBUG_LEVEL = 'ALL';
- // possible levels: ALL, IMPORTANT
- var Error = {FATAL: 1, WARNING: 0, NORMAL: -1};
- //
- // GLOBAL SETTINGS
- //
- GLOBAL = {};
- GLOBAL.FTP_USER_PREFIX = 'admin_';
- GLOBAL.DB_USER_PREFIX = 'admin_';
- GLOBAL.DB_DBNAME_PREFIX = 'admin_';
- GLOBAL.AJAX_URL = '';
- /**
- * Init debug, grabs console object if accessible, or makes dummy debugger
- */
- var fb = _DEBUG && 'undefined' != typeof(console) ? console : {
- log : function(){},
- debug : function(){},
- info : function(){},
- warn : function(){},
- error : function(){},
- assert : function(){},
- dir : function(){},
- dirxml : function(){},
- trace : function(){},
- group : function(){},
- groupEnd : function(){},
- time : function(){},
- timeEnd : function(){},
- profile : function(){},
- profileEnd : function(){},
- count : function(){},
- msg : function(){}
- };
- //
- var App = {
- // Main namespases for page specific functions
- // Core namespaces
- Ajax: {
- Busy: {}
- },
- Core: {},
- // CONSTANT VALUES
- Constants: {
- UNLIM_VALUE: 'unlimited', // overritten in i18n.js.php
- UNLIM_TRANSLATED_VALUE: 'unlimited' // overritten in i18n.js.php
- },
- // Actions. More widly used funcs
- Actions: {
- DB: {},
- WEB: {},
- PACKAGE: {},
- MAIL_ACC:{}
- },
- // Utilities
- Helpers: {},
- HTML: {
- Build: {}
- },
- Filters: {},
- Env: {
- lang: GLOBAL.lang,
- },
- i18n: {},
- Listeners: {
- DB: {},
- WEB: {},
- PACKAGE: {},
- MAIL_ACC:{}
- },
- View:{
- HTML: {
- Build: {}
- },
- // pages related views
- },
- Cache: {
- clear: function() {} // TODO: stub method, will be used later
- },
- Ref: {},
- Tmp: {},
- Thread: {
- run: function(delay, ref) {
- setTimeout(function() {
- ref();
- }, delay*10);
- }
- },
- Settings: {
- GLOBAL: {},
- General: {}
- },
- Templates: {
- Templator: null,
- Tpl: {},
- _indexes: {}
- }
- };
- // Internals
- Array.prototype.set = function(key, value){
- var index = this[0][key];
- this[1][index] = value;
- }
- Array.prototype.get = function(key){
- var index = this[0][key];
- return this[1][index];
- }
- Array.prototype.finalize = function(){
- this.shift();
- this[0] = this[0].join('');
- return this[0];
- }
- Array.prototype.done = function(){
- return this.join('');
- }
- String.prototype.wrapperize = function(key, ns){
- var tpl = App.Templates.get(key, ns);
- tpl.set(':content', this);
- return tpl.finalize();
- }
- App.Ajax.request = function(method, data, callback, onError){
- // this will prevent multiple ajaxes on user clicks
- /*if (App.Helpers.isAjaxBusy(method, data)) {
- fb.warn('ajax request ['+method+'] is busy');
- return;
- }*/
- //App.Helpers.setAjaxBusy(method, data);
- data = data || {};
- jQuery.ajax({
- url: GLOBAL.ajax_url,
- global: false,
- type: data.request_method || "GET",
- data: jQuery.extend(data, {'action': method}),
- dataType: "text boost",
- converters: {
- "text boost": function(value) {
- value = value.trim();
- return $.parseJSON(value);
- }},
- async: true,
- cache: false,
- error: function(jqXHR, textStatus, errorThrown)
- {
- onError && onError();
- if ('undefined' != typeof onError) {
- fb.error(textStatus);
- }
- },
- complete: function()
- {
- //App.Helpers.setAjaxFree(method, data);
- },
- success: function(reply)
- {
- //App.Helpers.setAjaxFree(method, data);
- try {
- callback && callback(reply);
- }
- catch(e) {
- alert('GENERAL ERROR: '+e);
- //App.Helpers.generalError();
- }
- }
- });
- }
- jQuery.extend({
- keys: function(obj){
- if (!obj) {
- return [];
- }
- var a = [];
- jQuery.each(obj, function(k){ a.push(k) });
- return a;
- }
- })
- App.Core.create_hidden_form = function(action){
- var form = jQuery('<form>', {
- id : 'hidden-form',
- method : 'post',
- action : action
- });
- jQuery('body').append(form);
- return form;
- };
- App.Core.extend_from_json = function(elm, data, prefix){
- elm = jQuery(elm);
- var data = App.Core.flatten_json(data, prefix);
- var keys = jQuery.keys(data);
- for(var i=0, cnt=keys.length; i<cnt; i++)
- {
- elm.append(jQuery('<input>', {
- name : keys[i],
- value: data[keys[i]],
- type : 'hidden'
- }));
- }
- return elm;
- }
- App.Core.flatten_json = function(data, prefix){
- var keys = jQuery.keys(data);
- var result = {};
- prefix || (prefix = '');
- if(keys.length)
- {
- for(var i=0, cnt=keys.length; i<cnt; i++)
- {
- var value = data[keys[i]];
- switch(typeof(value))
- {
- case 'function': break;
- case 'object' : result = jQuery.extend(result, App.Core.flatten_json(value, prefix + '[' + keys[i] + ']')); break;
- default : result[prefix + '[' + keys[i] + ']'] = value;
- }
- }
- return result;
- }
- else
- {
- return false;
- }
- }
- //
- // Cookies adapter
- // Allow to work old pages realisations of cookie requests
- //
- function createCookie(name, value, expire_days) {
- jQuery.cookie(name, value, { expires: expire_days});
- }
- function readCookie(name) {
- jQuery.cookie(name);
- }
- function eraseCookie(name) {
- jQuery.removeCookie(name);
- }
- /**
- * Timer for profiling
- */
- var timer = {};
- timer.start = function()
- {
- timer.start_time = new Date();
- }
- timer.stop = function( msg )
- {
- timer.stop_time = new Date();
- timer.print( msg );
- }
- timer.print = function( msg )
- {
- var passed = timer.stop_time - timer.start_time;
- fb.info( msg || '' + passed / 1000 );
- }
- String.prototype.trim = function()
- {
- var str = this;
- str = str.replace(/^\s+/, '');
- for (var i = str.length - 1; i >= 0; i--) {
- if (/\S/.test(str.charAt(i))) {
- str = str.substring(0, i + 1);
- break;
- }
- }
- return str;
- }
- hover_menu = function() {
- var sep_1 = $('div.l-content > div.l-separator:nth-of-type(2)');
- var sep_2 = $('div.l-content > div.l-separator:nth-of-type(4)');
- var nav_main = $('.l-stat');
- var nav_a = $('.l-stat .l-stat__col a');
- var nav_context = $('.l-sort');
- var st = $(window).scrollTop();
- if (st <= 112) {
- sep_1.css({'margin-top': 214 - st + 'px'});
- sep_2.css({'margin-top': 259 - st + 'px'});
- nav_a.css({'height': 111 - st + 'px'});
- nav_a.css({'min-height': 111 - st + 'px'});
- nav_context.css({'margin-top': 215 - st + 'px'});
- sep_2.css({'box-shadow':'none'});
- }
- if(st > 112){
- sep_1.css({'margin-top': '100px'});
- sep_2.css({'margin-top': '145px'});
- nav_a.css({'height': '0'});
- nav_a.css({'min-height': '0'});
- nav_context.css({'margin-top': '101px'});
- nav_a.find('ul').css({'visibility': 'hidden'});
- nav_main.css({'padding-top': '27px'});
- sep_2.css({'box-shadow':'0 2px 5px 0 rgba(0, 0, 0, 0.6)'});
- }
- if(st == 0){
- nav_a.css({'min-height': '111px'});
- nav_a.css({'height': '111px'});
- }
- if(st < 109 ){
- nav_a.find('ul').css({'visibility': 'visible'});
- nav_main.css({'padding-top': 30 + 'px'});
- }
- if (st <= 112 && st > 110 ) {
- nav_main.css({'padding-top': 30 - st + 109 + 'px'});
- }
- lastScrollTop = st;
- }
|