"use strict";
var wpfAdminFormChanged = [];
window.onbeforeunload = function(){
// If there are at lease one unsaved form - show message for confirnation for page leave
if(wpfAdminFormChanged.length)
return 'Some changes were not-saved. Are you sure you want to leave?';
};
jQuery(document).ready(function(){
if(typeof(wpfActiveTab) != 'undefined' && wpfActiveTab != 'main_page' && jQuery('#toplevel_page_wpf-comparison-slider').hasClass('wp-has-current-submenu')) {
var subMenus = jQuery('#toplevel_page_wpf-comparison-slider').find('.wp-submenu li');
subMenus.removeClass('current').each(function(){
if(jQuery(this).find('a[href$="&tab='+ wpfActiveTab+ '"]').length) {
jQuery(this).addClass('current');
}
});
}
// Timeout - is to count only user changes, because some changes can be done auto when form is loaded
setTimeout(function() {
// If some changes was made in those forms and they were not saved - show message for confirnation before page reload
var formsPreventLeave = [];
if(formsPreventLeave && formsPreventLeave.length) {
jQuery('#'+ formsPreventLeave.join(', #')).find('input,select').change(function(){
var formId = jQuery(this).parents('form:first').attr('id');
changeAdminFormWpf(formId);
});
jQuery('#'+ formsPreventLeave.join(', #')).find('input[type=text],textarea').keyup(function(){
var formId = jQuery(this).parents('form:first').attr('id');
changeAdminFormWpf(formId);
});
jQuery('#'+ formsPreventLeave.join(', #')).submit(function(){
adminFormSavedWpf( jQuery(this).attr('id') );
});
}
}, 1000);
if(jQuery('.wpfInputsWithDescrForm').length) {
jQuery('.wpfInputsWithDescrForm').find('input[type=checkbox][data-optkey]').change(function(){
var optKey = jQuery(this).data('optkey')
, descShell = jQuery('#wpfFormOptDetails_'+ optKey);
if(descShell.length) {
if(jQuery(this).is(':checked')) {
descShell.slideDown( 300 );
} else {
descShell.slideUp( 300 );
}
}
}).trigger('change');
}
wpfInitStickyItem();
jQuery('.wpfFieldsetToggled').each(function(){
var self = this;
jQuery(self).find('.wpfFieldsetContent').hide();
jQuery(self).find('.wpfFieldsetToggleBtn').click(function(){
var icon = jQuery(this).find('i')
, show = icon.hasClass('fa-plus');
show ? icon.removeClass('fa-plus').addClass('fa-minus') : icon.removeClass('fa-minus').addClass('fa-plus');
jQuery(self).find('.wpfFieldsetContent').slideToggle( 300, function(){
if(show) {
jQuery(this).find('textarea').each(function(i, el){
if(typeof(this.CodeMirrorEditor) !== 'undefined') {
this.CodeMirrorEditor.refresh();
}
});
}
} );
return false;
});
});
// for checkboxHiddenVal type, see class HtmlWpf
jQuery('input[data-hiden-input=1]').change(function() {
var hidenInput = jQuery(this).next();
if (jQuery(this).prop("checked")) {
jQuery(hidenInput).val("1");
} else {
jQuery(hidenInput).val("0");
}
});
// Go to Top button init
if(jQuery('#wpfPopupGoToTopBtn').length) {
jQuery('#wpfPopupGoToTopBtn').click(function(){
jQuery('html, body').animate({
scrollTop: 0
}, 1000);
jQuery(this).parents('#wpfPopupGoToTop:first').hide();
return false;
});
}
wpfInitTooltips();
jQuery(document.body).on('changeTooltips', function (e) {
wpfInitTooltips(e.target);
jQuery(e.target).find('.tooltipstered').removeAttr('title');
});
if(jQuery('.wpfCopyTextCode').length) {
setTimeout(function(){ // Give it some time - wait until all other elements will be initialized
var cloneWidthElement = jQuery('<span class="sup-shortcode" />').appendTo('.woobewoo-plugin');
jQuery('.wpfCopyTextCode').attr('readonly', 'readonly').click(function(){
this.setSelectionRange(0, this.value.length);
}).focus(function(){
this.setSelectionRange(0, this.value.length);
});
jQuery('input.wpfCopyTextCode').each(function(){
cloneWidthElement.html( str_replace(jQuery(this).val(), '<', 'P') );
var parentSelector = jQuery(this).data('parent-selector')
, parentWidth = (parentSelector && parentSelector != ''
? jQuery(this).parents(parentSelector+ ':first')
: jQuery(this).parent()
).width()
, txtWidth = cloneWidthElement.width();
if(parentWidth <= 0 || parentWidth > txtWidth) {
jQuery(this).width( cloneWidthElement.width() );
}
});
cloneWidthElement.remove();
}, 500);
}
// Check for showing review notice after a week usage
wpfInitPlugNotices();
jQuery('.woobewoo-plugin-loader').css('display', 'none');
jQuery('.woobewoo-main').css('display', 'block');
jQuery(".woobewoo-plugin .tooltipstered").removeAttr("title");
});
function wpfInitTooltips( selector ) {
var tooltipsterSettings = {
contentAsHTML: true
, interactive: true
, speed: 0
, delay: 0
, maxWidth: 450
}
, findPos = {
'.woobewoo-tooltip': 'top-left'
, '.woobewoo-tooltip-bottom': 'bottom-left'
, '.woobewoo-tooltip-left': 'left'
, '.woobewoo-tooltip-right': 'right'
}
, $findIn = selector ? jQuery( selector ) : false;
for(var k in findPos) {
if(typeof(k) === 'string') {
var $tips = $findIn ? $findIn.find( k ) : jQuery( k ).not('.no-tooltip');
if($tips && $tips.length) {
tooltipsterSettings.position = findPos[ k ];
// Fallback for case if library was not loaded
if(!$tips.tooltipster) continue;
$tips.tooltipster( tooltipsterSettings );
}
}
}
}
function changeAdminFormWpf(formId) {
if(jQuery.inArray(formId, wpfAdminFormChanged) == -1)
wpfAdminFormChanged.push(formId);
}
function adminFormSavedWpf(formId) {
if(wpfAdminFormChanged.length) {
for(var i in wpfAdminFormChanged) {
if(wpfAdminFormChanged[i] == formId) {
wpfAdminFormChanged.pop(i);
}
}
}
}
function checkAdminFormSaved() {
if(wpfAdminFormChanged.length) {
if(!confirm(toeLangWpf('Some changes were not-saved. Are you sure you want to leave?'))) {
return false;
}
wpfAdminFormChanged = []; // Clear unsaved forms array - if user wanted to do this
}
return true;
}
function isAdminFormChanged(formId) {
if(wpfAdminFormChanged.length) {
for(var i in wpfAdminFormChanged) {
if(wpfAdminFormChanged[i] == formId) {
return true;
}
}
}
return false;
}
/*Some items should be always on users screen*/
function wpfInitStickyItem() {
jQuery(window).scroll(function(){
var stickiItemsSelectors = ['.woobewoo-sticky']
, elementsUsePaddingNext = ['.woobewoo-bar'] // For example - if we stick row - then all other should not offest to top after we will place element as fixed
, wpTollbarHeight = 32
, wndScrollTop = jQuery(window).scrollTop() + wpTollbarHeight
, footer = jQuery('.wpfAdminFooterShell')
, footerHeight = footer && footer.length ? footer.height() : 0
, docHeight = jQuery(document).height()
, wasSticking = false
, wasUnSticking = false;
/*if(jQuery('#wpbody-content .update-nag').length) { // Not used for now
wpTollbarHeight += parseInt(jQuery('#wpbody-content .update-nag').outerHeight());
}*/
for(var i = 0; i < stickiItemsSelectors.length; i++) {
jQuery(stickiItemsSelectors[ i ]).each(function(){
var element = jQuery(this);
if(element && element.length && !element.hasClass('sticky-ignore')) {
var scrollMinPos = element.offset().top
, prevScrollMinPos = parseInt(element.data('scrollMinPos'))
, useNextElementPadding = toeInArray(stickiItemsSelectors[ i ], elementsUsePaddingNext) !== -1 || element.hasClass('sticky-padd-next')
, currentScrollTop = wndScrollTop
, calcPrevHeight = element.data('prev-height')
, currentBorderHeight = wpTollbarHeight
, usePrevHeight = 0;
if(calcPrevHeight) {
usePrevHeight = jQuery(calcPrevHeight).outerHeight();
currentBorderHeight += usePrevHeight;
}
if(currentScrollTop > scrollMinPos && !element.hasClass('woobewoo-sticky-active')) { // Start sticking
if(element.hasClass('sticky-save-width')) {
element.width( element.width() );
}
element.addClass('woobewoo-sticky-active').data('scrollMinPos', scrollMinPos).css({
'top': currentBorderHeight
});
if(useNextElementPadding) {
var nextElement = element.next();
if(nextElement && nextElement.length) {
nextElement.data('prevPaddingTop', nextElement.css('padding-top'));
var addToNextPadding = parseInt(element.data('next-padding-add'));
addToNextPadding = addToNextPadding ? addToNextPadding : 0;
nextElement.css({
'padding-top': (element.hasClass('sticky-outer-height') ? element.outerHeight() : element.height()) + usePrevHeight + addToNextPadding
});
}
}
wasSticking = true;
element.trigger('startSticky');
} else if(!isNaN(prevScrollMinPos) && currentScrollTop <= prevScrollMinPos) { // Stop sticking
element.removeClass('woobewoo-sticky-active').data('scrollMinPos', 0).css({
'top': 0
});
if(element.hasClass('sticky-save-width')) {
if(element.hasClass('sticky-base-width-auto')) {
element.css('width', 'auto');
}
}
if(useNextElementPadding) {
var nextElement = element.next();
if(nextElement && nextElement.length) {
var nextPrevPaddingTop = parseInt(nextElement.data('prevPaddingTop'));
if(isNaN(nextPrevPaddingTop))
nextPrevPaddingTop = 0;
nextElement.css({
'padding-top': nextPrevPaddingTop
});
}
}
element.trigger('stopSticky');
wasUnSticking = true;
} else { // Check new stick position
if(element.hasClass('woobewoo-sticky-active')) {
if(footerHeight) {
var elementHeight = element.height()
, heightCorrection = 32
, topDiff = docHeight - footerHeight - (currentScrollTop + elementHeight + heightCorrection);
if(topDiff < 0) {
element.css({
'top': currentBorderHeight + topDiff
});
} else {
element.css({
'top': currentBorderHeight
});
}
}
// If at least on element is still sticking - count it as all is working
wasSticking = wasUnSticking = false;
}
}
}
});
}
if(wasSticking) {
if(jQuery('#wpfPopupGoToTop').length)
jQuery('#wpfPopupGoToTop').show();
} else if(wasUnSticking) {
if(jQuery('#wpfPopupGoToTop').length)
jQuery('#wpfPopupGoToTop').hide();
}
});
}
function wpfInitCustomCheckRadio(selector) {
if(!jQuery.fn.iCheck) return;
if(!selector)
selector = document;
jQuery(selector).find('input').iCheck('destroy').iCheck({
checkboxClass: 'icheckbox_minimal'
, radioClass: 'iradio_minimal'
}).on('ifChanged', function(e){
// for checkboxHiddenVal type, see class HtmlWpf
jQuery(this).trigger('change');
if(jQuery(this).hasClass('cbox')) {
var parentRow = jQuery(this).parents('.jqgrow:first');
if(parentRow && parentRow.length) {
jQuery(this).parents('td:first').trigger('click');
} else {
var checkId = jQuery(this).attr('id');
if(checkId && checkId != '' && strpos(checkId, 'cb_') === 0) {
var parentTblId = str_replace(checkId, 'cb_', '');
if(parentTblId && parentTblId != '' && jQuery('#'+ parentTblId).length) {
jQuery('#'+ parentTblId).find('input[type=checkbox]').iCheck('update');
}
}
}
}
}).on('ifClicked', function(e){
jQuery(this).trigger('click');
});
}
function wpfCheckDestroy(checkbox) {
if(!jQuery.fn.iCheck) return;
jQuery(checkbox).iCheck('destroy');
}
function wpfCheckDestroyArea(selector) {
if(!jQuery.fn.iCheck) return;
jQuery(selector).find('input[type=checkbox]').iCheck('destroy');
}
function wpfCheckUpdate(checkbox) {
if(!jQuery.fn.iCheck) return;
jQuery(checkbox).iCheck('update');
}
function wpfCheckUpdateArea(selector) {
if(!jQuery.fn.iCheck) return;
jQuery(selector).find('input[type=checkbox]').iCheck('update');
}
function wpfGetTxtEditorVal(id) {
if(typeof(tinyMCE) !== 'undefined'
&& tinyMCE.get( id )
&& !jQuery('#'+ id).is(':visible')
&& tinyMCE.get( id ).getDoc
&& typeof(tinyMCE.get( id ).getDoc) == 'function'
&& tinyMCE.get( id ).getDoc()
)
return tinyMCE.get( id ).getContent();
else
return jQuery('#'+ id).val();
}
function wpfSetTxtEditorVal(id, content) {
if(typeof(tinyMCE) !== 'undefined'
&& tinyMCE
&& tinyMCE.get( id )
&& !jQuery('#'+ id).is(':visible')
&& tinyMCE.get( id ).getDoc
&& typeof(tinyMCE.get( id ).getDoc) == 'function'
&& tinyMCE.get( id ).getDoc()
)
tinyMCE.get( id ).setContent(content);
else
jQuery('#'+ id).val( content );
}
/**
* Add data to jqGrid object post params search
* @param {object} param Search params to set
* @param {string} gridSelectorId ID of grid table html element
*/
function wpfGridSetListSearch(param, gridSelectorId) {
jQuery('#'+ gridSelectorId).setGridParam({
postData: {
search: param
}
});
}
/**
* Set data to jqGrid object post params search and trigger search
* @param {object} param Search params to set
* @param {string} gridSelectorId ID of grid table html element
*/
function wpfGridDoListSearch(param, gridSelectorId) {
wpfGridSetListSearch(param, gridSelectorId);
jQuery('#'+ gridSelectorId).trigger( 'reloadGrid' );
}
/**
* Get row data from jqGrid
* @param {number} id Item ID (from database for example)
* @param {string} gridSelectorId ID of grid table html element
* @return {object} Row data
*/
function wpfGetGridDataById(id, gridSelectorId) {
var rowId = getGridRowId(id, gridSelectorId);
if(rowId) {
return jQuery('#'+ gridSelectorId).jqGrid ('getRowData', rowId);
}
return false;
}
/**
* Get cell data from jqGrid
* @param {number} id Item ID (from database for example)
* @param {string} column Column name
* @param {string} gridSelectorId ID of grid table html element
* @return {string} Cell data
*/
function wpfGetGridColDataById(id, column, gridSelectorId) {
var rowId = getGridRowId(id, gridSelectorId);
if(rowId) {
return jQuery('#'+ gridSelectorId).jqGrid ('getCell', rowId, column);
}
return false;
}
/**
* Get grid row ID (ID of table row) from item ID (from database ID for example)
* @param {number} id Item ID (from database for example)
* @param {string} gridSelectorId ID of grid table html element
* @return {number} Table row ID
*/
function getGridRowId(id, gridSelectorId) {
var rowId = parseInt(jQuery('#'+ gridSelectorId).find('[aria-describedby='+ gridSelectorId+ '_id][title='+ id+ ']').parent('tr:first').index());
if(!rowId) {
console.log('CAN NOT FIND ITEM WITH ID '+ id);
return false;
}
return rowId;
}
function prepareToPlotDate(data) {
if(typeof(data) === 'string') {
if(data) {
data = str_replace(data, '/', '-');
return (new Date(data)).getTime();
}
}
return data;
}
function wpfInitPlugNotices() {
var $notices = jQuery('.woobewoo-admin-notice');
if($notices && $notices.length) {
$notices.each(function(){
jQuery(this).find('.notice-dismiss').click(function(){
var $notice = jQuery(this).parents('.woobewoo-admin-notice');
if(!$notice.data('stats-sent')) {
// User closed this message - that is his choise, let's respect this and save it's saved status
jQuery.sendFormWpf({
data: {mod: 'promo', action: 'addNoticeAction', code: $notice.data('code'), choice: 'hide'}
});
}
});
jQuery(this).find('[data-statistic-code]').click(function(){
var href = jQuery(this).attr('href')
, $notice = jQuery(this).parents('.woobewoo-admin-notice');
jQuery.sendFormWpf({
data: {mod: 'promo', action: 'addNoticeAction', code: $notice.data('code'), choice: jQuery(this).data('statistic-code')}
});
$notice.data('stats-sent', 1).find('.notice-dismiss').trigger('click');
if(!href || href === '' || href === '#')
return false;
});
var $enbStatsBtn = jQuery(this).find('.wpfEnbStatsAdBtn');
if($enbStatsBtn && $enbStatsBtn.length) {
$enbStatsBtn.click(function(){
jQuery.sendFormWpf({
data: {mod: 'promo', action: 'enbStatsOpt'}
});
return false;
});
}
});
}
}
/**
* Main promo popup will show each time user will try to modify PRO option with free version only
*/
function wpfGetMainPromoPopup() {
if(jQuery('#wpfOptInProWnd').hasClass('ui-dialog-content')) {
return jQuery('#wpfOptInProWnd');
}
return jQuery('#wpfOptInProWnd').dialog({
modal: true
, autoOpen: false
, width: 540
, height: 200
, open: function() {
jQuery('#wpfOptWndTemplateTxt').hide();
jQuery('#wpfOptWndOptionTxt').show();
}
});
}
function wpfInitMainPromoPopup() {
if(!WPF_DATA.isPro) {
var $proOptWnd = wpfGetMainPromoPopup();
jQuery('.wpfProOpt').change(function(e){
e.stopPropagation();
var needShow = true
, isRadio = jQuery(this).attr('type') == 'radio'
, isCheck = jQuery(this).attr('type') == 'checkbox';
if(isRadio && !jQuery(this).attr('checked')) {
needShow = false;
}
if(!needShow) {
return;
}
if(isRadio) {
jQuery('input[name="'+ jQuery(this).attr('name')+ '"]:first').parents('label:first').click();
if(jQuery(this).parents('.iradio_minimal:first').length) {
var self = this;
setTimeout(function(){
jQuery(self).parents('.iradio_minimal:first').removeClass('checked');
}, 10);
}
}
var parent = null;
if(jQuery(this).parents('#wpfPopupMainOpts').length) {
parent = jQuery(this).parents('label:first');
} else if(jQuery(this).parents('.wpfPopupOptRow:first').length) {
parent = jQuery(this).parents('.wpfPopupOptRow:first');
} else {
parent = jQuery(this).parents('tr:first');
}
if(!parent.length) return;
var promoLink = parent.find('.wpfProOptMiniLabel a').attr('href');
if(promoLink && promoLink != '') {
jQuery('#wpfOptInProWnd a').attr('href', promoLink);
}
$proOptWnd.dialog('open');
return false;
});
}
}