diff --git a/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.css b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.css
new file mode 100644
index 000000000..8c8334edb
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.css
@@ -0,0 +1,124 @@
+/*! jQuery-Impromptu - v5.2.3 - 2014-03-09
+* http://trentrichardson.com/Impromptu
+* Copyright (c) 2014 Trent Richardson; Licensed MIT */
+.jqifade{
+ position: absolute;
+ background-color: #777777;
+}
+div.jqi{
+ width: 400px;
+ max-width:90%;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ position: absolute;
+ background-color: #ffffff;
+ font-size: 11px;
+ text-align: left;
+ border: solid 1px #eeeeee;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ padding: 7px;
+}
+div.jqi .jqicontainer{
+}
+div.jqi .jqiclose{
+ position: absolute;
+ top: 4px; right: -2px;
+ width: 18px;
+ cursor: default;
+ color: #bbbbbb;
+ font-weight: bold;
+}
+div.jqi .jqistate{
+ background-color: #fff;
+}
+div.jqi .jqititle{
+ padding: 5px 10px;
+ font-size: 16px;
+ line-height: 20px;
+ border-bottom: solid 1px #eeeeee;
+}
+div.jqi .jqimessage{
+ padding: 10px;
+ line-height: 20px;
+ color: #444444;
+}
+div.jqi .jqibuttons{
+ text-align: right;
+ margin: 0 -7px -7px -7px;
+ border-top: solid 1px #e4e4e4;
+ background-color: #f4f4f4;
+ border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ -webkit-border-radius: 0 0 6px 6px;
+}
+div.jqi .jqibuttons button{
+ margin: 0;
+ padding: 15px 20px;
+ background-color: transparent;
+ font-weight: normal;
+ border: none;
+ border-left: solid 1px #e4e4e4;
+ color: #777;
+ font-weight: bold;
+ font-size: 12px;
+}
+div.jqi .jqibuttons button.jqidefaultbutton{
+ color: #489afe;
+}
+div.jqi .jqibuttons button:hover,
+div.jqi .jqibuttons button:focus{
+ color: #287ade;
+ outline: none;
+}
+.jqiwarning .jqi .jqibuttons{
+ background-color: #b95656;
+}
+
+/* sub states */
+div.jqi .jqiparentstate::after{
+ background-color: #777;
+ opacity: 0.6;
+ filter: alpha(opacity=60);
+ content: '';
+ position: absolute;
+ top:0;left:0;bottom:0;right:0;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+}
+div.jqi .jqisubstate{
+ position: absolute;
+ top:0;
+ left: 20%;
+ width: 60%;
+ padding: 7px;
+ border: solid 1px #eeeeee;
+ border-top: none;
+ border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ -webkit-border-radius: 0 0 6px 6px;
+}
+div.jqi .jqisubstate .jqibuttons button{
+ padding: 10px 18px;
+}
+
+/* arrows for tooltips/tours */
+.jqi .jqiarrow{ position: absolute; height: 0; width:0; line-height: 0; font-size: 0; border: solid 10px transparent;}
+
+.jqi .jqiarrowtl{ left: 10px; top: -20px; border-bottom-color: #ffffff; }
+.jqi .jqiarrowtc{ left: 50%; top: -20px; border-bottom-color: #ffffff; margin-left: -10px; }
+.jqi .jqiarrowtr{ right: 10px; top: -20px; border-bottom-color: #ffffff; }
+
+.jqi .jqiarrowbl{ left: 10px; bottom: -20px; border-top-color: #ffffff; }
+.jqi .jqiarrowbc{ left: 50%; bottom: -20px; border-top-color: #ffffff; margin-left: -10px; }
+.jqi .jqiarrowbr{ right: 10px; bottom: -20px; border-top-color: #ffffff; }
+
+.jqi .jqiarrowlt{ left: -20px; top: 10px; border-right-color: #ffffff; }
+.jqi .jqiarrowlm{ left: -20px; top: 50%; border-right-color: #ffffff; margin-top: -10px; }
+.jqi .jqiarrowlb{ left: -20px; bottom: 10px; border-right-color: #ffffff; }
+
+.jqi .jqiarrowrt{ right: -20px; top: 10px; border-left-color: #ffffff; }
+.jqi .jqiarrowrm{ right: -20px; top: 50%; border-left-color: #ffffff; margin-top: -10px; }
+.jqi .jqiarrowrb{ right: -20px; bottom: 10px; border-left-color: #ffffff; }
+
diff --git a/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.js b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.js
new file mode 100644
index 000000000..0660a825b
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.js
@@ -0,0 +1,685 @@
+/*! jQuery-Impromptu - v5.2.3 - 2014-03-09
+* http://trentrichardson.com/Impromptu
+* Copyright (c) 2014 Trent Richardson; Licensed MIT */
+(function($) {
+ "use strict";
+
+ /**
+ * setDefaults - Sets the default options
+ * @param message String/Object - String of html or Object of states
+ * @param options Object - Options to set the prompt
+ * @return jQuery - container with overlay and prompt
+ */
+ $.prompt = function(message, options) {
+ // only for backwards compat, to be removed in future version
+ if(options !== undefined && options.classes !== undefined && typeof options.classes === 'string'){
+ options = { box: options.classes };
+ }
+
+ $.prompt.options = $.extend({},$.prompt.defaults,options);
+ $.prompt.currentPrefix = $.prompt.options.prefix;
+
+ // Be sure any previous timeouts are destroyed
+ if($.prompt.timeout){
+ clearTimeout($.prompt.timeout);
+ }
+ $.prompt.timeout = false;
+
+ var opts = $.prompt.options,
+ $body = $(document.body),
+ $window = $(window);
+
+ //build the box and fade
+ var msgbox = '
';
+ if(opts.useiframe && ($('object, applet').length > 0)) {
+ msgbox += '
';
+ } else {
+ msgbox +='
';
+ }
+ msgbox += '
'+
+ '
';
+
+ $.prompt.jqib = $(msgbox).appendTo($body);
+ $.prompt.jqi = $.prompt.jqib.children('.'+ opts.prefix);//.data('jqi',opts);
+ $.prompt.jqif = $.prompt.jqib.children('.'+ opts.prefix +'fade');
+
+ //if a string was passed, convert to a single state
+ if(message.constructor === String){
+ message = {
+ state0: {
+ title: opts.title,
+ html: message,
+ buttons: opts.buttons,
+ position: opts.position,
+ focus: opts.focus,
+ defaultButton: opts.defaultButton,
+ submit: opts.submit
+ }
+ };
+ }
+
+ //build the states
+ $.prompt.options.states = {};
+ var k,v;
+ for(k in message){
+ v = $.extend({},$.prompt.defaults.state,{name:k},message[k]);
+ $.prompt.addState(v.name, v);
+
+ if($.prompt.currentStateName === ''){
+ $.prompt.currentStateName = v.name;
+ }
+ }
+
+ //Events
+ $.prompt.jqi.on('click', '.'+ opts.prefix +'buttons button', function(e){
+ var $t = $(this),
+ $state = $t.parents('.'+ opts.prefix +'state'),
+ stateobj = $.prompt.options.states[$state.data('jqi-name')],
+ msg = $state.children('.'+ opts.prefix +'message'),
+ clicked = stateobj.buttons[$t.text()] || stateobj.buttons[$t.html()],
+ forminputs = {};
+
+ // if for some reason we couldn't get the value
+ if(clicked === undefined){
+ for(var i in stateobj.buttons){
+ if(stateobj.buttons[i].title === $t.text() || stateobj.buttons[i].title === $t.html()){
+ clicked = stateobj.buttons[i].value;
+ }
+ }
+ }
+
+ //collect all form element values from all states.
+ $.each($.prompt.jqi.children('form').serializeArray(),function(i,obj){
+ if (forminputs[obj.name] === undefined) {
+ forminputs[obj.name] = obj.value;
+ } else if (typeof forminputs[obj.name] === Array || typeof forminputs[obj.name] === 'object') {
+ forminputs[obj.name].push(obj.value);
+ } else {
+ forminputs[obj.name] = [forminputs[obj.name],obj.value];
+ }
+ });
+
+ // trigger an event
+ var promptsubmite = new $.Event('impromptu:submit');
+ promptsubmite.stateName = stateobj.name;
+ promptsubmite.state = $state;
+ $state.trigger(promptsubmite, [clicked, msg, forminputs]);
+
+ if(!promptsubmite.isDefaultPrevented()){
+ $.prompt.close(true, clicked,msg,forminputs);
+ }
+ });
+
+ // if the fade is clicked blink the prompt
+ var fadeClicked = function(){
+ if(opts.persistent){
+ var offset = (opts.top.toString().indexOf('%') >= 0? ($window.height()*(parseInt(opts.top,10)/100)) : parseInt(opts.top,10)),
+ top = parseInt($.prompt.jqi.css('top').replace('px',''),10) - offset;
+
+ //$window.scrollTop(top);
+ $('html,body').animate({ scrollTop: top }, 'fast', function(){
+ var i = 0;
+ $.prompt.jqib.addClass(opts.prefix +'warning');
+ var intervalid = setInterval(function(){
+ $.prompt.jqib.toggleClass(opts.prefix +'warning');
+ if(i++ > 1){
+ clearInterval(intervalid);
+ $.prompt.jqib.removeClass(opts.prefix +'warning');
+ }
+ }, 100);
+ });
+ }
+ else {
+ $.prompt.close(true);
+ }
+ };
+
+ // listen for esc or tab keys
+ var keyDownEventHandler = function(e){
+ var key = (window.event) ? event.keyCode : e.keyCode;
+
+ //escape key closes
+ if(key === 27) {
+ fadeClicked();
+ }
+
+ //enter key pressed trigger the default button if its not on it, ignore if it is a textarea
+ if(key === 13){
+ var $defBtn = $.prompt.getCurrentState().find('.'+ opts.prefix +'defaultbutton');
+ var $tgt = $(e.target);
+
+ if($tgt.is('textarea,.'+opts.prefix+'button') === false && $defBtn.length > 0){
+ e.preventDefault();
+ $defBtn.click();
+ }
+ }
+
+ //constrain tabs, tabs should iterate through the state and not leave
+ if (key === 9){
+ var $inputels = $('input,select,textarea,button',$.prompt.getCurrentState());
+ var fwd = !e.shiftKey && e.target === $inputels[$inputels.length-1];
+ var back = e.shiftKey && e.target === $inputels[0];
+ if (fwd || back) {
+ setTimeout(function(){
+ if (!$inputels){
+ return;
+ }
+ var el = $inputels[back===true ? $inputels.length-1 : 0];
+
+ if (el){
+ el.focus();
+ }
+ },10);
+ return false;
+ }
+ }
+ };
+
+ $.prompt.position();
+ $.prompt.style();
+
+ $.prompt.jqif.click(fadeClicked);
+ $window.resize({animate:false}, $.prompt.position);
+ $.prompt.jqi.find('.'+ opts.prefix +'close').click($.prompt.close);
+ $.prompt.jqib.on("keydown",keyDownEventHandler)
+ .on('impromptu:loaded', opts.loaded)
+ .on('impromptu:close', opts.close)
+ .on('impromptu:statechanging', opts.statechanging)
+ .on('impromptu:statechanged', opts.statechanged);
+
+ // Show it
+ $.prompt.jqif[opts.show](opts.overlayspeed);
+ $.prompt.jqi[opts.show](opts.promptspeed, function(){
+
+ var $firstState = $.prompt.jqi.find('.'+ opts.prefix +'states .'+ opts.prefix +'state').eq(0);
+ $.prompt.goToState($firstState.data('jqi-name'));
+
+ $.prompt.jqib.trigger('impromptu:loaded');
+ });
+
+ // Timeout
+ if(opts.timeout > 0){
+ $.prompt.timeout = setTimeout(function(){ $.prompt.close(true); },opts.timeout);
+ }
+
+ return $.prompt.jqib;
+ };
+
+ $.prompt.defaults = {
+ prefix:'jqi',
+ classes: {
+ box: '',
+ fade: '',
+ prompt: '',
+ close: '',
+ title: '',
+ message: '',
+ buttons: '',
+ button: '',
+ defaultButton: ''
+ },
+ title: '',
+ closeText: '×',
+ buttons: {
+ Ok: true
+ },
+ loaded: function(e){},
+ submit: function(e,v,m,f){},
+ close: function(e,v,m,f){},
+ statechanging: function(e, from, to){},
+ statechanged: function(e, to){},
+ opacity: 0.6,
+ zIndex: 999,
+ overlayspeed: 'slow',
+ promptspeed: 'fast',
+ show: 'fadeIn',
+ focus: 0,
+ defaultButton: 0,
+ useiframe: false,
+ top: '15%',
+ position: {
+ container: null,
+ x: null,
+ y: null,
+ arrow: null,
+ width: null
+ },
+ persistent: true,
+ timeout: 0,
+ states: {},
+ state: {
+ name: null,
+ title: '',
+ html: '',
+ buttons: {
+ Ok: true
+ },
+ focus: 0,
+ defaultButton: 0,
+ position: {
+ container: null,
+ x: null,
+ y: null,
+ arrow: null,
+ width: null
+ },
+ submit: function(e,v,m,f){
+ return true;
+ }
+ }
+ };
+
+ /**
+ * currentPrefix String - At any time this show be the prefix
+ * of the current prompt ex: "jqi"
+ */
+ $.prompt.currentPrefix = $.prompt.defaults.prefix;
+
+ /**
+ * currentStateName String - At any time this is the current state
+ * of the current prompt ex: "state0"
+ */
+ $.prompt.currentStateName = "";
+
+ /**
+ * setDefaults - Sets the default options
+ * @param o Object - Options to set as defaults
+ * @return void
+ */
+ $.prompt.setDefaults = function(o) {
+ $.prompt.defaults = $.extend({}, $.prompt.defaults, o);
+ };
+
+ /**
+ * setStateDefaults - Sets the default options for a state
+ * @param o Object - Options to set as defaults
+ * @return void
+ */
+ $.prompt.setStateDefaults = function(o) {
+ $.prompt.defaults.state = $.extend({}, $.prompt.defaults.state, o);
+ };
+
+ /**
+ * position - Repositions the prompt (Used internally)
+ * @return void
+ */
+ $.prompt.position = function(e){
+ var restoreFx = $.fx.off,
+ $state = $.prompt.getCurrentState(),
+ stateObj = $.prompt.options.states[$state.data('jqi-name')],
+ pos = stateObj? stateObj.position : undefined,
+ $window = $(window),
+ bodyHeight = document.body.scrollHeight, //$(document.body).outerHeight(true),
+ windowHeight = $(window).height(),
+ documentHeight = $(document).height(),
+ height = bodyHeight > windowHeight ? bodyHeight : windowHeight,
+ top = parseInt($window.scrollTop(),10) + ($.prompt.options.top.toString().indexOf('%') >= 0?
+ (windowHeight*(parseInt($.prompt.options.top,10)/100)) : parseInt($.prompt.options.top,10));
+
+ // when resizing the window turn off animation
+ if(e !== undefined && e.data.animate === false){
+ $.fx.off = true;
+ }
+
+ $.prompt.jqib.css({
+ position: "absolute",
+ height: height,
+ width: "100%",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0
+ });
+ $.prompt.jqif.css({
+ position: "fixed",
+ height: height,
+ width: "100%",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0
+ });
+
+ // tour positioning
+ if(pos && pos.container){
+ var offset = $(pos.container).offset();
+
+ if($.isPlainObject(offset) && offset.top !== undefined){
+ $.prompt.jqi.css({
+ position: "absolute"
+ });
+ $.prompt.jqi.animate({
+ top: offset.top + pos.y,
+ left: offset.left + pos.x,
+ marginLeft: 0,
+ width: (pos.width !== undefined)? pos.width : null
+ });
+ top = (offset.top + pos.y) - ($.prompt.options.top.toString().indexOf('%') >= 0? (windowHeight*(parseInt($.prompt.options.top,10)/100)) : parseInt($.prompt.options.top,10));
+ $('html,body').animate({ scrollTop: top }, 'slow', 'swing', function(){});
+ }
+ }
+ // custom state width animation
+ else if(pos && pos.width){
+ $.prompt.jqi.css({
+ position: "absolute",
+ left: '50%'
+ });
+ $.prompt.jqi.animate({
+ top: pos.y || top,
+ left: pos.x || '50%',
+ marginLeft: ((pos.width/2)*-1),
+ width: pos.width
+ });
+ }
+ // standard prompt positioning
+ else{
+ $.prompt.jqi.css({
+ position: "absolute",
+ top: top,
+ left: '50%',//$window.width()/2,
+ marginLeft: (($.prompt.jqi.outerWidth(false)/2)*-1)
+ });
+ }
+
+ // restore fx settings
+ if(e !== undefined && e.data.animate === false){
+ $.fx.off = restoreFx;
+ }
+ };
+
+ /**
+ * style - Restyles the prompt (Used internally)
+ * @return void
+ */
+ $.prompt.style = function(){
+ $.prompt.jqif.css({
+ zIndex: $.prompt.options.zIndex,
+ display: "none",
+ opacity: $.prompt.options.opacity
+ });
+ $.prompt.jqi.css({
+ zIndex: $.prompt.options.zIndex+1,
+ display: "none"
+ });
+ $.prompt.jqib.css({
+ zIndex: $.prompt.options.zIndex
+ });
+ };
+
+ /**
+ * get - Get the prompt
+ * @return jQuery - the prompt
+ */
+ $.prompt.get = function(state) {
+ return $('.'+ $.prompt.currentPrefix);
+ };
+
+ /**
+ * addState - Injects a state into the prompt
+ * @param statename String - Name of the state
+ * @param stateobj Object - options for the state
+ * @param afterState String - selector of the state to insert after
+ * @return jQuery - the newly created state
+ */
+ $.prompt.addState = function(statename, stateobj, afterState) {
+ var state = "",
+ $state = null,
+ arrow = "",
+ title = "",
+ opts = $.prompt.options,
+ $jqistates = $('.'+ $.prompt.currentPrefix +'states'),
+ defbtn,k,v,i=0;
+
+ stateobj = $.extend({},$.prompt.defaults.state, {name:statename}, stateobj);
+
+ if(stateobj.position.arrow !== null){
+ arrow = '';
+ }
+ if(stateobj.title && stateobj.title !== ''){
+ title = ''+ stateobj.title +'
';
+ }
+ state += ''+
+ arrow + title +
+ '
' + stateobj.html +'
'+
+ '
';
+
+ for(k in stateobj.buttons){
+ v = stateobj.buttons[k],
+ defbtn = stateobj.focus === i || (isNaN(stateobj.focus) && stateobj.defaultButton === i) ? ($.prompt.currentPrefix + 'defaultbutton ' + opts.classes.defaultButton) : '';
+
+ if(typeof v === 'object'){
+ state += '';
+
+ } else {
+ state += '';
+
+ }
+ i++;
+ }
+ state += '
';
+
+ $state = $(state);
+
+ $state.on('impromptu:submit', stateobj.submit);
+
+ if(afterState !== undefined){
+ $jqistates.find('#'+ $.prompt.currentPrefix +'state_'+ afterState).after($state);
+ }
+ else{
+ $jqistates.append($state);
+ }
+
+ $.prompt.options.states[statename] = stateobj;
+
+ return $state;
+ };
+
+ /**
+ * removeState - Removes a state from the promt
+ * @param state String - Name of the state
+ * @return Boolean - returns true on success, false on failure
+ */
+ $.prompt.removeState = function(state) {
+ var $state = $.prompt.getState(state),
+ rm = function(){ $state.remove(); };
+
+ if($state.length === 0){
+ return false;
+ }
+
+ // transition away from it before deleting
+ if($state.css('display') !== 'none'){
+ if($state.next().length > 0){
+ $.prompt.nextState(rm);
+ }
+ else{
+ $.prompt.prevState(rm);
+ }
+ }
+ else{
+ $state.slideUp('slow', rm);
+ }
+
+ return true;
+ };
+
+ /**
+ * getState - Get the state by its name
+ * @param state String - Name of the state
+ * @return jQuery - the state
+ */
+ $.prompt.getState = function(state) {
+ return $('#'+ $.prompt.currentPrefix +'state_'+ state);
+ };
+ $.prompt.getStateContent = function(state) {
+ return $.prompt.getState(state);
+ };
+
+ /**
+ * getCurrentState - Get the current visible state
+ * @return jQuery - the current visible state
+ */
+ $.prompt.getCurrentState = function() {
+ return $.prompt.getState($.prompt.getCurrentStateName());
+ };
+
+ /**
+ * getCurrentStateName - Get the name of the current visible state
+ * @return String - the current visible state's name
+ */
+ $.prompt.getCurrentStateName = function() {
+ return $.prompt.currentStateName;
+ };
+
+ /**
+ * goToState - Goto the specified state
+ * @param state String - name of the state to transition to
+ * @param subState Boolean - true to be a sub state within the currently open state
+ * @param callback Function - called when the transition is complete
+ * @return jQuery - the newly active state
+ */
+ $.prompt.goToState = function(state, subState, callback) {
+ var $jqi = $.prompt.get(),
+ jqiopts = $.prompt.options,
+ $state = $.prompt.getState(state),
+ stateobj = jqiopts.states[$state.data('jqi-name')],
+ promptstatechanginge = new $.Event('impromptu:statechanging');
+
+ // subState can be ommitted
+ if(typeof subState === 'function'){
+ callback = subState;
+ subState = false;
+ }
+
+ $.prompt.jqib.trigger(promptstatechanginge, [$.prompt.getCurrentStateName(), state]);
+
+ if(!promptstatechanginge.isDefaultPrevented() && $state.length > 0){
+ $.prompt.jqi.find('.'+ $.prompt.currentPrefix +'parentstate').removeClass($.prompt.currentPrefix +'parentstate');
+
+ if(subState){ // hide any open substates
+ // get rid of any substates
+ $.prompt.jqi.find('.'+ $.prompt.currentPrefix +'substate').not($state)
+ .slideUp(jqiopts.promptspeed)
+ .removeClass('.'+ $.prompt.currentPrefix +'substate')
+ .find('.'+ $.prompt.currentPrefix +'arrow').hide();
+
+ // add parent state class so it can be visible, but blocked
+ $.prompt.jqi.find('.'+ $.prompt.currentPrefix +'state:visible').addClass($.prompt.currentPrefix +'parentstate');
+
+ // add substate class so we know it will be smaller
+ $state.addClass($.prompt.currentPrefix +'substate');
+ }
+ else{ // hide any open states
+ $.prompt.jqi.find('.'+ $.prompt.currentPrefix +'state').not($state)
+ .slideUp(jqiopts.promptspeed)
+ .find('.'+ $.prompt.currentPrefix +'arrow').hide();
+ }
+ $.prompt.currentStateName = stateobj.name;
+
+ $state.slideDown(jqiopts.promptspeed,function(){
+ var $t = $(this);
+
+ // if focus is a selector, find it, else its button index
+ if(typeof(stateobj.focus) === 'string'){
+ $t.find(stateobj.focus).eq(0).focus();
+ }
+ else{
+ $t.find('.'+ $.prompt.currentPrefix +'defaultbutton').focus();
+ }
+
+ $t.find('.'+ $.prompt.currentPrefix +'arrow').show(jqiopts.promptspeed);
+
+ if (typeof callback === 'function'){
+ $.prompt.jqib.on('impromptu:statechanged', callback);
+ }
+ $.prompt.jqib.trigger('impromptu:statechanged', [state]);
+ if (typeof callback === 'function'){
+ $.prompt.jqib.off('impromptu:statechanged', callback);
+ }
+ });
+ if(!subState){
+ $.prompt.position();
+ }
+ }
+ return $state;
+ };
+
+ /**
+ * nextState - Transition to the next state
+ * @param callback Function - called when the transition is complete
+ * @return jQuery - the newly active state
+ */
+ $.prompt.nextState = function(callback) {
+ var $next = $('#'+ $.prompt.currentPrefix +'state_'+ $.prompt.getCurrentStateName()).next();
+ if($next.length > 0){
+ $.prompt.goToState( $next.attr('id').replace($.prompt.currentPrefix +'state_',''), callback );
+ }
+ return $next;
+ };
+
+ /**
+ * prevState - Transition to the previous state
+ * @param callback Function - called when the transition is complete
+ * @return jQuery - the newly active state
+ */
+ $.prompt.prevState = function(callback) {
+ var $prev = $('#'+ $.prompt.currentPrefix +'state_'+ $.prompt.getCurrentStateName()).prev();
+ if($prev.length > 0){
+ $.prompt.goToState( $prev.attr('id').replace($.prompt.currentPrefix +'state_',''), callback );
+ }
+ return $prev;
+ };
+
+ /**
+ * close - Closes the prompt
+ * @param callback Function - called when the transition is complete
+ * @param clicked String - value of the button clicked (only used internally)
+ * @param msg jQuery - The state message body (only used internally)
+ * @param forvals Object - key/value pairs of all form field names and values (only used internally)
+ * @return jQuery - the newly active state
+ */
+ $.prompt.close = function(callCallback, clicked, msg, formvals){
+ if($.prompt.timeout){
+ clearTimeout($.prompt.timeout);
+ $.prompt.timeout = false;
+ }
+
+ if($.prompt.jqib){
+ $.prompt.jqib.fadeOut('fast',function(){
+
+ $.prompt.jqib.trigger('impromptu:close', [clicked,msg,formvals]);
+
+ $.prompt.jqib.remove();
+
+ $(window).off('resize',$.prompt.position);
+ });
+ }
+ };
+
+ /**
+ * Enable using $('.selector').prompt({});
+ * This will grab the html within the prompt as the prompt message
+ */
+ $.fn.prompt = function(options){
+ if(options === undefined){
+ options = {};
+ }
+ if(options.withDataAndEvents === undefined){
+ options.withDataAndEvents = false;
+ }
+
+ $.prompt($(this).clone(options.withDataAndEvents).html(),options);
+ };
+
+})(jQuery);
diff --git a/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.css b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.css
new file mode 100644
index 000000000..61d34a754
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.css
@@ -0,0 +1,3 @@
+/*! jQuery-Impromptu - v5.2.3 - 2014-03-09
+* http://trentrichardson.com/Impromptu
+* Copyright (c) 2014 Trent Richardson; Licensed MIT */.jqifade{position:absolute;background-color:#777}div.jqi{width:400px;max-width:90%;font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;position:absolute;background-color:#fff;font-size:11px;text-align:left;border:solid 1px #eee;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px;padding:7px}div.jqi .jqicontainer{}div.jqi .jqiclose{position:absolute;top:4px;right:-2px;width:18px;cursor:default;color:#bbb;font-weight:700}div.jqi .jqistate{background-color:#fff}div.jqi .jqititle{padding:5px 10px;font-size:16px;line-height:20px;border-bottom:solid 1px #eee}div.jqi .jqimessage{padding:10px;line-height:20px;color:#444}div.jqi .jqibuttons{text-align:right;margin:0 -7px -7px -7px;border-top:solid 1px #e4e4e4;background-color:#f4f4f4;border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px}div.jqi .jqibuttons button{margin:0;padding:15px 20px;background-color:transparent;font-weight:400;border:0;border-left:solid 1px #e4e4e4;color:#777;font-weight:700;font-size:12px}div.jqi .jqibuttons button.jqidefaultbutton{color:#489afe}div.jqi .jqibuttons button:hover,div.jqi .jqibuttons button:focus{color:#287ade;outline:0}.jqiwarning .jqi .jqibuttons{background-color:#b95656}div.jqi .jqiparentstate::after{background-color:#777;opacity:.6;filter:alpha(opacity=60);content:'';position:absolute;top:0;left:0;bottom:0;right:0;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px}div.jqi .jqisubstate{position:absolute;top:0;left:20%;width:60%;padding:7px;border:solid 1px #eee;border-top:0;border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px}div.jqi .jqisubstate .jqibuttons button{padding:10px 18px}.jqi .jqiarrow{position:absolute;height:0;width:0;line-height:0;font-size:0;border:solid 10px transparent}.jqi .jqiarrowtl{left:10px;top:-20px;border-bottom-color:#fff}.jqi .jqiarrowtc{left:50%;top:-20px;border-bottom-color:#fff;margin-left:-10px}.jqi .jqiarrowtr{right:10px;top:-20px;border-bottom-color:#fff}.jqi .jqiarrowbl{left:10px;bottom:-20px;border-top-color:#fff}.jqi .jqiarrowbc{left:50%;bottom:-20px;border-top-color:#fff;margin-left:-10px}.jqi .jqiarrowbr{right:10px;bottom:-20px;border-top-color:#fff}.jqi .jqiarrowlt{left:-20px;top:10px;border-right-color:#fff}.jqi .jqiarrowlm{left:-20px;top:50%;border-right-color:#fff;margin-top:-10px}.jqi .jqiarrowlb{left:-20px;bottom:10px;border-right-color:#fff}.jqi .jqiarrowrt{right:-20px;top:10px;border-left-color:#fff}.jqi .jqiarrowrm{right:-20px;top:50%;border-left-color:#fff;margin-top:-10px}.jqi .jqiarrowrb{right:-20px;bottom:10px;border-left-color:#fff}
\ No newline at end of file
diff --git a/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.js b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.js
new file mode 100644
index 000000000..4fab8b849
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/jquery-impromptu.min.js
@@ -0,0 +1,4 @@
+/*! jQuery-Impromptu - v5.2.3 - 2014-03-09
+* http://trentrichardson.com/Impromptu
+* Copyright (c) 2014 Trent Richardson; Licensed MIT */
+(function(t){"use strict";t.prompt=function(e,o){void 0!==o&&void 0!==o.classes&&"string"==typeof o.classes&&(o={box:o.classes}),t.prompt.options=t.extend({},t.prompt.defaults,o),t.prompt.currentPrefix=t.prompt.options.prefix,t.prompt.timeout&&clearTimeout(t.prompt.timeout),t.prompt.timeout=!1;var p=t.prompt.options,r=t(document.body),i=t(window),n='';n+=p.useiframe&&t("object, applet").length>0?'
':'
',n+='
"+"
",t.prompt.jqib=t(n).appendTo(r),t.prompt.jqi=t.prompt.jqib.children("."+p.prefix),t.prompt.jqif=t.prompt.jqib.children("."+p.prefix+"fade"),e.constructor===String&&(e={state0:{title:p.title,html:e,buttons:p.buttons,position:p.position,focus:p.focus,defaultButton:p.defaultButton,submit:p.submit}}),t.prompt.options.states={};var s,a;for(s in e)a=t.extend({},t.prompt.defaults.state,{name:s},e[s]),t.prompt.addState(a.name,a),""===t.prompt.currentStateName&&(t.prompt.currentStateName=a.name);t.prompt.jqi.on("click","."+p.prefix+"buttons button",function(){var e=t(this),o=e.parents("."+p.prefix+"state"),r=t.prompt.options.states[o.data("jqi-name")],i=o.children("."+p.prefix+"message"),n=r.buttons[e.text()]||r.buttons[e.html()],s={};if(void 0===n)for(var a in r.buttons)(r.buttons[a].title===e.text()||r.buttons[a].title===e.html())&&(n=r.buttons[a].value);t.each(t.prompt.jqi.children("form").serializeArray(),function(t,e){void 0===s[e.name]?s[e.name]=e.value:typeof s[e.name]===Array||"object"==typeof s[e.name]?s[e.name].push(e.value):s[e.name]=[s[e.name],e.value]});var m=new t.Event("impromptu:submit");m.stateName=r.name,m.state=o,o.trigger(m,[n,i,s]),m.isDefaultPrevented()||t.prompt.close(!0,n,i,s)});var m=function(){if(p.persistent){var e=(""+p.top).indexOf("%")>=0?i.height()*(parseInt(p.top,10)/100):parseInt(p.top,10),o=parseInt(t.prompt.jqi.css("top").replace("px",""),10)-e;t("html,body").animate({scrollTop:o},"fast",function(){var e=0;t.prompt.jqib.addClass(p.prefix+"warning");var o=setInterval(function(){t.prompt.jqib.toggleClass(p.prefix+"warning"),e++>1&&(clearInterval(o),t.prompt.jqib.removeClass(p.prefix+"warning"))},100)})}else t.prompt.close(!0)},u=function(e){var o=window.event?event.keyCode:e.keyCode;if(27===o&&m(),13===o){var r=t.prompt.getCurrentState().find("."+p.prefix+"defaultbutton"),i=t(e.target);i.is("textarea,."+p.prefix+"button")===!1&&r.length>0&&(e.preventDefault(),r.click())}if(9===o){var n=t("input,select,textarea,button",t.prompt.getCurrentState()),s=!e.shiftKey&&e.target===n[n.length-1],a=e.shiftKey&&e.target===n[0];if(s||a)return setTimeout(function(){if(n){var t=n[a===!0?n.length-1:0];t&&t.focus()}},10),!1}};return t.prompt.position(),t.prompt.style(),t.prompt.jqif.click(m),i.resize({animate:!1},t.prompt.position),t.prompt.jqi.find("."+p.prefix+"close").click(t.prompt.close),t.prompt.jqib.on("keydown",u).on("impromptu:loaded",p.loaded).on("impromptu:close",p.close).on("impromptu:statechanging",p.statechanging).on("impromptu:statechanged",p.statechanged),t.prompt.jqif[p.show](p.overlayspeed),t.prompt.jqi[p.show](p.promptspeed,function(){var e=t.prompt.jqi.find("."+p.prefix+"states ."+p.prefix+"state").eq(0);t.prompt.goToState(e.data("jqi-name")),t.prompt.jqib.trigger("impromptu:loaded")}),p.timeout>0&&(t.prompt.timeout=setTimeout(function(){t.prompt.close(!0)},p.timeout)),t.prompt.jqib},t.prompt.defaults={prefix:"jqi",classes:{box:"",fade:"",prompt:"",close:"",title:"",message:"",buttons:"",button:"",defaultButton:""},title:"",closeText:"×",buttons:{Ok:!0},loaded:function(){},submit:function(){},close:function(){},statechanging:function(){},statechanged:function(){},opacity:.6,zIndex:999,overlayspeed:"slow",promptspeed:"fast",show:"fadeIn",focus:0,defaultButton:0,useiframe:!1,top:"15%",position:{container:null,x:null,y:null,arrow:null,width:null},persistent:!0,timeout:0,states:{},state:{name:null,title:"",html:"",buttons:{Ok:!0},focus:0,defaultButton:0,position:{container:null,x:null,y:null,arrow:null,width:null},submit:function(){return!0}}},t.prompt.currentPrefix=t.prompt.defaults.prefix,t.prompt.currentStateName="",t.prompt.setDefaults=function(e){t.prompt.defaults=t.extend({},t.prompt.defaults,e)},t.prompt.setStateDefaults=function(e){t.prompt.defaults.state=t.extend({},t.prompt.defaults.state,e)},t.prompt.position=function(e){var o=t.fx.off,p=t.prompt.getCurrentState(),r=t.prompt.options.states[p.data("jqi-name")],i=r?r.position:void 0,n=t(window),s=document.body.scrollHeight,a=t(window).height(),m=(t(document).height(),s>a?s:a),u=parseInt(n.scrollTop(),10)+((""+t.prompt.options.top).indexOf("%")>=0?a*(parseInt(t.prompt.options.top,10)/100):parseInt(t.prompt.options.top,10));if(void 0!==e&&e.data.animate===!1&&(t.fx.off=!0),t.prompt.jqib.css({position:"absolute",height:m,width:"100%",top:0,left:0,right:0,bottom:0}),t.prompt.jqif.css({position:"fixed",height:m,width:"100%",top:0,left:0,right:0,bottom:0}),i&&i.container){var f=t(i.container).offset();t.isPlainObject(f)&&void 0!==f.top&&(t.prompt.jqi.css({position:"absolute"}),t.prompt.jqi.animate({top:f.top+i.y,left:f.left+i.x,marginLeft:0,width:void 0!==i.width?i.width:null}),u=f.top+i.y-((""+t.prompt.options.top).indexOf("%")>=0?a*(parseInt(t.prompt.options.top,10)/100):parseInt(t.prompt.options.top,10)),t("html,body").animate({scrollTop:u},"slow","swing",function(){}))}else i&&i.width?(t.prompt.jqi.css({position:"absolute",left:"50%"}),t.prompt.jqi.animate({top:i.y||u,left:i.x||"50%",marginLeft:-1*(i.width/2),width:i.width})):t.prompt.jqi.css({position:"absolute",top:u,left:"50%",marginLeft:-1*(t.prompt.jqi.outerWidth(!1)/2)});void 0!==e&&e.data.animate===!1&&(t.fx.off=o)},t.prompt.style=function(){t.prompt.jqif.css({zIndex:t.prompt.options.zIndex,display:"none",opacity:t.prompt.options.opacity}),t.prompt.jqi.css({zIndex:t.prompt.options.zIndex+1,display:"none"}),t.prompt.jqib.css({zIndex:t.prompt.options.zIndex})},t.prompt.get=function(){return t("."+t.prompt.currentPrefix)},t.prompt.addState=function(e,o,p){var r,i,n,s="",a=null,m="",u="",f=t.prompt.options,l=t("."+t.prompt.currentPrefix+"states"),c=0;o=t.extend({},t.prompt.defaults.state,{name:e},o),null!==o.position.arrow&&(m=''),o.title&&""!==o.title&&(u=''+o.title+"
"),s+=''+m+u+'
'+o.html+"
"+'
";for(i in o.buttons)n=o.buttons[i],r=o.focus===c||isNaN(o.focus)&&o.defaultButton===c?t.prompt.currentPrefix+"defaultbutton "+f.classes.defaultButton:"","object"==typeof n?(s+='"):s+='",c++;return s+="
",a=t(s),a.on("impromptu:submit",o.submit),void 0!==p?l.find("#"+t.prompt.currentPrefix+"state_"+p).after(a):l.append(a),t.prompt.options.states[e]=o,a},t.prompt.removeState=function(e){var o=t.prompt.getState(e),p=function(){o.remove()};return 0===o.length?!1:("none"!==o.css("display")?o.next().length>0?t.prompt.nextState(p):t.prompt.prevState(p):o.slideUp("slow",p),!0)},t.prompt.getState=function(e){return t("#"+t.prompt.currentPrefix+"state_"+e)},t.prompt.getStateContent=function(e){return t.prompt.getState(e)},t.prompt.getCurrentState=function(){return t.prompt.getState(t.prompt.getCurrentStateName())},t.prompt.getCurrentStateName=function(){return t.prompt.currentStateName},t.prompt.goToState=function(e,o,p){var r=(t.prompt.get(),t.prompt.options),i=t.prompt.getState(e),n=r.states[i.data("jqi-name")],s=new t.Event("impromptu:statechanging");return"function"==typeof o&&(p=o,o=!1),t.prompt.jqib.trigger(s,[t.prompt.getCurrentStateName(),e]),!s.isDefaultPrevented()&&i.length>0&&(t.prompt.jqi.find("."+t.prompt.currentPrefix+"parentstate").removeClass(t.prompt.currentPrefix+"parentstate"),o?(t.prompt.jqi.find("."+t.prompt.currentPrefix+"substate").not(i).slideUp(r.promptspeed).removeClass("."+t.prompt.currentPrefix+"substate").find("."+t.prompt.currentPrefix+"arrow").hide(),t.prompt.jqi.find("."+t.prompt.currentPrefix+"state:visible").addClass(t.prompt.currentPrefix+"parentstate"),i.addClass(t.prompt.currentPrefix+"substate")):t.prompt.jqi.find("."+t.prompt.currentPrefix+"state").not(i).slideUp(r.promptspeed).find("."+t.prompt.currentPrefix+"arrow").hide(),t.prompt.currentStateName=n.name,i.slideDown(r.promptspeed,function(){var o=t(this);"string"==typeof n.focus?o.find(n.focus).eq(0).focus():o.find("."+t.prompt.currentPrefix+"defaultbutton").focus(),o.find("."+t.prompt.currentPrefix+"arrow").show(r.promptspeed),"function"==typeof p&&t.prompt.jqib.on("impromptu:statechanged",p),t.prompt.jqib.trigger("impromptu:statechanged",[e]),"function"==typeof p&&t.prompt.jqib.off("impromptu:statechanged",p)}),o||t.prompt.position()),i},t.prompt.nextState=function(e){var o=t("#"+t.prompt.currentPrefix+"state_"+t.prompt.getCurrentStateName()).next();return o.length>0&&t.prompt.goToState(o.attr("id").replace(t.prompt.currentPrefix+"state_",""),e),o},t.prompt.prevState=function(e){var o=t("#"+t.prompt.currentPrefix+"state_"+t.prompt.getCurrentStateName()).prev();return o.length>0&&t.prompt.goToState(o.attr("id").replace(t.prompt.currentPrefix+"state_",""),e),o},t.prompt.close=function(e,o,p,r){t.prompt.timeout&&(clearTimeout(t.prompt.timeout),t.prompt.timeout=!1),t.prompt.jqib&&t.prompt.jqib.fadeOut("fast",function(){t.prompt.jqib.trigger("impromptu:close",[o,p,r]),t.prompt.jqib.remove(),t(window).off("resize",t.prompt.position)})},t.fn.prompt=function(e){void 0===e&&(e={}),void 0===e.withDataAndEvents&&(e.withDataAndEvents=!1),t.prompt(t(this).clone(e.withDataAndEvents).html(),e)}})(jQuery);
\ No newline at end of file
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/base.css b/ajax/libs/jquery-impromptu/5.2.3/themes/base.css
new file mode 100644
index 000000000..ec4b0e9b7
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/base.css
@@ -0,0 +1,91 @@
+/*
+------------------------------
+ Impromptu Base Styles
+------------------------------
+*/
+.jqifade{
+ position: absolute;
+ background-color: #777777;
+}
+div.jqi{
+ width: 400px;
+ position: absolute;
+ background-color: #ffffff;
+ text-align: left;
+ border: solid 1px #eeeeee;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ padding: 7px;
+}
+div.jqi .jqicontainer{
+}
+div.jqi .jqiclose{
+ position: absolute;
+ top: 4px; right: -2px;
+ width: 18px;
+ cursor: default;
+ color: #bbbbbb;
+ font-weight: bold;
+}
+div.jqi .jqistate{
+ background-color: #fff;
+}
+div.jqi .jqiparentstate::after{
+ background-color: #eee;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ content: '';
+ position: absolute;
+ top:0;left:0;bottom:0;right:0;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+}
+div.jqi .jqisubstate{
+
+ position: absolute;
+ top:0;
+ left: 20%;
+ width: 60%;
+ padding: 7px;
+ border: solid 1px #eeeeee;
+ border-top: none;
+ border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ -webkit-border-radius: 0 0 6px 6px;
+}
+div.jqi .jqititle{
+ padding: 5px 10px;
+ border-bottom: solid 1px #eeeeee;
+}
+div.jqi .jqimessage{
+ padding: 10px;
+ color: #444444;
+}
+div.jqi .jqibuttons{
+ padding: 5px;
+ text-align: right;
+}
+div.jqi button{
+ margin: 0 0 0 10px;
+}
+
+.jqi .jqiarrow{ position: absolute; height: 0; width:0; line-height: 0; font-size: 0; border: solid 10px transparent;}
+
+.jqi .jqiarrowtl{ left: 10px; top: -20px; border-bottom-color: #ffffff; }
+.jqi .jqiarrowtc{ left: 50%; top: -20px; border-bottom-color: #ffffff; margin-left: -10px; }
+.jqi .jqiarrowtr{ right: 10px; top: -20px; border-bottom-color: #ffffff; }
+
+.jqi .jqiarrowbl{ left: 10px; bottom: -20px; border-top-color: #ffffff; }
+.jqi .jqiarrowbc{ left: 50%; bottom: -20px; border-top-color: #ffffff; margin-left: -10px; }
+.jqi .jqiarrowbr{ right: 10px; bottom: -20px; border-top-color: #ffffff; }
+
+.jqi .jqiarrowlt{ left: -20px; top: 10px; border-right-color: #ffffff; }
+.jqi .jqiarrowlm{ left: -20px; top: 50%; border-right-color: #ffffff; margin-top: -10px; }
+.jqi .jqiarrowlb{ left: -20px; bottom: 10px; border-right-color: #ffffff; }
+
+.jqi .jqiarrowrt{ right: -20px; top: 10px; border-left-color: #ffffff; }
+.jqi .jqiarrowrm{ right: -20px; top: 50%; border-left-color: #ffffff; margin-top: -10px; }
+.jqi .jqiarrowrb{ right: -20px; bottom: 10px; border-left-color: #ffffff; }
+
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/classic-impromptu.css b/ajax/libs/jquery-impromptu/5.2.3/themes/classic-impromptu.css
new file mode 100644
index 000000000..7a4d38946
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/classic-impromptu.css
@@ -0,0 +1,41 @@
+/*
+------------------------------
+ classic impromptu
+------------------------------
+*/
+.impromptuwarning .impromptu{ background-color: #aaaaaa; }
+.impromptufade{
+ position: absolute;
+ background-color: #ffffff;
+}
+div.impromptu{
+ position: absolute;
+ background-color: #cccccc;
+ padding: 10px;
+ width: 300px;
+ text-align: left;
+}
+div.impromptu .impromptuclose{
+ float: right;
+ margin: -35px -10px 0 0;
+ cursor: pointer;
+ color: #213e80;
+}
+div.impromptu .impromptucontainer{
+ background-color: #213e80;
+ padding: 5px;
+ color: #ffffff;
+ font-weight: bold;
+}
+div.impromptu .impromptumessage{
+ background-color: #415ea0;
+ padding: 10px;
+}
+div.impromptu .impromptubuttons{
+ text-align: center;
+ padding: 5px 0 0 0;
+}
+div.impromptu button{
+ padding: 3px 10px 3px 10px;
+ margin: 0 10px;
+}
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/clean-blue.css b/ajax/libs/jquery-impromptu/5.2.3/themes/clean-blue.css
new file mode 100644
index 000000000..e73dce059
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/clean-blue.css
@@ -0,0 +1,59 @@
+/*
+------------------------------
+ clean blue
+------------------------------
+*/
+.cleanbluewarning .cleanblue{
+ background-color: #acb4c4;
+}
+.cleanbluefade{
+ position: absolute;
+ background-color: #aaaaaa;
+}
+div.cleanblue{
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ position: absolute;
+ background-color: #ffffff;
+ width: 300px;
+ font-size: 11px;
+ text-align: left;
+ border: solid 1px #213e80;
+}
+div.cleanblue .cleanbluecontainer{
+ background-color: #ffffff;
+ border-top: solid 14px #213e80;
+ padding: 5px;
+ font-weight: bold;
+}
+div.cleanblue .cleanblueclose{
+ float: right;
+ width: 18px;
+ cursor: default;
+ margin: -19px -12px 0 0;
+ color: #ffffff;
+ font-weight: bold;
+}
+div.cleanblue .cleanbluemessage{
+ padding: 10px;
+ line-height: 20px;
+ font-size: 11px;
+ color: #333333;
+}
+div.cleanblue .cleanbluebuttons{
+ text-align: right;
+ padding: 5px 0 5px 0;
+ border: solid 1px #eeeeee;
+ background-color: #f4f4f4;
+}
+div.cleanblue button{
+ padding: 3px 10px;
+ margin: 0 10px;
+ background-color: #314e90;
+ border: solid 1px #f4f4f4;
+ color: #ffffff;
+ font-weight: bold;
+ font-size: 12px;
+}
+div.cleanblue button:hover{
+ border: solid 1px #d4d4d4;
+}
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/ext-blue.css b/ajax/libs/jquery-impromptu/5.2.3/themes/ext-blue.css
new file mode 100644
index 000000000..cd1224d13
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/ext-blue.css
@@ -0,0 +1,50 @@
+/*
+------------------------------
+ Ext Blue
+------------------------------
+*/
+.extbluewarning .extblue{
+ border:1px red solid;
+}
+.extbluefade{
+ position: absolute;
+ background-color: #ffffff;
+}
+div.extblue{
+ border:1px #6289B6 solid;
+ position: absolute;
+ background-color: #CAD8EA;
+ padding: 0;
+ width: 300px;
+ text-align: left;
+}
+div.extblue .extblueclose{
+ background-color: #CAD8EA;
+ margin:2px -2px 0 0;
+ cursor: pointer;
+ color: red;
+ text-align: right;
+}
+div.extblue .extbluecontainer{
+ background-color: #CAD8EA;
+ padding: 0 5px 5px 5px;
+ color: #000000;
+ font:normal 11px Verdana;
+}
+div.extblue .extbluemessage{
+ background-color: #CAD8EA;
+ padding: 0;
+ margin:0 15px 15px 15px;
+}
+div.extblue .extbluebuttons{
+ text-align: center;
+ padding: 0px 0 0 0;
+}
+div.extblue button{
+ padding: 1px 4px;
+ margin: 0 10px;
+ background-color:#cccccc;
+ font-weight:normal;
+ font-family:Verdana;
+ font-size:10px;
+}
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/smooth.css b/ajax/libs/jquery-impromptu/5.2.3/themes/smooth.css
new file mode 100644
index 000000000..687fe92a6
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/smooth.css
@@ -0,0 +1,69 @@
+/*
+------------------------------
+ Smooth
+------------------------------
+*/
+.jqismoothfade{
+ position: absolute;
+ background-color: #333333;
+}
+div.jqismooth{
+ width: 350px;
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ position: absolute;
+ background-color: #ffffff;
+ font-size: 11px;
+ text-align: left;
+ border: solid 3px #e2e8e6;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ padding: 7px;
+}
+div.jqismooth .jqismoothcontainer{
+ font-weight: bold;
+}
+div.jqismooth .jqismoothclose{
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 18px;
+ cursor: default;
+ text-align: center;
+ padding: 2px 0 4px 0;
+ color: #727876;
+ font-weight: bold;
+ background-color: #e2e8e6;
+ -moz-border-radius-bottomLeft: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+ border-left: solid 1px #e2e8e6;
+ border-bottom: solid 1px #e2e8e6;
+}
+div.jqismooth .jqismoothmessage{
+ padding: 10px;
+ line-height: 20px;
+ color: #444444;
+}
+div.jqismooth .jqismoothbuttons{
+ text-align: right;
+ padding: 5px 0 5px 0;
+ border: solid 1px #e2e8e6;
+ background-color: #f2f8f6;
+}
+div.jqismooth button{
+ padding: 3px 10px;
+ margin: 0 10px;
+ background-color: #2F6073;
+ border: solid 1px #f4f4f4;
+ color: #ffffff;
+ font-weight: bold;
+ font-size: 12px;
+}
+div.jqismooth button:hover{
+ background-color: #728A8C;
+}
+div.jqismooth button.jqismoothdefaultbutton{
+ background-color: #BF5E26;
+}
+.jqismoothwarning .jqismooth .jqismoothbuttons{
+ background-color: #BF5E26;
+}
diff --git a/ajax/libs/jquery-impromptu/5.2.3/themes/zoo.css b/ajax/libs/jquery-impromptu/5.2.3/themes/zoo.css
new file mode 100644
index 000000000..ac9c98e84
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/5.2.3/themes/zoo.css
@@ -0,0 +1,44 @@
+/* The Impromptzoo theme by Trent Richardson, based on http://stammtec.de/work/upload-dialog/ */
+
+/* layout */
+.jqizoofade{ position: absolute; background-color: #000; }
+div.jqizoo{ width: 400px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; position: absolute; background-color: #ffffff; font-size: 11px; text-align: left;
+ border: solid 2px #333; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; }
+
+/* container */
+div.jqizoo .jqizoocontainer{ background-color: #5b6776; }
+div.jqizoo .jqizooclose{ position: absolute; top: 0; right: 8px; width: 20px; padding: 2px 0 2px 0; text-align: center; cursor: default; color: #fff; font-weight: bold; text-shadow: 1px 1px 1px #333;
+ background-color: #d4797b; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#d4797b), to(#b34b4d)); background-image: -webkit-linear-gradient(top, #d4797b, #b34b4d); background-image: -moz-linear-gradient(top, #d4797b, #b34b4d); background-image: -ms-linear-gradient(top, #d4797b, #b34b4d); background-image: -o-linear-gradient(top, #d4797b, #b34b4d);
+ border: solid 1px #555; border-top: none; border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px;}
+div.jqizoo .jqizootitle{ padding: 10px 10px; font-size: 14px; color: #333; line-height: 20px; text-align: center; text-shadow: 1px 1px 1px #999; letter-spacing: 1px;
+ background-color: #f0f0f0; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#f0f0f0), to(#dbdbdb)); background-image: -webkit-linear-gradient(top, #f0f0f0, #dbdbdb); background-image: -moz-linear-gradient(top, #f0f0f0, #dbdbdb); background-image: -ms-linear-gradient(top, #f0f0f0, #dbdbdb); background-image: -o-linear-gradient(top, #f0f0f0, #dbdbdb);
+ border-bottom: solid 1px #949494; border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; -webkit-border-radius: 5px 5px 0 0; }
+div.jqizoo .jqizoomessage{ padding: 10px; line-height: 20px; color: #444444; background-color: #fff;
+ border-bottom: solid 1px #333; border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; }
+
+/* buttons */
+div.jqizoo .jqizoobuttons{ text-align: right; padding: 6px 0 6px 0;
+ background-color: #5b6776; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#5b6776), to(#303940)); background-image: -webkit-linear-gradient(top, #5b6776, #303940); background-image: -moz-linear-gradient(top, #5b6776, #303940); background-image: -ms-linear-gradient(top, #5b6776, #303940); background-image: -o-linear-gradient(top, #5b6776, #303940);
+ border-radius: 0 0 5px 5px; -moz-border-radius: 0 0 5px 5px; -webkit-border-radius: 0 0 5px 5px; }
+div.jqizoo button{ padding: 3px 10px; margin: 0 10px; background-color: #2F6073; color: #ffffff; font-weight: bold; font-size: 12px; text-shadow: 1px 1px 1px #333;
+ background-color: #78a0ce; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#78a0ce), to(#516cb6)); background-image: -webkit-linear-gradient(top, #78a0ce, #516cb6); background-image: -moz-linear-gradient(top, #78a0ce, #516cb6); background-image: -ms-linear-gradient(top, #78a0ce, #516cb6); background-image: -o-linear-gradient(top, #78a0ce, #516cb6);
+ /* yellow background-color: #dab150; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#dab150), to(#c49629)); background-image: -webkit-linear-gradient(top, #dab150, #c49629); background-image: -moz-linear-gradient(top, #dab150, #c49629); background-image: -ms-linear-gradient(top, #dab150, #c49629); background-image: -o-linear-gradient(top, #dab150, #c49629); */
+ border: solid 1px #192432; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
+div.jqizoo button:hover{ color: #eee; }
+div.jqizoo button.jqizoodefaultbutton{ background-color: #d4797b; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#d4797b), to(#b34b4d)); background-image: -webkit-linear-gradient(top, #d4797b, #b34b4d); background-image: -moz-linear-gradient(top, #d4797b, #b34b4d); background-image: -ms-linear-gradient(top, #d4797b, #b34b4d); background-image: -o-linear-gradient(top, #d4797b, #b34b4d); }
+.jqizoowarning .jqizoo .jqizoobuttons button{ border-color: #dab150; }
+
+/* arrows */
+.jqizoo .jqizooarrow{ position: absolute; height: 0; width:0; line-height: 0; font-size: 0; border: solid 10px transparent; }
+.jqizoo .jqizooarrowtl{ left: 10px; top: -20px; border-bottom-color: #333; }
+.jqizoo .jqizooarrowtc{ left: 50%; top: -20px; border-bottom-color: #333; margin-left: -10px; }
+.jqizoo .jqizooarrowtr{ right: 10px; top: -20px; border-bottom-color: #333; }
+.jqizoo .jqizooarrowbl{ left: 10px; bottom: -20px; border-top-color: #333; }
+.jqizoo .jqizooarrowbc{ left: 50%; bottom: -20px; border-top-color: #333; margin-left: -10px; }
+.jqizoo .jqizooarrowbr{ right: 10px; bottom: -20px; border-top-color: #333; }
+.jqizoo .jqizooarrowlt{ left: -20px; top: 10px; border-right-color: #333; }
+.jqizoo .jqizooarrowlm{ left: -20px; top: 50%; border-right-color: #333; margin-top: -10px; }
+.jqizoo .jqizooarrowlb{ left: -20px; bottom: 10px; border-right-color: #333; }
+.jqizoo .jqizooarrowrt{ right: -20px; top: 10px; border-left-color: #333; }
+.jqizoo .jqizooarrowrm{ right: -20px; top: 50%; border-left-color: #333; margin-top: -10px; }
+.jqizoo .jqizooarrowrb{ right: -20px; bottom: 10px; border-left-color: #333; }
\ No newline at end of file
diff --git a/ajax/libs/jquery-impromptu/package.json b/ajax/libs/jquery-impromptu/package.json
new file mode 100644
index 000000000..3ad86c3d0
--- /dev/null
+++ b/ajax/libs/jquery-impromptu/package.json
@@ -0,0 +1,29 @@
+{
+ "filename": "jquery-impromptu.min.js",
+ "name": "jquery-impromptu",
+ "title": "jQuery-Impromptu",
+ "description": "An extension to help provide a more pleasant way to spontaneously prompt a user for input.",
+ "version": "5.2.3",
+ "modified": "2014-03-09",
+ "homepage": "http://trentrichardson.com/Impromptu",
+ "author": {
+ "name": "Trent Richardson",
+ "email": "trentdrichardson@gmail.com",
+ "url": "http://trentrichardson.com"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/trentrichardson/jQuery-Impromptu.git"
+ },
+ "bugs": "https://github.com/trentrichardson/jQuery-Impromptu/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://trentrichardson.com/examples/jQuery-Impromptu/blob/master/MIT-LICENSE.txt"
+ }
+ ],
+ "dependencies": {
+ "jquery": "*"
+ },
+ "keywords": []
+}