Untuk support seputar bug dan masalah eror harap dilaporkan kepada developer agar segera diperbaiki. Kerusakan tema dikarenakan custom yang dilakukan pengguna tidak dilayani perbaikannya

Berikut adalah alternatif kontak yang dapat digunakan untuk menghubungi developer yayun 0838-1525-1385 yayun@ciuss.com facebook.com/ciussgw ciuss.com /*! * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/) * Author: Boniface Pereira * Website: www.craftpip.com * Contact: hey@craftpip.com * * Copyright 2013-2019 jquery-confirm * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE) */ /** * UMD (Universal Module Definition) to support CommonJS, AMD and browser * Thanks to https://github.com/umdjs/umd */ (function(factory){ if(typeof define === 'function' && define.amd){ // AMD. Register as an anonymous module. define(['jquery'], factory); }else if(typeof module === 'object' && module.exports){ // Node/CommonJS module.exports = function(root, jQuery){ if(jQuery === undefined){ // require('jQuery') returns a factory that requires window to // build a jQuery instance, we normalize how we use modules // that require this pattern but the window provided is a noop // if it's defined (how jquery works) if(typeof window !== 'undefined'){ jQuery = require('jquery'); } else{ jQuery = require('jquery')(root); } } factory(jQuery); return jQuery; }; }else{ // Browser globals factory(jQuery); } }(function($){ "use strict"; // locally assign window var w = window; // w.jconfirm // w.Jconfirm; $.fn.confirm = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false }; } /* * Alias of $.confirm to emulate native confirm() */ $(this).each(function(){ var $this = $(this); if($this.attr('jc-attached')){ console.warn('jConfirm has already been attached to this element ', $this[0]); return; } $this.on('click', function(e){ e.preventDefault(); var jcOption = $.extend({}, options); if($this.attr('data-title')) jcOption['title'] = $this.attr('data-title'); if($this.attr('data-content')) jcOption['content'] = $this.attr('data-content'); if(typeof jcOption['buttons'] === 'undefined') jcOption['buttons'] = {}; jcOption['$target'] = $this; if($this.attr('href') && Object.keys(jcOption['buttons']).length === 0){ var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {}); var firstBtn = Object.keys(buttons)[0]; jcOption['buttons'] = buttons; jcOption.buttons[firstBtn].action = function(){ location.href = $this.attr('href'); }; } jcOption['closeIcon'] = false; var instance = $.confirm(jcOption); }); $this.attr('jc-attached', true); }); return $(this); }; $.confirm = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false }; } var putDefaultButtons = !(options['buttons'] === false); if(typeof options['buttons'] !== 'object') options['buttons'] = {}; if(Object.keys(options['buttons']).length === 0 && putDefaultButtons){ var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {}); options['buttons'] = buttons; } /* * Alias of jconfirm */ return w.jconfirm(options); }; $.alert = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false }; } var putDefaultButtons = !(options['buttons'] === false); if(typeof options.buttons !== 'object') options.buttons = {}; if(Object.keys(options['buttons']).length === 0 && putDefaultButtons){ var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {}); var firstBtn = Object.keys(buttons)[0]; options['buttons'][firstBtn] = buttons[firstBtn]; } /* * Alias of jconfirm */ return w.jconfirm(options); }; $.dialog = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false, closeIcon: function(){ // Just close the modal } }; } options['buttons'] = {}; // purge buttons if(typeof options['closeIcon'] === 'undefined'){ // Dialog must have a closeIcon. options['closeIcon'] = function(){ } } /* * Alias of jconfirm */ options.confirmKeys = [13]; return w.jconfirm(options); }; w.jconfirm = function(options){ if(typeof options === 'undefined') options = {}; /* * initial function for calling. */ var pluginOptions = $.extend(true, {}, w.jconfirm.pluginDefaults); if(w.jconfirm.defaults){ pluginOptions = $.extend(true, pluginOptions, w.jconfirm.defaults); } /* * merge options with plugin defaults. */ pluginOptions = $.extend(true, {}, pluginOptions, options); var instance = new w.Jconfirm(pluginOptions); w.jconfirm.instances.push(instance); return instance; }; w.Jconfirm = function(options){ /* * constructor function Jconfirm, * options = user options. */ $.extend(this, options); this._init(); }; w.Jconfirm.prototype = { _init: function(){ var that = this; if(!w.jconfirm.instances.length) w.jconfirm.lastFocused = $('body').find(':focus'); this._id = Math.round(Math.random() * 99999); /** * contentParsed maintains the contents for $content, before it is put in DOM */ this.contentParsed = $(document.createElement('div')); if(!this.lazyOpen){ setTimeout(function(){ that.open(); }, 0); } }, _buildHTML: function(){ var that = this; // prefix the animation string and store in animationParsed this._parseAnimation(this.animation, 'o'); this._parseAnimation(this.closeAnimation, 'c'); this._parseBgDismissAnimation(this.backgroundDismissAnimation); this._parseColumnClass(this.columnClass); this._parseTheme(this.theme); this._parseType(this.type); /* * Append html. */ var template = $(this.template); template.find('.jconfirm-box').addClass(this.animationParsed).addClass(this.backgroundDismissAnimationParsed).addClass(this.typeParsed); if(this.typeAnimated) template.find('.jconfirm-box').addClass('jconfirm-type-animated'); if(this.useBootstrap){ template.find('.jc-bs3-row').addClass(this.bootstrapClasses.row); template.find('.jc-bs3-row').addClass('justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center'); template.find('.jconfirm-box-container').addClass(this.columnClassParsed); if(this.containerFluid) template.find('.jc-bs3-container').addClass(this.bootstrapClasses.containerFluid); else template.find('.jc-bs3-container').addClass(this.bootstrapClasses.container); }else{ template.find('.jconfirm-box').css('width', this.boxWidth); } if(this.titleClass) template.find('.jconfirm-title-c').addClass(this.titleClass); template.addClass(this.themeParsed); var ariaLabel = 'jconfirm-box' + this._id; template.find('.jconfirm-box').attr('aria-labelledby', ariaLabel).attr('tabindex', -1); template.find('.jconfirm-content').attr('id', ariaLabel); if(this.bgOpacity !== null) template.find('.jconfirm-bg').css('opacity', this.bgOpacity); if(this.rtl) template.addClass('jconfirm-rtl'); this.$el = template.appendTo(this.container); this.$jconfirmBoxContainer = this.$el.find('.jconfirm-box-container'); this.$jconfirmBox = this.$body = this.$el.find('.jconfirm-box'); this.$jconfirmBg = this.$el.find('.jconfirm-bg'); this.$title = this.$el.find('.jconfirm-title'); this.$titleContainer = this.$el.find('.jconfirm-title-c'); this.$content = this.$el.find('div.jconfirm-content'); this.$contentPane = this.$el.find('.jconfirm-content-pane'); this.$icon = this.$el.find('.jconfirm-icon-c'); this.$closeIcon = this.$el.find('.jconfirm-closeIcon'); this.$holder = this.$el.find('.jconfirm-holder'); // this.$content.css(this._getCSS(this.animationSpeed, this.animationBounce)); this.$btnc = this.$el.find('.jconfirm-buttons'); this.$scrollPane = this.$el.find('.jconfirm-scrollpane'); that.setStartingPoint(); // for loading content via URL this._contentReady = $.Deferred(); this._modalReady = $.Deferred(); this.$holder.css({ 'padding-top': this.offsetTop, 'padding-bottom': this.offsetBottom, }); this.setTitle(); this.setIcon(); this._setButtons(); this._parseContent(); this.initDraggable(); if(this.isAjax) this.showLoading(false); $.when(this._contentReady, this._modalReady).then(function(){ if(that.isAjaxLoading) setTimeout(function(){ that.isAjaxLoading = false; that.setContent(); that.setTitle(); that.setIcon(); setTimeout(function(){ that.hideLoading(false); that._updateContentMaxHeight(); }, 100); if(typeof that.onContentReady === 'function') that.onContentReady(); }, 50); else{ // that.setContent(); that._updateContentMaxHeight(); that.setTitle(); that.setIcon(); if(typeof that.onContentReady === 'function') that.onContentReady(); } // start countdown after content has loaded. if(that.autoClose) that._startCountDown(); }).then(function(){ that._watchContent(); }); if(this.animation === 'none'){ this.animationSpeed = 1; this.animationBounce = 1; } this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce)); this.$contentPane.css(this._getCSS(this.animationSpeed, 1)); this.$jconfirmBg.css(this._getCSS(this.animationSpeed, 1)); this.$jconfirmBoxContainer.css(this._getCSS(this.animationSpeed, 1)); }, _typePrefix: 'jconfirm-type-', typeParsed: '', _parseType: function(type){ this.typeParsed = this._typePrefix + type; }, setType: function(type){ var oldClass = this.typeParsed; this._parseType(type); this.$jconfirmBox.removeClass(oldClass).addClass(this.typeParsed); }, themeParsed: '', _themePrefix: 'jconfirm-', setTheme: function(theme){ var previous = this.theme; this.theme = theme || this.theme; this._parseTheme(this.theme); if(previous) this.$el.removeClass(previous); this.$el.addClass(this.themeParsed); this.theme = theme; }, _parseTheme: function(theme){ var that = this; theme = theme.split(','); $.each(theme, function(k, a){ if(a.indexOf(that._themePrefix) === -1) theme[k] = that._themePrefix + $.trim(a); }); this.themeParsed = theme.join(' ').toLowerCase(); }, backgroundDismissAnimationParsed: '', _bgDismissPrefix: 'jconfirm-hilight-', _parseBgDismissAnimation: function(bgDismissAnimation){ var animation = bgDismissAnimation.split(','); var that = this; $.each(animation, function(k, a){ if(a.indexOf(that._bgDismissPrefix) === -1) animation[k] = that._bgDismissPrefix + $.trim(a); }); this.backgroundDismissAnimationParsed = animation.join(' ').toLowerCase(); }, animationParsed: '', closeAnimationParsed: '', _animationPrefix: 'jconfirm-animation-', setAnimation: function(animation){ this.animation = animation || this.animation; this._parseAnimation(this.animation, 'o'); }, _parseAnimation: function(animation, which){ which = which || 'o'; // parse what animation and store where. open or close? var animations = animation.split(','); var that = this; $.each(animations, function(k, a){ if(a.indexOf(that._animationPrefix) === -1) animations[k] = that._animationPrefix + $.trim(a); }); var a_string = animations.join(' ').toLowerCase(); if(which === 'o') this.animationParsed = a_string; else this.closeAnimationParsed = a_string; return a_string; }, setCloseAnimation: function(closeAnimation){ this.closeAnimation = closeAnimation || this.closeAnimation; this._parseAnimation(this.closeAnimation, 'c'); }, setAnimationSpeed: function(speed){ this.animationSpeed = speed || this.animationSpeed; // this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce)); }, columnClassParsed: '', setColumnClass: function(colClass){ if(!this.useBootstrap){ console.warn("cannot set columnClass, useBootstrap is set to false"); return; } this.columnClass = colClass || this.columnClass; this._parseColumnClass(this.columnClass); this.$jconfirmBoxContainer.addClass(this.columnClassParsed); }, _updateContentMaxHeight: function(){ var height = $(window).height() - (this.$jconfirmBox.outerHeight() - this.$contentPane.outerHeight()) - (this.offsetTop + this.offsetBottom); this.$contentPane.css({ 'max-height': height + 'px' }); }, setBoxWidth: function(width){ if(this.useBootstrap){ console.warn("cannot set boxWidth, useBootstrap is set to true"); return; } this.boxWidth = width; this.$jconfirmBox.css('width', width); }, _parseColumnClass: function(colClass){ colClass = colClass.toLowerCase(); var p; switch(colClass){ case 'xl': case 'xlarge': p = 'col-md-12'; break; case 'l': case 'large': p = 'col-md-8 col-md-offset-2'; break; case 'm': case 'medium': p = 'col-md-6 col-md-offset-3'; break; case 's': case 'small': p = 'col-md-4 col-md-offset-4'; break; case 'xs': case 'xsmall': p = 'col-md-2 col-md-offset-5'; break; default: p = colClass; } this.columnClassParsed = p; }, initDraggable: function(){ var that = this; var $t = this.$titleContainer; this.resetDrag(); if(this.draggable){ $t.on('mousedown', function(e){ $t.addClass('jconfirm-hand'); that.mouseX = e.clientX; that.mouseY = e.clientY; that.isDrag = true; }); $(window).on('mousemove.' + this._id, function(e){ if(that.isDrag){ that.movingX = e.clientX - that.mouseX + that.initialX; that.movingY = e.clientY - that.mouseY + that.initialY; that.setDrag(); } }); $(window).on('mouseup.' + this._id, function(){ $t.removeClass('jconfirm-hand'); if(that.isDrag){ that.isDrag = false; that.initialX = that.movingX; that.initialY = that.movingY; } }) } }, resetDrag: function(){ this.isDrag = false; this.initialX = 0; this.initialY = 0; this.movingX = 0; this.movingY = 0; this.mouseX = 0; this.mouseY = 0; this.$jconfirmBoxContainer.css('transform', 'translate(' + 0 + 'px, ' + 0 + 'px)'); }, setDrag: function(){ if(!this.draggable) return; this.alignMiddle = false; var boxWidth = this.$jconfirmBox.outerWidth(); var boxHeight = this.$jconfirmBox.outerHeight(); var windowWidth = $(window).width(); var windowHeight = $(window).height(); var that = this; var dragUpdate = 1; if(that.movingX % dragUpdate === 0 || that.movingY % dragUpdate === 0){ if(that.dragWindowBorder){ var leftDistance = (windowWidth / 2) - boxWidth / 2; var topDistance = (windowHeight / 2) - boxHeight / 2; topDistance -= that.dragWindowGap; leftDistance -= that.dragWindowGap; if(leftDistance + that.movingX < 0){ that.movingX = -leftDistance; }else if(leftDistance - that.movingX < 0){ that.movingX = leftDistance; } if(topDistance + that.movingY < 0){ that.movingY = -topDistance; }else if(topDistance - that.movingY < 0){ that.movingY = topDistance; } } that.$jconfirmBoxContainer.css('transform', 'translate(' + that.movingX + 'px, ' + that.movingY + 'px)'); } }, _scrollTop: function(){ if(typeof pageYOffset !== 'undefined'){ //most browsers except IE before #9 return pageYOffset; } else{ var B = document.body; //IE 'quirks' var D = document.documentElement; //IE with doctype D = (D.clientHeight) ? D : B; return D.scrollTop; } }, _watchContent: function(){ var that = this; if(this._timer) clearInterval(this._timer); var prevContentHeight = 0; this._timer = setInterval(function(){ if(that.smoothContent){ var contentHeight = that.$content.outerHeight() || 0; if(contentHeight !== prevContentHeight){ // Commented out to prevent scroll to top when updating the content // (for example when using ajax in forms in content) // that.$contentPane.css({ // 'height': contentHeight // }).scrollTop(0); prevContentHeight = contentHeight; } var wh = $(window).height(); var total = that.offsetTop + that.offsetBottom + that.$jconfirmBox.height() - that.$contentPane.height() + that.$content.height(); if(total < wh){ that.$contentPane.addClass('no-scroll'); }else{ that.$contentPane.removeClass('no-scroll'); } } }, this.watchInterval); }, _overflowClass: 'jconfirm-overflow', _hilightAnimating: false, highlight: function(){ this.hiLightModal(); }, hiLightModal: function(){ var that = this; if(this._hilightAnimating) return; that.$body.addClass('hilight'); var duration = parseFloat(that.$body.css('animation-duration')) || 2; this._hilightAnimating = true; setTimeout(function(){ that._hilightAnimating = false; that.$body.removeClass('hilight'); }, duration * 1000); }, _bindEvents: function(){ var that = this; this.boxClicked = false; this.$scrollPane.click(function(e){ // Ignore propagated clicks if(!that.boxClicked){ // Background clicked /* If backgroundDismiss is a function and its return value is truthy proceed to close the modal. */ var buttonName = false; var shouldClose = false; var str; if(typeof that.backgroundDismiss === 'function') str = that.backgroundDismiss(); else str = that.backgroundDismiss; if(typeof str === 'string' && typeof that.buttons[str] !== 'undefined'){ buttonName = str; shouldClose = false; }else if(typeof str === 'undefined' || !!(str) === true){ shouldClose = true; }else{ shouldClose = false; } if(buttonName){ var btnResponse = that.buttons[buttonName].action.apply(that); shouldClose = (typeof btnResponse === 'undefined') || !!(btnResponse); } if(shouldClose) that.close(); else that.hiLightModal(); } that.boxClicked = false; }); this.$jconfirmBox.click(function(e){ that.boxClicked = true; }); var isKeyDown = false; $(window).on('jcKeyDown.' + that._id, function(e){ if(!isKeyDown){ isKeyDown = true; } }); $(window).on('keyup.' + that._id, function(e){ if(isKeyDown){ that.reactOnKey(e); isKeyDown = false; } }); $(window).on('resize.' + this._id, function(){ that._updateContentMaxHeight(); setTimeout(function(){ that.resetDrag(); }, 100); }); }, _cubic_bezier: '0.36, 0.55, 0.19', _getCSS: function(speed, bounce){ return { '-webkit-transition-duration': speed / 1000 + 's', 'transition-duration': speed / 1000 + 's', '-webkit-transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')', 'transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')' }; }, _setButtons: function(){ var that = this; /* * Settings up buttons */ var total_buttons = 0; if(typeof this.buttons !== 'object') this.buttons = {}; $.each(this.buttons, function(key, button){ total_buttons += 1; if(typeof button === 'function'){ that.buttons[key] = button = { action: button }; } that.buttons[key].text = button.text || key; that.buttons[key].btnClass = button.btnClass || 'btn-default'; that.buttons[key].action = button.action || function(){ }; that.buttons[key].keys = button.keys || []; that.buttons[key].isHidden = button.isHidden || false; that.buttons[key].isDisabled = button.isDisabled || false; $.each(that.buttons[key].keys, function(i, a){ that.buttons[key].keys[i] = a.toLowerCase(); }); var button_element = $('') .html(that.buttons[key].text) .addClass(that.buttons[key].btnClass) .prop('disabled', that.buttons[key].isDisabled) .css('display', that.buttons[key].isHidden ? 'none' : '') .click(function(e){ e.preventDefault(); var res = that.buttons[key].action.apply(that, [that.buttons[key]]); that.onAction.apply(that, [key, that.buttons[key]]); that._stopCountDown(); if(typeof res === 'undefined' || res) that.close(); }); that.buttons[key].el = button_element; that.buttons[key].setText = function(text){ button_element.html(text); }; that.buttons[key].addClass = function(className){ button_element.addClass(className); }; that.buttons[key].removeClass = function(className){ button_element.removeClass(className); }; that.buttons[key].disable = function(){ that.buttons[key].isDisabled = true; button_element.prop('disabled', true); }; that.buttons[key].enable = function(){ that.buttons[key].isDisabled = false; button_element.prop('disabled', false); }; that.buttons[key].show = function(){ that.buttons[key].isHidden = false; button_element.css('display', ''); }; that.buttons[key].hide = function(){ that.buttons[key].isHidden = true; button_element.css('display', 'none'); }; /* Buttons are prefixed with $_ or $$ for quick access */ that['$_' + key] = that['$$' + key] = button_element; that.$btnc.append(button_element); }); if(total_buttons === 0) this.$btnc.hide(); if(this.closeIcon === null && total_buttons === 0){ /* in case when no buttons are present & closeIcon is null, closeIcon is set to true, set closeIcon to true to explicitly tell to hide the close icon */ this.closeIcon = true; } if(this.closeIcon){ if(this.closeIconClass){ // user requires a custom class. var closeHtml = ''; this.$closeIcon.html(closeHtml); } this.$closeIcon.click(function(e){ e.preventDefault(); var buttonName = false; var shouldClose = false; var str; if(typeof that.closeIcon === 'function'){ str = that.closeIcon(); }else{ str = that.closeIcon; } if(typeof str === 'string' && typeof that.buttons[str] !== 'undefined'){ buttonName = str; shouldClose = false; }else if(typeof str === 'undefined' || !!(str) === true){ shouldClose = true; }else{ shouldClose = false; } if(buttonName){ var btnResponse = that.buttons[buttonName].action.apply(that); shouldClose = (typeof btnResponse === 'undefined') || !!(btnResponse); } if(shouldClose){ that.close(); } }); this.$closeIcon.show(); }else{ this.$closeIcon.hide(); } }, setTitle: function(string, force){ force = force || false; if(typeof string !== 'undefined') if(typeof string === 'string') this.title = string; else if(typeof string === 'function'){ if(typeof string.promise === 'function') console.error('Promise was returned from title function, this is not supported.'); var response = string(); if(typeof response === 'string') this.title = response; else this.title = false; }else this.title = false; if(this.isAjaxLoading && !force) return; this.$title.html(this.title || ''); this.updateTitleContainer(); }, setIcon: function(iconClass, force){ force = force || false; if(typeof iconClass !== 'undefined') if(typeof iconClass === 'string') this.icon = iconClass; else if(typeof iconClass === 'function'){ var response = iconClass(); if(typeof response === 'string') this.icon = response; else this.icon = false; } else this.icon = false; if(this.isAjaxLoading && !force) return; this.$icon.html(this.icon ? '' : ''); this.updateTitleContainer(); }, updateTitleContainer: function(){ if(!this.title && !this.icon){ this.$titleContainer.hide(); }else{ this.$titleContainer.show(); } }, setContentPrepend: function(content, force){ if(!content) return; this.contentParsed.prepend(content); }, setContentAppend: function(content){ if(!content) return; this.contentParsed.append(content); }, setContent: function(content, force){ force = !!force; var that = this; if(content) this.contentParsed.html('').append(content); if(this.isAjaxLoading && !force) return; this.$content.html(''); this.$content.append(this.contentParsed); setTimeout(function(){ that.$body.find('input[autofocus]:visible:first').focus(); }, 100); }, loadingSpinner: false, showLoading: function(disableButtons){ this.loadingSpinner = true; this.$jconfirmBox.addClass('loading'); if(disableButtons) this.$btnc.find('button').prop('disabled', true); }, hideLoading: function(enableButtons){ this.loadingSpinner = false; this.$jconfirmBox.removeClass('loading'); if(enableButtons) this.$btnc.find('button').prop('disabled', false); }, ajaxResponse: false, contentParsed: '', isAjax: false, isAjaxLoading: false, _parseContent: function(){ var that = this; var e = ' '; if(typeof this.content === 'function'){ var res = this.content.apply(this); if(typeof res === 'string'){ this.content = res; } else if(typeof res === 'object' && typeof res.always === 'function'){ // this is ajax loading via promise this.isAjax = true; this.isAjaxLoading = true; res.always(function(data, status, xhr){ that.ajaxResponse = { data: data, status: status, xhr: xhr }; that._contentReady.resolve(data, status, xhr); if(typeof that.contentLoaded === 'function') that.contentLoaded(data, status, xhr); }); this.content = e; }else{ this.content = e; } } if(typeof this.content === 'string' && this.content.substr(0, 4).toLowerCase() === 'url:'){ this.isAjax = true; this.isAjaxLoading = true; var u = this.content.substring(4, this.content.length); $.get(u).done(function(html){ that.contentParsed.html(html); }).always(function(data, status, xhr){ that.ajaxResponse = { data: data, status: status, xhr: xhr }; that._contentReady.resolve(data, status, xhr); if(typeof that.contentLoaded === 'function') that.contentLoaded(data, status, xhr); }); } if(!this.content) this.content = e; if(!this.isAjax){ this.contentParsed.html(this.content); this.setContent(); that._contentReady.resolve(); } }, _stopCountDown: function(){ clearInterval(this.autoCloseInterval); if(this.$cd) this.$cd.remove(); }, _startCountDown: function(){ var that = this; var opt = this.autoClose.split('|'); if(opt.length !== 2){ console.error('Invalid option for autoClose. example \'close|10000\''); return false; } var button_key = opt[0]; var time = parseInt(opt[1]); if(typeof this.buttons[button_key] === 'undefined'){ console.error('Invalid button key \'' + button_key + '\' for autoClose'); return false; } var seconds = Math.ceil(time / 1000); this.$cd = $(' (' + seconds + ')') .appendTo(this['$_' + button_key]); this.autoCloseInterval = setInterval(function(){ that.$cd.html(' (' + (seconds -= 1) + ') '); if(seconds <= 0){ that['$$' + button_key].trigger('click'); that._stopCountDown(); } }, 1000); }, _getKey: function(key){ // very necessary keys. switch(key){ case 192: return 'tilde'; case 13: return 'enter'; case 16: return 'shift'; case 9: return 'tab'; case 20: return 'capslock'; case 17: return 'ctrl'; case 91: return 'win'; case 18: return 'alt'; case 27: return 'esc'; case 32: return 'space'; } // only trust alphabets with this. var initial = String.fromCharCode(key); if(/^[A-z0-9]+$/.test(initial)) return initial.toLowerCase(); else return false; }, reactOnKey: function(e){ var that = this; /* Prevent keyup event if the dialog is not last! */ var a = $('.jconfirm'); if(a.eq(a.length - 1)[0] !== this.$el[0]) return false; var key = e.which; /* Do not react if Enter or Space is pressed on input elements */ if(this.$content.find(':input').is(':focus') && /13|32/.test(key)) return false; var keyChar = this._getKey(key); // If esc is pressed if(keyChar === 'esc' && this.escapeKey){ if(this.escapeKey === true){ this.$scrollPane.trigger('click'); } else if(typeof this.escapeKey === 'string' || typeof this.escapeKey === 'function'){ var buttonKey; if(typeof this.escapeKey === 'function'){ buttonKey = this.escapeKey(); }else{ buttonKey = this.escapeKey; } if(buttonKey) if(typeof this.buttons[buttonKey] === 'undefined'){ console.warn('Invalid escapeKey, no buttons found with key ' + buttonKey); }else{ this['$_' + buttonKey].trigger('click'); } } } // check if any button is listening to this key. $.each(this.buttons, function(key, button){ if(button.keys.indexOf(keyChar) !== -1){ that['$_' + key].trigger('click'); } }); }, setDialogCenter: function(){ console.info('setDialogCenter is deprecated, dialogs are centered with CSS3 tables'); }, _unwatchContent: function(){ clearInterval(this._timer); }, close: function(onClosePayload){ var that = this; if(typeof this.onClose === 'function') this.onClose(onClosePayload); this._unwatchContent(); /* unbind the window resize & keyup event. */ $(window).unbind('resize.' + this._id); $(window).unbind('keyup.' + this._id); $(window).unbind('jcKeyDown.' + this._id); if(this.draggable){ $(window).unbind('mousemove.' + this._id); $(window).unbind('mouseup.' + this._id); this.$titleContainer.unbind('mousedown'); } that.$el.removeClass(that.loadedClass); $('body').removeClass('jconfirm-no-scroll-' + that._id); that.$jconfirmBoxContainer.removeClass('jconfirm-no-transition'); setTimeout(function(){ that.$body.addClass(that.closeAnimationParsed); that.$jconfirmBg.addClass('jconfirm-bg-h'); var closeTimer = (that.closeAnimation === 'none') ? 1 : that.animationSpeed; setTimeout(function(){ that.$el.remove(); var l = w.jconfirm.instances; var i = w.jconfirm.instances.length - 1; for(i; i >= 0; i--){ if(w.jconfirm.instances[i]._id === that._id){ w.jconfirm.instances.splice(i, 1); } } // Focusing a element, scrolls automatically to that element. // no instances should be open, lastFocused should be true, the lastFocused element must exists in DOM if(!w.jconfirm.instances.length){ if(that.scrollToPreviousElement && w.jconfirm.lastFocused && w.jconfirm.lastFocused.length && $.contains(document, w.jconfirm.lastFocused[0])){ var $lf = w.jconfirm.lastFocused; if(that.scrollToPreviousElementAnimate){ var st = $(window).scrollTop(); var ot = w.jconfirm.lastFocused.offset().top; var wh = $(window).height(); if(!(ot > st && ot < (st + wh))){ var scrollTo = (ot - Math.round((wh / 3))); $('html, body').animate({ scrollTop: scrollTo }, that.animationSpeed, 'swing', function(){ // gracefully scroll and then focus. $lf.focus(); }); }else{ // the element to be focused is already in view. $lf.focus(); } }else{ $lf.focus(); } w.jconfirm.lastFocused = false; } } if(typeof that.onDestroy === 'function') that.onDestroy(); }, closeTimer * 0.40); }, 50); return true; }, open: function(){ if(this.isOpen()) return false; // var that = this; this._buildHTML(); this._bindEvents(); this._open(); return true; }, setStartingPoint: function(){ var el = false; if(this.animateFromElement !== true && this.animateFromElement){ el = this.animateFromElement; w.jconfirm.lastClicked = false; }else if(w.jconfirm.lastClicked && this.animateFromElement === true){ el = w.jconfirm.lastClicked; w.jconfirm.lastClicked = false; }else{ return false; } if(!el) return false; var offset = el.offset(); var iTop = el.outerHeight() / 2; var iLeft = el.outerWidth() / 2; // placing position of jconfirm modal in center of clicked element iTop -= this.$jconfirmBox.outerHeight() / 2; iLeft -= this.$jconfirmBox.outerWidth() / 2; // absolute position on screen var sourceTop = offset.top + iTop; sourceTop = sourceTop - this._scrollTop(); var sourceLeft = offset.left + iLeft; // window halved var wh = $(window).height() / 2; var ww = $(window).width() / 2; var targetH = wh - this.$jconfirmBox.outerHeight() / 2; var targetW = ww - this.$jconfirmBox.outerWidth() / 2; sourceTop -= targetH; sourceLeft -= targetW; // Check if the element is inside the viewable window. if(Math.abs(sourceTop) > wh || Math.abs(sourceLeft) > ww) return false; this.$jconfirmBoxContainer.css('transform', 'translate(' + sourceLeft + 'px, ' + sourceTop + 'px)'); }, _open: function(){ var that = this; if(typeof that.onOpenBefore === 'function') that.onOpenBefore(); this.$body.removeClass(this.animationParsed); this.$jconfirmBg.removeClass('jconfirm-bg-h'); this.$body.focus(); that.$jconfirmBoxContainer.css('transform', 'translate(' + 0 + 'px, ' + 0 + 'px)'); setTimeout(function(){ that.$body.css(that._getCSS(that.animationSpeed, 1)); that.$body.css({ 'transition-property': that.$body.css('transition-property') + ', margin' }); that.$jconfirmBoxContainer.addClass('jconfirm-no-transition'); that._modalReady.resolve(); if(typeof that.onOpen === 'function') that.onOpen(); that.$el.addClass(that.loadedClass); }, this.animationSpeed); }, loadedClass: 'jconfirm-open', isClosed: function(){ return !this.$el || this.$el.parent().length === 0; }, isOpen: function(){ return !this.isClosed(); }, toggle: function(){ if(!this.isOpen()) this.open(); else this.close(); } }; w.jconfirm.instances = []; w.jconfirm.lastFocused = false; w.jconfirm.pluginDefaults = { template: '' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '
' + '
' + '
' + '
', title: 'Hello', titleClass: '', type: 'default', typeAnimated: true, draggable: true, dragWindowGap: 15, dragWindowBorder: true, animateFromElement: true, /** * @deprecated */ alignMiddle: true, smoothContent: true, content: 'Are you sure to continue?', buttons: {}, defaultButtons: { ok: { action: function(){ } }, close: { action: function(){ } } }, contentLoaded: function(){ }, icon: '', lazyOpen: false, bgOpacity: null, theme: 'light', animation: 'scale', closeAnimation: 'scale', animationSpeed: 400, animationBounce: 1, escapeKey: true, rtl: false, container: 'body', containerFluid: false, backgroundDismiss: false, backgroundDismissAnimation: 'shake', autoClose: false, closeIcon: null, closeIconClass: false, watchInterval: 100, columnClass: 'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1', boxWidth: '50%', scrollToPreviousElement: true, scrollToPreviousElementAnimate: true, useBootstrap: true, offsetTop: 40, offsetBottom: 40, bootstrapClasses: { container: 'container', containerFluid: 'container-fluid', row: 'row' }, onContentReady: function(){ }, onOpenBefore: function(){ }, onOpen: function(){ }, onClose: function(){ }, onDestroy: function(){ }, onAction: function(){ } }; /** * This refers to the issue #241 and #246 * * Problem: * Button A is clicked (keydown) using the Keyboard ENTER key * A opens the jconfirm modal B, * B has registered ENTER key for one of its button C * A is released (keyup), B gets the keyup event and triggers C. * * Solution: * Register a global keydown event, that tells jconfirm if the keydown originated inside jconfirm */ var keyDown = false; $(window).on('keydown', function(e){ if(!keyDown){ var $target = $(e.target); var pass = false; if($target.closest('.jconfirm-box').length) pass = true; if(pass) $(window).trigger('jcKeyDown'); keyDown = true; } }); $(window).on('keyup', function(){ keyDown = false; }); w.jconfirm.lastClicked = false; $(document).on('mousedown', 'button, a, [jc-source]', function(){ w.jconfirm.lastClicked = $(this); }); }));

Flight Dispatch services

Reliable Ground Handling Services in Houston for Seamless Airport Operations

Ensure smooth and efficient airport operations with Flight Crew International’s Ground Handling Services in Houston. Our tailored solutions cater to every aspect of ground operations in airports, delivering superior support for both aircraft and crew. With a commitment to safety, efficiency, and precision, we are your trusted partner for comprehensive ground services.


Get a Quote Now

What is Ground Handling?

Ground handling encompasses all the essential services provided to an aircraft, its crew, and passengers while it’s on the ground. From ramp handling services to airport ground operations, our expert ground handling agents ensure every detail is executed flawlessly to enhance your operational efficiency.

Our Comprehensive Ground Handling Solutions

We offer a full spectrum of ground handling services in Houston to meet your operational needs:

  • Aircraft Ground Handling Services
    From fueling to baggage handling, we manage every aspect of airport ground services for seamless operations.
  • Crew and Passenger Assistance
    Personalized support, including check-in services, lounge access, and concierge solutions.
  • Cargo and Freight Handling
    Specialized ground handling services for safe and timely movement of goods.
  • GSE Management
    Efficient coordination of Ground Support Equipment (GSE) for smooth operations.
  • Ground Operations Support
    End-to-end solutions for airport ground operations, ensuring compliance with industry regulations.


Get in touch

Flight Planning and Dispatch

Ready to Streamline Your Ground Operations?

Partner with Flight Crew International for reliable and efficient ground handling services in Houston. Whether you’re looking for airport ground handlers, aircraft ground handling services, or ramp handling in airports, our experienced team is here to support you.


Get in touch

Our Augmented Scheduling & Dispatching Services in Houston

Augmented Scheduling Services

Augmented Scheduling Services

Enhance your flight operations with our expert scheduling solutions that adapt to your specific needs.


Get Started

Scheduling and Dispatch Outsourcing

Scheduling and Dispatch Outsourcing

Outsource your flight scheduling and dispatching to our professional team to ensure smooth and efficient operations.


Get Started

Ground Handling Coordination

Ground Handling Coordination

We manage all ground handling logistics to ensure seamless operations at every destination.


Get Started

Hotel & Ground Transport Arrangements

Hotel & Ground Transport Arrangements

We take care of all crew accommodation and transportation needs, so you don’t have to.


Get Started

Transitional Flight Department Support

Transitional Flight Department Support

We provide support during the transition from managed to in-house flight departments.


Get Started

Flight Planning

Flight Planning

Comprehensive flight planning services to optimize routes and fuel usage.


Get Started

On-Demand Flight Following

On-Demand Flight Following

Real-time monitoring and updates for your flights, ensuring everything runs according to plan.


Get Started

Why Choose Flight Crew International?

  • Expertise in Ground Operations
    With years of experience, our team of professional ground handling agents delivers reliable services that minimize delays and enhance safety.
  • Global Reach
    Our extensive network of ground handling agencies ensures consistent service quality across major airports worldwide.
  • Tailored Solutions
    From private aircraft to commercial fleets, our services are customized to meet the unique requirements of your operation.
  • Commitment to Excellence
    We prioritize efficiency, safety, and customer satisfaction in every aspect of our ground handling airport services.
  • 24/7 Availability
    Our dedicated team is available round-the-clock to address your needs, ensuring smooth and uninterrupted operations.

Fci

How We Add Value to Your Operations

Reduced Turnaround Time

Our streamlined airport ground operations help minimize delays and improve efficiency.

Comprehensive Coordination

We manage all aspects of ground services in airports, from aircraft maintenance to passenger handling.

Regulatory Compliance

Our services meet the highest standards, including safety protocols and global aviation regulations.

Transparent Communication

Stay informed with real-time updates and seamless communication throughout the process.


Request a Quote

[elementor-template id=”24969″]