(function (global, $) { 'use strict'; var fn = {}, hexDigits = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"], filemaxsize = 64; fn.isNumeric = function (n) { return !isNaN(parseFloat(n)) && isFinite(n); }; fn.s4 = function () { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); }; fn.hex = function (x) { return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16]; }; fn.rgb2hex = function (rgb) { rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); return "#" + fn.hex(rgb[1]) + fn.hex(rgb[2]) + fn.hex(rgb[3]); }; fn.hex2rgb = function (hex) { if (hex.lastIndexOf('#') > -1) { hex = hex.replace(/#/, '0x'); } else { hex = '0x' + hex; } return [hex >> 16, (hex & 0x00FF00) >> 8, hex & 0x0000FF]; }; fn.isDarkColor = function(hex) { if (hex == 'transparent') { return false; } var rgb = fn.hex2rgb(hex), brightness; brightness = (rgb[0] * 299) + (rgb[1] * 587) + (rgb[2] * 114); brightness = brightness / 255000; // values range from 0 to 1 // anything greater than 0.5 should be bright enough for dark text return brightness < 0.5; }; fn.parseDate = function (str) { var parts = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); if (parts !== null) { var d = +parts[2], m = +parts[1], y = +parts[3], date = new Date(y, m - 1, d); if (date.getFullYear() === y && date.getMonth() === m - 1) { return date; } } return null; }; fn.validEmail = function (email) { return /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(email); }; fn.validDate = function (date) { return Boolean(this.parseDate(date)); }; fn.validNumber = function (number) { return /^\d+$/i.test(number); }; fn.validUrl = function (url) { return /^(https?:\/\/)?([\da-zа-яё\.-]+)\.([a-zа-яё\.]{2,6})([=&\?\/\w %\.\-]*)*\/?$/i.test(url); }; fn.validSubdomain = function (subdomain) { return subdomain && /^[0-9a-z]+$/.test(subdomain); }; fn.validApiKey = function (api_key) { return api_key && /^[0-9a-f]{32}$/i.test(api_key); }; fn.validExtensions = function (extensions) { return extensions && /^(\.[a-z0-9]+,?\s?)*$/i.test(extensions); }; fn.validFilesize = function (filesize) { return filesize && +filesize <= filemaxsize && +filesize > 0; }; fn.pickmeup_options = { first_day: 0, format: 'm/d/Y', hide_on_select: true, default_date: false, trigger_event: 'click touchstart focus' }; global.AMOFORMS = $.extend(true, global.AMOFORMS || {}, { core: { fn: fn } }); }(window, jQuery));