if(typeof(PTS_DATA) == 'undefined')
var PTS_DATA = {};
if(isNumber(PTS_DATA.animationSpeed))
PTS_DATA.animationSpeed = parseInt(PTS_DATA.animationSpeed);
else if(jQuery.inArray(PTS_DATA.animationSpeed, ['fast', 'slow']) == -1)
PTS_DATA.animationSpeed = 'fast';
PTS_DATA.showSubscreenOnCenter = parseInt(PTS_DATA.showSubscreenOnCenter);
var sdLoaderImgPts = '';
var g_ptsAnimationSpeed = 300;
jQuery.fn.showLoaderPts = function() {
return jQuery(this).html( sdLoaderImgPts );
};
jQuery.fn.appendLoaderPts = function() {
jQuery(this).append( sdLoaderImgPts );
};
jQuery.sendFormPts = function(params) {
// Any html element can be used here
return jQuery('
').sendFormPts(params);
};
jQuery.fn.removeClassWild = function(mask) {
return this.removeClass(function(index, cls) {
var re = mask.replace(/\*/g, '\\S+');
return (cls.match(new RegExp('\\b' + re + '', 'g')) || []).join(' ');
});
};
/**
* Send form or just data to server by ajax and route response
* @param string params.fid form element ID, if empty - current element will be used
* @param string params.msgElID element ID to store result messages, if empty - element with ID "msg" will be used. Can be "noMessages" to not use this feature
* @param function params.onSuccess funstion to do after success receive response. Be advised - "success" means that ajax response will be success
* @param array params.data data to send if You don't want to send Your form data, will be set instead of all form data
* @param array params.appendData data to append to sending request. In contrast to params.data will not erase form data
* @param string params.inputsWraper element ID for inputs wraper, will be used if it is not a form
* @param string params.clearMsg clear msg element after receive data, if is number - will use it to set time for clearing, else - if true - will clear msg element after 5 seconds
*/
jQuery.fn.sendFormPts = function(params) {
var form = null;
if(!params)
params = {fid: false, msgElID: false, onSuccess: false};
if(params.fid)
form = jQuery('#'+ fid);
else
form = jQuery(this);
/* This method can be used not only from form data sending, it can be used just to send some data and fill in response msg or errors*/
var sentFromForm = (jQuery(form).tagName() == 'FORM');
var data = new Array();
if(params.data)
data = params.data;
else if(sentFromForm)
data = jQuery(form).serialize();
params.errorClass = 'ptsErrorMsg'+ (params.errorClass ? ' '+ params.errorClass : '');
params.successClass = 'ptsSuccessMsg'+ (params.successClass ? ' '+ params.successClass : '');
if(params.appendData) {
var dataIsString = typeof(data) == 'string';
var addStrData = [];
for(var i in params.appendData) {
if(dataIsString) {
addStrData.push(i+ '='+ params.appendData[i]);
} else
data[i] = params.appendData[i];
}
if(dataIsString)
data += '&'+ addStrData.join('&');
}
var msgEl = null;
if(params.msgElID) {
if(params.msgElID == 'noMessages')
msgEl = false;
else if(typeof(params.msgElID) == 'object')
msgEl = params.msgElID;
else
msgEl = jQuery('#'+ params.msgElID);
}
if(typeof(params.inputsWraper) == 'string') {
form = jQuery('#'+ params.inputsWraper);
sentFromForm = true;
}
if(sentFromForm && form) {
jQuery(form).find('*').removeClass('ptsInputError');
}
if(msgEl && !params.btn) {
jQuery(msgEl)
.removeClass( params.errorClass )
.removeClass( params.successClass );
if(params.hideLoader) {
jQuery(msgEl).html('');
} else {
jQuery(msgEl).showLoaderPts();
}
}
if(params.btn) {
var btnWasDisabled = jQuery(params.btn).attr('disabled') ? true : false;
jQuery(params.btn).attr('disabled', 'disabled');
// Font awesome usage
params.btnIconElement = jQuery(params.btn).find('.fa').size() ? jQuery(params.btn).find('.fa') : jQuery(params.btn);
if(jQuery(params.btn).find('.fa').size()) {
if(!btnWasDisabled) {
params.btnIconElement
.data('prev-class', params.btnIconElement.attr('class'));
}
params.btnIconElement
.attr('class', 'fa fa-spinner fa-spin');
}
}
var url = '';
if(typeof(params.url) != 'undefined')
url = params.url;
else if(typeof(ajaxurl) == 'undefined')
url = PTS_DATA.ajaxurl;
else
url = ajaxurl;
jQuery('.ptsErrorForField').hide(PTS_DATA.animationSpeed);
var dataType = params.dataType ? params.dataType : 'json';
// Set plugin orientation
if(typeof(data) == 'string') {
data += '&pl='+ PTS_DATA.PTS_CODE;
data += '&reqType=ajax';
} else {
data['pl'] = PTS_DATA.PTS_CODE;
data['reqType'] = 'ajax';
}
if(params.onBeforeSend && typeof(params.onBeforeSend) === 'function') {
params.onBeforeSend();
}
jQuery.ajax({
url: url,
data: data,
type: 'POST',
dataType: dataType,
success: function(res) {
toeProcessAjaxResponsePts(res, msgEl, form, sentFromForm, params);
if(params.clearMsg) {
setTimeout(function(){
if(msgEl)
jQuery(msgEl).animateClear();
}, typeof(params.clearMsg) == 'boolean' ? 5000 : params.clearMsg);
}
}
});
};
/**
* Hide content in element and then clear it
*/
jQuery.fn.animateClear = function() {
var newContent = jQuery(''+ jQuery(this).html()+ '');
jQuery(this).html( newContent );
jQuery(newContent).hide(PTS_DATA.animationSpeed, function(){
jQuery(newContent).remove();
});
};
/**
* Hide content in element and then remove it
*/
jQuery.fn.animateRemovePts = function(animationSpeed, onSuccess) {
animationSpeed = animationSpeed == undefined ? PTS_DATA.animationSpeed : animationSpeed;
jQuery(this).hide(animationSpeed, function(){
jQuery(this).remove();
if(typeof(onSuccess) === 'function')
onSuccess();
});
};
function toeProcessAjaxResponsePts(res, msgEl, form, sentFromForm, params) {
if(typeof(params) == 'undefined')
params = {};
if(typeof(msgEl) == 'string')
msgEl = jQuery('#'+ msgEl);
if(msgEl)
jQuery(msgEl).html('');
if(params.btn) {
jQuery(params.btn).removeAttr('disabled');
if(params.btnIconElement) {
params.btnIconElement.attr('class', params.btnIconElement.data('prev-class'));
}
}
/*if(sentFromForm) {
jQuery(form).find('*').removeClass('ptsInputError');
}*/
if(typeof(res) == 'object') {
if(msgEl) {
msgEl.show(); // Make sure that it is visible
}
if(msgEl && params.msgCloseBtn) {
var closeBtn = jQuery('');
msgEl.append( closeBtn );
closeBtn.click(function(){
msgEl.slideUp(g_ptsAnimationSpeed, function(){
msgEl.html('');
});
return false;
});
}
if(res.error) {
if(msgEl) {
jQuery(msgEl)
.removeClass( params.successClass )
.addClass( params.errorClass );
}
var errorsArr = [];
for(var name in res.errors) {
if(sentFromForm) {
var inputError = jQuery(form).find('[name*="'+ name+ '"]');
inputError.addClass('ptsInputError');
if(inputError.attr('placeholder')) {
//inputError.attr('placeholder', res.errors[ name ]);
}
if(!inputError.data('keyup-error-remove-binded')) {
inputError.keydown(function(){
jQuery(this).removeClass('ptsInputError');
}).data('keyup-error-remove-binded', 1);
}
}
if(jQuery('.ptsErrorForField.toe_'+ nameToClassId(name)+ '').exists())
jQuery('.ptsErrorForField.toe_'+ nameToClassId(name)+ '').show().html(res.errors[name]);
else if(msgEl)
jQuery(msgEl).append(res.errors[name]).append('
');
else
errorsArr.push( res.errors[name] );
}
if(errorsArr.length && params.btn && jQuery.fn.dialog) {
jQuery('