Spade

Mini Shell

Directory:~$ /proc/self/root/home/lmsyaran/www/pusher/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ //proc/self/root/home/lmsyaran/www/pusher/com_joomlaupdate.tar

js/default.js000064400000034657151171315530007163 0ustar00function
extractionMethodHandler(target, prefix)
{
	jQuery(function ($) {
		$em = $(target);
		displayStyle = ($em.val() === 'direct') ? 'none' :
'table-row';

		document.getElementById(prefix + '_notice').style.display =
displayStyle;
		document.getElementById(prefix + '_hostname').style.display =
displayStyle;
		document.getElementById(prefix + '_port').style.display =
displayStyle;
		document.getElementById(prefix + '_username').style.display =
displayStyle;
		document.getElementById(prefix + '_password').style.display =
displayStyle;
		document.getElementById(prefix + '_directory').style.display =
displayStyle;
	});
}

(function($, document, window) {
    /**
     * PreUpdateChecker
     *
     * @type {Object}
     */
    var PreUpdateChecker = {};

	/**
	 * Warning visibility flags
	 *
	 * @type {Boolean}
	 */
	var showorangewarning = false;
	var showyellowwarning = false;

	/**
     * Config object
     *
     * @type {{serverUrl: string, selector: string}}
     */
    PreUpdateChecker.config = {
        serverUrl:
'index.php?option=com_joomlaupdate&task=update.fetchextensioncompatibility',
        selector: '.extension-check'
    };

    /**
     * Extension compatibility states returned by the server.
     *
     * @type {{INCOMPATIBLE: number, COMPATIBLE: number,
MISSING_COMPATIBILITY_TAG: number, SERVER_ERROR: number}}
     */
    PreUpdateChecker.STATE = {
        INCOMPATIBLE: 0,
        COMPATIBLE: 1,
        MISSING_COMPATIBILITY_TAG: 2,
        SERVER_ERROR: 3
    };

    /**
     * Run the PreUpdateChecker.
     * Called by document ready, setup below.
     */
    PreUpdateChecker.run = function () {

		$('.settingstoggle').css('float',
'right').css('cursor', 'pointer');
		$('.settingstoggle').on('click', function(toggle,
index)
		{
			var settingsfieldset = $(this).closest('fieldset');
			if($(this).data('state') == 'closed')
			{
				$(this).data('state', 'open');
				$(this).html(
COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION);
				settingsfieldset.find('.settingsInfo').removeClass('hidden');
			}
			else
			{
				$(this).data('state', 'closed');
				$(this).html(
COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION);
				settingsfieldset.find('.settingsInfo').addClass('hidden');
			}
		});

		PreUpdateChecker.nonCoreCriticalPlugins =
Joomla.getOptions('nonCoreCriticalPlugins', []);

		// If there are no non Core Critical Plugins installed then disable the
warnings upfront
		if (PreUpdateChecker.nonCoreCriticalPlugins.length === 0)
		{
			$('#preupdateCheckWarning, #preupdateconfirmation,
#preupdatecheckbox, #preupdatecheckheadings').css('display',
'none');
			$('#preupdatecheckbox
#noncoreplugins').prop('checked', true);
			$('button.submitupdate').removeClass('disabled');
			$('button.submitupdate').prop('disabled', false);
		}

		// Grab all extensions based on the selector set in the config object
		var $extensions = $(PreUpdateChecker.config.selector);

		// If there are no extensions to be checked we can exit here
		if ($extensions.length === 0)
		{
			return;
		}

		$('#preupdatecheckbox #noncoreplugins').on('change',
function ()
		{
			if ($('#preupdatecheckbox
#noncoreplugins').is(':checked')) {
				if
(confirm(Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE')))
{
					$('button.submitupdate').removeClass('disabled');
					$('button.submitupdate').prop('disabled', false);
				}
				else
				{
					$('#preupdatecheckbox
#noncoreplugins').prop('checked', false);
				}
			} else {
				$('button.submitupdate').addClass('disabled');
				$('button.submitupdate').prop('disabled', true);
			}

		});

		// Get version of the available joomla update
        PreUpdateChecker.joomlaTargetVersion = window.joomlaTargetVersion;
        PreUpdateChecker.joomlaCurrentVersion =
window.joomlaCurrentVersion;

		// No point creating and loading a component stylesheet for 4 settings
		$('.compatibilitytypes img').css('height',
'20px');
		$('.compatibilitytypes').css('display',
'none').css('margin-left', 0);
		// The currently processing line should show until it’s finished
		$('#compatibilitytype0').css('display',
'block');
		$('.compatibilitytoggle').css('float',
'right').css('cursor', 'pointer');

		$('.compatibilitytoggle').on('click',
function(toggle, index)
		{
			var compatibilitytypes =
$(this).closest('fieldset.compatibilitytypes');
			if($(this).data('state') == 'closed')
			{
				$(this).data('state', 'open');
				$(this).html(
COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION);
				compatibilitytypes.find('.exname').removeClass('span8').addClass('span4');
				compatibilitytypes.find('.extype').removeClass('span4').addClass('span1');
				compatibilitytypes.find('.upcomp').removeClass('hidden').addClass('span3');
				compatibilitytypes.find('.currcomp').removeClass('hidden').addClass('span3');
				compatibilitytypes.find('.instver').removeClass('hidden').addClass('span1');

				if (PreUpdateChecker.showyellowwarning)
				{
					compatibilitytypes.find("#updateyellowwarning").removeClass('hidden');
				}
				if (PreUpdateChecker.showorangewarning)
				{
					compatibilitytypes.find("#updateorangewarning").removeClass('hidden');
				}
			}
			else
			{
				$(this).data('state', 'closed');
				$(this).html(
COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION);
				compatibilitytypes.find('.exname').addClass('span8').removeClass('span4');
				compatibilitytypes.find('.extype').addClass('span4').removeClass('span1');
				compatibilitytypes.find('.upcomp').addClass('hidden').removeClass('span3');
				compatibilitytypes.find('.currcomp').addClass('hidden').removeClass('span3');
				compatibilitytypes.find('.instver').addClass('hidden').removeClass('span1');

				compatibilitytypes.find("#updateyellowwarning").addClass('hidden');
				compatibilitytypes.find("#updateorangewarning").addClass('hidden');
			}
		});

        $extensions.each(function () {
            // Check compatibility for each extension, pass jQuery object
and a callback
            // function after completing the request
            PreUpdateChecker.checkCompatibility($(this),
PreUpdateChecker.setResultView);
        });
    }

    /**
     * Check the compatibility for a single extension.
     * Requests the server checking the compatibility based on the data set
in the element's data attributes.
     *
     * @param {Object} $extension
     * @param {callable} callback
     */
    PreUpdateChecker.checkCompatibility = function ($extension, callback) {
        // Result object passed to the callback
        // Set to server error by default
        var extension = {
            $element: $extension,
            compatibleVersion: 0,
            serverError: 1
        };

        // Request the server to check the compatiblity for the passed
extension and joomla version
        $.getJSON(PreUpdateChecker.config.serverUrl, {
            'joomla-target-version':
PreUpdateChecker.joomlaTargetVersion,
            'joomla-current-version':
PreUpdateChecker.joomlaCurrentVersion,
            'extension-version':
$extension.data('extension-current-version'),
            'extension-id':
$extension.data('extensionId')
        }).done(function(response) {
            // Extract the data from the JResponseJson object
            extension.serverError = 0;
            extension.compatibilityData = response.data;
        }).always(function(e) {
            // Pass the retrieved data to the callback
            callback(extension);
        });
    }

    /**
     * Set the result for a passed extensionData object containing state,
jQuery object and compatible version
     *
     * @param {Object} extensionData
     */
    PreUpdateChecker.setResultView = function (extensionData) {
        var html = '';

        // Process Target Version Extension Compatibility
        if (extensionData.serverError) {
			// An error occurred -> show unknown error note
			html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR');
			// force result into group 4 = Pre update checks failed
			extensionData.compatibilityData = {
				'resultGroup' : 4
			}
		}
        else {
			// Switch the compatibility state
			switch
(extensionData.compatibilityData.upgradeCompatibilityStatus.state) {
				case PreUpdateChecker.STATE.COMPATIBLE:
					if (extensionData.compatibilityData.upgradeWarning)
					{
						html = '<span class="label label-warning">'
+
extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion
+ '</span>';
						PreUpdateChecker.showyellowwarning = true;
					}
					else {
						html =
extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion
== false ?
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION')
:
extensionData.compatibilityData.upgradeCompatibilityStatus.compatibleVersion;
					}
					break;
				case PreUpdateChecker.STATE.INCOMPATIBLE:
					// No compatible version found -> display error label
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION');
					PreUpdateChecker.showorangewarning = true;
					break;
				case PreUpdateChecker.STATE.MISSING_COMPATIBILITY_TAG:
					// Could not check compatibility state -> display warning
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION');
					PreUpdateChecker.showorangewarning = true;
					break;
				default:
					// An error occured -> show unknown error note
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN');
			}
		}
        // Insert the generated html
        extensionData.$element.html(html);

		// Process Current Version Extension Compatibility
		html = '';
		if (extensionData.serverError) {
			// An error occured -> show unknown error note
			html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR');
		}
		else {
			// Switch the compatibility state
			switch
(extensionData.compatibilityData.currentCompatibilityStatus.state) {
				case PreUpdateChecker.STATE.COMPATIBLE:
					html =
extensionData.compatibilityData.currentCompatibilityStatus.compatibleVersion
== false ?
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION')
:
extensionData.compatibilityData.currentCompatibilityStatus.compatibleVersion;
					break;
				case PreUpdateChecker.STATE.INCOMPATIBLE:
					// No compatible version found -> display error label
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION');
					break;
				case PreUpdateChecker.STATE.MISSING_COMPATIBILITY_TAG:
					// Could not check compatibility state -> display warning
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION');
					break;
				default:
					// An error occured -> show unknown error note
					html =
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN');
			}
		}
		// Insert the generated html
		var extensionId = extensionData.$element.data('extensionId')
		document.getElementById('available-version-' + extensionId
).innerHTML = html;

		extensionData.$element.closest('tr').appendTo($('#compatibilitytype'
+ extensionData.compatibilityData.resultGroup + ' tbody'));
		$('#compatibilitytype' +
extensionData.compatibilityData.resultGroup).css('display',
'block');

		document.getElementById('compatibilitytype0').style.display =
'block';

		// Process the nonCoreCriticalPlugin list
		if (extensionData.compatibilityData.resultGroup === 3)
		{
			var pluginInfo;

			for (var i = PreUpdateChecker.nonCoreCriticalPlugins.length - 1; i >=
0; i--)
			{
			  pluginInfo = PreUpdateChecker.nonCoreCriticalPlugins[i];

			  if (pluginInfo.package_id == extensionId || pluginInfo.extension_id ==
extensionId)
			  {
				$('#plg_' + pluginInfo.extension_id).remove();
				PreUpdateChecker.nonCoreCriticalPlugins.splice(i, 1);
			  }
			}
		}

		// Have we finished running through the potentially critical plugins - if
so we can hide the warning before all the checks are completed
		if ($('#preupdatecheckheadings table td').length == 0) {
			$('#preupdatecheckheadings').css('display',
'none');
		}

		// Have we finished?
		if ($('#compatibilitytype0 tbody td').length == 0) {
			$('#compatibilitytype0').css('display',
'none');
			for (var cpi in PreUpdateChecker.nonCoreCriticalPlugins)
			{
				var problemPluginRow = $('td[data-extension-id=' +
PreUpdateChecker.nonCoreCriticalPlugins[cpi].extension_id +']');
				if (!problemPluginRow.length)
				{
					problemPluginRow = $('td[data-extension-id=' +
PreUpdateChecker.nonCoreCriticalPlugins[cpi].package_id +']');
				}
				if (problemPluginRow.length)
				{
					var tableRow = problemPluginRow.closest('tr');
					tableRow.addClass('error');
					var pluginTitleTableCell = tableRow.find('td:first-child');
					pluginTitleTableCell.html(pluginTitleTableCell.html()
						+ '<span class="label label-warning " >'
						+ '<span
class="icon-warning"></span>'
						+
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN')
						+ '</span>'

						+ '<span class="label label-info hasPopover" '
						+ ' title="' +
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN')
+'"'
						+ ' data-content="' +
Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC')
 +'"'
						+ '>'
						+ '<span class="icon-help"></span>'
						+ Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP')
						+ '</span>'
					);
					var popoverElement =
pluginTitleTableCell.find('.hasPopover');
					popoverElement.css('cursor', 'pointer')
					popoverElement.popover({"placement":
"top","trigger": "focus click"});
				}
			}
			if (PreUpdateChecker.nonCoreCriticalPlugins.length == 0)
			{
				$('#preupdateCheckWarning, #preupdateconfirmation,
#preupdatecheckbox, #preupdatecheckheadings').css('display',
'none');
				$('#preupdatecheckbox
#noncoreplugins').prop('checked', true);
				$('button.submitupdate').removeClass('disabled');
				$('button.submitupdate').prop('disabled', false);
			}
			else {
				$('#preupdateCheckWarning').addClass('hidden');
				$('#preupdateCheckCompleteProblems').removeClass('hidden');
				$('#preupdateconfirmation .preupdateconfirmation_label
h3').html(Joomla.JText._('COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST'))
				$('#preupdateconfirmation
.preupdateconfirmation_label').removeClass('label-warning').addClass('label-important')
			}
		}
    }

    // Run PreUpdateChecker on document ready
	document.addEventListener( "DOMContentLoaded", function() {
		$(PreUpdateChecker.run);
	} );
})(jQuery, document, window);
js/default.min.js000064400000020005151171315530007723 0ustar00function
extractionMethodHandler(e,t){jQuery(function(a){$em=a(e),displayStyle="direct"===$em.val()?"none":"table-row",document.getElementById(t+"_notice").style.display=displayStyle,document.getElementById(t+"_hostname").style.display=displayStyle,document.getElementById(t+"_port").style.display=displayStyle,document.getElementById(t+"_username").style.display=displayStyle,document.getElementById(t+"_password").style.display=displayStyle,document.getElementById(t+"_directory").style.display=displayStyle})}!function(e,t,a){var
i={};i.config={serverUrl:"index.php?option=com_joomlaupdate&task=update.fetchextensioncompatibility",selector:".extension-check"},i.STATE={INCOMPATIBLE:0,COMPATIBLE:1,MISSING_COMPATIBILITY_TAG:2,SERVER_ERROR:3},i.run=function(){e(".settingstoggle").css("float","right").css("cursor","pointer"),e(".settingstoggle").on("click",function(t,a){var
i=e(this).closest("fieldset");"closed"==e(this).data("state")?(e(this).data("state","open"),e(this).html(COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION),i.find(".settingsInfo").removeClass("hidden")):(e(this).data("state","closed"),e(this).html(COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION),i.find(".settingsInfo").addClass("hidden"))}),i.nonCoreCriticalPlugins=Joomla.getOptions("nonCoreCriticalPlugins",[]),0===i.nonCoreCriticalPlugins.length&&(e("#preupdateCheckWarning,
#preupdateconfirmation, #preupdatecheckbox,
#preupdatecheckheadings").css("display","none"),e("#preupdatecheckbox
#noncoreplugins").prop("checked",!0),e("button.submitupdate").removeClass("disabled"),e("button.submitupdate").prop("disabled",!1));var
t=e(i.config.selector);0!==t.length&&(e("#preupdatecheckbox
#noncoreplugins").on("change",function(){e("#preupdatecheckbox
#noncoreplugins").is(":checked")?confirm(Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_CONFIRM_MESSAGE"))?(e("button.submitupdate").removeClass("disabled"),e("button.submitupdate").prop("disabled",!1)):e("#preupdatecheckbox
#noncoreplugins").prop("checked",!1):(e("button.submitupdate").addClass("disabled"),e("button.submitupdate").prop("disabled",!0))}),i.joomlaTargetVersion=a.joomlaTargetVersion,i.joomlaCurrentVersion=a.joomlaCurrentVersion,e(".compatibilitytypes
img").css("height","20px"),e(".compatibilitytypes").css("display","none").css("margin-left",0),e("#compatibilitytype0").css("display","block"),e(".compatibilitytoggle").css("float","right").css("cursor","pointer"),e(".compatibilitytoggle").on("click",function(t,a){var
s=e(this).closest("fieldset.compatibilitytypes");"closed"==e(this).data("state")?(e(this).data("state","open"),e(this).html(COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_LESS_COMPATIBILITY_INFORMATION),s.find(".exname").removeClass("span8").addClass("span4"),s.find(".extype").removeClass("span4").addClass("span1"),s.find(".upcomp").removeClass("hidden").addClass("span3"),s.find(".currcomp").removeClass("hidden").addClass("span3"),s.find(".instver").removeClass("hidden").addClass("span1"),i.showyellowwarning&&s.find("#updateyellowwarning").removeClass("hidden"),i.showorangewarning&&s.find("#updateorangewarning").removeClass("hidden")):(e(this).data("state","closed"),e(this).html(COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_SHOW_MORE_COMPATIBILITY_INFORMATION),s.find(".exname").addClass("span8").removeClass("span4"),s.find(".extype").addClass("span4").removeClass("span1"),s.find(".upcomp").addClass("hidden").removeClass("span3"),s.find(".currcomp").addClass("hidden").removeClass("span3"),s.find(".instver").addClass("hidden").removeClass("span1"),s.find("#updateyellowwarning").addClass("hidden"),s.find("#updateorangewarning").addClass("hidden"))}),t.each(function(){i.checkCompatibility(e(this),i.setResultView)}))},i.checkCompatibility=function(t,a){var
s={$element:t,compatibleVersion:0,serverError:1};e.getJSON(i.config.serverUrl,{"joomla-target-version":i.joomlaTargetVersion,"joomla-current-version":i.joomlaCurrentVersion,"extension-version":t.data("extension-current-version"),"extension-id":t.data("extensionId")}).done(function(e){s.serverError=0,s.compatibilityData=e.data}).always(function(e){a(s)})},i.setResultView=function(a){var
s="";if(a.serverError)s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR"),a.compatibilityData={resultGroup:4};else
switch(a.compatibilityData.upgradeCompatibilityStatus.state){case
i.STATE.COMPATIBLE:a.compatibilityData.upgradeWarning?(s='<span
class="label
label-warning">'+a.compatibilityData.upgradeCompatibilityStatus.compatibleVersion+"</span>",i.showyellowwarning=!0):s=0==a.compatibilityData.upgradeCompatibilityStatus.compatibleVersion?Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION"):a.compatibilityData.upgradeCompatibilityStatus.compatibleVersion;break;case
i.STATE.INCOMPATIBLE:case
i.STATE.MISSING_COMPATIBILITY_TAG:s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION"),i.showorangewarning=!0;break;default:s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN")}if(a.$element.html(s),s="",a.serverError)s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_SERVER_ERROR");else
switch(a.compatibilityData.currentCompatibilityStatus.state){case
i.STATE.COMPATIBLE:s=0==a.compatibilityData.currentCompatibilityStatus.compatibleVersion?Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION"):a.compatibilityData.currentCompatibilityStatus.compatibleVersion;break;case
i.STATE.INCOMPATIBLE:case
i.STATE.MISSING_COMPATIBILITY_TAG:s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_NO_COMPATIBILITY_INFORMATION");break;default:s=Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSION_WARNING_UNKNOWN")}var
n=a.$element.data("extensionId");if(t.getElementById("available-version-"+n).innerHTML=s,a.$element.closest("tr").appendTo(e("#compatibilitytype"+a.compatibilityData.resultGroup+"
tbody")),e("#compatibilitytype"+a.compatibilityData.resultGroup).css("display","block"),t.getElementById("compatibilitytype0").style.display="block",3===a.compatibilityData.resultGroup)for(var
o,l=i.nonCoreCriticalPlugins.length-1;l>=0;l--)(o=i.nonCoreCriticalPlugins[l]).package_id!=n&&o.extension_id!=n||(e("#plg_"+o.extension_id).remove(),i.nonCoreCriticalPlugins.splice(l,1));if(0==e("#preupdatecheckheadings
table
td").length&&e("#preupdatecheckheadings").css("display","none"),0==e("#compatibilitytype0
tbody td").length){for(var r in
e("#compatibilitytype0").css("display","none"),i.nonCoreCriticalPlugins){var
d=e("td[data-extension-id="+i.nonCoreCriticalPlugins[r].extension_id+"]");if(d.length||(d=e("td[data-extension-id="+i.nonCoreCriticalPlugins[r].package_id+"]")),d.length){var
p=d.closest("tr");p.addClass("error");var
c=p.find("td:first-child");c.html(c.html()+'<span
class="label label-warning " ><span
class="icon-warning"></span>'+Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN")+'</span><span
class="label label-info hasPopover" 
title="'+Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN")+'"
data-content="'+Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_DESC")+'"><span
class="icon-help"></span>'+Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_HELP")+"</span>");var
_=c.find(".hasPopover");_.css("cursor","pointer"),_.popover({placement:"top",trigger:"focus
click"})}}0==i.nonCoreCriticalPlugins.length?(e("#preupdateCheckWarning,
#preupdateconfirmation, #preupdatecheckbox,
#preupdatecheckheadings").css("display","none"),e("#preupdatecheckbox
#noncoreplugins").prop("checked",!0),e("button.submitupdate").removeClass("disabled"),e("button.submitupdate").prop("disabled",!1)):(e("#preupdateCheckWarning").addClass("hidden"),e("#preupdateCheckCompleteProblems").removeClass("hidden"),e("#preupdateconfirmation
.preupdateconfirmation_label
h3").html(Joomla.JText._("COM_JOOMLAUPDATE_VIEW_DEFAULT_POTENTIALLY_DANGEROUS_PLUGIN_LIST")),e("#preupdateconfirmation
.preupdateconfirmation_label").removeClass("label-warning").addClass("label-important"))}},t.addEventListener("DOMContentLoaded",function(){e(i.run)})}(jQuery,document,window);
js/encryption.js000064400000046064151171315530007724 0ustar00/* - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -  */
/*  AES implementation in JavaScript (c) Chris Veness 2005-2010            
                      */
/*   - see http://csrc.nist.gov/publications/PubsFIPS.html#197             
                      */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */

var Aes = {};  // Aes namespace

/**
 * AES Cipher function: encrypt 'input' state with Rijndael
algorithm
 *   applies Nr rounds (10/12/14) using key schedule w for 'add round
key' stage
 *
 * @param {Number[]} input 16-byte (128-bit) input state array
 * @param {Number[][]} w   Key schedule as 2D byte-array (Nr+1 x Nb bytes)
 * @returns {Number[]}     Encrypted output state array
 */
Aes.Cipher = function(input, w) {    // main Cipher function [§5.1]
  var Nb = 4;               // block size (in words): no of columns in
state (fixed at 4 for AES)
  var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit
keys

  var state = [[],[],[],[]];  // initialise 4xNb byte-array
'state' with input [§3.4]
  for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];

  state = Aes.AddRoundKey(state, w, 0, Nb);

  for (var round=1; round<Nr; round++) {
    state = Aes.SubBytes(state, Nb);
    state = Aes.ShiftRows(state, Nb);
    state = Aes.MixColumns(state, Nb);
    state = Aes.AddRoundKey(state, w, round, Nb);
  }

  state = Aes.SubBytes(state, Nb);
  state = Aes.ShiftRows(state, Nb);
  state = Aes.AddRoundKey(state, w, Nr, Nb);

  var output = new Array(4*Nb);  // convert state to 1-d array before
returning [§3.4]
  for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];
  return output;
}

/**
 * Perform Key Expansion to generate a Key Schedule
 *
 * @param {Number[]} key Key as 16/24/32-byte array
 * @returns {Number[][]} Expanded key schedule as 2D byte-array (Nr+1 x Nb
bytes)
 */
Aes.KeyExpansion = function(key) {  // generate Key Schedule (byte-array
Nr+1 x Nb) from Key [§5.2]
  var Nb = 4;            // block size (in words): no of columns in state
(fixed at 4 for AES)
  var Nk = key.length/4  // key length (in words): 4/6/8 for
128/192/256-bit keys
  var Nr = Nk + 6;       // no of rounds: 10/12/14 for 128/192/256-bit keys

  var w = new Array(Nb*(Nr+1));
  var temp = new Array(4);

  for (var i=0; i<Nk; i++) {
    var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];
    w[i] = r;
  }

  for (var i=Nk; i<(Nb*(Nr+1)); i++) {
    w[i] = new Array(4);
    for (var t=0; t<4; t++) temp[t] = w[i-1][t];
    if (i % Nk == 0) {
      temp = Aes.SubWord(Aes.RotWord(temp));
      for (var t=0; t<4; t++) temp[t] ^= Aes.Rcon[i/Nk][t];
    } else if (Nk > 6 && i%Nk == 4) {
      temp = Aes.SubWord(temp);
    }
    for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
  }

  return w;
}

/*
 * ---- remaining routines are private, not called externally ----
 */
 
Aes.SubBytes = function(s, Nb) {    // apply SBox to state S [§5.1.1]
  for (var r=0; r<4; r++) {
    for (var c=0; c<Nb; c++) s[r][c] = Aes.Sbox[s[r][c]];
  }
  return s;
}

Aes.ShiftRows = function(s, Nb) {    // shift row r of state S left by r
bytes [§5.1.2]
  var t = new Array(4);
  for (var r=1; r<4; r++) {
    for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb];  // shift into temp
copy
    for (var c=0; c<4; c++) s[r][c] = t[c];         // and copy back
  }          // note that this will work for Nb=4,5,6, but not 7,8 (always
4 for AES):
  return s;  // see
asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf
}

Aes.MixColumns = function(s, Nb) {   // combine bytes of each col of state
S [§5.1.3]
  for (var c=0; c<4; c++) {
    var a = new Array(4);  // 'a' is a copy of the current column
from 's'
    var b = new Array(4);  // 'b' is a•{02} in GF(2^8)
    for (var i=0; i<4; i++) {
      a[i] = s[i][c];
      b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b :
s[i][c]<<1;
    }
    // a[n] ^ b[n] is a•{03} in GF(2^8)
    s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // 2*a0 + 3*a1 + a2 + a3
    s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 * 2*a1 + 3*a2 + a3
    s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + 2*a2 + 3*a3
    s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // 3*a0 + a1 + a2 + 2*a3
  }
  return s;
}

Aes.AddRoundKey = function(state, w, rnd, Nb) {  // xor Round Key into
state S [§5.1.4]
  for (var r=0; r<4; r++) {
    for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];
  }
  return state;
}

Aes.SubWord = function(w) {    // apply SBox to 4-byte word w
  for (var i=0; i<4; i++) w[i] = Aes.Sbox[w[i]];
  return w;
}

Aes.RotWord = function(w) {    // rotate 4-byte word w left by one byte
  var tmp = w[0];
  for (var i=0; i<3; i++) w[i] = w[i+1];
  w[3] = tmp;
  return w;
}

// Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes
and KeyExpansion [§5.1.1]
Aes.Sbox = 
[0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
            
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
            
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
            
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
            
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
            
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
            
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
            
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
            
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
            
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
            
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
            
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
            
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
            
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
            
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
            
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];

// Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in
GF(2^8)] [§5.2]
Aes.Rcon = [ [0x00, 0x00, 0x00, 0x00],
             [0x01, 0x00, 0x00, 0x00],
             [0x02, 0x00, 0x00, 0x00],
             [0x04, 0x00, 0x00, 0x00],
             [0x08, 0x00, 0x00, 0x00],
             [0x10, 0x00, 0x00, 0x00],
             [0x20, 0x00, 0x00, 0x00],
             [0x40, 0x00, 0x00, 0x00],
             [0x80, 0x00, 0x00, 0x00],
             [0x1b, 0x00, 0x00, 0x00],
             [0x36, 0x00, 0x00, 0x00] ]; 


/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */
/*  AES Counter-mode implementation in JavaScript (c) Chris Veness
2005-2010                      */
/*   - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
                      */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */

var AesCtr = {};  // AesCtr namespace

/** 
 * Encrypt a text using AES encryption in Counter mode of operation
 *
 * Unicode multi-byte character safe
 *
 * @param {String} plaintext Source text to be encrypted
 * @param {String} password  The password to use to generate a key
 * @param {Number} nBits     Number of bits to be used in the key (128,
192, or 256)
 * @returns {string}         Encrypted text
 */
AesCtr.encrypt = function(plaintext, password, nBits) {
  var blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4)
for AES
  if (!(nBits==128 || nBits==192 || nBits==256)) return '';  //
standard allows 128/192/256 bit keys
  plaintext = Utf8.encode(plaintext);
  password = Utf8.encode(password);
  //var t = new Date();  // timer
        
  // use AES itself to encrypt password to get cipher key (using plain
password as source for key 
  // expansion) - gives us well encrypted key
  var nBytes = nBits/8;  // no bytes in key
  var pwBytes = new Array(nBytes);
  for (var i=0; i<nBytes; i++) {
    pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 :
password.charCodeAt(i);
  }
  var key = Aes.Cipher(pwBytes, Aes.KeyExpansion(pwBytes));  // gives us
16-byte key
  key = key.concat(key.slice(0, nBytes-16));  // expand key to 16/24/32
bytes long

  // initialise counter block (NIST SP800-38A §B.2): millisecond
time-stamp for nonce in 1st 8 bytes,
  // block counter in 2nd 8 bytes
  var counterBlock = new Array(blockSize);
  var nonce = (new Date()).getTime();  // timestamp: milliseconds since
1-Jan-1970
  var nonceSec = Math.floor(nonce/1000);
  var nonceMs = nonce%1000;
  // encode nonce with seconds in 1st 4 bytes, and (repeated) ms part
filling 2nd 4 bytes
  for (var i=0; i<4; i++) counterBlock[i] = (nonceSec >>> i*8)
& 0xff;
  for (var i=0; i<4; i++) counterBlock[i+4] = nonceMs & 0xff; 
  // and convert it to a string to go on the front of the ciphertext
  var ctrTxt = '';
  for (var i=0; i<8; i++) ctrTxt +=
String.fromCharCode(counterBlock[i]);

  // generate key schedule - an expansion of the key into distinct Key
Rounds for each round
  var keySchedule = Aes.KeyExpansion(key);
  
  var blockCount = Math.ceil(plaintext.length/blockSize);
  var ciphertxt = new Array(blockCount);  // ciphertext as array of strings
  
  for (var b=0; b<blockCount; b++) {
    // set counter (block #) in last 8 bytes of counter block (leaving
nonce in 1st 8 bytes)
    // done in two stages for 32-bit ops: using two words allows us to go
past 2^32 blocks (68GB)
    for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8)
& 0xff;
    for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000
>>> c*8)

    var cipherCntr = Aes.Cipher(counterBlock, keySchedule);  // -- encrypt
counter block --
    
    // block size is reduced on final block
    var blockLength = b<blockCount-1 ? blockSize :
(plaintext.length-1)%blockSize+1;
    var cipherChar = new Array(blockLength);
    
    for (var i=0; i<blockLength; i++) {  // -- xor plaintext with
ciphered counter char-by-char --
      cipherChar[i] = cipherCntr[i] ^ plaintext.charCodeAt(b*blockSize+i);
      cipherChar[i] = String.fromCharCode(cipherChar[i]);
    }
    ciphertxt[b] = cipherChar.join(''); 
  }

  // Array.join is more efficient than repeated string concatenation in IE
  var ciphertext = ctrTxt + ciphertxt.join('');
  ciphertext = Base64.encode(ciphertext);  // encode in base64
  
  //alert((new Date()) - t);
  return ciphertext;
}

/** 
 * Decrypt a text encrypted by AES in counter mode of operation
 *
 * @param {String} ciphertext Source text to be encrypted
 * @param {String} password   The password to use to generate a key
 * @param {Number} nBits      Number of bits to be used in the key (128,
192, or 256)
 * @returns {String}          Decrypted text
 */
AesCtr.decrypt = function(ciphertext, password, nBits) {
  var blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4)
for AES
  if (!(nBits==128 || nBits==192 || nBits==256)) return '';  //
standard allows 128/192/256 bit keys
  ciphertext = Base64.decode(ciphertext);
  password = Utf8.encode(password);
  //var t = new Date();  // timer
  
  // use AES to encrypt password (mirroring encrypt routine)
  var nBytes = nBits/8;  // no bytes in key
  var pwBytes = new Array(nBytes);
  for (var i=0; i<nBytes; i++) {
    pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 :
password.charCodeAt(i);
  }
  var key = Aes.Cipher(pwBytes, Aes.KeyExpansion(pwBytes));
  key = key.concat(key.slice(0, nBytes-16));  // expand key to 16/24/32
bytes long

  // recover nonce from 1st 8 bytes of ciphertext
  var counterBlock = new Array(8);
  ctrTxt = ciphertext.slice(0, 8);
  for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);
  
  // generate key schedule
  var keySchedule = Aes.KeyExpansion(key);

  // separate ciphertext into blocks (skipping past initial 8 bytes)
  var nBlocks = Math.ceil((ciphertext.length-8) / blockSize);
  var ct = new Array(nBlocks);
  for (var b=0; b<nBlocks; b++) ct[b] = ciphertext.slice(8+b*blockSize,
8+b*blockSize+blockSize);
  ciphertext = ct;  // ciphertext is now array of block-length strings

  // plaintext will get generated block-by-block into array of block-length
strings
  var plaintxt = new Array(ciphertext.length);

  for (var b=0; b<nBlocks; b++) {
    // set counter (block #) in last 8 bytes of counter block (leaving
nonce in 1st 8 bytes)
    for (var c=0; c<4; c++) counterBlock[15-c] = ((b) >>> c*8)
& 0xff;
    for (var c=0; c<4; c++) counterBlock[15-c-4] =
(((b+1)/0x100000000-1) >>> c*8) & 0xff;

    var cipherCntr = Aes.Cipher(counterBlock, keySchedule);  // encrypt
counter block

    var plaintxtByte = new Array(ciphertext[b].length);
    for (var i=0; i<ciphertext[b].length; i++) {
      // -- xor plaintxt with ciphered counter byte-by-byte --
      plaintxtByte[i] = cipherCntr[i] ^ ciphertext[b].charCodeAt(i);
      plaintxtByte[i] = String.fromCharCode(plaintxtByte[i]);
    }
    plaintxt[b] = plaintxtByte.join('');
  }

  // join array of blocks into single plaintext string
  var plaintext = plaintxt.join('');
  plaintext = Utf8.decode(plaintext);  // decode from UTF8 back to Unicode
multi-byte chars
  
  //alert((new Date()) - t);
  return plaintext;
}


/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */
/*  Base64 class: Base 64 encoding / decoding (c) Chris Veness 2002-2010   
                      */
/*    note: depends on Utf8 class                                          
                      */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */

var Base64 = {};  // Base64 namespace

Base64.code =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

/**
 * Encode string into Base64, as defined by RFC 4648
[http://tools.ietf.org/html/rfc4648]
 * (instance method extending String object). As per RFC 4648, no newlines
are added.
 *
 * @param {String} str The string to be encoded as base-64
 * @param {Boolean} [utf8encode=false] Flag to indicate whether str is
Unicode string to be encoded 
 *   to UTF8 before conversion to base64; otherwise string is assumed to be
8-bit characters
 * @returns {String} Base64-encoded string
 */ 
Base64.encode = function(str, utf8encode) {  //
http://tools.ietf.org/html/rfc4648
  utf8encode =  (typeof utf8encode == 'undefined') ? false :
utf8encode;
  var o1, o2, o3, bits, h1, h2, h3, h4, e=[], pad = '', c, plain,
coded;
  var b64 = Base64.code;
   
  plain = utf8encode ? str.encodeUTF8() : str;
  
  c = plain.length % 3;  // pad string to length of multiple of 3
  if (c > 0) { while (c++ < 3) { pad += '='; plain +=
'\0'; } }
  // note: doing padding here saves us doing special-case packing for
trailing 1 or 2 chars
   
  for (c=0; c<plain.length; c+=3) {  // pack three octets into four
hexets
    o1 = plain.charCodeAt(c);
    o2 = plain.charCodeAt(c+1);
    o3 = plain.charCodeAt(c+2);
      
    bits = o1<<16 | o2<<8 | o3;
      
    h1 = bits>>18 & 0x3f;
    h2 = bits>>12 & 0x3f;
    h3 = bits>>6 & 0x3f;
    h4 = bits & 0x3f;

    // use hextets to index into code string
    e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) +
b64.charAt(h4);
  }
  coded = e.join('');  // join() is far faster than repeated
string concatenation in IE
  
  // replace 'A's from padded nulls with '='s
  coded = coded.slice(0, coded.length-pad.length) + pad;
   
  return coded;
}

/**
 * Decode string from Base64, as defined by RFC 4648
[http://tools.ietf.org/html/rfc4648]
 * (instance method extending String object). As per RFC 4648, newlines are
not catered for.
 *
 * @param {String} str The string to be decoded from base-64
 * @param {Boolean} [utf8decode=false] Flag to indicate whether str is
Unicode string to be decoded 
 *   from UTF8 after conversion from base64
 * @returns {String} decoded string
 */ 
Base64.decode = function(str, utf8decode) {
  utf8decode =  (typeof utf8decode == 'undefined') ? false :
utf8decode;
  var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded;
  var b64 = Base64.code;

  coded = utf8decode ? str.decodeUTF8() : str;
  
  
  for (var c=0; c<coded.length; c+=4) {  // unpack four hexets into
three octets
    h1 = b64.indexOf(coded.charAt(c));
    h2 = b64.indexOf(coded.charAt(c+1));
    h3 = b64.indexOf(coded.charAt(c+2));
    h4 = b64.indexOf(coded.charAt(c+3));
      
    bits = h1<<18 | h2<<12 | h3<<6 | h4;
      
    o1 = bits>>>16 & 0xff;
    o2 = bits>>>8 & 0xff;
    o3 = bits & 0xff;
    
    d[c/4] = String.fromCharCode(o1, o2, o3);
    // check for padding
    if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2);
    if (h3 == 0x40) d[c/4] = String.fromCharCode(o1);
  }
  plain = d.join('');  // join() is far faster than repeated
string concatenation in IE
   
  return utf8decode ? plain.decodeUTF8() : plain; 
}


/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */
/*  Utf8 class: encode / decode between multi-byte Unicode characters and
UTF-8 multiple          */
/*              single-byte character encoding (c) Chris Veness 2002-2010  
                      */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -  */

var Utf8 = {};  // Utf8 namespace

/**
 * Encode multi-byte Unicode string into utf-8 multiple single-byte
characters 
 * (BMP / basic multilingual plane only)
 *
 * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF
in 3 chars
 *
 * @param {String} strUni Unicode string to be encoded as UTF-8
 * @returns {String} encoded string
 */
Utf8.encode = function(strUni) {
  // use regular expressions & String.replace callback function for
better efficiency 
  // than procedural approaches
  var strUtf = strUni.replace(
      /[\u0080-\u07ff]/g,  // U+0080 - U+07FF => 2 bytes 110yyyyy,
10zzzzzz
      function(c) { 
        var cc = c.charCodeAt(0);
        return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f);
}
    );
  strUtf = strUtf.replace(
      /[\u0800-\uffff]/g,  // U+0800 - U+FFFF => 3 bytes 1110xxxx,
10yyyyyy, 10zzzzzz
      function(c) { 
        var cc = c.charCodeAt(0); 
        return String.fromCharCode(0xe0 | cc>>12, 0x80 |
cc>>6&0x3F, 0x80 | cc&0x3f); }
    );
  return strUtf;
}

/**
 * Decode utf-8 encoded string back into multi-byte Unicode characters
 *
 * @param {String} strUtf UTF-8 string to be decoded back to Unicode
 * @returns {String} decoded string
 */
Utf8.decode = function(strUtf) {
  var strUni = strUtf.replace(
      /[\u00c0-\u00df][\u0080-\u00bf]/g,                 // 2-byte chars
      function(c) {  // (note parentheses for precence)
        var cc = (c.charCodeAt(0)&0x1f)<<6 |
c.charCodeAt(1)&0x3f;
        return String.fromCharCode(cc); }
    );
  strUni = strUni.replace(
      /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,  // 3-byte chars
      function(c) {  // (note parentheses for precence)
        var cc = ((c.charCodeAt(0)&0x0f)<<12) |
((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); 
        return String.fromCharCode(cc); }
    );
  return strUni;
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - 
*/js/encryption.min.js000064400000013464151171315530010504 0ustar00var
Aes={};Aes.Cipher=function(r,e){for(var
o=4,n=e.length/o-1,a=[[],[],[],[]],t=0;4*o>t;t++)a[t%4][Math.floor(t/4)]=r[t];a=Aes.AddRoundKey(a,e,0,o);for(var
f=1;n>f;f++)a=Aes.SubBytes(a,o),a=Aes.ShiftRows(a,o),a=Aes.MixColumns(a,o),a=Aes.AddRoundKey(a,e,f,o);a=Aes.SubBytes(a,o),a=Aes.ShiftRows(a,o),a=Aes.AddRoundKey(a,e,n,o);for(var
c=new Array(4*o),t=0;4*o>t;t++)c[t]=a[t%4][Math.floor(t/4)];return
c},Aes.KeyExpansion=function(r){for(var e=4,o=r.length/4,n=o+6,a=new
Array(e*(n+1)),t=new Array(4),f=0;o>f;f++){var
c=[r[4*f],r[4*f+1],r[4*f+2],r[4*f+3]];a[f]=c}for(var
f=o;e*(n+1)>f;f++){a[f]=new Array(4);for(var
A=0;4>A;A++)t[A]=a[f-1][A];if(f%o==0){t=Aes.SubWord(Aes.RotWord(t));for(var
A=0;4>A;A++)t[A]^=Aes.Rcon[f/o][A]}else
o>6&&f%o==4&&(t=Aes.SubWord(t));for(var
A=0;4>A;A++)a[f][A]=a[f-o][A]^t[A]}return
a},Aes.SubBytes=function(r,e){for(var o=0;4>o;o++)for(var
n=0;e>n;n++)r[o][n]=Aes.Sbox[r[o][n]];return
r},Aes.ShiftRows=function(r,e){for(var o=new
Array(4),n=1;4>n;n++){for(var a=0;4>a;a++)o[a]=r[n][(a+n)%e];for(var
a=0;4>a;a++)r[n][a]=o[a]}return r},Aes.MixColumns=function(r,e){for(var
o=0;4>o;o++){for(var n=new Array(4),a=new
Array(4),t=0;4>t;t++)n[t]=r[t][o],a[t]=128&r[t][o]?r[t][o]<<1^283:r[t][o]<<1;r[0][o]=a[0]^n[1]^a[1]^n[2]^n[3],r[1][o]=n[0]^a[1]^n[2]^a[2]^n[3],r[2][o]=n[0]^n[1]^a[2]^n[3]^a[3],r[3][o]=n[0]^a[0]^n[1]^n[2]^a[3]}return
r},Aes.AddRoundKey=function(r,e,o,n){for(var a=0;4>a;a++)for(var
t=0;n>t;t++)r[a][t]^=e[4*o+t][a];return
r},Aes.SubWord=function(r){for(var
e=0;4>e;e++)r[e]=Aes.Sbox[r[e]];return
r},Aes.RotWord=function(r){for(var e=r[0],o=0;3>o;o++)r[o]=r[o+1];return
r[3]=e,r},Aes.Sbox=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],Aes.Rcon=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];var
AesCtr={};AesCtr.encrypt=function(r,e,o){var
n=16;if(128!=o&&192!=o&&256!=o)return"";r=Utf8.encode(r),e=Utf8.encode(e);for(var
a=o/8,t=new
Array(a),f=0;a>f;f++)t[f]=isNaN(e.charCodeAt(f))?0:e.charCodeAt(f);var
c=Aes.Cipher(t,Aes.KeyExpansion(t));c=c.concat(c.slice(0,a-16));for(var
A=new Array(n),d=(new
Date).getTime(),i=Math.floor(d/1e3),u=d%1e3,f=0;4>f;f++)A[f]=i>>>8*f&255;for(var
f=0;4>f;f++)A[f+4]=255&u;for(var
s="",f=0;8>f;f++)s+=String.fromCharCode(A[f]);for(var
h=Aes.KeyExpansion(c),v=Math.ceil(r.length/n),C=new
Array(v),y=0;v>y;y++){for(var
l=0;4>l;l++)A[15-l]=y>>>8*l&255;for(var
l=0;4>l;l++)A[15-l-4]=y/4294967296>>>8*l;for(var
g=Aes.Cipher(A,h),S=v-1>y?n:(r.length-1)%n+1,w=new
Array(S),f=0;S>f;f++)w[f]=g[f]^r.charCodeAt(y*n+f),w[f]=String.fromCharCode(w[f]);C[y]=w.join("")}var
p=s+C.join("");return
p=Base64.encode(p)},AesCtr.decrypt=function(r,e,o){var
n=16;if(128!=o&&192!=o&&256!=o)return"";r=Base64.decode(r),e=Utf8.encode(e);for(var
a=o/8,t=new
Array(a),f=0;a>f;f++)t[f]=isNaN(e.charCodeAt(f))?0:e.charCodeAt(f);var
c=Aes.Cipher(t,Aes.KeyExpansion(t));c=c.concat(c.slice(0,a-16));var A=new
Array(8);ctrTxt=r.slice(0,8);for(var
f=0;8>f;f++)A[f]=ctrTxt.charCodeAt(f);for(var
d=Aes.KeyExpansion(c),i=Math.ceil((r.length-8)/n),u=new
Array(i),s=0;i>s;s++)u[s]=r.slice(8+s*n,8+s*n+n);r=u;for(var h=new
Array(r.length),s=0;i>s;s++){for(var
v=0;4>v;v++)A[15-v]=s>>>8*v&255;for(var
v=0;4>v;v++)A[15-v-4]=(s+1)/4294967296-1>>>8*v&255;for(var
C=Aes.Cipher(A,d),y=new
Array(r[s].length),f=0;f<r[s].length;f++)y[f]=C[f]^r[s].charCodeAt(f),y[f]=String.fromCharCode(y[f]);h[s]=y.join("")}var
l=h.join("");return l=Utf8.decode(l)};var
Base64={};Base64.code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",Base64.encode=function(r,e){e="undefined"==typeof
e?!1:e;var
o,n,a,t,f,c,A,d,i,u,s,h=[],v="",C=Base64.code;if(u=e?r.encodeUTF8():r,i=u.length%3,i>0)for(;i++<3;)v+="=",u+="\x00";for(i=0;i<u.length;i+=3)o=u.charCodeAt(i),n=u.charCodeAt(i+1),a=u.charCodeAt(i+2),t=o<<16|n<<8|a,f=t>>18&63,c=t>>12&63,A=t>>6&63,d=63&t,h[i/3]=C.charAt(f)+C.charAt(c)+C.charAt(A)+C.charAt(d);return
s=h.join(""),s=s.slice(0,s.length-v.length)+v},Base64.decode=function(r,e){e="undefined"==typeof
e?!1:e;var
o,n,a,t,f,c,A,d,i,u,s=[],h=Base64.code;u=e?r.decodeUTF8():r;for(var
v=0;v<u.length;v+=4)t=h.indexOf(u.charAt(v)),f=h.indexOf(u.charAt(v+1)),c=h.indexOf(u.charAt(v+2)),A=h.indexOf(u.charAt(v+3)),d=t<<18|f<<12|c<<6|A,o=d>>>16&255,n=d>>>8&255,a=255&d,s[v/4]=String.fromCharCode(o,n,a),64==A&&(s[v/4]=String.fromCharCode(o,n)),64==c&&(s[v/4]=String.fromCharCode(o));return
i=s.join(""),e?i.decodeUTF8():i};var
Utf8={};Utf8.encode=function(r){var
e=r.replace(/[\u0080-\u07ff]/g,function(r){var e=r.charCodeAt(0);return
String.fromCharCode(192|e>>6,128|63&e)});return
e=e.replace(/[\u0800-\uffff]/g,function(r){var e=r.charCodeAt(0);return
String.fromCharCode(224|e>>12,128|e>>6&63,128|63&e)})},Utf8.decode=function(r){var
e=r.replace(/[\u00c0-\u00df][\u0080-\u00bf]/g,function(r){var
e=(31&r.charCodeAt(0))<<6|63&r.charCodeAt(1);return
String.fromCharCode(e)});return
e=e.replace(/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,function(r){var
e=(15&r.charCodeAt(0))<<12|(63&r.charCodeAt(1))<<6|63&r.charCodeAt(2);return
String.fromCharCode(e)})};
js/json2.js000064400000006465151171315530006566 0ustar00/*
 *  json2.js
 *  2014-02-04
 *  Public Domain.
 *  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 *  See http://www.JSON.org/js.html
 */
if(typeof JSON!=='object'){JSON={}}(function(){'use
strict';function f(n){return n<10?'0'+n:n}if(typeof
Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(){return
isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return
this.valueOf()}}var e,escapable,gap,indent,meta,rep;function
quote(b){escapable.lastIndex=0;return
escapable.test(b)?'"'+b.replace(escapable,function(a){var
c=meta[a];return typeof
c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+b+'"'}function
str(a,b){var
i,k,v,length,mind=gap,partial,value=b[a];if(value&&typeof
value==='object'&&typeof
value.toJSON==='function'){value=value.toJSON(a)}if(typeof
rep==='function'){value=rep.call(b,a,value)}switch(typeof
value){case'string':return
quote(value);case'number':return
isFinite(value)?String(value):'null';case'boolean':case'null':return
String(value);case'object':if(!value){return'null'}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object
Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null'}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return
v}if(rep&&typeof
rep==='object'){length=rep.length;for(i=0;i<length;i+=1){if(typeof
rep[i]==='string'){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?':
':':')+v)}}}}else{for(k in
value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?':
':':')+v)}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return
v}}if(typeof
JSON.stringify!=='function'){escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};JSON.stringify=function(a,b,c){var
i;gap='';indent='';if(typeof
c==='number'){for(i=0;i<c;i+=1){indent+=' '}}else
if(typeof c==='string'){indent=c}rep=b;if(b&&typeof
b!=='function'&&(typeof b!=='object'||typeof
b.length!=='number')){throw new
Error('JSON.stringify');}return
str('',{'':a})}}if(typeof
JSON.parse!=='function'){e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;JSON.parse=function(c,d){var
j;function walk(a,b){var k,v,value=a[b];if(value&&typeof
value==='object'){for(k in
value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete
value[k]}}}}return
d.call(a,b,value)}c=String(c);e.lastIndex=0;if(e.test(c)){c=c.replace(e,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+c+')');return
typeof d==='function'?walk({'':j},''):j}throw
new SyntaxError('JSON.parse');}}}());
js/json2.min.js000064400000005562151171315530007345
0ustar00"object"!=typeof
JSON&&(JSON={}),function(){"use strict";function
f(t){return 10>t?"0"+t:t}function quote(t){return
escapable.lastIndex=0,escapable.test(t)?'"'+t.replace(escapable,function(t){var
e=meta[t];return"string"==typeof
e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function
str(t,e){var
n,r,o,f,u,p=gap,a=e[t];switch(a&&"object"==typeof
a&&"function"==typeof
a.toJSON&&(a=a.toJSON(t)),"function"==typeof
rep&&(a=rep.call(e,t,a)),typeof a){case"string":return
quote(a);case"number":return
isFinite(a)?String(a):"null";case"boolean":case"null":return
String(a);case"object":if(!a)return"null";if(gap+=indent,u=[],"[object
Array]"===Object.prototype.toString.apply(a)){for(f=a.length,n=0;f>n;n+=1)u[n]=str(n,a)||"null";return
o=0===u.length?"[]":gap?"[\n"+gap+u.join(",\n"+gap)+"\n"+p+"]":"["+u.join(",")+"]",gap=p,o}if(rep&&"object"==typeof
rep)for(f=rep.length,n=0;f>n;n+=1)"string"==typeof
rep[n]&&(r=rep[n],o=str(r,a),o&&u.push(quote(r)+(gap?":
":":")+o));else for(r in
a)Object.prototype.hasOwnProperty.call(a,r)&&(o=str(r,a),o&&u.push(quote(r)+(gap?":
":":")+o));return
o=0===u.length?"{}":gap?"{\n"+gap+u.join(",\n"+gap)+"\n"+p+"}":"{"+u.join(",")+"}",gap=p,o}}"function"!=typeof
Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return
isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return
this.valueOf()});var
e,escapable,gap,indent,meta,rep;"function"!=typeof
JSON.stringify&&(escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,meta={"\b":"\\b","	":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(t,e,n){var
r;if(gap="",indent="","number"==typeof
n)for(r=0;n>r;r+=1)indent+=" ";else"string"==typeof
n&&(indent=n);if(rep=e,e&&"function"!=typeof
e&&("object"!=typeof e||"number"!=typeof
e.length))throw new Error("JSON.stringify");return
str("",{"":t})}),"function"!=typeof
JSON.parse&&(e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(c,d){function
walk(t,e){var n,r,o=t[e];if(o&&"object"==typeof o)for(n
in o)Object.prototype.hasOwnProperty.call(o,n)&&(r=walk(o,n),void
0!==r?o[n]=r:delete o[n]);return d.call(t,e,o)}var
j;if(c=String(c),e.lastIndex=0,e.test(c)&&(c=c.replace(e,function(t){return"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return
j=eval("("+c+")"),"function"==typeof
d?walk({"":j},""):j;throw new
SyntaxError("JSON.parse")})}();
js/update.js000064400000020234151171315530007003 0ustar00/**
 *  @package    AkeebaCMSUpdate
 *  @copyright  Copyright (c)2010-2014 Nicholas K. Dionysopoulos
 *  @license    GNU General Public License version 3, or later
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see
<https://www.gnu.org/licenses/>.
 */

var stat_total = 0;
var stat_files = 0;
var stat_inbytes = 0;
var stat_outbytes = 0;

/**
 * An extremely simple error handler, dumping error messages to screen
 *
 * @param error The error message string
 */
function error_callback(error)
{
	alert("ERROR:\n"+error);
}

/**
 * Performs an encrypted AJAX request and returns the parsed JSON output.
 * The window.ajax_url is used as the AJAX proxy URL.
 * If there is no errorCallback, the window.error_callback is used.
 *
 * @param   object    data             An object with the query data, e.g.
a serialized form
 * @param   function  successCallback  A function accepting a single object
parameter, called on success
 * @param   function  errorCallback    A function accepting a single string
parameter, called on failure
 */
doEncryptedAjax = function(data, successCallback, errorCallback)
{
	var json = JSON.stringify(data);
	if( joomlaupdate_password.length > 0 )
	{
		json = AesCtr.encrypt( json, joomlaupdate_password, 128 );
	}
	var post_data = {
		'json':     json
	};

	var structure =
	{
		type: "POST",
		url: joomlaupdate_ajax_url,
		cache: false,
		data: post_data,
		timeout: 600000,

		success: function(msg, responseXML)
		{
			// Initialize
			var junk = null;
			var message = "";

			// Get rid of junk before the data
			var valid_pos = msg.indexOf('###');

			if( valid_pos == -1 )
			{
				// Valid data not found in the response
				msg = 'Invalid AJAX data:\n' + msg;

				if (errorCallback == null)
				{
					if(error_callback != null)
					{
						error_callback(msg);
					}
				}
				else
				{
					errorCallback(msg);
				}

				return;
			}
			else if( valid_pos != 0 )
			{
				// Data is prefixed with junk
				junk = msg.substr(0, valid_pos);
				message = msg.substr(valid_pos);
			}
			else
			{
				message = msg;
			}

			message = message.substr(3); // Remove triple hash in the beginning

			// Get of rid of junk after the data
			var valid_pos = message.lastIndexOf('###');

			message = message.substr(0, valid_pos); // Remove triple hash in the end

			// Decrypt if required
			var data = null;
			if( joomlaupdate_password.length > 0 )
			{
				try
				{
					var data = JSON.parse(message);
				}
				catch(err)
				{
					message = AesCtr.decrypt(message, joomlaupdate_password, 128);
				}
			}

			try
			{
				if (empty(data))
				{
					data = JSON.parse(message);
				}
			}
			catch(err)
			{
				var msg = err.message + "\n<br/>\n<pre>\n" +
message + "\n</pre>";

				if (errorCallback == null)
				{
					if (error_callback != null)
					{
						error_callback(msg);
					}
				}
				else
				{
					errorCallback(msg);
				}

				return;
			}

			// Call the callback function
			successCallback(data);
		},

		error: function(req)
		{
			var message = 'AJAX Loading Error: ' + req.statusText;

			if(errorCallback == null)
			{
				if (error_callback != null)
				{
					error_callback(message);
				}
			}
			else
			{
				errorCallback(message);
			}
		}
	};

	jQuery.ajax( structure );
};

/**
 * Pings the update script (making sure its executable)
 */
pingExtract = function()
{
	// Reset variables
	this.stat_files = 0;
	this.stat_inbytes = 0;
	this.stat_outbytes = 0;

	// Do AJAX post
	var post = {task : 'ping'};

	this.doEncryptedAjax(post,
		function(data) {
			startExtract(data);
		});
};

startExtract = function()
{
	// Reset variables
	this.stat_files = 0;
	this.stat_inbytes = 0;
	this.stat_outbytes = 0;

	var post = { task : 'startRestore' };

	this.doEncryptedAjax(post, function(data){
		stepExtract(data);
	});
};

stepExtract = function(data)
{
	if(data.status == false)
	{
		// handle failure
		error_callback(data.message);

		return;
	}

	if( !empty(data.Warnings) )
	{
		// @todo Handle warnings
		/**
		 $.each(data.Warnings, function(i, item){
            $('#warnings').append(
                $(document.createElement('div'))
                    .html(item)
            );
            $('#warningsBox').show('fast');
        });
		 /**/
	}

	if (!empty(data.factory))
	{
		extract_factory = data.factory;
	}

	if(data.done)
	{
		finalizeUpdate();
	}
	else
	{
		// Add data to variables
		stat_inbytes += data.bytesIn;
		stat_percent = (stat_inbytes * 100) / joomlaupdate_totalsize;

		// Update GUI
		stat_outbytes += data.bytesOut;
		stat_files += data.files;

		if (stat_percent < 100)
		{
			jQuery('#progress-bar').css('width', stat_percent +
'%').attr('aria-valuenow', stat_percent);
		}
		else if (stat_percent > 100)
		{
			stat_percent = 100;
			jQuery('#progress-bar').css('width', stat_percent +
'%').attr('aria-valuenow', stat_percent);
		}
		else
		{
			jQuery('#progress-bar').removeClass('bar-success');
		}

		jQuery('#extpercent').text(stat_percent.toFixed(1) +
'%');
		jQuery('#extbytesin').text(stat_inbytes);
		jQuery('#extbytesout').text(stat_outbytes);
		jQuery('#extfiles').text(stat_files);

		// Do AJAX post
		post = {
			task: 'stepRestore',
			factory: data.factory
		};
		doEncryptedAjax(post, function(data){
			stepExtract(data);
		});
	}
};

finalizeUpdate = function ()
{
	// Do AJAX post
	var post = { task : 'finalizeRestore', factory: window.factory
};
	doEncryptedAjax(post, function(data){
		window.location = joomlaupdate_return_url;
	});
};


/**
 * Is a variable empty?
 *
 * Part of php.js
 *
 * @see  http://phpjs.org/
 *
 * @param   mixed  mixed_var  The variable
 *
 * @returns  boolean  True if empty
 */
function empty (mixed_var)
{
	var key;

	if (mixed_var === "" ||
		mixed_var === 0 ||
		mixed_var === "0" ||
		mixed_var === null ||
		mixed_var === false ||
		typeof mixed_var === 'undefined'
	){
		return true;
	}

	if (typeof mixed_var == 'object')
	{
		for (key in mixed_var)
		{
			return false;
		}

		return true;
	}

	return false;
}

/**
 * Is the variable an array?
 *
 * Part of php.js
 *
 * @see  http://phpjs.org/
 *
 * @param   mixed  mixed_var  The variable
 *
 * @returns  boolean  True if it is an array or an object
 */
function is_array (mixed_var)
{
	var key = '';
	var getFuncName = function (fn) {
		var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);

		if (!name) {
			return '(Anonymous)';
		}

		return name[1];
	};

	if (!mixed_var)
	{
		return false;
	}

	// BEGIN REDUNDANT
	this.php_js = this.php_js || {};
	this.php_js.ini = this.php_js.ini || {};
	// END REDUNDANT

	if (typeof mixed_var === 'object')
	{
		if (this.php_js.ini['phpjs.objectsAsArrays'] &&  //
Strict checking for being a JavaScript array (only check this way if call
ini_set('phpjs.objectsAsArrays', 0) to disallow objects as
arrays)
			(
			(this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase
&&
			this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase()
=== 'off') ||
			parseInt(this.php_js.ini['phpjs.objectsAsArrays'].local_value,
10) === 0)
		) {
			return mixed_var.hasOwnProperty('length') && // Not
non-enumerable because of being on parent class
			!mixed_var.propertyIsEnumerable('length') && // Since
is own property, if not enumerable, it must be a built-in function
			getFuncName(mixed_var.constructor) !== 'String'; // exclude
String()
		}

		if (mixed_var.hasOwnProperty)
		{
			for (key in mixed_var) {
				// Checks whether the object has the specified property
				// if not, we figure it's not an object in the sense of a
php-associative-array.
				if (false === mixed_var.hasOwnProperty(key)) {
					return false;
				}
			}
		}

		// Read discussion at:
http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_array/
		return true;
	}

	return false;
}
js/update.min.js000064400000005765151171315530007601 0ustar00var
stat_total=0,stat_files=0,stat_inbytes=0,stat_outbytes=0;function
error_callback(t){alert("ERROR:\n"+t)}function empty(t){var
r;if(""===t||0===t||"0"===t||null===t||!1===t||void
0===t)return!0;if("object"==typeof t){for(r in
t)return!1;return!0}return!1}function is_array(t){var
r,e,s="";if(!t)return!1;if(this.php_js=this.php_js||{},this.php_js.ini=this.php_js.ini||{},"object"==typeof
t){if(this.php_js.ini["phpjs.objectsAsArrays"]&&(this.php_js.ini["phpjs.objectsAsArrays"].local_value.toLowerCase&&"off"===this.php_js.ini["phpjs.objectsAsArrays"].local_value.toLowerCase()||0===parseInt(this.php_js.ini["phpjs.objectsAsArrays"].local_value,10)))return
t.hasOwnProperty("length")&&!t.propertyIsEnumerable("length")&&"String"!==(r=t.constructor,(e=/\W*function\s+([\w\$]+)\s*\(/.exec(r))?e[1]:"(Anonymous)");if(t.hasOwnProperty)for(s
in
t)if(!1===t.hasOwnProperty(s))return!1;return!0}return!1}doEncryptedAjax=function(t,r,e){var
s=JSON.stringify(t);joomlaupdate_password.length>0&&(s=AesCtr.encrypt(s,joomlaupdate_password,128));var
a={type:"POST",url:joomlaupdate_ajax_url,cache:!1,data:{json:s},timeout:6e5,success:function(t,s){var
a="";if(-1==(n=t.indexOf("###")))return t="Invalid
AJAX
data:\n"+t,void(null==e?null!=error_callback&&error_callback(t):e(t));0!=n?(t.substr(0,n),a=t.substr(n)):a=t;var
n=(a=a.substr(3)).lastIndexOf("###");a=a.substr(0,n);var
o=null;if(joomlaupdate_password.length>0)try{o=JSON.parse(a)}catch(t){a=AesCtr.decrypt(a,joomlaupdate_password,128)}try{empty(o)&&(o=JSON.parse(a))}catch(r){t=r.message+"\n<br/>\n<pre>\n"+a+"\n</pre>";return
void(null==e?null!=error_callback&&error_callback(t):e(t))}r(o)},error:function(t){var
r="AJAX Loading Error:
"+t.statusText;null==e?null!=error_callback&&error_callback(r):e(r)}};jQuery.ajax(a)},pingExtract=function(){this.stat_files=0,this.stat_inbytes=0,this.stat_outbytes=0;this.doEncryptedAjax({task:"ping"},function(t){startExtract(t)})},startExtract=function(){this.stat_files=0,this.stat_inbytes=0,this.stat_outbytes=0;this.doEncryptedAjax({task:"startRestore"},function(t){stepExtract(t)})},stepExtract=function(t){0!=t.status?(empty(t.Warnings),empty(t.factory)||(extract_factory=t.factory),t.done?finalizeUpdate():(stat_inbytes+=t.bytesIn,stat_percent=100*stat_inbytes/joomlaupdate_totalsize,stat_outbytes+=t.bytesOut,stat_files+=t.files,stat_percent<100?jQuery("#progress-bar").css("width",stat_percent+"%").attr("aria-valuenow",stat_percent):stat_percent>100?(stat_percent=100,jQuery("#progress-bar").css("width",stat_percent+"%").attr("aria-valuenow",stat_percent)):jQuery("#progress-bar").removeClass("bar-success"),jQuery("#extpercent").text(stat_percent.toFixed(1)+"%"),jQuery("#extbytesin").text(stat_inbytes),jQuery("#extbytesout").text(stat_outbytes),jQuery("#extfiles").text(stat_files),post={task:"stepRestore",factory:t.factory},doEncryptedAjax(post,function(t){stepExtract(t)}))):error_callback(t.message)},finalizeUpdate=function(){var
t={task:"finalizeRestore",factory:window.factory};doEncryptedAjax(t,function(t){window.location=joomlaupdate_return_url})};