diff --git a/packages/phocacommander/administrator/components/com_phocacommander/access.xml b/packages/phocacommander/administrator/components/com_phocacommander/access.xml new file mode 100644 index 00000000..eda71ce5 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/access.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + +
+
\ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/config.xml b/packages/phocacommander/administrator/components/com_phocacommander/config.xml new file mode 100644 index 00000000..f1776fe3 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/config.xml @@ -0,0 +1,197 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + +
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/controller.php b/packages/phocacommander/administrator/components/com_phocacommander/controller.php new file mode 100644 index 00000000..51107bb7 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/controller.php @@ -0,0 +1,43 @@ +input->get('option'); + +$l['cp'] = array('COM_PHOCACOMMANDER', ''); +$l['in'] = array('COM_PHOCACOMMANDER_INFO', 'phocacommanderinfo'); + +$view = JFactory::getApplication()->input->get('view'); +$layout = JFactory::getApplication()->input->get('layout'); + +if ($layout == 'edit') { +} else { + foreach ($l as $k => $v) { + + if ($v[1] == '') { + $link = 'index.php?option='.$option; + } else { + $link = 'index.php?option='.$option.'&view='; + } + + if ($view == $v[1]) { + JHtmlSidebar::addEntry(JText::_($v[0]), $link.$v[1], true ); + } else { + JHtmlSidebar::addEntry(JText::_($v[0]), $link.$v[1]); + } + } +} + +class PhocaCommanderCpController extends JControllerLegacy { + function display($cachable = false, $urlparams = array()) { + parent::display($cachable, $urlparams); + } +} +?> diff --git a/packages/phocacommander/administrator/components/com_phocacommander/controllers/index.html b/packages/phocacommander/administrator/components/com_phocacommander/controllers/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/controllers/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderedit.php b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderedit.php new file mode 100644 index 00000000..fe1f154a --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderedit.php @@ -0,0 +1,343 @@ +input->get('orderinga', '', 'string'); + $orderingb = $app->input->get('orderingb', '', 'string'); + $directiona = $app->input->get('directiona', '', 'string'); + $directionb = $app->input->get('directionb', '', 'string'); + $activepanel = $app->input->get('activepanel', '', 'string'); + $panel = $app->input->get('panel', '', 'string'); + $foldera = $app->input->get('foldera', '', 'string'); + $folderb = $app->input->get('folderb', '', 'string'); + + if(JRequest::checkToken()) { + $app->input->post->set('orderinga', $orderinga); + $app->input->post->set('orderingb', $orderingb); + $app->input->post->set('directiona', $directiona); + $app->input->post->set('directionb', $directionb); + $app->input->post->set('foldera', $foldera); + $app->input->post->set('folderb', $folderb); + $app->input->post->set('activepanel', $activepanel); + $app->input->post->set('panel', $panel); + + + $app->getUserStateFromRequest($context .'orderinga', 'orderinga', $orderinga, 'string'); + $app->getUserStateFromRequest($context .'orderingb', 'orderingb', $orderingb, 'string'); + $app->getUserStateFromRequest($context .'directiona', 'directiona', $directiona, 'string'); + $app->getUserStateFromRequest($context .'directionb', 'directionb', $directionb, 'string'); + $app->getUserStateFromRequest($context .'panel', 'panel', $panel, 'string'); + $app->getUserStateFromRequest($context .'activepanel', 'activepanel', $activepanel, 'string'); + $app->getUserStateFromRequest($context .'foldera', 'foldera', $foldera, 'string'); + $app->getUserStateFromRequest($context .'folderb', 'folderb', $folderb, 'string'); + } + + } + + protected function allowEdit($data = array(), $key = 'id') { + $user = JFactory::getUser(); + $allow = null; + $allow = $user->authorise('core.edit', 'com_phocacommander'); + + if ($allow === null) { + return parent::allowEdit($data, $key); + } else { + return $allow; + } + } + + public function cancel($key = null) + { + JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + $this->setRedirect(JRoute::_('index.php?option=com_phocacommander'.$this->getRedirectToListAppend(), false)); + + return true; + } + + public function edit($key = null, $urlVar = null) { + + $app = JFactory::getApplication(); + $context = "$this->option.edit.$this->context"; + $file = $app->input->get( 'filename', '', 'string' ); + $recordId = 1; + $key = $urlVar = 'id'; + + if (!$this->allowEdit(array($key => $recordId), $key)) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED')); + $this->setMessage($this->getError(), 'error'); + + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list + . $this->getRedirectToListAppend() . '&file='.$file, false + ) + ); + + return false; + } + + $this->holdEditId($context, $recordId); + $app->setUserState($context . '.data', null); + + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $urlVar) . '&file='.$file, false + ) + ); + + return true; + } + + public function download() { + + $app = JFactory::getApplication(); + $context = "$this->option.edit.$this->context"; + $file = $app->input->get( 'filename', '', 'string' ); + + + $file = base64_decode($file); + + $path = JPATH_ROOT; + + $pathFolder = JPath::clean($path . '/' .$file); + + $mimeType = ''; + if (JFile::exists($pathFolder)) { + + if (function_exists('mime_content_type')) { + $mimeType = mime_content_type($pathFolder); + + } else if(class_exists('finfo')){ + + $result = new finfo(); + if (is_resource($result) === true) { + $mimeType = $result->file($pathFolder, FILEINFO_MIME_TYPE); + } + } + + if ($mimeType == '') { + $ext = JFile::getExt($file); + $mimeType = PhocaCommanderHelper::getMimeType($ext); + } + + // Clean the output buffer + ob_end_clean(); + + // test for protocol and set the appropriate headers + jimport( 'joomla.environment.uri' ); + $_tmp_uri = JURI::getInstance( JURI::current() ); + $_tmp_protocol = $_tmp_uri->getScheme(); + if ($_tmp_protocol == "https") { + // SSL Support + header('Cache-Control: private, max-age=0, must-revalidate, no-store'); + } else { + header("Cache-Control: public, must-revalidate"); + header('Cache-Control: pre-check=0, post-check=0, max-age=0'); + header("Pragma: no-cache"); + header("Expires: 0"); + } /* end if protocol https */ + header("Content-Description: File Transfer"); + header("Expires: Sat, 30 Dec 1990 07:07:07 GMT"); + header("Accept-Ranges: bytes"); + + header("Content-Type: " . (string)$mimeType); + header('Content-Disposition: attachment; filename="'.basename($file).'"'); + header("Content-Transfer-Encoding: binary\n"); + + @readfile($pathFolder); + flush(); + exit; + } else { + + $recordId = 1; + $key = $urlVar = 'id'; + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $urlVar) . '&file='.$file, false + ) + ); + return false; + } + } + + public function save($key = null, $urlVar = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + $lang = JFactory::getLanguage(); + $model = $this->getModel(); + + $data = $this->input->post->get('jform', array(), 'array'); + $context = "$this->option.edit.$this->context"; + $task = $this->getTask(); + + $key = $urlVar = 'id'; + + $recordId = $this->input->getInt($urlVar); + + $data[$key] = $recordId; + + // Access check. + if (!$this->allowSave($data, $key)) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED')); + $this->setMessage($this->getError(), 'error'); + + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list + . $this->getRedirectToListAppend(). '&file='.$data['filename'] , false + ) + ); + + return false; + } + + // Validate the posted data. + // Sometimes the form needs some posted data, such as for plugins and modules. + $form = $model->getForm($data, false); + + if (!$form) + { + $app->enqueueMessage($model->getError(), 'error'); + + return false; + } + + // Test whether the data is valid. + $validData = $model->validate($form, $data); + + // Check for validation errors. + if ($validData === false) + { + // Get the validation messages. + $errors = $model->getErrors(); + + // Push up to three validation messages out to the user. + for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) + { + if ($errors[$i] instanceof Exception) + { + $app->enqueueMessage($errors[$i]->getMessage(), 'warning'); + } + else + { + $app->enqueueMessage($errors[$i], 'warning'); + } + } + + // Save the data in the session. + $app->setUserState($context . '.data', $data); + + // Redirect back to the edit screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $urlVar). '&file='.$data['filename'], false + ) + ); + + return false; + } + + if (!isset($validData['tags'])) + { + $validData['tags'] = null; + } + + // Attempt to save the data. + if (!$model->save($validData)) + { + + + // Save the data in the session. + $app->setUserState($context . '.data', $validData); + + // Redirect back to the edit screen. + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError())); + $this->setMessage($this->getError(), 'error'); + + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $urlVar). '&file='.$data['filename'], false + ) + ); + + return false; + } + + $this->setMessage( + JText::_( + ($lang->hasKey($this->text_prefix . ($recordId == 0 && $app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS') + ? $this->text_prefix + : 'JLIB_APPLICATION') . ($recordId == 0 && $app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS' + ) + ); + + // Redirect the user and adjust session state based on the chosen task. + + switch ($task) + { + case 'apply': + // Set the record data in the session. + //$recordId = $model->getState($this->context . '.id'); + + $this->holdEditId($context, $recordId); + $app->setUserState($context . '.data', null); + //$model->checkout($recordId); + + // Redirect back to the edit screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_item + . $this->getRedirectToItemAppend($recordId, $urlVar). '&file='.$data['filename'], false + ) + ); + break; + + + + default: + // Clear the record id and data from the session. + $this->releaseEditId($context, $recordId); + $app->setUserState($context . '.data', null); + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option , false + ) + ); + break; + } + + + $this->postSaveHook($model, $validData); + + return true; + } +} +?> diff --git a/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderinfo.php b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderinfo.php new file mode 100644 index 00000000..af422127 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderinfo.php @@ -0,0 +1,28 @@ +getUserStateFromRequest( $context.'from', 'from', $abc, 'string' ); + + + $this->setRedirect( 'index.php?option=com_phocacommander' ); + } +} +?> diff --git a/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderupload.php b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderupload.php new file mode 100644 index 00000000..e5d876ff --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/controllers/phocacommanderupload.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/logo-phoca.png b/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/logo-phoca.png new file mode 100644 index 00000000..07de8823 Binary files /dev/null and b/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/logo-phoca.png differ diff --git a/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/screen.phocacommander.html b/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/screen.phocacommander.html new file mode 100644 index 00000000..7f5a13c7 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/help/en-GB/screen.phocacommander.html @@ -0,0 +1,31 @@ + + + + +Phoca Commander + + + + +

Phoca Commander

+
+ +
+

 

+

 

+

+Phoca Commander Main Site
+Phoca Commander User Manual
+Phoca Commander Forum
+

+

 

+

 

+

 

+Close window + + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/help/index.html b/packages/phocacommander/administrator/components/com_phocacommander/help/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/help/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/help/logo-phoca.png b/packages/phocacommander/administrator/components/com_phocacommander/help/logo-phoca.png new file mode 100644 index 00000000..07de8823 Binary files /dev/null and b/packages/phocacommander/administrator/components/com_phocacommander/help/logo-phoca.png differ diff --git a/packages/phocacommander/administrator/components/com_phocacommander/help/screen.phocacommander.html b/packages/phocacommander/administrator/components/com_phocacommander/help/screen.phocacommander.html new file mode 100644 index 00000000..7f5a13c7 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/help/screen.phocacommander.html @@ -0,0 +1,31 @@ + + + + +Phoca Commander + + + + +

Phoca Commander

+
+ +
+

 

+

 

+

+Phoca Commander Main Site
+Phoca Commander User Manual
+Phoca Commander Forum
+

+

 

+

 

+

 

+Close window + + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileupload.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileupload.php new file mode 100644 index 00000000..04c2c26c --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileupload.php @@ -0,0 +1,648 @@ +get( 'multiple_upload_chunk', 0 ); + $uploadMethod = $paramsC->get( 'multiple_upload_method', 4 ); + + $overwriteExistingFiles = $paramsC->get( 'overwrite_existing_files', 0 ); + + JResponse::allowCache(false); + + /*jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 400, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_INVALID_TOKEN'))));*/ + + // Chunk Files + header('Content-type: text/plain; charset=UTF-8'); + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + + + // Invalid Token + JRequest::checkToken( 'request' ) or jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 100, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_INVALID_TOKEN')))); + + // Set FTP credentials, if given + $ftp = JClientHelper::setCredentialsFromRequest('ftp'); + + $folder = $app->input->get( 'folder', '', '', 'string' ); + $folder = base64_decode($folder); + //$file = JRequest::getVar( 'file', '', 'files', 'array' ); + $file = $app->input->files->get( 'file', null, 'raw'); + $chunk = $app->input->get( 'chunk', 0, '', 'int' ); + $chunks = $app->input->get( 'chunks', 0, '', 'int' ); + $manager = $app->input->get( 'manager', 'file', '', 'string' ); + + + $path = JPATH_ROOT; + + // Make the filename safe + if (isset($file['name'])) { + $file['name'] = JFile::makeSafe($file['name']); + } + + $pathFolder = JPath::clean($path.'/'); + if (isset($folder) && $folder != '') { + $pathFolder = JPath::clean($path . '/' .$folder . '/'); + } else { + $pathFolder = JPath::clean($path.'/'); + } + + + + $chunkEnabled = 0; + // Chunk only if is enabled and only if flash is enabled + if (($chunkMethod == 1 && $uploadMethod == 1) || ($frontEnd == 0 && $chunkMethod == 0 && $uploadMethod == 1)) { + $chunkEnabled = 1; + } + + + + if (isset($file['name'])) { + + + // - - - - - - - - - - + // Chunk Method + // - - - - - - - - - - + // $chunkMethod = 1, for frontend and backend + // $chunkMethod = 0, only for backend + if ($chunkEnabled == 1) { + + // If chunk files are used, we need to upload parts to temp directory + // and then we can run e.g. the condition to recognize if the file already exists + // We must upload the parts to temp, in other case we get everytime the info + // that the file exists (because the part has the same name as the file) + // so after first part is uploaded, in fact the file already exists + // Example: NOT USING CHUNK + // If we upload abc.jpg file to server and there is the same file + // we compare it and can recognize, there is one, don't upload it again. + // Example: USING CHUNK + // If we upload abc.jpg file to server and there is the same file + // the part of current file will overwrite the same file + // and then (after all parts will be uploaded) we can make the condition to compare the file + // and we recognize there is one - ok don't upload it BUT the file will be damaged by + // parts uploaded by the new file - so this is why we are using temp file in Chunk method + $stream = JFactory::getStream();// Chunk Files + $tempFolder = 'pcmpluploadtmpfolder'.'/'; + $filepathImgFinal = JPath::clean($pathFolder.strtolower($file['name'])); + $filepathImgTemp = JPath::clean($pathFolder.$tempFolder.strtolower($file['name'])); + $filepathFolderFinal = JPath::clean($pathFolder); + $filepathFolderTemp = JPath::clean($pathFolder.$tempFolder); + $maxFileAge = 60 * 60; // Temp file age in seconds + $lastChunk = $chunk + 1; + $realSize = 0; + + + + + // Get the real size - if chunk is uploaded, it is only a part size, so we must compute all size + // If there is last chunk we can computhe the whole size + if ($lastChunk == $chunks) { + if (JFile::exists($filepathImgTemp) && JFile::exists($file['tmp_name'])) { + $realSize = filesize($filepathImgTemp) + filesize($file['tmp_name']); + } + } + + // 5 minutes execution time + @set_time_limit(5 * 60);// usleep(5000); + + // If the file already exists on the server: + // - don't copy the temp file to final + // - remove all parts in temp file + // Because some parts are uploaded before we can run the condition + // to recognize if the file already exists. + + // Files should be overwritten + if ($overwriteExistingFiles == 1) { + JFile::delete($filepathImgFinal); + } + + if (JFile::exists($filepathImgFinal)) { + if($lastChunk == $chunks){ + @JFolder::delete($filepathFolderTemp); + } + + + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 108, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS')))); + + } + + if (!PhocaCommanderFileUpload::canUpload( $file, $errUploadMsg, $manager, $frontEnd, $chunkEnabled, $realSize )) { + + // If there is some error, remove the temp folder with temp files + if($lastChunk == $chunks){ + @JFolder::delete($filepathFolderTemp); + } + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 104, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_($errUploadMsg)))); + } + + // Ok create temp folder and add chunks + if (!JFolder::exists($filepathFolderTemp)) { + @JFolder::create($filepathFolderTemp); + } + + // Remove old temp files + if (JFolder::exists($filepathFolderTemp)) { + $dirFiles = JFolder::files($filepathFolderTemp); + if (!empty($dirFiles)) { + foreach ($dirFiles as $fileS) { + $filePathImgS = $filepathFolderTemp . $fileS; + // Remove temp files if they are older than the max age + if (preg_match('/\\.tmp$/', $fileS) && (filemtime($filepathImgTemp) < time() - $maxFileAge)) { + @JFile::delete($filePathImgS); + } + } + } + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 100, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_FOLDER_UPLOAD_NOT_EXISTS')))); + } + + // Look for the content type header + if (isset($_SERVER["HTTP_CONTENT_TYPE"])) + $contentType = $_SERVER["HTTP_CONTENT_TYPE"]; + + if (isset($_SERVER["CONTENT_TYPE"])) + $contentType = $_SERVER["CONTENT_TYPE"]; + + if (strpos($contentType, "multipart") !== false) { + if (isset($file['tmp_name']) && is_uploaded_file($file['tmp_name'])) { + + // Open temp file + $out = $stream->open($filepathImgTemp, $chunk == 0 ? "wb" : "ab"); + //$out = fopen($filepathImgTemp, $chunk == 0 ? "wb" : "ab"); + if ($out) { + // Read binary input stream and append it to temp file + $in = fopen($file['tmp_name'], "rb"); + if ($in) { + while ($buff = fread($in, 4096)) { + $stream->write($buff); + //fwrite($out, $buff); + } + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 101, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_OPEN_INPUT_STREAM')))); + } + $stream->close(); + //fclose($out); + @JFile::delete($file['tmp_name']); + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 102, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_OPEN_OUTPUT_STREAM')))); + } + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 103, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_MOVE_UPLOADED_FILE')))); + } + } else { + // Open temp file + $out = $stream->open($filepathImgTemp, $chunk == 0 ? "wb" : "ab"); + //$out = JFile::read($filepathImg); + if ($out) { + // Read binary input stream and append it to temp file + $in = fopen("php://input", "rb"); + + if ($in) { + while ($buff = fread($in, 4096)) { + $stream->write($buff); + } + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 101, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_OPEN_INPUT_STREAM')))); + } + $stream->close(); + //fclose($out); + } else { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 102, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_OPEN_OUTPUT_STREAM')))); + } + } + + + // Rename the Temp File to Final File + if($lastChunk == $chunks){ + + /*if(($imginfo = getimagesize($filepathImgTemp)) === FALSE) { + JFolder::delete($filepathFolderTemp); + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 110, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_WARNING_INVALIDIMG')))); + }*/ + + // Files should be overwritten + if ($overwriteExistingFiles == 1) { + JFile::delete($filepathImgFinal); + } + + if(!JFile::move($filepathImgTemp, $filepathImgFinal)) { + + JFolder::delete($filepathFolderTemp); + + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 109, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_MOVE_FILE') .'
' + . JText::_('COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP')))); + } + + + JFolder::delete($filepathFolderTemp); + } + + if ((int)$frontEnd > 0) { + return $file['name']; + } + + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'OK', 'code' => 200, + 'message' => JText::_('COM_PHOCACOMMANDER_SUCCESS').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_FILES_UPLOADED')))); + + + } else { + // No Chunk Method + + $filepathImgFinal = JPath::clean($pathFolder.strtolower($file['name'])); + $filepathFolderFinal = JPath::clean($pathFolder); + + + + if (!PhocaCommanderFileUpload::canUpload( $file, $errUploadMsg, $manager, $frontEnd, $chunkMethod, 0 )) { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 104, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_($errUploadMsg)))); + } + + if (JFile::exists($filepathImgFinal) && $overwriteExistingFiles == 0) { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 108, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS')))); + } + + + if(!JFile::upload($file['tmp_name'], $filepathImgFinal, false, true)) { + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 109, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE') .'
' + . JText::_('COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP')))); + } + + if ((int)$frontEnd > 0) { + return $file['name']; + } + + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'OK', 'code' => 200, + 'message' => JText::_('COM_PHOCACOMMANDER_SUCCESS').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_FILES_UPLOADED')))); + + + } + } else { + // No isset $file['name'] + + jexit(json_encode(array( 'jsonrpc' => '2.0', 'result' => 'error', 'code' => 104, + 'message' => JText::_('COM_PHOCACOMMANDER_ERROR').': ', + 'details' => JTEXT::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE')))); + } + + } + + /* + public static function realSingleUpload( $frontEnd = 0 ) { + + $paramsC = JComponentHelper::getParams('com_phocadownload'); + // $chunkMethod = $paramsC->get( 'multiple_upload_chunk', 0 ); + // $uploadMethod = $paramsC->get( 'multiple_upload_method', 1 ); + + $overwriteExistingFiles = $paramsC->get( 'overwrite_existing_files', 0 ); + + $app = JFactory::getApplication(); + JRequest::checkToken( 'request' ) or jexit( 'ERROR: '. JTEXT::_('COM_PHOCACOMMANDER_INVALID_TOKEN')); + JResponse::allowCache(false); + + + $file = $app->input->get( 'Filedata', '', 'files', 'array' ); + $folder = $app->input->get( 'folder', '', '', 'path' ); + $format = $app->input->get( 'format', 'html', '', 'cmd'); + $return = $app->input->get( 'return-url', null, 'post', 'base64' );//includes field + $viewBack = $app->input->get( 'viewback', '', '', '' ); + $manager = $app->input->get( 'manager', 'file', '', 'string' ); + $tab = $app->input->get( 'tab', '', '', 'string' ); + $field = $app->input->get( 'field' ); + $errUploadMsg = ''; + $folderUrl = $folder; + $tabUrl = ''; + $component = $app->input->get( 'option', '', '', 'string' ); + + $path = PhocaDownloadPath::getPathSet($manager);// we use viewback to get right path + + + // In case no return value will be sent (should not happen) + if ($component != '' && $frontEnd == 0) { + $componentUrl = 'index.php?option='.$component; + } else { + $componentUrl = 'index.php'; + } + if ($tab != '') { + $tabUrl = '&tab='.(string)$tab; + } + + $ftp =& JClientHelper::setCredentialsFromRequest('ftp'); + + // Make the filename safe + if (isset($file['name'])) { + $file['name'] = JFile::makeSafe($file['name']); + } + + + if (isset($folder) && $folder != '') { + $folder = $folder . DS; + } + + + // All HTTP header will be overwritten with js message + if (isset($file['name'])) { + $filepath = JPath::clean($path['orig_abs_ds'].$folder.strtolower($file['name'])); + + if (!PhocaDownloadFileUpload::canUpload( $file, $errUploadMsg, $manager, $frontEnd )) { + + if ($errUploadMsg == 'COM_PHOCACOMMANDER_WARNING_FILE_TOOLARGE') { + $errUploadMsg = JText::_($errUploadMsg) . ' ('.PhocaDownloadFileUpload::getFileSizeReadable($file['size']).')'; + } /* else if ($errUploadMsg == 'COM_PHOCACOMMANDER_WARNING_FILE_TOOLARGE_RESOLUTION') { + $imgSize = phocadownloadImage::getImageSize($file['tmp_name']); + $errUploadMsg = JText::_($errUploadMsg) . ' ('.(int)$imgSize[0].' x '.(int)$imgSize[1].' px)'; + } */ + + +/* else { + $errUploadMsg = JText::_($errUploadMsg); + } + + + if ($return) { + $app->enqueueMessage( $errUploadMsg, 'error'); + $app->redirect(base64_decode($return).'&manager='.(string)$manager.'&folder='.$folderUrl); + exit; + } else { + $app->enqueueMessage( $errUploadMsg, 'error'); + $app->redirect($componentUrl, $errUploadMsg); + exit; + } + } + + if (JFile::exists($filepath) && $overwriteExistingFiles == 0) { + if ($return) { + $app->redirect(base64_decode($return).'&manager='.(string)$manager.'&folder='.$folderUrl, JText::_('COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS'), 'error'); + exit; + } else { + $app->enqueueMessage( JText::_('COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS'), 'error'); + $app->redirect($componentUrl); + exit; + } + } + + if (!JFile::upload($file['tmp_name'], $filepath, false, true)) { + if ($return) { + $app->enqueueMessage( JText::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE'), 'error'); + $app->redirect(base64_decode($return).'&manager='.(string)$manager.'&folder='.$folderUrl); + exit; + } else { + $app->enqueueMessage( JText::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE'), 'error'); + $app->redirect($componentUrl); + exit; + } + } else { + + if ((int)$frontEnd > 0) { + return $file['name']; + } + + if ($return) { + $app->enqueueMessage( JText::_('COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOAD')); + $app->redirect(base64_decode($return).'&manager='.(string)$manager.'&folder='.$folderUrl); + exit; + } else { + $app->enqueueMessage( JText::_('COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOAD')); + $app->redirect($componentUrl); + exit; + } + } + } else { + $msg = JText::_('COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE'); + if ($return) { + $app->enqueueMessage( $msg, 'error'); + $app->redirect(base64_decode($return).'&manager='.(string)$manager.'&folder='.$folderUrl); + exit; + } else { + if($viewBack != '') { + $group = PhocaDownloadSettings::getManagerGroup($manager); + $link = 'index.php?option=com_phocadownload&view=phocadownloadmanager&manager='.(string)$manager + .str_replace('&', '&', $group['c']).'&'.$tabUrl.'&folder='.$folder.'&field='.$field; + $app->enqueueMessage( $msg, 'error'); + $app->redirect($link); + } else { + $app->enqueueMessage( $msg, 'error'); + $app->redirect('index.php?option=com_phocadownload'); + } + + } + } + + } + */ + + + public static function canUpload( $file, &$err, $manager = '', $frontEnd = 0, $chunkEnabled = 0, $realSize = 0) { + + + $paramsC = JComponentHelper::getParams( 'com_phocacommander' ); + + + $aft = $paramsC->get( 'allowed_file_types_upload', PhocaCommanderHelper::getDefaultAllowedMimeTypesUpload() ); + $dft = $paramsC->get( 'disallowed_file_types_upload', '' ); + $allowedMimeType = PhocaCommanderHelper::getMimeTypeString($aft); + $disallowedMimeType = PhocaCommanderHelper::getMimeTypeString($dft); + + $ignoreUploadCh = 0; + $ignoreUploadCheck = $paramsC->get( 'ignore_file_types_check', 0 ); + if ($ignoreUploadCheck == 1 ) { + $ignoreUploadCh = 1; + } + + + $paramsL['upload_extensions'] = $allowedMimeType['ext']; + $paramsL['image_extensions'] = 'bmp,gif,jpg,png,jpeg'; + $paramsL['upload_mime'] = $allowedMimeType['mime']; + $paramsL['upload_mime_illegal'] = $disallowedMimeType['mime']; + $paramsL['upload_ext_illegal'] = $disallowedMimeType['ext']; + + + + // The file doesn't exist + if(empty($file['name'])) { + $err = 'COM_PHOCACOMMANDER_WARNING_INPUT_FILE_UPLOAD'; + return false; + } + // Not safe file + jimport('joomla.filesystem.file'); + if ($file['name'] !== JFile::makesafe($file['name'])) { + $err = 'COM_PHOCACOMMANDER_WARNFILENAME'; + return false; + } + + $format = strtolower(JFile::getExt($file['name'])); + if ($ignoreUploadCh == 1) { + + } else { + + $allowable = explode( ',', $paramsL['upload_extensions']); + $notAllowable = explode( ',', $paramsL['upload_ext_illegal']); + + if(in_array($format, $notAllowable)) { + $err = 'COM_PHOCACOMMANDER_WARNFILETYPE_DISALLOWED'; + return false; + } + + + //if (!in_array($format, $allowable)) { + if ($format == '' || $format == false || (!in_array($format, $allowable))) { + $err = 'COM_PHOCACOMMANDER_WARNFILETYPE_NOT_ALLOWED'; + return false; + } + + } + + + // Max size of image + // If chunk method is used, we need to get computed size + $maxSize = $paramsC->get( 'upload_maxsize', 3145728 ); + + + if ($chunkEnabled == 1) { + if ((int)$maxSize > 0 && (int)$realSize > (int)$maxSize) { + $err = 'COM_PHOCACOMMANDER_WARNFILETOOLARGE'; + + return false; + } + } else { + if ((int)$maxSize > 0 && (int)$file['size'] > (int)$maxSize) { + $err = 'COM_PHOCACOMMANDER_WARNFILETOOLARGE'; + + return false; + } + } + + + + + + + + // Image check + //$imginfo = null; + //$images = explode( ',', $paramsL['image_extensions']); + + + $allowed_mime = explode(',', $paramsL['upload_mime']); + $illegal_mime = explode(',', $paramsL['upload_mime_illegal']); + if(function_exists('finfo_open')) {// We have fileinfo + $finfo = finfo_open(FILEINFO_MIME); + $type = finfo_file($finfo, $file['tmp_name']); + if(strlen($type) && !in_array($type, $allowed_mime) && in_array($type, $illegal_mime)) { + $err = 'COM_PHOCACOMMANDER_WARNINVALIDMIME'; + return false; + } + finfo_close($finfo); + } else if(function_exists('mime_content_type')) { // we have mime magic + $type = mime_content_type($file['tmp_name']); + if(strlen($type) && !in_array($type, $allowed_mime) && in_array($type, $illegal_mime)) { + $err = 'COM_PHOCACOMMANDER_WARNINVALIDMIME'; + return false; + } + } + + + // XSS Check + $xss_check = JFile::read($file['tmp_name'],false,256); + $html_tags = PhocaCommanderHelper::getHTMLTagsUpload(); + foreach($html_tags as $tag) { // A tag is '' + if(stristr($xss_check, '<'.$tag.' ') || stristr($xss_check, '<'.$tag.'>')) { + $err = 'COM_PHOCACOMMANDER_WARNIEXSS'; + return false; + } + } + + return true; + } + + + public static function renderFTPaccess() { + + $ftpOutput = '
' + .''. JText::_('COM_PHOCACOMMANDER_FTP_LOGIN_LABEL').'' + .JText::_('COM_PHOCACOMMANDER_FTP_LOGIN_DESC') + .'' + .'' + .'' + .'' + .'' + .'' + .'' + .'' + .'
'; + return $ftpOutput; + } + + public static function renderCreateFolder($sessName, $sessId, $currentFolder, $viewBack, $attribs = '') { + + if ($attribs != '') { + $attribs = '&'.$attribs; + } + + $folderOutput = '
'."\n" + + .'

'.JText::_('COM_PHOCACOMMANDER_FOLDER').'

'."\n" + .'
' + .'' + .'' + .' ' + .'
'."\n" + .JHTML::_( 'form.token' ) + .'
'; + return $folderOutput; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadmultiple.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadmultiple.php new file mode 100644 index 00000000..d292a357 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadmultiple.php @@ -0,0 +1,340 @@ +get( 'multiple_upload_chunk', 0 ); + $uploadMethod = $paramsC->get( 'multiple_upload_method', 1 ); + + JHtml::_('behavior.framework', true);// Load it here to be sure, it is loaded before jquery + JHtml::_('jquery.framework', false);// Load it here because of own nonConflict method (nonconflict is set below) + $document = JFactory::getDocument(); + // No more used - - - - - + //$document->addScript(JURI::root(true).'/components/com_phocadownload/assets/jquery/jquery-1.6.4.min.js');//USE SYSTEM + //$nC = 'var pgJQ = jQuery.noConflict();';//SET BELOW + //$document->addScriptDeclaration($nC);//SET BELOW + // - - - - - - - - - - - - + + $document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/plupload/plupload.full.min.js'); + $document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/jquery.plupload.queue.js'); + //$document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/plupload/moxie.js'); + //$document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/jquery.ui.plupload.js'); + JHTML::stylesheet( 'media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css' ); + } + + public static function getMultipleUploadSizeFormat($size) { + $readableSize = PhocaCommanderHelper::getFileSizeReadable($size, '%01.0f %s', 1); + $readableSize = str_replace(' ', '', $readableSize); + $readableSize = strtolower($readableSize); + return $readableSize; + } + + public function renderMultipleUploadJS($frontEnd = 0, $chunkMethod = 0) { + + $document = JFactory::getDocument(); + switch ($this->method) { + case 2: + $name = 'gears_uploader'; + $runtime = 'gears'; + break; + case 3: + $name = 'silverlight_uploader'; + $runtime = 'silverlight'; + break; + case 4: + $name = 'html5_uploader'; + $runtime = 'html5'; + break; + + case 5: + $name = 'browserplus_uploader'; + $runtime = 'browserplus'; + break; + + case 6: + $name = 'html4_uploader'; + $runtime = 'html4'; + break; + + case 1: + default: + $name = 'flash_uploader'; + $runtime = 'flash'; + break; + } + + $chunkEnabled = 0; + // Chunk only if is enabled and only if flash is enabled + if (($chunkMethod == 1 && $this->method == 1) || ($this->frontEnd == 0 && $chunkMethod == 0 && $this->method == 1)) { + $chunkEnabled = 1; + } + + $this->url = str_replace('&', '&', $this->url); + $this->reload = str_replace('&', '&', $this->reload); + + //$js = 'var pgJQ = jQuery.noConflict();'; + $js = 'jQuery(document).ready(function() {'."\n"; + $js .= ' '."\n"; + $js .= '})'."\n"; + + $js.= ' '. "\n"; + + $js.=' + var phFolderUpload = \'\'; + function phSetFolderUpload(folderUpload) { + phFolderUpload = folderUpload; + } + function phPlupload(phFolderUpload) {'."\n"; + + $js.= ' phSetFolderUpload(phFolderUpload)'. "\n"; + + $js.=' plupload.addI18n({'."\n"; + $js.=' \'Select files\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_SELECT_FILES')).'\','."\n"; + $js.=' \'Add files to the upload queue and click the start button.\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_ADD_FILES_TO_UPLOAD_QUEUE_AND_CLICK_START_BUTTON')).'\','."\n"; + $js.=' \'Filename\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_FILENAME')).'\','."\n"; + $js.=' \'Status\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_STATUS')).'\','."\n"; + $js.=' \'Size\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_SIZE')).'\','."\n"; + $js.=' \'Add files\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_ADD_FILES')).'\','."\n"; + $js.=' \'Start upload\':\''.addslashes(JText::_('COM_PHOCACOMMANDER_START_UPLOAD')).'\','."\n"; + $js.=' \'Stop current upload\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_STOP_CURRENT_UPLOAD')).'\','."\n"; + $js.=' \'Start uploading queue\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_START_UPLOADING_QUEUE')).'\','."\n"; + $js.=' \'Drag files here.\' : \''.addslashes(JText::_('COM_PHOCACOMMANDER_DRAG_FILES_HERE')).'\''."\n"; + $js.=' });'; + + $js.=' '."\n"; + + $js.=' jQuery("#'.$name.'").pluploadQueue({'."\n"; + $js.=' runtimes : \''.$runtime.'\','."\n"; + $js.=' url : \''.$this->url.'\','."\n"; + $js.=' max_file_size : \''.$this->maxFileSize.'\','."\n"; + + if ($chunkEnabled == 1) { + $js.=' chunk_size : \'1mb\','."\n"; + } + $js.=' preinit: phAttachErrors, '."\n"; + //$js.=' setup: phAttachCallbacks, '."\n"; + $js.=' unique_names : false,'."\n"; + //$js.=' multiple_queues: true,'."\n"; + $js.=' multipart: true,'."\n"; + + $js.= 'multipart_params : { + "folder" : phFolderUpload + },'."\n"; + + $js.=' filters : ['."\n"; + //$js.=' {title : "'.JText::_('COM_PHOCACOMMANDER_IMAGE_FILES').'", extensions : "jpg,gif,png"}'."\n"; + //$js.=' {title : "Zip files", extensions : "zip"}'."\n"; + $js.=' ],'."\n"; + $js.=''."\n"; + /*if ($this->method != 6) { + if ((int)$this->imageWidth > 0 || (int)$this->imageWidth > 0) { + $js.=' resize : {width : '.$this->imageWidth.', height : '.$this->imageHeight.', quality : '.$this->imageQuality.'},'."\n"; + $js.=''."\n"; + } + }*/ + if ($this->method == 1) { + $js.=' flash_swf_url : \''.JURI::root(false).'media/com_phocacommander/js/administrator/plupload/moxie.js\''."\n"; + } else if ($this->method == 3) { + $js.=' silverlight_xap_url : \''.JURI::root(true).'/media/com_phocacommander/js/administrator/plupload/Moxie.xap\''."\n"; + } + $js.=' });'."\n"; + + $js.='}'."\n";// End phPlupload(); + + $js.=' '."\n"; + + $js.= ' + + + +var phAllFiles = 0; +var phUploadedFiles = 0; +var phNotUploadedFiles = 0; +var phAllErrorMessages = \'\'; +function phAttachErrors(uploader) { + uploader.bind(\'FileUploaded\', function(up, file, response) { + var obj = JSON.parse(response.response); + if (obj.result && obj.result == \'error\') { + phNotUploadedFiles = phNotUploadedFiles + 1; + } else { + phUploadedFiles = phUploadedFiles + 1; + } + phAllFiles = phUploadedFiles + phNotUploadedFiles; + + + if (obj.result && obj.result == \'error\') { + + jQuery(\'#\' + file.id).append(\'\'+ obj.message + obj.details +\'
 
\'); + + + phAllErrorMessages = phAllErrorMessages + "\n" + "• " + file.name + \': \' + obj.message + obj.details; + + up.trigger("Error", {message : obj.message, code : obj.code, details : obj.details, file: File}); + + file.status = plupload.FAILED; + if (phAllFiles == uploader.files.length ) { + alert(\''.JText::_('COM_PHOCACOMMANDER_LIST_OF_UPLOAD_ERRORS').': \' + "\n" + phAllErrorMessages); + } else { return false;} + } + + if (phAllFiles == uploader.files.length ) { + + jQuery(\'.plupload_filelist_footer\').append(\''.JText::_('COM_PHOCACOMMANDER_UPLOADING_FINISHED').'\'); + setTimeout(function(){ + phAllFiles = 0; + phUploadedFiles = 0; + phNotUploadedFiles = 0; + uploader.splice(); + uploader.refresh(); + phLFA[\'panel\'] = \'A\'; phLoadFiles(phLFA); + phLFA[\'panel\'] = \'B\'; phLoadFiles(phLFA); + phPlupload(phFolderUpload); + }, 2500); + } + }); + +}'; + +/* $js .=' +function phAttachCallbacks(uploader) { + uploader.bind(\'Init\', function(up) { + up.settings.multipart_params = { + \'upload_type\' : jQuery("#uploadQueue").attr(\'data-uploadType\'), + \'xref_id\' : jQuery("#uploadQueue").attr(\'data-xrefID\'), + \'image_category\' : jQuery("#uploadQueue").attr(\'data-imageCategory\') + }; + }); + + uploader.bind(\'UploadComplete\', function(up, files) { + + if(jQuery().tipTip) { + jQuery(\'.plupload_failed\').tipTip(); + } + jQuery("#image_list").html(\'\', {xref_id : $("#uploadQueue").attr(\'data-xrefID\'), image_category : jQuery("#uploadQueue").attr(\'data-imageCategory\')}); + }); + + + /*uploader.bind(\'Error\', function(Up, ErrorObj) { + + uploader.refresh(); + }) +}'; */ + + /* $js.='function phAttachCallbacks(uploader) {'."\n"; + $js.=' uploader.bind(\'FileUploaded\', function(Up, File, Response) { ;'."\n"; + $js.=' + var obj = eval(\'(\' + Response.response + \')\');'."\n"; + //if ($this->method == 6) { + $js.=' var queueFiles = uploader.total.failed + uploader.total.uploaded;'."\n"; + //$js.=' var uploaded0 = uploader.total.uploaded;'."\n"; + //} else { + // $js.=' var queueFiles = uploader.total.failed + uploader.total.uploaded + 1;'."\n"; + // $js.=' var uploaded0 = uploader.total.uploaded + 1;'."\n"; + //} + + $js.=' alert(queueFiles);alert(uploader.total.failed);alert(uploader.total.uploaded);'."\n"; + + $js.=' if (obj.result && obj.result == \'error\') {'."\n"; + $js.=' Up.trigger("Error", {message : obj.message, code : obj.code, details : obj.details, file: File});'."\n"; + $js.=' if( queueFiles == uploader.files.length) {'."\n"; + $js.=' //var uploaded0 = uploader.total.uploaded;'."\n"; + $js.=' }'."\n"; + $js.=' //alert("not");'."\n"; + $js.=' } else {'."\n"; + $js.=' if( queueFiles == uploader.files.length) {'."\n"; + //if ($this->method == 6) { + $js.=' var uploaded = uploader.total.uploaded;'."\n"; + //} else { + // $js.=' var uploaded = uploader.total.uploaded + 1;'."\n"; + //} + $js.=' };'."\n"; + $js.=' };'."\n"; + $js.=' });'."\n"; + + $js.=' '."\n"; + + $js.=' uploader.bind(\'Error\', function(Up, ErrorObj) {'."\n"; + $js.=' if (ErrorObj.file) {'."\n"; + $js.=' jQuery(\'#\' + ErrorObj.file.id).append(\'
\'+ ErrorObj.message + ErrorObj.details +\'
\');'."\n"; + $js.=' }'."\n"; + $js.=' }); '."\n"; + + $js.=' '."\n"; + + $js.='}';*/ + + $document->addScriptDeclaration($js); + } + + public function getMultipleUploadHTML($width = '', $height = '330', $mootools = 1) { + + + switch ($this->method) { + case 2: + $name = 'gears_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_INSTALLED_GEARS'); + break; + case 3: + $name = 'silverlight_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_INSTALLED_SILVERLIGHT'); + break; + case 4: + $name = 'html5_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML5'); + break; + + case 5: + $name = 'browserplus_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_INSTALLED_BROWSERPLUS'); + break; + + case 6: + $name = 'html4_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML4'); + break; + + case 1: + default: + $name = 'flash_uploader'; + $msg = JText::_('COM_PHOCACOMMANDER_NOT_INSTALLED_FLASH'); + break; + } + + $style = ''; + if ($width != '') { + $style .= 'width: '.(int)$width.'px;'; + } + if ($height != '') { + $style .= 'height: '.(int)$height.'px;'; + } + + return '
'.$msg.'
'; + + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadsingle.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadsingle.php new file mode 100644 index 00000000..459ec7b4 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/fileuploadsingle.php @@ -0,0 +1,39 @@ +' + .''; + + } else { + $html = '' + //.'' + .'' + .'' + .''; + } + + return $html; + + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/html/index.html b/packages/phocacommander/administrator/components/com_phocacommander/helpers/html/index.html new file mode 100644 index 00000000..42682b47 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/html/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/index.html b/packages/phocacommander/administrator/components/com_phocacommander/helpers/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommander.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommander.php new file mode 100644 index 00000000..50d1580d --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommander.php @@ -0,0 +1,1104 @@ + $value) { + $xml_items[$key] = $value; + } + } + } + } + + if (isset($xml_items['version']) && $xml_items['version'] != '' ) { + return $xml_items['version']; + } else { + return ''; + } + } + + + public static function setChmod($path, $mode) + { + + if (is_string($mode)) + { + $mode = octdec($mode); + if ( ($mode < 0600) || ($mode > 0777) ) + { + $mode = 0755; + } + } + + $ftpOptions = JClientHelper::getCredentials('ftp'); + + // Check to make sure the path valid and clean + $path = JPath::clean($path); + + if ($ftpOptions['enabled'] == 1) + { + // Connect the FTP client + //jimport('joomla.client.ftp'); + //jimport('joomla.client.helper'); + $ftp = JClientFtp::getInstance( + $ftpOptions['host'], $ftpOptions['port'], array(), + $ftpOptions['user'], $ftpOptions['pass'] + ); + + } + + + if ($ftpOptions['enabled'] == 1) + { + // Translate path and delete + $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/'); + + // FTP connector throws an error + $ret = $ftp->chmod($path, $mode); + } else if (@chmod($path, $mode)) + { + $ret = true; + } else + { + return false; + } + return $ret; + } + + + public static function renderAjaxTopHtml($text) { + $o = '
' + .'
'. JHtml::_( 'image', 'media/com_phocacommander/images/administrator/icon-loading5.gif', '') + .'  '. htmlspecialchars($text) . '
' + .'
'; + return $o; + } + + public static function getMimeTypeIcon($filename, $size = 16, $outcome = 0) { + $ext = JFile::getExt($filename); + switch(strtolower($ext)) { + + + + case 'html': + case 'htm': + $icon = 'html'; + break; + + case 'c': + case 'js': + case 'py': + case 'rp': + $icon = 'source'; + break; + + case 'xml': + $icon = 'xml'; + break; + + case 'odp': + case 'ppt': + case 'pps': + case 'ppsx': + case 'pptx': + case 'pptm': + case 'ppsm': + $icon = 'presentation'; + break; + + case 'ods': + case 'xls': + case 'xlsx': + $icon = 'spreadsheet'; + break; + + case 'odt': + case 'doc': + case 'docx': + $icon = 'document'; + break; + + case 'php': + $icon = 'php'; + break; + + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + case 'bmp': + $icon = 'img'; + break; + + case 'jar': + $icon = 'jar'; + break; + + case 'pdf': + $icon = 'pdf'; + break; + + case 'sql': + $icon = 'sql'; + break; + + case 'svg': + case 'ai': + case 'cdr': + $icon = 'drawing'; + break; + + case 'txt': + case 'ini': + $icon = 'txt'; + break; + + + case '7z': + $icon = '7zip'; + break; + case 'gz': + $icon = 'gzip'; + break; + case 'rar': + $icon = 'rar'; + break; + case 'tar': + $icon = 'tar'; + break; + case 'zip': + case 'bzip': + $icon = 'zip'; + break; + + case 'flv': + case 'avi': + case 'mp4': + case 'mpeg': + case 'ogv': + $icon = 'video'; + break; + + case 'ogg': + case 'mp3': + case 'wav': + $icon = 'audio'; + break; + + default: + $icon = 'empty'; + break; + } + + if ($outcome == 1) { + return 'style="background: url(\''.JURI::root(). 'media/com_phocacommander/images/administrator/mime/'.(int)$size.'/icon-'. htmlspecialchars($icon).'.png\') 0 center no-repeat;"'; + } else { + return ''; + } + + return $mime; + } + + public static function createLoadFilesFunction($var, $folder, $ordering, $dir) { + + $o = ''; + $o .= 'var phLFAc = {};'; + $o .= 'phLFAc[\'panel\'] = \''.$var['panel'].'\';'; + + + // Active Panel always changes when click (click on order, click on folder will make active the clicked panel) + //$o .= 'phLFAc[\'activepanel\'] = \''.$var['activepanel'].'\';'; + $o .= 'phLFAc[\'activepanel\'] = \''.$var['panel'].'\';'; + + + // FOLDER + // | used for root + // * don't change + // + + if ($folder == '') { + $folder = '|'; + } + + if ($var['panel'] == 'A') { + $o .= 'phLFAc[\'foldera\'] = \''.$folder.'\';'; + $o .= 'phLFAc[\'folderb\'] = \'*\';'; + } else { + $o .= 'phLFAc[\'folderb\'] = \''.$folder.'\';'; + $o .= 'phLFAc[\'foldera\'] = \'*\';'; + } + + if ($var['panel'] == 'A') { + $o .= 'phLFAc[\'orderinga\'] = \''.$ordering.'\';'; + $o .= 'phLFAc[\'orderingb\'] = \'\';'; + } else { + $o .= 'phLFAc[\'orderingb\'] = \''.$ordering.'\';'; + $o .= 'phLFAc[\'orderinga\'] = \'\';'; + } + + if ($var['panel'] == 'A') { + $o .= 'phLFAc[\'directiona\'] = \''.$dir.'\';'; + $o .= 'phLFAc[\'directionb\'] = \'\';'; + } else { + $o .= 'phLFAc[\'directionb\'] = \''.$dir.'\';'; + $o .= 'phLFAc[\'directiona\'] = \'\';'; + } + + $o .= 'phLoadFiles(phLFAc);'; + return $o; + + } + + public static function getDefaultAllowedMimeTypesUpload() { + return '{csv=text/x-comma-separated-values}{lha=application/octet-stream}{lzh=application/octet-stream}{class=application/octet-stream}{psd=application/x-photoshop}{oda=application/oda}{pdf=application/pdf}{ai=application/postscript}{eps=application/postscript}{ps=application/postscript}{xls=application/vnd.ms-excel}{ppt=application/powerpoint}{wbxml=application/wbxml}{wmlc=application/wmlc}{dvi=application/x-dvi}{gtar=application/x-gtar}{gz=application/x-gzip}{tar=application/x-tar}{tgz=application/x-tar}{xhtml=application/xhtml+xml}{xht=application/xhtml+xml}{zip=application/x-zip}{mid=audio/midi}{midi=audio/midi}{mpga=audio/mpeg}{mp2=audio/mpeg}{mp3=audio/mpeg}{aif=audio/x-aiff}{aiff=audio/x-aiff}{aifc=audio/x-aiff}{ram=audio/x-pn-realaudio}{rm=audio/x-pn-realaudio}{rpm=audio/x-pn-realaudio-plugin}{ra=audio/x-realaudio}{rv=video/vnd.rn-realvideo}{wav=audio/x-wav}{bmp=image/bmp}{gif=image/gif}{jpeg=image/jpeg}{jpg=image/jpeg}{jpe=image/jpeg}{png=image/png}{tiff=image/tiff}{tif=image/tiff}{css=text/css}{html=text/html}{htm=text/html}{shtml=text/html}{txt=text/plain}{text=text/plain}{log=text/plain}{rtx=text/richtext}{rtf=text/rtf}{xml=text/xml}{xsl=text/xml}{mpeg=video/mpeg}{mpg=video/mpeg}{mpe=video/mpeg}{qt=video/quicktime}{mov=video/quicktime}{avi=video/x-msvideo}{flv=video/x-flv}{movie=video/x-sgi-movie}{doc=application/msword}{xl=application/excel}{eml=message/rfc822}{pptx=application/vnd.openxmlformats-officedocument.presentationml.presentation}{xlsx=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet}{docx=application/vnd.openxmlformats-officedocument.wordprocessingml.document}{rar=application/x-rar-compressed}{odb=application/vnd.oasis.opendocument.database}{odc=application/vnd.oasis.opendocument.chart}{odf=application/vnd.oasis.opendocument.formula}{odg=application/vnd.oasis.opendocument.graphics}{odi=application/vnd.oasis.opendocument.image}{odm=application/vnd.oasis.opendocument.text-master}{odp=application/vnd.oasis.opendocument.presentation}{ods=application/vnd.oasis.opendocument.spreadsheet}{odt=application/vnd.oasis.opendocument.text}{sxc=application/vnd.sun.xml.calc}{sxd=application/vnd.sun.xml.draw}{sxg=application/vnd.sun.xml.writer.global}{sxi=application/vnd.sun.xml.impress}{sxm=application/vnd.sun.xml.math}{sxw=application/vnd.sun.xml.writer}{ogv=video/ogg}{ogg=audio/ogg}'; + } + + public static function getHTMLTagsUpload() { + return array('abbr','acronym','address','applet','area','audioscope','base','basefont','bdo','bgsound','big','blackface','blink','blockquote','body','bq','br','button','caption','center','cite','code','col','colgroup','comment','custom','dd','del','dfn','dir','div','dl','dt','em','embed','fieldset','fn','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','iframe','ilayer','img','input','ins','isindex','keygen','kbd','label','layer','legend','li','limittext','link','listing','map','marquee','menu','meta','multicol','nobr','noembed','noframes','noscript','nosmartquotes','object','ol','optgroup','option','param','plaintext','pre','rt','ruby','s','samp','script','select','server','shadow','sidebar','small','spacer','span','strike','strong','style','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','ul','var','wbr','xml','xmp','!DOCTYPE', '!--'); + } + + public static function getMimeTypeString($params) { + + $regex_one = '/({\s*)(.*?)(})/si'; + $regex_all = '/{\s*.*?}/si'; + $matches = array(); + $count_matches = preg_match_all($regex_all,$params,$matches,PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER); + + $extString = ''; + $mimeString = ''; + + for($i = 0; $i < $count_matches; $i++) { + + $phocaDownload = $matches[0][$i][0]; + preg_match($regex_one,$phocaDownload,$phocaDownloadParts); + $values_replace = array ("/^'/", "/'$/", "/^'/", "/'$/", "/
/"); + $values = explode("=", $phocaDownloadParts[2], 2); + + foreach ($values_replace as $key2 => $values2) { + $values = preg_replace($values2, '', $values); + } + + // Create strings + $extString .= $values[0]; + $mimeString .= $values[1]; + + $j = $i + 1; + if ($j < $count_matches) { + $extString .=','; + $mimeString .=','; + } + } + + $string = array(); + $string['mime'] = $mimeString; + $string['ext'] = $extString; + + return $string; + } + + /* + public static function getMimeType($extension) { + + + $params = self::getDefaultAllowedMimeTypesDownload(); + $regex_one = '/({\s*)(.*?)(})/si'; + $regex_all = '/{\s*.*?}/si'; + $matches = array(); + $count_matches = preg_match_all($regex_all,$params,$matches,PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER); + + $returnMime = ''; + + for($i = 0; $i < $count_matches; $i++) { + + $pCom = $matches[0][$i][0]; + preg_match($regex_one,$pCom,$pcParts); + $values_replace = array ("/^'/", "/'$/", "/^'/", "/'$/", "/
/"); + $values = explode("=", $pcParts[2], 2); + + foreach ($values_replace as $key2 => $values2) { + $values = preg_replace($values2, '', $values); + } + + // Return mime if extension call it + if ($extension == $values[0]) { + $returnMime = $values[1]; + } + } + + + if ($returnMime != '') { + return $returnMime; + } else { + return "text/plain"; + } + } + */ + + + public static function getMimeType($extension) { + + // SOURCE: https://gist.github.com/Erutan409/8e774dfb2b343fe78b14 + // there's a bug that doesn't properly detect + // the mime type of css files + // https://bugs.php.net/bug.php?id=53035 + // so the following is used, instead + // src: http://www.freeformatter.com/mime-types-list.html#mime-types-list + + /** + * **DISCLAIMER** + * This will just match the file extension to the following + * array. It does not guarantee that the file is TRULY that + * of the extension that this function returns. + */ + $mime_type = array( + "3dml" => "text/vnd.in3d.3dml", + "3g2" => "video/3gpp2", + "3gp" => "video/3gpp", + "7z" => "application/x-7z-compressed", + "aab" => "application/x-authorware-bin", + "aac" => "audio/x-aac", + "aam" => "application/x-authorware-map", + "aas" => "application/x-authorware-seg", + "abw" => "application/x-abiword", + "ac" => "application/pkix-attr-cert", + "acc" => "application/vnd.americandynamics.acc", + "ace" => "application/x-ace-compressed", + "acu" => "application/vnd.acucobol", + "adp" => "audio/adpcm", + "aep" => "application/vnd.audiograph", + "afp" => "application/vnd.ibm.modcap", + "ahead" => "application/vnd.ahead.space", + "ai" => "application/postscript", + "aif" => "audio/x-aiff", + "air" => "application/vnd.adobe.air-application-installer-package+zip", + "ait" => "application/vnd.dvb.ait", + "ami" => "application/vnd.amiga.ami", + "apk" => "application/vnd.android.package-archive", + "application" => "application/x-ms-application", + "apr" => "application/vnd.lotus-approach", + "asf" => "video/x-ms-asf", + "aso" => "application/vnd.accpac.simply.aso", + "atc" => "application/vnd.acucorp", + "atom" => "application/atom+xml", + "atomcat" => "application/atomcat+xml", + "atomsvc" => "application/atomsvc+xml", + "atx" => "application/vnd.antix.game-component", + "au" => "audio/basic", + "avi" => "video/x-msvideo", + "aw" => "application/applixware", + "azf" => "application/vnd.airzip.filesecure.azf", + "azs" => "application/vnd.airzip.filesecure.azs", + "azw" => "application/vnd.amazon.ebook", + "bcpio" => "application/x-bcpio", + "bdf" => "application/x-font-bdf", + "bdm" => "application/vnd.syncml.dm+wbxml", + "bed" => "application/vnd.realvnc.bed", + "bh2" => "application/vnd.fujitsu.oasysprs", + "bin" => "application/octet-stream", + "bmi" => "application/vnd.bmi", + "bmp" => "image/bmp", + "box" => "application/vnd.previewsystems.box", + "btif" => "image/prs.btif", + "bz" => "application/x-bzip", + "bz2" => "application/x-bzip2", + "c" => "text/x-c", + "c11amc" => "application/vnd.cluetrust.cartomobile-config", + "c11amz" => "application/vnd.cluetrust.cartomobile-config-pkg", + "c4g" => "application/vnd.clonk.c4group", + "cab" => "application/vnd.ms-cab-compressed", + "car" => "application/vnd.curl.car", + "cat" => "application/vnd.ms-pki.seccat", + "ccxml" => "application/ccxml+xml,", + "cdbcmsg" => "application/vnd.contact.cmsg", + "cdkey" => "application/vnd.mediastation.cdkey", + "cdmia" => "application/cdmi-capability", + "cdmic" => "application/cdmi-container", + "cdmid" => "application/cdmi-domain", + "cdmio" => "application/cdmi-object", + "cdmiq" => "application/cdmi-queue", + "cdx" => "chemical/x-cdx", + "cdxml" => "application/vnd.chemdraw+xml", + "cdy" => "application/vnd.cinderella", + "cer" => "application/pkix-cert", + "cgm" => "image/cgm", + "chat" => "application/x-chat", + "chm" => "application/vnd.ms-htmlhelp", + "chrt" => "application/vnd.kde.kchart", + "cif" => "chemical/x-cif", + "cii" => "application/vnd.anser-web-certificate-issue-initiation", + "cil" => "application/vnd.ms-artgalry", + "cla" => "application/vnd.claymore", + "class" => "application/java-vm", + "clkk" => "application/vnd.crick.clicker.keyboard", + "clkp" => "application/vnd.crick.clicker.palette", + "clkt" => "application/vnd.crick.clicker.template", + "clkw" => "application/vnd.crick.clicker.wordbank", + "clkx" => "application/vnd.crick.clicker", + "clp" => "application/x-msclip", + "cmc" => "application/vnd.cosmocaller", + "cmdf" => "chemical/x-cmdf", + "cml" => "chemical/x-cml", + "cmp" => "application/vnd.yellowriver-custom-menu", + "cmx" => "image/x-cmx", + "cod" => "application/vnd.rim.cod", + "cpio" => "application/x-cpio", + "cpt" => "application/mac-compactpro", + "crd" => "application/x-mscardfile", + "crl" => "application/pkix-crl", + "cryptonote" => "application/vnd.rig.cryptonote", + "csh" => "application/x-csh", + "csml" => "chemical/x-csml", + "csp" => "application/vnd.commonspace", + "css" => "text/css", + "csv" => "text/csv", + "cu" => "application/cu-seeme", + "curl" => "text/vnd.curl", + "cww" => "application/prs.cww", + "dae" => "model/vnd.collada+xml", + "daf" => "application/vnd.mobius.daf", + "davmount" => "application/davmount+xml", + "dcurl" => "text/vnd.curl.dcurl", + "dd2" => "application/vnd.oma.dd2+xml", + "ddd" => "application/vnd.fujixerox.ddd", + "deb" => "application/x-debian-package", + "der" => "application/x-x509-ca-cert", + "dfac" => "application/vnd.dreamfactory", + "dir" => "application/x-director", + "dis" => "application/vnd.mobius.dis", + "djvu" => "image/vnd.djvu", + "dna" => "application/vnd.dna", + "doc" => "application/msword", + "docm" => "application/vnd.ms-word.document.macroenabled.12", + "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "dotm" => "application/vnd.ms-word.template.macroenabled.12", + "dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + "dp" => "application/vnd.osgi.dp", + "dpg" => "application/vnd.dpgraph", + "dra" => "audio/vnd.dra", + "dsc" => "text/prs.lines.tag", + "dssc" => "application/dssc+der", + "dtb" => "application/x-dtbook+xml", + "dtd" => "application/xml-dtd", + "dts" => "audio/vnd.dts", + "dtshd" => "audio/vnd.dts.hd", + "dvi" => "application/x-dvi", + "dwf" => "model/vnd.dwf", + "dwg" => "image/vnd.dwg", + "dxf" => "image/vnd.dxf", + "dxp" => "application/vnd.spotfire.dxp", + "ecelp4800" => "audio/vnd.nuera.ecelp4800", + "ecelp7470" => "audio/vnd.nuera.ecelp7470", + "ecelp9600" => "audio/vnd.nuera.ecelp9600", + "edm" => "application/vnd.novadigm.edm", + "edx" => "application/vnd.novadigm.edx", + "efif" => "application/vnd.picsel", + "ei6" => "application/vnd.pg.osasli", + "eml" => "message/rfc822", + "emma" => "application/emma+xml", + "eol" => "audio/vnd.digital-winds", + "eot" => "application/vnd.ms-fontobject", + "epub" => "application/epub+zip", + "es" => "application/ecmascript", + "es3" => "application/vnd.eszigno3+xml", + "esf" => "application/vnd.epson.esf", + "etx" => "text/x-setext", + "exe" => "application/x-msdownload", + "exi" => "application/exi", + "ext" => "application/vnd.novadigm.ext", + "ez2" => "application/vnd.ezpix-album", + "ez3" => "application/vnd.ezpix-package", + "f" => "text/x-fortran", + "f4v" => "video/x-f4v", + "fbs" => "image/vnd.fastbidsheet", + "fcs" => "application/vnd.isac.fcs", + "fdf" => "application/vnd.fdf", + "fe_launch" => "application/vnd.denovo.fcselayout-link", + "fg5" => "application/vnd.fujitsu.oasysgp", + "fh" => "image/x-freehand", + "fig" => "application/x-xfig", + "fli" => "video/x-fli", + "flo" => "application/vnd.micrografx.flo", + "flv" => "video/x-flv", + "flw" => "application/vnd.kde.kivio", + "flx" => "text/vnd.fmi.flexstor", + "fly" => "text/vnd.fly", + "fm" => "application/vnd.framemaker", + "fnc" => "application/vnd.frogans.fnc", + "fpx" => "image/vnd.fpx", + "fsc" => "application/vnd.fsc.weblaunch", + "fst" => "image/vnd.fst", + "ftc" => "application/vnd.fluxtime.clip", + "fti" => "application/vnd.anser-web-funds-transfer-initiation", + "fvt" => "video/vnd.fvt", + "fxp" => "application/vnd.adobe.fxp", + "fzs" => "application/vnd.fuzzysheet", + "g2w" => "application/vnd.geoplan", + "g3" => "image/g3fax", + "g3w" => "application/vnd.geospace", + "gac" => "application/vnd.groove-account", + "gdl" => "model/vnd.gdl", + "geo" => "application/vnd.dynageo", + "gex" => "application/vnd.geometry-explorer", + "ggb" => "application/vnd.geogebra.file", + "ggt" => "application/vnd.geogebra.tool", + "ghf" => "application/vnd.groove-help", + "gif" => "image/gif", + "gim" => "application/vnd.groove-identity-message", + "gmx" => "application/vnd.gmx", + "gnumeric" => "application/x-gnumeric", + "gph" => "application/vnd.flographit", + "gqf" => "application/vnd.grafeq", + "gram" => "application/srgs", + "grv" => "application/vnd.groove-injector", + "grxml" => "application/srgs+xml", + "gsf" => "application/x-font-ghostscript", + "gtar" => "application/x-gtar", + "gtm" => "application/vnd.groove-tool-message", + "gtw" => "model/vnd.gtw", + "gv" => "text/vnd.graphviz", + "gxt" => "application/vnd.geonext", + "h261" => "video/h261", + "h263" => "video/h263", + "h264" => "video/h264", + "hal" => "application/vnd.hal+xml", + "hbci" => "application/vnd.hbci", + "hdf" => "application/x-hdf", + "hlp" => "application/winhlp", + "hpgl" => "application/vnd.hp-hpgl", + "hpid" => "application/vnd.hp-hpid", + "hps" => "application/vnd.hp-hps", + "hqx" => "application/mac-binhex40", + "htke" => "application/vnd.kenameaapp", + "html" => "text/html", + "hvd" => "application/vnd.yamaha.hv-dic", + "hvp" => "application/vnd.yamaha.hv-voice", + "hvs" => "application/vnd.yamaha.hv-script", + "i2g" => "application/vnd.intergeo", + "icc" => "application/vnd.iccprofile", + "ice" => "x-conference/x-cooltalk", + "ico" => "image/x-icon", + "ics" => "text/calendar", + "ief" => "image/ief", + "ifm" => "application/vnd.shana.informed.formdata", + "igl" => "application/vnd.igloader", + "igm" => "application/vnd.insors.igm", + "igs" => "model/iges", + "igx" => "application/vnd.micrografx.igx", + "iif" => "application/vnd.shana.informed.interchange", + "imp" => "application/vnd.accpac.simply.imp", + "ims" => "application/vnd.ms-ims", + "ipfix" => "application/ipfix", + "ipk" => "application/vnd.shana.informed.package", + "irm" => "application/vnd.ibm.rights-management", + "irp" => "application/vnd.irepository.package+xml", + "itp" => "application/vnd.shana.informed.formtemplate", + "ivp" => "application/vnd.immervision-ivp", + "ivu" => "application/vnd.immervision-ivu", + "jad" => "text/vnd.sun.j2me.app-descriptor", + "jam" => "application/vnd.jam", + "jar" => "application/java-archive", + "java" => "text/x-java-source,java", + "jisp" => "application/vnd.jisp", + "jlt" => "application/vnd.hp-jlyt", + "jnlp" => "application/x-java-jnlp-file", + "joda" => "application/vnd.joost.joda-archive", + "jpeg" => "image/jpeg", + "jpg" => "image/jpeg", + "jpgv" => "video/jpeg", + "jpm" => "video/jpm", + "js" => "application/javascript", + "json" => "application/json", + "karbon" => "application/vnd.kde.karbon", + "kfo" => "application/vnd.kde.kformula", + "kia" => "application/vnd.kidspiration", + "kml" => "application/vnd.google-earth.kml+xml", + "kmz" => "application/vnd.google-earth.kmz", + "kne" => "application/vnd.kinar", + "kon" => "application/vnd.kde.kontour", + "kpr" => "application/vnd.kde.kpresenter", + "ksp" => "application/vnd.kde.kspread", + "ktx" => "image/ktx", + "ktz" => "application/vnd.kahootz", + "kwd" => "application/vnd.kde.kword", + "lasxml" => "application/vnd.las.las+xml", + "latex" => "application/x-latex", + "lbd" => "application/vnd.llamagraphics.life-balance.desktop", + "lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml", + "les" => "application/vnd.hhe.lesson-player", + "link66" => "application/vnd.route66.link66+xml", + "lrm" => "application/vnd.ms-lrm", + "ltf" => "application/vnd.frogans.ltf", + "lvp" => "audio/vnd.lucent.voice", + "lwp" => "application/vnd.lotus-wordpro", + "m21" => "application/mp21", + "m3u" => "audio/x-mpegurl", + "m3u8" => "application/vnd.apple.mpegurl", + "m4v" => "video/x-m4v", + "ma" => "application/mathematica", + "mads" => "application/mads+xml", + "mag" => "application/vnd.ecowin.chart", + "map" => "application/json", + "mathml" => "application/mathml+xml", + "mbk" => "application/vnd.mobius.mbk", + "mbox" => "application/mbox", + "mc1" => "application/vnd.medcalcdata", + "mcd" => "application/vnd.mcd", + "mcurl" => "text/vnd.curl.mcurl", + "md" => "text/x-markdown", // http://bit.ly/1Kc5nUB + "mdb" => "application/x-msaccess", + "mdi" => "image/vnd.ms-modi", + "meta4" => "application/metalink4+xml", + "mets" => "application/mets+xml", + "mfm" => "application/vnd.mfmp", + "mgp" => "application/vnd.osgeo.mapguide.package", + "mgz" => "application/vnd.proteus.magazine", + "mid" => "audio/midi", + "mif" => "application/vnd.mif", + "mj2" => "video/mj2", + "mlp" => "application/vnd.dolby.mlp", + "mmd" => "application/vnd.chipnuts.karaoke-mmd", + "mmf" => "application/vnd.smaf", + "mmr" => "image/vnd.fujixerox.edmics-mmr", + "mny" => "application/x-msmoney", + "mods" => "application/mods+xml", + "movie" => "video/x-sgi-movie", + "mp1" => "audio/mpeg", + "mp2" => "audio/mpeg", + "mp3" => "audio/mpeg", + "mp4" => "video/mp4", + "mp4a" => "audio/mp4", + "mpc" => "application/vnd.mophun.certificate", + "mpeg" => "video/mpeg", + "mpga" => "audio/mpeg", + "mpkg" => "application/vnd.apple.installer+xml", + "mpm" => "application/vnd.blueice.multipass", + "mpn" => "application/vnd.mophun.application", + "mpp" => "application/vnd.ms-project", + "mpy" => "application/vnd.ibm.minipay", + "mqy" => "application/vnd.mobius.mqy", + "mrc" => "application/marc", + "mrcx" => "application/marcxml+xml", + "mscml" => "application/mediaservercontrol+xml", + "mseq" => "application/vnd.mseq", + "msf" => "application/vnd.epson.msf", + "msh" => "model/mesh", + "msl" => "application/vnd.mobius.msl", + "msty" => "application/vnd.muvee.style", + "mts" => "model/vnd.mts", + "mus" => "application/vnd.musician", + "musicxml" => "application/vnd.recordare.musicxml+xml", + "mvb" => "application/x-msmediaview", + "mwf" => "application/vnd.mfer", + "mxf" => "application/mxf", + "mxl" => "application/vnd.recordare.musicxml", + "mxml" => "application/xv+xml", + "mxs" => "application/vnd.triscape.mxs", + "mxu" => "video/vnd.mpegurl", + "n3" => "text/n3", + "nbp" => "application/vnd.wolfram.player", + "nc" => "application/x-netcdf", + "ncx" => "application/x-dtbncx+xml", + "n-gage" => "application/vnd.nokia.n-gage.symbian.install", + "ngdat" => "application/vnd.nokia.n-gage.data", + "nlu" => "application/vnd.neurolanguage.nlu", + "nml" => "application/vnd.enliven", + "nnd" => "application/vnd.noblenet-directory", + "nns" => "application/vnd.noblenet-sealer", + "nnw" => "application/vnd.noblenet-web", + "npx" => "image/vnd.net-fpx", + "nsf" => "application/vnd.lotus-notes", + "oa2" => "application/vnd.fujitsu.oasys2", + "oa3" => "application/vnd.fujitsu.oasys3", + "oas" => "application/vnd.fujitsu.oasys", + "obd" => "application/x-msbinder", + "oda" => "application/oda", + "odb" => "application/vnd.oasis.opendocument.database", + "odc" => "application/vnd.oasis.opendocument.chart", + "odf" => "application/vnd.oasis.opendocument.formula", + "odft" => "application/vnd.oasis.opendocument.formula-template", + "odg" => "application/vnd.oasis.opendocument.graphics", + "odi" => "application/vnd.oasis.opendocument.image", + "odm" => "application/vnd.oasis.opendocument.text-master", + "odp" => "application/vnd.oasis.opendocument.presentation", + "ods" => "application/vnd.oasis.opendocument.spreadsheet", + "odt" => "application/vnd.oasis.opendocument.text", + "oga" => "audio/ogg", + "ogv" => "video/ogg", + "ogx" => "application/ogg", + "onetoc" => "application/onenote", + "opf" => "application/oebps-package+xml", + "org" => "application/vnd.lotus-organizer", + "osf" => "application/vnd.yamaha.openscoreformat", + "osfpvg" => "application/vnd.yamaha.openscoreformat.osfpvg+xml", + "otc" => "application/vnd.oasis.opendocument.chart-template", + "otf" => "application/x-font-otf", + "otg" => "application/vnd.oasis.opendocument.graphics-template", + "oth" => "application/vnd.oasis.opendocument.text-web", + "oti" => "application/vnd.oasis.opendocument.image-template", + "otp" => "application/vnd.oasis.opendocument.presentation-template", + "ots" => "application/vnd.oasis.opendocument.spreadsheet-template", + "ott" => "application/vnd.oasis.opendocument.text-template", + "oxt" => "application/vnd.openofficeorg.extension", + "p" => "text/x-pascal", + "p10" => "application/pkcs10", + "p12" => "application/x-pkcs12", + "p7b" => "application/x-pkcs7-certificates", + "p7m" => "application/pkcs7-mime", + "p7r" => "application/x-pkcs7-certreqresp", + "p7s" => "application/pkcs7-signature", + "p8" => "application/pkcs8", + "par" => "text/plain-bas", + "paw" => "application/vnd.pawaafile", + "pbd" => "application/vnd.powerbuilder6", + "pbm" => "image/x-portable-bitmap", + "pcf" => "application/x-font-pcf", + "pcl" => "application/vnd.hp-pcl", + "pclxl" => "application/vnd.hp-pclxl", + "pcurl" => "application/vnd.curl.pcurl", + "pcx" => "image/x-pcx", + "pdb" => "application/vnd.palm", + "pdf" => "application/pdf", + "pfa" => "application/x-font-type1", + "pfr" => "application/font-tdpfr", + "pgm" => "image/x-portable-graymap", + "pgn" => "application/x-chess-pgn", + "pgp" => "application/pgp-signature", + "pic" => "image/x-pict", + "pki" => "application/pkixcmp", + "pkipath" => "application/pkix-pkipath", + "plb" => "application/vnd.3gpp.pic-bw-large", + "plc" => "application/vnd.mobius.plc", + "plf" => "application/vnd.pocketlearn", + "pls" => "application/pls+xml", + "pml" => "application/vnd.ctc-posml", + "png" => "image/png", + "pnm" => "image/x-portable-anymap", + "portpkg" => "application/vnd.macports.portpkg", + "potm" => "application/vnd.ms-powerpoint.template.macroenabled.12", + "potx" => "application/vnd.openxmlformats-officedocument.presentationml.template", + "ppam" => "application/vnd.ms-powerpoint.addin.macroenabled.12", + "ppd" => "application/vnd.cups-ppd", + "ppm" => "image/x-portable-pixmap", + "ppsm" => "application/vnd.ms-powerpoint.slideshow.macroenabled.12", + "ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + "ppt" => "application/vnd.ms-powerpoint", + "pptm" => "application/vnd.ms-powerpoint.presentation.macroenabled.12", + "pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "prc" => "application/x-mobipocket-ebook", + "pre" => "application/vnd.lotus-freelance", + "prf" => "application/pics-rules", + "psb" => "application/vnd.3gpp.pic-bw-small", + "psd" => "image/vnd.adobe.photoshop", + "psf" => "application/x-font-linux-psf", + "pskcxml" => "application/pskc+xml", + "ptid" => "application/vnd.pvi.ptid1", + "pub" => "application/x-mspublisher", + "pvb" => "application/vnd.3gpp.pic-bw-var", + "pwn" => "application/vnd.3m.post-it-notes", + "pya" => "audio/vnd.ms-playready.media.pya", + "pyv" => "video/vnd.ms-playready.media.pyv", + "qam" => "application/vnd.epson.quickanime", + "qbo" => "application/vnd.intu.qbo", + "qfx" => "application/vnd.intu.qfx", + "qps" => "application/vnd.publishare-delta-tree", + "qt" => "video/quicktime", + "qxd" => "application/vnd.quark.quarkxpress", + "ram" => "audio/x-pn-realaudio", + "rar" => "application/x-rar-compressed", + "ras" => "image/x-cmu-raster", + "rcprofile" => "application/vnd.ipunplugged.rcprofile", + "rdf" => "application/rdf+xml", + "rdz" => "application/vnd.data-vision.rdz", + "rep" => "application/vnd.businessobjects", + "res" => "application/x-dtbresource+xml", + "rgb" => "image/x-rgb", + "rif" => "application/reginfo+xml", + "rip" => "audio/vnd.rip", + "rl" => "application/resource-lists+xml", + "rlc" => "image/vnd.fujixerox.edmics-rlc", + "rld" => "application/resource-lists-diff+xml", + "rm" => "application/vnd.rn-realmedia", + "rmp" => "audio/x-pn-realaudio-plugin", + "rms" => "application/vnd.jcp.javame.midlet-rms", + "rnc" => "application/relax-ng-compact-syntax", + "rp9" => "application/vnd.cloanto.rp9", + "rpss" => "application/vnd.nokia.radio-presets", + "rpst" => "application/vnd.nokia.radio-preset", + "rq" => "application/sparql-query", + "rs" => "application/rls-services+xml", + "rsd" => "application/rsd+xml", + "rss" => "application/rss+xml", + "rtf" => "application/rtf", + "rtx" => "text/richtext", + "s" => "text/x-asm", + "saf" => "application/vnd.yamaha.smaf-audio", + "sbml" => "application/sbml+xml", + "sc" => "application/vnd.ibm.secure-container", + "scd" => "application/x-msschedule", + "scm" => "application/vnd.lotus-screencam", + "scq" => "application/scvp-cv-request", + "scs" => "application/scvp-cv-response", + "scurl" => "text/vnd.curl.scurl", + "sda" => "application/vnd.stardivision.draw", + "sdc" => "application/vnd.stardivision.calc", + "sdd" => "application/vnd.stardivision.impress", + "sdkm" => "application/vnd.solent.sdkm+xml", + "sdp" => "application/sdp", + "sdw" => "application/vnd.stardivision.writer", + "see" => "application/vnd.seemail", + "seed" => "application/vnd.fdsn.seed", + "sema" => "application/vnd.sema", + "semd" => "application/vnd.semd", + "semf" => "application/vnd.semf", + "ser" => "application/java-serialized-object", + "setpay" => "application/set-payment-initiation", + "setreg" => "application/set-registration-initiation", + "sfd-hdstx" => "application/vnd.hydrostatix.sof-data", + "sfs" => "application/vnd.spotfire.sfs", + "sgl" => "application/vnd.stardivision.writer-global", + "sgml" => "text/sgml", + "sh" => "application/x-sh", + "shar" => "application/x-shar", + "shf" => "application/shf+xml", + "sis" => "application/vnd.symbian.install", + "sit" => "application/x-stuffit", + "sitx" => "application/x-stuffitx", + "skp" => "application/vnd.koan", + "sldm" => "application/vnd.ms-powerpoint.slide.macroenabled.12", + "sldx" => "application/vnd.openxmlformats-officedocument.presentationml.slide", + "slt" => "application/vnd.epson.salt", + "sm" => "application/vnd.stepmania.stepchart", + "smf" => "application/vnd.stardivision.math", + "smi" => "application/smil+xml", + "snf" => "application/x-font-snf", + "spf" => "application/vnd.yamaha.smaf-phrase", + "spl" => "application/x-futuresplash", + "spot" => "text/vnd.in3d.spot", + "spp" => "application/scvp-vp-response", + "spq" => "application/scvp-vp-request", + "src" => "application/x-wais-source", + "sru" => "application/sru+xml", + "srx" => "application/sparql-results+xml", + "sse" => "application/vnd.kodak-descriptor", + "ssf" => "application/vnd.epson.ssf", + "ssml" => "application/ssml+xml", + "st" => "application/vnd.sailingtracker.track", + "stc" => "application/vnd.sun.xml.calc.template", + "std" => "application/vnd.sun.xml.draw.template", + "stf" => "application/vnd.wt.stf", + "sti" => "application/vnd.sun.xml.impress.template", + "stk" => "application/hyperstudio", + "stl" => "application/vnd.ms-pki.stl", + "str" => "application/vnd.pg.format", + "stw" => "application/vnd.sun.xml.writer.template", + "sub" => "image/vnd.dvb.subtitle", + "sus" => "application/vnd.sus-calendar", + "sv4cpio" => "application/x-sv4cpio", + "sv4crc" => "application/x-sv4crc", + "svc" => "application/vnd.dvb.service", + "svd" => "application/vnd.svd", + "svg" => "image/svg+xml", + "swf" => "application/x-shockwave-flash", + "swi" => "application/vnd.aristanetworks.swi", + "sxc" => "application/vnd.sun.xml.calc", + "sxd" => "application/vnd.sun.xml.draw", + "sxg" => "application/vnd.sun.xml.writer.global", + "sxi" => "application/vnd.sun.xml.impress", + "sxm" => "application/vnd.sun.xml.math", + "sxw" => "application/vnd.sun.xml.writer", + "t" => "text/troff", + "tao" => "application/vnd.tao.intent-module-archive", + "tar" => "application/x-tar", + "tcap" => "application/vnd.3gpp2.tcap", + "tcl" => "application/x-tcl", + "teacher" => "application/vnd.smart.teacher", + "tei" => "application/tei+xml", + "tex" => "application/x-tex", + "texinfo" => "application/x-texinfo", + "tfi" => "application/thraud+xml", + "tfm" => "application/x-tex-tfm", + "thmx" => "application/vnd.ms-officetheme", + "tiff" => "image/tiff", + "tmo" => "application/vnd.tmobile-livetv", + "torrent" => "application/x-bittorrent", + "tpl" => "application/vnd.groove-tool-template", + "tpt" => "application/vnd.trid.tpt", + "tra" => "application/vnd.trueapp", + "trm" => "application/x-msterminal", + "tsd" => "application/timestamped-data", + "tsv" => "text/tab-separated-values", + "ttf" => "application/x-font-ttf", + "ttl" => "text/turtle", + "twd" => "application/vnd.simtech-mindmapper", + "txd" => "application/vnd.genomatix.tuxedo", + "txf" => "application/vnd.mobius.txf", + "txt" => "text/plain", + "ufd" => "application/vnd.ufdl", + "umj" => "application/vnd.umajin", + "unityweb" => "application/vnd.unity", + "uoml" => "application/vnd.uoml+xml", + "uri" => "text/uri-list", + "ustar" => "application/x-ustar", + "utz" => "application/vnd.uiq.theme", + "uu" => "text/x-uuencode", + "uva" => "audio/vnd.dece.audio", + "uvh" => "video/vnd.dece.hd", + "uvi" => "image/vnd.dece.graphic", + "uvm" => "video/vnd.dece.mobile", + "uvp" => "video/vnd.dece.pd", + "uvs" => "video/vnd.dece.sd", + "uvu" => "video/vnd.uvvu.mp4", + "uvv" => "video/vnd.dece.video", + "vcd" => "application/x-cdlink", + "vcf" => "text/x-vcard", + "vcg" => "application/vnd.groove-vcard", + "vcs" => "text/x-vcalendar", + "vcx" => "application/vnd.vcx", + "vis" => "application/vnd.visionary", + "viv" => "video/vnd.vivo", + "vsd" => "application/vnd.visio", + "vsf" => "application/vnd.vsf", + "vtu" => "model/vnd.vtu", + "vxml" => "application/voicexml+xml", + "wad" => "application/x-doom", + "wav" => "audio/x-wav", + "wax" => "audio/x-ms-wax", + "wbmp" => "image/vnd.wap.wbmp", + "wbs" => "application/vnd.criticaltools.wbs+xml", + "wbxml" => "application/vnd.wap.wbxml", + "weba" => "audio/webm", + "webm" => "video/webm", + "webp" => "image/webp", + "wg" => "application/vnd.pmi.widget", + "wgt" => "application/widget", + "wm" => "video/x-ms-wm", + "wma" => "audio/x-ms-wma", + "wmd" => "application/x-ms-wmd", + "wmf" => "application/x-msmetafile", + "wml" => "text/vnd.wap.wml", + "wmlc" => "application/vnd.wap.wmlc", + "wmls" => "text/vnd.wap.wmlscript", + "wmlsc" => "application/vnd.wap.wmlscriptc", + "wmv" => "video/x-ms-wmv", + "wmx" => "video/x-ms-wmx", + "wmz" => "application/x-ms-wmz", + "woff" => "application/x-font-woff", + "woff2" => "application/font-woff2", + "wpd" => "application/vnd.wordperfect", + "wpl" => "application/vnd.ms-wpl", + "wps" => "application/vnd.ms-works", + "wqd" => "application/vnd.wqd", + "wri" => "application/x-mswrite", + "wrl" => "model/vrml", + "wsdl" => "application/wsdl+xml", + "wspolicy" => "application/wspolicy+xml", + "wtb" => "application/vnd.webturbo", + "wvx" => "video/x-ms-wvx", + "x3d" => "application/vnd.hzn-3d-crossword", + "xap" => "application/x-silverlight-app", + "xar" => "application/vnd.xara", + "xbap" => "application/x-ms-xbap", + "xbd" => "application/vnd.fujixerox.docuworks.binder", + "xbm" => "image/x-xbitmap", + "xdf" => "application/xcap-diff+xml", + "xdm" => "application/vnd.syncml.dm+xml", + "xdp" => "application/vnd.adobe.xdp+xml", + "xdssc" => "application/dssc+xml", + "xdw" => "application/vnd.fujixerox.docuworks", + "xenc" => "application/xenc+xml", + "xer" => "application/patch-ops-error+xml", + "xfdf" => "application/vnd.adobe.xfdf", + "xfdl" => "application/vnd.xfdl", + "xhtml" => "application/xhtml+xml", + "xif" => "image/vnd.xiff", + "xlam" => "application/vnd.ms-excel.addin.macroenabled.12", + "xls" => "application/vnd.ms-excel", + "xlsb" => "application/vnd.ms-excel.sheet.binary.macroenabled.12", + "xlsm" => "application/vnd.ms-excel.sheet.macroenabled.12", + "xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "xltm" => "application/vnd.ms-excel.template.macroenabled.12", + "xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + "xml" => "application/xml", + "xo" => "application/vnd.olpc-sugar", + "xop" => "application/xop+xml", + "xpi" => "application/x-xpinstall", + "xpm" => "image/x-xpixmap", + "xpr" => "application/vnd.is-xpr", + "xps" => "application/vnd.ms-xpsdocument", + "xpw" => "application/vnd.intercon.formnet", + "xslt" => "application/xslt+xml", + "xsm" => "application/vnd.syncml+xml", + "xspf" => "application/xspf+xml", + "xul" => "application/vnd.mozilla.xul+xml", + "xwd" => "image/x-xwindowdump", + "xyz" => "chemical/x-xyz", + "yaml" => "text/yaml", + "yang" => "application/yang", + "yin" => "application/yin+xml", + "zaz" => "application/vnd.zzazz.deck+xml", + "zip" => "application/zip", + "zir" => "application/vnd.zul", + "zmm" => "application/vnd.handheld-entertainment+xml" + ); + + + //$extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); + if (isset($mime_type[$extension])) { + return $mime_type[$extension]; + } else { + //throw new Exception("Unknown file type"); + return "text/plain"; + } + + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommandercp.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommandercp.php new file mode 100644 index 00000000..ee37bd33 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommandercp.php @@ -0,0 +1,24 @@ +set($action, $user->authorise($action, $assetName)); + } + return $result; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderedit.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderedit.php new file mode 100644 index 00000000..c9595fc6 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderedit.php @@ -0,0 +1,24 @@ +set($action, $user->authorise($action, $assetName)); + } + return $result; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderresponse.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderresponse.php new file mode 100644 index 00000000..c92ba899 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/phocacommanderresponse.php @@ -0,0 +1,29 @@ + '1', + 'message' => '' . $message . ''); + return json_encode($response); + } else { + $response = array( + 'status' => '0', + 'error' => '' . $message . ''); + return json_encode($response); + } + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/helpers/renderadmin.php b/packages/phocacommander/administrator/components/com_phocacommander/helpers/renderadmin.php new file mode 100644 index 00000000..9c3f02ed --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/helpers/renderadmin.php @@ -0,0 +1,106 @@ +' + .'' + .JHTML::_('image', $imgUrl . $image, $text ) + .'
'.$text.'
'. "\n"; + } + + public static function getLinks() { + $app = JFactory::getApplication(); + $option = $app->input->get('option'); + $oT = strtoupper($option); + + $links = array(); + switch ($option) { + case 'com_phocacommander': + $links[] = array('Phoca Commander site', 'http://www.phoca.cz/phocacommander'); + $links[] = array('Phoca Commander documentation site', 'http://www.phoca.cz/documentation'); + $links[] = array('Phoca Commander download site', 'http://www.phoca.cz/download'); + break; + + } + + $links[] = array('Phoca News', 'http://www.phoca.cz/news'); + $links[] = array('Phoca Forum', 'http://www.phoca.cz/forum'); + + $components = array(); + $components[] = array('Phoca Gallery','phocagallery', 'pg'); + $components[] = array('Phoca Guestbook','phocaguestbook', 'pgb'); + $components[] = array('Phoca Download','phocadownload', 'pd'); + $components[] = array('Phoca Documentation','phocadocumentation', 'pdc'); + $components[] = array('Phoca Favicon','phocafavicon', 'pfv'); + $components[] = array('Phoca SEF','phocasef', 'psef'); + $components[] = array('Phoca PDF','phocapdf', 'ppdf'); + $components[] = array('Phoca Restaurant Menu','phocamenu', 'prm'); + $components[] = array('Phoca Maps','phocamaps', 'pm'); + $components[] = array('Phoca Font','phocafont', 'pf'); + $components[] = array('Phoca Email','phocaemail', 'pe'); + $components[] = array('Phoca Install','phocainstall', 'pi'); + $components[] = array('Phoca Template','phocatemplate', 'pt'); + $components[] = array('Phoca Panorama','phocapanorama', 'pp'); + $components[] = array('Phoca Commander','phocacommander', 'pcm'); + $components[] = array('Phoca Photo','phocaphoto', 'ph'); + $components[] = array('Phoca Cart','phocacart', 'pc'); + + + + $banners = array(); + $banners[] = array('Phoca Restaurant Menu','phocamenu', 'prm'); + + $o = ''; + $o .= '

 

'; + $o .= '

'.JText::_($oT.'_USEFUL_LINKS'). '

'; + $o .= ''; + + $o .= '
'; + $o .= '

 

'; + $o .= '

'.JText::_($oT.'_USEFUL_TIPS'). '

'; + + $m = mt_rand(0, 10); + if ((int)$m > 0) { + $o .= '
'; + $num = range(0,(count($components) - 1 )); + shuffle($num); + for ($i = 0; $i<3; $i++) { + $numO = $num[$i]; + $o .= '
'; + $o .= '
'.JHTML::_('image', 'media/'.$option.'/images/administrator/icon-box-'.$components[$numO][2].'.png', ''). '
'; + $o .= '
'.$components[$numO][0].'
'; + $o .= '
'; + } + $o .= '
'; + $o .= '
'; + } else { + $num = range(0,(count($banners) - 1 )); + shuffle($num); + $numO = $num[0]; + $o .= '
'.JHTML::_('image', 'media/'.$option.'/images/administrator/b-'.$banners[$numO][2].'.png', ''). '
'; + + } + + $o .= '

 

'; + $o .= '

'.JText::_($oT.'_PLEASE_READ'). '

'; + $o .= '
'.JText::_($oT.'_PHOCA_NEEDS_YOUR_HELP'). '
'; + + $o .= '
'; + return $o; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/index.html b/packages/phocacommander/administrator/components/com_phocacommander/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/index.html b/packages/phocacommander/administrator/components/com_phocacommander/install/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/install/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/script.php b/packages/phocacommander/administrator/components/com_phocacommander/install/script.php new file mode 100644 index 00000000..a7eb090a --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/install/script.php @@ -0,0 +1,37 @@ +enqueueMessage($message, 'message'); + $parent->getParent()->setRedirectURL('index.php?option=com_phocacommander'); + } + function uninstall($parent) {} + + function update($parent) { + + + $msg = JText::_('COM_PHOCACOMMANDER_UPDATE_TEXT'); + $msg .= ' (' . JText::_('COM_PHOCACOMMANDER_VERSION'). ': ' . $parent->get('manifest')->version . ')'; + + $msg .= '
'. $message; + $app = JFactory::getApplication(); + $app->enqueueMessage($msg); + $app->redirect(JRoute::_('index.php?option=com_phocacommander')); + } + + function preflight($type, $parent) {} + + function postflight($type, $parent) {} +} \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/sql/index.html b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/index.html b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/install.utf8.sql b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/install.utf8.sql new file mode 100644 index 00000000..e69de29b diff --git a/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/uninstall.utf8.sql b/packages/phocacommander/administrator/components/com_phocacommander/install/sql/mysql/uninstall.utf8.sql new file mode 100644 index 00000000..e69de29b diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/fields/index.html b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocahead.php b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocahead.php new file mode 100644 index 00000000..7ba4ca78 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocahead.php @@ -0,0 +1,48 @@ +'; + $phocaImage = ( (string)$this->element['phocaimage'] ? $this->element['phocaimage'] : '' ); + $image = ''; + + if ($phocaImage != ''){ + $image = JHTML::_('image', $ti . $phocaImage, '' ); + } + + if ($this->element['default']) { + if ($image != '') { + return '
' + .'
'. $image.' '. JText::_($this->element['default']) . '
' + .'
'; + } else { + return '
' + .''. JText::_($this->element['default']) . '' + .'
'; + } + } else { + return parent::getLabel(); + } + echo '
'; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocaheadexpert.php b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocaheadexpert.php new file mode 100644 index 00000000..1db3c19f --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/fields/phocaheadexpert.php @@ -0,0 +1,51 @@ +'; + $phocaImage = ( (string)$this->element['phocaimage'] ? $this->element['phocaimage'] : '' ); + $image = ''; + + if ($phocaImage != ''){ + $image = JHTML::_('image', $ti . $phocaImage, '' ); + } + + if ($this->element['default']) { + if ($image != '') { + return '
' + .'
'. $image.' '. JText::_($this->element['default']) . '
' + .'
'; + } else { + return '
' + .''. JText::_($this->element['default']) . '' + .'
'; + } + } else { + return parent::getLabel(); + } + echo '
'; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/forms/index.html b/packages/phocacommander/administrator/components/com_phocacommander/models/forms/index.html new file mode 100644 index 00000000..42682b47 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/forms/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/forms/phocacommanderedit.xml b/packages/phocacommander/administrator/components/com_phocacommander/models/forms/phocacommanderedit.xml new file mode 100644 index 00000000..5929d38f --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/forms/phocacommanderedit.xml @@ -0,0 +1,9 @@ + +
+
+ + + +
+ +
diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/index.html b/packages/phocacommander/administrator/components/com_phocacommander/models/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommandercp.php b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommandercp.php new file mode 100644 index 00000000..83f76139 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommandercp.php @@ -0,0 +1,41 @@ +getUserState('cv'); + $panelA = $this->state->get('cv'); + + if ($panelA == '') { + $panelA = $app->getUserStateFromRequest('cv', 'panelg','acd', 'string'); + } + + +$this->setState('cv', $panelA); +//$panelc = $app->getUserStateFromRequest('cv', 'panelg'); + + print_r($this->state);*/ + $app->getUserStateFromRequest( 'com_phocacommander.cv', 'panelg', 'baf', 'string' ); + + } + + + + +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderedit.php b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderedit.php new file mode 100644 index 00000000..22745862 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderedit.php @@ -0,0 +1,110 @@ +source = file_get_contents(JPATH_ROOT.'/'.$fileName); + } else { + $this->setError(JText::_('COM_PHOCACOMMANDER_FILE_DOES_NOT_EXIST')); + } + return $item; + } + + public function getForm($data = array(), $loadData = true) { + $app = JFactory::getApplication(); + $form = $this->loadForm('com_phocagallery.phocacommanderedit', 'phocacommanderedit', array('control' => 'jform', 'load_data' => $loadData)); + if (empty($form)) { + return false; + } + return $form; + } + + public function save($data) { + jimport('joomla.filesystem.file'); + $app = JFactory::getApplication(); + $paramsC = JComponentHelper::getParams('com_phocacommander'); + $edit_not_writable = $paramsC->get( 'edit_not_writable', 1 ); + + if ($data['id'] == 1) { + if ($data['filename'] != '') { + $fileName = base64_decode($data['filename']); + $filePath = JPath::clean(JPATH_ROOT . '/' . $fileName); + + if (JFile::exists($filePath)) { + //JClientHelper::setCredentialsFromRequest('ftp'); + //$ftp = JClientHelper::getCredentials('ftp'); + $user = get_current_user(); + //$basePermissions = JPath::getPermissions($filePath); + //$basePermissions = fileperms($filePath); + $basePermissions = substr(sprintf('%o', fileperms($filePath)), -4); + chown($filePath, $user); + JPath::setPermissions($filePath, '0644'); + + + + if (!is_writable($filePath) && $edit_not_writable == 0) { + $app->enqueueMessage(JText::_('COM_PHOCACOMMANDER_ERROR_FILE_NOT_WRITABLE'), 'warning'); + $app->enqueueMessage(JText::_('COM_PHOCACOMMANDER_FILE_PERMISSIONS (' . JPath::getPermissions($filePath) .')'), 'warning'); + + if (!JPath::isOwner($filePath)) + { + $app->enqueueMessage(JText::_('COM_PHOCACOMMANDER_CHECK_FILE_OWNERSHIP'), 'warning'); + } + return false; + } + + $return = JFile::write($filePath, $data['source']); + + /* + // Test solution, if problems it can be set to: + if (!$return) { + $this->setError(JText::sprintf('COM_PHOCADOWNLOAD_ERROR_FAILED_TO_SAVE_FILENAME', $fileName)); + return false; + } + */ + + if (JPath::isOwner($filePath) && !JPath::setPermissions($filePath, $basePermissions)) { + + $app->enqueueMessage(JText::_('COM_PHOCACOMMANDER_ERROR_SOURCE_FILE_NOT_UNWRITABLE'), 'error'); + return false; + } elseif (!$return){ + $app->enqueueMessage(JText::sprintf('COM_PHOCACOMMANDER_ERROR_FAILED_TO_SAVE_FILENAME', $fileName), 'error'); + return false; + } + + + } + } + } + return true; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderfilesa.php b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderfilesa.php new file mode 100644 index 00000000..46eac304 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/models/phocacommanderfilesa.php @@ -0,0 +1,75 @@ +context.$panel); + if ($direction == '') { + $direction = $app->getUserStateFromRequest( $this->context.$panel.'direction', 'direction' ); + } else { + $direction = $app->getUserStateFromRequest( $this->context.$panel.'direction', 'direction', $direction, 'string' ); + } + + $this->setState('direction', $direction); + + if ($ordering == '') { + $ordering = $app->getUserStateFromRequest($this->context.$panel.'.ordering', 'ordering'); + } else { + $ordering = $app->getUserStateFromRequest($this->context.$panel.'.ordering', 'ordering', $ordering, 'string'); + } + + $this->setState('ordering', $ordering); + + if ($panelA == '') { + $panelA = $app->getUserStateFromRequest($this->context.$panel.'.panela', 'panela'); + } else { + $panelA = $app->getUserStateFromRequest($this->context.$panel.'.panela', 'panela', $panelA, 'string'); + } + + $this->setState('panela', $panelA); + + if ($panelB == '') { + $panelB = $app->getUserStateFromRequest($this->context.$panel.'.panelb', 'panelb'); + } else { + $panelB = $app->getUserStateFromRequest($this->context.$panel.'.panelb', 'panelb', $panelB, 'string'); + } + + $this->setState('panelb', $panelB); + }*/ + + public function sortItems (&$array, $key, $dir = 'ASC') { + $sorter=array(); + $ret=array(); + reset($array); + foreach ($array as $ii => $va) { + $sorter[$ii]=$va[$key]; + } + if ($dir == 'ASC') { + asort($sorter); + } else { + arsort($sorter); + } + + foreach ($sorter as $ii => $va) { + $ret[$ii]=$array[$ii]; + } + $array=$ret; + } + + +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.php b/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.php new file mode 100644 index 00000000..12680b3c --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.php @@ -0,0 +1,29 @@ +authorise('core.manage', 'com_phocacommander')) { + return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); +} + +require_once( JPATH_COMPONENT.'/controller.php' ); +jimport( 'joomla.filesystem.folder' ); +jimport( 'joomla.filesystem.file' ); +require_once( JPATH_COMPONENT.'/helpers/phocacommander.php' ); +require_once( JPATH_COMPONENT.'/helpers/phocacommanderresponse.php' ); +require_once( JPATH_COMPONENT.'/helpers/fileupload.php' ); +require_once( JPATH_COMPONENT.'/helpers/fileuploadmultiple.php' ); +require_once( JPATH_COMPONENT.'/helpers/renderadmin.php' ); + + +jimport('joomla.application.component.controller'); +$controller = JControllerLegacy::getInstance('PhocaCommanderCp'); +$controller->execute(JFactory::getApplication()->input->get('task')); +$controller->redirect(); +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.xml b/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.xml new file mode 100644 index 00000000..69ee69ef --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/phocacommander.xml @@ -0,0 +1,75 @@ + + + com_phocacommander + Jan Pavelka (www.phoca.cz) + 06/11/2016 + + www.phoca.cz + Jan Pavelka + GNU/GPL + 3.0.2 + Phoca Commander + install/script.php + + + + install/sql/mysql/install.utf8.sql + + + + + + install/sql/mysql/uninstall.utf8.sql + + + + + + + + + index.html + + + + index.html + css + images + js + + + + language/en-GB/en-GB.com_phocacommander.ini + language/en-GB/en-GB.com_phocacommander.sys.ini + + + + COM_PHOCACOMMANDER + + COM_PHOCACOMMANDER + COM_PHOCACOMMANDER_INFO + + + + access.xml + config.xml + controller.php + index.html + phocacommander.php + phocacommander.xml + controllers + help + helpers + install + models + tables + views + + + + language/en-GB/en-GB.com_phocacommander.ini + language/en-GB/en-GB.com_phocacommander.sys.ini + + + + diff --git a/packages/phocacommander/administrator/components/com_phocacommander/tables/index.html b/packages/phocacommander/administrator/components/com_phocacommander/tables/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/tables/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/default.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/default.php new file mode 100644 index 00000000..10e91140 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/default.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/view.json.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/view.json.php new file mode 100644 index 00000000..5a2334cb --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderactiona/view.json.php @@ -0,0 +1,726 @@ +t['pathfrom'] = $app->input->get( 'pathfrom', '', 'string' ); + $this->t['pathwhere'] = $app->input->get( 'pathwhere', '', 'string' ); + $this->t['selfiles'] = $app->input->get( 'selfiles', array(), 'array' ); + $this->t['task'] = $app->input->get( 'task', '', 'string' ); + $this->t['newitem'] = $app->input->get( 'newitem', '', 'string' ); + $this->t['renameitem'] = $app->input->get( 'renameitem', '', 'string' ); + $this->t['newattrib'] = $app->input->get( 'newattrib', '', 'string' ); + $this->t['option'] = $app->input->get( 'option', '', 'string' ); + $this->t['newvalue'] = $app->input->get( 'newvalue', '', 'string' );// Can be renamed folder, checkbox for overwritten, ... + //$this->t['activepanel'] = $app->input->get( 'activepanel', '', 'string' ); + + $paramsC = JComponentHelper::getParams('com_phocacommander'); + $this->p['create_index'] = $paramsC->get( 'create_index', 1 ); + + $r = new PhocaCommanderResponse(); + + if (!JRequest::checkToken('request')) { + echo $r->_('0', JText::_('JINVALID_TOKEN'));return; + } + if ($this->t['option'] != 'com_phocacommander') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALID_REQUEST'));return; + } + if ($this->t['task'] == '') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALID_TASK'));return; + } + + if (base64_decode($this->t['pathfrom']) != '') { + $pathFrom = JPATH_ROOT . '/'. base64_decode($this->t['pathfrom']) . '/'; + } else { + $pathFrom = JPATH_ROOT . '/'; + } + if (base64_decode($this->t['pathwhere']) != '') { + $pathWhere = JPATH_ROOT . '/'. base64_decode($this->t['pathwhere']) . '/'; + } else { + $pathWhere = JPATH_ROOT . '/'; + } + + $folders = array(); + $files = array(); + $i = 0; + if (!empty($this->t['selfiles'])) { + foreach($this->t['selfiles'] as $k => $v) { + if ($v != '') { + $e = explode('|', $v); + if (isset($e[0]) && isset($e[1]) && $e[0] == 'folder') { + $folders[$i] = base64_decode($e[1]); + } + if (isset($e[0]) && isset($e[1]) && $e[0] == 'file') { + $files[$i] = base64_decode($e[1]); + } + } + $i++; + } + } + + /*$newValue = $pathFrom . $this->t['newvalue']; + $oldValue = $pathFrom . $files[0]; + */ + /*$response = array( + 'status' => '1', + 'message' => ''.$this->t['newvalue'].' - :: '.$this->t['pathfrom'].' - '.$this->t['pathwhere'].''); + echo json_encode($response); + return;*/ + + $o = ''; // TODO - remove temp + // RENAME + if ($this->t['task'] == 'rename') { + if ($this->t['newvalue'] == '') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND'));return; + } else { + $newValue = $pathFrom . $this->t['newvalue']; + if (isset($folders[0]) && $folders[0] != '') { + $oldValue = $pathFrom . $folders[0]; + if ($oldValue == $newValue) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_NAME_SAME_OLD'));return; + } + if (JFolder::exists($newValue)) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NAME_EXISTS'));return; + } + + // TODO + // test php rename on possible OSs + // + if (JFolder::exists($oldValue)) { + if (JFolder::move($oldValue, $newValue)) { + if (JFile::move($oldValue, $newValue)) { + echo $r->_('1', JText::_('COM_PHOCACOMMANDER_FOLDER_RENAMED'));return; + } + } + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_FOLDER_NOT_EXIST'));return; + } + } else if (isset($files[0]) && $files[0] != '') { + $oldValue = $pathFrom . $files[0]; + if ($oldValue == $newValue) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_NAME_SAME_OLD'));return; + } + if (JFile::exists($newValue)) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_FILE_NAME_EXISTS'));return; + } + + if (JFile::exists($oldValue)) { + if (JFile::move($oldValue, $newValue)) { + echo $r->_('1', JText::_('COM_PHOCACOMMANDER_FILE_RENAMED'));return; + } + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_FILE_NOT_EXIST'));return; + } + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_FILE_OR_FOLDER_FOUND'));return; + } + } + } + + // COPY, MOVE + $countFile = 0; + $countFolder = 0; + $countFileNo = 0; + $countFolderNo = 0; + $msg = array(); + $message = ''; + $overwrite = 0; + if ($this->t['task'] == 'copy' || $this->t['task'] == 'move') { + + $txtCM = 'COPIED'; + $function = 'copy'; + if ($this->t['task'] == 'move') { + $txtCM = 'MOVED'; + $function = 'move'; + } + + if ($this->t['newvalue'] == 'true') { + $overwrite = true; + } + if (!empty($folders)) { + if ($pathFrom == $pathWhere) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_SOURCE_SAME_DESTINATION'));return; + } + + + foreach($folders as $k => $v) { + + + $pos = true; + $fS = JPath::clean($pathFrom . $v); + $fD = JPath::clean($pathWhere); + $pos = strpos($fD, $fS); + + if ($pos === false) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFolder::exists($srcValue) && JFolder::exists($pathWhere)) { + + if(!$overwrite && JFolder::exists($pathWhere . $v)) { + $msg[] = $v . ' - '.JText::_('COM_PHOCACOMMANDER_FOLDER_NOT_OVERWRITTEN'); + $countFolderNo++; + } else { + if (JFolder::copy($srcValue, $pathWhere . $v, '', $overwrite)) { + $countFolder++; + if ($this->t['task'] == 'move') { + JFolder::delete($srcValue); + } + } else { + $countFolderNo++; + } + } + } + } + } else { + $countFolderNo++; + $msg[] = $v . ' - '.JText::_('COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_'.$txtCM.'_OWN_SUBFOLDER'); + } + } + $successFo = 0; + if ($countFolder > 0 && $countFolderNo == 0) { + if ($countFolder == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_'.$txtCM); + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_'.$txtCM); + } + $successFo = 1; + } else if ($countFolderNo > 0 && $countFolder == 0) { + if ($countFolderNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_NOT_'.$txtCM); + } else { + //$msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FOLDERS_'.$txtCM); + } + $successFo = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_'.$txtCM); + $msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_'.$txtCM); + $successFo = 0; + } + } else { + $successFo = 1; + } + + if (!empty($files)) { + if ($pathFrom == $pathWhere) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_SOURCE_SAME_DESTINATION'));return; + } + foreach($files as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFile::exists($srcValue) && JFolder::exists($pathWhere)) { + if ($overwrite == 0) { + $possibleNewFile = JPath::clean($pathWhere .$v); + if(JFile::exists($possibleNewFile)) { + $msg[] = $v . ' - '.JText::_('COM_PHOCACOMMANDER_FILE_NOT_OVERWRITTEN'); + $countFileNo++; + } else { + if (JFile::$function($srcValue, $pathWhere . $v)) { + $countFile++; + } else { + $countFileNo++; + } + } + } else { + if (JFile::$function($srcValue, $pathWhere . $v)) { + $countFile++; + } else { + $countFileNo++; + } + } + } + } + } + $successFi = 0; + if ($countFile > 0 && $countFileNo == 0) { + if ($countFile == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_'.$txtCM); + } else { + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_'.$txtCM); + } + $successFi = 1; + } else if ($countFileNo > 0 && $countFile == 0) { + if ($countFileNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_NOT_'.$txtCM); + } else { + //$msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FILES_'.$txtCM); + } + $successFi = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FILES_'.$txtCM); + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_'.$txtCM); + $msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_'.$txtCM); + $successFi = 0; + } + } else { + $successFi = 1; + } + + + $status = 0; + if (count($msg) > 1) { + $message = implode ('
', $msg); + } else { + $message = $msg[0]; + } + + if ($successFi == 1 && $successFo == 1) { + $status = 1; + } + echo $r->_($status, $message);return; + + } + + // NEW FOLDER + if ($this->t['task'] == 'new') { + if ($this->t['newvalue'] == '') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND'));return; + } else { + $newValue = JPath::clean($pathFrom . $this->t['newvalue']); + if (JFolder::exists($newValue)) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NAME_EXISTS'));return; + } else { + if(JFolder::create($newValue)) { + if($this->p['create_index'] == 1) { + $data = "\n\n\n"; + JFile::write($newValue."/index.html", $data); + } + echo $r->_('1', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_CREATED'));return; + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NAME_EXISTS'));return; + } + } + } + } + + + // DELETE + $countFile = 0; + $countFolder = 0; + $countFileNo = 0; + $countFolderNo = 0; + $msg = array(); + $message = ''; + if ($this->t['task'] == 'delete') { + if (!empty($folders)) { + + foreach($folders as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFolder::exists($srcValue)) { + if (JFolder::delete($srcValue)) { + $countFolder++; + } else { + $countFolderNo++; + } + } + } + } + + $successFo = 0; + if ($countFolder > 0 && $countFolderNo == 0) { + if ($countFolder == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_DELETED'); + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_DELETED'); + } + $successFo = 1; + } else if ($countFolderNo > 0 && $countFolder == 0) { + if ($countFolderNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_NOT_DELETED'); + } else { + //$msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FOLDERS_DELETED'); + } + $successFo = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_DELETED'); + $msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_DELETED'); + $successFo = 0; + } + } else { + $successFo = 1; + } + + if (!empty($files)) { + foreach($files as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFile::exists($srcValue)) { + if (JFile::delete($srcValue)) { + $countFile++; + } else { + $countFile++; + } + } + } + } + + $successFi = 0; + if ($countFile > 0 && $countFileNo == 0) { + if ($countFile == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_DELETED'); + } else { + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_DELETED'); + } + $successFi = 1; + } else if ($countFileNo > 0 && $countFile == 0) { + if ($countFileNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_NOT_DELETED'); + } else { + //$msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FILES_DELETED'); + } + $successFi = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FILES_'.$txtCM); + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_DELETED'); + $msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_DELETED'); + $successFi = 0; + } + } else { + $successFi = 1; + } + + $status = 0; + if (count($msg) > 1) { + $message = implode ('
', $msg); + } else { + $message = $msg[0]; + } + + if ($successFi == 1 && $successFo == 1) { + $status = 1; + } + echo $r->_($status, $message);return; + } + + + // UNPACK + $msg = array(); + $message = ''; + $overwrite = 0; + if ($this->t['task'] == 'unpack') { + if (isset($files[0]) && $files[0] != '') { + /*if (JFile::getExt($files[0]) != 'zip') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_NOT_UNPACKED'));return; + }*/ + + if ($this->t['newvalue'] == 'true') { + $overwrite = true; + } + $archFile = $pathFrom . $files[0]; + if (JFile::exists($archFile)){ + if (JFolder::exists($pathWhere)) { + + $ext = JFile::getExt($files[0]); + $ext = strtolower($ext); + if ($ext == 'zip' || $ext == 'tar' || $ext == 'gz' || $ext == 'gzip' || $ext == 'bz2' || $ext == 'bzip2' ) { + + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_NOT_ARCHIVE'));return; + } + + $fileExists = 0; + if ($ext == 'zip') { + $zip = new ZipArchive; + if ($zip->open(JPath::clean($archFile)) === true) { + for ($i = 0; $i < $zip->numFiles; $i++) { + $entry = $zip->getNameIndex($i); + if (JFile::exists(JPath::clean($pathWhere . '/' . $entry))) { + $fileExists = 1; + break; + } + } + } + } + + if ($fileExists == 1 && $overwrite == 0) { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_CANNOT_BE_UNPACKED_FILE_EXISTS'));return; + } else { + try + { + if(JArchive::extract(JPath::clean($archFile), JPath::clean($pathWhere))) { + echo $r->_('1', JText::_('COM_PHOCACOMMANDER_FILE_UNPACKED'));return; + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_NOT_UNPACKED'));return; + } + } + catch (Exception $e) + { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_NOT_UNPACKED'));return; + } + + + /*if($zip->extractTo(JPath::clean($pathWhere))) { + echo $r->_('1', JText::_('COM_PHOCACOMMANDER_FILE_UNPACKED'));return; + } else { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_FILE_NOT_UNPACKED'));return; + }*/ + } + } + } + } + } + + //ATTRIBUTES + // DELETE + $countFile = 0; + $countFolder = 0; + $countFileNo = 0; + $countFolderNo = 0; + $msg = array(); + $message = ''; + if ($this->t['task'] == 'attributes') { + + if ($this->t['newvalue'] == '') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND'));return; + } else { + + if (!empty($folders)) { + + foreach($folders as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFolder::exists($srcValue)) { + + $zero = substr((string)$this->t['newvalue'], 0, 1); + if ($zero === '0') { + $perm = (string)$this->t['newvalue']; + } else { + $perm = '0'.(string)$this->t['newvalue']; + } + + if (PhocaCommanderHelper::setChmod($srcValue, $perm)) { + $countFolder++; + } else { + $countFolderNo++; + } + } + } + } + + $successFo = 0; + if ($countFolder > 0 && $countFolderNo == 0) { + if ($countFolder == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_CHMOD_CHANGED'); + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_CHMOD_CHANGED'); + } + $successFo = 1; + } else if ($countFolderNo > 0 && $countFolder == 0) { + if ($countFolderNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FOLDER_NOT_CHMOD_CHANGED'); + } else { + //$msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FOLDERS_CHMOD_CHANGED'); + } + $successFo = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FOLDERS_'.$txtCM); + $msg[] = $countFolder . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_CHMOD_CHANGED'); + $msg[] = $countFolderNo . ' ' . JText::_('COM_PHOCACOMMANDER_FOLDERS_NOT_CHMOD_CHANGED'); + $successFo = 0; + } + } else { + $successFo = 1; + } + + if (!empty($files)) { + foreach($files as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFile::exists($srcValue)) { + + $zero = substr((string)$this->t['newvalue'], 0, 1); + if ($zero === '0') { + $perm = (string)$this->t['newvalue']; + } else { + $perm = '0'.(string)$this->t['newvalue']; + } + + if ($a = PhocaCommanderHelper::setChmod($srcValue, $perm)) { + + $countFile++; + } else { + $countFile++; + } + + } + } + } + + $successFi = 0; + if ($countFile > 0 && $countFileNo == 0) { + if ($countFile == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_CHMOD_CHANGED'); + } else { + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_CHMOD_CHANGED'); + } + $successFi = 1; + } else if ($countFileNo > 0 && $countFile == 0) { + if ($countFileNo == 1) { + $msg[] = JText::_('COM_PHOCACOMMANDER_FILE_NOT_CHMOD_CHANGED'); + } else { + //$msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_'.$txtCM); + $msg[] = JText::_('COM_PHOCACOMMANDER_NO_FILES_CHMOD_CHANGED'); + } + $successFi = 0; + } else { + //$msg[] = JText::_('COM_PHOCACOMMANDER_NO_ALL_FILES_'.$txtCM); + $msg[] = $countFile . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_CHMOD_CHANGED'); + $msg[] = $countFileNo . ' ' . JText::_('COM_PHOCACOMMANDER_FILES_NOT_CHMOD_CHANGED'); + $successFi = 0; + } + } else { + $successFi = 1; + } + + $status = 0; + if (count($msg) > 1) { + $message = implode ('
', $msg); + } else { + $message = $msg[0]; + } + + if ($successFi == 1 && $successFo == 1) { + $status = 1; + } + echo $r->_($status, $message);return; + } + } + + + + + + + + + + + + + // PACK + if ($this->t['task'] == 'pack') { + + if ($this->t['newvalue'] == '' || $this->t['newvalue'] == '.zip') { + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND_OR_WRONG_FILENAME_SET'));return; + } else { + + $findme = '.zip'; + $pos = strpos($this->t['newvalue'], $findme); + if ($pos === false) { + $this->t['newvalue'] = $this->t['newvalue'] . '.zip'; + } + + $newValue = JPath::clean($pathWhere . $this->t['newvalue']); + + if (JFile::exists($newValue)) { + echo $r->_('0', $this->t['newvalue'] . ' - '.JText::_('COM_PHOCACOMMANDER_ERROR_FILE_EXISTS'));return; + } else { + + $data = ''; + if(!JFile::write($newValue, $data)) { + echo $r->_('0', $this->t['newvalue'] . ' - '.JText::_('COM_PHOCACOMMANDER_ERROR_FILE_COULD_NOT_BE_CREATED') . '
' . JText::_('COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP'));return; + } + + + // PACK + //$msg = array(); + //$message = ''; + $fToPack = array(); + $fToPackJ = array();// join of JFolder::files + selected files + + $zip = new ZipArchive; + $zip->open($newValue, ZipArchive::CREATE); + $i = 0; + if (!empty($folders)) { + + foreach($folders as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFolder::exists($srcValue)) { + $fToPack[$i] = JFolder::files($srcValue, '.', true, true); + $i++; + } + } + } + } + + $i = 0; + if (!empty($fToPack)) { + foreach ($fToPack as $k => $v) { + if (is_array($v) && (!empty($v))) { + foreach($v as $k2 => $v2) { + //$fToPackJ[$i] = $v2; + $rel1 = str_replace(JPATH_ROOT . '/', '', $v2); + $zip->addFile($v2, $rel1); + $i++; + } + } else { + //$fToPackJ[$i] = $v; + $rel2 = str_replace(JPATH_ROOT . '/', '', $v); + $zip->addFile($v, $rel2); + $i++; + } + } + } + + if (!empty($files)) { + foreach($files as $k => $v) { + if (isset($v) && $v != '') { + $srcValue = $pathFrom . $v; + if (JFile::exists($srcValue)) { + //$fToPackJ[$i] = $srcValue; + $rel3 = str_replace(JPATH_ROOT . '/', '', $srcValue); + + $zip->addFile($srcValue, $rel3); + $i++; + } + } + } + } + + if ($zip->close()) { + echo $r->_('1', $this->t['newvalue'] . ' - '.JText::_('COM_PHOCACOMMANDER_ZIP_PACKAGE_CREATED'));return; + } else { + echo $r->_('0', $this->t['newvalue'] . ' - '.JText::_('COM_PHOCACOMMANDER_ERROR_ZIP_FILE_COULD_NOT_BE_CREATED') . '
' . JText::_('COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP'));return; + } + } + } + } + + + + + + + + + //$o .= $oldValue . "
". $newValue; + echo $r->_('0', JText::_('COM_PHOCACOMMANDER_WRONG_REQUEST'));return; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default.php new file mode 100644 index 00000000..eba3aa45 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default.php @@ -0,0 +1,888 @@ +t['url'] = 'index.php?option=com_phocacommander&view=phocacommanderfilesa&format=json&tmpl=component&'. JSession::getFormToken().'=1'; +$this->t['urlaction'] = 'index.php?option=com_phocacommander&view=phocacommanderactiona&format=json&tmpl=component&'. JSession::getFormToken().'=1'; +$this->t['urledit'] = 'index.php?option=com_phocacommander&task=phocacommanderedit.edit&'. JSession::getFormToken().'=1'; +$this->t['urladmin'] = 'index.php'; + + + +$session = JFactory::getSession(); +$w = $session->get('ww', false, 'com_phocacommander.phocacommander'); +?> + + + + +
+
+
+
+
+
+
+
+
Powered by Phoca Commander |
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + +
+ +
+
(t['uploadmaxsizeread'] ?>)
+ loadTemplate('multipleupload'); ?> +
+ + diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default_multipleupload.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default_multipleupload.php new file mode 100644 index 00000000..8317bca2 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/default_multipleupload.php @@ -0,0 +1,18 @@ +'; +echo $this->t['mu_response_msg'] ; +echo '
'; +if ($this->t['ftp']) {echo PhocaDownloadFileUpload::renderFTPaccess();} +echo ''.JText::_('COM_PHOCACOMMANDER_SELECT_FILES').'. '.JText::_('COM_PHOCACOMMANDER_ADD_FILES_TO_UPLOAD_QUEUE_AND_CLICK_START_BUTTON').''; +echo $this->t['mu_output']; +echo '
'; +echo ''; +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/view.html.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/view.html.php new file mode 100644 index 00000000..55ac768d --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommandercp/view.html.php @@ -0,0 +1,221 @@ +t['experimental_zip'] = $paramsC->get( 'experimental_zip', 0 ); + $this->t['display_upload_button'] = $paramsC->get( 'display_upload_button', 1 ); + $this->t['display_download_button'] = $paramsC->get( 'display_download_button', 0 ); + //JHtml::_('bootstrap.loadCss'); + JHtml::_('jquery.framework', false); + + $this->t['version'] = PhocaCommanderHelper::getExtensionVersion(); + + JHTML::stylesheet( 'media/com_phocacommander/css/administrator/phocacommander.css' ); + JHTML::stylesheet( 'media/com_phocacommander/css/administrator/jquery-ui.css' ); + JHTML::stylesheet( 'media/com_phocacommander/css/administrator/phoca-ui.css' ); + JHTML::stylesheet( 'media/com_phocacommander/js/administrator/prettyphoto/css/prettyPhoto.css' ); + + $document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/jquery.base64.js'); + $document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/jquery-ui.min.js'); + $document->addScript(JURI::root(true).'/media/com_phocacommander/js/administrator/prettyphoto/js/jquery.prettyPhoto.js'); + + $model = $this->getModel(); + $model->checkState(); + + $app = JFactory::getApplication(); + $context = 'com_phocacommander.phocacommander.'; + $this->t['orderinga'] = $app->getUserStateFromRequest($context .'orderinga', 'orderinga', '', 'string'); + $this->t['orderingb'] = $app->getUserStateFromRequest($context .'orderingb', 'orderingb', '', 'string'); + $this->t['directiona'] = $app->getUserStateFromRequest($context .'directiona', 'directiona', '', 'string'); + $this->t['directionb'] = $app->getUserStateFromRequest($context .'directionb', 'directionb', '', 'string'); + $this->t['foldera'] = $app->getUserStateFromRequest($context .'foldera', 'foldera', '', 'string'); + $this->t['folderb'] = $app->getUserStateFromRequest($context .'folderb', 'folderb', '', 'string'); + $this->t['panel'] = $app->getUserStateFromRequest($context .'panel', 'panel', '', 'string'); + $this->t['activepanel'] = $app->getUserStateFromRequest($context .'activepanel', 'activepanel', '', 'string'); + if($this->t['activepanel'] == '') {$this->t['activepanel'] = 'A';} + if($this->t['orderinga'] == '') {$this->t['orderinga'] = 'name';} + if($this->t['orderingb'] == '') {$this->t['orderingb'] = 'name';} + if($this->t['directiona'] == '') {$this->t['directiona'] = 'ASC';} + if($this->t['directionb'] == '') {$this->t['directionb'] = 'ASC';} + + + // - - - - - - - - - - - + // Multiple Upload + // - - - - - - - - - - - + // Get infos from multiple upload + + $this->t['mu_response_msg'] = $muUploadedMsg = ''; + $this->t['multipleuploadchunk'] = $paramsC->get( 'multiple_upload_chunk', 0 ); + $this->t['uploadmaxsize'] = $paramsC->get( 'upload_maxsize', 3145728 ); + $this->t['uploadmaxsizeread'] = PhocaCommanderHelper::getFileSizeReadable($this->t['uploadmaxsize']); + $this->t['enablemultiple'] = 1; + $this->t['multipleuploadmethod'] = $paramsC->get( 'multiple_upload_method', 4 ); + $this->session = JFactory::getSession(); + PhocaCommanderFileUploadMultiple::renderMultipleUploadLibraries(); + $this->manager = $app->input->get( 'manager', '', '', 'file' ); + $this->field = $app->input->get('field'); + $this->currentFolder = ''; + + /*if ($muUploaded > 0) { + $muUploadedMsg = JText::_('COM_PHOCADOWNLOAD_COUNT_UPLOADED_FILE'). ': ' . $muUploaded; + } + if ($muFailed > 0) { + $muFailedMsg = JText::_('COM_PHOCADOWNLOAD_COUNT_NOT_UPLOADED_FILE'). ': ' . $muFailed; + } + if ($muFailed > 0 && $muUploaded > 0) { + $this->t['mu_response_msg'] = '
' + .'' + .JText::_('COM_PHOCADOWNLOAD_COUNT_UPLOADED_FILE'). ': ' . $muUploaded .'
' + .JText::_('COM_PHOCADOWNLOAD_COUNT_NOT_UPLOADED_FILE'). ': ' . $muFailed.'
'; + } else if ($muFailed > 0 && $muUploaded == 0) { + $this->t['mu_response_msg'] = '
' + .'' + .JText::_('COM_PHOCADOWNLOAD_COUNT_NOT_UPLOADED_FILE'). ': ' . $muFailed.'
'; + } else if ($muFailed == 0 && $muUploaded > 0){ + $this->t['mu_response_msg'] = '
' + .'' + .JText::_('COM_PHOCADOWNLOAD_COUNT_UPLOADED_FILE'). ': ' . $muUploaded.'
'; + } else { + $this->t['mu_response_msg'] = ''; + }*/ + + + $mU = new PhocaCommanderFileUploadMultiple(); + $mU->frontEnd = 0; + $mU->method = $this->t['multipleuploadmethod']; + $mU->url = JURI::base().'index.php?option=com_phocacommander&task=phocacommanderupload.multipleupload&' + .$this->session->getName().'='.$this->session->getId().'&' + . JSession::getFormToken().'=1'; + $mU->maxFileSize = PhocaCommanderFileUploadMultiple::getMultipleUploadSizeFormat($this->t['uploadmaxsize']); + $mU->chunkSize = '1mb'; + + $mU->renderMultipleUploadJS(0, $this->t['multipleuploadchunk']); + $this->t['mu_output']= $mU->getMultipleUploadHTML(); + + + + $this->t['ftp'] = !JClientHelper::hasCredentials('ftp'); + $this->t['path'] = JPATH_ROOT; + + + $this->addToolbar(); + parent::display($tpl); + } + + protected function addToolbar() { + + $paramsC = JComponentHelper::getParams('com_phocacommander'); + $fKeys = $paramsC->get( 'f_keys', 1 ); + if ($fKeys) { + $f[1] = 'COM_PHOCACOMMANDER_F1_ATTRIBUTES'; + $f[2] = 'COM_PHOCACOMMANDER_F2_RENAME'; + $f[3] = 'COM_PHOCACOMMANDER_F3_VIEW'; + $f[4] = 'COM_PHOCACOMMANDER_F4_EDIT'; + $f[5] = 'COM_PHOCACOMMANDER_F5_COPY'; + $f[6] = 'COM_PHOCACOMMANDER_F6_MOVE'; + $f[7] = 'COM_PHOCACOMMANDER_F7_NEW_FOLDER'; + $f[8] = 'COM_PHOCACOMMANDER_F8_DELETE'; + $f[9] = 'COM_PHOCACOMMANDER_F9_UNPACK'; + $f[10] = 'COM_PHOCACOMMANDER_F10_UPLOAD'; + $f[11] = 'COM_PHOCACOMMANDER_PACK'; + $f[12] = 'COM_PHOCACOMMANDER_DOWNLOAD'; + } else { + $f[1] = 'COM_PHOCACOMMANDER_F1'; + $f[2] = 'COM_PHOCACOMMANDER_F2'; + $f[3] = 'COM_PHOCACOMMANDER_F3'; + $f[4] = 'COM_PHOCACOMMANDER_F4'; + $f[5] = 'COM_PHOCACOMMANDER_F5'; + $f[6] = 'COM_PHOCACOMMANDER_F6'; + $f[7] = 'COM_PHOCACOMMANDER_F7'; + $f[8] = 'COM_PHOCACOMMANDER_F8'; + $f[9] = 'COM_PHOCACOMMANDER_F9'; + $f[10] = 'COM_PHOCACOMMANDER_F10'; + $f[11] = 'COM_PHOCACOMMANDER_PACK'; + $f[12] = 'COM_PHOCACOMMANDER_DOWNLOAD'; + } + require_once JPATH_COMPONENT.'/helpers/phocacommandercp.php'; + $class = 'PhocaCommanderCpHelper'; + $canDo = $class::getActions('com_phocacommander'); + JToolBarHelper::title( JText::_( 'COM_PHOCACOMMANDER' ), 'home-2 cpanel' ); + + // This button is unnecessary but it is displayed because Joomla! design bug + $bar = JToolBar::getInstance( 'toolbar' ); + $dhtml = ' '. ' '.''; + $bar->appendButton('Custom', $dhtml); + + JToolBarHelper::divider(); + + $dhtml = ' '.JText::_($f[1]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[2]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[3]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[4]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[5]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[6]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[7]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[8]).''; + $bar->appendButton('Custom', $dhtml); + + $dhtml = ' '.JText::_($f[9]).''; + $bar->appendButton('Custom', $dhtml); + + if ($this->t['display_upload_button'] == 1) { + $dhtml = ' '.JText::_($f[10]).''; + $bar->appendButton('Custom', $dhtml); + } + if ($this->t['display_download_button'] == 1) { + $dhtml = ' '.JText::_($f[12]).''; + $bar->appendButton('Custom', $dhtml); + } + if ($this->t['experimental_zip'] == 1) { + $dhtml = ' '.JText::_($f[11]).''; + $bar->appendButton('Custom', $dhtml); + + } + + + JToolBarHelper::divider(); + + if ($canDo->get('core.admin')) { + JToolBarHelper::preferences('com_phocacommander'); + JToolBarHelper::divider(); + } + JToolBarHelper::help( 'screen.phocacommander', true ); + + $dhtml = ' '.JText::_('COM_PHOCACOMMANDER_INFO').''; + $bar->appendButton('Custom', $dhtml); + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit.php new file mode 100644 index 00000000..f6169140 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit.php @@ -0,0 +1,87 @@ + + + +
'."\n" +.'
'."\n"; + +// First Column +echo '
'; +$tabs = array ( +'general' => JText::_('COM_PHOCACOMMANDER_EDIT_OPTIONS')); +$o = ''; + +echo '
'. "\n"; + +echo '
'."\n"; + +if ($this->ftp) { echo $this->loadTemplate('ftp');} + +echo '

'.JText::_('COM_PHOCACOMMANDER_EDITING_FILE').' "'.$this->t['file'].'"
('.base64_decode($this->t['fullfile']).')

'; +echo '

'.JText::_('COM_PHOCACOMMANDER_TOGGLE_FULL_SCREEN').'

'; +echo '
'; + + +//echo $this->form->getLabel('source'); +//echo '
'; +echo '
'; +echo $this->form->getInput('source'); +echo '
'; + +echo '
'. "\n"; + +echo '
'; + +// Second Column +echo '
';//end span2 +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo ''. "\n"; +echo JHtml::_('form.token'). "\n"; +echo $this->form->getInput('filename'); +echo '
'; +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit_ftp.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit_ftp.php new file mode 100644 index 00000000..9554eafc --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/edit_ftp.php @@ -0,0 +1,41 @@ + +
+ + + + + ftp instanceof Exception): ?> +

ftp->message); ?>

+ + + + + + + + + + + + + +
+ + + +
+ + + +
+
diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/view.html.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/view.html.php new file mode 100644 index 00000000..0f95adce --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderedit/view.html.php @@ -0,0 +1,101 @@ +t['fullfile'] = $app->input->get( 'file', '', 'string' ); + + $context = 'com_phocacommander.phocacommander.'; + $this->t['orderinga'] = $app->getUserStateFromRequest($context .'orderinga', 'orderinga', '', 'string'); + $this->t['orderingb'] = $app->getUserStateFromRequest($context .'orderingb', 'orderingb', '', 'string'); + $this->t['directiona'] = $app->getUserStateFromRequest($context .'directiona', 'directiona', '', 'string'); + $this->t['directionb'] = $app->getUserStateFromRequest($context .'directionb', 'directionb', '', 'string'); + $this->t['foldera'] = $app->getUserStateFromRequest($context .'foldera', 'foldera', '', 'string'); + $this->t['folderb'] = $app->getUserStateFromRequest($context .'folderb', 'folderb', '', 'string'); + $this->t['panel'] = $app->getUserStateFromRequest($context .'panel', 'panel', '', 'string'); + $this->t['activepanel'] = $app->getUserStateFromRequest($context .'activepanel', 'activepanel', '', 'string'); + + $this->form = $this->get('Form'); + $this->ftp = JClientHelper::setCredentialsFromRequest('ftp'); + $model = $this->getModel(); + + $fileWithPath = base64_decode($this->t['fullfile']); + + $file = explode('/', $fileWithPath); + $this->t['file']= ''; + if(is_array($file)) { + $c = count($file); + $c--; + $this->t['file'] = $file[$c]; + } + + // Set CSS for codemirror + //JFactory::getApplication()->setUserState('editor.source.syntax', ''); + + $this->form->setValue('id', null, 1); + $this->form->setValue('filename', null, base64_encode($fileWithPath)); + + $this->source = $model->getSource($this->form->getValue('filename')); + + if (!isset($this->source->source)) { + throw new Exception(JText::_('COM_PHOCACOMMANDER_FILE_DOES_NOT_EXIST'), 500); + return false; + } + + $this->form->setValue('source', null, $this->source->source); + + if (count($errors = $this->get('Errors'))) { + throw new Exception(implode("\n", $errors), 500); + return false; + } + + $this->addToolbar(); + parent::display($tpl); + } + + protected function addToolbar() { + + require_once JPATH_COMPONENT.DS.'helpers'.DS.'phocacommanderedit.php'; + JRequest::setVar('hidemainmenu', true); + $bar = JToolBar::getInstance('toolbar'); + $user = JFactory::getUser(); + $canDo = PhocaCommanderEditHelper::getActions(); + + $text = JText::_('COM_PHOCACOMMANDER_EDIT'); + JToolBarHelper::title( JText::_( 'COM_PHOCACOMMANDER_FILE' ).': [ ' . $text.' ]' , 'file'); + + // If not checked out, can save the item. + if ($canDo->get('core.edit')){ + JToolBarHelper::apply('phocacommanderedit.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('phocacommanderedit.save', 'JTOOLBAR_SAVE'); + } + + JToolBarHelper::cancel('phocacommanderedit.cancel', 'JTOOLBAR_CLOSE'); + JToolBarHelper::divider(); + JToolBarHelper::help( 'screen.phocacommander', true ); + } + +} +?> diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/tmpl/default.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/tmpl/default.php new file mode 100644 index 00000000..4e29622e --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/tmpl/default.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/view.json.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/view.json.php new file mode 100644 index 00000000..6c7f2d8d --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderfilesa/view.json.php @@ -0,0 +1,313 @@ + '0', + 'error' => '
' . JText::_('JINVALID_TOKEN') . '
'); + echo json_encode($response); + return; + } + + $app = JFactory::getApplication(); + $this->t['panel'] = $app->input->get( 'panel', '', 'string' ); + $this->t['activepanel'] = $app->input->get( 'activepanel', '', 'string' ); + $this->t['orderinga'] = $app->input->get( 'orderinga', '', 'string' ); + $this->t['directiona'] = $app->input->get( 'directiona', '', 'string' ); + $this->t['foldera'] = $app->input->get( 'foldera', '', 'string' ); + $this->t['orderingb'] = $app->input->get( 'orderingb', '', 'string' ); + $this->t['directionb'] = $app->input->get( 'directionb', '', 'string' ); + $this->t['folderb'] = $app->input->get( 'folderb', '', 'string' ); + + $app = JFactory::getApplication(); + $context = 'com_phocacommander.phocacommander.'; + $app->getUserStateFromRequest($context .'orderinga', 'orderinga', $this->t['orderinga'], 'string'); + $app->getUserStateFromRequest($context .'orderingb', 'orderingb', $this->t['orderingb'], 'string'); + $app->getUserStateFromRequest($context .'directiona', 'directiona', $this->t['directiona'], 'string'); + $app->getUserStateFromRequest($context .'directionb', 'directionb', $this->t['directionb'], 'string'); + $app->getUserStateFromRequest($context .'panel', 'panel', $this->t['panel'], 'string'); + $app->getUserStateFromRequest($context .'activepanel', 'activepanel', $this->t['activepanel'], 'string'); + $app->getUserStateFromRequest($context .'foldera', 'foldera', $this->t['foldera'], 'string'); + $app->getUserStateFromRequest($context .'folderb', 'folderb', $this->t['folderb'], 'string'); + + + if ($this->t['panel'] == 'A') { + $this->t['folder'] = $this->t['foldera']; + $this->t['ordering'] = $this->t['orderinga']; + $this->t['direction'] = $this->t['directiona']; + } else if ($this->t['panel'] == 'B') { + $this->t['folder'] = $this->t['folderb']; + $this->t['ordering'] = $this->t['orderingb']; + $this->t['direction'] = $this->t['directionb']; + } + + $model = $this->getModel(); + $path = JPATH_ROOT; + $searchPath = JPATH_ROOT; + $searchPathRel = JURI::root(); + $parent = ''; + $this->t['folderdecoded'] = ''; + if ($this->t['folder'] != '') { + $this->t['folderdecoded'] = base64_decode($this->t['folder']); + + if (JFolder::exists(JPath::clean($path . '/' .$this->t['folderdecoded']))) { + $searchPath = $path . '/' . $this->t['folderdecoded']; + $searchPathRel = $searchPathRel . '/' . $this->t['folderdecoded']; + $parent = str_replace("\\", "/", dirname($this->t['folderdecoded'])); + $parent = ($parent == '.') ? null : $parent; + } else { + $searchPath = $path; + $searchPathRel = $searchPathRel; + //$parent = null; + $parent = null; + $this->t['folder'] = ''; + $this->t['folderdecoded'] = ''; + if ($this->t['panel'] == 'A') { + $this->t['foldera'] = ''; + $app->getUserStateFromRequest($context .'foldera', 'foldera', '|', 'string'); + } + if ($this->t['panel'] == 'B') { + $this->t['folderb'] = ''; + $app->getUserStateFromRequest($context .'folderb', 'folderb', '|', 'string'); + } + + } + + } + + $paramsC = JComponentHelper::getParams('com_phocacommander'); + + + $this->p['display_inline_view'] = $paramsC->get( 'display_inline_view', 0); + $this->p['display_inline_edit'] = $paramsC->get( 'display_inline_edit', 0); + $this->p['display_inline_download'] = $paramsC->get( 'display_inline_download', 0); + + $this->p['box_height'] = $paramsC->get( 'box_height', '350'); + $this->t['urlimage'] = JURI::root().'media/com_phocacommander/images/administrator/'; + $this->t['urlimagemime'] = JURI::root().'media/com_phocacommander/images/administrator/mime/16'; + $this->t['url'] = 'index.php?option=com_phocacommander&view=phocacommanderfilesa&format=json&tmpl=component&'. JSession::getFormToken().'=1'; + + // Active panel + $activePanelClass = ''; + if ($this->t['panel'] == $this->t['activepanel']) { + $activePanelClass = 'ph-status-active'; + } + + + // Direction Ouput of arrow + if ($this->t['direction'] == 'ASC') { + //$arrow = '↑'; + $arrow = ''; + $reverse = 'DESC'; + $searchSorting = 0; + } else { + //$arrow = '↓'; + $arrow = ''; + $reverse = 'ASC'; + $searchSorting = 1; + } + + $reorder = 0; + $arrowName = $arrowSize = $arrowDate = ''; + if ($this->t['ordering'] == 'name') { + $reorder = 0; + $arrowName = ''.$arrow.''; + } + if ($this->t['ordering'] == 'size') { + $reorder = 1; + $searchSorting = 0; + $arrowSize = ''.$arrow.''; + } + if ($this->t['ordering'] == 'date') { + $reorder = 2; + $searchSorting = 0; + $arrowDate = ''.$arrow.''; + } + + + $lFF = PhocaCommanderHelper::createLoadFilesFunction($this->t, $this->t['folder'], 'name', $reverse); + $name = ''.JText::_('COM_PHOCACOMMANDER_NAME').' '.$arrowName; + $lFF = PhocaCommanderHelper::createLoadFilesFunction($this->t, $this->t['folder'], 'size', $reverse); + $size = ''.JText::_('COM_PHOCACOMMANDER_SIZE').' '.$arrowSize; + $lFF = PhocaCommanderHelper::createLoadFilesFunction($this->t, $this->t['folder'], 'date', $reverse); + $date = ''.JText::_('COM_PHOCACOMMANDER_DATE').' '.$arrowDate; + + +// Files Folders +$items = scandir($searchPath, $searchSorting); +$folders = array(); +$files = array(); +$i = 0; +foreach ($items as $k => $v) { + if ($v === '.' or $v === '..') { + continue; + } + + // ------ + // FOLDER + // ------ + if (is_dir($searchPath . '/' . $v)) { + $folders[$i]['name'] = $v; + $statF = stat($searchPath . '/' . $v); + $folders[$i]['date'] = $statF['mtime']; + $folders[$i]['size'] = $statF['size']; + $folders[$i]['uid'] = $statF['uid']; + $folders[$i]['gid'] = $statF['gid']; + //$folders[$i]['chmod'] = fileperms($searchPath . '/' . $v); + $folders[$i]['chmod'] = substr(sprintf('%o', fileperms($searchPath . '/' . $v)), -4); + + $folderLink = $v; + if ($this->t['folderdecoded'] != '') { + $folderLink = $this->t['folderdecoded']. '/'.$v; + } + + $lFF = PhocaCommanderHelper::createLoadFilesFunction($this->t, base64_encode($folderLink), $this->t['ordering'], $this->t['direction']); + $folders[$i]['fullname'] = '
'; + } + + // ---- + // FILE + // ---- + if (is_file($searchPath . '/' . $v)) { + $files[$i]['name'] = $v; + $statF = stat($searchPath . '/' . $v); + $files[$i]['date'] = $statF['mtime']; + $files[$i]['size'] = $statF['size']; + $files[$i]['uid'] = $statF['uid']; + $files[$i]['gid'] = $statF['gid']; + //$files[$i]['chmod'] = fileperms($searchPath . '/' . $v); + $files[$i]['chmod'] = substr(sprintf('%o', fileperms($searchPath . '/' . $v)), -4); + + $ext = JFile::getExt($v); + $attribImg = ''; + if ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' | $ext == 'gif') { + $attribImg = ' class="phLightBox" data-src="'.$searchPathRel.''.utf8_encode($v).'" '; + } + + $image = PhocaCommanderHelper::getMimeTypeIcon($v); + + // Inline Actions + $iA = ''; + + + // View + if ($this->p['display_inline_view'] == 1) { + if ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' | $ext == 'gif') { + $iA .= ' '; + } + } + + // Edit + if ($this->p['display_inline_edit'] == 1) { + $iA .= ' '; + } + + // Download + if ($this->p['display_inline_download'] == 1) { + $iA .= ' '; + } + + + + //$files[$i]['fullname'] = '
'; + $files[$i]['fullname'] = '
'; + } + $i++; +} + +// Folders +$o = '
'; + + + +$o .= '
'; +$o .= ''; +$o .= ''; +$o .= ''; +$o .= ''; +$o .= ''; +$o .= ''; +$o .= '
'.$name.''.$size.''.$date.''.JText::_('COM_PHOCACOMMANDER_ATTR').''.JText::_('COM_PHOCACOMMANDER_OWNER').'
'; +$o .= '
'; + +// UP +if ($parent == '' && $path == $searchPath) { + +} else { + $lFF = PhocaCommanderHelper::createLoadFilesFunction($this->t, base64_encode($parent), $this->t['ordering'], $this->t['direction']); + $o .= ''; + $o .= ''; + $o .= ''; + $o .= ''; + $o .= ''; +} + +// Folders +if ($reorder == 2) { + $model->sortItems($folders, "date", $this->t['direction']); +} + +foreach ($folders as $k => $v) { + //$o .= ''; + $o .= ''; + $o .= ''; + $o .= ''; + $o .= ''; + //$o .= ''; + $o .= ''; +} + +// Files +if ($reorder == 1 ) { + $model->sortItems($files, "size", $this->t['direction']); +} +if ($reorder == 2) { + $model->sortItems($files, "date", $this->t['direction']); +} + +foreach ($files as $k => $v) { + $o .= ''; + $o .= ''; + $o .= ''; + $o .= ''; + //$o .= ''; + $o .= ''; +} + +$o .='
      ..
'.$v['fullname'].'('.$this->t['folderdecoded'].')
'.$v['fullname'].''.date('Y-m-d H:i', $v['date']).''.$v['chmod'].''.$v['uid'].' ('.$v['gid'].')
'.$v['uid'].'
'.$v['fullname'].''.PhocaCommanderHelper::getFileSizeReadable($v['size']).''.date('Y-m-d H:i', $v['date']).''.$v['chmod'].''.$v['uid'].' ('.$v['gid'].')
'.$v['uid'].'
'; + +$o .= '
'; +$o .= '
'.JPath::clean($searchPath).'
'; + +$o .= '
'; +$o .= ''; +$o .= '
'; + + + + + $response = array( + 'status' => '1', + 'message' => $o); + echo json_encode($response); + return; + exit; + } +} +?> \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/default.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/default.php new file mode 100644 index 00000000..59f53efd --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/default.php @@ -0,0 +1,65 @@ +'; +echo '
'.JHtmlSidebar::render().'
'; +echo '
'; +echo '
' + . JHTML::_('image', 'media/com_phocacommander/images/administrator/logo-phoca.png', 'Phoca.cz' ) + .'
' + . JHTML::_('image', 'media/com_phocacommander/images/administrator/logo.png', 'Phoca.cz') + .'

'.JText::_('COM_PHOCACOMMANDER_PHOCA_COMMANDER').' - '. JText::_('COM_PHOCACOMMANDER_INFORMATION').'

' + .'
'; + +echo '

'. JText::_('COM_PHOCACOMMANDER_HELP').'

'; + +echo '

' +.'Phoca Commander Main Site
' +.'Phoca Commander User Manual
' +.'Phoca Commander Forum
' +.'

'; + +echo '

'. JText::_('COM_PHOCACOMMANDER_VERSION').'

' +.'

'. $this->t['version'] .'

'; + +echo '

'. JText::_('COM_PHOCACOMMANDER_COPYRIGHT').'

' +.'

© 2007 - '. date("Y"). ' Jan Pavelka

' +.'

www.phoca.cz

'; + +echo '

'. JText::_('COM_PHOCACOMMANDER_LICENSE').'

' +.'

GPLv2

'; + +echo '

'. JText::_('COM_PHOCACOMMANDER_TRANSLATION').': '. JText::_('COM_PHOCACOMMANDER_TRANSLATION_LANGUAGE_TAG').'

' + .'

© 2007 - '. date("Y"). ' '. JText::_('COM_PHOCACOMMANDER_TRANSLATER'). '

' + .'

'.JText::_('COM_PHOCACOMMANDER_TRANSLATION_SUPPORT_URL').'

'; + +echo '' +.'' +.''; + +echo '

 

'; + +echo '

 

'; + + echo PhocaCommanderRenderAdmin::getLinks(); + +echo '

 

' +.''; + +echo '
 
'; + + +echo '
'; +echo '
'; + +echo ''; +echo ''; + diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/index.html b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/view.html.php b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/view.html.php new file mode 100644 index 00000000..c126fe3d --- /dev/null +++ b/packages/phocacommander/administrator/components/com_phocacommander/views/phocacommanderinfo/view.html.php @@ -0,0 +1,45 @@ +t['version'] = PhocaCommanderHelper::getExtensionVersion(); + $this->addToolbar(); + parent::display($tpl); + } + + protected function addToolbar() { + require_once JPATH_COMPONENT.'/helpers/phocacommandercp.php'; + $class = 'PhocaCommanderCpHelper'; + $canDo = $class::getActions('com_phocacommander'); + + JToolBarHelper::title( JText::_('COM_PHOCACOMMANDER_CM_INFO' ), 'info.png' ); + + // This button is unnecessary but it is displayed because Joomla! design bug + $bar = JToolBar::getInstance( 'toolbar' ); + $dhtml = ' '.JText::_('COM_PHOCACOMMANDER').''; + $bar->appendButton('Custom', $dhtml); + + if ($canDo->get('core.admin')) { + JToolbarHelper::preferences('com_phocacommander'); + } + JToolBarHelper::divider(); + JToolBarHelper::help( 'screen.phocacommander', true ); + JToolBarHelper::cancel('phocacommanderinfo.cancel', 'JTOOLBAR_CLOSE'); + } +} +?> diff --git a/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.ini b/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.ini new file mode 100644 index 00000000..2e964913 --- /dev/null +++ b/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.ini @@ -0,0 +1,310 @@ +; @package Joomla.Framework +; @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved. +; @license GNU General Public License version 2 or later; see LICENSE.txt +; +; @component Phoca Component +; @copyright Copyright (C) Jan Pavelka www.phoca.cz +; @license http://www.gnu.org/copyleft/gpl.html GNU General Public License version 2 or later; +; +; @test utf-8 ä, ö, ü +; + + +;[3.0.2] +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_DOWNLOADED="Folder cannot be downloaded" +COM_PHOCACOMMANDER_DISPLAY_DOWNLOAD_BUTTON_LABEL="Display Download Button" +COM_PHOCACOMMANDER_DISPLAY_DOWNLOAD_BUTTON_DESC="Display or hide download button" +COM_PHOCACOMMANDER_DISPLAY_UPLOAD_BUTTON_LABEL="Display Upload Button" +COM_PHOCACOMMANDER_DISPLAY_UPLOAD_BUTTON_DESC="Display or hide upload button" + +;[3.0.1] +COM_PHOCACOMMANDER_LIST_OF_UPLOAD_ERRORS="List of upload errors" +COM_PHOCACOMMANDER_FILE_DOES_NOT_EXIST="File does not exist" +COM_PHOCACOMMANDER_VIEW="View" +COM_PHOCACOMMANDER_DOWNLOAD="Download" +COM_PHOCACOMMANDER_CONFIG_INLINE_ACTIONS_LABEL="Inline Actions" +COM_PHOCACOMMANDER_DISPLAY_INLINE_DOWNLOAD_LABEL="Display Inline Download" +COM_PHOCACOMMANDER_DISPLAY_INLINE_DOWNLOAD_DESC="Display or hide inline download icon" +COM_PHOCACOMMANDER_DISPLAY_INLINE_VIEW_LABEL="Display Inline View" +COM_PHOCACOMMANDER_DISPLAY_INLINE_VIEW_DESC="Display or hide inline view icon" +COM_PHOCACOMMANDER_DISPLAY_INLINE_EDIT_LABEL="Display Inline Edit" +COM_PHOCACOMMANDER_DISPLAY_INLINE_EDIT_DESC="Display or hide inline edit icon" + +;[3.0.0] +COM_PHOCACOMMANDER_ENABLE_ZIP_FUNCTION_LABEL="Enable ZIP Function" +COM_PHOCACOMMANDER_ENABLE_ZIP_FUNCTION_DESC="Enable or disable ZIP function. Be aware, for running ZIP successfully, permissions and ownership of files and folders on your server needs to be OK. You can use this feature for zipping small files and small amount of files. Zipping large files or large amount of files can cause server problems (halting, overloading, performance problems or unexpected errors). For zipping large files or large amount of files like backup is, use standard server tools. Always check your newly created ZIP, if it includes all folders and files." +COM_PHOCACOMMANDER_EXPERTS_ONLY_LABEL="Experts only" +COM_PHOCADOWNLOAD_EXPERIMENATAL_FEATURES_LABEL="Experimental Features" +COM_PHOCADOWNLOAD_EXPERIMENATAL_FEATURES_DESC="Please, read documenation before enabling experimental feature." +COM_PHOCACOMMANDER_ZIP_PACKAGE_CREATED="ZIP package created" +COM_PHOCACOMMANDER_ERROR_ZIP_FILE_COULD_NOT_BE_CREATED="Error - ZIP file could not be created" +COM_PHOCACOMMANDER_ERROR_FILE_COULD_NOT_BE_CREATED="Error - file could not be created" +COM_PHOCACOMMANDER_ERROR_FILE_EXISTS="Error - file exists" +COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND_OR_WRONG_FILENAME_SET="Error - no value sent or wrong file name added" +COM_PHOCACOMMANDER_PACK="Pack" +COM_PHOCACOMMANDER_SET_PACKAGE_NAME="Set package name" +COM_PHOCACOMMANDER_PACK="Pack" +COM_PHOCACOMMANDER_FIELD_CREATE_INDEX_FILE_LABEL="Create Index File" +COM_PHOCACOMMANDER_FIELD_CREATE_INDEX_FILE_DESC="If new folder will be created, set if index.html file will be created inside this folder." +COM_PHOCACOMMANDER_PHOCA_NEEDS_YOUR_HELP="Phoca Needs Your Help" +COM_PHOCACOMMANDER_PLEASE_READ="Please Read" +COM_PHOCACOMMANDER_USEFUL_TIPS="Useful Tips (Extensions)" +COM_PHOCACOMMANDER_USEFUL_LINKS="Useful Links" +;[3.0.0 Beta] +COM_PHOCACOMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_CM_INFO="Phoca Commander Info" +COM_PHOCACOMMANDER_PHOCA_COMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_INFORMATION="Information" +COM_PHOCACOMMANDER_HELP="Help" +COM_PHOCACOMMANDER_VERSION="Version" +COM_PHOCACOMMANDER_COPYRIGHT="Copyright" +COM_PHOCACOMMANDER_LICENSE="License" +COM_PHOCACOMMANDER_CONTROLPANEL="Control Panel" +COM_PHOCACOMMANDER_INFO="Info" +COM_PHOCACOMMANDER_XML_DESCRIPTION="Phoca Commander - Joomla! CMS component. File manager for Joomla! CMS." +COM_PHOCACOMMANDER_UPDATE_TEXT="Phoca Commander updated" +COM_PHOCACOMMANDER_NAME="Name" +COM_PHOCACOMMANDER_SIZE="Size" +COM_PHOCACOMMANDER_DATE="Date" +COM_PHOCACOMMANDER_ATTRIBUTES="Attributes" +COM_PHOCACOMMANDER_ATTR="Attr" +COM_PHOCACOMMANDER_OWNER="Owner" +COM_PHOCACOMMANDER_NO_FILE_NO_FOLDER_SELECTED="No file or no folder selected" +; For Translaters - set your own data here +COM_PHOCACOMMANDER_TRANSLATION="Translation" +COM_PHOCACOMMANDER_TRANSLATION_LANGUAGE_TAG="English" +COM_PHOCACOMMANDER_TRANSLATER="Jan Pavelka" +COM_PHOCACOMMANDER_TRANSLATION_SUPPORT_URL="www.phoca.cz" +; End Translaters section - - - - - - - - +COM_PHOCACOMMANDER_CHECK_FOR_UPDATE="Check For Update" +COM_PHOCACOMMANDER_CONFIG_HEAD_GENERAL_LABEL="General" +COM_PHOCACOMMANDER_CONFIGURATION="Configuration" +COM_PHOCACOMMANDER_ARE_YOU_SURE_COPY="Are you sure you want to copy" +COM_PHOCACOMMANDER_ARE_YOU_SURE_MOVE="Are you sure you want to move" +COM_PHOCACOMMANDER_ARE_YOU_SURE_DELETE="Are you sure you want to delete" +COM_PHOCACOMMANDER_JOOMLA_ROOT_FOLDER="Joomla! root folder" +COM_PHOCACOMMANDER_TO="to" +COM_PHOCACOMMANDER_FILES_FOLDERS="Files (Folders)" +COM_PHOCACOMMANDER_FOLDER="Folder" +COM_PHOCACOMMANDER_FILE="File" +COM_PHOCACOMMANDER_FOLDER_SM="folder" +COM_PHOCACOMMANDER_FILES_FOLDERS_SM="files (folders)" +COM_PHOCACOMMANDER_PERMANENTLY_REMOVE_WARNING="Be aware, this action removes selected files or folders (include their subfolders and files) from your server permanently" +COM_PHOCACOMMANDER_F1_ATTRIBUTES="F1 Attributes" +COM_PHOCACOMMANDER_F2_RENAME="F2 Rename" +COM_PHOCACOMMANDER_F3_VIEW="F3 View" +COM_PHOCACOMMANDER_F4_EDIT="F4 Edit" +COM_PHOCACOMMANDER_F5_COPY="F5 Copy" +COM_PHOCACOMMANDER_F6_MOVE="F6 Move" +COM_PHOCACOMMANDER_F7_NEW_FOLDER="F7 New Folder" +COM_PHOCACOMMANDER_F8_DELETE="F8 Delete" +COM_PHOCACOMMANDER_F9_UNPACK="F9 Unpack" +COM_PHOCACOMMANDER_F10_UPLOAD="F10 Upload" +COM_PHOCACOMMANDER_F1="F1" +COM_PHOCACOMMANDER_F2="F2" +COM_PHOCACOMMANDER_F3="F3" +COM_PHOCACOMMANDER_F4="F4" +COM_PHOCACOMMANDER_F5="F5" +COM_PHOCACOMMANDER_F6="F6" +COM_PHOCACOMMANDER_F7="F7" +COM_PHOCACOMMANDER_F8="F8" +COM_PHOCACOMMANDER_F9="F9" +COM_PHOCACOMMANDER_F10="F10" +COM_PHOCACOMMANDER_ONLY_ONE_FILE_OR_FOLDER_NEEDS_TO_BE_SELECTED="Only one file or folder needs to be selected" +COM_PHOCACOMMANDER_RENAME="Rename" +COM_PHOCACOMMANDER_ONLY_ONE_FILE_NEEDS_TO_BE_SELECTED="Only one file needs to be selected" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_PREVIEWED_OR_EDITED="Folder cannot be previewed or edited" +COM_PHOCACOMMANDER_NEW_FOLDER="New Folder" +COM_PHOCACOMMANDER_NEW_ATTRIBUTES="New Attributes" +COM_PHOCACOMMANDER_CLOSE="Close" +COM_PHOCACOMMANDER_OK="OK" +COM_PHOCACOMMANDER_CANCEL="Cancel" +COM_PHOCACOMMANDER_WARNING="Warning" +COM_PHOCACOMMANDER_CONFIRM="Confirm" +COM_PHOCACOMMANDER_SET="Set" +COM_PHOCACOMMANDER_CREATE="Create" +COM_PHOCACOMMANDER_UPDATING="Updating" +COM_PHOCACOMMANDER_GROUP="Group" +COM_PHOCACOMMANDER_OTHER="Other" +COM_PHOCACOMMANDER_READ="Read" +COM_PHOCACOMMANDER_WRITE="Write" +COM_PHOCACOMMANDER_EXECUTE="Execute" +COM_PHOCACOMMANDER_VALUE="Value" +COM_PHOCACOMMANDER_PERMISSION="Permission" +COM_PHOCACOMMANDER_NEW_ATTRIBUTE="New Attribute" +COM_PHOCACOMMANDER_SET_NEW_ATTRIBUTE_FOR="Set new attribute for" +COM_PHOCACOMMANDER_ERROR_NO_VALID_REQUEST="Error - no valid request" +COM_PHOCACOMMANDER_ERROR_NO_VALID_TASK="Error - no valid task" +COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND="Error - no value send" +COM_PHOCACOMMANDER_ITEM_RENAMED="Item renamed" +COM_PHOCACOMMANDER_ERROR_NO_FILE_OR_FOLDER_FOUND="Error - no file or folder found" +COM_PHOCACOMMANDER_ERROR_FOLDER_NOT_EXIST="Folder does not exist" +COM_PHOCACOMMANDER_ERROR_FILE_NOT_EXIST="File does not exist" +COM_PHOCACOMMANDER_FILE_RENAMED="File renamed" +COM_PHOCACOMMANDER_FOLDER_RENAMED="Folder renamed" +COM_PHOCACOMMANDER_ONLY_IMAGES_CAN_BE_PREVIEWED="Only images can be previewed" +COM_PHOCACOMMANDER_EDIT="Edit" +COM_PHOCACOMMANDER_EDIT_OPTIONS="Edit Options" +COM_PHOCACOMMANDER_FIELD_CONTENT_LABEL="Content" +COM_PHOCACOMMANDER_FIELD_CONTENT_DESC="Edit content" +COM_PHOCACOMMANDER_FIELD_FILENAME_LABEL="Filename" +COM_PHOCACOMMANDER_FIELD_FILENAME_DESC="Filename (include path)" +COM_PHOCACOMMANDER_ERROR_NEW_NAME_SAME_OLD="New name is the same like the old one" +COM_PHOCACOMMANDER_EDITING_FILE="Editing file" +COM_PHOCACOMMANDER_TOGGLE_FULL_SCREEN="Press Ctrl-Q to toggle Full Screen editing." +COM_PHOCACOMMANDER_ERROR_FILE_NOT_WRITABLE="Error - file is not writable" +COM_PHOCACOMMANDER_FILE_PERMISSIONS="Permissions" +COM_PHOCACOMMANDER_CHECK_FILE_OWNERSHIP="Check file ownership" +COM_PHOCACOMMANDER_ERROR_SOURCE_FILE_NOT_UNWRITABLE="Source file can't be returned to unwritable status" +COM_PHOCACOMMANDER_ERROR_FAILED_TO_SAVE_FILENAME="Error - the file %s could not be saved." +COM_PHOCACOMMANDER_ERROR_SOURCE_SAME_DESTINATION="Error - source is the same as destination" +COM_PHOCACOMMANDER_SERVER_ERROR="Server error" +COM_PHOCACOMMANDER_OVERWRITE_EXISTING_FOLDERS_FILES="Overwrite existing folders and files" +COM_PHOCACOMMANDER_COPY="Copy" +COM_PHOCACOMMANDER_ALL_FILES_COPIED="All files copied" +COM_PHOCACOMMANDER_FILES_COPIED="files copied" +COM_PHOCACOMMANDER_FILES_NOT_COPIED="files not copied" +COM_PHOCACOMMANDER_ALL_FOLDERS_COPIED="All folders copied" +COM_PHOCACOMMANDER_FOLDERS_COPIED="folders copied" +COM_PHOCACOMMANDER_FOLDERS_NOT_COPIED="files not copied" +COM_PHOCACOMMANDER_NO_FILES_COPIED="No files copied" +COM_PHOCACOMMANDER_NO_FOLDERS_COPIED="No folders copied" +COM_PHOCACOMMANDER_NO_ALL_FILES_COPIED="Not all files copied" +COM_PHOCACOMMANDER_NO_ALL_FOLDERS_COPIED="Not all folders copied" +COM_PHOCACOMMANDER_FILE_COPIED="File copied" +COM_PHOCACOMMANDER_FOLDER_COPIED="Folder copied" +COM_PHOCACOMMANDER_FILE_NOT_COPIED="File not copied" +COM_PHOCACOMMANDER_FOLDER_NOT_COPIED="Folder not copied" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_COPIED_OWN_SUBFOLDER="Folder cannot be copied to its own subfolder" +COM_PHOCACOMMANDER_MOVE="Move" +COM_PHOCACOMMANDER_ALL_FILES_MOVED="All files moved" +COM_PHOCACOMMANDER_FILES_MOVED="files moved" +COM_PHOCACOMMANDER_FILES_NOT_MOVED="files not moved" +COM_PHOCACOMMANDER_ALL_FOLDERS_MOVED="All folders moved" +COM_PHOCACOMMANDER_FOLDERS_MOVED="folders moved" +COM_PHOCACOMMANDER_FOLDERS_NOT_MOVED="folders not moved" +COM_PHOCACOMMANDER_NO_FILES_MOVED="No files moved" +COM_PHOCACOMMANDER_NO_FOLDERS_MOVED="No folders moved" +COM_PHOCACOMMANDER_NO_ALL_FILES_MOVED="Not all files moved" +COM_PHOCACOMMANDER_NO_ALL_FOLDERS_MOVED="Not all folders moved" +COM_PHOCACOMMANDER_FILE_MOVED="File moved" +COM_PHOCACOMMANDER_FOLDER_MOVED="Folder moved" +COM_PHOCACOMMANDER_FILE_NOT_MOVED="File not moved" +COM_PHOCACOMMANDER_FOLDER_NOT_MOVED="Folder not moved" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_MOVED_OWN_SUBFOLDER="Folder cannot be moved to its own subfolder" +COM_PHOCACOMMANDER_FOLDER_NOT_OVERWRITTEN="Folder not overwritten" +COM_PHOCACOMMANDER_FILE_NOT_OVERWRITTEN="File not overwritten" +COM_PHOCACOMMANDER_GENERAL_OPTIONS_LABEL="General Options" +COM_PHOCACOMMANDER_FIELD_F_KEYS_DESC="Display F keys with titles or without titles" +COM_PHOCACOMMANDER_FIELD_F_KEYS_LABEL="F Keys" +COM_PHOCACOMMANDER_WITHOUT_TITLES="Without Titles" +COM_PHOCACOMMANDER_WITH_TITLES="With Titles" +COM_PHOCACOMMANDER_FIELD_BOX_HEIGHT_DESC="Set box (panel) height in px" +COM_PHOCACOMMANDER_FIELD_BOX_HEIGHT_LABEL="Box (Panel) Height" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NAME_EXISTS="New folder name is the same like existing folder" +COM_PHOCACOMMANDER_ERROR_NEW_FILE_NAME_EXISTS="New file name is the same like existing file" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_CREATED="New folder created" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NOT_CREATED="New folder not created" +COM_PHOCACOMMANDER_FILE_DELETED="File deleted" +COM_PHOCACOMMANDER_FILES_DELETED="files deleted" +COM_PHOCACOMMANDER_FILE_NOT_DELETED="File not deleted" +COM_PHOCACOMMANDER_NO_FILES_DELETED="No files deleted" +COM_PHOCACOMMANDER_FILES_NOT_DELETED="files not deleted" +COM_PHOCACOMMANDER_FOLDER_DELETED="Folder deleted (include its subfolders and files)" +COM_PHOCACOMMANDER_FOLDERS_DELETED="folders deleted (include their subfolders and files)" +COM_PHOCACOMMANDER_FOLDER_NOT_DELETED="Folder not deleted" +COM_PHOCACOMMANDER_NO_FOLDERS_DELETED="No folders deleted" +COM_PHOCACOMMANDER_FOLDERS_NOT_DELETED="folders not deleted" +COM_PHOCACOMMANDER_ARE_YOU_SURE_UNPACK="Are you sure you want to unpack" +COM_PHOCACOMMANDER_UNPACK="Unpack" +COM_PHOCACOMMANDER_ONLY_ARCHIVE_FILE_CAN_BE_UNPACKED="Only archive file can be unpacked" +COM_PHOCACOMMANDER_FILE_NOT_ARCHIVE="File is not archive package" +COM_PHOCACOMMANDER_FILE_CANNOT_BE_UNPACKED_FILE_EXISTS="File cannot be unpacked. One of the files or folders included in archive package exists in destination folder" +COM_PHOCACOMMANDER_FILE_UNPACKED="File unpacked" +COM_PHOCACOMMANDER_FILE_NOT_UNPACKED="File not unpacked" +COM_PHOCACOMMANDER_WRONG_REQUEST="Wrong request" +COM_PHOCACOMMANDER_UPLOAD="Upload" +COM_PHOCACOMMANDER_UPLOAD_FILE="Unpload File" +COM_PHOCACOMMANDER_MAX_SIZE="Max Size" +COM_PHOCACOMMANDER_SELECT_FILES="Select files" +COM_PHOCACOMMANDER_ADD_FILES="Add Files" +COM_PHOCACOMMANDER_ADD_FILES_TO_UPLOAD_QUEUE_AND_CLICK_START_BUTTON="Add files to the upload queue and click the start button." +COM_PHOCACOMMANDER_FILENAME="Filename" +COM_PHOCACOMMANDER_SIZE="Size" +COM_PHOCACOMMANDER_STATUS="Status" +COM_PHOCACOMMANDER_NOT_AUTHORISED_ACTION="You are not authorized to do this action" +COM_PHOCACOMMANDER_NOT_AUTHORISED_TO_UPLOAD="You are not authorized to upload file" +COM_PHOCACOMMANDER_NOT_INSTALLED_BROWSERPLUS="You browser doesn't have BrowserPlus installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_FLASH="You browser doesn't have Flash installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_GEARS="You browser doesn't have Gears installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_SILVERLIGHT="You browser doesn't have Silverlight installed." +COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML4="You browser doesn't have HTML 4 support." +COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML5="You browser doesn't have HTML 5 support." +COM_PHOCACOMMANDER_START="Start" +COM_PHOCACOMMANDER_START_PUBLISHING="Start Publishing" +COM_PHOCACOMMANDER_START_UPLOAD="Start Upload" +COM_PHOCACOMMANDER_START_UPLOADING_QUEUE="Start Uploading Queue" +COM_PHOCACOMMANDER_STATISTICS="Statistics" +COM_PHOCACOMMANDER_STATUS="Status" +COM_PHOCACOMMANDER_STOP_CURRENT_UPLOAD="Stop Current Upload" +COM_PHOCACOMMANDER_SUCCESS="Success" +COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOAD="File uploaded" +COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOADED="File uploaded" +COM_PHOCACOMMANDER_SUCCESS_FOLDER_CREATING="Folder created" +COM_PHOCACOMMANDER_SUCCESS_RESET_USER_STAT="User Statistics reset" +COM_PHOCACOMMANDER_THERE_IS_NO_FILE="There is no file" +COM_PHOCACOMMANDER_DRAG_FILES_HERE="Drag files here" +COM_PHOCACOMMANDER_UPLOADING_FINISHED="Uploading finished" +COM_PHOCACOMMANDER_ERROR="Error" +COM_PHOCACOMMANDER_WARNFILENAME="File name must only contain alphanumeric characters, underscores, hyphens and spaces." +COM_PHOCACOMMANDER_WARNFILETOOLARGE="This file is too large to upload." +COM_PHOCACOMMANDER_WARNFILETYPE="This file type is not supported (or there are some restrictions on the server)." +COM_PHOCACOMMANDER_WARNFILETYPE_DISALLOWED="The file type is disallowed - file cannot be uploaded" +COM_PHOCACOMMANDER_WARNFILETYPE_DISALLOWED_DOWNLOAD="Error while downloading file (Disallowed Mime Type)" +COM_PHOCACOMMANDER_WARNFILETYPE_DOWNLOAD="Error while downloading file (Mime Type not found)" +COM_PHOCACOMMANDER_WARNFILETYPE_NOT_ALLOWED="The file type is not allowed - file cannot be uploaded" +COM_PHOCACOMMANDER_INVALID_TOKEN="Invalid Token" +COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS="File already exists" +COM_PHOCACOMMANDER_ERROR_FOLDER_UPLOAD_NOT_EXISTS="Folder does not exist or it is not accessible" +COM_PHOCACOMMANDER_ERROR_OPEN_INPUT_STREAM="Failed to open input stream" +COM_PHOCACOMMANDER_ERROR_OPEN_OUTPUT_STREAM="Failed to open output stream" +COM_PHOCACOMMANDER_ERROR_MOVE_UPLOADED_FILE="Failed to move uploaded file" +COM_PHOCACOMMANDER_ERROR_UNABLE_TO_MOVE_FILE="Unable to move file" +COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP="Check permissions and ownership of files and folders" +COM_PHOCACOMMANDER_SUCCESS="Success" +COM_PHOCACOMMANDER_FILES_UPLOADED="Files uploaded" +COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE="Unable to upload file" +COM_PHOCACOMMANDER_WARNING_INPUT_FILE_UPLOAD="Please input a file for upload" +COM_PHOCACOMMANDER_WARNINVALIDMIME="Illegal or invalid mime type detected." +COM_PHOCACOMMANDER_WARNIEXSS="Possible IE XSS Attack found." +COM_PHOCACOMMANDER_FTP_LOGIN_DESC="For uploading files, Joomla! will most likely need your FTP account details. Please enter them in the form fields below." +COM_PHOCACOMMANDER_FTP_LOGIN_LABEL="FTP Login Details" +COM_PHOCACOMMANDER_MAX_UPLOAD_SIZE="Max upload size" +COM_PHOCACOMMANDER_FIELD_ALLOWED_FILE_TYPES_UPLOAD_DESC="Set allowed file types for upload. Default list of filetypes is not complete and should be modified to fit your needs." +COM_PHOCACOMMANDER_FIELD_ALLOWED_FILE_TYPES_UPLOAD_LABEL="Allowed File Types (Upload)" +COM_PHOCACOMMANDER_FIELD_DISALLOWED_FILE_TYPES_UPLOAD_DESC="Set disallowed file types for upload" +COM_PHOCACOMMANDER_FIELD_DISALLOWED_FILE_TYPES_UPLOAD_LABEL="Disallowed File Types (Upload)" +COM_PHOCACOMMANDER_FIELD_OVERWRITE_EXISTING_FILES_DESC="Set if uploaded files should overwrite existing files on the server" +COM_PHOCACOMMANDER_FIELD_OVERWRITE_EXISTING_FILES_LABEL="Overwrite Existing Files" +COM_PHOCACOMMANDER_FIELD_UPLOAD_MAX_SIZE_ADMIN_DESC="Set the maximum size for an upload. Use zero for no limit. Do not forget, that the upload size can be limited by the server settings (in bytes)" +COM_PHOCACOMMANDER_FIELD_UPLOAD_MAX_SIZE_ADMIN_LABEL="Maximum Upload Size" +COM_PHOCACOMMANDER_IGNORE_FILE_TYPES_CHECK_LABEL="Ignore File Types Checking" +COM_PHOCACOMMANDER_IGNORE_FILE_TYPES_CHECK_DESC="Set if checking of file types will be ignored. If yes: Allowed File Types (Upload) and Disallowed File Types (Upload) will be ignored." +COM_PHOCACOMMANDER_YES="Yes" +COM_PHOCACOMMANDER_NO="No" +COM_PHOCACOMMANDER_FILES_CHMOD_CHANGED="files changed (permission)" +COM_PHOCACOMMANDER_FILES_NOT_CHMOD_CHANGED="files not changed (permission)" +COM_PHOCACOMMANDER_FOLDERS_CHMOD_CHANGED="folders changed (permission)" +COM_PHOCACOMMANDER_FOLDERS_NOT_CHMOD_CHANGED="folders not changed (permission)" +COM_PHOCACOMMANDER_NO_FILES_CHMOD_CHANGED="No files changed (permission)" +COM_PHOCACOMMANDER_NO_FOLDERS_CHMOD_CHANGED="No folders changed (permission)" +COM_PHOCACOMMANDER_FILE_CHMOD_CHANGED="File changed (permission)" +COM_PHOCACOMMANDER_FOLDER_CHMOD_CHANGED="Folder changed (permission)" +COM_PHOCACOMMANDER_FILE_NOT_CHMOD_CHANGED="File not changed (permission)" +COM_PHOCACOMMANDER_FOLDER_NOT_CHMOD_CHANGED="Folder not changed (permission)" +COM_PHOCACOMMANDER_FILE_PERMISSIONS="File permissions" +COM_PHOCACOMMANDER_ERROR_FAILED_TO_SAVE_FILENAME="Error - failed to save filename" +COM_PHOCACOMMANDER_FIELD_EDIT_NOT_WRITABLE_FILES_LABEL="Edit Not Writable Files" +COM_PHOCACOMMANDER_FIELD_EDIT_NOT_WRITABLE_FILES_DESC="Set if edit function can store files which should be not writable" +COM_PHOCACOMMANDER_EXTRACTED_FILES_OVERWRITE_EXISTING_FILES_WARNING="Be aware, extracted files will overwrite existing files" +COM_PHOCACOMMANDER_WELCOME_WARNING="
Be aware, you are about to manage real folders and files on your server.
Please see Documentation.
If you get some problems while using Phoca Commander, please ask in Phoca Forum.
" diff --git a/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.sys.ini b/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.sys.ini new file mode 100644 index 00000000..aab3a078 --- /dev/null +++ b/packages/phocacommander/administrator/language/en-GB/en-GB.com_phocacommander.sys.ini @@ -0,0 +1,19 @@ +; @package Joomla.Framework +; @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved. +; @license GNU General Public License version 2 or later; see LICENSE.txt +; +; @component Phoca Component +; @copyright Copyright (C) Jan Pavelka www.phoca.cz +; @license http://www.gnu.org/copyleft/gpl.html GNU General Public License version 2 or later; +; +; @test utf-8 ä, ö, ü +; + +;[3.0.0] +COM_PHOCACOMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_CONTROLPANEL="Control Panel" +COM_PHOCACOMMANDER_INFO="Info" +COM_PHOCACOMMANDER_XML_DESCRIPTION="Phoca Commander - Joomla! CMS component. File manager for Joomla! CMS." +COM_PHOCACOMMANDER_UPDATE_TEXT="Phoca Commander updated" +COM_PHOCACOMMANDER_VERSION="Version" + diff --git a/packages/phocacommander/components/com_phocacommander/index.html b/packages/phocacommander/components/com_phocacommander/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/components/com_phocacommander/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.ini b/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.ini new file mode 100644 index 00000000..2e964913 --- /dev/null +++ b/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.ini @@ -0,0 +1,310 @@ +; @package Joomla.Framework +; @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved. +; @license GNU General Public License version 2 or later; see LICENSE.txt +; +; @component Phoca Component +; @copyright Copyright (C) Jan Pavelka www.phoca.cz +; @license http://www.gnu.org/copyleft/gpl.html GNU General Public License version 2 or later; +; +; @test utf-8 ä, ö, ü +; + + +;[3.0.2] +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_DOWNLOADED="Folder cannot be downloaded" +COM_PHOCACOMMANDER_DISPLAY_DOWNLOAD_BUTTON_LABEL="Display Download Button" +COM_PHOCACOMMANDER_DISPLAY_DOWNLOAD_BUTTON_DESC="Display or hide download button" +COM_PHOCACOMMANDER_DISPLAY_UPLOAD_BUTTON_LABEL="Display Upload Button" +COM_PHOCACOMMANDER_DISPLAY_UPLOAD_BUTTON_DESC="Display or hide upload button" + +;[3.0.1] +COM_PHOCACOMMANDER_LIST_OF_UPLOAD_ERRORS="List of upload errors" +COM_PHOCACOMMANDER_FILE_DOES_NOT_EXIST="File does not exist" +COM_PHOCACOMMANDER_VIEW="View" +COM_PHOCACOMMANDER_DOWNLOAD="Download" +COM_PHOCACOMMANDER_CONFIG_INLINE_ACTIONS_LABEL="Inline Actions" +COM_PHOCACOMMANDER_DISPLAY_INLINE_DOWNLOAD_LABEL="Display Inline Download" +COM_PHOCACOMMANDER_DISPLAY_INLINE_DOWNLOAD_DESC="Display or hide inline download icon" +COM_PHOCACOMMANDER_DISPLAY_INLINE_VIEW_LABEL="Display Inline View" +COM_PHOCACOMMANDER_DISPLAY_INLINE_VIEW_DESC="Display or hide inline view icon" +COM_PHOCACOMMANDER_DISPLAY_INLINE_EDIT_LABEL="Display Inline Edit" +COM_PHOCACOMMANDER_DISPLAY_INLINE_EDIT_DESC="Display or hide inline edit icon" + +;[3.0.0] +COM_PHOCACOMMANDER_ENABLE_ZIP_FUNCTION_LABEL="Enable ZIP Function" +COM_PHOCACOMMANDER_ENABLE_ZIP_FUNCTION_DESC="Enable or disable ZIP function. Be aware, for running ZIP successfully, permissions and ownership of files and folders on your server needs to be OK. You can use this feature for zipping small files and small amount of files. Zipping large files or large amount of files can cause server problems (halting, overloading, performance problems or unexpected errors). For zipping large files or large amount of files like backup is, use standard server tools. Always check your newly created ZIP, if it includes all folders and files." +COM_PHOCACOMMANDER_EXPERTS_ONLY_LABEL="Experts only" +COM_PHOCADOWNLOAD_EXPERIMENATAL_FEATURES_LABEL="Experimental Features" +COM_PHOCADOWNLOAD_EXPERIMENATAL_FEATURES_DESC="Please, read documenation before enabling experimental feature." +COM_PHOCACOMMANDER_ZIP_PACKAGE_CREATED="ZIP package created" +COM_PHOCACOMMANDER_ERROR_ZIP_FILE_COULD_NOT_BE_CREATED="Error - ZIP file could not be created" +COM_PHOCACOMMANDER_ERROR_FILE_COULD_NOT_BE_CREATED="Error - file could not be created" +COM_PHOCACOMMANDER_ERROR_FILE_EXISTS="Error - file exists" +COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND_OR_WRONG_FILENAME_SET="Error - no value sent or wrong file name added" +COM_PHOCACOMMANDER_PACK="Pack" +COM_PHOCACOMMANDER_SET_PACKAGE_NAME="Set package name" +COM_PHOCACOMMANDER_PACK="Pack" +COM_PHOCACOMMANDER_FIELD_CREATE_INDEX_FILE_LABEL="Create Index File" +COM_PHOCACOMMANDER_FIELD_CREATE_INDEX_FILE_DESC="If new folder will be created, set if index.html file will be created inside this folder." +COM_PHOCACOMMANDER_PHOCA_NEEDS_YOUR_HELP="Phoca Needs Your Help" +COM_PHOCACOMMANDER_PLEASE_READ="Please Read" +COM_PHOCACOMMANDER_USEFUL_TIPS="Useful Tips (Extensions)" +COM_PHOCACOMMANDER_USEFUL_LINKS="Useful Links" +;[3.0.0 Beta] +COM_PHOCACOMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_CM_INFO="Phoca Commander Info" +COM_PHOCACOMMANDER_PHOCA_COMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_INFORMATION="Information" +COM_PHOCACOMMANDER_HELP="Help" +COM_PHOCACOMMANDER_VERSION="Version" +COM_PHOCACOMMANDER_COPYRIGHT="Copyright" +COM_PHOCACOMMANDER_LICENSE="License" +COM_PHOCACOMMANDER_CONTROLPANEL="Control Panel" +COM_PHOCACOMMANDER_INFO="Info" +COM_PHOCACOMMANDER_XML_DESCRIPTION="Phoca Commander - Joomla! CMS component. File manager for Joomla! CMS." +COM_PHOCACOMMANDER_UPDATE_TEXT="Phoca Commander updated" +COM_PHOCACOMMANDER_NAME="Name" +COM_PHOCACOMMANDER_SIZE="Size" +COM_PHOCACOMMANDER_DATE="Date" +COM_PHOCACOMMANDER_ATTRIBUTES="Attributes" +COM_PHOCACOMMANDER_ATTR="Attr" +COM_PHOCACOMMANDER_OWNER="Owner" +COM_PHOCACOMMANDER_NO_FILE_NO_FOLDER_SELECTED="No file or no folder selected" +; For Translaters - set your own data here +COM_PHOCACOMMANDER_TRANSLATION="Translation" +COM_PHOCACOMMANDER_TRANSLATION_LANGUAGE_TAG="English" +COM_PHOCACOMMANDER_TRANSLATER="Jan Pavelka" +COM_PHOCACOMMANDER_TRANSLATION_SUPPORT_URL="www.phoca.cz" +; End Translaters section - - - - - - - - +COM_PHOCACOMMANDER_CHECK_FOR_UPDATE="Check For Update" +COM_PHOCACOMMANDER_CONFIG_HEAD_GENERAL_LABEL="General" +COM_PHOCACOMMANDER_CONFIGURATION="Configuration" +COM_PHOCACOMMANDER_ARE_YOU_SURE_COPY="Are you sure you want to copy" +COM_PHOCACOMMANDER_ARE_YOU_SURE_MOVE="Are you sure you want to move" +COM_PHOCACOMMANDER_ARE_YOU_SURE_DELETE="Are you sure you want to delete" +COM_PHOCACOMMANDER_JOOMLA_ROOT_FOLDER="Joomla! root folder" +COM_PHOCACOMMANDER_TO="to" +COM_PHOCACOMMANDER_FILES_FOLDERS="Files (Folders)" +COM_PHOCACOMMANDER_FOLDER="Folder" +COM_PHOCACOMMANDER_FILE="File" +COM_PHOCACOMMANDER_FOLDER_SM="folder" +COM_PHOCACOMMANDER_FILES_FOLDERS_SM="files (folders)" +COM_PHOCACOMMANDER_PERMANENTLY_REMOVE_WARNING="Be aware, this action removes selected files or folders (include their subfolders and files) from your server permanently" +COM_PHOCACOMMANDER_F1_ATTRIBUTES="F1 Attributes" +COM_PHOCACOMMANDER_F2_RENAME="F2 Rename" +COM_PHOCACOMMANDER_F3_VIEW="F3 View" +COM_PHOCACOMMANDER_F4_EDIT="F4 Edit" +COM_PHOCACOMMANDER_F5_COPY="F5 Copy" +COM_PHOCACOMMANDER_F6_MOVE="F6 Move" +COM_PHOCACOMMANDER_F7_NEW_FOLDER="F7 New Folder" +COM_PHOCACOMMANDER_F8_DELETE="F8 Delete" +COM_PHOCACOMMANDER_F9_UNPACK="F9 Unpack" +COM_PHOCACOMMANDER_F10_UPLOAD="F10 Upload" +COM_PHOCACOMMANDER_F1="F1" +COM_PHOCACOMMANDER_F2="F2" +COM_PHOCACOMMANDER_F3="F3" +COM_PHOCACOMMANDER_F4="F4" +COM_PHOCACOMMANDER_F5="F5" +COM_PHOCACOMMANDER_F6="F6" +COM_PHOCACOMMANDER_F7="F7" +COM_PHOCACOMMANDER_F8="F8" +COM_PHOCACOMMANDER_F9="F9" +COM_PHOCACOMMANDER_F10="F10" +COM_PHOCACOMMANDER_ONLY_ONE_FILE_OR_FOLDER_NEEDS_TO_BE_SELECTED="Only one file or folder needs to be selected" +COM_PHOCACOMMANDER_RENAME="Rename" +COM_PHOCACOMMANDER_ONLY_ONE_FILE_NEEDS_TO_BE_SELECTED="Only one file needs to be selected" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_PREVIEWED_OR_EDITED="Folder cannot be previewed or edited" +COM_PHOCACOMMANDER_NEW_FOLDER="New Folder" +COM_PHOCACOMMANDER_NEW_ATTRIBUTES="New Attributes" +COM_PHOCACOMMANDER_CLOSE="Close" +COM_PHOCACOMMANDER_OK="OK" +COM_PHOCACOMMANDER_CANCEL="Cancel" +COM_PHOCACOMMANDER_WARNING="Warning" +COM_PHOCACOMMANDER_CONFIRM="Confirm" +COM_PHOCACOMMANDER_SET="Set" +COM_PHOCACOMMANDER_CREATE="Create" +COM_PHOCACOMMANDER_UPDATING="Updating" +COM_PHOCACOMMANDER_GROUP="Group" +COM_PHOCACOMMANDER_OTHER="Other" +COM_PHOCACOMMANDER_READ="Read" +COM_PHOCACOMMANDER_WRITE="Write" +COM_PHOCACOMMANDER_EXECUTE="Execute" +COM_PHOCACOMMANDER_VALUE="Value" +COM_PHOCACOMMANDER_PERMISSION="Permission" +COM_PHOCACOMMANDER_NEW_ATTRIBUTE="New Attribute" +COM_PHOCACOMMANDER_SET_NEW_ATTRIBUTE_FOR="Set new attribute for" +COM_PHOCACOMMANDER_ERROR_NO_VALID_REQUEST="Error - no valid request" +COM_PHOCACOMMANDER_ERROR_NO_VALID_TASK="Error - no valid task" +COM_PHOCACOMMANDER_ERROR_NO_VALUE_SEND="Error - no value send" +COM_PHOCACOMMANDER_ITEM_RENAMED="Item renamed" +COM_PHOCACOMMANDER_ERROR_NO_FILE_OR_FOLDER_FOUND="Error - no file or folder found" +COM_PHOCACOMMANDER_ERROR_FOLDER_NOT_EXIST="Folder does not exist" +COM_PHOCACOMMANDER_ERROR_FILE_NOT_EXIST="File does not exist" +COM_PHOCACOMMANDER_FILE_RENAMED="File renamed" +COM_PHOCACOMMANDER_FOLDER_RENAMED="Folder renamed" +COM_PHOCACOMMANDER_ONLY_IMAGES_CAN_BE_PREVIEWED="Only images can be previewed" +COM_PHOCACOMMANDER_EDIT="Edit" +COM_PHOCACOMMANDER_EDIT_OPTIONS="Edit Options" +COM_PHOCACOMMANDER_FIELD_CONTENT_LABEL="Content" +COM_PHOCACOMMANDER_FIELD_CONTENT_DESC="Edit content" +COM_PHOCACOMMANDER_FIELD_FILENAME_LABEL="Filename" +COM_PHOCACOMMANDER_FIELD_FILENAME_DESC="Filename (include path)" +COM_PHOCACOMMANDER_ERROR_NEW_NAME_SAME_OLD="New name is the same like the old one" +COM_PHOCACOMMANDER_EDITING_FILE="Editing file" +COM_PHOCACOMMANDER_TOGGLE_FULL_SCREEN="Press Ctrl-Q to toggle Full Screen editing." +COM_PHOCACOMMANDER_ERROR_FILE_NOT_WRITABLE="Error - file is not writable" +COM_PHOCACOMMANDER_FILE_PERMISSIONS="Permissions" +COM_PHOCACOMMANDER_CHECK_FILE_OWNERSHIP="Check file ownership" +COM_PHOCACOMMANDER_ERROR_SOURCE_FILE_NOT_UNWRITABLE="Source file can't be returned to unwritable status" +COM_PHOCACOMMANDER_ERROR_FAILED_TO_SAVE_FILENAME="Error - the file %s could not be saved." +COM_PHOCACOMMANDER_ERROR_SOURCE_SAME_DESTINATION="Error - source is the same as destination" +COM_PHOCACOMMANDER_SERVER_ERROR="Server error" +COM_PHOCACOMMANDER_OVERWRITE_EXISTING_FOLDERS_FILES="Overwrite existing folders and files" +COM_PHOCACOMMANDER_COPY="Copy" +COM_PHOCACOMMANDER_ALL_FILES_COPIED="All files copied" +COM_PHOCACOMMANDER_FILES_COPIED="files copied" +COM_PHOCACOMMANDER_FILES_NOT_COPIED="files not copied" +COM_PHOCACOMMANDER_ALL_FOLDERS_COPIED="All folders copied" +COM_PHOCACOMMANDER_FOLDERS_COPIED="folders copied" +COM_PHOCACOMMANDER_FOLDERS_NOT_COPIED="files not copied" +COM_PHOCACOMMANDER_NO_FILES_COPIED="No files copied" +COM_PHOCACOMMANDER_NO_FOLDERS_COPIED="No folders copied" +COM_PHOCACOMMANDER_NO_ALL_FILES_COPIED="Not all files copied" +COM_PHOCACOMMANDER_NO_ALL_FOLDERS_COPIED="Not all folders copied" +COM_PHOCACOMMANDER_FILE_COPIED="File copied" +COM_PHOCACOMMANDER_FOLDER_COPIED="Folder copied" +COM_PHOCACOMMANDER_FILE_NOT_COPIED="File not copied" +COM_PHOCACOMMANDER_FOLDER_NOT_COPIED="Folder not copied" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_COPIED_OWN_SUBFOLDER="Folder cannot be copied to its own subfolder" +COM_PHOCACOMMANDER_MOVE="Move" +COM_PHOCACOMMANDER_ALL_FILES_MOVED="All files moved" +COM_PHOCACOMMANDER_FILES_MOVED="files moved" +COM_PHOCACOMMANDER_FILES_NOT_MOVED="files not moved" +COM_PHOCACOMMANDER_ALL_FOLDERS_MOVED="All folders moved" +COM_PHOCACOMMANDER_FOLDERS_MOVED="folders moved" +COM_PHOCACOMMANDER_FOLDERS_NOT_MOVED="folders not moved" +COM_PHOCACOMMANDER_NO_FILES_MOVED="No files moved" +COM_PHOCACOMMANDER_NO_FOLDERS_MOVED="No folders moved" +COM_PHOCACOMMANDER_NO_ALL_FILES_MOVED="Not all files moved" +COM_PHOCACOMMANDER_NO_ALL_FOLDERS_MOVED="Not all folders moved" +COM_PHOCACOMMANDER_FILE_MOVED="File moved" +COM_PHOCACOMMANDER_FOLDER_MOVED="Folder moved" +COM_PHOCACOMMANDER_FILE_NOT_MOVED="File not moved" +COM_PHOCACOMMANDER_FOLDER_NOT_MOVED="Folder not moved" +COM_PHOCACOMMANDER_FOLDER_CANNOT_BE_MOVED_OWN_SUBFOLDER="Folder cannot be moved to its own subfolder" +COM_PHOCACOMMANDER_FOLDER_NOT_OVERWRITTEN="Folder not overwritten" +COM_PHOCACOMMANDER_FILE_NOT_OVERWRITTEN="File not overwritten" +COM_PHOCACOMMANDER_GENERAL_OPTIONS_LABEL="General Options" +COM_PHOCACOMMANDER_FIELD_F_KEYS_DESC="Display F keys with titles or without titles" +COM_PHOCACOMMANDER_FIELD_F_KEYS_LABEL="F Keys" +COM_PHOCACOMMANDER_WITHOUT_TITLES="Without Titles" +COM_PHOCACOMMANDER_WITH_TITLES="With Titles" +COM_PHOCACOMMANDER_FIELD_BOX_HEIGHT_DESC="Set box (panel) height in px" +COM_PHOCACOMMANDER_FIELD_BOX_HEIGHT_LABEL="Box (Panel) Height" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NAME_EXISTS="New folder name is the same like existing folder" +COM_PHOCACOMMANDER_ERROR_NEW_FILE_NAME_EXISTS="New file name is the same like existing file" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_CREATED="New folder created" +COM_PHOCACOMMANDER_ERROR_NEW_FOLDER_NOT_CREATED="New folder not created" +COM_PHOCACOMMANDER_FILE_DELETED="File deleted" +COM_PHOCACOMMANDER_FILES_DELETED="files deleted" +COM_PHOCACOMMANDER_FILE_NOT_DELETED="File not deleted" +COM_PHOCACOMMANDER_NO_FILES_DELETED="No files deleted" +COM_PHOCACOMMANDER_FILES_NOT_DELETED="files not deleted" +COM_PHOCACOMMANDER_FOLDER_DELETED="Folder deleted (include its subfolders and files)" +COM_PHOCACOMMANDER_FOLDERS_DELETED="folders deleted (include their subfolders and files)" +COM_PHOCACOMMANDER_FOLDER_NOT_DELETED="Folder not deleted" +COM_PHOCACOMMANDER_NO_FOLDERS_DELETED="No folders deleted" +COM_PHOCACOMMANDER_FOLDERS_NOT_DELETED="folders not deleted" +COM_PHOCACOMMANDER_ARE_YOU_SURE_UNPACK="Are you sure you want to unpack" +COM_PHOCACOMMANDER_UNPACK="Unpack" +COM_PHOCACOMMANDER_ONLY_ARCHIVE_FILE_CAN_BE_UNPACKED="Only archive file can be unpacked" +COM_PHOCACOMMANDER_FILE_NOT_ARCHIVE="File is not archive package" +COM_PHOCACOMMANDER_FILE_CANNOT_BE_UNPACKED_FILE_EXISTS="File cannot be unpacked. One of the files or folders included in archive package exists in destination folder" +COM_PHOCACOMMANDER_FILE_UNPACKED="File unpacked" +COM_PHOCACOMMANDER_FILE_NOT_UNPACKED="File not unpacked" +COM_PHOCACOMMANDER_WRONG_REQUEST="Wrong request" +COM_PHOCACOMMANDER_UPLOAD="Upload" +COM_PHOCACOMMANDER_UPLOAD_FILE="Unpload File" +COM_PHOCACOMMANDER_MAX_SIZE="Max Size" +COM_PHOCACOMMANDER_SELECT_FILES="Select files" +COM_PHOCACOMMANDER_ADD_FILES="Add Files" +COM_PHOCACOMMANDER_ADD_FILES_TO_UPLOAD_QUEUE_AND_CLICK_START_BUTTON="Add files to the upload queue and click the start button." +COM_PHOCACOMMANDER_FILENAME="Filename" +COM_PHOCACOMMANDER_SIZE="Size" +COM_PHOCACOMMANDER_STATUS="Status" +COM_PHOCACOMMANDER_NOT_AUTHORISED_ACTION="You are not authorized to do this action" +COM_PHOCACOMMANDER_NOT_AUTHORISED_TO_UPLOAD="You are not authorized to upload file" +COM_PHOCACOMMANDER_NOT_INSTALLED_BROWSERPLUS="You browser doesn't have BrowserPlus installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_FLASH="You browser doesn't have Flash installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_GEARS="You browser doesn't have Gears installed." +COM_PHOCACOMMANDER_NOT_INSTALLED_SILVERLIGHT="You browser doesn't have Silverlight installed." +COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML4="You browser doesn't have HTML 4 support." +COM_PHOCACOMMANDER_NOT_SUPPORTED_HTML5="You browser doesn't have HTML 5 support." +COM_PHOCACOMMANDER_START="Start" +COM_PHOCACOMMANDER_START_PUBLISHING="Start Publishing" +COM_PHOCACOMMANDER_START_UPLOAD="Start Upload" +COM_PHOCACOMMANDER_START_UPLOADING_QUEUE="Start Uploading Queue" +COM_PHOCACOMMANDER_STATISTICS="Statistics" +COM_PHOCACOMMANDER_STATUS="Status" +COM_PHOCACOMMANDER_STOP_CURRENT_UPLOAD="Stop Current Upload" +COM_PHOCACOMMANDER_SUCCESS="Success" +COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOAD="File uploaded" +COM_PHOCACOMMANDER_SUCCESS_FILE_UPLOADED="File uploaded" +COM_PHOCACOMMANDER_SUCCESS_FOLDER_CREATING="Folder created" +COM_PHOCACOMMANDER_SUCCESS_RESET_USER_STAT="User Statistics reset" +COM_PHOCACOMMANDER_THERE_IS_NO_FILE="There is no file" +COM_PHOCACOMMANDER_DRAG_FILES_HERE="Drag files here" +COM_PHOCACOMMANDER_UPLOADING_FINISHED="Uploading finished" +COM_PHOCACOMMANDER_ERROR="Error" +COM_PHOCACOMMANDER_WARNFILENAME="File name must only contain alphanumeric characters, underscores, hyphens and spaces." +COM_PHOCACOMMANDER_WARNFILETOOLARGE="This file is too large to upload." +COM_PHOCACOMMANDER_WARNFILETYPE="This file type is not supported (or there are some restrictions on the server)." +COM_PHOCACOMMANDER_WARNFILETYPE_DISALLOWED="The file type is disallowed - file cannot be uploaded" +COM_PHOCACOMMANDER_WARNFILETYPE_DISALLOWED_DOWNLOAD="Error while downloading file (Disallowed Mime Type)" +COM_PHOCACOMMANDER_WARNFILETYPE_DOWNLOAD="Error while downloading file (Mime Type not found)" +COM_PHOCACOMMANDER_WARNFILETYPE_NOT_ALLOWED="The file type is not allowed - file cannot be uploaded" +COM_PHOCACOMMANDER_INVALID_TOKEN="Invalid Token" +COM_PHOCACOMMANDER_FILE_ALREADY_EXISTS="File already exists" +COM_PHOCACOMMANDER_ERROR_FOLDER_UPLOAD_NOT_EXISTS="Folder does not exist or it is not accessible" +COM_PHOCACOMMANDER_ERROR_OPEN_INPUT_STREAM="Failed to open input stream" +COM_PHOCACOMMANDER_ERROR_OPEN_OUTPUT_STREAM="Failed to open output stream" +COM_PHOCACOMMANDER_ERROR_MOVE_UPLOADED_FILE="Failed to move uploaded file" +COM_PHOCACOMMANDER_ERROR_UNABLE_TO_MOVE_FILE="Unable to move file" +COM_PHOCACOMMANDER_CHECK_PERMISSIONS_OWNERSHIP="Check permissions and ownership of files and folders" +COM_PHOCACOMMANDER_SUCCESS="Success" +COM_PHOCACOMMANDER_FILES_UPLOADED="Files uploaded" +COM_PHOCACOMMANDER_ERROR_UNABLE_TO_UPLOAD_FILE="Unable to upload file" +COM_PHOCACOMMANDER_WARNING_INPUT_FILE_UPLOAD="Please input a file for upload" +COM_PHOCACOMMANDER_WARNINVALIDMIME="Illegal or invalid mime type detected." +COM_PHOCACOMMANDER_WARNIEXSS="Possible IE XSS Attack found." +COM_PHOCACOMMANDER_FTP_LOGIN_DESC="For uploading files, Joomla! will most likely need your FTP account details. Please enter them in the form fields below." +COM_PHOCACOMMANDER_FTP_LOGIN_LABEL="FTP Login Details" +COM_PHOCACOMMANDER_MAX_UPLOAD_SIZE="Max upload size" +COM_PHOCACOMMANDER_FIELD_ALLOWED_FILE_TYPES_UPLOAD_DESC="Set allowed file types for upload. Default list of filetypes is not complete and should be modified to fit your needs." +COM_PHOCACOMMANDER_FIELD_ALLOWED_FILE_TYPES_UPLOAD_LABEL="Allowed File Types (Upload)" +COM_PHOCACOMMANDER_FIELD_DISALLOWED_FILE_TYPES_UPLOAD_DESC="Set disallowed file types for upload" +COM_PHOCACOMMANDER_FIELD_DISALLOWED_FILE_TYPES_UPLOAD_LABEL="Disallowed File Types (Upload)" +COM_PHOCACOMMANDER_FIELD_OVERWRITE_EXISTING_FILES_DESC="Set if uploaded files should overwrite existing files on the server" +COM_PHOCACOMMANDER_FIELD_OVERWRITE_EXISTING_FILES_LABEL="Overwrite Existing Files" +COM_PHOCACOMMANDER_FIELD_UPLOAD_MAX_SIZE_ADMIN_DESC="Set the maximum size for an upload. Use zero for no limit. Do not forget, that the upload size can be limited by the server settings (in bytes)" +COM_PHOCACOMMANDER_FIELD_UPLOAD_MAX_SIZE_ADMIN_LABEL="Maximum Upload Size" +COM_PHOCACOMMANDER_IGNORE_FILE_TYPES_CHECK_LABEL="Ignore File Types Checking" +COM_PHOCACOMMANDER_IGNORE_FILE_TYPES_CHECK_DESC="Set if checking of file types will be ignored. If yes: Allowed File Types (Upload) and Disallowed File Types (Upload) will be ignored." +COM_PHOCACOMMANDER_YES="Yes" +COM_PHOCACOMMANDER_NO="No" +COM_PHOCACOMMANDER_FILES_CHMOD_CHANGED="files changed (permission)" +COM_PHOCACOMMANDER_FILES_NOT_CHMOD_CHANGED="files not changed (permission)" +COM_PHOCACOMMANDER_FOLDERS_CHMOD_CHANGED="folders changed (permission)" +COM_PHOCACOMMANDER_FOLDERS_NOT_CHMOD_CHANGED="folders not changed (permission)" +COM_PHOCACOMMANDER_NO_FILES_CHMOD_CHANGED="No files changed (permission)" +COM_PHOCACOMMANDER_NO_FOLDERS_CHMOD_CHANGED="No folders changed (permission)" +COM_PHOCACOMMANDER_FILE_CHMOD_CHANGED="File changed (permission)" +COM_PHOCACOMMANDER_FOLDER_CHMOD_CHANGED="Folder changed (permission)" +COM_PHOCACOMMANDER_FILE_NOT_CHMOD_CHANGED="File not changed (permission)" +COM_PHOCACOMMANDER_FOLDER_NOT_CHMOD_CHANGED="Folder not changed (permission)" +COM_PHOCACOMMANDER_FILE_PERMISSIONS="File permissions" +COM_PHOCACOMMANDER_ERROR_FAILED_TO_SAVE_FILENAME="Error - failed to save filename" +COM_PHOCACOMMANDER_FIELD_EDIT_NOT_WRITABLE_FILES_LABEL="Edit Not Writable Files" +COM_PHOCACOMMANDER_FIELD_EDIT_NOT_WRITABLE_FILES_DESC="Set if edit function can store files which should be not writable" +COM_PHOCACOMMANDER_EXTRACTED_FILES_OVERWRITE_EXISTING_FILES_WARNING="Be aware, extracted files will overwrite existing files" +COM_PHOCACOMMANDER_WELCOME_WARNING="
Be aware, you are about to manage real folders and files on your server.
  • Files can be managed like in your FTP client
  • There is no UNDO action
  • Some tasks like DELETE or MOVE can remove folders or files permanently
  • Unpacking archive files can overwrite existing files permanently
  • Some features may not work if they are limited by server settings
  • Success in working with folders and files depends on server settings (permissions, ownership)
  • Check file handling (FTP layer) in Global Configuration
Please see Documentation.
If you get some problems while using Phoca Commander, please ask in Phoca Forum.
" diff --git a/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.sys.ini b/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.sys.ini new file mode 100644 index 00000000..aab3a078 --- /dev/null +++ b/packages/phocacommander/language/en-GB/en-GB.com_phocacommander.sys.ini @@ -0,0 +1,19 @@ +; @package Joomla.Framework +; @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved. +; @license GNU General Public License version 2 or later; see LICENSE.txt +; +; @component Phoca Component +; @copyright Copyright (C) Jan Pavelka www.phoca.cz +; @license http://www.gnu.org/copyleft/gpl.html GNU General Public License version 2 or later; +; +; @test utf-8 ä, ö, ü +; + +;[3.0.0] +COM_PHOCACOMMANDER="Phoca Commander" +COM_PHOCACOMMANDER_CONTROLPANEL="Control Panel" +COM_PHOCACOMMANDER_INFO="Info" +COM_PHOCACOMMANDER_XML_DESCRIPTION="Phoca Commander - Joomla! CMS component. File manager for Joomla! CMS." +COM_PHOCACOMMANDER_UPDATE_TEXT="Phoca Commander updated" +COM_PHOCACOMMANDER_VERSION="Version" + diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/animated-overlay.gif b/packages/phocacommander/media/com_phocacommander/css/administrator/images/animated-overlay.gif new file mode 100644 index 00000000..d441f75e Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/animated-overlay.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_0_aaaaaa_40x100.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 00000000..5b5dab2a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_75_ffffff_40x100.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 00000000..ac8b229a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_55_fbf9ee_1x400.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 00000000..ad3d6346 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_65_ffffff_1x400.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 00000000..42ccba26 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_dadada_1x400.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 00000000..5a46b47c Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_e6e6e6_1x400.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 00000000..86c2baa6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_95_fef1ec_1x400.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 00000000..4443fdc1 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 00000000..7c9fa6c6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-icons_222222_256x240.png b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-icons_222222_256x240.png new file mode 100644 index 00000000..ee039dc0 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/css/administrator/images/ui-icons_222222_256x240.png differ diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/index.html b/packages/phocacommander/media/com_phocacommander/css/administrator/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/administrator/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/jquery-ui.css b/packages/phocacommander/media/com_phocacommander/css/administrator/jquery-ui.css new file mode 100644 index 00000000..0d902407 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/administrator/jquery-ui.css @@ -0,0 +1,1188 @@ +/*! jQuery UI - v1.10.3 - 2013-05-03 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} + +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; + font-size: 1.1em/*{fsDefault}*/; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa/*{borderColorContent}*/; + background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; + color: #222222/*{fcContent}*/; +} +.ui-widget-content a { + color: #222222/*{fcContent}*/; +} +.ui-widget-header { + border: 1px solid #aaaaaa/*{borderColorHeader}*/; + background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; + color: #222222/*{fcHeader}*/; + font-weight: bold; +} +.ui-widget-header a { + color: #222222/*{fcHeader}*/; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3/*{borderColorDefault}*/; + background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; + font-weight: normal/*{fwDefault}*/; + color: #555555/*{fcDefault}*/; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555/*{fcDefault}*/; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999/*{borderColorHover}*/; + background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; + font-weight: normal/*{fwDefault}*/; + color: #212121/*{fcHover}*/; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #212121/*{fcHover}*/; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa/*{borderColorActive}*/; + background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; + font-weight: normal/*{fwDefault}*/; + color: #212121/*{fcActive}*/; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121/*{fcActive}*/; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1/*{borderColorHighlight}*/; + background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; + color: #363636/*{fcHighlight}*/; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636/*{fcHighlight}*/; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a/*{borderColorError}*/; + background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; + color: #cd0a0a/*{fcError}*/; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a/*{fcError}*/; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a/*{fcError}*/; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px/*{cornerRadius}*/; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; + opacity: .3/*{opacityOverlay}*/; + filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; +} +.ui-widget-shadow { + margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; + padding: 8px/*{thicknessShadow}*/; + background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; + opacity: .3/*{opacityShadow}*/; + filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/; + border-radius: 8px/*{cornerRadiusShadow}*/; +} diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/phoca-ui.css b/packages/phocacommander/media/com_phocacommander/css/administrator/phoca-ui.css new file mode 100644 index 00000000..43a6afdf --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/administrator/phoca-ui.css @@ -0,0 +1,42 @@ +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 0px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 0px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 0px/*{cornerRadius}*/; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 0px/*{cornerRadius}*/; +} + +.ui-dialog { + border: 1px solid #fff; + -webkit-box-shadow: 0px 1px 4px rgba(70,70,70,0.5); + box-shadow: 0px 1px 4px rgba(70,70,70,0.5); +} + +.ui-dialog-titlebar { + background:#f0f0f0; + border: 0px; +} + +.ui-widget-overlay { + background: #fff; + opacity: .7/*{opacityOverlay}*/; + filter: Alpha(Opacity=70)/*{opacityFilterOverlay}*/; +} \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommander.css b/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommander.css new file mode 100644 index 00000000..d2e9f9ff --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommander.css @@ -0,0 +1,220 @@ +table.ph-table { + width: 100%; + +} +table.ph-table tr td, +table.ph-table tr th { +} + +/* Checkbox */ +#phPromptValueMove, +#phPromptValueUnpack, +#phPromptValueUnpackOther, +#phPromptValueCopy { + margin-bottom:5px; +} + +#selectAllA, +#selectAllB { + + margin-left: 2px; + margin-bottom: 3px; +} + +.ph-box-s { + border-bottom: 1px solid #c5c5c5; +} +.ph-box-b { + border-top: 1px solid #c5c5c5; +} + +.ph-box-o table, +.ph-box-o table.ph-table tr, +.ph-box-o table.ph-table tr, td { + margin:0; + padding:0px; + border-collapse: collapse; +} +.ph-box-o table.ph-table tr td{ + border: 1px solid #fcfcfc; +} + +table.ph-table tr th { + text-align: center; +} +.ph-box-s { + margin: 0; + padding: 0; + padding-right: 17px; +} + +.ph-status { + height:4px; + margin-right:-17px; + background: #f0f0f0; +} +.ph-box-o { + overflow: auto; + margin: 0; + padding: 0; +} + +th.ph-check { width: 1%; padding-left: 2px;white-space: nowrap} +th.ph-name { width: 44%;} +td.ph-name { width: 45%;} +td.ph-size, th.ph-size { width: 15%; text-align: right;padding-right: 5px !important;} +td.ph-date, th.ph-date { width: 20%; text-align: center;} +td.ph-attributes, th.ph-attributes { width: 10%; text-align: center;} +td.ph-owner, th.ph-owner {width: 10%; text-align: center;} + +.ph-a, +.ph-b { + border: 1px solid #d0d0d0; +} + +label.ph-checkbox { + display: block; + margin: 0; padding: 0; +} +label.ph-checkbox input { + + padding: 0; + margin:0; + vertical-align: bottom; + position: relative; + top: -2px; + *overflow: hidden; +} + +.ph-path { + background: #f0f0f0; + padding-left: 5px; + font-size: small; +} + +#ph-ajaxtop { + display: none; +} +.ph-commander-box { + + margin-left: 15px; +} +.ph-commander-box-in { + margin: 0 auto !important; +} +.ph-arrow { + font-size: 15px; + font-weight: 900; +} +/* +label.ph-checkbox:hover { + background: #f0f0f0 +}*/ + +label.ph-checkbox { + padding:2px; + border: 1px solid transparent; +} +label.ph-checkbox:hover { + border: 1px solid #CCE6FF; +} +.ph-active { + background: #CCE6FF; +} + +.ph-status-active { + background: #0059b2; +} + +/* Bootstrap conflict */ +.ui-icon-closethick { + margin-top: -2px; + margin-left: 0px; +} + + +#ph-ajaxtop-message { + position:fixed; + top:0px; + left:0; + right:0; + width:50%; + background:#ffe500; + border:5px solid #bfb130; + border-top: 0px; + -webkit-border-radius: 0px 0px 3px 3px; + border-radius: 0px 0px 3px 3px; + padding:10px; + margin: 0 auto; + text-align:center; + z-index: 9999; + color: #a69500; +} + +#ph-ajaxtop { + display: none; +} + +.ph-success-txt { + color: #468847; + font-weight: bold; +} +.ph-error-txt { + color: #B94A48; + font-weight: bold; +} + +.ph-file-folder { + font-weight: bold; + background: #CCE6FF; + padding: 0px 10px; +} + +.ph-dialog { + line-height: 1.7; + text-align: center !important; + display:none; +} +.ph-prepend-text { + +} + +.ph-table-attribs tr td, +.ph-table-attribs tr th{ + padding: 5px; + + +} + +.ph-table-attribs tr td .ph-input-attribs { + margin-top: 5px; +} + + +.ph-input-box-prompt { + margin-top:10px; +} +label.ph-input-prompt span{ +} +label.ph-input-prompt input.ph-input-checkbox-prompt { +} + +.ph-warning-text { + color: #FF3D3D; +} +.ph-main-warning { + +} +.ph-main-warning ul li { + text-align: left; +} +.ph-main-warning a { + text-decoration: underline; + font-weight: bold; +} + +#adminForm { + margin: 0 0 0 0 !important; +} + + diff --git a/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommanderoptions.css b/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommanderoptions.css new file mode 100644 index 00000000..a253ee81 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/administrator/phocacommanderoptions.css @@ -0,0 +1,34 @@ +label { + + +} + +hr { + border-bottom: 1px solid #cce6ff; + + display: block; + margin: 0; padding: 0; +} + +.ph-options-head { + background: #E5F3FF; + color: #0069CC; + border: 1px solid #B3DBFF; + padding:15px 10px; + margin:5px 0; + display:block; + text-shadow: 0 1px 0 #ffffff; + margin-left: -180px; +} + +.ph-options-head-expert { + background: #F2dede; + color: #b94a48; + border: 1px solid #edd3d6; + padding:15px 10px; + margin:5px 0; + display:block; + text-shadow: 0 1px 0 #ffffff; + margin-left: -180px; +} + diff --git a/packages/phocacommander/media/com_phocacommander/css/index.html b/packages/phocacommander/media/com_phocacommander/css/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-down.png b/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-down.png new file mode 100644 index 00000000..ff9dbfce Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-down.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-up.png b/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-up.png new file mode 100644 index 00000000..c6955209 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/arrow-up.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/b-prm.png b/packages/phocacommander/media/com_phocacommander/images/administrator/b-prm.png new file mode 100644 index 00000000..c83f0a8a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/b-prm.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-cats.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-cats.png new file mode 100644 index 00000000..b1e66a41 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-cats.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-info.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-info.png new file mode 100644 index 00000000..77ebfe26 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-info.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-items.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-items.png new file mode 100644 index 00000000..3472e414 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-items.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-phocacommander.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-phocacommander.png new file mode 100644 index 00000000..6403c945 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-48-phocacommander.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pc.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pc.png new file mode 100644 index 00000000..43222480 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pc.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pcm.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pcm.png new file mode 100644 index 00000000..26f3e87c Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pcm.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pd.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pd.png new file mode 100644 index 00000000..24c454eb Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pd.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pdc.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pdc.png new file mode 100644 index 00000000..4851e752 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pdc.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pe.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pe.png new file mode 100644 index 00000000..429e6824 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pe.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pf.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pf.png new file mode 100644 index 00000000..c2d84788 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pf.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pfv.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pfv.png new file mode 100644 index 00000000..a674f6e5 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pfv.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pg.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pg.png new file mode 100644 index 00000000..f85d8632 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pg.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pgb.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pgb.png new file mode 100644 index 00000000..82eb733f Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pgb.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ph.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ph.png new file mode 100644 index 00000000..96026da9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ph.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pi.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pi.png new file mode 100644 index 00000000..a2877e99 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pi.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pm.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pm.png new file mode 100644 index 00000000..71642abc Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pm.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pp.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pp.png new file mode 100644 index 00000000..23895d01 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pp.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ppdf.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ppdf.png new file mode 100644 index 00000000..f730e23f Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-ppdf.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-prm.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-prm.png new file mode 100644 index 00000000..04119cf9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-prm.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-psef.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-psef.png new file mode 100644 index 00000000..e723f51c Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-psef.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pt.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pt.png new file mode 100644 index 00000000..b88551db Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-box-pt.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-loading5.gif b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-loading5.gif new file mode 100644 index 00000000..b5a9fd23 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-loading5.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/icon-phoca-logo.png b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-phoca-logo.png new file mode 100644 index 00000000..063659a2 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/icon-phoca-logo.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/index.html b/packages/phocacommander/media/com_phocacommander/images/administrator/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/administrator/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/line.png b/packages/phocacommander/media/com_phocacommander/images/administrator/line.png new file mode 100644 index 00000000..df9aed4e Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/line.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/logo-phoca.png b/packages/phocacommander/media/com_phocacommander/images/administrator/logo-phoca.png new file mode 100644 index 00000000..5f90a58a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/logo-phoca.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/logo.png b/packages/phocacommander/media/com_phocacommander/images/administrator/logo.png new file mode 100644 index 00000000..f5f5b79a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/logo.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-7zip.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-7zip.png new file mode 100644 index 00000000..99ae6fc6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-7zip.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-audio.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-audio.png new file mode 100644 index 00000000..a67618d1 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-audio.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-document.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-document.png new file mode 100644 index 00000000..5732f9b2 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-document.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-drawing.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-drawing.png new file mode 100644 index 00000000..8f1da5c3 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-drawing.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-empty.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-empty.png new file mode 100644 index 00000000..69972298 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-empty.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder-open.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder-open.png new file mode 100644 index 00000000..2aa5cc75 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder-open.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder.png new file mode 100644 index 00000000..7c613e05 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-folder.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-gzip.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-gzip.png new file mode 100644 index 00000000..99ae6fc6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-gzip.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-html.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-html.png new file mode 100644 index 00000000..2f94a784 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-html.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-img.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-img.png new file mode 100644 index 00000000..add1c591 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-img.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-jar.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-jar.png new file mode 100644 index 00000000..99ae6fc6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-jar.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-pdf.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-pdf.png new file mode 100644 index 00000000..7408d8d6 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-pdf.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-php.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-php.png new file mode 100644 index 00000000..22c4df63 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-php.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-presentation.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-presentation.png new file mode 100644 index 00000000..db195e92 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-presentation.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-rar.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-rar.png new file mode 100644 index 00000000..8a0ff54f Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-rar.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-source.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-source.png new file mode 100644 index 00000000..5bef9207 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-source.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-spreadsheet.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-spreadsheet.png new file mode 100644 index 00000000..a0343673 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-spreadsheet.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-sql.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-sql.png new file mode 100644 index 00000000..b3b1467b Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-sql.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-tar.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-tar.png new file mode 100644 index 00000000..bab3b6ad Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-tar.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-txt.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-txt.png new file mode 100644 index 00000000..1d48677c Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-txt.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-video.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-video.png new file mode 100644 index 00000000..f92f7e1e Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-video.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-xml.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-xml.png new file mode 100644 index 00000000..83a83df9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-xml.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-zip.png b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-zip.png new file mode 100644 index 00000000..cc196c1e Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/icon-zip.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/index.html b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/16/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/AUTHORS b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/AUTHORS new file mode 100644 index 00000000..bb7475c4 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/AUTHORS @@ -0,0 +1,5 @@ +Faenza is designed and developed by Matthieu James . + +Faenza icons are all licensed under the GPL. + +Thanks to Holger Seelig and clemyeats for their help for having some text preview inside icons in Nautilus. diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/COPYING b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/mime/index.html b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/administrator/mime/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/spacer.gif b/packages/phocacommander/media/com_phocacommander/images/administrator/spacer.gif new file mode 100644 index 00000000..6964168b Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/spacer.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/images/administrator/up.png b/packages/phocacommander/media/com_phocacommander/images/administrator/up.png new file mode 100644 index 00000000..125c67e0 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/images/administrator/up.png differ diff --git a/packages/phocacommander/media/com_phocacommander/images/index.html b/packages/phocacommander/media/com_phocacommander/images/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/images/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/index.html b/packages/phocacommander/media/com_phocacommander/index.html new file mode 100644 index 00000000..ea9e94c1 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/jquery-ui.min.js b/packages/phocacommander/media/com_phocacommander/js/administrator/jquery-ui.min.js new file mode 100644 index 00000000..82bbb671 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/jquery-ui.min.js @@ -0,0 +1,12 @@ +/*! jQuery UI - v1.10.3 - 2013-05-03 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ +(function(t,e){function i(e,i){var n,o,a,r=e.nodeName.toLowerCase();return"area"===r?(n=e.parentNode,o=n.name,e.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap=#"+o+"]")[0],!!a&&s(a)):!1):(/input|select|textarea|button|object/.test(r)?!e.disabled:"a"===r?e.href||i:i)&&s(e)}function s(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return"hidden"===t.css(this,"visibility")}).length}var n=0,o=/^ui-id-\d+$/;t.ui=t.ui||{},t.extend(t.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({focus:function(e){return function(i,s){return"number"==typeof i?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),s&&s.call(e)},i)}):e.apply(this,arguments)}}(t.fn.focus),scrollParent:function(){var e;return e=t.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(t.css(this,"position"))&&/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(t.css(this,"overflow")+t.css(this,"overflow-y")+t.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!e.length?t(document):e},zIndex:function(i){if(i!==e)return this.css("zIndex",i);if(this.length)for(var s,n,o=t(this[0]);o.length&&o[0]!==document;){if(s=o.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(n=parseInt(o.css("zIndex"),10),!isNaN(n)&&0!==n))return n;o=o.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++n)})},removeUniqueId:function(){return this.each(function(){o.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])},focusable:function(e){return i(e,!isNaN(t.attr(e,"tabindex")))},tabbable:function(e){var s=t.attr(e,"tabindex"),n=isNaN(s);return(n||s>=0)&&i(e,!n)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],function(i,s){function n(e,i,s,n){return t.each(o,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),n&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var o="Width"===s?["Left","Right"]:["Top","Bottom"],a=s.toLowerCase(),r={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+s]=function(i){return i===e?r["inner"+s].call(this):this.each(function(){t(this).css(a,n(this,i)+"px")})},t.fn["outer"+s]=function(e,i){return"number"!=typeof e?r["outer"+s].call(this,e):this.each(function(){t(this).css(a,n(this,e,!0,i)+"px")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(i){return arguments.length?e.call(this,t.camelCase(i)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.support.selectstart="onselectstart"in document.createElement("div"),t.fn.extend({disableSelection:function(){return this.bind((t.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(t){t.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),t.extend(t.ui,{plugin:{add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i){var s,n=t.plugins[e];if(n&&t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType)for(s=0;n.length>s;s++)t.options[n[s][0]]&&n[s][1].apply(t.element,i)}},hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)}})})(jQuery),function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(o){}n(e)},t.widget=function(i,s,n){var o,a,r,h,l={},c=i.split(".")[0];i=i.split(".")[1],o=c+"-"+i,n||(n=s,s=t.Widget),t.expr[":"][o.toLowerCase()]=function(e){return!!t.data(e,o)},t[c]=t[c]||{},a=t[c][i],r=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new r(t,i)},t.extend(r,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),h=new s,h.options=t.widget.extend({},h.options),t.each(n,function(i,n){return t.isFunction(n)?(l[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,o=this._superApply;return this._super=t,this._superApply=e,i=n.apply(this,arguments),this._super=s,this._superApply=o,i}}(),e):(l[i]=n,e)}),r.prototype=t.widget.extend(h,{widgetEventPrefix:a?h.widgetEventPrefix:i},l,{constructor:r,namespace:c,widgetName:i,widgetFullName:o}),a?(t.each(a._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete a._childConstructors):s._childConstructors.push(r),t.widget.bridge(i,r)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,h=a.length;h>r;r++)for(n in a[r])o=a[r][n],a[r].hasOwnProperty(n)&&o!==e&&(i[n]=t.isPlainObject(o)?t.isPlainObject(i[n])?t.widget.extend({},i[n],o):t.widget.extend({},o):o);return i},t.widget.bridge=function(i,n){var o=n.prototype.widgetFullName||i;t.fn[i]=function(a){var r="string"==typeof a,h=s.call(arguments,1),l=this;return a=!r&&h.length?t.widget.extend.apply(null,[a].concat(h)):a,r?this.each(function(){var s,n=t.data(this,o);return n?t.isFunction(n[a])&&"_"!==a.charAt(0)?(s=n[a].apply(n,h),s!==n&&s!==e?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):e):t.error("no such method '"+a+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+a+"'")}):this.each(function(){var e=t.data(this,o);e?e.option(a||{})._init():t.data(this,o,new n(a,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;n.length-1>a;a++)o[n[a]]=o[n[a]]||{},o=o[n[a]];if(i=n.pop(),s===e)return o[i]===e?null:o[i];o[i]=s}else{if(s===e)return this.options[i]===e?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var o,a=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=o=t(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,o=this.widget()),t.each(n,function(n,r){function h(){return i||a.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?a[r]:r).apply(a,arguments):e}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||t.guid++);var l=n.match(/^(\w+)\s*(.*)$/),c=l[1]+a.eventNamespace,u=l[2];u?o.delegate(u,c,h):s.bind(c,h)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}})}(jQuery),function(t){var e=!1;t(document).mouseup(function(){e=!1}),t.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.bind("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).bind("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!e){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,o="string"==typeof this.options.cancel&&i.target.nodeName?t(i.target).closest(this.options.cancel).length:!1;return n&&!o&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===t.data(i.target,this.widgetName+".preventClickEvent")&&t.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return s._mouseMove(t)},this._mouseUpDelegate=function(t){return s._mouseUp(t)},t(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),e=!0,!0)):!0}},_mouseMove:function(e){return t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button?this._mouseUp(e):this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){return t(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),!1},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})}(jQuery),function(t){t.widget("ui.draggable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(t(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){t("
").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(t(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_mouseDrag:function(e,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"original"!==this.options.helper||t.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1):!1},_mouseUp:function(e){return t("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.element.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;return n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===n.containment?(this.containment=[0,0,t(document).width()-this.helperProportions.width-this.margins.left,(t(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):n.containment.constructor===Array?(this.containment=n.containment,undefined):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:n.scrollTop(),left:n.scrollLeft()}),{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*s}},_generatePosition:function(e){var i,s,n,o,a=this.options,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=e.pageX,l=e.pageY;return this.offset.scroll||(this.offset.scroll={top:r.scrollTop(),left:r.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s]),"drag"===e&&(this.positionAbs=this._convertPositionTo("absolute")),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i){var s=t(this).data("ui-draggable"),n=s.options,o=t.extend({},i,{item:s.element});s.sortables=[],t(n.connectToSortable).each(function(){var i=t.data(this,"ui-sortable");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",e,o))})},stop:function(e,i){var s=t(this).data("ui-draggable"),n=t.extend({},i,{item:s.element});t.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(e),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",e,n))})},drag:function(e,i){var s=t(this).data("ui-draggable"),n=this;t.each(s.sortables,function(){var o=!1,a=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(o=!0,t.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==a&&this.instance._intersectsWith(this.instance.containerCache)&&t.contains(a.instance.element[0],this.instance.element[0])&&(o=!1),o})),o?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=t(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},e.target=this.instance.currentItem[0],this.instance._mouseCapture(e,!0),this.instance._mouseStart(e,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",e),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(e)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",e,this.instance._uiHash(this.instance)),this.instance._mouseStop(e,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",e),s.dropped=!1)})}}),t.ui.plugin.add("draggable","cursor",{start:function(){var e=t("body"),i=t(this).data("ui-draggable").options;e.css("cursor")&&(i._cursor=e.css("cursor")),e.css("cursor",i.cursor)},stop:function(){var e=t(this).data("ui-draggable").options;e._cursor&&t("body").css("cursor",e._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(){var e=t(this).data("ui-draggable");e.scrollParent[0]!==document&&"HTML"!==e.scrollParent[0].tagName&&(e.overflowOffset=e.scrollParent.offset())},drag:function(e){var i=t(this).data("ui-draggable"),s=i.options,n=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-e.pageY=0;u--)r=p.snapElements[u].left,h=r+p.snapElements[u].width,l=p.snapElements[u].top,c=l+p.snapElements[u].height,r-g>v||m>h+g||l-g>b||_>c+g||!t.contains(p.snapElements[u].item.ownerDocument,p.snapElements[u].item)?(p.snapElements[u].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=!1):("inner"!==f.snapMode&&(s=g>=Math.abs(l-b),n=g>=Math.abs(c-_),o=g>=Math.abs(r-v),a=g>=Math.abs(h-m),s&&(i.position.top=p._convertPositionTo("relative",{top:l-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c,left:0}).top-p.margins.top),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r-p.helperProportions.width}).left-p.margins.left),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h}).left-p.margins.left)),d=s||n||o||a,"outer"!==f.snapMode&&(s=g>=Math.abs(l-_),n=g>=Math.abs(c-b),o=g>=Math.abs(r-m),a=g>=Math.abs(h-v),s&&(i.position.top=p._convertPositionTo("relative",{top:l,left:0}).top-p.margins.top),n&&(i.position.top=p._convertPositionTo("relative",{top:c-p.helperProportions.height,left:0}).top-p.margins.top),o&&(i.position.left=p._convertPositionTo("relative",{top:0,left:r}).left-p.margins.left),a&&(i.position.left=p._convertPositionTo("relative",{top:0,left:h-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[u].snapping&&(s||n||o||a||d)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,e,t.extend(p._uiHash(),{snapItem:p.snapElements[u].item})),p.snapElements[u].snapping=s||n||o||a||d)}}),t.ui.plugin.add("draggable","stack",{start:function(){var e,i=this.data("ui-draggable").options,s=t.makeArray(t(i.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});s.length&&(e=parseInt(t(s[0]).css("zIndex"),10)||0,t(s).each(function(i){t(this).css("zIndex",e+i)}),this.css("zIndex",e+s.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i){var s=t(i.helper),n=t(this).data("ui-draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(e,i){var s=t(this).data("ui-draggable").options;s._zIndex&&t(i.helper).css("zIndex",s._zIndex)}})}(jQuery),function(t){function e(t,e,i){return t>e&&e+i>t}t.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(i)?i:function(t){return t.is(i) +},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},t.ui.ddmanager.droppables[e.scope]=t.ui.ddmanager.droppables[e.scope]||[],t.ui.ddmanager.droppables[e.scope].push(this),e.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var e=0,i=t.ui.ddmanager.droppables[this.options.scope];i.length>e;e++)i[e]===this&&i.splice(e,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(e,i){"accept"===e&&(this.accept=t.isFunction(i)?i:function(t){return t.is(i)}),t.Widget.prototype._setOption.apply(this,arguments)},_activate:function(e){var i=t.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var e=t.data(this,"ui-droppable");return e.options.greedy&&!e.options.disabled&&e.options.scope===s.options.scope&&e.accept.call(e.element[0],s.currentItem||s.element)&&t.ui.intersect(s,t.extend(e,{offset:e.element.offset()}),e.options.tolerance)?(n=!0,!1):undefined}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}}}),t.ui.intersect=function(t,i,s){if(!i.offset)return!1;var n,o,a=(t.positionAbs||t.position.absolute).left,r=a+t.helperProportions.width,h=(t.positionAbs||t.position.absolute).top,l=h+t.helperProportions.height,c=i.offset.left,u=c+i.proportions.width,d=i.offset.top,p=d+i.proportions.height;switch(s){case"fit":return a>=c&&u>=r&&h>=d&&p>=l;case"intersect":return a+t.helperProportions.width/2>c&&u>r-t.helperProportions.width/2&&h+t.helperProportions.height/2>d&&p>l-t.helperProportions.height/2;case"pointer":return n=(t.positionAbs||t.position.absolute).left+(t.clickOffset||t.offset.click).left,o=(t.positionAbs||t.position.absolute).top+(t.clickOffset||t.offset.click).top,e(o,d,i.proportions.height)&&e(n,c,i.proportions.width);case"touch":return(h>=d&&p>=h||l>=d&&p>=l||d>h&&l>p)&&(a>=c&&u>=a||r>=c&&u>=r||c>a&&r>u);default:return!1}},t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions.height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions={width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight})}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&t.ui.intersect(e,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").bind("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=t.ui.intersect(e,this,this.options.tolerance),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t.data(this,"ui-droppable").options.scope===n}),o.length&&(s=t.data(o[0],"ui-droppable"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").unbind("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}}}(jQuery),function(t){function e(t){return parseInt(t,10)||0}function i(t){return!isNaN(parseInt(t,10))}t.widget("ui.resizable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var e,i,s,n,o,a=this,r=this.options;if(this.element.addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),e=this.handles.split(","),this.handles={},i=0;e.length>i;i++)s=t.trim(e[i]),o="ui-resizable-"+s,n=t("
"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=t(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),t(this.handles[i]).length},this._renderAxis(this.element),this._handles=t(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),t(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(t(this).removeClass("ui-resizable-autohide"),a._handles.show())}).mouseleave(function(){r.disabled||a.resizing||(t(this).addClass("ui-resizable-autohide"),a._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,o,a=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=e(this.helper.css("left")),n=e(this.helper.css("top")),a.containment&&(s+=t(a.containment).scrollLeft()||0,n+=t(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,o=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===o?this.axis+"-resize":o),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(e){var i,s=this.helper,n={},o=this.originalMousePosition,a=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,c=this.size.height,u=e.pageX-o.left||0,d=e.pageY-o.top||0,p=this._change[a];return p?(i=p.apply(this,[e,u,d]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==c&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||this._trigger("resize",e,this.ui()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&t.ui.hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null,h=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(t){var e,s,n,o,a,r=this.options;a={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||t)&&(e=a.minHeight*this.aspectRatio,n=a.minWidth/this.aspectRatio,s=a.maxHeight*this.aspectRatio,o=a.maxWidth/this.aspectRatio,e>a.minWidth&&(a.minWidth=e),n>a.minHeight&&(a.minHeight=n),a.maxWidth>s&&(a.maxWidth=s),a.maxHeight>o&&(a.maxHeight=o)),this._vBoundaries=a},_updateCache:function(t){this.offset=this.helper.offset(),i(t.left)&&(this.position.left=t.left),i(t.top)&&(this.position.top=t.top),i(t.height)&&(this.size.height=t.height),i(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,s=this.size,n=this.axis;return i(t.height)?t.width=t.height*this.aspectRatio:i(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===n&&(t.left=e.left+(s.width-t.width),t.top=null),"nw"===n&&(t.top=e.top+(s.height-t.height),t.left=e.left+(s.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,s=this.axis,n=i(t.width)&&e.maxWidth&&e.maxWidtht.width,r=i(t.height)&&e.minHeight&&e.minHeight>t.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,c=/sw|nw|w/.test(s),u=/nw|ne|n/.test(s);return a&&(t.width=e.minWidth),r&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),o&&(t.height=e.maxHeight),a&&c&&(t.left=h-e.minWidth),n&&c&&(t.left=h-e.maxWidth),r&&u&&(t.top=l-e.minHeight),o&&u&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var t,e,i,s,n,o=this.helper||this.element;for(t=0;this._proportionallyResizeElements.length>t;t++){if(n=this._proportionallyResizeElements[t],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],e=0;i.length>e;e++)this.borderDif[e]=(parseInt(i[e],10)||0)+(parseInt(s[e],10)||0);n.css({height:o.height()-this.borderDif[0]-this.borderDif[2]||0,width:o.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&t.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,c=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,o,a,r,h,l=t(this).data("ui-resizable"),c=l.options,u=l.element,d=c.containment,p=d instanceof t?d.get(0):/parent/.test(d)?u.parent().get(0):d;p&&(l.containerElement=t(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(i=t(p),s=[],t(["Top","Right","Left","Bottom"]).each(function(t,n){s[t]=e(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,o=l.containerSize.height,a=l.containerSize.width,r=t.ui.hasScroll(p,"left")?p.scrollWidth:a,h=t.ui.hasScroll(p)?p.scrollHeight:o,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(e){var i,s,n,o,a=t(this).data("ui-resizable"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio),a.position.top=a._helper?h.top:0),a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top,i=Math.abs((a._helper?a.offset.left-u.left:a.offset.left-u.left)+a.sizeDiff.width),s=Math.abs((a._helper?a.offset.top-u.top:a.offset.top-h.top)+a.sizeDiff.height),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o&&(i-=a.parentData.left),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio))},stop:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).data("ui-resizable"),i=e.options,s=function(e){t(e).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseInt(e.width(),10),height:parseInt(e.height(),10),left:parseInt(e.css("left"),10),top:parseInt(e.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):t.each(i.alsoResize,function(t){s(t)})},resize:function(e,i){var s=t(this).data("ui-resizable"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0},h=function(e,s){t(e).each(function(){var e=t(this),n=t(this).data("ui-resizable-alsoresize"),o={},a=s&&s.length?s:e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(a,function(t,e){var i=(n[e]||0)+(r[e]||0);i&&i>=0&&(o[e]=i||null)}),e.css(o)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):t.each(n.alsoResize,function(t,e){h(t,e)})},stop:function(){t(this).removeData("resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).data("ui-resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).data("ui-resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e=t(this).data("ui-resizable"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,c=Math.round((s.width-n.width)/h)*h,u=Math.round((s.height-n.height)/l)*l,d=n.width+c,p=n.height+u,f=i.maxWidth&&d>i.maxWidth,g=i.maxHeight&&p>i.maxHeight,m=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=h),v&&(p+=l),f&&(d-=h),g&&(p-=l),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):(e.size.width=d,e.size.height=p,e.position.top=o.top-u,e.position.left=o.left-c)}})}(jQuery),function(t){t.widget("ui.selectable",t.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e=t(i.options.filter,i.element[0]),e.addClass("ui-selectee"),e.each(function(){var e=t(this),i=e.offset();t.data(this,"selectable-item",{element:this,$element:e,left:i.left,top:i.top,right:i.left+e.outerWidth(),bottom:i.top+e.outerHeight(),startselected:!1,selected:e.hasClass("ui-selected"),selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=e.addClass("ui-selectee"),this._mouseInit(),this.helper=t("
")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):undefined}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||o>i.right||i.top>h||a>i.bottom):"fit"===n.tolerance&&(l=i.left>o&&r>i.right&&i.top>a&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}})}(jQuery),function(t){function e(t,e,i){return t>e&&e+i>t}function i(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))}t.widget("ui.sortable",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var t=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===t.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_setOption:function(e,i){"disabled"===e?(this.options[e]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):t.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):undefined}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break; +this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var i="x"===this.options.axis||e(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||e(this.positionAbs.left+this.offset.click.left,t.left,t.width),n=i&&s,o=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return n?this.floating?a&&"right"===a||"down"===o?2:1:o&&("down"===o?2:1):!1},_intersectsWithSides:function(t){var i=e(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),s=e(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return this.floating&&o?"right"===o&&s||"left"===o&&!s:n&&("down"===n&&i||"up"===n&&!i)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){var i,s,n,o,a=[],r=[],h=this._connectWith();if(h&&e)for(i=h.length-1;i>=0;i--)for(n=t(h[i]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&r.push([t.isFunction(o.options.items)?o.options.items.call(o.element):t(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(r.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=r.length-1;i>=0;i--)r[i][0].each(function(){a.push(this)});return t(a)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]).addClass(i||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?e.currentItem.children().each(function(){t(" ",e.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_contactContainers:function(s){var n,o,a,r,h,l,c,u,d,p,f=null,g=null;for(n=this.containers.length-1;n>=0;n--)if(!t.contains(this.currentItem[0],this.containers[n].element[0]))if(this._intersectsWith(this.containers[n].containerCache)){if(f&&t.contains(this.containers[n].element[0],f.element[0]))continue;f=this.containers[n],g=n}else this.containers[n].containerCache.over&&(this.containers[n]._trigger("out",s,this._uiHash(this)),this.containers[n].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[g].containerCache.over||(this.containers[g]._trigger("over",s,this._uiHash(this)),this.containers[g].containerCache.over=1);else{for(a=1e4,r=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",c=this.positionAbs[h]+this.offset.click[h],o=this.items.length-1;o>=0;o--)t.contains(this.containers[g].element[0],this.items[o].item[0])&&this.items[o].item[0]!==this.currentItem[0]&&(!p||e(this.positionAbs.top+this.offset.click.top,this.items[o].top,this.items[o].height))&&(u=this.items[o].item.offset()[h],d=!1,Math.abs(u-c)>Math.abs(u+this.items[o][l]-c)&&(d=!0,u+=this.items[o][l]),a>Math.abs(u-c)&&(a=Math.abs(u-c),r=this.items[o],this.direction=d?"up":"down"));if(!r&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[g])return;r?this._rearrange(s,r,null,!0):this._rearrange(s,null,this.containers[g].element,!0),this._trigger("change",s,this._uiHash()),this.containers[g]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[g],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[g]._trigger("over",s,this._uiHash(this)),this.containers[g].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,t("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(t("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)e||s.push(function(t){return function(e){t._trigger("deactivate",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(t){return function(e){t._trigger("out",e,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!e){for(this._trigger("beforeStop",t,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!1}if(e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!e){for(i=0;s.length>i;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})}(jQuery),function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function s(e,i){var s,n,a={};for(s in i)n=i[s],e[s]!==n&&(o[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(a[s]=n));return a}var n=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),o=function(){t.each(n,function(t,i){e[i]&&a[i+"Class"](e[i])})},o(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,o,a,r){return"boolean"==typeof n||n===e?o?t.effects.animateClass.call(this,n?{add:s}:{remove:s},o,a,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,o,a)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.3",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,o;for(o=0;s.length>o;o++)null!==s[o]&&(n=t.data(i+s[o]),n===e&&(n=""),t.css(s[o],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(o)&&o.call(n[0]),t.isFunction(e)&&e()}var n=t(this),o=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):a.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,o=i.queue,a=t.effects.effect[i.effect];return t.fx.off||!a?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):o===!1?this.each(e):this.queue(o||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()}(jQuery),function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons")) +},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),o.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,o=this.element.parent(),a=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),o=n.attr("id");s||(s=a+"-header-"+e,i.attr("id",s)),o||(o=a+"-panel-"+e,n.attr("id",o)),i.attr("aria-controls",o),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=o.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n[0]===s[0],a=o&&i.collapsible,r=a?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:a?t():n,newPanel:r};e.preventDefault(),o&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=a?!1:this.headers.index(n),this.active=o?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),o||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var o,a,r,h=this,l=0,c=t.length&&(!e.length||t.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o?!0:a?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,undefined;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:case o.NUMPAD_ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),undefined;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),undefined):(this._searchTimeout(t),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(t),this._change(t),undefined)}}),this._initSource(),this.menu=t("
    ").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];t(e.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(s){s.target===e.element[0]||s.target===i||t.contains(i,s.target)||e.close()})})},menufocus:function(e,i){if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),undefined;var s=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",e,{item:s})?e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value):this.liveRegion.text(s.value)},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=t("",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e||(e=this.element.closest(".ui-front")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[t](e),undefined):(this.search(null,e),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.text(e))}})}(jQuery),function(t){var e,i,s,n,o="ui-button ui-widget ui-state-default ui-corner-all",a="ui-state-hover ui-state-active ",r="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var e=t(this);setTimeout(function(){e.find(":ui-button").button("refresh")},1)},l=function(e){var i=e.name,s=e.form,n=t([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?t(s).find("[name='"+i+"']"):t("[name='"+i+"']",e.ownerDocument).filter(function(){return!this.form})),n};t.widget("ui.button",{version:"1.10.3",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.click(function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,a,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,o,r){var h,l,c,u,d,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.keydown(this._doKeyDown),t("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},t.data(this._dialogInput[0],a,p)),n(p.settings,o||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=r?r.length?r:[r.pageX,r.pageY]:null,this._pos||(l=document.documentElement.clientWidth,c=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+u,c/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],a,p),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,a);s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,a),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,a);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,a);n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,a)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,s,o){var a,r,h,l,c=this._getInst(i);return 2===arguments.length&&"string"==typeof s?"defaults"===s?t.extend({},t.datepicker._defaults):c?"all"===s?t.extend({},c.settings):this._get(c,s):null:(a=s||{},"string"==typeof s&&(a={},a[s]=o),c&&(this._curInst===c&&this._hideDatepicker(),r=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(c,"min"),l=this._getMinMaxDate(c,"max"),n(c.settings,a),null!==h&&a.dateFormat!==e&&a.minDate===e&&(c.settings.minDate=this._formatDate(c,h)),null!==l&&a.dateFormat!==e&&a.maxDate===e&&(c.settings.maxDate=this._formatDate(c,l)),"disabled"in a&&(a.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(t(i),c),this._autoSize(c),this._setDate(c,r),this._updateAlternate(c),this._updateDatepicker(c)),e)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1; +case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(i){var s,n,o=t.datepicker._getInst(i.target);return t.datepicker._get(o,"constrainInput")?(s=t.datepicker._possibleChars(t.datepicker._get(o,"dateFormat")),n=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">n||!s||s.indexOf(n)>-1):e},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var i,s,o,a,r,h,l;i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),s=t.datepicker._get(i,"beforeShow"),o=s?s.apply(e,[e,i]):{},o!==!1&&(n(i.settings,o),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),a=!1,t(e).parents().each(function(){return a|="fixed"===t(this).css("position"),!a}),r={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),r=t.datepicker._checkOffset(i,r,a),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":a?"fixed":"absolute",display:"none",left:r.left+"px",top:r.top+"px"}),i.inline||(h=t.datepicker._get(i,"showAnim"),l=t.datepicker._get(i,"duration"),i.dpDiv.zIndex(t(e).zIndex()+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?i.dpDiv.show(h,t.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),t.datepicker._shouldFocusInput(i)&&i.input.focus(),t.datepicker._curInst=i))}},_updateDatepicker:function(e){this.maxRows=4,o=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,s=this._getNumberOfMonths(e),n=s[1],a=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.focus(),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,r=this._curInst;!r||e&&r!==t.data(e,a)||this._datepickerShowing&&(i=this._get(r,"showAnim"),s=this._get(r,"duration"),n=function(){t.datepicker._tidyDialog(r)},t.effects&&(t.effects.effect[i]||t.effects[i])?r.dpDiv.hide(i,t.datepicker._get(r,"showOptions"),s,n):r.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(r,"onClose"),o&&o.apply(r.input?r.input[0]:null,[r.input?r.input.val():"",r]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).each(function(){t(this).val(n)}))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(i,s,n){if(null==i||null==s)throw"Invalid arguments";if(s="object"==typeof s?""+s:s+"",""===s)return null;var o,a,r,h,l=0,c=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof c?c:(new Date).getFullYear()%100+parseInt(c,10),d=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,p=(n?n.dayNames:null)||this._defaults.dayNames,f=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,g=(n?n.monthNames:null)||this._defaults.monthNames,m=-1,v=-1,_=-1,b=-1,y=!1,w=function(t){var e=i.length>o+1&&i.charAt(o+1)===t;return e&&o++,e},k=function(t){var e=w(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n=RegExp("^\\d{1,"+i+"}"),o=s.substring(l).match(n);if(!o)throw"Missing number at position "+l;return l+=o[0].length,parseInt(o[0],10)},x=function(i,n,o){var a=-1,r=t.map(w(i)?o:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(r,function(t,i){var n=i[1];return s.substr(l,n.length).toLowerCase()===n.toLowerCase()?(a=i[0],l+=n.length,!1):e}),-1!==a)return a+1;throw"Unknown name at position "+l},D=function(){if(s.charAt(l)!==i.charAt(o))throw"Unexpected literal at position "+l;l++};for(o=0;i.length>o;o++)if(y)"'"!==i.charAt(o)||w("'")?D():y=!1;else switch(i.charAt(o)){case"d":_=k("d");break;case"D":x("D",d,p);break;case"o":b=k("o");break;case"m":v=k("m");break;case"M":v=x("M",f,g);break;case"y":m=k("y");break;case"@":h=new Date(k("@")),m=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"!":h=new Date((k("!")-this._ticksTo1970)/1e4),m=h.getFullYear(),v=h.getMonth()+1,_=h.getDate();break;case"'":w("'")?D():y=!0;break;default:D()}if(s.length>l&&(r=s.substr(l),!/^\s+/.test(r)))throw"Extra/unparsed characters found in date: "+r;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),b>-1)for(v=1,_=b;;){if(a=this._getDaysInMonth(m,v-1),a>=_)break;v++,_-=a}if(h=this._daylightSavingAdjust(new Date(m,v-1,_)),h.getFullYear()!==m||h.getMonth()+1!==v||h.getDate()!==_)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getYear()%100?"0":"")+e.getYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,i){return t.settings[i]!==e?t.settings[i]:this._defaults[i]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,v,_,b,y,w,k,x,D,C,I,P,T,M,S,z,A,H,E,N,W,O,F,R,L=new Date,j=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),V=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),q=this._get(t,"showCurrentAtPos"),Q=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],$=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),G=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-q,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=G&&G>e?G:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-Q,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":V?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+Q,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":V?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?$:j,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=B?"
    "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,D=0;U[1]>D;D++){if(C=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",P="",X){if(P+="
    "}for(P+="
    "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,G,J,k>0||D>0,f,g)+"
    "+"",T=u?"":"",w=0;7>w;w++)M=(w+c)%7,T+="=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"";for(P+=T+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),z=(this._getFirstDayOfMonth(te,Z)-c+7)%7,A=Math.ceil((z+S)/7),H=X?this.maxRows>A?this.maxRows:A:A,this.maxRows=H,E=this._daylightSavingAdjust(new Date(te,Z,1-z)),N=0;H>N;N++){for(P+="",W=u?"":"",w=0;7>w;w++)O=m?m.apply(t.input?t.input[0]:null,[E]):[!0,""],F=E.getMonth()!==Z,R=F&&!_||!O[0]||G&&G>E||J&&E>J,W+="",E.setDate(E.getDate()+1),E=this._daylightSavingAdjust(E);P+=W+""}Z++,Z>11&&(Z=0,te++),P+="
    "+this._get(t,"weekHeader")+"
    "+this._get(t,"calculateWeek")(E)+""+(F&&!v?" ":R?""+E.getDate()+"":""+E.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&D===U[1]-1?"
    ":""):""),x+=P}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(_||(b+=y+(!o&&m&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!v)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!o&&m&&v?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).mousedown(t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new i,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.10.3"}(jQuery),function(t){var e={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};t.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||t(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!e&&this._trigger("focus",t),i},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=t(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var t=this.element.find("[autofocus]");t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(e){function i(){var e=this.document[0].activeElement,i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),undefined;if(e.keyCode===t.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(n.focus(1),e.preventDefault()):(s.focus(1),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=t("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(e),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title||t.html(" "),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=t("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(e.element[0],arguments)},o={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,t("",s).button(o).appendTo(e.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){t(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){s.position=[o.position.left-i.document.scrollLeft(),o.position.top-i.document.scrollTop()],t(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size} +}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){t(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){s.height=t(this).height(),s.width=t(this).width(),t(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(s){var n=this,o=!1,a={};t.each(s,function(t,s){n._setOption(t,s),t in e&&(o=!0),t in i&&(a[t]=s)}),o&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",a)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&(i=n.is(":data(ui-draggable)"),i&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&(s=n.is(":data(ui-resizable)"),s&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||e===!1||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=this,i=this.widgetFullName;t.ui.dialog.overlayInstances||this._delay(function(){t.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(s){e._allowInteraction(s)||(s.preventDefault(),t(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=t("
    ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),t.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(t.ui.dialog.overlayInstances--,t.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),t.ui.dialog.overlayInstances=0,t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{_position:function(){var e,i=this.options.position,s=[],n=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(s=i.split?i.split(" "):[i[0],i[1]],1===s.length&&(s[1]=s[0]),t.each(["left","top"],function(t,e){+s[t]===s[t]&&(n[t]=s[t],s[t]=e)}),i={my:s[0]+(0>n[0]?n[0]:"+"+n[0])+" "+s[1]+(0>n[1]?n[1]:"+"+n[1]),at:s.join(" ")}),i=t.extend({},t.ui.dialog.prototype.options.position,i)):i=t.ui.dialog.prototype.options.position,e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.position(i),e||this.uiDialog.hide()}})}(jQuery),function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var o,a,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",g=i.test(u),m={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),o=t.effects.createWrapper(h).css({overflow:"hidden"}),a=o[p](),r=parseFloat(o.css(f))||0,m[p]=v?a:0,g||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),m[f]=v?r:a+r),v&&(o.css(p,0),g||o.css(f,r+a)),o.animate(m,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}}(jQuery),function(t){t.effects.effect.bounce=function(e,i){var s,n,o,a=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(a,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),g=e.duration/f,m=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=a.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(a,r),a.show(),t.effects.createWrapper(a),d||(d=a["top"===v?"outerHeight":"outerWidth"]()/3),c&&(o={opacity:1},o[v]=0,a.css("opacity",0).css(v,_?2*-d:2*d).animate(o,g,m)),l&&(d/=Math.pow(2,p-1)),o={},o[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,a.animate(n,g,m).animate(o,g,m),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,a.animate(n,g,m)),a.queue(function(){l&&a.hide(),t.effects.restore(a,r),t.effects.removeWrapper(a),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),a.dequeue()}}(jQuery),function(t){t.effects.effect.clip=function(e,i){var s,n,o,a=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(a,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(a,r),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n="IMG"===a[0].tagName?s:a,o=n[d](),l&&(n.css(d,0),n.css(p,o/2)),f[d]=l?o:0,f[p]=l?0:o/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||a.hide(),t.effects.restore(a,r),t.effects.removeWrapper(a),i()}})}}(jQuery),function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),o=["position","top","bottom","left","right","opacity","height","width"],a=t.effects.setMode(n,e.mode||"hide"),r="show"===a,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,o),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&n.hide(),t.effects.restore(n,o),t.effects.removeWrapper(n),i()}})}}(jQuery),function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),g||p.hide(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),g="show"===f,m=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*_,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*v,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
    ").css({position:"absolute",visibility:"visible",left:-a*v,top:-o*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(g?l*v:0),top:h+(g?c*_:0),opacity:g?0:1}).animate({left:r+(g?0:l*v),top:h+(g?0:c*_),opacity:g?1:0},e.duration||500,e.easing,s)}}(jQuery),function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}}(jQuery),function(t){t.effects.effect.fold=function(e,i){var s,n,o=t(this),a=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(o,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],g=e.duration/2,m={},v={};t.effects.save(o,a),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),m[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(m,g,e.easing).animate(v,g,e.easing,function(){l&&o.hide(),t.effects.restore(o,a),t.effects.removeWrapper(o),i()})}}(jQuery),function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],o=t.effects.setMode(s,e.mode||"show"),a={backgroundColor:s.css("backgroundColor")};"hide"===o&&(a.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(a,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&s.hide(),t.effects.restore(s,n),i()}})}}(jQuery),function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),o=t.effects.setMode(n,e.mode||"show"),a="show"===o,r="hide"===o,h=a||"hide"===o,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((a||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}}(jQuery),function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),o="hide"===n,a=parseInt(e.percent,10)||150,r=a/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:o?a:100,from:o?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),o=t.effects.setMode(s,e.mode||"effect"),a=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===o?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?a/100:1,x:"vertical"!==r?a/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==o&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===o?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===o&&(n.from.opacity=0,n.to.opacity=1),"hide"===o&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,o,a=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(a,e.mode||"effect"),f=e.restore||"effect"!==p,g=e.scale||"both",m=e.origin||["middle","center"],v=a.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&a.show(),s={height:a.height(),width:a.width(),outerHeight:a.outerHeight(),outerWidth:a.outerWidth()},"toggle"===e.mode&&"show"===p?(a.from=e.to||b,a.to=e.from||s):(a.from=e.from||("show"===p?b:s),a.to=e.to||("hide"===p?b:s)),o={from:{y:a.from.height/s.height,x:a.from.width/s.width},to:{y:a.to.height/s.height,x:a.to.width/s.width}},("box"===g||"both"===g)&&(o.from.y!==o.to.y&&(_=_.concat(u),a.from=t.effects.setTransition(a,u,o.from.y,a.from),a.to=t.effects.setTransition(a,u,o.to.y,a.to)),o.from.x!==o.to.x&&(_=_.concat(d),a.from=t.effects.setTransition(a,d,o.from.x,a.from),a.to=t.effects.setTransition(a,d,o.to.x,a.to))),("content"===g||"both"===g)&&o.from.y!==o.to.y&&(_=_.concat(c).concat(l),a.from=t.effects.setTransition(a,c,o.from.y,a.from),a.to=t.effects.setTransition(a,c,o.to.y,a.to)),t.effects.save(a,_),a.show(),t.effects.createWrapper(a),a.css("overflow","hidden").css(a.from),m&&(n=t.effects.getBaseline(m,s),a.from.top=(s.outerHeight-a.outerHeight())*n.y,a.from.left=(s.outerWidth-a.outerWidth())*n.x,a.to.top=(s.outerHeight-a.to.outerHeight)*n.y,a.to.left=(s.outerWidth-a.to.outerWidth)*n.x),a.css(a.from),("content"===g||"both"===g)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),a.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*o.from.y,width:s.width*o.from.x,outerHeight:s.outerHeight*o.from.y,outerWidth:s.outerWidth*o.from.x},i.to={height:s.height*o.to.y,width:s.width*o.to.x,outerHeight:s.height*o.to.y,outerWidth:s.width*o.to.x},o.from.y!==o.to.y&&(i.from=t.effects.setTransition(i,u,o.from.y,i.from),i.to=t.effects.setTransition(i,u,o.to.y,i.to)),o.from.x!==o.to.x&&(i.from=t.effects.setTransition(i,d,o.from.x,i.from),i.to=t.effects.setTransition(i,d,o.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),a.animate(a.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===a.to.opacity&&a.css("opacity",a.from.opacity),"hide"===p&&a.hide(),t.effects.restore(a,_),f||("static"===v?a.css({position:"relative",top:a.to.top,left:a.to.left}):t.each(["top","left"],function(t,e){a.css(e,function(e,i){var s=parseInt(i,10),n=t?a.to.left:a.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(a),i()}})}}(jQuery),function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),o=["position","top","bottom","left","right","height","width"],a=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},g={},m={},v=n.queue(),_=v.length;for(t.effects.save(n,o),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,g[d]=(p?"+=":"-=")+2*h,m[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(g,u,e.easing).animate(m,u,e.easing);n.animate(g,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===a&&n.hide(),t.effects.restore(n,o),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}}(jQuery),function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),o=["position","top","bottom","left","right","width","height"],a=t.effects.setMode(n,e.mode||"show"),r="show"===a,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,o),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&n.hide(),t.effects.restore(n,o),t.effects.removeWrapper(n),i()}})}}(jQuery),function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
    ").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}}(jQuery),function(t){t.widget("ui.menu",{version:"1.10.3",defaultElement:"
      ",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,t.proxy(function(t){this.options.disabled&&t.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(t){t.preventDefault()},"click .ui-state-disabled > a":function(t){t.preventDefault()},"click .ui-menu-item:has(a)":function(e){var i=t(e.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(e),i.has(".ui-menu").length?this.expand(e):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){var i=t(e.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(e,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.children(".ui-menu-item").eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){t(e.target).closest(".ui-menu").length||this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){function i(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,o,a,r,h=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:h=!1,n=this.previousFilter||"",o=String.fromCharCode(e.keyCode),a=!1,clearTimeout(this.filterTimer),o===n?a=!0:o=n+o,r=RegExp("^"+i(o),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())}),s=a&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(o=String.fromCharCode(e.keyCode),r=RegExp("^"+i(o),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return r.test(t(this).children("a").text())})),s.length?(this.focus(e,s),s.length>1?(this.previousFilter=o,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),s=e.prev("a"),n=t("").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",s.attr("id"))}),e=s.add(this.element),e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),e.children(":not(.ui-menu-item)").each(function(){var e=t(this);/[^\-\u2014\u2013\s]/.test(e.text())||e.addClass("ui-widget-content ui-menu-divider")}),e.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.height(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(e),undefined)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(e),undefined)},_hasScroll:function(){return this.element.outerHeight()
    "),a=n.children()[0];return t("body").append(n),i=a.offsetWidth,n.css("overflow","scroll"),s=a.offsetWidth,i===s&&(s=n[0].clientWidth),n.remove(),o=i-s},getScrollInfo:function(e){var i=e.isWindow?"":e.element.css("overflow-x"),s=e.isWindow?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widths?"left":i>0?"right":"center",vertical:0>o?"top":n>0?"bottom":"middle"};u>p&&p>r(i+s)&&(h.horizontal="center"),d>g&&g>r(n+o)&&(h.vertical="middle"),h.important=a(r(i),r(s))>a(r(n),r(o))?"horizontal":"vertical",e.using.call(this,t,h)}),c.offset(t.extend(I,{using:l}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-o-n;e.collisionWidth>o?h>0&&0>=l?(i=t.left+h+e.collisionWidth-o-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+o-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=a(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,o=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-o-n;e.collisionHeight>o?h>0&&0>=l?(i=t.top+h+e.collisionHeight-o-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+o-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=a(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,a=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-a-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-a-o,(0>i||r(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>r(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,a=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-a-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-a-o,t.top+p+f+g>c&&(0>s||r(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,t.top+p+f+g>u&&(i>0||u>r(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}},function(){var e,i,s,n,o,a=document.getElementsByTagName("body")[0],r=document.createElement("div");e=document.createElement(a?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},a&&t.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)e.style[o]=s[o];e.appendChild(r),i=a||document.documentElement,i.insertBefore(e,i.firstChild),r.style.cssText="position: absolute; left: 10.7432222px;",n=t(r).offset().left,t.support.offsetFractions=n>10&&11>n,e.innerHTML="",i.removeChild(e)}()}(jQuery),function(t,e){t.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=t("
    ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove() +},value:function(t){return t===e?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),e)},_constrainedValue:function(t){return t===e&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}})}(jQuery),function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),o="",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("
    ").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,o.addClass("ui-state-active").focus(),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,o;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,o=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),o!==!1&&this.values(e,i,!0))):i!==this.value()&&(o=this._trigger("slide",t,{handle:this.handles[e],value:i}),o!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,o,a,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(a=this.options.step,n=o=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:o=this._valueMin();break;case t.ui.keyCode.END:o=this._valueMax();break;case t.ui.keyCode.PAGE_UP:o=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:o=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;o=this._trimAlignValue(n+a);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;o=this._trimAlignValue(n-a)}this._slide(i,r,o)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})}(jQuery),function(t){function e(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.widget("ui.spinner",{version:"1.10.3",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e={},i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);void 0!==n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var t=this.element[0]===this.document[0].activeElement;t||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var t=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=t.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*t.height())&&t.height()>0&&t.height(t.height()),this.options.disabled&&this.disable()},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){if("culture"===t||"numberFormat"===t){var i=this._parse(this.element.val());return this.options[t]=e,this.element.val(this._format(i)),void 0}("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(e.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(e.down)),this._super(t,e),"disabled"===t&&(e?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:e(function(t){this._super(t),this._value(this.element.val())}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:e(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:e(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:e(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:e(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(e(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})}(jQuery),function(t,e){function i(){return++n}function s(t){return t.hash.length>1&&decodeURIComponent(t.href.replace(o,""))===decodeURIComponent(location.href.replace(o,""))}var n=0,o=/#.*$/;t.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var e=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,n=location.hash.substring(1);return null===i&&(n&&this.tabs.each(function(s,o){return t(o).attr("aria-controls")===n?(i=s,!1):e}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(i){var s=t(this.document[0].activeElement).closest("li"),n=this.tabs.index(s),o=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:o=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(n),e;case t.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(n===this.options.active?!1:n),e;default:return}i.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,o),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):e},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).focus(),t},_setOption:function(t,i){return"active"===t?(this._activate(i),e):"disabled"===t?(this._setupDisabled(i),e):(this._super(t,i),"collapsible"===t&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(i),"heightStyle"===t&&this._setupHeightStyle(i),e)},_tabId:function(t){return t.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=t(),this.anchors.each(function(i,n){var o,a,r,h=t(n).uniqueId().attr("id"),l=t(n).closest("li"),c=l.attr("aria-controls");s(n)?(o=n.hash,a=e.element.find(e._sanitizeSelector(o))):(r=e._tabId(l),o="#"+r,a=e.element.find(o),a.length||(a=e._createPanel(r),a.insertAfter(e.panels[i-1]||e.tablist)),a.attr("aria-live","polite")),a.length&&(e.panels=e.panels.add(a)),c&&l.data("ui-tabs-aria-controls",c),l.attr({"aria-controls":o.substring(1),"aria-labelledby":h}),a.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(e){t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1);for(var i,s=0;i=this.tabs[s];s++)e===!0||-1!==t.inArray(s,e)?t(i).addClass("ui-state-disabled").attr("aria-disabled","true"):t(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=e},_setupEvents:function(e){var i={click:function(t){t.preventDefault()}};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(t){return"string"==typeof t&&(t=this.anchors.index(this.anchors.filter("[href$='"+t+"']"))),t},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===e?s=!1:(i=this._getIndex(i),s=t.isArray(s)?t.map(s,function(t){return t!==i?t:null}):t.map(this.tabs,function(t,e){return e!==i?e:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===e)s=!0;else{if(i=this._getIndex(i),-1!==t.inArray(i,s))return;s=t.isArray(s)?t.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(e,i){e=this._getIndex(e);var n=this,o=this.tabs.eq(e),a=o.find(".ui-tabs-anchor"),r=this._getPanelForTab(o),h={tab:o,panel:r};s(a[0])||(this.xhr=t.ajax(this._ajaxSettings(a,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(o.addClass("ui-tabs-loading"),r.attr("aria-busy","true"),this.xhr.success(function(t){setTimeout(function(){r.html(t),n._trigger("load",i,h)},1)}).complete(function(t,e){setTimeout(function(){"abort"===e&&n.panels.stop(!1,!0),o.removeClass("ui-tabs-loading"),r.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href"),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})}(jQuery),function(t){function e(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))}function i(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")}var s=0;t.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(e,i){var s=this;return"disabled"===e?(this[i?"_disable":"_enable"](),this.options[e]=i,void 0):(this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e)}),void 0)},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.is("[title]")&&e.data("ui-tooltip-title",e.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))})},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s?this._open(e,t,s):(i=s.call(t[0],function(i){t.data("ui-tooltip-open")&&n._delay(function(){e&&(e.type=o),this._open(e,t,i)})}),i&&this._open(e,t,i),void 0)},_open:function(i,s,n){function o(t){l.of=t,a.is(":hidden")||a.position(l)}var a,r,h,l=t.extend({},this.options.position); +if(n){if(a=this._find(s),a.length)return a.find(".ui-tooltip-content").html(n),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),a=this._tooltip(s),e(s,a.attr("id")),a.find(".ui-tooltip-content").html(n),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:o}),o(i)):a.position(t.extend({of:s},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){a.is(":visible")&&(o(l.of),clearInterval(h))},t.fx.interval)),this._trigger("open",i,{tooltip:a}),r={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var i=t.Event(e);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(a)}},i&&"mouseover"!==i.type||(r.mouseleave="close"),i&&"focusin"!==i.type||(r.focusout="close"),this._on(!0,s,r)}},close:function(e){var s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);this.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&n.attr("title",n.data("ui-tooltip-title")),i(n),o.stop(!0),this._hide(o,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),this.closing=!0,this._trigger("close",e,{tooltip:o}),this.closing=!1)},_tooltip:function(e){var i="ui-tooltip-"+s++,n=t("
    ").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("
    ").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})}(jQuery); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/jquery.base64.js b/packages/phocacommander/media/com_phocacommander/js/administrator/jquery.base64.js new file mode 100644 index 00000000..bbce5f0c --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/jquery.base64.js @@ -0,0 +1,122 @@ +/*! + * jquery.base64.js 0.1 - https://github.com/yckart/jquery.base64.js + * Makes Base64 en & -decoding simpler as it is. + * + * Based upon: https://gist.github.com/Yaffle/1284012 + * + * Copyright (c) 2012 Yannick Albert (http://yckart.com) + * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php). + * 2013/02/10 + **/ +;(function($) { + + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", + a256 = '', + r64 = [256], + r256 = [256], + i = 0; + + var UTF8 = { + + /** + * 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 + */ + 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); + }) + .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 + */ + decode: function(strUtf) { + // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! + var strUni = strUtf.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); + }) + .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); + }); + return strUni; + } + }; + + while(i < 256) { + var c = String.fromCharCode(i); + a256 += c; + r256[i] = i; + r64[i] = b64.indexOf(c); + ++i; + } + + function code(s, discard, alpha, beta, w1, w2) { + s = String(s); + var buffer = 0, + i = 0, + length = s.length, + result = '', + bitsInBuffer = 0; + + while(i < length) { + var c = s.charCodeAt(i); + c = c < 256 ? alpha[c] : -1; + + buffer = (buffer << w1) + c; + bitsInBuffer += w1; + + while(bitsInBuffer >= w2) { + bitsInBuffer -= w2; + var tmp = buffer >> bitsInBuffer; + result += beta.charAt(tmp); + buffer ^= tmp << bitsInBuffer; + } + ++i; + } + if(!discard && bitsInBuffer > 0) result += beta.charAt(buffer << (w2 - bitsInBuffer)); + return result; + } + + var Plugin = $.base64 = function(dir, input, encode) { + return input ? Plugin[dir](input, encode) : dir ? null : this; + }; + + Plugin.btoa = Plugin.encode = function(plain, utf8encode) { + plain = Plugin.raw === false || Plugin.utf8encode || utf8encode ? UTF8.encode(plain) : plain; + plain = code(plain, false, r256, b64, 8, 6); + return plain + '===='.slice((plain.length % 4) || 4); + }; + + Plugin.atob = Plugin.decode = function(coded, utf8decode) { + coded = String(coded).split('='); + var i = coded.length; + do {--i; + coded[i] = code(coded[i], true, r64, a256, 6, 8); + } while (i > 0); + coded = coded.join(''); + return Plugin.raw === false || Plugin.utf8decode || utf8decode ? UTF8.decode(coded) : coded; + }; +}(jQuery)); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.swf b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.swf new file mode 100644 index 00000000..89df26a3 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.swf differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.xap b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.xap new file mode 100644 index 00000000..dbb880c9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/Moxie.xap differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/cs.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/cs.js new file mode 100644 index 00000000..1ee5d5fc --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/cs.js @@ -0,0 +1,14 @@ +// .po file like language pack +plupload.addI18n({ + 'Select files' : 'Vyberte soubory', + 'Add files to the upload queue and click the start button.' : 'Přidejte soubory do fronty a pak spusťte nahrávání.', + 'Filename' : 'Název souboru', + 'Status' : 'Status', + 'Size' : 'Velikost', + 'Add Files' : 'Přidat soubory', + 'Stop current upload' : 'Zastavit nahrávání', + 'Start uploading queue' : 'Spustit frontu nahrávání', + 'Drag files here.' : 'Sem přetáhněte soubory.', + 'Start Upload': 'Spustit nahrávání', + 'Uploaded %d/%d files': 'Nahráno %d/%d souborů' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/da.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/da.js new file mode 100644 index 00000000..fc958965 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/da.js @@ -0,0 +1,12 @@ +// .po file like language pack +plupload.addI18n({ + 'Select files' : 'Vælg filer', + 'Add files to the upload queue and click the start button.' : 'Tilføj filer til køen, og tryk på start.', + 'Filename' : 'Filnavn', + 'Status' : 'Status', + 'Size' : 'Størrelse', + 'Add files' : 'Tilføj filer', + 'Stop current upload' : 'Stop upload', + 'Start uploading queue' : 'Start upload', + 'Drag files here.' : 'Træk filer her.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/de.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/de.js new file mode 100644 index 00000000..4c4de07a --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/de.js @@ -0,0 +1,24 @@ +// German +plupload.addI18n({ + 'Select files' : 'Dateien hochladen', + 'Add files to the upload queue and click the start button.' : 'Dateien hinzufügen und auf \'Hochladen\' klicken.', + 'Filename' : 'Dateiname', + 'Status' : 'Status', + 'Size' : 'Größe', + 'Add files' : 'Dateien', // hinzufügen', + 'Stop current upload' : 'Aktuelles Hochladen stoppen', + 'Start uploading queue' : 'Hochladen starten', + 'Uploaded %d/%d files': '%d/%d Dateien sind hochgeladen', + 'N/A' : 'Nicht verfügbar', + 'Drag files here.' : 'Ziehen Sie die Dateien hier hin', + 'File extension error.': 'Fehler bei Dateiendung', + 'File size error.': 'Fehler bei Dateigröße', + 'Init error.': 'Initialisierungsfehler', + 'HTTP Error.': 'HTTP-Fehler', + 'Security error.': 'Sicherheitsfehler', + 'Generic error.': 'Typischer Fehler', + 'IO error.': 'Ein/Ausgabe-Fehler', + 'Stop Upload': 'Hochladen stoppen', + 'Start upload': 'Hochladen', + '%d files queued': '%d Dateien in der Warteschlange' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/el.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/el.js new file mode 100644 index 00000000..aafbaf19 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/el.js @@ -0,0 +1,14 @@ +// Greek +plupload.addI18n({ + 'Select files' : 'Επιλέξτε Αρχεία', + 'Add files to the upload queue and click the start button.' : 'Προσθήκη αρχείων στην ουρά μεταφόρτωσης', + 'Filename' : 'Όνομα αρχείου', + 'Status' : 'Κατάσταση', + 'Size' : 'Μέγεθος', + 'Add Files' : 'Προσθέστε αρχεία', + 'Stop current upload' : 'Διακοπή τρέχουσας μεταφόρτωσης', + 'Start uploading queue' : 'Εκκίνηση μεταφόρτωσης ουράς αρχείων', + 'Drag files here.' : 'Σύρετε αρχεία εδώ', + 'Start Upload': 'Εκκίνηση μεταφόρτωσης', + 'Uploaded %d/%d files': 'Ανέβηκαν %d/%d αρχεία' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/es.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/es.js new file mode 100644 index 00000000..2379421f --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/es.js @@ -0,0 +1,25 @@ +// Spanish +plupload.addI18n({ + 'Select files' : 'Elija archivos:', + 'Add files to the upload queue and click the start button.' : 'Agregue archivos a la cola de subida y haga click en el boton de iniciar.', + 'Filename' : 'Nombre de archivo', + 'Status' : 'Estado', + 'Size' : 'Tamaño', + 'Add files' : 'Agregue archivos', + 'Stop current upload' : 'Detener subida actual', + 'Start uploading queue' : 'Iniciar subida de cola', + 'Uploaded %d/%d files': 'Subidos %d/%d archivos', + 'N/A' : 'No disponible', + 'Drag files here.' : 'Arrastre archivos aquí', + 'File extension error.': 'Error de extensión de archivo.', + 'File size error.': 'Error de tamaño de archivo.', + 'Init error.': 'Error de inicialización.', + 'HTTP Error.': 'Error de HTTP.', + 'Security error.': 'Error de seguridad.', + 'Generic error.': 'Error genérico.', + 'IO error.': 'Error de entrada/salida.', + 'Stop Upload': 'Detener Subida.', + 'Add Files': 'Agregar Archivos', + 'Start Upload': 'Comenzar Subida.', + '%d files queued': '%d archivos en cola.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/et.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/et.js new file mode 100644 index 00000000..a4a5e3aa --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/et.js @@ -0,0 +1,33 @@ +// Estonian translation, et.js +plupload.addI18n({ + 'Select files' : 'Vali faile', + 'Add files to the upload queue and click the start button.' : 'Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.', + 'Filename' : 'Failinimi', + 'Status' : 'Olek', + 'Size' : 'Suurus', + 'Add files' : 'Lisa faile', + 'Stop current upload' : 'Praeguse üleslaadimise peatamine', + 'Start uploading queue' : 'Järjekorras ootavate failide üleslaadimise alustamine', + 'Drag files here.' : 'Lohista failid siia.', + 'Start upload' : 'Alusta üleslaadimist', + 'Uploaded %d/%d files': 'Üles laaditud %d/%d', + 'Stop upload': 'Peata üleslaadimine', + 'Start upload': 'Alusta üleslaadimist', + '%d files queued': 'Järjekorras on %d faili', + 'File: %s': 'Fail: %s', + 'Close': 'Sulge', + 'Using runtime: ': 'Kasutatakse varianti: ', + 'File: %f, size: %s, max file size: %m': 'Fail: %f, suurus: %s, suurim failisuurus: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.', + 'Upload URL might be wrong or doesn\'t exist': 'Üleslaadimise URL võib olla vale või seda pole', + 'Error: File too large: ': 'Viga: fail on liiga suur: ', + 'Error: Invalid file extension: ': 'Viga: sobimatu faililaiend: ', + 'File extension error.': 'Faililaiendi viga.', + 'File size error.': 'Failisuuruse viga.', + 'File count error.': 'Failide arvu viga.', + 'Init error.': 'Lähtestamise viga.', + 'HTTP Error.': 'HTTP ühenduse viga.', + 'Security error.': 'Turvaviga.', + 'Generic error.': 'Üldine viga.', + 'IO error.': 'S/V (I/O) viga.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fa.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fa.js new file mode 100644 index 00000000..af36e228 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fa.js @@ -0,0 +1,37 @@ +// Persian +plupload.addI18n({ + 'Select files' : 'انتخاب فایل', + 'Add files to the upload queue and click the start button.' : 'اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.', + 'Filename' : 'نام فایل', + 'Status' : 'وضعیت', + 'Size' : 'سایز', + 'Add Files' : 'افزودن فایل', + 'Stop Upload' : 'توقف انتقال', + 'Start Upload' : 'شروع انتقال', + 'Add files' : 'افزودن فایل', + 'Add files.' : 'افزودن فایل', + 'Stop current upload' : 'توقف انتقال جاری', + 'Start uploading queue' : 'شروع صف انتقال', + 'Stop upload' : 'توقف انتقال', + 'Start upload' : 'شروع انتقال', + 'Uploaded %d/%d files': 'منتقل شد %d/%d از فایلها', + 'N/A' : 'N/A', + 'Drag files here.' : 'بکشید فایل ها رو به اینجا', + 'File extension error.': 'خطا پیشوند فایل', + 'File size error.': 'خطای سایز فایل', + 'File count error.': 'خطای تعداد فایل', + 'Init error.': 'خطا در استارت اسکریپت', + 'HTTP Error.': 'HTTP خطای', + 'Security error.': 'خطای امنیتی', + 'Generic error.': 'خطای عمومی', + 'IO error.': 'IO خطای', + 'File: %s': ' فایل ها : %s', + 'Close': 'بستن', + '%d files queued': '%d فایل در صف', + 'Using runtime: ': 'استفاده میکنید از : ', + 'File: %f, size: %s, max file size: %m': فایل: %f, سایز: %s, بزرگترین سایز فایل: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'عنصر بارگذار فقط %d فایل رو در یک زمان می پذیرد. سایر فایل ها مجرد از این موضوع هستند.', + 'Upload URL might be wrong or doesn\'t exist': 'آدرس آپلود اشتباه می باشد یا وجود ندارد', + 'Error: File too large: ': 'خطا: فایل حجیم است :: ', + 'Error: Invalid file extension: ': 'خطا پسوند فایل معتبر نمی باشد : ' +}); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fi.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fi.js new file mode 100644 index 00000000..12a639ef --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fi.js @@ -0,0 +1,33 @@ +// .fi file like language pack +plupload.addI18n({ + 'Select files' : 'Valitse tiedostoja', + 'Add files to the upload queue and click the start button.' : 'Lisää tiedostoja latausjonoon ja klikkaa aloita-nappia.', + 'Filename' : 'Tiedostonimi', + 'Status' : 'Tila', + 'Size' : 'Koko', + 'Add files' : 'Lisää tiedostoja', + 'Stop current upload' : 'Pysäytä nykyinen lataus', + 'Start uploading queue' : 'Aloita jonon lataus', + 'Drag files here.' : 'Raahaa tiedostot tänne.', + 'Start upload' : 'Aloita lataus', + 'Uploaded %d/%d files': 'Ladattu %d/%d tiedostoa', + 'Stop upload': 'Pysäytä lataus', + 'Start upload': 'Aloita lataus', + '%d files queued': '%d tiedostoa jonossa', + 'File: %s': 'Tiedosto: %s', + 'Close': 'Sulje', + 'Using runtime: ': 'Käytetään ajonaikaista: ', + 'File: %f, size: %s, max file size: %m': 'Tiedosto: %f, koko: %s, maksimi tiedostokoko: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Latauselementti sallii ladata vain %d tiedosto(a) kerrallaan. Ylimääräiset tiedostot ohitettiin.', + 'Upload URL might be wrong or doesn\'t exist': 'Lataus URL saattaa olla väärin tai ei ole olemassa', + 'Error: File too large: ': 'Virhe: Tiedosto liian suuri: ', + 'Error: Invalid file extension: ': 'Virhe: Kelpaamaton tiedostopääte: ', + 'File extension error.': 'Tiedostopäätevirhe.', + 'File size error.': 'Tiedostokokovirhe.', + 'File count error.': 'Tiedostolaskentavirhe.', + 'Init error.': 'Init virhe.', + 'HTTP Error.': 'HTTP virhe.', + 'Security error.': 'Tietoturvavirhe.', + 'Generic error.': 'Yleinen virhe.', + 'IO error.': 'I/O virhe.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr-ca.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr-ca.js new file mode 100644 index 00000000..61aba239 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr-ca.js @@ -0,0 +1,35 @@ +// French-Canadian +plupload.addI18n({ + 'Select files' : 'Sélectionnez les fichiers', + 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file d\'attente et appuyez sur le bouton démarrer.', + 'Filename' : 'Nom du fichier', + 'Status' : 'Statut', + 'Size' : 'Taille', + 'Add files' : 'Ajouter Fichiers', + 'Stop current upload' : 'Arrêter le téléversement actuel', + 'Start uploading queue' : 'Démarrer le téléversement', + 'Uploaded %d/%d files': '%d/%d fichiers envoyés', + 'N/A' : 'Non applicable', + 'Drag files here.' : 'Glisser-déposer les fichiers ici', + 'File extension error.': 'Erreur d\'extension de fichier', + 'File size error.': 'Erreur de taille de fichier', + 'Init error.': 'Erreur d\'initialisation', + 'HTTP Error.': 'Erreur HTTP', + 'Security error.': 'Erreur de sécurité', + 'Generic error.': 'Erreur commune', + 'IO error.': 'Erreur E/S', + 'Stop Upload': 'Arrêter le téléversement', + 'Add Files': 'Ajouter des fichiers', + 'Start upload': 'Démarrer le téléversement', + '%d files queued': '%d fichiers en attente', + 'File: %s':'Fichier: %s', + 'Close':'Fermer', + 'Using runtime:':'Moteur logiciel:', + 'File: %f, size: %s, max file size: %m':'Fichier: %f, poids: %s, poids maximal: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.':'La file accepte %d fichier(s) à la fois. Les fichiers en trop sont ignorés', + 'Upload URL might be wrong or doesn\'t exist':'L\'URL de téléversement est erroné ou inexistant', + 'Error: File to large: ':'Fichier trop volumineux: ', + 'Error: Invalid file extension: ':'Extension de fichier invalide: ', + 'File size error.':'Erreur de taile de fichier', + 'File count error.':'Erreur de décompte des fichiers' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr.js new file mode 100644 index 00000000..53dbe289 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/fr.js @@ -0,0 +1,25 @@ +// French +plupload.addI18n({ + 'Select files' : 'Sélectionnez les fichiers', + 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file et appuyez sur le bouton démarrer.', + 'Filename' : 'Nom de fichier', + 'Status' : 'Status', + 'Size' : 'Taille', + 'Add files' : 'Ajouter Fichiers', + 'Stop current upload' : 'Arrêter l\'envoi en cours', + 'Start uploading queue' : 'Démarrer l\'envoi', + 'Uploaded %d/%d files': '%d/%d fichiers envoyés', + 'N/A' : 'Non applicable', + 'Drag files here.' : 'Déposer les fichiers ici.', + 'File extension error.': 'Erreur extension fichier', + 'File size error.': 'Erreur taille fichier.', + 'Init error.': 'Erreur d\'initialisation.', + 'HTTP Error.': 'Erreur HTTP.', + 'Security error.': 'Erreur de sécurité.', + 'Generic error.': 'Erreur générique.', + 'IO error.': 'Erreur E/S.', + 'Stop Upload': 'Arrêter les envois.', + 'Add Files': 'Ajouter des fichiers', + 'Start Upload': 'Démarrer les envois.', + '%d files queued': '%d fichiers en attente.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hr.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hr.js new file mode 100644 index 00000000..084be51c --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hr.js @@ -0,0 +1,25 @@ +// Croatian +plupload.addI18n({ + 'Select files': 'Izaberite datoteke:', + 'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.', + 'Filename': 'Ime datoteke', + 'Status': 'Status', + 'Size': 'Veličina', + 'Add files': 'Dodajte datoteke', + 'Stop current upload': 'Zaustavi trenutan upload', + 'Start uploading queue': 'Pokreni Upload', + 'Uploaded %d/%d files': 'Uploadano %d/%d datoteka', + 'N/A': 'N/A', + 'Drag files here.': 'Dovucite datoteke ovdje', + 'File extension error.': 'Greška ekstenzije datoteke.', + 'File size error.': 'Greška veličine datoteke.', + 'Init error.': 'Greška inicijalizacije.', + 'HTTP Error.': 'HTTP greška.', + 'Security error.': 'Sigurnosna greška.', + 'Generic error.': 'Generička greška.', + 'IO error.': 'I/O greška.', + 'Stop Upload': 'Zaustavi upload.', + 'Add Files': 'Dodaj datoteke', + 'Start Upload': 'Pokreni upload.', + '%d files queued': '%d datoteka na čekanju.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hu.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hu.js new file mode 100644 index 00000000..87070bae --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/hu.js @@ -0,0 +1,33 @@ +// Hungarian +plupload.addI18n({ + 'Select files' : 'Fájlok kiválasztása', + 'Add files to the upload queue and click the start button.' : 'Válaszd ki a fájlokat, majd kattints az Indítás gombra.', + 'Filename' : 'Fájlnév', + 'Status' : 'Állapot', + 'Size' : 'Méret', + 'Add files' : 'Hozzáadás', + 'Stop current upload' : 'Jelenlegi feltöltés megszakítása', + 'Start uploading queue' : 'Várakozási sor feltöltésének indítása', + 'Uploaded %d/%d files': 'Feltöltött fájlok: %d/%d', + 'N/A': 'Nem elérhető', + 'Drag files here.' : 'Húzd ide a fájlokat.', + 'Stop upload': 'Feltöltés megszakítása', + 'Start upload': 'Indítás', + '%d files queued': '%d fájl sorbaállítva', + 'File: %s': 'Fájl: %s', + 'Close': 'Bezárás', + 'Using runtime: ': 'Használt runtime: ', + 'File: %f, size: %s, max file size: %m': 'Fájl: %f, méret: %s, maximális fájlméret: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.', + 'Upload URL might be wrong or doesn\'t exist': 'A megadott URL hibás vagy nem létezik', + 'Error: File too large: ': 'Hiba: A fájl túl nagy: ', + 'Error: Invalid file extension: ': 'Hiba: Érvénytelen fájlkiterjesztés: ', + 'File extension error.': 'Hibás fájlkiterjesztés.', + 'File size error.': 'Hibás fájlméret.', + 'File count error.': 'A fájlok számával kapcsolatos hiba.', + 'Init error.': 'Init hiba.', + 'HTTP Error.': 'HTTP hiba.', + 'Security error.': 'Biztonsági hiba.', + 'Generic error.': 'Általános hiba.', + 'IO error.': 'I/O hiba.' +}); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/it.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/it.js new file mode 100644 index 00000000..891e4fb0 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/it.js @@ -0,0 +1,24 @@ +// Italian +plupload.addI18n({ + 'Select files' : 'Seleziona i files', + 'Add files to the upload queue and click the start button.' : 'Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.', + 'Filename' : 'Nome file', + 'Status' : 'Stato', + 'Size' : 'Dimensione', + 'Add Files' : 'Aggiungi file', + 'Stop current upload' : 'Interrompi il caricamento', + 'Start uploading queue' : 'Avvia il caricamento', + 'Uploaded %d/%d files': 'Caricati %d/%d file', + 'N/A' : 'N/D', + 'Drag files here.' : 'Trascina i file qui.', + 'File extension error.': 'Errore estensione file.', + 'File size error.': 'Errore dimensione file.', + 'Init error.': 'Errore inizializzazione.', + 'HTTP Error.': 'Errore HTTP.', + 'Security error.': 'Errore sicurezza.', + 'Generic error.': 'Errore generico.', + 'IO error.': 'Errore IO.', + 'Stop Upload': 'Ferma Upload', + 'Start Upload': 'Inizia Upload', + '%d files queued': '%d file in lista' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ja.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ja.js new file mode 100644 index 00000000..02c85aee --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ja.js @@ -0,0 +1,37 @@ +// Japanese +plupload.addI18n({ + 'Select files' : 'ファイル選択', + 'Add files to the upload queue and click the start button.' : 'ファイルをアップロードキューに追加してスタートボタンをクリックしてください', + 'Filename' : 'ファイル名', + 'Status' : 'ステータス', + 'Size' : 'サイズ', + 'Add Files' : 'ファイルを追加', + 'Stop Upload' : 'アップロード停止', + 'Start Upload' : 'アップロード', + 'Add files' : 'ファイルを追加', + 'Add files.' : 'ファイルを追加', + 'Stop current upload' : '現在のアップロードを停止', + 'Start uploading queue' : 'アップロード', + 'Stop upload' : 'アップロード停止', + 'Start upload' : 'アップロード', + 'Uploaded %d/%d files': 'アップロード中 %d/%d ファイル', + 'N/A' : 'N/A', + 'Drag files here.' : 'ここにファイルをドラッグ', + 'File extension error.': 'ファイル拡張子エラー', + 'File size error.': 'ファイルサイズエラー', + 'File count error.': 'ファイル数エラー', + 'Init error.': 'イニシャライズエラー', + 'HTTP Error.': 'HTTP エラー', + 'Security error.': 'セキュリティエラー', + 'Generic error.': 'エラー', + 'IO error.': 'IO エラー', + 'File: %s': 'ファイル: %s', + 'Close': '閉じる', + '%d files queued': '%d ファイルが追加されました', + 'Using runtime: ': 'モード: ', + 'File: %f, size: %s, max file size: %m': 'ファイル: %f, サイズ: %s, 最大ファイルサイズ: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'アップロード可能なファイル数は %d です。余分なファイルは削除されました', + 'Upload URL might be wrong or doesn\'t exist': 'アップロード先の URL が存在しません', + 'Error: File too large: ': 'エラー: サイズが大きすぎます: ', + 'Error: Invalid file extension: ': 'エラー: 拡張子が許可されていません: ' +}); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ko.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ko.js new file mode 100644 index 00000000..a2c5e66e --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ko.js @@ -0,0 +1,36 @@ +// Republic of Korea +plupload.addI18n({ + 'Select files' : '파일 선택', + 'Add files to the upload queue and click the start button.' : '파일을 업로드 큐에 추가하여 시작 버튼을 클릭하십시오.', + 'Filename' : '파일 이름', + 'Status' : '상태', + 'Size' : '크기', + 'Add Files' : '파일 추가', + 'Stop Upload': '업로드 중지', + 'Start Upload': '업로드', + 'Add files': '파일 추가', + 'Stop current upload': '현재 업로드를 정지', + 'Start uploading queue': '업로드', + 'Stop upload': '업로드 중지', + 'Start upload': '업로드', + 'Uploaded % d / % d files': '업로드 중 % d / % d 파일', + 'N / A': 'N / A', + 'Drag files here': '여기에 파일을 드래그', + 'File extension error': '파일 확장자 오류', + 'File size error': '파일 크기 오류', + 'File count error': '이미지 : 오류', + 'Init error': '초기화 오류', + 'HTTP Error': 'HTTP 오류', + 'Security error': '보안 오류', + 'Generic error': '오류', + 'IO error': 'IO 오류', + 'File : % s': '파일 % s', + 'Close': '닫기', + '% d files queued': '% d 파일이 추가되었습니다', + 'Using runtime :': '모드', + 'File : % f, size : % s, max file size : % m': '파일 : % f, 크기 : % s, 최대 파일 크기 : % m', + 'Upload element accepts only % d file (s) at a time. Extra files were stripped': '업로드 가능한 파일의 수는 % d입니다. 불필요한 파일은 삭제되었습니다 ', + 'Upload URL might be wrong or doesn \'t exist ':'업로드할 URL이 존재하지 않습니다 ', + 'Error : File too large :': '오류 : 크기가 너무 큽니다', + 'Error : Invalid file extension :': '오류 : 확장자가 허용되지 않습니다 :' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/lv.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/lv.js new file mode 100644 index 00000000..2a040452 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/lv.js @@ -0,0 +1,33 @@ +// .lv file like language pack +plupload.addI18n({ + 'Select files' : 'Izvēlieties failus', + 'Add files to the upload queue and click the start button.' : 'Pieveinojiet failus rindai un klikšķiniet uz "Sākt augšupielādi" pogas.', + 'Filename' : 'Faila nosaukums', + 'Status' : 'Statuss', + 'Size' : 'Izmērs', + 'Add files' : 'Pievienot failus', + 'Stop current upload' : 'Apturēt pašreizējo augšupielādi', + 'Start uploading queue' : 'Sākt augšupielādi', + 'Drag files here.' : 'Ievelciet failus šeit', + 'Start upload' : 'Sākt augšupielādi', + 'Uploaded %d/%d files': 'Augšupielādēti %d/%d faili', + 'Stop upload': 'Pārtraukt augšupielādi', + 'Start upload': 'Sākt augšupielādi', + '%d files queued': '%d faili pievienoti rindai', + 'File: %s': 'Fails: %s', + 'Close': 'Aizvērt', + 'Using runtime: ': 'Lieto saskarni: ', + 'File: %f, size: %s, max file size: %m': 'Fails: %f, izmērs: %s, maksimālais faila izmērs: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti', + 'Upload URL might be wrong or doesn\'t exist': 'Augšupielādes URL varētu būt nepareizs vai neeksistē', + 'Error: File too large: ': 'Kļūda: Fails pārāk liels: ', + 'Error: Invalid file extension: ': 'Kļūda: Nekorekts faila paplašinājums:', + 'File extension error.': 'Faila paplašinājuma kļūda.', + 'File size error.': 'Faila izmēra kļūda.', + 'File count error.': 'Failu skaita kļūda', + 'Init error.': 'Inicializācijas kļūda.', + 'HTTP Error.': 'HTTP kļūda.', + 'Security error.': 'Drošības kļūda.', + 'Generic error.': 'Vispārēja rakstura kļūda.', + 'IO error.': 'Ievades/Izvades kļūda.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/nl.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/nl.js new file mode 100644 index 00000000..8372c88b --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/nl.js @@ -0,0 +1,21 @@ +// Dutch +plupload.addI18n({ + 'Select files' : 'Selecteer bestand(en):', + 'Add files to the upload queue and click the start button.' : 'Voeg bestanden toe aan de wachtrij en druk op \'Start\'.', + 'Filename' : 'Bestandsnaam', + 'Status' : 'Status', + 'Size' : 'Grootte', + 'Add files' : 'Voeg bestanden toe', + 'Stop current upload' : 'Stop upload', + 'Start uploading queue' : 'Start upload', + 'Uploaded %d/%d files': '%d/%d bestanden ge-upload', + 'N/A' : 'Niet beschikbaar', + 'Drag files here.' : 'Sleep bestanden hierheen.', + 'File extension error.': 'Ongeldig bestandstype.', + 'File size error.': 'Bestandsgrootte Error.', + 'Init error.': 'Initialisatie error.', + 'HTTP Error.': 'HTTP Error.', + 'Security error.': 'Beveiliging error.', + 'Generic error.': 'Onbekende error.', + 'IO error.': 'IO error.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pl.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pl.js new file mode 100644 index 00000000..3d1b9bea --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pl.js @@ -0,0 +1,24 @@ +plupload.addI18n({ +'Select files' : 'Wybierz pliki:', +'Add files to the upload queue and click the start button.' : 'Dodaj pliki i kliknij \'Rozpocznij transfer\'.', +'Filename' : 'Nazwa pliku', +'Status' : 'Status', +'Size' : 'Rozmiar', +'Add files' : 'Dodaj pliki', +'Stop current upload' : 'Przerwij aktualny transfer', +'Start uploading queue' : 'Rozpocznij wysyłanie', +'Uploaded %d/%d files': 'Wysłano %d/%d plików', +'N/A' : 'Nie dostępne', +'Drag files here.' : 'Przeciągnij tu pliki', +'File extension error.': 'Nieobsługiwany format pliku.', +'File size error.': 'Plik jest zbyt duży.', +'Init error.': 'Błąd inicjalizacji.', +'HTTP Error.': 'Błąd HTTP.', +'Security error.': 'Błąd bezpieczeństwa.', +'Generic error.': 'Błąd ogólny.', +'IO error.': 'Błąd IO.', +'Stop Upload': 'Przerwij transfer.', +'Add Files': 'Dodaj pliki', +'Start upload': 'Rozpocznij transfer.', +'%d files queued': '%d plików w kolejce.' +}); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pt-br.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pt-br.js new file mode 100644 index 00000000..9f34a64a --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/pt-br.js @@ -0,0 +1,35 @@ +// Brazilian Portuguese +plupload.addI18n({ + 'Select files' : 'Escolha os arquivos', + 'Add files to the upload queue and click the start button.' : 'Adicione os arquivos abaixo e clique no botão "Iniciar o envio".', + 'Filename' : 'Nome do arquivo', + 'Status' : 'Status', + 'Size' : 'Tamanho', + 'Add Files' : 'Adicionar arquivo(s)', + 'Stop Upload' : 'Parar o envio', + 'Start Upload' : 'Iniciar o envio', + 'Add files' : 'Adicionar arquivo(s)', + 'Add files.' : 'Adicionar arquivo(s)', + 'Stop upload' : 'Parar o envio', + 'Start upload' : 'Iniciar o envio', + 'Uploaded %d/%d files': 'Enviado(s) %d/%d arquivo(s)', + 'N/A' : 'N/D', + 'Drag files here.' : 'Arraste os arquivos pra cá', + 'File extension error.': 'Tipo de arquivo não permitido.', + 'File size error.': 'Tamanho de arquivo não permitido.', + 'File count error.': 'Erro na contagem dos arquivos', + 'Init error.': 'Erro inicializando.', + 'HTTP Error.': 'Erro HTTP.', + 'Security error.': 'Erro de segurança.', + 'Generic error.': 'Erro genérico.', + 'IO error.': 'Erro de E/S.', + 'File: %s': 'Arquivo: %s', + 'Close': 'Fechar', + '%d files queued': '%d arquivo(s)', + 'Using runtime: ': 'Usando: ', + 'File: %f, size: %s, max file size: %m': 'Arquivo: %f, tamanho: %s, máximo: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Só são aceitos %d arquivos por vez. O que passou disso foi descartado.', + 'Upload URL might be wrong or doesn\'t exist': 'URL de envio está errada ou não existe', + 'Error: File too large: ': 'Erro: Arquivo muito grande: ', + 'Error: Invalid file extension: ': 'Erro: Tipo de arquivo não permitido: ' +}); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ro.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ro.js new file mode 100644 index 00000000..fd198f0a --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ro.js @@ -0,0 +1,24 @@ +// Romanian +plupload.addI18n({ + 'Select files' : 'Selectare fişiere', + 'Add files to the upload queue and click the start button.' : 'Adaugă fişiere în lista apoi apasă butonul \'Începe încărcare\'.', + 'Filename' : 'Nume fişier', + 'Status' : 'Stare', + 'Size' : 'Mărime', + 'Add files' : 'Adăugare fişiere', + 'Stop current upload' : 'Întrerupe încărcarea curentă', + 'Start uploading queue' : 'Începe incărcarea', + 'Uploaded %d/%d files': 'Fişiere încărcate %d/%d', + 'N/A' : 'N/A', + 'Drag files here.' : 'Trage aici fişierele', + 'File extension error.': 'Extensie fişier eronată', + 'File size error.': 'Eroare dimensiune fişier', + 'Init error.': 'Eroare iniţializare', + 'HTTP Error.': 'Eroare HTTP', + 'Security error.': 'Eroare securitate', + 'Generic error.': 'Eroare generică', + 'IO error.': 'Eroare Intrare/Ieşire', + 'Stop Upload': 'Oprire încărcare', + 'Start upload': 'Începe încărcare', + '%d files queued': '%d fişiere listate' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ru.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ru.js new file mode 100644 index 00000000..86469c75 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/ru.js @@ -0,0 +1,21 @@ +// Russian +plupload.addI18n({ + 'Select files' : 'Выберите файлы', + 'Add files to the upload queue and click the start button.' : 'Добавьте файлы в очередь и нажмите кнопку "Загрузить файлы".', + 'Filename' : 'Имя файла', + 'Status' : 'Статус', + 'Size' : 'Размер', + 'Add files' : 'Добавить файлы', + 'Stop current upload' : 'Остановить загрузку', + 'Start uploading queue' : 'Загрузить файлы', + 'Uploaded %d/%d files': 'Загружено %d/%d файлов', + 'N/A' : 'N/D', + 'Drag files here.' : 'Перетащите файлы сюда.', + 'File extension error.': 'Неправильное расширение файла.', + 'File size error.': 'Неправильный размер файла.', + 'Init error.': 'Ошибка инициализации.', + 'HTTP Error.': 'Ошибка HTTP.', + 'Security error.': 'Ошибка безопасности.', + 'Generic error.': 'Общая ошибка.', + 'IO error.': 'Ошибка ввода-вывода.' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sk.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sk.js new file mode 100644 index 00000000..8b4b2d95 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sk.js @@ -0,0 +1,25 @@ +// .po file like language pack +plupload.addI18n({ + 'Select files' : 'Vyberte súbory', + 'Add files to the upload queue and click the start button.' : 'Pridajte súbory do zoznamu a potom spustite nahrávanie.', + 'Filename' : 'Názov súboru', + 'Status' : 'Stav', + 'Size' : 'Veľkosť', + 'Add files' : 'Pridať súbory', + 'Stop current upload' : 'Zastaviť nahrávanie', + 'Start uploading queue' : 'Spustiť nahrávanie zoznamu', + 'Drag files here.' : 'Sem pretiahnite súbory.', + 'Start upload': 'Spustiť nahrávanie', + 'Uploaded %d/%d files': 'Nahraných %d/%d súborov', + 'Using runtime: ': 'K odoslaniu súborov sa použije rozhranie: ', + 'N/A' : 'N/A', + 'File extension error.': 'Chybný typ súboru.', + 'File size error.': 'Súbor je príliš veľký.', + 'Init error.': 'Chyba inicializácie.', + 'HTTP Error.': 'HTTP Chyba.', + 'Security error.': 'Bezpečnostná Chyba.', + 'Generic error.': 'Chyba.', + 'IO error.': 'IO Chyba', + 'Stop Upload': 'Zastaviť nahrávanie', + '%d files queued': '%d súborov pridaných do zoznamu' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sr.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sr.js new file mode 100644 index 00000000..59dc0a97 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sr.js @@ -0,0 +1,14 @@ +// Serbian +plupload.addI18n({ + 'Select files' : 'Izaberite fajlove', + 'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.', + 'Filename' : 'Naziv fajla', + 'Status' : 'Status', + 'Size' : 'Veličina', + 'Add Files' : 'Dodaj fajlove', + 'Stop current upload' : 'Zaustavi upload', + 'Start uploading queue' : 'Počni upload', + 'Drag files here.' : 'Prevucite fajlove ovde.', + 'Start Upload': 'Počni upload', + 'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sv.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sv.js new file mode 100644 index 00000000..11c75245 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/i18n/sv.js @@ -0,0 +1,12 @@ +// .po file like language pack +plupload.addI18n({ + 'Select files' : 'Välj filer', + 'Add files to the upload queue and click the start button.' : 'Lägg till filer till kön och tryck på start.', + 'Filename' : 'Filnamn', + 'Status' : 'Status', + 'Size' : 'Storlek', + 'Add files' : 'Lägg till filer', + 'Stop current upload' : 'Stoppa uppladdningen', + 'Start uploading queue' : 'Starta uppladdningen', + 'Drag files here.' : 'Dra filer hit' +}); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css new file mode 100644 index 00000000..97216573 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css @@ -0,0 +1,231 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + /* display: -moz-inline-box; /* FF < 3*//* + display: inline-block; + font: normal 12px sans-serif; + text-decoration: none; + color: #42454a; + border: 1px solid #bababa; + padding: 2px 8px 3px 20px; + margin-right: 4px; + background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center; + outline: 0; + + /* Optional rounded corners for browsers that support it *//* + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px;*/ + margin: 5px; +} +.plupload_button i { + margin-left: -5px; + margin-right: 5px; +} +/* +.plupload_button:hover { + color: #000; + text-decoration: none; +}*/ + +.plupload_disabled, a.plupload_disabled:hover { + /*color: #737373; + border-color: #c5c5c5; + background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center;*/ + cursor: default; +} + +.plupload_add { + /*background-position: -181px center;*/ +} + +.plupload_wrapper { + /*font: normal 11px Verdana,sans-serif;*/ + width: 100%; +} + +.plupload_container { + padding: 8px; + /*background: url('../img/transp50.png');*/ + /*-moz-border-radius: 5px;*/ +} + +.plupload_container input { + /*border: 1px solid #DDD;*/ + /*font: normal 11px Verdana,sans-serif;*/ + width: 98%; +} + +.plupload_header {/*background: #2A2C2E url('../img/backgrounds.gif') repeat-x;*/} +.plupload_header_content { + /*background: url('../img/backgrounds.gif') no-repeat 0 -317px; + min-height: 56px; + padding-left: 60px; + color: #FFF;*/ +} +.plupload_header_title { + /*font: normal 18px sans-serif; + padding: 6px 0 3px;*/ +} +.plupload_header_text { + /*font: normal 12px sans-serif;*/ +} + +.plupload_filelist { + margin: 0; + padding: 0; + list-style: none; + border: 1px solid #dddddd; + /*-webkit-border-radius: 5px; + border-radius: 5px;*/ +} + +.plupload_scroll .plupload_filelist { + height: 185px; + /*background: #f9f9f9;*/ + overflow-y: scroll; +} + +.plupload_filelist li { + padding: 5px 8px 0px 8px; + background: #f9f9f9; + /*padding: 10px 8px; + background: #f9f9f9 url('../img/backgrounds.gif') repeat-x 0 -156px;*/ + border-bottom: 1px solid #dddddd; +} + +.plupload_filelist_header, .plupload_filelist_footer { + border: 1px solid #dddddd; + margin-bottom: -1px; + + + padding-bottom: 20px; +} +.plupload_file_action { + +} +.plupload_filelist_header { + /*border-top: 1px solid #EEE;*/ + padding: 3px 10px; +} + +.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} +.plupload_file_name {float: left; overflow: hidden} +.plupload_file_status {color: #777;} +.plupload_file_status span {color: #42454A;} + +.plupload_file_statusbar, +.plupload_file_size, .plupload_file_status, .plupload_progress, .plupload_progress_box { + float: right; + width: 80px; + +} +.plupload_file_action_bottom { + padding-right:8px; +} +.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} + +.plupload_filelist .plupload_file_name {width: 205px} + +.plupload_file_action { + float: right; + width: 16px; + height: 16px; + margin-left: 15px; +} + +.plupload_file_action * { + display: none; + width: 16px; + height: 16px; +} + +li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;} +li.plupload_done {color:#AAA} + +li.plupload_delete a { + background: url('../img/delete.gif'); +} + +li.plupload_failed a { + background: url('../img/error.gif'); + cursor: default; +} + +li.plupload_done a { + background: url('../img/done.gif'); + cursor: default; +} + +.plupload_progress, .plupload_upload_status { + display: none; +} + +.plupload_progress_container { + margin-top: 3px; + background: #FFF; + padding: 1px; +} +.plupload_progress_bar { + width: 0px; + height: 7px; +} + +.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { + margin-right: 17px; +} + +/* Floats */ + +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar, .plupload_progress_box { + display: block; + font-size: 0; + line-height: 0; +} +.plupload_progress_box { + margin-top: -3px; +} + +li.plupload_droptext { + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + + margin: 0 auto; + padding: 20px; + margin-top: 50px; + color: #dddddd; + font-size: 40px; + font-weight: bold; +} + +.plupload_filelist_footer { + padding-left: 10px; +} + +a.plupload_button { + color: #fff !important; +} + +a.plupload_disabled { + color: #ccc !important; +} + +ul.plupload_filelist li { + padding-top:15px; + text-align:left; +} +.plupload_filelist_footer { + +} +.ph-upload-finished { + margin-left: 25%; + margin-top:2px; + font-weight: bold; + float:left; +} diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/backgrounds.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/backgrounds.gif new file mode 100644 index 00000000..39e33ebc Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/backgrounds.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons-disabled.png b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons-disabled.png new file mode 100644 index 00000000..afa11af9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons-disabled.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons.png b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons.png new file mode 100644 index 00000000..153e7388 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/buttons.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/delete.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/delete.gif new file mode 100644 index 00000000..78ca8b3b Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/delete.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/done.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/done.gif new file mode 100644 index 00000000..29f3ed7c Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/done.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/error.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/error.gif new file mode 100644 index 00000000..4682b630 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/error.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/throbber.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/throbber.gif new file mode 100644 index 00000000..4ae8b16a Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/throbber.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/transp50.png b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/transp50.png new file mode 100644 index 00000000..eb0efe10 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/img/transp50.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/jquery.plupload.queue.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/jquery.plupload.queue.js new file mode 100644 index 00000000..e913f35a --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.plupload.queue/jquery.plupload.queue.js @@ -0,0 +1,381 @@ +/** + * jquery.plupload.queue.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +// JSLint defined globals +/*global plupload:false, jQuery:false, alert:false */ + +(function($) { + var uploaders = {}; + + function _(str) { + return plupload.translate(str) || str; + } + + function renderUI(id, target) { + // Remove all existing non plupload items + target.contents().each(function(i, node) { + node = $(node); + + if (!node.is('.plupload')) { + node.remove(); + } + }); + + target.prepend( + '
    ' + + '
    ' + + '' + ); + } + + $.fn.pluploadQueue = function(settings) { + if (settings) { + this.each(function() { + var uploader, target, id, contents_bak; + + target = $(this); + id = target.attr('id'); + + if (!id) { + id = plupload.guid(); + target.attr('id', id); + } + + contents_bak = target.html(); + renderUI(id, target); + uploader = new plupload.Uploader($.extend({ + dragdrop : true, + browse_button : id + '_browse', + container : id + }, settings)); + + uploaders[id] = uploader; + + function handleStatus(file) { + var actionClass; + + if (file.status == plupload.DONE) { + actionClass = 'plupload_done'; + } + + if (file.status == plupload.FAILED) { + actionClass = 'plupload_failed'; + } + + if (file.status == plupload.QUEUED) { + actionClass = 'plupload_delete'; + } + + if (file.status == plupload.UPLOADING) { + actionClass = 'plupload_uploading'; + } + + var icon = $('#' + file.id).attr('class', actionClass).find('a').css('display', 'block'); + if (file.hint) { + icon.attr('title', file.hint); + } + } + + function updateTotalProgress() { + $('span.plupload_total_status', target).html(uploader.total.percent + '%'); + $('div.plupload_progress_bar', target).css('width', uploader.total.percent + '%'); + $('span.plupload_upload_status', target).html( + _('Uploaded %d/%d files').replace(/%d\/%d/, uploader.total.uploaded+'/'+uploader.files.length) + ); + } + + function updateList() { + var fileList = $('ul.plupload_filelist', target).html(''), inputCount = 0, inputHTML; + + $.each(uploader.files, function(i, file) { + inputHTML = ''; + + if (file.status == plupload.DONE) { + if (file.target_name) { + inputHTML += ''; + } + + inputHTML += ''; + inputHTML += ''; + + inputCount++; + + $('#' + id + '_count').val(inputCount); + } + + fileList.append( + '
  • ' + + '
    ' + file.name + '
    ' + + '
    ' + + '
    ' + plupload.formatSize(file.size) + '
    ' + + '
    ' + file.percent + '%
    ' + + '
    ' + + '
     
    ' + + inputHTML + + '
  • ' + ); + + handleStatus(file); + + $('#' + file.id + '.plupload_delete a').click(function(e) { + $('#' + file.id).remove(); + uploader.removeFile(file); + + e.preventDefault(); + }); + }); + + $('span.plupload_total_file_size', target).html(plupload.formatSize(uploader.total.size)); + + if (uploader.total.queued === 0) { + $('span.plupload_add_text', target).html(_('Add Files')); + } else { + $('span.plupload_add_text', target).html(_('%d files queued').replace(/%d/, uploader.total.queued)); + } + + $('a.plupload_start', target).toggleClass('plupload_disabled', uploader.files.length == (uploader.total.uploaded + uploader.total.failed)); + + // Scroll to end of file list + fileList[0].scrollTop = fileList[0].scrollHeight; + + updateTotalProgress(); + + // Re-add drag message if there is no files + if (!uploader.files.length && uploader.features.dragdrop && uploader.settings.dragdrop) { + $('#' + id + '_filelist').append('
  • ' + _("Drag files here.") + '
  • '); + } + } + + function destroy() { + delete uploaders[id]; + uploader.destroy(); + target.html(contents_bak); + uploader = target = contents_bak = null; + } + uploader.bind("UploadFile", function(up, file) { + $('#' + file.id).addClass('plupload_current_file'); + }); + + uploader.bind('Init', function(up, res) { + //renderUI(id, target); + + // Enable rename support + if (!settings.unique_names && settings.rename) { + target.on('click', '#' + id + '_filelist div.plupload_file_name span', function(e) { + var targetSpan = $(e.target), file, parts, name, ext = ""; + + // Get file name and split out name and extension + file = up.getFile(targetSpan.parents('li')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + targetSpan.hide().after(''); + targetSpan.next().val(name).focus().blur(function() { + targetSpan.show().next().remove(); + }).keydown(function(e) { + var targetInput = $(this); + + if (e.keyCode == 13) { + e.preventDefault(); + + // Rename file and glue extension back on + file.name = targetInput.val() + ext; + targetSpan.html(file.name); + targetInput.blur(); + } + }); + }); + } + + //$('a.plupload_add', target).attr('id', id + '_browse'); + + //up.settings.browse_button = id + '_browse'; + + // Enable drag/drop (see PostInit handler as well) + if (up.settings.dragdrop) { + up.settings.drop_element = id + '_filelist'; + } + + $('#' + id + '_container').attr('title', 'Using runtime: ' + res.runtime); + + $('a.plupload_start', target).click(function(e) { + if (!$(this).hasClass('plupload_disabled')) { + uploader.start(); + } + + e.preventDefault(); + }); + + $('a.plupload_stop', target).click(function(e) { + e.preventDefault(); + uploader.stop(); + }); + + $('a.plupload_start', target).addClass('plupload_disabled'); + }); + + /*uploader.bind("PostInit", function(up) { + // features are populated only after input components are fully instantiated + if (up.settings.dragdrop && up.features.dragdrop) { + $('#' + id + '_filelist').append('
  • ' + _("Drag files here.") + '
  • '); + } + }); + + uploader.init();*/ + + uploader.bind("Error", function(up, err) { + var file = err.file, message; + + if (file) { + message = err.message; + + if (err.details) { + message += " (" + err.details + ")"; + } + + if (err.code == plupload.FILE_SIZE_ERROR) { + alert(_("Error: File too large:") + " " + file.name); + } + + if (err.code == plupload.FILE_EXTENSION_ERROR) { + alert(_("Error: Invalid file extension:") + " " + file.name); + } + + file.hint = message; + $('#' + file.id).attr('class', 'plupload_failed').find('a').css('display', 'block').attr('title', message); + } + + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + destroy(); + }, 1); + } + }); + + uploader.bind("PostInit", function(up) { + // features are populated only after input components are fully instantiated + if (up.settings.dragdrop && up.features.dragdrop) { + $('#' + id + '_filelist').append('
  • ' + _("Drag files here.") + '
  • '); + } + }); + + uploader.init(); + + uploader.bind('StateChanged', function() { + if (uploader.state === plupload.STARTED) { + $('li.plupload_delete a,div.plupload_buttons', target).hide(); + $('span.plupload_upload_status,div.plupload_progress,a.plupload_stop', target).css('display', 'block'); + $('span.plupload_upload_status', target).html('Uploaded ' + uploader.total.uploaded + '/' + uploader.files.length + ' files'); + + if (settings.multiple_queues) { + $('span.plupload_total_status,span.plupload_total_file_size', target).show(); + } + } else { + updateList(); + $('a.plupload_stop,div.plupload_progress', target).hide(); + $('a.plupload_delete', target).css('display', 'block'); + + if (settings.multiple_queues && uploader.total.uploaded + uploader.total.failed == uploader.files.length) { + $(".plupload_buttons,.plupload_upload_status", target).css("display", "inline"); + $(".plupload_start", target).addClass("plupload_disabled"); + $('span.plupload_total_status,span.plupload_total_file_size', target).hide(); + } + } + }); + + uploader.bind('QueueChanged', updateList); + + uploader.bind('FileUploaded', function(up, file) { + handleStatus(file); + }); + + uploader.bind("UploadProgress", function(up, file) { + // Set file specific progress + //$('#' + file.id + ' div.plupload_file_status', target).html(file.percent + '%'); + + $('#' + file.id + ' div.plupload_file_status', target).html(file.percent + '%'); + /* $('#' + file.id + ' div.plupload_file_statusbar', target).html('
    '); */ + $('#' + file.id + ' div.plupload_file_statusbar', target).html('
    '); + + + handleStatus(file); + updateTotalProgress(); + + + + + + + }); + + // Call setup function + if (settings.setup) { + settings.setup(uploader); + } + }); + + return this; + } else { + // Get uploader instance for specified element + return uploaders[$(this[0]).attr('id')]; + } + }; +})(jQuery); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css new file mode 100644 index 00000000..1c9a726e --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css @@ -0,0 +1,362 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + cursor: pointer; + outline: none; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; + min-width: 520px; +} + +.plupload_container { + _height: 300px; + min-height: 300px; + position: relative; +} + +.plupload_filelist_footer {border-width: 1px 0 0 0} +.plupload_file {border-width: 0 0 1px 0} +.plupload_container .plupload_header {border-width: 0 0 1px 0; position: relative;} + +.plupload_delete .ui-icon, +.plupload_done .ui-icon, +.plupload_failed .ui-icon { + cursor:pointer; +} + +.plupload_header_content { + height: 56px; + padding: 0 160px 0 60px; + position: relative; +} + +.plupload_logo { + width: 40px; + height: 40px; + background: url('../img/plupload.png') no-repeat 0 0; + position: absolute; + top: 8px; + left: 8px; +} + +.plupload_header_content_bw .plupload_logo { + background-position: -40px 0; +} + +.plupload_header_title { + font: normal 18px sans-serif; + padding: 6px 0 3px; +} + +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_view_switch { + position: absolute; + right: 16px; + bottom: 8px; + margin: 0; + display: none; +} + +.plupload_view_switch .ui-button { + margin-right: -0.31em; +} + +.plupload_content { + position: absolute; + top: 87px; + bottom: 44px; + left: 0; + right: 0; + overflow-y: auto; + width: 100%; +} + +.plupload_filelist { + border-collapse: collapse; + border-left: none; + border-right: none; + margin: 0; + padding: 0; + width: 100%; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; +} + +.plupload_filelist_content { + padding: 0; + margin: 0; +} + +.plupload_cell {padding: 8px 6px;} + +.plupload_file { + list-style: none; + display: block; + position: relative; + overflow: hidden; + width: 100%; +} + +.plupload_file_thumb { + position: absolute; + left: 6px; + top: 6px; + background: #eee url(../img/loading.gif) center no-repeat; +} + +.plupload_file_thumb_loaded { + background-image: none; +} + +.plupload_file_name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.plupload_filelist_header { + border-top: none; +} + +.plupload_filelist_footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +.plupload_buttons { + position: relative; +} + +/* list view */ +.plupload_view_list .plupload_file { + border-left: none; + border-right: none; + border-top: none; + height: 29px; +} + +.plupload_view_list div.plupload_file_size, +.plupload_view_list div.plupload_file_status, +.plupload_view_list div.plupload_file_action { + padding: 8px 6px; + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_list div.plupload_file_name { + margin-right: 156px; + padding: 8px 6px; + _width: 75%; +} + +.plupload_view_list div.plupload_file_size { + right: 28px; +} + +.plupload_view_list div.plupload_file_status { + right: 82px; +} + +.plupload_view_list .plupload_file_rename { + margin-left: -2px; +} + +.plupload_view_list .plupload_file_size, +.plupload_view_list .plupload_file_status, +.plupload_filelist_footer .plupload_file_size, +.plupload_filelist_footer .plupload_file_status { + text-align: right; + width: 52px; +} + +.plupload_view_list .plupload_file_thumb, +.plupload_view_list .plupload_file_dummy { + top: -999px; +} + +.plupload_view_list .plupload_file_progress { + display: none; +} + + +/* thumbs view */ +.plupload_view_thumbs .plupload_content { + top: 57px; +} + +.plupload_view_thumbs .plupload_filelist_header { + display: none; +} + +.plupload_view_thumbs .plupload_file { + width: 100px; + padding: 72px 6px 6px; + margin: 10px; + border: 1px solid #fff; + float: left; +} + +.plupload_view_thumbs .plupload_file_thumb, +.plupload_view_thumbs .plupload_file_dummy { + width: 100px; + height: 60px; + text-align: center; + overflow: hidden; +} + +.plupload_view_thumbs .plupload_file_dummy { + font-size: 21px; + font-weight: bold; + text-transform: lowercase; + overflow: hidden; + line-height: 60px; + border: none; +} + +.plupload_view_thumbs div.plupload_file_action { + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_thumbs div.plupload_file_name { + padding: 0; + font-weight: bold; +} + +.plupload_view_thumbs .plupload_file_rename { + padding: 1px 0; + width: 100% !important; +} + +.plupload_view_thumbs div.plupload_file_size { + font-size: 0.8em; + font-weight: normal; +} + +.plupload_view_thumbs div.plupload_file_status { + position: absolute; + top: 67px; + left: 6px; + width: 100px; + height: 3px; + overflow: hidden; + text-indent: -999px; +} + +.plupload_view_thumbs div.plupload_file_progress { + border: none; + height: 100%; +} + +.plupload .ui-sortable-helper, +.plupload .ui-sortable .plupload_file { + cursor:move; +} + +.plupload_file_action {width: 16px;} +.plupload_file_name { + overflow: hidden; + padding-left: 10px; +} + +.plupload_file_rename { + border: none; + font: normal 11px Verdana, sans-serif; + padding: 1px 2px; + line-height: 11px; + height: 11px; +} + +.plupload_progress {width: 60px;} +.plupload_progress_container {padding: 1px;} + + +/* Floats */ + +.plupload_right {float: right;} +.plupload_left {float: left;} +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} +.plupload_clearer {height: 0;} + +/* Misc */ +.plupload_hidden {display: none;} + +.plupload_droptext { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 160px; + display: none; +} + +.plupload_dropbox .plupload_droptext { + display: block; +} + +.plupload_buttons, .plupload_upload_status {float: left} + +.plupload_message { + position: absolute; + top: -1px; + left: -1px; + height: 100%; + width: 100%; +} + +.plupload_message p { + padding:0.7em; + margin:0; +} + +.plupload_message strong { + font-weight: bold; +} + +plupload_message i { + font-style: italic; +} + +.plupload_message p span.ui-icon { + float: left; + margin-right: 0.3em; +} + +.plupload_header_content .ui-state-error, +.plupload_header_content .ui-state-highlight { + border:none; +} + +.plupload_message_close { + position:absolute; + top:5px; + right:5px; + cursor:pointer; +} + +.plupload .ui-sortable-placeholder { + height:35px; +} diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/loading.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/loading.gif new file mode 100644 index 00000000..f0109d17 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/loading.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload-bw.png b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload-bw.png new file mode 100644 index 00000000..bb4147e8 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload-bw.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload.png b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload.png new file mode 100644 index 00000000..8ae0f90b Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/img/plupload.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/jquery.ui.plupload.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/jquery.ui.plupload.js new file mode 100644 index 00000000..b7a089ba --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/jquery.ui.plupload/jquery.ui.plupload.js @@ -0,0 +1,1216 @@ +/** + * jquery.ui.plupload.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.progressbar.js + * + * Optionally: + * jquery.ui.sortable.js + */ + + /* global jQuery:true */ + +/** +jQuery UI based implementation of the Plupload API - multi-runtime file uploading API. + +To use the widget you must include _jQuery_ and _jQuery UI_ bundle (including `ui.core`, `ui.widget`, `ui.button`, +`ui.progressbar` and `ui.sortable`). + +In general the widget is designed the way that you do not usually need to do anything to it after you instantiate it. +But! You still can intervenue, to some extent, in case you need to. Although, due to the fact that widget is based on +_jQuery UI_ widget factory, there are some specifics. See examples below for more details. + +@example + +
    +

    Your browser doesn't have Flash, Silverlight or HTML5 support.

    +
    + + + +@example + // Invoking methods: + $('#uploader').plupload(options); + + // Display welcome message in the notification area + $('#uploader').plupload('notify', 'info', "This might be obvious, but you need to click 'Add Files' to add some files."); + +@example + // Subscribing to the events... + // ... on initialization: + $('#uploader').plupload({ + ... + viewchanged: function(event, args) { + // stuff ... + } + }); + // ... or after initialization + $('#uploader').on("viewchanged", function(event, args) { + // stuff ... + }); + +@class UI.Plupload +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Array} [settings.filters=[]] Set of file type filters, each one defined by hash of title and extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.autostart=false] Whether to auto start uploading right after file selection. + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.sortable=false] Enable ability to sort files in the queue, changing their uploading priority. + @param {Object} [settings.buttons] Control the visibility of functional buttons. + @param {Boolean} [settings.buttons.browse=true] Display browse button. + @param {Boolean} [settings.buttons.start=true] Display start button. + @param {Boolean} [settings.buttons.stop=true] Display stop button. + @param {Object} [settings.views] Control various views of the file queue. + @param {Boolean} [settings.views.list=true] Enable list view. + @param {Boolean} [settings.views.thumbs=false] Enable thumbs view. + @param {String} [settings.views.default='list'] Default view. + @param {Boolean} [settings.views.remember=true] Whether to remember the current view (requires jQuery Cookie plugin). + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. + @param {Number} [settings.max_file_count=0] Limit the number of files user is able to upload in one go, autosets _multiple_queues_ to _false_ (default is 0 - no limit). +*/ +(function(window, document, plupload, $) { + +/** +Dispatched when the widget is initialized and ready. + +@event ready +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when file dialog is closed. + +@event selected +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of selected files represented by plupload.File objects +*/ + +/** +Dispatched when file dialog is closed. + +@event removed +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of removed files represented by plupload.File objects +*/ + +/** +Dispatched when upload is started. + +@event start +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when upload is stopped. + +@event stop +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched during the upload process. + +@event progress +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that is being uploaded (includes loaded and percent properties among others). + @param {Number} size Total file size in bytes. + @param {Number} loaded Number of bytes uploaded of the files total size. + @param {Number} percent Number of percentage uploaded of the file. +*/ + +/** +Dispatched when file is uploaded. + +@event uploaded +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +/** +Dispatched when upload of the whole queue is complete. + +@event complete +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of uploaded files represented by plupload.File objects +*/ + +/** +Dispatched when the view is changed, e.g. from `list` to `thumbs` or vice versa. + +@event viewchanged +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} type Current view type. +*/ + +/** +Dispatched when error of some kind is detected. + +@event error +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} error Error message. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +var uploaders = {}; + +function _(str) { + return plupload.translate(str) || str; +} + +function renderUI(obj) { + obj.id = obj.attr('id'); + + obj.html( + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '' + + '
    ' + _('Select files') + '
    ' + + '
    ' + _('Add files to the upload queue and click the start button.') + '
    ' + + '
    ' + + ' ' + + ' ' + + '
    ' + + '
    ' + + '
    ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
    ' + _('Filename') + '' + _('Status') + '' + _('Size') + ' 
    ' + + + '
    ' + + '
    ' + _("Drag files here.") + '
    ' + + '
    ' + + '
     
    ' + + '
    ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + + '
    ' + + '' + + '
    ' + ); +} + + +$.widget("ui.plupload", { + + widgetEventPrefix: '', + + imgs: {}, + + contents_bak: '', + + options: { + browse_button_hover: 'ui-state-hover', + browse_button_active: 'ui-state-active', + + // widget specific + dragdrop : true, + multiple_queues: true, // re-use widget by default + buttons: { + browse: true, + start: true, + stop: true + }, + views: { + list: true, + thumbs: false, + active: 'list', + remember: true // requires: https://github.com/carhartl/jquery-cookie, otherwise disabled even if set to true + }, + autostart: false, + sortable: false, + rename: false, + max_file_count: 0 // unlimited + }, + + FILE_COUNT_ERROR: -9001, + + _create: function() { + var id = this.element.attr('id'); + if (!id) { + id = plupload.guid(); + this.element.attr('id', id); + } + this.id = id; + + // backup the elements initial state + this.contents_bak = this.element.html(); + renderUI(this.element); + + // container, just in case + this.container = $('.plupload_container', this.element).attr('id', id + '_container'); + + this.content = $('.plupload_content', this.element); + + if ($.fn.resizable) { + this.container.resizable({ + handles: 's', + minHeight: 300 + }); + } + + // list of files, may become sortable + this.filelist = $('.plupload_filelist_content', this.container) + .attr({ + id: id + '_filelist', + unselectable: 'on' + }); + + + // buttons + this.browse_button = $('.plupload_add', this.container).attr('id', id + '_browse'); + this.start_button = $('.plupload_start', this.container).attr('id', id + '_start'); + this.stop_button = $('.plupload_stop', this.container).attr('id', id + '_stop'); + this.thumbs_switcher = $('#' + id + '_view_thumbs'); + this.list_switcher = $('#' + id + '_view_list'); + + if ($.ui.button) { + this.browse_button.button({ + icons: { primary: 'ui-icon-circle-plus' }, + disabled: true + }); + + this.start_button.button({ + icons: { primary: 'ui-icon-circle-arrow-e' }, + disabled: true + }); + + this.stop_button.button({ + icons: { primary: 'ui-icon-circle-close' } + }); + + this.list_switcher.button({ + text: false, + icons: { secondary: "ui-icon-grip-dotted-horizontal" } + }); + + this.thumbs_switcher.button({ + text: false, + icons: { secondary: "ui-icon-image" } + }); + } + + // progressbar + this.progressbar = $('.plupload_progress_container', this.container); + + if ($.ui.progressbar) { + this.progressbar.progressbar(); + } + + // counter + this.counter = $('.plupload_count', this.element) + .attr({ + id: id + '_count', + name: id + '_count' + }); + + // initialize uploader instance + this._initUploader(); + }, + + _initUploader: function() { + var self = this + , id = this.id + , uploader + , options = { + container: id + '_buttons', + browse_button: id + '_browse' + } + ; + + $('.plupload_buttons', this.element).attr('id', id + '_buttons'); + + if (self.options.dragdrop) { + this.filelist.parent().attr('id', this.id + '_dropbox'); + options.drop_element = this.id + '_dropbox'; + } + + if (self.options.views.thumbs) { + if (o.typeOf(self.options.required_features) === 'string') { + self.options.required_features += ",display_media"; + } else { + self.options.required_features = "display_media"; + } + } + + uploader = this.uploader = uploaders[id] = new plupload.Uploader($.extend(this.options, options)); + + uploader.bind('Error', function(up, err) { + var message, details = ""; + + message = '' + err.message + ''; + + switch (err.code) { + case plupload.FILE_EXTENSION_ERROR: + details = o.sprintf(_("File: %s"), err.file.name); + break; + + case plupload.FILE_SIZE_ERROR: + details = o.sprintf(_("File: %f, size: %s, max file size: %m"), err.file.name, err.file.size, plupload.parseSize(self.options.max_file_size)); + break; + + case plupload.FILE_DUPLICATE_ERROR: + details = o.sprintf(_("%s already present in the queue."), err.file.name); + break; + + case self.FILE_COUNT_ERROR: + details = o.sprintf(_("Upload element accepts only %d file(s) at a time. Extra files were stripped."), self.options.max_file_count); + break; + + case plupload.IMAGE_FORMAT_ERROR : + details = _("Image format either wrong or not supported."); + break; + + case plupload.IMAGE_MEMORY_ERROR : + details = _("Runtime ran out of available memory."); + break; + + /* // This needs a review + case plupload.IMAGE_DIMENSIONS_ERROR : + details = o.sprintf(_('Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.'), up.runtime, up.features.maxWidth, up.features.maxHeight); + break; */ + + case plupload.HTTP_ERROR: + details = _("Upload URL might be wrong or doesn't exist."); + break; + } + + message += "
    " + details + ""; + + self._trigger('error', null, { up: up, error: err } ); + + // do not show UI if no runtime can be initialized + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + self.destroy(); + }, 1); + } else { + self.notify('error', message); + } + }); + + + uploader.bind('PostInit', function(up) { + // all buttons are optional, so they can be disabled and hidden + if (!self.options.buttons.browse) { + self.browse_button.button('disable').hide(); + up.disableBrowse(true); + } else { + self.browse_button.button('enable'); + } + + if (!self.options.buttons.start) { + self.start_button.button('disable').hide(); + } + + if (!self.options.buttons.stop) { + self.stop_button.button('disable').hide(); + } + + if (!self.options.unique_names && self.options.rename) { + self._enableRenaming(); + } + + if (self.options.dragdrop && up.features.dragdrop) { + self.filelist.parent().addClass('plupload_dropbox'); + } + + self._enableViewSwitcher(); + + self.start_button.click(function(e) { + if (!$(this).button('option', 'disabled')) { + self.start(); + } + e.preventDefault(); + }); + + self.stop_button.click(function(e) { + self.stop(); + e.preventDefault(); + }); + + self._trigger('ready', null, { up: up }); + }); + + + // check if file count doesn't exceed the limit + if (self.options.max_file_count) { + self.options.multiple_queues = false; // one go only + + uploader.bind('FilesAdded', function(up, selectedFiles) { + var selectedCount = selectedFiles.length + , extraCount = up.files.length + selectedCount - self.options.max_file_count + ; + + if (extraCount > 0) { + selectedFiles.splice(selectedCount - extraCount, extraCount); + + up.trigger('Error', { + code : self.FILE_COUNT_ERROR, + message : _('File count error.') + }); + } + }); + } + + // uploader internal events must run first + uploader.init(); + + uploader.bind('FilesAdded', function(up, files) { + self._addFiles(files); + self._trigger('selected', null, { up: up, files: files } ); + + if (self.options.autostart) { + // set a little delay to make sure that QueueChanged triggered by the core has time to complete + setTimeout(function() { + self.start(); + }, 10); + } + }); + + uploader.bind('FilesRemoved', function(up, files) { + self._trigger('removed', null, { up: up, files: files } ); + }); + + uploader.bind('QueueChanged', function() { + self._handleState(); + self._updateTotalProgress(); + }); + + uploader.bind('StateChanged', function() { + self._handleState(); + }); + + uploader.bind('UploadFile', function(up, file) { + self._handleFileStatus(file); + }); + + uploader.bind('FileUploaded', function(up, file) { + self._handleFileStatus(file); + self._trigger('uploaded', null, { up: up, file: file } ); + }); + + uploader.bind('UploadProgress', function(up, file) { + self._handleFileStatus(file); + self._updateTotalProgress(); + self._trigger('progress', null, { up: up, file: file } ); + }); + + uploader.bind('UploadComplete', function(up, files) { + self._addFormFields(); + self._trigger('complete', null, { up: up, files: files } ); + }); + }, + + + _setOption: function(key, value) { + var self = this; + + if (key == 'buttons' && typeof(value) == 'object') { + value = $.extend(self.options.buttons, value); + + if (!value.browse) { + self.browse_button.button('disable').hide(); + self.uploader.disableBrowse(true); + } else { + self.browse_button.button('enable').show(); + self.uploader.disableBrowse(false); + } + + if (!value.start) { + self.start_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + + if (!value.stop) { + self.stop_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + } + + self.uploader.settings[key] = value; + }, + + + /** + Start upload. Triggers `start` event. + + @method start + */ + start: function() { + this.uploader.start(); + this._trigger('start', null, { up: this.uploader }); + }, + + + /** + Stop upload. Triggers `stop` event. + + @method stop + */ + stop: function() { + this.uploader.stop(); + this._trigger('stop', null, { up: this.uploader }); + }, + + + /** + Enable browse button. + + @method enable + */ + enable: function() { + this.browse_button.button('enable'); + this.uploader.disableBrowse(false); + }, + + + /** + Disable browse button. + + @method disable + */ + disable: function() { + this.browse_button.button('disable'); + this.uploader.disableBrowse(true); + }, + + + /** + Retrieve file by it's unique id. + + @method getFile + @param {String} id Unique id of the file + @return {plupload.File} + */ + getFile: function(id) { + var file; + + if (typeof id === 'number') { + file = this.uploader.files[id]; + } else { + file = this.uploader.getFile(id); + } + return file; + }, + + /** + Return array of files currently in the queue. + + @method getFiles + @return {Array} Array of files in the queue represented by plupload.File objects + */ + getFiles: function() { + return this.uploader.files; + }, + + + /** + Remove the file from the queue. + + @method removeFile + @param {plupload.File|String} file File to remove, might be specified directly or by it's unique id + */ + removeFile: function(file) { + if (plupload.typeOf(file) === 'string') { + file = this.getFile(file); + } + this._removeFiles(file); + }, + + + /** + Clear the file queue. + + @method clearQueue + */ + clearQueue: function() { + this.uploader.splice(); + }, + + + /** + Retrieve internal plupload.Uploader object (usually not required). + + @method getUploader + @return {plupload.Uploader} + */ + getUploader: function() { + return this.uploader; + }, + + + /** + Trigger refresh procedure, specifically browse_button re-measure and re-position operations. + Might get handy, when UI Widget is placed within the popup, that is constantly hidden and shown + again - without calling this method after each show operation, dialog trigger might get displaced + and disfunctional. + + @method refresh + */ + refresh: function() { + this.uploader.refresh(); + }, + + + /** + Display a message in notification area. + + @method notify + @param {Enum} type Type of the message, either `error` or `info` + @param {String} message The text message to display. + */ + notify: function(type, message) { + var popup = $( + '
    ' + + '' + + '

    ' + message + '

    ' + + '
    ' + ); + + popup + .addClass('ui-state-' + (type === 'error' ? 'error' : 'highlight')) + .find('p .ui-icon') + .addClass('ui-icon-' + (type === 'error' ? 'alert' : 'info')) + .end() + .find('.plupload_message_close') + .click(function() { + popup.remove(); + }) + .end(); + + $('.plupload_header', this.container).append(popup); + }, + + + /** + Destroy the widget, the uploader, free associated resources and bring back original html. + + @method destroy + */ + destroy: function() { + this._removeFiles([].slice.call(this.uploader.files)); + + // destroy uploader instance + this.uploader.destroy(); + + // unbind all button events + $('.plupload_button', this.element).unbind(); + + // destroy buttons + if ($.ui.button) { + $('.plupload_add, .plupload_start, .plupload_stop', this.container) + .button('destroy'); + } + + // destroy progressbar + if ($.ui.progressbar) { + this.progressbar.progressbar('destroy'); + } + + // destroy sortable behavior + if ($.ui.sortable && this.options.sortable) { + $('tbody', this.filelist).sortable('destroy'); + } + + // restore the elements initial state + this.element + .empty() + .html(this.contents_bak); + this.contents_bak = ''; + + $.Widget.prototype.destroy.apply(this); + }, + + + _handleState: function() { + var up = this.uploader; + + if (up.state === plupload.STARTED) { + $(this.start_button).button('disable'); + + $([]) + .add(this.stop_button) + .add('.plupload_started') + .removeClass('plupload_hidden'); + + $('.plupload_upload_status', this.element).html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + $('.plupload_header_content', this.element).addClass('plupload_header_content_bw'); + } else if (up.state === plupload.STOPPED) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .addClass('plupload_hidden'); + + if (this.options.multiple_queues) { + $('.plupload_header_content', this.element).removeClass('plupload_header_content_bw'); + } else { + $([]) + .add(this.browse_button) + .add(this.start_button) + .button('disable'); + + up.disableBrowse(); + } + + if (up.files.length === (up.total.uploaded + up.total.failed)) { + this.start_button.button('disable'); + } else { + this.start_button.button('enable'); + } + + this._updateTotalProgress(); + } + + if (up.total.queued === 0) { + $('.ui-button-text', this.browse_button).html(_('Add Files')); + } else { + $('.ui-button-text', this.browse_button).html(o.sprintf(_('%d files queued'), up.total.queued)); + } + + up.refresh(); + }, + + + _handleFileStatus: function(file) { + var self = this, actionClass, iconClass; + + // since this method might be called asynchronously, file row might not yet be rendered + if (!$('#' + file.id).length) { + return; + } + + switch (file.status) { + case plupload.DONE: + actionClass = 'plupload_done'; + iconClass = 'ui-icon ui-icon-circle-check'; + break; + + case plupload.FAILED: + actionClass = 'ui-state-error plupload_failed'; + iconClass = 'ui-icon ui-icon-alert'; + break; + + case plupload.QUEUED: + actionClass = 'plupload_delete'; + iconClass = 'ui-icon ui-icon-circle-minus'; + break; + + case plupload.UPLOADING: + actionClass = 'ui-state-highlight plupload_uploading'; + iconClass = 'ui-icon ui-icon-circle-arrow-w'; + + // scroll uploading file into the view if its bottom boundary is out of it + var scroller = $('.plupload_scroll', this.container) + , scrollTop = scroller.scrollTop() + , scrollerHeight = scroller.height() + , rowOffset = $('#' + file.id).position().top + $('#' + file.id).height() + ; + + if (scrollerHeight < rowOffset) { + scroller.scrollTop(scrollTop + rowOffset - scrollerHeight); + } + + // Set file specific progress + $('#' + file.id) + .find('.plupload_file_percent') + .html(file.percent + '%') + .end() + .find('.plupload_file_progress') + .css('width', file.percent + '%') + .end() + .find('.plupload_file_size') + .html(plupload.formatSize(file.size)); + break; + } + actionClass += ' ui-state-default plupload_file'; + + $('#' + file.id) + .attr('class', actionClass) + .find('.ui-icon') + .attr('class', iconClass) + .end() + .filter('.plupload_delete, .plupload_done, .plupload_failed') + .find('.ui-icon') + .click(function(e) { + self._removeFiles(file); + e.preventDefault(); + }); + }, + + + _updateTotalProgress: function() { + var up = this.uploader; + + // Scroll to end of file list + this.filelist[0].scrollTop = this.filelist[0].scrollHeight; + + this.progressbar.progressbar('value', up.total.percent); + + this.element + .find('.plupload_total_status') + .html(up.total.percent + '%') + .end() + .find('.plupload_total_file_size') + .html(plupload.formatSize(up.total.size)) + .end() + .find('.plupload_upload_status') + .html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + }, + + + _addFiles: function(files) { + var self = this, file_html, queue = []; + + file_html = '
  • ' + + '
    ' + + '
    %name%
    ' + + '
    ' + + '
    %size%
    ' + + '
    ' + + '
  • '; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + // destroy sortable if enabled + if ($.ui.sortable && this.options.sortable) { + $('tbody', self.filelist).sortable('destroy'); + } + + // loop over files to add + $.each(files, function(i, file) { + + self.filelist.append(file_html.replace(/%(\w+)%/g, function($0, $1) { + if ('size' === $1) { + return plupload.formatSize(file.size); + } else { + return file[$1] || ''; + } + })); + + if (self.options.views.thumbs) { + queue.push(function(cb) { + var img = new o.Image(); + + img.onload = function() { + this.embed($('#' + file.id + ' .plupload_file_thumb', self.filelist)[0], { + width: 100, + height: 60, + crop: true, + swf_url: mOxie.resolveUrl(self.options.flash_swf_url), + xap_url: mOxie.resolveUrl(self.options.silverlight_xap_url) + }); + }; + + img.onembedded = function() { + $('#' + file.id + ' .plupload_file_thumb', self.filelist).addClass('plupload_file_thumb_loaded'); + this.destroy(); + setTimeout(cb, 1); // detach, otherwise ui might hang (in SilverLight for example) + }; + + img.onerror = function() { + var ext = file.name.match(/\.([^\.]{1,7})$/); + $('#' + file.id + ' .plupload_file_thumb', self.filelist) + .html('
    ' + (ext ? ext[1] : 'none') + '
    '); + this.destroy(); + setTimeout(cb, 1); + }; + img.load(file.getSource()); + }); + } + + self._handleFileStatus(file); + }); + + if (queue.length) { + o.inSeries(queue); + } + + // re-enable sortable + if (this.options.sortable && $.ui.sortable) { + this._enableSortingList(); + } + + this._trigger('updatelist', null, { filelist: this.filelist }); + }, + + + _removeFiles: function(files) { + var self = this, up = this.uploader; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + // destroy sortable if enabled + if ($.ui.sortable && this.options.sortable) { + $('tbody', self.filelist).sortable('destroy'); + } + + $.each(files, function(i, file) { + if (file.imgs && file.imgs.length) { + $.each(file.imgs, function(ii, img) { + img.destroy(); + }); + file.imgs = []; + } + $('#' + file.id).remove(); + up.removeFile(file); + }); + + + if (up.files.length) { + // re-initialize sortable + if (this.options.sortable && $.ui.sortable) { + this._enableSortingList(); + } + } + + this._trigger('updatelist', null, { filelist: this.filelist }); + }, + + + _addFormFields: function() { + var self = this; + + // re-add from fresh + $('.plupload_file_fields', this.filelist).html(''); + + plupload.each(this.uploader.files, function(file, count) { + var fields = '' + , id = self.id + '_' + count + ; + + if (file.target_name) { + fields += ''; + } + fields += ''; + fields += ''; + + $('#' + file.id).find('.plupload_file_fields').html(fields); + }); + + this.counter.val(this.uploader.files.length); + }, + + + _viewChanged: function(view) { + // update or write a new cookie + if (this.options.views.remember && $.cookie) { + $.cookie('plupload_ui_view', view, { expires: 7, path: '/' }); + } + + // ugly fix for IE6 - make content area stretchable + if (mOxie.Env.browser === 'IE' && mOxie.Env.version < 7) { + this.content.attr('style', 'height:expression(document.getElementById("' + this.id + '_container' + '").clientHeight - ' + (view === 'list' ? 133 : 103) + ');'); + } + + this.container.removeClass('plupload_view_list plupload_view_thumbs').addClass('plupload_view_' + view); + this.view_mode = view; + this._trigger('viewchanged', null, { view: view }); + }, + + + _enableViewSwitcher: function() { + var self = this + , view + , switcher = $('.plupload_view_switch', this.container) + , buttons + , button + ; + + plupload.each(['list', 'thumbs'], function(view) { + if (!self.options.views[view]) { + switcher.find('[for="' + self.id + '_view_' + view + '"], #'+ self.id +'_view_' + view).remove(); + } + }); + + // check if any visible left + buttons = switcher.find('.plupload_button'); + + if (buttons.length === 1) { + switcher.hide(); + view = buttons.eq(0).data('view'); + this._viewChanged(view); + } else if ($.ui.button && buttons.length > 1) { + if (this.options.views.remember && $.cookie) { + view = $.cookie('plupload_ui_view'); + } + + // if wierd case, bail out to default + if (!~plupload.inArray(view, ['list', 'thumbs'])) { + view = this.options.views.active; + } + + switcher + .show() + .buttonset() + .find('.ui-button') + .click(function(e) { + view = $(this).data('view'); + self._viewChanged(view); + e.preventDefault(); // avoid auto scrolling to widget in IE and FF (see #850) + }); + + // if view not active - happens when switcher wasn't clicked manually + button = switcher.find('[for="' + self.id + '_view_'+view+'"]'); + if (button.length) { + button.trigger('click'); + } + } else { + switcher.show(); + this._viewChanged(this.options.views.active); + } + }, + + + _enableRenaming: function() { + var self = this; + + this.filelist.dblclick(function(e) { + var nameSpan = $(e.target), nameInput, file, parts, name, ext = ""; + + if (!nameSpan.hasClass('plupload_file_namespan')) { + return; + } + + // Get file name and split out name and extension + file = self.uploader.getFile(nameSpan.closest('.plupload_file')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + nameInput = $('').width(nameSpan.width()).insertAfter(nameSpan.hide()); + nameInput.val(name).blur(function() { + nameSpan.show().parent().scrollLeft(0).end().next().remove(); + }).keydown(function(e) { + var nameInput = $(this); + + if ($.inArray(e.keyCode, [13, 27]) !== -1) { + e.preventDefault(); + + // Rename file and glue extension back on + if (e.keyCode === 13) { + file.name = nameInput.val() + ext; + nameSpan.html(file.name); + } + nameInput.blur(); + } + })[0].focus(); + }); + }, + + + _enableSortingList: function() { + var self = this, filelist = $('.plupload_filelist_content', this.element); + + if ($('.plupload_file', filelist).length < 2) { + return; + } + + filelist.sortable({ + items: '.plupload_delete', + + cancel: 'object, .plupload_clearer', + + stop: function() { + var files = []; + + $.each($(this).sortable('toArray'), function(i, id) { + files[files.length] = self.uploader.getFile(id); + }); + + files.unshift(files.length); + files.unshift(0); + + // re-populate files array + Array.prototype.splice.apply(self.uploader.files, files); + } + }); + } +}); + +} (window, document, plupload, jQuery)); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.js new file mode 100644 index 00000000..485a2e04 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.js @@ -0,0 +1,10439 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.0.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2013-09-23 + */ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: src/javascript/core/utils/Basic.js + +/** + * Basic.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Basic', [], function() { + /** + Gets the true type of the built-in object (better version of typeof). + @author Angus Croll (http://javascriptweblog.wordpress.com/) + + @method typeOf + @for Utils + @static + @param {Object} o Object to check. + @return {String} Object [[Class]] + */ + var typeOf = function(o) { + var undef; + + if (o === undef) { + return 'undefined'; + } else if (o === null) { + return 'null'; + } else if (o.nodeType) { + return 'node'; + } + + // the snippet below is awesome, however it fails to detect null, undefined and arguments types in IE lte 8 + return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase(); + }; + + /** + Extends the specified object with another object. + + @method extend + @static + @param {Object} target Object to extend. + @param {Object} [obj]* Multiple objects to extend with. + @return {Object} Same as target, the extended object. + */ + var extend = function(target) { + var undef; + + each(arguments, function(arg, i) { + if (i > 0) { + each(arg, function(value, key) { + if (value !== undef) { + if (typeOf(target[key]) === typeOf(value) && !!~inArray(typeOf(value), ['array', 'object'])) { + extend(target[key], value); + } else { + target[key] = value; + } + } + }); + } + }); + return target; + }; + + /** + Executes the callback function for each item in array/object. If you return false in the + callback it will break the loop. + + @method each + @static + @param {Object} obj Object to iterate. + @param {function} callback Callback function to execute for each item. + */ + var each = function(obj, callback) { + var length, key, i, undef; + + if (obj) { + try { + length = obj.length; + } catch(ex) { + length = undef; + } + + if (length === undef) { + // Loop object items + for (key in obj) { + if (obj.hasOwnProperty(key)) { + if (callback(obj[key], key) === false) { + return; + } + } + } + } else { + // Loop array items + for (i = 0; i < length; i++) { + if (callback(obj[i], i) === false) { + return; + } + } + } + } + }; + + /** + Checks if object is empty. + + @method isEmptyObj + @static + @param {Object} o Object to check. + @return {Boolean} + */ + var isEmptyObj = function(obj) { + var prop; + + if (!obj || typeOf(obj) !== 'object') { + return true; + } + + for (prop in obj) { + return false; + } + + return true; + }; + + /** + Recieve an array of functions (usually async) to call in sequence, each function + receives a callback as first argument that it should call, when it completes. Finally, + after everything is complete, main callback is called. Passing truthy value to the + callback as a first argument will interrupt the sequence and invoke main callback + immediately. + + @method inSeries + @static + @param {Array} queue Array of functions to call in sequence + @param {Function} cb Main callback that is called in the end, or in case of erro + */ + var inSeries = function(queue, cb) { + var i = 0, length = queue.length; + + if (typeOf(cb) !== 'function') { + cb = function() {}; + } + + if (!queue || !queue.length) { + cb(); + } + + function callNext(i) { + if (typeOf(queue[i]) === 'function') { + queue[i](function(error) { + /*jshint expr:true */ + ++i < length && !error ? callNext(i) : cb(error); + }); + } + } + callNext(i); + }; + + + /** + Find an element in array and return it's index if present, otherwise return -1. + + @method inArray + @static + @param {Mixed} needle Element to find + @param {Array} array + @return {Int} Index of the element, or -1 if not found + */ + var inArray = function(needle, array) { + if (array) { + if (Array.prototype.indexOf) { + return Array.prototype.indexOf.call(array, needle); + } + + for (var i = 0, length = array.length; i < length; i++) { + if (array[i] === needle) { + return i; + } + } + } + return -1; + }; + + + /** + Returns elements of first array if they are not present in second. And false - otherwise. + + @private + @method arrayDiff + @param {Array} needles + @param {Array} array + @return {Array|Boolean} + */ + var arrayDiff = function(needles, array) { + var diff = []; + + if (typeOf(needles) !== 'array') { + needles = [needles]; + } + + if (typeOf(array) !== 'array') { + array = [array]; + } + + for (var i in needles) { + if (inArray(needles[i], array) === -1) { + diff.push(needles[i]); + } + } + return diff.length ? diff : false; + }; + + + /** + Find intersection of two arrays. + + @private + @method arrayIntersect + @param {Array} array1 + @param {Array} array2 + @return {Array} Intersection of two arrays or null if there is none + */ + var arrayIntersect = function(array1, array2) { + var result = []; + each(array1, function(item) { + if (inArray(item, array2) !== -1) { + result.push(item); + } + }); + return result.length ? result : null; + }; + + + /** + Forces anything into an array. + + @method toArray + @static + @param {Object} obj Object with length field. + @return {Array} Array object containing all items. + */ + var toArray = function(obj) { + var i, arr = []; + + for (i = 0; i < obj.length; i++) { + arr[i] = obj[i]; + } + + return arr; + }; + + + /** + Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. + The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages + to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. + It's more probable for the earth to be hit with an ansteriod. Y + + @method guid + @static + @param {String} prefix to prepend (by default 'o' will be prepended). + @method guid + @return {String} Virtually unique id. + */ + var guid = (function() { + var counter = 0; + + return function(prefix) { + var guid = new Date().getTime().toString(32), i; + + for (i = 0; i < 5; i++) { + guid += Math.floor(Math.random() * 65535).toString(32); + } + + return (prefix || 'o_') + guid + (counter++).toString(32); + }; + }()); + + + /** + Trims white spaces around the string + + @method trim + @static + @param {String} str + @return {String} + */ + var trim = function(str) { + if (!str) { + return str; + } + return String.prototype.trim ? String.prototype.trim.call(str) : str.toString().replace(/^\s*/, '').replace(/\s*$/, ''); + }; + + + /** + Parses the specified size string into a byte value. For example 10kb becomes 10240. + + @method parseSizeStr + @static + @param {String/Number} size String to parse or number to just pass through. + @return {Number} Size in bytes. + */ + var parseSizeStr = function(size) { + if (typeof(size) !== 'string') { + return size; + } + + var muls = { + t: 1099511627776, + g: 1073741824, + m: 1048576, + k: 1024 + }, + mul; + + size = /^([0-9]+)([mgk]?)$/.exec(size.toLowerCase().replace(/[^0-9mkg]/g, '')); + mul = size[2]; + size = +size[1]; + + if (muls.hasOwnProperty(mul)) { + size *= muls[mul]; + } + return size; + }; + + + return { + guid: guid, + typeOf: typeOf, + extend: extend, + each: each, + isEmptyObj: isEmptyObj, + inSeries: inSeries, + inArray: inArray, + arrayDiff: arrayDiff, + arrayIntersect: arrayIntersect, + toArray: toArray, + trim: trim, + parseSizeStr: parseSizeStr + }; +}); + +// Included from: src/javascript/core/I18n.js + +/** + * I18n.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/I18n", [ + "moxie/core/utils/Basic" +], function(Basic) { + var i18n = {}; + + return { + /** + * Extends the language pack object with new items. + * + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n: function(pack) { + return Basic.extend(i18n, pack); + }, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate: function(str) { + return i18n[str] || str; + }, + + /** + * Shortcut for translate function + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + _: function(str) { + return this.translate(str); + }, + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + sprintf: function(str) { + var args = [].slice.call(arguments, 1), reStr = ''; + + Basic.each(str.split(/%[a-z]/), function(part) { + reStr += part; + if (args.length) { + reStr += args.shift(); + } + }); + return reStr; + } + }; +}); + +// Included from: src/javascript/core/utils/Mime.js + +/** + * Mime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Mime", [ + "moxie/core/utils/Basic", + "moxie/core/I18n" +], function(Basic, I18n) { + + var mimeData = "" + + "application/msword,doc dot," + + "application/pdf,pdf," + + "application/pgp-signature,pgp," + + "application/postscript,ps ai eps," + + "application/rtf,rtf," + + "application/vnd.ms-excel,xls xlb," + + "application/vnd.ms-powerpoint,ppt pps pot," + + "application/zip,zip," + + "application/x-shockwave-flash,swf swfl," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + + "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + + "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + + "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + + "application/x-javascript,js," + + "application/json,json," + + "audio/mpeg,mp3 mpga mpega mp2," + + "audio/x-wav,wav," + + "audio/mp4,m4a," + + "audio/ogg,oga ogg," + + "audio/aiff,aiff aif," + + "audio/flac,flac," + + "audio/aac,aac," + + "audio/ac3,ac3," + + "audio/x-ms-wma,wma," + + "image/bmp,bmp," + + "image/gif,gif," + + "image/jpeg,jpg jpeg jpe," + + "image/photoshop,psd," + + "image/png,png," + + "image/svg+xml,svg svgz," + + "image/tiff,tiff tif," + + "text/plain,asc txt text diff log," + + "text/html,htm html xhtml," + + "text/css,css," + + "text/csv,csv," + + "text/rtf,rtf," + + "video/mpeg,mpeg mpg mpe m2v," + + "video/quicktime,qt mov," + + "video/mp4,mp4," + + "video/x-m4v,m4v," + + "video/x-flv,flv," + + "video/x-ms-wmv,wmv," + + "video/avi,avi," + + "video/webm,webm," + + "video/3gpp,3gpp 3gp," + + "video/3gpp2,3g2," + + "video/vnd.rn-realvideo,rv," + + "video/ogg,ogv," + + "video/x-matroska,mkv," + + "application/vnd.oasis.opendocument.formula-template,otf," + + "application/octet-stream,exe"; + + + var Mime = { + + mimes: {}, + + extensions: {}, + + // Parses the default mime types string into a mimes and extensions lookup maps + addMimeType: function (mimeData) { + var items = mimeData.split(/,/), i, ii, ext; + + for (i = 0; i < items.length; i += 2) { + ext = items[i + 1].split(/ /); + + // extension to mime lookup + for (ii = 0; ii < ext.length; ii++) { + this.mimes[ext[ii]] = items[i]; + } + // mime to extension lookup + this.extensions[items[i]] = ext; + } + }, + + + extList2mimes: function (filters, addMissingExtensions) { + var self = this, ext, i, ii, type, mimes = []; + + // convert extensions to mime types list + for (i = 0; i < filters.length; i++) { + ext = filters[i].extensions.split(/\s*,\s*/); + + for (ii = 0; ii < ext.length; ii++) { + + // if there's an asterisk in the list, then accept attribute is not required + if (ext[ii] === '*') { + return []; + } + + type = self.mimes[ext[ii]]; + if (!type) { + if (addMissingExtensions && /^\w+$/.test(ext[ii])) { + mimes.push('.' + ext[ii]); + } else { + return []; // accept all + } + } else if (Basic.inArray(type, mimes) === -1) { + mimes.push(type); + } + } + } + return mimes; + }, + + + mimes2exts: function(mimes) { + var self = this, exts = []; + + Basic.each(mimes, function(mime) { + if (mime === '*') { + exts = []; + return false; + } + + // check if this thing looks like mime type + var m = mime.match(/^(\w+)\/(\*|\w+)$/); + if (m) { + if (m[2] === '*') { + // wildcard mime type detected + Basic.each(self.extensions, function(arr, mime) { + if ((new RegExp('^' + m[1] + '/')).test(mime)) { + [].push.apply(exts, self.extensions[mime]); + } + }); + } else if (self.extensions[mime]) { + [].push.apply(exts, self.extensions[mime]); + } + } + }); + return exts; + }, + + + mimes2extList: function(mimes) { + var accept = [], exts = []; + + if (Basic.typeOf(mimes) === 'string') { + mimes = Basic.trim(mimes).split(/\s*,\s*/); + } + + exts = this.mimes2exts(mimes); + + accept.push({ + title: I18n.translate('Files'), + extensions: exts.length ? exts.join(',') : '*' + }); + + // save original mimes string + accept.mimes = mimes; + + return accept; + }, + + + getFileExtension: function(fileName) { + var matches = fileName && fileName.match(/\.([^.]+)$/); + if (matches) { + return matches[1].toLowerCase(); + } + return ''; + }, + + getFileMime: function(fileName) { + return this.mimes[this.getFileExtension(fileName)] || ''; + } + }; + + Mime.addMimeType(mimeData); + + return Mime; +}); + +// Included from: src/javascript/core/utils/Env.js + +/** + * Env.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Env", [ + "moxie/core/utils/Basic" +], function(Basic) { + + var browser = [{ + s1: navigator.userAgent, + s2: "Android", + id: "Android Browser", // default or Dolphin + sv: "Version" + },{ + s1: navigator.userAgent, // string + s2: "Chrome", // substring + id: "Chrome" // identity + },{ + s1: navigator.vendor, + s2: "Apple", + id: "Safari", + sv: "Version" // version + },{ + prop: window.opera && window.opera.buildNumber, + id: "Opera", + sv: "Version" + },{ + s1: navigator.vendor, + s2: "KDE", + id: "Konqueror" + },{ + s1: navigator.userAgent, + s2: "Firefox", + id: "Firefox" + },{ + s1: navigator.vendor, + s2: "Camino", + id: "Camino" + },{ + // for newer Netscapes (6+) + s1: navigator.userAgent, + s2: "Netscape", + id: "Netscape" + },{ + s1: navigator.userAgent, + s2: "MSIE", + id: "IE", + sv: "MSIE" + },{ + s1: navigator.userAgent, + s2: "Gecko", + id: "Mozilla", + sv: "rv" + }], + + os = [{ + s1: navigator.platform, + s2: "Win", + id: "Windows" + },{ + s1: navigator.platform, + s2: "Mac", + id: "Mac" + },{ + s1: navigator.userAgent, + s2: "iPhone", + id: "iOS" + },{ + s1: navigator.userAgent, + s2: "iPad", + id: "iOS" + },{ + s1: navigator.userAgent, + s2: "Android", + id: "Android" + },{ + s1: navigator.platform, + s2: "Linux", + id: "Linux" + }] + , version; + + function getStr(data) { + var str, prop; + + for (var i = 0; i < data.length; i++) { + str = data[i].s1; + prop = data[i].prop; + version = data[i].sv || data[i].id; + + if (str) { + if (str.indexOf(data[i].s2) != -1) { + return data[i].id; + } + } else if (prop) { + return data[i].id; + } + } + } + + + function getVer(str) { + var index = str.indexOf(version); + + if (index == -1) { + return; + } + + return parseFloat(str.substring(index + version.length + 1)); + } + + var can = (function() { + var caps = { + define_property: (function() { + /* // currently too much extra code required, not exactly worth it + try { // as of IE8, getters/setters are supported only on DOM elements + var obj = {}; + if (Object.defineProperty) { + Object.defineProperty(obj, 'prop', { + enumerable: true, + configurable: true + }); + return true; + } + } catch(ex) {} + + if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { + return true; + }*/ + return false; + }()), + + create_canvas: (function() { + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + var el = document.createElement('canvas'); + return !!(el.getContext && el.getContext('2d')); + }()), + + return_response_type: function(responseType) { + try { + if (Basic.inArray(responseType, ['', 'text', 'document']) !== -1) { + return true; + } else if (window.XMLHttpRequest){ + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); // otherwise Gecko throws an exception + if ('responseType' in xhr) { + xhr.responseType = responseType; + // as of 23.0.1271.64, Chrome switched from throwing exception to merely logging it to the console (why? o why?) + if (xhr.responseType !== responseType) { + return false; + } + return true; + } + } + } catch (ex) {} + return false; + }, + + // ideas for this heavily come from Modernizr (http://modernizr.com/) + use_data_uri: (function() { + var du = new Image(); + + du.onload = function() { + caps.use_data_uri = (du.width === 1 && du.height === 1); + }; + + setTimeout(function() { + du.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="; + }, 1); + return false; + }()), + + use_data_uri_over32kb: function() { // IE8 + return caps.use_data_uri && (Env.browser !== 'IE' || Env.version >= 9); + }, + + use_data_uri_of: function(bytes) { + return (caps.use_data_uri && bytes < 33000 || caps.use_data_uri_over32kb()); + }, + + use_fileinput: function() { + var el = document.createElement('input'); + el.setAttribute('type', 'file'); + return !el.disabled; + } + }; + + return function(cap) { + var args = [].slice.call(arguments); + args.shift(); // shift of cap + return Basic.typeOf(caps[cap]) === 'function' ? caps[cap].apply(this, args) : !!caps[cap]; + }; + }()); + + var Env = { + can: can, + browser: getStr(browser), + version: getVer(navigator.userAgent) || getVer(navigator.appVersion), + OS: getStr(os), + swf_url: "../flash/Moxie.swf", + xap_url: "../silverlight/Moxie.xap", + global_event_dispatcher: "moxie.core.EventTarget.instance.dispatchEvent" + }; + + return Env; +}); + +// Included from: src/javascript/core/utils/Dom.js + +/** + * Dom.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Dom', ['moxie/core/utils/Env'], function(Env) { + + /** + Get DOM Element by it's id. + + @method get + @for Utils + @param {String} id Identifier of the DOM Element + @return {DOMElement} + */ + var get = function(id) { + if (typeof id !== 'string') { + return id; + } + + return document.getElementById(id); + }; + + /** + Checks if specified DOM element has specified class. + + @method hasClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var hasClass = function(obj, name) { + var regExp; + + if (obj.className === '') { + return false; + } + + regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + + return regExp.test(obj.className); + }; + + /** + Adds specified className to specified DOM element. + + @method addClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var addClass = function(obj, name) { + if (!hasClass(obj, name)) { + obj.className = obj.className === '' ? name : obj.className.replace(/\s+$/, '') + ' ' + name; + } + }; + + /** + Removes specified className from specified DOM element. + + @method removeClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var removeClass = function(obj, name) { + var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + + obj.className = obj.className.replace(regExp, function($0, $1, $2) { + return $1 === ' ' && $2 === ' ' ? ' ' : ''; + }); + }; + + /** + Returns a given computed style of a DOM element. + + @method getStyle + @static + @param {Object} obj DOM element like object. + @param {String} name Style you want to get from the DOM element + */ + var getStyle = function(obj, name) { + if (obj.currentStyle) { + return obj.currentStyle[name]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(obj, null)[name]; + } + }; + + + /** + Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. + + @method getPos + @static + @param {Element} node HTML element or element id to get x, y position from. + @param {Element} root Optional root element to stop calculations at. + @return {object} Absolute position of the specified element object with x, y fields. + */ + var getPos = function(node, root) { + var x = 0, y = 0, parent, doc = document, nodeRect, rootRect; + + node = node; + root = root || doc.body; + + // Returns the x, y cordinate for an element on IE 6 and IE 7 + function getIEPos(node) { + var bodyElm, rect, x = 0, y = 0; + + if (node) { + rect = node.getBoundingClientRect(); + bodyElm = doc.compatMode === "CSS1Compat" ? doc.documentElement : doc.body; + x = rect.left + bodyElm.scrollLeft; + y = rect.top + bodyElm.scrollTop; + } + + return { + x : x, + y : y + }; + } + + // Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode + if (node && node.getBoundingClientRect && Env.browser === 'IE' && (!doc.documentMode || doc.documentMode < 8)) { + nodeRect = getIEPos(node); + rootRect = getIEPos(root); + + return { + x : nodeRect.x - rootRect.x, + y : nodeRect.y - rootRect.y + }; + } + + parent = node; + while (parent && parent != root && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + parent = node.parentNode; + while (parent && parent != root && parent.nodeType) { + x -= parent.scrollLeft || 0; + y -= parent.scrollTop || 0; + parent = parent.parentNode; + } + + return { + x : x, + y : y + }; + }; + + /** + Returns the size of the specified node in pixels. + + @method getSize + @static + @param {Node} node Node to get the size of. + @return {Object} Object with a w and h property. + */ + var getSize = function(node) { + return { + w : node.offsetWidth || node.clientWidth, + h : node.offsetHeight || node.clientHeight + }; + }; + + return { + get: get, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + getStyle: getStyle, + getPos: getPos, + getSize: getSize + }; +}); + +// Included from: src/javascript/core/Exceptions.js + +/** + * Exceptions.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/Exceptions', [ + 'moxie/core/utils/Basic' +], function(Basic) { + function _findKey(obj, value) { + var key; + for (key in obj) { + if (obj[key] === value) { + return key; + } + } + return null; + } + + return { + RuntimeError: (function() { + var namecodes = { + NOT_INIT_ERR: 1, + NOT_SUPPORTED_ERR: 9, + JS_ERR: 4 + }; + + function RuntimeError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": RuntimeError " + this.code; + } + + Basic.extend(RuntimeError, namecodes); + RuntimeError.prototype = Error.prototype; + return RuntimeError; + }()), + + OperationNotAllowedException: (function() { + + function OperationNotAllowedException(code) { + this.code = code; + this.name = 'OperationNotAllowedException'; + } + + Basic.extend(OperationNotAllowedException, { + NOT_ALLOWED_ERR: 1 + }); + + OperationNotAllowedException.prototype = Error.prototype; + + return OperationNotAllowedException; + }()), + + ImageError: (function() { + var namecodes = { + WRONG_FORMAT: 1, + MAX_RESOLUTION_ERR: 2 + }; + + function ImageError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": ImageError " + this.code; + } + + Basic.extend(ImageError, namecodes); + ImageError.prototype = Error.prototype; + + return ImageError; + }()), + + FileException: (function() { + var namecodes = { + NOT_FOUND_ERR: 1, + SECURITY_ERR: 2, + ABORT_ERR: 3, + NOT_READABLE_ERR: 4, + ENCODING_ERR: 5, + NO_MODIFICATION_ALLOWED_ERR: 6, + INVALID_STATE_ERR: 7, + SYNTAX_ERR: 8 + }; + + function FileException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": FileException " + this.code; + } + + Basic.extend(FileException, namecodes); + FileException.prototype = Error.prototype; + return FileException; + }()), + + DOMException: (function() { + var namecodes = { + INDEX_SIZE_ERR: 1, + DOMSTRING_SIZE_ERR: 2, + HIERARCHY_REQUEST_ERR: 3, + WRONG_DOCUMENT_ERR: 4, + INVALID_CHARACTER_ERR: 5, + NO_DATA_ALLOWED_ERR: 6, + NO_MODIFICATION_ALLOWED_ERR: 7, + NOT_FOUND_ERR: 8, + NOT_SUPPORTED_ERR: 9, + INUSE_ATTRIBUTE_ERR: 10, + INVALID_STATE_ERR: 11, + SYNTAX_ERR: 12, + INVALID_MODIFICATION_ERR: 13, + NAMESPACE_ERR: 14, + INVALID_ACCESS_ERR: 15, + VALIDATION_ERR: 16, + TYPE_MISMATCH_ERR: 17, + SECURITY_ERR: 18, + NETWORK_ERR: 19, + ABORT_ERR: 20, + URL_MISMATCH_ERR: 21, + QUOTA_EXCEEDED_ERR: 22, + TIMEOUT_ERR: 23, + INVALID_NODE_TYPE_ERR: 24, + DATA_CLONE_ERR: 25 + }; + + function DOMException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": DOMException " + this.code; + } + + Basic.extend(DOMException, namecodes); + DOMException.prototype = Error.prototype; + return DOMException; + }()), + + EventException: (function() { + function EventException(code) { + this.code = code; + this.name = 'EventException'; + } + + Basic.extend(EventException, { + UNSPECIFIED_EVENT_TYPE_ERR: 0 + }); + + EventException.prototype = Error.prototype; + + return EventException; + }()) + }; +}); + +// Included from: src/javascript/core/EventTarget.js + +/** + * EventTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/EventTarget', [ + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic' +], function(x, Basic) { + /** + Parent object for all event dispatching components and objects + + @class EventTarget + @constructor EventTarget + */ + function EventTarget() { + // hash of event listeners by object uid + var eventpool = {}; + + Basic.extend(this, { + + /** + Unique id of the event dispatcher, usually overriden by children + + @property uid + @type String + */ + uid: null, + + /** + Can be called from within a child in order to acquire uniqie id in automated manner + + @method init + */ + init: function() { + if (!this.uid) { + this.uid = Basic.guid('uid_'); + } + }, + + /** + Register a handler to a specific event dispatched by the object + + @method addEventListener + @param {String} type Type or basically a name of the event to subscribe to + @param {Function} fn Callback function that will be called when event happens + @param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first + @param {Object} [scope=this] A scope to invoke event handler in + */ + addEventListener: function(type, fn, priority, scope) { + var self = this, list; + + type = Basic.trim(type); + + if (/\s/.test(type)) { + // multiple event types were passed for one handler + Basic.each(type.split(/\s+/), function(type) { + self.addEventListener(type, fn, priority, scope); + }); + return; + } + + type = type.toLowerCase(); + priority = parseInt(priority, 10) || 0; + + list = eventpool[this.uid] && eventpool[this.uid][type] || []; + list.push({fn : fn, priority : priority, scope : scope || this}); + + if (!eventpool[this.uid]) { + eventpool[this.uid] = {}; + } + eventpool[this.uid][type] = list; + }, + + /** + Check if any handlers were registered to the specified event + + @method hasEventListener + @param {String} type Type or basically a name of the event to check + @return {Mixed} Returns a handler if it was found and false, if - not + */ + hasEventListener: function(type) { + return type ? !!(eventpool[this.uid] && eventpool[this.uid][type]) : !!eventpool[this.uid]; + }, + + /** + Unregister the handler from the event, or if former was not specified - unregister all handlers + + @method removeEventListener + @param {String} type Type or basically a name of the event + @param {Function} [fn] Handler to unregister + */ + removeEventListener: function(type, fn) { + type = type.toLowerCase(); + + var list = eventpool[this.uid] && eventpool[this.uid][type], i; + + if (list) { + if (fn) { + for (i = list.length - 1; i >= 0; i--) { + if (list[i].fn === fn) { + list.splice(i, 1); + break; + } + } + } else { + list = []; + } + + // delete event list if it has become empty + if (!list.length) { + delete eventpool[this.uid][type]; + + // and object specific entry in a hash if it has no more listeners attached + if (Basic.isEmptyObj(eventpool[this.uid])) { + delete eventpool[this.uid]; + } + } + } + }, + + /** + Remove all event handlers from the object + + @method removeAllEventListeners + */ + removeAllEventListeners: function() { + if (eventpool[this.uid]) { + delete eventpool[this.uid]; + } + }, + + /** + Dispatch the event + + @method dispatchEvent + @param {String/Object} Type of event or event object to dispatch + @param {Mixed} [...] Variable number of arguments to be passed to a handlers + @return {Boolean} true by default and false if any handler returned false + */ + dispatchEvent: function(type) { + var uid, list, args, tmpEvt, evt = {}; + + if (Basic.typeOf(type) !== 'string') { + // we can't use original object directly (because of Silverlight) + tmpEvt = type; + + if (Basic.typeOf(tmpEvt.type) === 'string') { + type = tmpEvt.type; + + if (tmpEvt.total && tmpEvt.loaded) { // progress event + evt.total = tmpEvt.total; + evt.loaded = tmpEvt.loaded; + } + evt.async = tmpEvt.async || false; + } else { + throw new x.EventException(x.EventException.UNSPECIFIED_EVENT_TYPE_ERR); + } + } + + // check if event is meant to be dispatched on an object having specific uid + if (type.indexOf('::') !== -1) { + (function(arr) { + uid = arr[0]; + type = arr[1]; + }(type.split('::'))); + } else { + uid = this.uid; + } + + type = type.toLowerCase(); + + list = eventpool[uid] && eventpool[uid][type]; + + if (list) { + // sort event list by prority + list.sort(function(a, b) { return b.priority - a.priority; }); + + args = [].slice.call(arguments); + + // first argument will be pseudo-event object + args.shift(); + evt.type = type; + args.unshift(evt); + + // Dispatch event to all listeners + var queue = []; + Basic.each(list, function(handler) { + // explicitly set the target, otherwise events fired from shims do not get it + args[0].target = handler.scope; + // if event is marked as async, detach the handler + if (evt.async) { + queue.push(function(cb) { + setTimeout(function() { + cb(handler.fn.apply(handler.scope, args) === false); + }, 1); + }); + } else { + queue.push(function(cb) { + cb(handler.fn.apply(handler.scope, args) === false); // if handler returns false stop propagation + }); + } + }); + if (queue.length) { + Basic.inSeries(queue); + } + } + return true; + }, + + /** + Alias for addEventListener + + @method bind + @protected + */ + bind: function() { + this.addEventListener.apply(this, arguments); + }, + + /** + Alias for removeEventListener + + @method unbind + @protected + */ + unbind: function() { + this.removeEventListener.apply(this, arguments); + }, + + /** + Alias for removeAllEventListeners + + @method unbindAll + @protected + */ + unbindAll: function() { + this.removeAllEventListeners.apply(this, arguments); + }, + + /** + Alias for dispatchEvent + + @method trigger + @protected + */ + trigger: function() { + this.dispatchEvent.apply(this, arguments); + }, + + + /** + Converts properties of on[event] type to corresponding event handlers, + is used to avoid extra hassle around the process of calling them back + + @method convertEventPropsToHandlers + @private + */ + convertEventPropsToHandlers: function(handlers) { + var h; + + if (Basic.typeOf(handlers) !== 'array') { + handlers = [handlers]; + } + + for (var i = 0; i < handlers.length; i++) { + h = 'on' + handlers[i]; + + if (Basic.typeOf(this[h]) === 'function') { + this.addEventListener(handlers[i], this[h]); + } else if (Basic.typeOf(this[h]) === 'undefined') { + this[h] = null; // object must have defined event properties, even if it doesn't make use of them + } + } + } + + }); + } + + EventTarget.instance = new EventTarget(); + + return EventTarget; +}); + +// Included from: src/javascript/core/utils/Encode.js + +/** + * Encode.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Encode', [], function() { + + /** + Encode string with UTF-8 + + @method utf8_encode + @for Utils + @static + @param {String} str String to encode + @return {String} UTF-8 encoded string + */ + var utf8_encode = function(str) { + return unescape(encodeURIComponent(str)); + }; + + /** + Decode UTF-8 encoded string + + @method utf8_decode + @static + @param {String} str String to decode + @return {String} Decoded string + */ + var utf8_decode = function(str_data) { + return decodeURIComponent(escape(str_data)); + }; + + /** + Decode Base64 encoded string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js + + @method atob + @static + @param {String} data String to decode + @return {String} Decoded string + */ + var atob = function(data, utf8) { + if (typeof(window.atob) === 'function') { + return utf8 ? utf8_decode(window.atob(data)) : window.atob(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window.atob == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } + + data += ''; + + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); + + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; + + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + + if (h3 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); + + dec = tmp_arr.join(''); + + return utf8 ? utf8_decode(dec) : dec; + }; + + /** + Base64 encode string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js + + @method btoa + @static + @param {String} data String to encode + @return {String} Base64 encoded string + */ + var btoa = function(data, utf8) { + if (utf8) { + utf8_encode(data); + } + + if (typeof(window.btoa) === 'function') { + return window.btoa(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: Rafał Kukawski (http://kukawski.pl) + // * example 1: base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = "", + tmp_arr = []; + + if (!data) { + return data; + } + + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); + + bits = o1 << 16 | o2 << 8 | o3; + + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; + + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); + + enc = tmp_arr.join(''); + + var r = data.length % 3; + + return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); + }; + + + return { + utf8_encode: utf8_encode, + utf8_decode: utf8_decode, + atob: atob, + btoa: btoa + }; +}); + +// Included from: src/javascript/runtime/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/Runtime', [ + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/EventTarget" +], function(Basic, Dom, EventTarget) { + var runtimeConstructors = {}, runtimes = {}; + + /** + Common set of methods and properties for every runtime instance + + @class Runtime + + @param {Object} options + @param {String} type Sanitized name of the runtime + @param {Object} [caps] Set of capabilities that differentiate specified runtime + @param {Object} [modeCaps] Set of capabilities that do require specific operational mode + @param {String} [defaultMode='browser'] Default operational mode to choose if no required capabilities were requested + */ + function Runtime(options, type, caps, modeCaps, defaultMode) { + /** + Dispatched when runtime is initialized and ready. + Results in RuntimeInit on a connected component. + + @event Init + */ + + /** + Dispatched when runtime fails to initialize. + Results in RuntimeError on a connected component. + + @event Error + */ + + var self = this + , _shim + , _uid = Basic.guid(type + '_') + ; + + + /** + Runtime (not native one) may operate in browser or client mode. + + @method _setMode + @private + @param {Object} [modeCaps] Set of capabilities that do require specific operational mode + @param {Object} [defaultMode] The mode to switch to if modeCaps or requiredCaps are empty + */ + function _setMode(modeCaps, defaultMode) { + var mode = null + , rc = options && options.required_caps + ; + + defaultMode = defaultMode || 'browser'; + + // mode can be effectively set only once + if (this.mode !== null) { + return this.mode; + } + + if (rc && !Basic.isEmptyObj(modeCaps)) { + // loop over required caps and check if they do require the same mode + Basic.each(rc, function(value, cap) { + if (modeCaps.hasOwnProperty(cap)) { + var capMode = modeCaps[cap](value); + + // make sure we always have an array + if (typeof(capMode) === 'string') { + capMode = [capMode]; + } + + if (!mode) { + mode = capMode; + } else if (!(mode = Basic.arrayIntersect(mode, capMode))) { + // if cap requires conflicting mode - runtime cannot fulfill required caps + return (mode = false); + } + } + }); + + if (mode) { + this.mode = Basic.inArray(defaultMode, mode) !== -1 ? defaultMode : mode[0]; + } else if (mode === false) { + this.mode = false; + } + } + + // if mode still not defined + if (this.mode === null) { + this.mode = defaultMode; + } + + // once we got the mode, test against all caps + if (this.mode && rc && !this.can(rc)) { + this.mode = false; + } + } + + + // register runtime in private hash + runtimes[_uid] = this; + + /** + Default set of capabilities, which can be redifined later by specific runtime + + @private + @property caps + @type Object + */ + caps = Basic.extend({ + // Runtime can: + // provide access to raw binary data of the file + access_binary: false, + // provide access to raw binary data of the image (image extension is optional) + access_image_binary: false, + // display binary data as thumbs for example + display_media: false, + // make cross-domain requests + do_cors: false, + // accept files dragged and dropped from the desktop + drag_and_drop: false, + // filter files in selection dialog by their extensions + filter_by_extension: true, + // resize image (and manipulate it raw data of any file in general) + resize_image: false, + // periodically report how many bytes of total in the file were uploaded (loaded) + report_upload_progress: false, + // provide access to the headers of http response + return_response_headers: false, + // support response of specific type, which should be passed as an argument + // e.g. runtime.can('return_response_type', 'blob') + return_response_type: false, + // return http status code of the response + return_status_code: true, + // send custom http header with the request + send_custom_headers: false, + // pick up the files from a dialog + select_file: false, + // select whole folder in file browse dialog + select_folder: false, + // select multiple files at once in file browse dialog + select_multiple: true, + // send raw binary data, that is generated after image resizing or manipulation of other kind + send_binary_string: false, + // send cookies with http request and therefore retain session + send_browser_cookies: true, + // send data formatted as multipart/form-data + send_multipart: true, + // slice the file or blob to smaller parts + slice_blob: false, + // upload file without preloading it to memory, stream it out directly from disk + stream_upload: false, + // programmatically trigger file browse dialog + summon_file_dialog: false, + // upload file of specific size, size should be passed as argument + // e.g. runtime.can('upload_filesize', '500mb') + upload_filesize: true, + // initiate http request with specific http method, method should be passed as argument + // e.g. runtime.can('use_http_method', 'put') + use_http_method: true + }, caps); + + + // small extension factory here (is meant to be extended with actual extensions constructors) + _shim = (function() { + var objpool = {}; + return { + exec: function(uid, comp, fn, args) { + if (_shim[comp]) { + if (!objpool[uid]) { + objpool[uid] = { + context: this, + instance: new _shim[comp]() + }; + } + if (objpool[uid].instance[fn]) { + return objpool[uid].instance[fn].apply(this, args); + } + } + }, + + removeInstance: function(uid) { + delete objpool[uid]; + }, + + removeAllInstances: function() { + var self = this; + Basic.each(objpool, function(obj, uid) { + if (Basic.typeOf(obj.instance.destroy) === 'function') { + obj.instance.destroy.call(obj.context); + } + self.removeInstance(uid); + }); + } + }; + }()); + + + // public methods + Basic.extend(this, { + /** + Specifies whether runtime instance was initialized or not + + @property initialized + @type {Boolean} + @default false + */ + initialized: false, // shims require this flag to stop initialization retries + + /** + Unique ID of the runtime + + @property uid + @type {String} + */ + uid: _uid, + + /** + Runtime type (e.g. flash, html5, etc) + + @property type + @type {String} + */ + type: type, + + /** + Runtime (not native one) may operate in browser or client mode. + + @property mode + @private + @type {String|Boolean} current mode or false, if none possible + */ + mode: null, + + /** + id of the DOM container for the runtime (if available) + + @property shimid + @type {String} + */ + shimid: _uid + '_container', + + /** + Number of connected clients. If equal to zero, runtime can be destroyed + + @property clients + @type {Number} + */ + clients: 0, + + /** + Runtime initialization options + + @property options + @type {Object} + */ + options: options, + + /** + Checks if the runtime has specific capability + + @method can + @param {String} cap Name of capability to check + @param {Mixed} [value] If passed, capability should somehow correlate to the value + @param {Object} [refCaps] Set of capabilities to check the specified cap against (defaults to internal set) + @return {Boolean} true if runtime has such capability and false, if - not + */ + can: function(cap, value) { + var refCaps = arguments[2] || caps; + + // if cap var is a comma-separated list of caps, convert it to object (key/value) + if (Basic.typeOf(cap) === 'string' && Basic.typeOf(value) === 'undefined') { + cap = Runtime.parseCaps(cap); + } + + if (Basic.typeOf(cap) === 'object') { + for (var key in cap) { + if (!this.can(key, cap[key], refCaps)) { + return false; + } + } + return true; + } + + // check the individual cap + if (Basic.typeOf(refCaps[cap]) === 'function') { + return refCaps[cap].call(this, value); + } else { + return (value === refCaps[cap]); + } + }, + + /** + Returns container for the runtime as DOM element + + @method getShimContainer + @return {DOMElement} + */ + getShimContainer: function() { + var container, shimContainer = Dom.get(this.shimid); + + // if no container for shim, create one + if (!shimContainer) { + container = this.options.container ? Dom.get(this.options.container) : document.body; + + // create shim container and insert it at an absolute position into the outer container + shimContainer = document.createElement('div'); + shimContainer.id = this.shimid; + shimContainer.className = 'moxie-shim moxie-shim-' + this.type; + + Basic.extend(shimContainer.style, { + position: 'absolute', + top: '0px', + left: '0px', + width: '1px', + height: '1px', + overflow: 'hidden' + }); + + container.appendChild(shimContainer); + container = null; + } + + return shimContainer; + }, + + /** + Returns runtime as DOM element (if appropriate) + + @method getShim + @return {DOMElement} + */ + getShim: function() { + return _shim; + }, + + /** + Invokes a method within the runtime itself (might differ across the runtimes) + + @method shimExec + @param {Mixed} [] + @protected + @return {Mixed} Depends on the action and component + */ + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return self.getShim().exec.call(this, this.uid, component, action, args); + }, + + /** + Operaional interface that is used by components to invoke specific actions on the runtime + (is invoked in the scope of component) + + @method exec + @param {Mixed} []* + @protected + @return {Mixed} Depends on the action and component + */ + exec: function(component, action) { // this is called in the context of component, not runtime + var args = [].slice.call(arguments, 2); + + if (self[component] && self[component][action]) { + return self[component][action].apply(this, args); + } + return self.shimExec.apply(this, arguments); + }, + + /** + Destroys the runtime (removes all events and deletes DOM structures) + + @method destroy + */ + destroy: function() { + if (!self) { + return; // obviously already destroyed + } + + var shimContainer = Dom.get(this.shimid); + if (shimContainer) { + shimContainer.parentNode.removeChild(shimContainer); + } + + if (_shim) { + _shim.removeAllInstances(); + } + + this.unbindAll(); + delete runtimes[this.uid]; + this.uid = null; // mark this runtime as destroyed + _uid = self = _shim = shimContainer = null; + } + }); + + _setMode.call(this, modeCaps, defaultMode); + } + + + /** + Default order to try different runtime types + + @property order + @type String + @static + */ + Runtime.order = 'html5,flash,silverlight,html4'; + + + /** + Retrieves runtime from private hash by it's uid + + @method getRuntime + @private + @static + @param {String} uid Unique identifier of the runtime + @return {Runtime|Boolean} Returns runtime, if it exists and false, if - not + */ + Runtime.getRuntime = function(uid) { + return runtimes[uid] ? runtimes[uid] : false; + }; + + + /** + Register constructor for the Runtime of new (or perhaps modified) type + + @method addConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {Function} construct Constructor for the Runtime type + */ + Runtime.addConstructor = function(type, constructor) { + constructor.prototype = EventTarget.instance; + runtimeConstructors[type] = constructor; + }; + + + /** + Get the constructor for the specified type. + + method getConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @return {Function} Constructor for the Runtime type + */ + Runtime.getConstructor = function(type) { + return runtimeConstructors[type] || null; + }; + + + /** + Get info about the runtime (uid, type, capabilities) + + @method getInfo + @static + @param {String} uid Unique identifier of the runtime + @return {Mixed} Info object or null if runtime doesn't exist + */ + Runtime.getInfo = function(uid) { + var runtime = Runtime.getRuntime(uid); + + if (runtime) { + return { + uid: runtime.uid, + type: runtime.type, + can: function() { + return runtime.can.apply(runtime, arguments); + } + }; + } + return null; + }; + + + /** + Convert caps represented by a comma-separated string to the object representation. + + @method parseCaps + @static + @param {String} capStr Comma-separated list of capabilities + @return {Object} + */ + Runtime.parseCaps = function(capStr) { + var capObj = {}; + + if (Basic.typeOf(capStr) !== 'string') { + return capStr || {}; + } + + Basic.each(capStr.split(','), function(key) { + capObj[key] = true; // we assume it to be - true + }); + + return capObj; + }; + + /** + Test the specified runtime for specific capabilities. + + @method can + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {String|Object} caps Set of capabilities to check + @return {Boolean} Result of the test + */ + Runtime.can = function(type, caps) { + var runtime + , constructor = Runtime.getConstructor(type) + , mode + ; + if (constructor) { + runtime = new constructor({ + required_caps: caps + }); + mode = runtime.mode; + runtime.destroy(); + return !!mode; + } + return false; + }; + + + /** + Figure out a runtime that supports specified capabilities. + + @method thatCan + @static + @param {String|Object} caps Set of capabilities to check + @param {String} [runtimeOrder] Comma-separated list of runtimes to check against + @return {String} Usable runtime identifier or null + */ + Runtime.thatCan = function(caps, runtimeOrder) { + var types = (runtimeOrder || Runtime.order).split(/\s*,\s*/); + for (var i in types) { + if (Runtime.can(types[i], caps)) { + return types[i]; + } + } + return null; + }; + + + /** + Capability check that always returns true + + @private + @static + @return {True} + */ + Runtime.capTrue = function() { + return true; + }; + + /** + Capability check that always returns false + + @private + @static + @return {False} + */ + Runtime.capFalse = function() { + return false; + }; + + /** + Evaluate the expression to boolean value and create a function that always returns it. + + @private + @static + @param {Mixed} expr Expression to evaluate + @return {Function} Function returning the result of evaluation + */ + Runtime.capTest = function(expr) { + return function() { + return !!expr; + }; + }; + + return Runtime; +}); + +// Included from: src/javascript/runtime/RuntimeClient.js + +/** + * RuntimeClient.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeClient', [ + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/runtime/Runtime' +], function(x, Basic, Runtime) { + /** + Set of methods and properties, required by a component to acquire ability to connect to a runtime + + @class RuntimeClient + */ + return function RuntimeClient() { + var runtime; + + Basic.extend(this, { + /** + Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one. + Increments number of clients connected to the specified runtime. + + @method connectRuntime + @param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites + */ + connectRuntime: function(options) { + var comp = this, ruid; + + function initialize(items) { + var type, constructor; + + // if we ran out of runtimes + if (!items.length) { + comp.trigger('RuntimeError', new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + runtime = null; + return; + } + + type = items.shift(); + constructor = Runtime.getConstructor(type); + if (!constructor) { + initialize(items); + return; + } + + // try initializing the runtime + runtime = new constructor(options); + + runtime.bind('Init', function() { + // mark runtime as initialized + runtime.initialized = true; + + // jailbreak ... + setTimeout(function() { + runtime.clients++; + // this will be triggered on component + comp.trigger('RuntimeInit', runtime); + }, 1); + }); + + runtime.bind('Error', function() { + runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here + initialize(items); + }); + + /*runtime.bind('Exception', function() { });*/ + + // check if runtime managed to pick-up operational mode + if (!runtime.mode) { + runtime.trigger('Error'); + return; + } + + runtime.init(); + } + + // check if a particular runtime was requested + if (Basic.typeOf(options) === 'string') { + ruid = options; + } else if (Basic.typeOf(options.ruid) === 'string') { + ruid = options.ruid; + } + + if (ruid) { + runtime = Runtime.getRuntime(ruid); + if (runtime) { + runtime.clients++; + return runtime; + } else { + // there should be a runtime and there's none - weird case + throw new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR); + } + } + + // initialize a fresh one, that fits runtime list and required features best + initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/)); + }, + + /** + Returns the runtime to which the client is currently connected. + + @method getRuntime + @return {Runtime} Runtime or null if client is not connected + */ + getRuntime: function() { + if (runtime && runtime.uid) { + return runtime; + } + runtime = null; // make sure we do not leave zombies rambling around + return null; + }, + + /** + Disconnects from the runtime. Decrements number of clients connected to the specified runtime. + + @method disconnectRuntime + */ + disconnectRuntime: function() { + if (runtime && --runtime.clients <= 0) { + runtime.destroy(); + runtime = null; + } + } + + }); + }; + + +}); + +// Included from: src/javascript/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/Blob', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/runtime/RuntimeClient' +], function(Basic, Encode, RuntimeClient) { + + var blobpool = {}; + + /** + @class Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} blob Object "Native" blob object, as it is represented in the runtime + */ + function Blob(ruid, blob) { + + function _sliceDetached(start, end, type) { + var blob, data = blobpool[this.uid]; + + if (Basic.typeOf(data) !== 'string' || !data.length) { + return null; // or throw exception + } + + blob = new Blob(null, { + type: type, + size: end - start + }); + blob.detach(data.substr(start, blob.size)); + + return blob; + } + + RuntimeClient.call(this); + + if (ruid) { + this.connectRuntime(ruid); + } + + if (!blob) { + blob = {}; + } else if (Basic.typeOf(blob) === 'string') { // dataUrl or binary string + blob = { data: blob }; + } + + Basic.extend(this, { + + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: blob.uid || Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if falsy, then runtime will have to be initialized + before this Blob can be used, modified or sent + + @property ruid + @type {String} + */ + ruid: ruid, + + /** + Size of blob + + @property size + @type {Number} + @default 0 + */ + size: blob.size || 0, + + /** + Mime type of blob + + @property type + @type {String} + @default '' + */ + type: blob.type || '', + + /** + @method slice + @param {Number} [start=0] + */ + slice: function(start, end, type) { + if (this.isDetached()) { + return _sliceDetached.apply(this, arguments); + } + return this.getRuntime().exec.call(this, 'Blob', 'slice', this.getSource(), start, end, type); + }, + + /** + Returns "native" blob object (as it is represented in connected runtime) or null if not found + + @method getSource + @return {Blob} Returns "native" blob object or null if not found + */ + getSource: function() { + if (!blobpool[this.uid]) { + return null; + } + return blobpool[this.uid]; + }, + + /** + Detaches blob from any runtime that it depends on and initialize with standalone value + + @method detach + @protected + @param {DOMString} [data=''] Standalone value + */ + detach: function(data) { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Blob', 'destroy', blobpool[this.uid]); + this.disconnectRuntime(); + this.ruid = null; + } + + data = data || ''; + + // if dataUrl, convert to binary string + var matches = data.match(/^data:([^;]*);base64,/); + if (matches) { + this.type = matches[1]; + data = Encode.atob(data.substring(data.indexOf('base64,') + 7)); + } + + this.size = data.length; + + blobpool[this.uid] = data; + }, + + /** + Checks if blob is standalone (detached of any runtime) + + @method isDetached + @protected + @return {Boolean} + */ + isDetached: function() { + return !this.ruid && Basic.typeOf(blobpool[this.uid]) === 'string'; + }, + + /** + Destroy Blob and free any resources it was using + + @method destroy + */ + destroy: function() { + this.detach(); + delete blobpool[this.uid]; + } + }); + + + if (blob.data) { + this.detach(blob.data); // auto-detach if payload has been passed + } else { + blobpool[this.uid] = blob; + } + } + + return Blob; +}); + +// Included from: src/javascript/file/File.js + +/** + * File.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/File', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Mime', + 'moxie/file/Blob' +], function(Basic, Mime, Blob) { + /** + @class File + @extends Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} file Object "Native" file object, as it is represented in the runtime + */ + function File(ruid, file) { + var name, type; + + if (!file) { // avoid extra errors in case we overlooked something + file = {}; + } + + // figure out the type + if (file.type && file.type !== '') { + type = file.type; + } else { + type = Mime.getFileMime(file.name); + } + + // sanitize file name or generate new one + if (file.name) { + name = file.name.replace(/\\/g, '/'); + name = name.substr(name.lastIndexOf('/') + 1); + } else { + var prefix = type.split('/')[0]; + name = Basic.guid((prefix !== '' ? prefix : 'file') + '_'); + + if (Mime.extensions[type]) { + name += '.' + Mime.extensions[type][0]; // append proper extension if possible + } + } + + Blob.apply(this, arguments); + + Basic.extend(this, { + /** + File mime type + + @property type + @type {String} + @default '' + */ + type: type || '', + + /** + File name + + @property name + @type {String} + @default UID + */ + name: name || Basic.guid('file_'), + + /** + Date of last modification + + @property lastModifiedDate + @type {String} + @default now + */ + lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString() // Thu Aug 23 2012 19:40:00 GMT+0400 (GET) + }); + } + + File.prototype = Blob.prototype; + + return File; +}); + +// Included from: src/javascript/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileInput', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Mime', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/core/I18n', + 'moxie/file/File', + 'moxie/runtime/Runtime', + 'moxie/runtime/RuntimeClient' +], function(Basic, Mime, Dom, x, EventTarget, I18n, File, Runtime, RuntimeClient) { + /** + Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click, + converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory + with _FileReader_ or uploaded to a server through _XMLHttpRequest_. + + @class FileInput + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_. + @param {String|DOMElement} options.browse_button DOM Element to turn into file picker. + @param {Array} [options.accept] Array of mime types to accept. By default accepts all. + @param {String} [options.file='file'] Name of the file field (not the filename). + @param {Boolean} [options.multiple=false] Enable selection of multiple files. + @param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time). + @param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode + for _browse\_button_. + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support. + + @example +
    + Browse... +
    + + + */ + var dispatches = [ + /** + Dispatched when runtime is connected and file-picker is ready to be used. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. + Check [corresponding documentation entry](#method_refresh) for more info. + + @event refresh + @param {Object} event + */ + + /** + Dispatched when selection of files in the dialog is complete. + + @event change + @param {Object} event + */ + 'change', + + 'cancel', // TODO: might be useful + + /** + Dispatched when mouse cursor enters file-picker area. Can be used to style element + accordingly. + + @event mouseenter + @param {Object} event + */ + 'mouseenter', + + /** + Dispatched when mouse cursor leaves file-picker area. Can be used to style element + accordingly. + + @event mouseleave + @param {Object} event + */ + 'mouseleave', + + /** + Dispatched when functional mouse button is pressed on top of file-picker area. + + @event mousedown + @param {Object} event + */ + 'mousedown', + + /** + Dispatched when functional mouse button is released on top of file-picker area. + + @event mouseup + @param {Object} event + */ + 'mouseup' + ]; + + function FileInput(options) { + var self = this, + container, browseButton, defaults; + + // if flat argument passed it should be browse_button id + if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) { + options = { browse_button : options }; + } + + // this will help us to find proper default container + browseButton = Dom.get(options.browse_button); + if (!browseButton) { + // browse button is required + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + name: 'file', + multiple: false, + required_caps: false, + container: browseButton.parentNode || document.body + }; + + options = Basic.extend({}, defaults, options); + + // convert to object representation + if (typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + container = Dom.get(options.container); + // make sure we have container + if (!container) { + container = document.body; + } + + // make container relative, if it's not + if (Dom.getStyle(container, 'position') === 'static') { + container.style.position = 'relative'; + } + + container = browseButton = null; // IE + + RuntimeClient.call(self); + + Basic.extend(self, { + /** + Unique id of the component + + @property uid + @protected + @readOnly + @type {String} + @default UID + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @protected + @type {String} + */ + ruid: null, + + /** + Array of selected mOxie.File objects + + @property files + @type {Array} + @default null + */ + files: null, + + /** + Initializes the file-picker, connects it to runtime and dispatches event ready when done. + + @method init + */ + init: function() { + self.convertEventPropsToHandlers(dispatches); + + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + + self.bind("Ready", function() { + self.trigger("Refresh"); + }, 999); + + self.bind("Change", function() { + var files = runtime.exec.call(self, 'FileInput', 'getFiles'); + + self.files = []; + + Basic.each(files, function(file) { + // ignore empty files (IE10 for example hangs if you try to send them via XHR) + if (file.size === 0) { + return true; + } + self.files.push(new File(self.ruid, file)); + }); + }, 999); + + // re-position and resize shim container + self.bind('Refresh', function() { + var pos, size, browseButton, shimContainer; + + browseButton = Dom.get(options.browse_button); + shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist + + if (browseButton) { + pos = Dom.getPos(browseButton, Dom.get(options.container)); + size = Dom.getSize(browseButton); + + if (shimContainer) { + Basic.extend(shimContainer.style, { + top : pos.y + 'px', + left : pos.x + 'px', + width : size.w + 'px', + height : size.h + 'px' + }); + } + } + shimContainer = browseButton = null; + }); + + runtime.exec.call(self, 'FileInput', 'init', options); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(Basic.extend({}, options, { + required_caps: { + select_file: true + } + })); + }, + + /** + Disables file-picker element, so that it doesn't react to mouse clicks. + + @method disable + @param {Boolean} [state=true] Disable component if - true, enable if - false + */ + disable: function(state) { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state); + } + }, + + + /** + Reposition and resize dialog trigger to match the position and size of browse_button element. + + @method refresh + */ + refresh: function() { + self.trigger("Refresh"); + }, + + + /** + Destroy component. + + @method destroy + */ + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'destroy'); + this.disconnectRuntime(); + } + + if (Basic.typeOf(this.files) === 'array') { + // no sense in leaving associated files behind + Basic.each(this.files, function(file) { + file.destroy(); + }); + } + this.files = null; + } + }); + } + + FileInput.prototype = EventTarget.instance; + + return FileInput; +}); + +// Included from: src/javascript/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileDrop', [ + 'moxie/core/I18n', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/file/File', + 'moxie/runtime/RuntimeClient', + 'moxie/core/EventTarget', + 'moxie/core/utils/Mime' +], function(I18n, Dom, x, Basic, File, RuntimeClient, EventTarget, Mime) { + /** + Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used + in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through + _XMLHttpRequest_. + + @example +
    + Drop files here +
    +
    +
    + + + + @class FileDrop + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String} options If options has typeof string, argument is considered as options.drop_zone + @param {String|DOMElement} options.drop_zone DOM Element to turn into a drop zone + @param {Array} [options.accept] Array of mime types to accept. By default accepts all + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support + */ + var dispatches = [ + /** + Dispatched when runtime is connected and drop zone is ready to accept files. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched when dragging cursor enters the drop zone. + + @event dragenter + @param {Object} event + */ + 'dragenter', + + /** + Dispatched when dragging cursor leaves the drop zone. + + @event dragleave + @param {Object} event + */ + 'dragleave', + + /** + Dispatched when file is dropped onto the drop zone. + + @event drop + @param {Object} event + */ + 'drop', + + /** + Dispatched if error occurs. + + @event error + @param {Object} event + */ + 'error' + ]; + + function FileDrop(options) { + var self = this, defaults; + + // if flat argument passed it should be drop_zone id + if (typeof(options) === 'string') { + options = { drop_zone : options }; + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + required_caps: { + drag_and_drop: true + } + }; + + options = typeof(options) === 'object' ? Basic.extend({}, defaults, options) : defaults; + + // this will help us to find proper default container + options.container = Dom.get(options.drop_zone) || document.body; + + // make container relative, if it is not + if (Dom.getStyle(options.container, 'position') === 'static') { + options.container.style.position = 'relative'; + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + RuntimeClient.call(self); + + Basic.extend(self, { + uid: Basic.guid('uid_'), + + ruid: null, + + files: null, + + init: function() { + + self.convertEventPropsToHandlers(dispatches); + + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + + self.bind("Drop", function() { + var files = runtime.exec.call(self, 'FileDrop', 'getFiles'); + + self.files = []; + + Basic.each(files, function(file) { + self.files.push(new File(self.ruid, file)); + }); + }, 999); + + runtime.exec.call(self, 'FileDrop', 'init', options); + + self.dispatchEvent('ready'); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(options); // throws RuntimeError + }, + + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileDrop', 'destroy'); + this.disconnectRuntime(); + } + this.files = null; + } + }); + } + + FileDrop.prototype = EventTarget.instance; + + return FileDrop; +}); + +// Included from: src/javascript/runtime/RuntimeTarget.js + +/** + * RuntimeTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeTarget', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + "moxie/core/EventTarget" +], function(Basic, RuntimeClient, EventTarget) { + /** + Instance of this class can be used as a target for the events dispatched by shims, + when allowing them onto components is for either reason inappropriate + + @class RuntimeTarget + @constructor + @protected + @extends EventTarget + */ + function RuntimeTarget() { + this.uid = Basic.guid('uid_'); + + RuntimeClient.call(this); + + this.destroy = function() { + this.disconnectRuntime(); + this.unbindAll(); + }; + } + + RuntimeTarget.prototype = EventTarget.instance; + + return RuntimeTarget; +}); + +// Included from: src/javascript/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReader', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/file/Blob', + 'moxie/file/File', + 'moxie/runtime/RuntimeTarget' +], function(Basic, Encode, x, EventTarget, Blob, File, RuntimeTarget) { + /** + Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader) + interface. Where possible uses native FileReader, where - not falls back to shims. + + @class FileReader + @constructor FileReader + @extends EventTarget + @uses RuntimeClient + */ + var dispatches = [ + + /** + Dispatched when the read starts. + + @event loadstart + @param {Object} event + */ + 'loadstart', + + /** + Dispatched while reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total). + + @event progress + @param {Object} event + */ + 'progress', + + /** + Dispatched when the read has successfully completed. + + @event load + @param {Object} event + */ + 'load', + + /** + Dispatched when the read has been aborted. For instance, by invoking the abort() method. + + @event abort + @param {Object} event + */ + 'abort', + + /** + Dispatched when the read has failed. + + @event error + @param {Object} event + */ + 'error', + + /** + Dispatched when the request has completed (either in success or failure). + + @event loadend + @param {Object} event + */ + 'loadend' + ]; + + function FileReader() { + var self = this, _fr; + + Basic.extend(this, { + /** + UID of the component instance. + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Contains current state of FileReader object. Can take values of FileReader.EMPTY, FileReader.LOADING + and FileReader.DONE. + + @property readyState + @type {Number} + @default FileReader.EMPTY + */ + readyState: FileReader.EMPTY, + + /** + Result of the successful read operation. + + @property result + @type {String} + */ + result: null, + + /** + Stores the error of failed asynchronous read operation. + + @property error + @type {DOMError} + */ + error: null, + + /** + Initiates reading of File/Blob object contents to binary string. + + @method readAsBinaryString + @param {Blob|File} blob Object to preload + */ + readAsBinaryString: function(blob) { + _read.call(this, 'readAsBinaryString', blob); + }, + + /** + Initiates reading of File/Blob object contents to dataURL string. + + @method readAsDataURL + @param {Blob|File} blob Object to preload + */ + readAsDataURL: function(blob) { + _read.call(this, 'readAsDataURL', blob); + }, + + /** + Initiates reading of File/Blob object contents to string. + + @method readAsText + @param {Blob|File} blob Object to preload + */ + readAsText: function(blob) { + _read.call(this, 'readAsText', blob); + }, + + /** + Aborts preloading process. + + @method abort + */ + abort: function() { + this.result = null; + + if (Basic.inArray(this.readyState, [FileReader.EMPTY, FileReader.DONE]) !== -1) { + return; + } else if (this.readyState === FileReader.LOADING) { + this.readyState = FileReader.DONE; + } + + if (_fr) { + _fr.getRuntime().exec.call(this, 'FileReader', 'abort'); + } + + this.trigger('abort'); + this.trigger('loadend'); + }, + + /** + Destroy component and release resources. + + @method destroy + */ + destroy: function() { + this.abort(); + + if (_fr) { + _fr.getRuntime().exec.call(this, 'FileReader', 'destroy'); + _fr.disconnectRuntime(); + } + + self = _fr = null; + } + }); + + + function _read(op, blob) { + _fr = new RuntimeTarget(); + + function error(err) { + self.readyState = FileReader.DONE; + self.error = err; + self.trigger('error'); + loadEnd(); + } + + function loadEnd() { + _fr.destroy(); + _fr = null; + self.trigger('loadend'); + } + + function exec(runtime) { + _fr.bind('Error', function(e, err) { + error(err); + }); + + _fr.bind('Progress', function(e) { + self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); + self.trigger(e); + }); + + _fr.bind('Load', function(e) { + self.readyState = FileReader.DONE; + self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); + self.trigger(e); + loadEnd(); + }); + + runtime.exec.call(_fr, 'FileReader', 'read', op, blob); + } + + this.convertEventPropsToHandlers(dispatches); + + if (this.readyState === FileReader.LOADING) { + return error(new x.DOMException(x.DOMException.INVALID_STATE_ERR)); + } + + this.readyState = FileReader.LOADING; + this.trigger('loadstart'); + + // if source is o.Blob/o.File + if (blob instanceof Blob) { + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsText': + case 'readAsBinaryString': + this.result = src; + break; + case 'readAsDataURL': + this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src); + break; + } + this.readyState = FileReader.DONE; + this.trigger('load'); + loadEnd(); + } else { + exec(_fr.connectRuntime(blob.ruid)); + } + } else { + error(new x.DOMException(x.DOMException.NOT_FOUND_ERR)); + } + } + } + + /** + Initial FileReader state + + @property EMPTY + @type {Number} + @final + @static + @default 0 + */ + FileReader.EMPTY = 0; + + /** + FileReader switches to this state when it is preloading the source + + @property LOADING + @type {Number} + @final + @static + @default 1 + */ + FileReader.LOADING = 1; + + /** + Preloading is complete, this is a final state + + @property DONE + @type {Number} + @final + @static + @default 2 + */ + FileReader.DONE = 2; + + FileReader.prototype = EventTarget.instance; + + return FileReader; +}); + +// Included from: src/javascript/core/utils/Url.js + +/** + * Url.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Url', [], function() { + /** + Parse url into separate components and fill in absent parts with parts from current url, + based on https://raw.github.com/kvz/phpjs/master/functions/url/parse_url.js + + @method parseUrl + @for Utils + @static + @param {String} str Url to parse (defaults to empty string if undefined) + @return {Object} Hash containing extracted uri components + */ + var parseUrl = function(str) { + var key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'] + , i = key.length + , ports = { + http: 80, + https: 443 + } + , uri = {} + , regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ + , m = regex.exec(str || '') // default to empty string if undefined + ; + + while (i--) { + if (m[i]) { + uri[key[i]] = m[i]; + } + } + + if (/^[^\/]/.test(uri.path) && !uri.scheme) { // when url is relative, we need to figure out the path ourselves + var path = document.location.pathname; + // if path ends with a filename, strip it + if (!/(\/|\/[^\.]+)$/.test(path)) { + path = path.replace(/[^\/]+$/, ''); + } + uri.host = document.location.hostname; + uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir + } + + if (!uri.scheme) { + uri.scheme = document.location.protocol.replace(/:$/, ''); + } + + if (!uri.host) { + uri.host = document.location.hostname; + } + + if (!uri.port) { + uri.port = document.location.port || ports[uri.scheme] || 80; + } + uri.port = parseInt(uri.port, 10); + + if (!uri.path) { + uri.path = "/"; + } + + delete uri.source; + return uri; + }; + + /** + Resolve url - among other things will turn relative url to absolute + + @method resolveUrl + @static + @param {String} url Either absolute or relative + @return {String} Resolved, absolute url + */ + var resolveUrl = function(url) { + var ports = { // we ignore default ports + http: 80, + https: 443 + } + , urlp = parseUrl(url) + ; + + return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : ''); + }; + + /** + Check if specified url has the same origin as the current document + + @method hasSameOrigin + @param {String|Object} url + @return {Boolean} + */ + var hasSameOrigin = function(url) { + function origin(url) { + return [url.scheme, url.host, url.port].join('/'); + } + + if (typeof url === 'string') { + url = parseUrl(url); + } + + return origin(parseUrl()) === origin(url); + }; + + return { + parseUrl: parseUrl, + resolveUrl: resolveUrl, + hasSameOrigin: hasSameOrigin + }; +}); + +// Included from: src/javascript/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReaderSync', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + 'moxie/core/utils/Encode' +], function(Basic, RuntimeClient, Encode) { + /** + Synchronous FileReader implementation. Something like this is available in WebWorkers environment, here + it can be used to read only preloaded blobs/files and only below certain size (not yet sure what that'd be, + but probably < 1mb). Not meant to be used directly by user. + + @class FileReaderSync + @private + @constructor + */ + return function() { + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + readAsBinaryString: function(blob) { + return _read.call(this, 'readAsBinaryString', blob); + }, + + readAsDataURL: function(blob) { + return _read.call(this, 'readAsDataURL', blob); + }, + + /*readAsArrayBuffer: function(blob) { + return _read.call(this, 'readAsArrayBuffer', blob); + },*/ + + readAsText: function(blob) { + return _read.call(this, 'readAsText', blob); + } + }); + + function _read(op, blob) { + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsBinaryString': + return src; + case 'readAsDataURL': + return 'data:' + blob.type + ';base64,' + Encode.btoa(src); + case 'readAsText': + var txt = ''; + for (var i = 0, length = src.length; i < length; i++) { + txt += String.fromCharCode(src[i]); + } + return txt; + } + } else { + var result = this.connectRuntime(blob.ruid).exec.call(this, 'FileReaderSync', 'read', op, blob); + this.disconnectRuntime(); + return result; + } + } + }; +}); + +// Included from: src/javascript/xhr/FormData.js + +/** + * FormData.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/FormData", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/file/Blob" +], function(x, Basic, Blob) { + /** + FormData + + @class FormData + @constructor + */ + function FormData() { + var _blobField, _fields = {}, _name = ""; + + Basic.extend(this, { + /** + Append another key-value pair to the FormData object + + @method append + @param {String} name Name for the new field + @param {String|Blob|Array|Object} value Value for the field + */ + append: function(name, value) { + var self = this, valueType = Basic.typeOf(value); + + if (value instanceof Blob) { + if (_blobField) { + delete _fields[_blobField]; + } + _blobField = name; + _fields[name] = [value]; // unfortunately we can only send single Blob in one FormData + } else if ('array' === valueType) { + name += '[]'; + + Basic.each(value, function(value) { + self.append.call(self, name, value); + }); + } else if ('object' === valueType) { + Basic.each(value, function(value, key) { + self.append.call(self, name + '[' + key + ']', value); + }); + } else { + value = value.toString(); // according to specs value might be either Blob or String + + if (!_fields[name]) { + _fields[name] = []; + } + _fields[name].push(value); + } + }, + + /** + Checks if FormData contains Blob. + + @method hasBlob + @return {Boolean} + */ + hasBlob: function() { + return !!_blobField; + }, + + /** + Retrieves blob. + + @method getBlob + @return {Object} Either Blob if found or null + */ + getBlob: function() { + return _fields[_blobField] && _fields[_blobField][0] || null; + }, + + /** + Retrieves blob field name. + + @method getBlobName + @return {String} Either Blob field name or null + */ + getBlobName: function() { + return _blobField || null; + }, + + /** + Loop over the fields in FormData and invoke the callback for each of them. + + @method each + @param {Function} cb Callback to call for each field + */ + each: function(cb) { + Basic.each(_fields, function(value, name) { + Basic.each(value, function(value) { + cb(value, name); + }); + }); + }, + + destroy: function() { + _blobField = null; + _name = ""; + _fields = {}; + } + }); + } + + return FormData; +}); + +// Included from: src/javascript/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/XMLHttpRequest", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/EventTarget", + "moxie/core/utils/Encode", + "moxie/core/utils/Url", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeTarget", + "moxie/file/Blob", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/core/utils/Env", + "moxie/core/utils/Mime" +], function(Basic, x, EventTarget, Encode, Url, Runtime, RuntimeTarget, Blob, FileReaderSync, FormData, Env, Mime) { + + var httpCode = { + 100: 'Continue', + 101: 'Switching Protocols', + 102: 'Processing', + + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 207: 'Multi-Status', + 226: 'IM Used', + + 300: 'Multiple Choices', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 306: 'Reserved', + 307: 'Temporary Redirect', + + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 423: 'Locked', + 424: 'Failed Dependency', + 426: 'Upgrade Required', + + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', + 506: 'Variant Also Negotiates', + 507: 'Insufficient Storage', + 510: 'Not Extended' + }; + + function XMLHttpRequestUpload() { + this.uid = Basic.guid('uid_'); + } + + XMLHttpRequestUpload.prototype = EventTarget.instance; + + /** + Implementation of XMLHttpRequest + + @class XMLHttpRequest + @constructor + @uses RuntimeClient + @extends EventTarget + */ + var dispatches = ['loadstart', 'progress', 'abort', 'error', 'load', 'timeout', 'loadend']; // & readystatechange (for historical reasons) + + var NATIVE = 1, RUNTIME = 2; + + function XMLHttpRequest() { + var self = this, + // this (together with _p() @see below) is here to gracefully upgrade to setter/getter syntax where possible + props = { + /** + The amount of milliseconds a request can take before being terminated. Initially zero. Zero means there is no timeout. + + @property timeout + @type Number + @default 0 + */ + timeout: 0, + + /** + Current state, can take following values: + UNSENT (numeric value 0) + The object has been constructed. + + OPENED (numeric value 1) + The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method. + + HEADERS_RECEIVED (numeric value 2) + All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available. + + LOADING (numeric value 3) + The response entity body is being received. + + DONE (numeric value 4) + + @property readyState + @type Number + @default 0 (UNSENT) + */ + readyState: XMLHttpRequest.UNSENT, + + /** + True when user credentials are to be included in a cross-origin request. False when they are to be excluded + in a cross-origin request and when cookies are to be ignored in its response. Initially false. + + @property withCredentials + @type Boolean + @default false + */ + withCredentials: false, + + /** + Returns the HTTP status code. + + @property status + @type Number + @default 0 + */ + status: 0, + + /** + Returns the HTTP status text. + + @property statusText + @type String + */ + statusText: "", + + /** + Returns the response type. Can be set to change the response type. Values are: + the empty string (default), "arraybuffer", "blob", "document", "json", and "text". + + @property responseType + @type String + */ + responseType: "", + + /** + Returns the document response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "document". + + @property responseXML + @type Document + */ + responseXML: null, + + /** + Returns the text response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "text". + + @property responseText + @type String + */ + responseText: null, + + /** + Returns the response entity body (http://www.w3.org/TR/XMLHttpRequest/#response-entity-body). + Can become: ArrayBuffer, Blob, Document, JSON, Text + + @property response + @type Mixed + */ + response: null + }, + + _async = true, + _url, + _method, + _headers = {}, + _user, + _password, + _encoding = null, + _mimeType = null, + + // flags + _sync_flag = false, + _send_flag = false, + _upload_events_flag = false, + _upload_complete_flag = false, + _error_flag = false, + _same_origin_flag = false, + + // times + _start_time, + _timeoutset_time, + + _finalMime = null, + _finalCharset = null, + + _options = {}, + _xhr, + _responseHeaders = '', + _responseHeadersBag + ; + + + Basic.extend(this, props, { + /** + Unique id of the component + + @property uid + @type String + */ + uid: Basic.guid('uid_'), + + /** + Target for Upload events + + @property upload + @type XMLHttpRequestUpload + */ + upload: new XMLHttpRequestUpload(), + + + /** + Sets the request method, request URL, synchronous flag, request username, and request password. + + Throws a "SyntaxError" exception if one of the following is true: + + method is not a valid HTTP method. + url cannot be resolved. + url contains the "user:password" format in the userinfo production. + Throws a "SecurityError" exception if method is a case-insensitive match for CONNECT, TRACE or TRACK. + + Throws an "InvalidAccessError" exception if one of the following is true: + + Either user or password is passed as argument and the origin of url does not match the XMLHttpRequest origin. + There is an associated XMLHttpRequest document and either the timeout attribute is not zero, + the withCredentials attribute is true, or the responseType attribute is not the empty string. + + + @method open + @param {String} method HTTP method to use on request + @param {String} url URL to request + @param {Boolean} [async=true] If false request will be done in synchronous manner. Asynchronous by default. + @param {String} [user] Username to use in HTTP authentication process on server-side + @param {String} [password] Password to use in HTTP authentication process on server-side + */ + open: function(method, url, async, user, password) { + var urlp; + + // first two arguments are required + if (!method || !url) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 2 - check if any code point in method is higher than U+00FF or after deflating method it does not match the method + if (/[\u0100-\uffff]/.test(method) || Encode.utf8_encode(method) !== method) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3 + if (!!~Basic.inArray(method.toUpperCase(), ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'TRACE', 'TRACK'])) { + _method = method.toUpperCase(); + } + + + // 4 - allowing these methods poses a security risk + if (!!~Basic.inArray(_method, ['CONNECT', 'TRACE', 'TRACK'])) { + throw new x.DOMException(x.DOMException.SECURITY_ERR); + } + + // 5 + url = Encode.utf8_encode(url); + + // 6 - Resolve url relative to the XMLHttpRequest base URL. If the algorithm returns an error, throw a "SyntaxError". + urlp = Url.parseUrl(url); + + _same_origin_flag = Url.hasSameOrigin(urlp); + + // 7 - manually build up absolute url + _url = Url.resolveUrl(url); + + // 9-10, 12-13 + if ((user || password) && !_same_origin_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + _user = user || urlp.user; + _password = password || urlp.pass; + + // 11 + _async = async || true; + + if (_async === false && (_p('timeout') || _p('withCredentials') || _p('responseType') !== "")) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 14 - terminate abort() + + // 15 - terminate send() + + // 18 + _sync_flag = !_async; + _send_flag = false; + _headers = {}; + _reset.call(this); + + // 19 + _p('readyState', XMLHttpRequest.OPENED); + + // 20 + this.convertEventPropsToHandlers(['readystatechange']); // unify event handlers + this.dispatchEvent('readystatechange'); + }, + + /** + Appends an header to the list of author request headers, or if header is already + in the list of author request headers, combines its value with value. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + Throws a "SyntaxError" exception if header is not a valid HTTP header field name or if value + is not a valid HTTP header field value. + + @method setRequestHeader + @param {String} header + @param {String|Number} value + */ + setRequestHeader: function(header, value) { + var uaHeaders = [ // these headers are controlled by the user agent + "accept-charset", + "accept-encoding", + "access-control-request-headers", + "access-control-request-method", + "connection", + "content-length", + "cookie", + "cookie2", + "content-transfer-encoding", + "date", + "expect", + "host", + "keep-alive", + "origin", + "referer", + "te", + "trailer", + "transfer-encoding", + "upgrade", + "user-agent", + "via" + ]; + + // 1-2 + if (_p('readyState') !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + if (/[\u0100-\uffff]/.test(header) || Encode.utf8_encode(header) !== header) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 4 + /* this step is seemingly bypassed in browsers, probably to allow various unicode characters in header values + if (/[\u0100-\uffff]/.test(value) || Encode.utf8_encode(value) !== value) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + }*/ + + header = Basic.trim(header).toLowerCase(); + + // setting of proxy-* and sec-* headers is prohibited by spec + if (!!~Basic.inArray(header, uaHeaders) || /^(proxy\-|sec\-)/.test(header)) { + return false; + } + + // camelize + // browsers lowercase header names (at least for custom ones) + // header = header.replace(/\b\w/g, function($1) { return $1.toUpperCase(); }); + + if (!_headers[header]) { + _headers[header] = value; + } else { + // http://tools.ietf.org/html/rfc2616#section-4.2 (last paragraph) + _headers[header] += ', ' + value; + } + return true; + }, + + /** + Returns all headers from the response, with the exception of those whose field name is Set-Cookie or Set-Cookie2. + + @method getAllResponseHeaders + @return {String} reponse headers or empty string + */ + getAllResponseHeaders: function() { + return _responseHeaders || ''; + }, + + /** + Returns the header field value from the response of which the field name matches header, + unless the field name is Set-Cookie or Set-Cookie2. + + @method getResponseHeader + @param {String} header + @return {String} value(s) for the specified header or null + */ + getResponseHeader: function(header) { + header = header.toLowerCase(); + + if (_error_flag || !!~Basic.inArray(header, ['set-cookie', 'set-cookie2'])) { + return null; + } + + if (_responseHeaders && _responseHeaders !== '') { + // if we didn't parse response headers until now, do it and keep for later + if (!_responseHeadersBag) { + _responseHeadersBag = {}; + Basic.each(_responseHeaders.split(/\r\n/), function(line) { + var pair = line.split(/:\s+/); + if (pair.length === 2) { // last line might be empty, omit + pair[0] = Basic.trim(pair[0]); // just in case + _responseHeadersBag[pair[0].toLowerCase()] = { // simply to retain header name in original form + header: pair[0], + value: Basic.trim(pair[1]) + }; + } + }); + } + if (_responseHeadersBag.hasOwnProperty(header)) { + return _responseHeadersBag[header].header + ': ' + _responseHeadersBag[header].value; + } + } + return null; + }, + + /** + Sets the Content-Type header for the response to mime. + Throws an "InvalidStateError" exception if the state is LOADING or DONE. + Throws a "SyntaxError" exception if mime is not a valid media type. + + @method overrideMimeType + @param String mime Mime type to set + */ + overrideMimeType: function(mime) { + var matches, charset; + + // 1 + if (!!~Basic.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + mime = Basic.trim(mime.toLowerCase()); + + if (/;/.test(mime) && (matches = mime.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))) { + mime = matches[1]; + if (matches[2]) { + charset = matches[2]; + } + } + + if (!Mime.mimes[mime]) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3-4 + _finalMime = mime; + _finalCharset = charset; + }, + + /** + Initiates the request. The optional argument provides the request entity body. + The argument is ignored if request method is GET or HEAD. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + + @method send + @param {Blob|Document|String|FormData} [data] Request entity body + @param {Object} [options] Set of requirements and pre-requisities for runtime initialization + */ + send: function(data, options) { + if (Basic.typeOf(options) === 'string') { + _options = { ruid: options }; + } else if (!options) { + _options = {}; + } else { + _options = options; + } + + this.convertEventPropsToHandlers(dispatches); + this.upload.convertEventPropsToHandlers(dispatches); + + // 1-2 + if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + // sending Blob + if (data instanceof Blob) { + _options.ruid = data.ruid; + _mimeType = data.type || 'application/octet-stream'; + } + + // FormData + else if (data instanceof FormData) { + if (data.hasBlob()) { + var blob = data.getBlob(); + _options.ruid = blob.ruid; + _mimeType = blob.type || 'application/octet-stream'; + } + } + + // DOMString + else if (typeof data === 'string') { + _encoding = 'UTF-8'; + _mimeType = 'text/plain;charset=UTF-8'; + + // data should be converted to Unicode and encoded as UTF-8 + data = Encode.utf8_encode(data); + } + + // if withCredentials not set, but requested, set it automatically + if (!this.withCredentials) { + this.withCredentials = (_options.required_caps && _options.required_caps.send_browser_cookies) && !_same_origin_flag; + } + + // 4 - storage mutex + // 5 + _upload_events_flag = (!_sync_flag && this.upload.hasEventListener()); // DSAP + // 6 + _error_flag = false; + // 7 + _upload_complete_flag = !data; + // 8 - Asynchronous steps + if (!_sync_flag) { + // 8.1 + _send_flag = true; + // 8.2 + // this.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + // 8.3 + if (!_upload_complete_flag) { + // this.upload.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + } + } + // 8.5 - Return the send() method call, but continue running the steps in this algorithm. + _doXHR.call(this, data); + }, + + /** + Cancels any network activity. + + @method abort + */ + abort: function() { + _error_flag = true; + _sync_flag = false; + + if (!~Basic.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED, XMLHttpRequest.DONE])) { + _p('readyState', XMLHttpRequest.DONE); + _send_flag = false; + + if (_xhr) { + _xhr.getRuntime().exec.call(_xhr, 'XMLHttpRequest', 'abort', _upload_complete_flag); + } else { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + _upload_complete_flag = true; + } else { + _p('readyState', XMLHttpRequest.UNSENT); + } + }, + + destroy: function() { + if (_xhr) { + if (Basic.typeOf(_xhr.destroy) === 'function') { + _xhr.destroy(); + } + _xhr = null; + } + + this.unbindAll(); + + if (this.upload) { + this.upload.unbindAll(); + this.upload = null; + } + } + }); + + /* this is nice, but maybe too lengthy + + // if supported by JS version, set getters/setters for specific properties + o.defineProperty(this, 'readyState', { + configurable: false, + + get: function() { + return _p('readyState'); + } + }); + + o.defineProperty(this, 'timeout', { + configurable: false, + + get: function() { + return _p('timeout'); + }, + + set: function(value) { + + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // timeout still should be measured relative to the start time of request + _timeoutset_time = (new Date).getTime(); + + _p('timeout', value); + } + }); + + // the withCredentials attribute has no effect when fetching same-origin resources + o.defineProperty(this, 'withCredentials', { + configurable: false, + + get: function() { + return _p('withCredentials'); + }, + + set: function(value) { + // 1-2 + if (!~o.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED]) || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3-4 + if (_anonymous_flag || _sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 5 + _p('withCredentials', value); + } + }); + + o.defineProperty(this, 'status', { + configurable: false, + + get: function() { + return _p('status'); + } + }); + + o.defineProperty(this, 'statusText', { + configurable: false, + + get: function() { + return _p('statusText'); + } + }); + + o.defineProperty(this, 'responseType', { + configurable: false, + + get: function() { + return _p('responseType'); + }, + + set: function(value) { + // 1 + if (!!~o.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 3 + _p('responseType', value.toLowerCase()); + } + }); + + o.defineProperty(this, 'responseText', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'text'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseText'); + } + }); + + o.defineProperty(this, 'responseXML', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'document'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseXML'); + } + }); + + o.defineProperty(this, 'response', { + configurable: false, + + get: function() { + if (!!~o.inArray(_p('responseType'), ['', 'text'])) { + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + return ''; + } + } + + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + return null; + } + + return _p('response'); + } + }); + + */ + + function _p(prop, value) { + if (!props.hasOwnProperty(prop)) { + return; + } + if (arguments.length === 1) { // get + return Env.can('define_property') ? props[prop] : self[prop]; + } else { // set + if (Env.can('define_property')) { + props[prop] = value; + } else { + self[prop] = value; + } + } + } + + /* + function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) { + // TODO: http://tools.ietf.org/html/rfc3490#section-4.1 + return str.toLowerCase(); + } + */ + + + function _doXHR(data) { + var self = this; + + _start_time = new Date().getTime(); + + _xhr = new RuntimeTarget(); + + function loadEnd() { + _xhr.destroy(); + _xhr = null; + self.dispatchEvent('loadend'); + self = null; + } + + function exec(runtime) { + _xhr.bind('LoadStart', function(e) { + _p('readyState', XMLHttpRequest.LOADING); + self.dispatchEvent('readystatechange'); + + self.dispatchEvent(e); + + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + }); + + _xhr.bind('Progress', function(e) { + if (_p('readyState') !== XMLHttpRequest.LOADING) { + _p('readyState', XMLHttpRequest.LOADING); // LoadStart unreliable (in Flash for example) + self.dispatchEvent('readystatechange'); + } + self.dispatchEvent(e); + }); + + _xhr.bind('UploadProgress', function(e) { + if (_upload_events_flag) { + self.upload.dispatchEvent({ + type: 'progress', + lengthComputable: false, + total: e.total, + loaded: e.loaded + }); + } + }); + + _xhr.bind('Load', function(e) { + _p('readyState', XMLHttpRequest.DONE); + _p('status', Number(runtime.exec.call(_xhr, 'XMLHttpRequest', 'getStatus') || 0)); + _p('statusText', httpCode[_p('status')] || ""); + + _p('response', runtime.exec.call(_xhr, 'XMLHttpRequest', 'getResponse', _p('responseType'))); + + if (!!~Basic.inArray(_p('responseType'), ['text', ''])) { + _p('responseText', _p('response')); + } else if (_p('responseType') === 'document') { + _p('responseXML', _p('response')); + } + + _responseHeaders = runtime.exec.call(_xhr, 'XMLHttpRequest', 'getAllResponseHeaders'); + + self.dispatchEvent('readystatechange'); + + if (_p('status') > 0) { // status 0 usually means that server is unreachable + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + self.dispatchEvent(e); + } else { + _error_flag = true; + self.dispatchEvent('error'); + } + loadEnd(); + }); + + _xhr.bind('Abort', function(e) { + self.dispatchEvent(e); + loadEnd(); + }); + + _xhr.bind('Error', function(e) { + _error_flag = true; + _p('readyState', XMLHttpRequest.DONE); + self.dispatchEvent('readystatechange'); + _upload_complete_flag = true; + self.dispatchEvent(e); + loadEnd(); + }); + + runtime.exec.call(_xhr, 'XMLHttpRequest', 'send', { + url: _url, + method: _method, + async: _async, + user: _user, + password: _password, + headers: _headers, + mimeType: _mimeType, + encoding: _encoding, + responseType: self.responseType, + withCredentials: self.withCredentials, + options: _options + }, data); + } + + // clarify our requirements + if (typeof(_options.required_caps) === 'string') { + _options.required_caps = Runtime.parseCaps(_options.required_caps); + } + + _options.required_caps = Basic.extend({}, _options.required_caps, { + return_response_type: self.responseType + }); + + if (data instanceof FormData) { + _options.required_caps.send_multipart = true; + } + + if (!_same_origin_flag) { + _options.required_caps.do_cors = true; + } + + + if (_options.ruid) { // we do not need to wait if we can connect directly + exec(_xhr.connectRuntime(_options)); + } else { + _xhr.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + _xhr.bind('RuntimeError', function(e, err) { + self.dispatchEvent('RuntimeError', err); + }); + _xhr.connectRuntime(_options); + } + } + + + function _reset() { + _p('responseText', ""); + _p('responseXML', null); + _p('response', null); + _p('status', 0); + _p('statusText', ""); + _start_time = _timeoutset_time = null; + } + } + + XMLHttpRequest.UNSENT = 0; + XMLHttpRequest.OPENED = 1; + XMLHttpRequest.HEADERS_RECEIVED = 2; + XMLHttpRequest.LOADING = 3; + XMLHttpRequest.DONE = 4; + + XMLHttpRequest.prototype = EventTarget.instance; + + return XMLHttpRequest; +}); + +// Included from: src/javascript/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/runtime/Transporter", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Encode", + "moxie/runtime/RuntimeClient", + "moxie/core/EventTarget" +], function(Basic, Encode, RuntimeClient, EventTarget) { + function Transporter() { + var mod, _runtime, _data, _size, _pos, _chunk_size; + + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + state: Transporter.IDLE, + + result: null, + + transport: function(data, type, options) { + var self = this; + + options = Basic.extend({ + chunk_size: 204798 + }, options); + + // should divide by three, base64 requires this + if ((mod = options.chunk_size % 3)) { + options.chunk_size += 3 - mod; + } + + _chunk_size = options.chunk_size; + + _reset.call(this); + _data = data; + _size = data.length; + + if (Basic.typeOf(options) === 'string' || options.ruid) { + _run.call(self, type, this.connectRuntime(options)); + } else { + // we require this to run only once + var cb = function(e, runtime) { + self.unbind("RuntimeInit", cb); + _run.call(self, type, runtime); + }; + this.bind("RuntimeInit", cb); + this.connectRuntime(options); + } + }, + + abort: function() { + var self = this; + + self.state = Transporter.IDLE; + if (_runtime) { + _runtime.exec.call(self, 'Transporter', 'clear'); + self.trigger("TransportingAborted"); + } + + _reset.call(self); + }, + + + destroy: function() { + this.unbindAll(); + _runtime = null; + this.disconnectRuntime(); + _reset.call(this); + } + }); + + function _reset() { + _size = _pos = 0; + _data = this.result = null; + } + + function _run(type, runtime) { + var self = this; + + _runtime = runtime; + + //self.unbind("RuntimeInit"); + + self.bind("TransportingProgress", function(e) { + _pos = e.loaded; + + if (_pos < _size && Basic.inArray(self.state, [Transporter.IDLE, Transporter.DONE]) === -1) { + _transport.call(self); + } + }, 999); + + self.bind("TransportingComplete", function() { + _pos = _size; + self.state = Transporter.DONE; + _data = null; // clean a bit + self.result = _runtime.exec.call(self, 'Transporter', 'getAsBlob', type || ''); + }, 999); + + self.state = Transporter.BUSY; + self.trigger("TransportingStarted"); + _transport.call(self); + } + + function _transport() { + var self = this, + chunk, + bytesLeft = _size - _pos; + + if (_chunk_size > bytesLeft) { + _chunk_size = bytesLeft; + } + + chunk = Encode.btoa(_data.substr(_pos, _chunk_size)); + _runtime.exec.call(self, 'Transporter', 'receive', chunk, _size); + } + } + + Transporter.IDLE = 0; + Transporter.BUSY = 1; + Transporter.DONE = 2; + + Transporter.prototype = EventTarget.instance; + + return Transporter; +}); + +// Included from: src/javascript/core/JSON.js + +/** + * JSON.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*jshint smarttabs:true */ + +define("moxie/core/JSON", [], function() { + /** + Parse string into the JSON object in a safe way + @credits Douglas Crockford: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js + + @method parse + @static + @protected + @param {Object} obj Object to add property to + @param {String} prop Property name + @param {Object} desc Set of key-value pairs defining descriptor for the property + */ + return !!window.JSON && JSON.parse || (function() { + "use strict"; + + // This is a function that can parse a JSON text, producing a JavaScript + // data structure. It is a simple, recursive descent parser. It does not use + // eval or regular expressions, so it can be used as a model for implementing + // a JSON parser in other languages. + + // We are defining the function inside of another function to avoid + // creating global variables. + + var at, // The index of the current character + ch, // The current character + escapee = { + '"': '"', + '\\': '\\', + '/': '/', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' + }, + text, + + error = function (m) { + + // Call error when something is wrong. + + throw { + name: 'SyntaxError', + message: m, + at: at, + text: text + }; + }, + + next = function (c) { + + // If a c parameter is provided, verify that it matches the current character. + + if (c && c !== ch) { + error("Expected '" + c + "' instead of '" + ch + "'"); + } + + // Get the next character. When there are no more characters, + // return the empty string. + + ch = text.charAt(at); + at += 1; + return ch; + }, + + number = function () { + + // Parse a number value. + + var number, + string = ''; + + if (ch === '-') { + string = '-'; + next('-'); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + if (ch === '.') { + string += '.'; + while (next() && ch >= '0' && ch <= '9') { + string += ch; + } + } + if (ch === 'e' || ch === 'E') { + string += ch; + next(); + if (ch === '-' || ch === '+') { + string += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + } + number = +string; + if (!isFinite(number)) { + error("Bad number"); + } else { + return number; + } + }, + + string = function () { + + // Parse a string value. + + var hex, + i, + string = '', + uffff; + + // When parsing for string values, we must look for " and \ characters. + + if (ch === '"') { + while (next()) { + if (ch === '"') { + next(); + return string; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } else if (typeof escapee[ch] === 'string') { + string += escapee[ch]; + } else { + break; + } + } else { + string += ch; + } + } + } + error("Bad string"); + }, + + white = function () { + + // Skip whitespace. + + while (ch && ch <= ' ') { + next(); + } + }, + + word = function () { + + // true, false, or null. + + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + } + error("Unexpected '" + ch + "'"); + }, + + value, // Place holder for the value function. + + array = function () { + + // Parse an array value. + + var array = []; + + if (ch === '[') { + next('['); + white(); + if (ch === ']') { + next(']'); + return array; // empty array + } + while (ch) { + array.push(value()); + white(); + if (ch === ']') { + next(']'); + return array; + } + next(','); + white(); + } + } + error("Bad array"); + }, + + object = function () { + + // Parse an object value. + + var key, + object = {}; + + if (ch === '{') { + next('{'); + white(); + if (ch === '}') { + next('}'); + return object; // empty object + } + while (ch) { + key = string(); + white(); + next(':'); + if (Object.hasOwnProperty.call(object, key)) { + error('Duplicate key "' + key + '"'); + } + object[key] = value(); + white(); + if (ch === '}') { + next('}'); + return object; + } + next(','); + white(); + } + } + error("Bad object"); + }; + + value = function () { + + // Parse a JSON value. It could be an object, an array, a string, a number, + // or a word. + + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + return string(); + case '-': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } + }; + + // Return the json_parse function. It will have access to all of the above + // functions and variables. + + return function (source, reviver) { + var result; + + text = source; + at = 0; + ch = ' '; + result = value(); + white(); + if (ch) { + error("Syntax error"); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + 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 reviver.call(holder, key, value); + }({'': result}, '')) : result; + }; + }()); + +}); + +// Included from: src/javascript/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/image/Image", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/file/FileReaderSync", + "moxie/xhr/XMLHttpRequest", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeClient", + "moxie/runtime/Transporter", + "moxie/core/utils/Env", + "moxie/core/EventTarget", + "moxie/file/Blob", + "moxie/file/File", + "moxie/core/utils/Encode", + "moxie/core/JSON" +], function(Basic, Dom, x, FileReaderSync, XMLHttpRequest, Runtime, RuntimeClient, Transporter, Env, EventTarget, Blob, File, Encode, parseJSON) { + /** + Image preloading and manipulation utility. Additionally it provides access to image meta info (Exif, GPS) and raw binary data. + + @class Image + @constructor + @extends EventTarget + */ + var dispatches = [ + 'progress', + + /** + Dispatched when loading is complete. + + @event load + @param {Object} event + */ + 'load', + + 'error', + + /** + Dispatched when resize operation is complete. + + @event resize + @param {Object} event + */ + 'resize', + + /** + Dispatched when visual representation of the image is successfully embedded + into the corresponsing container. + + @event embedded + @param {Object} event + */ + 'embedded' + ]; + + function Image() { + RuntimeClient.call(this); + + Basic.extend(this, { + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @type {String} + */ + ruid: null, + + /** + Name of the file, that was used to create an image, if available. If not equals to empty string. + + @property name + @type {String} + @default "" + */ + name: "", + + /** + Size of the image in bytes. Actual value is set only after image is preloaded. + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Width of the image. Actual value is set only after image is preloaded. + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Height of the image. Actual value is set only after image is preloaded. + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Mime type of the image. Currently only image/jpeg and image/png are supported. Actual value is set only after image is preloaded. + + @property type + @type {String} + @default "" + */ + type: "", + + /** + Holds meta info (Exif, GPS). Is populated only for image/jpeg. Actual value is set only after image is preloaded. + + @property meta + @type {Object} + @default {} + */ + meta: {}, + + /** + Alias for load method, that takes another mOxie.Image object as a source (see load). + + @method clone + @param {Image} src Source for the image + @param {Boolean} [exact=false] Whether to activate in-depth clone mode + */ + clone: function() { + this.load.apply(this, arguments); + }, + + /** + Loads image from various sources. Currently the source for new image can be: mOxie.Image, mOxie.Blob/mOxie.File, + native Blob/File, dataUrl or URL. Depending on the type of the source, arguments - differ. When source is URL, + Image will be downloaded from remote destination and loaded in memory. + + @example + var img = new mOxie.Image(); + img.onload = function() { + var blob = img.getAsBlob(); + + var formData = new mOxie.FormData(); + formData.append('file', blob); + + var xhr = new mOxie.XMLHttpRequest(); + xhr.onload = function() { + // upload complete + }; + xhr.open('post', 'upload.php'); + xhr.send(formData); + }; + img.load("http://www.moxiecode.com/images/mox-logo.jpg"); // notice file extension (.jpg) + + + @method load + @param {Image|Blob|File|String} src Source for the image + @param {Boolean|Object} [mixed] + */ + load: function() { + // this is here because to bind properly we need an uid first, which is created above + this.bind('Load Resize', function() { + _updateInfo.call(this); + }, 999); + + this.convertEventPropsToHandlers(dispatches); + + _load.apply(this, arguments); + }, + + /** + Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions. + + @method downsize + @param {Number} width Resulting width + @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [crop=false] Whether to crop the image to exact dimensions + @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + */ + downsize: function(width, height, crop, preserveHeaders) { + try { + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // no way to reliably intercept the crash due to high resolution, so we simply avoid it + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + if (!width && !height || Basic.typeOf(crop) === 'undefined') { + crop = false; + } + + width = width || this.width; + height = height || this.height; + + preserveHeaders = (Basic.typeOf(preserveHeaders) === 'undefined' ? true : !!preserveHeaders); + + this.getRuntime().exec.call(this, 'Image', 'downsize', width, height, crop, preserveHeaders); + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + }, + + /** + Alias for downsize(width, height, true). (see downsize) + + @method crop + @param {Number} width Resulting width + @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + */ + crop: function(width, height, preserveHeaders) { + this.downsize(width, height, true, preserveHeaders); + }, + + getAsCanvas: function() { + if (!Env.can('create_canvas')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + var runtime = this.connectRuntime(this.ruid); + return runtime.exec.call(this, 'Image', 'getAsCanvas'); + }, + + /** + Retrieves image in it's current state as mOxie.Blob object. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBlob + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {Blob} Image as Blob + */ + getAsBlob: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + if (!type) { + type = 'image/jpeg'; + } + + if (type === 'image/jpeg' && !quality) { + quality = 90; + } + + return this.getRuntime().exec.call(this, 'Image', 'getAsBlob', type, quality); + }, + + /** + Retrieves image in it's current state as dataURL string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsDataURL + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as dataURL string + */ + getAsDataURL: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + return this.getRuntime().exec.call(this, 'Image', 'getAsDataURL', type, quality); + }, + + /** + Retrieves image in it's current state as binary string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBinaryString + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as binary string + */ + getAsBinaryString: function(type, quality) { + var dataUrl = this.getAsDataURL(type, quality); + return Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)); + }, + + /** + Embeds the image, or better to say, it's visual representation into the specified node. Depending on the runtime + in use, might be a canvas, or image (actual ) element or shim object (Flash or SilverLight - very rare, used for + legacy browsers that do not have canvas or proper dataURI support). + + @method embed + @param {DOMElement} el DOM element to insert the image object into + @param {Object} options Set of key/value pairs controlling the mime type, dimensions and cropping factor of resulting + representation + */ + embed: function(el) { + var self = this + , imgCopy + , type, quality, crop + , options = arguments[1] || {} + , width = this.width + , height = this.height + , runtime // this has to be outside of all the closures to contain proper runtime + ; + + function onResize() { + // if possible, embed a canvas element directly + if (Env.can('create_canvas')) { + var canvas = imgCopy.getAsCanvas(); + if (canvas) { + el.appendChild(canvas); + canvas = null; + imgCopy.destroy(); + self.trigger('embedded'); + return; + } + } + + var dataUrl = imgCopy.getAsDataURL(type, quality); + if (!dataUrl) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + if (Env.can('use_data_uri_of', dataUrl.length)) { + el.innerHTML = ''; + imgCopy.destroy(); + self.trigger('embedded'); + } else { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + runtime = self.connectRuntime(this.result.ruid); + + self.bind("Embedded", function() { + // position and size properly + Basic.extend(runtime.getShimContainer().style, { + //position: 'relative', + top: '0px', + left: '0px', + width: imgCopy.width + 'px', + height: imgCopy.height + 'px' + }); + + // some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's + // position type changes (in Gecko), but since we basically need this only in IEs 6/7 and + // sometimes 8 and they do not have this problem, we can comment this for now + /*tr.bind("RuntimeInit", function(e, runtime) { + tr.destroy(); + runtime.destroy(); + onResize.call(self); // re-feed our image data + });*/ + + runtime = null; + }, 999); + + runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height); + imgCopy.destroy(); + }); + + tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, Basic.extend({}, options, { + required_caps: { + display_media: true + }, + runtime_order: 'flash,silverlight', + container: el + })); + } + } + + try { + if (!(el = Dom.get(el))) { + throw new x.DOMException(x.DOMException.INVALID_NODE_TYPE_ERR); + } + + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + type = options.type || this.type || 'image/jpeg'; + quality = options.quality || 90; + crop = Basic.typeOf(options.crop) !== 'undefined' ? options.crop : false; + + // figure out dimensions for the thumb + if (options.width) { + width = options.width; + height = options.height || width; + } else { + // if container element has > 0 dimensions, take them + var dimensions = Dom.getSize(el); + if (dimensions.w && dimensions.h) { // both should be > 0 + width = dimensions.w; + height = dimensions.h; + } + } + + imgCopy = new Image(); + + imgCopy.bind("Resize", function() { + onResize.call(self); + }); + + imgCopy.bind("Load", function() { + imgCopy.downsize(width, height, crop, false); + }); + + imgCopy.clone(this, false); + + return imgCopy; + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + }, + + /** + Properly destroys the image and frees resources in use. If any. Recommended way to dispose mOxie.Image object. + + @method destroy + */ + destroy: function() { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Image', 'destroy'); + this.disconnectRuntime(); + } + this.unbindAll(); + } + }); + + + function _updateInfo(info) { + if (!info) { + info = this.getRuntime().exec.call(this, 'Image', 'getInfo'); + } + + if (info) { + if (Basic.typeOf(info.meta) === 'string') { // might be a JSON string + try { + this.meta = parseJSON(info.meta); + } catch(ex) {} + } else { + this.meta = info.meta; + } + } + + Basic.extend(this, { // info object might be non-enumerable (as returned from SilverLight for example) + size: parseInt(info.size, 10), + width: parseInt(info.width, 10), + height: parseInt(info.height, 10), + type: info.type + }); + + // update file name, only if empty + if (this.name === '') { + this.name = info.name; + } + } + + function _load(src) { + var srcType = Basic.typeOf(src); + + try { + // if source is Image + if (src instanceof Image) { + if (!src.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + _loadFromImage.apply(this, arguments); + } + // if source is o.Blob/o.File + else if (src instanceof Blob) { + if (!~Basic.inArray(src.type, ['image/jpeg', 'image/png'])) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + _loadFromBlob.apply(this, arguments); + } + // if native blob/file + else if (Basic.inArray(srcType, ['blob', 'file']) !== -1) { + _load.call(this, new File(null, src), arguments[1]); + } + // if String + else if (srcType === 'string') { + // if dataUrl String + if (/^data:[^;]*;base64,/.test(src)) { + _load.call(this, new Blob(null, { data: src }), arguments[1]); + } + // else assume Url, either relative or absolute + else { + _loadFromUrl.apply(this, arguments); + } + } + // if source seems to be an img node + else if (srcType === 'node' && src.nodeName.toLowerCase() === 'img') { + _load.call(this, src.src, arguments[1]); + } + else { + throw new x.DOMException(x.DOMException.TYPE_MISMATCH_ERR); + } + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + } + + + function _loadFromImage(img, exact) { + var runtime = this.connectRuntime(img.ruid); + this.ruid = runtime.uid; + runtime.exec.call(this, 'Image', 'loadFromImage', img, (Basic.typeOf(exact) === 'undefined' ? true : exact)); + } + + + function _loadFromBlob(blob, options) { + var self = this; + + self.name = blob.name || ''; + + function exec(runtime) { + self.ruid = runtime.uid; + runtime.exec.call(self, 'Image', 'loadFromBlob', blob); + } + + if (blob.isDetached()) { + this.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + + // convert to object representation + if (options && typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + this.connectRuntime(Basic.extend({ + required_caps: { + access_image_binary: true, + resize_image: true + } + }, options)); + } else { + exec(this.connectRuntime(blob.ruid)); + } + } + + + function _loadFromUrl(url, options) { + var self = this, xhr; + + xhr = new XMLHttpRequest(); + + xhr.open('get', url); + xhr.responseType = 'blob'; + + xhr.onprogress = function(e) { + self.trigger(e); + }; + + xhr.onload = function() { + _loadFromBlob.call(self, xhr.response, true); + }; + + xhr.onerror = function(e) { + self.trigger(e); + }; + + xhr.onloadend = function() { + xhr.destroy(); + }; + + xhr.bind('RuntimeError', function(e, err) { + self.trigger('RuntimeError', err); + }); + + xhr.send(null, options); + } + } + + // virtual world will crash on you if image has a resolution higher than this: + Image.MAX_RESIZE_WIDTH = 6500; + Image.MAX_RESIZE_HEIGHT = 6500; + + Image.prototype = EventTarget.instance; + + return Image; +}); + +// Included from: src/javascript/runtime/html5/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML5 runtime. + +@class moxie/runtime/html5/Runtime +@private +*/ +define("moxie/runtime/html5/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = "html5", extensions = {}; + + function Html5Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + var caps = Basic.extend({ + access_binary: Test(window.FileReader || window.File && window.File.getAsDataURL), + access_image_binary: function() { + return I.can('access_binary') && !!extensions.Image; + }, + display_media: Test(Env.can('create_canvas') || Env.can('use_data_uri_over32kb')), + do_cors: Test(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()), + drag_and_drop: Test(function() { + // this comes directly from Modernizr: http://www.modernizr.com/ + var div = document.createElement('div'); + // IE has support for drag and drop since version 5, but doesn't support dropping files from desktop + return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && (Env.browser !== 'IE' || Env.version > 9); + }()), + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + }()), + return_response_headers: True, + return_response_type: function(responseType) { + if (responseType === 'json') { + return true; // we can fake this one even if it's not supported + } else { + return Env.can('return_response_type', responseType); + } + }, + return_status_code: True, + report_upload_progress: Test(window.XMLHttpRequest && new XMLHttpRequest().upload), + resize_image: function() { + return I.can('access_binary') && Env.can('create_canvas'); + }, + select_file: function() { + return Env.can('use_fileinput') && window.File; + }, + select_folder: function() { + return I.can('select_file') && Env.browser === 'Chrome' && Env.version >= 21; + }, + select_multiple: function() { + return I.can('select_file') && !(Env.browser === 'Safari' && Env.OS === 'Windows'); + }, + send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))), + send_custom_headers: Test(window.XMLHttpRequest), + send_multipart: function() { + return !!(window.XMLHttpRequest && new XMLHttpRequest().upload && window.FormData) || I.can('send_binary_string'); + }, + slice_blob: Test(window.File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)), + stream_upload: function(){ + return I.can('slice_blob') && I.can('send_multipart'); + }, + summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... + return (Env.browser === 'Firefox' && Env.version >= 4) || + (Env.browser === 'Opera' && Env.version >= 12) || + (Env.browser === 'IE' && Env.version >= 10) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); + }()), + upload_filesize: True + }, + arguments[2] + ); + + Runtime.call(this, options, (arguments[1] || type), caps); + + + Basic.extend(this, { + + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html5Runtime); + + return extensions; +}); + +// Included from: src/javascript/runtime/html5/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/Blob +@private +*/ +define("moxie/runtime/html5/file/Blob", [ + "moxie/runtime/html5/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + function HTML5Blob() { + function w3cBlobSlice(blob, start, end) { + var blobSlice; + + if (window.File.prototype.slice) { + try { + blob.slice(); // depricated version will throw WRONG_ARGUMENTS_ERR exception + return blob.slice(start, end); + } catch (e) { + // depricated slice method + return blob.slice(start, end - start); + } + // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672 + } else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) { + return blobSlice.call(blob, start, end); + } else { + return null; // or throw some exception + } + } + + this.slice = function() { + return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments)); + }; + } + + return (extensions.Blob = HTML5Blob); +}); + +// Included from: src/javascript/core/utils/Events.js + +/** + * Events.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Events', [ + 'moxie/core/utils/Basic' +], function(Basic) { + var eventhash = {}, uid = 'moxie_' + Basic.guid(); + + // IE W3C like event funcs + function preventDefault() { + this.returnValue = false; + } + + function stopPropagation() { + this.cancelBubble = true; + } + + /** + Adds an event handler to the specified object and store reference to the handler + in objects internal Plupload registry (@see removeEvent). + + @method addEvent + @for Utils + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Name to add event listener to. + @param {Function} callback Function to call when event occurs. + @param {String} [key] that might be used to add specifity to the event record. + */ + var addEvent = function(obj, name, callback, key) { + var func, events; + + name = name.toLowerCase(); + + // Add event listener + if (obj.addEventListener) { + func = callback; + + obj.addEventListener(name, func, false); + } else if (obj.attachEvent) { + func = function() { + var evt = window.event; + + if (!evt.target) { + evt.target = evt.srcElement; + } + + evt.preventDefault = preventDefault; + evt.stopPropagation = stopPropagation; + + callback(evt); + }; + + obj.attachEvent('on' + name, func); + } + + // Log event handler to objects internal mOxie registry + if (!obj[uid]) { + obj[uid] = Basic.guid(); + } + + if (!eventhash.hasOwnProperty(obj[uid])) { + eventhash[obj[uid]] = {}; + } + + events = eventhash[obj[uid]]; + + if (!events.hasOwnProperty(name)) { + events[name] = []; + } + + events[name].push({ + func: func, + orig: callback, // store original callback for IE + key: key + }); + }; + + + /** + Remove event handler from the specified object. If third argument (callback) + is not specified remove all events with the specified name. + + @method removeEvent + @static + @param {Object} obj DOM element to remove event listener(s) from. + @param {String} name Name of event listener to remove. + @param {Function|String} [callback] might be a callback or unique key to match. + */ + var removeEvent = function(obj, name, callback) { + var type, undef; + + name = name.toLowerCase(); + + if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) { + type = eventhash[obj[uid]][name]; + } else { + return; + } + + for (var i = type.length - 1; i >= 0; i--) { + // undefined or not, key should match + if (type[i].orig === callback || type[i].key === callback) { + if (obj.removeEventListener) { + obj.removeEventListener(name, type[i].func, false); + } else if (obj.detachEvent) { + obj.detachEvent('on'+name, type[i].func); + } + + type[i].orig = null; + type[i].func = null; + type.splice(i, 1); + + // If callback was passed we are done here, otherwise proceed + if (callback !== undef) { + break; + } + } + } + + // If event array got empty, remove it + if (!type.length) { + delete eventhash[obj[uid]][name]; + } + + // If mOxie registry has become empty, remove it + if (Basic.isEmptyObj(eventhash[obj[uid]])) { + delete eventhash[obj[uid]]; + + // IE doesn't let you remove DOM object property with - delete + try { + delete obj[uid]; + } catch(e) { + obj[uid] = undef; + } + } + }; + + + /** + Remove all kind of events from the specified object + + @method removeAllEvents + @static + @param {Object} obj DOM element to remove event listeners from. + @param {String} [key] unique key to match, when removing events. + */ + var removeAllEvents = function(obj, key) { + if (!obj || !obj[uid]) { + return; + } + + Basic.each(eventhash[obj[uid]], function(events, name) { + removeEvent(obj, name, key); + }); + }; + + return { + addEvent: addEvent, + removeEvent: removeEvent, + removeAllEvents: removeAllEvents + }; +}); + +// Included from: src/javascript/runtime/html5/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileInput +@private +*/ +define("moxie/runtime/html5/file/FileInput", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _files = [], _options; + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top; + + _options = options; + _files = []; + + // figure out accept string + mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + shimContainer.innerHTML = ''; + + input = Dom.get(I.uid); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + + browseButton = Dom.get(_options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + + Events.addEvent(browseButton, 'click', function(e) { + var input = Dom.get(I.uid); + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(_options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + + input.onchange = function onChange() { // there should be only one handler for this + _files = []; + + if (_options.directory) { + // folders are represented by dots, filter them out (Chrome 11+) + Basic.each(this.files, function(file) { + if (file.name !== ".") { // if it doesn't looks like a folder + _files.push(file); + } + }); + } else { + _files = [].slice.call(this.files); + } + + // clearing the value enables the user to select the same file again if they want to + if (Env.browser !== 'IE') { + this.value = ''; + } else { + // in IE input[type="file"] is read-only so the only way to reset it is to re-insert it + var clone = this.cloneNode(true); + this.parentNode.replaceChild(clone, this); + clone.onchange = onChange; + } + comp.trigger('change'); + }; + + // ready event is perfectly asynchronous + comp.trigger({ + type: 'ready', + async: true + }); + + shimContainer = null; + }, + + getFiles: function() { + return _files; + }, + + disable: function(state) { + var I = this.getRuntime(), input; + + if ((input = Dom.get(I.uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime(), shimContainer = I.getShimContainer(); + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + _files = _options = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html5/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileDrop +@private +*/ +define("moxie/runtime/html5/file/FileDrop", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime" +], function(extensions, Basic, Dom, Events, Mime) { + + function FileDrop() { + var _files = [], _allowedExts = [], _options; + + Basic.extend(this, { + init: function(options) { + var comp = this, dropZone; + + _options = options; + _allowedExts = _extractExts(_options.accept); + dropZone = _options.container; + + Events.addEvent(dropZone, 'dragover', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + e.preventDefault(); + e.stopPropagation(); + + _files = []; + + // Chrome 21+ accepts folders via Drag'n'Drop + if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) { + var entries = []; + Basic.each(e.dataTransfer.items, function(item) { + entries.push(item.webkitGetAsEntry()); + }); + _readEntries(entries, function() { + comp.trigger("drop"); + }); + } else { + Basic.each(e.dataTransfer.files, function(file) { + if (_isAcceptable(file)) { + _files.push(file); + } + }); + comp.trigger("drop"); + } + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + e.preventDefault(); + e.stopPropagation(); + comp.trigger("dragenter"); + }, comp.uid); + + Events.addEvent(dropZone, 'dragleave', function(e) { + e.preventDefault(); + e.stopPropagation(); + comp.trigger("dragleave"); + }, comp.uid); + }, + + getFiles: function() { + return _files; + }, + + destroy: function() { + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + _files = _allowedExts = _options = null; + } + }); + + + function _extractExts(accept) { + var exts = []; + for (var i = 0; i < accept.length; i++) { + [].push.apply(exts, accept[i].extensions.split(/\s*,\s*/)); + } + return Basic.inArray('*', exts) === -1 ? exts : []; + } + + + function _isAcceptable(file) { + var ext = Mime.getFileExtension(file.name); + return !ext || !_allowedExts.length || Basic.inArray(ext, _allowedExts) !== -1; + } + + + function _readEntries(entries, cb) { + var queue = []; + Basic.each(entries, function(entry) { + queue.push(function(cbcb) { + _readEntry(entry, cbcb); + }); + }); + Basic.inSeries(queue, function() { + cb(); + }); + } + + function _readEntry(entry, cb) { + if (entry.isFile) { + entry.file(function(file) { + if (_isAcceptable(file)) { + _files.push(file); + } + cb(); + }, function() { + // fire an error event maybe + cb(); + }); + } else if (entry.isDirectory) { + _readDirEntry(entry, cb); + } else { + cb(); // not file, not directory? what then?.. + } + } + + function _readDirEntry(dirEntry, cb) { + var entries = [], dirReader = dirEntry.createReader(); + + // keep quering recursively till no more entries + function getEntries(cbcb) { + dirReader.readEntries(function(moreEntries) { + if (moreEntries.length) { + [].push.apply(entries, moreEntries); + getEntries(cbcb); + } else { + cbcb(); + } + }, cbcb); + } + + // ...and you thought FileReader was crazy... + getEntries(function() { + _readEntries(entries, cb); + }); + } + } + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/html5/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileReader +@private +*/ +define("moxie/runtime/html5/file/FileReader", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Encode", + "moxie/core/utils/Basic" +], function(extensions, Encode, Basic) { + + function FileReader() { + var _fr, _convertToBinary = false; + + Basic.extend(this, { + + read: function(op, blob) { + var target = this; + + _fr = new window.FileReader(); + + _fr.addEventListener('progress', function(e) { + target.trigger(e); + }); + + _fr.addEventListener('load', function(e) { + target.trigger(e); + }); + + _fr.addEventListener('error', function(e) { + target.trigger(e, _fr.error); + }); + + _fr.addEventListener('loadend', function() { + _fr = null; + }); + + if (Basic.typeOf(_fr[op]) === 'function') { + _convertToBinary = false; + _fr[op](blob.getSource()); + } else if (op === 'readAsBinaryString') { // readAsBinaryString is depricated in general and never existed in IE10+ + _convertToBinary = true; + _fr.readAsDataURL(blob.getSource()); + } + }, + + getResult: function() { + return _fr && _fr.result ? (_convertToBinary ? _toBinary(_fr.result) : _fr.result) : null; + }, + + abort: function() { + if (_fr) { + _fr.abort(); + } + }, + + destroy: function() { + _fr = null; + } + }); + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + } + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html5/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +@class moxie/runtime/html5/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html5/xhr/XMLHttpRequest", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Mime", + "moxie/core/utils/Url", + "moxie/file/File", + "moxie/file/Blob", + "moxie/xhr/FormData", + "moxie/core/Exceptions", + "moxie/core/utils/Env", + "moxie/core/JSON" +], function(extensions, Basic, Mime, Url, File, Blob, FormData, x, Env, parseJSON) { + + function XMLHttpRequest() { + var _xhr + , _filename + ; + + Basic.extend(this, { + send: function(meta, data) { + var target = this + , isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.version >= 4 && Env.version < 7) + , isAndroidBrowser = Env.browser === 'Android Browser' + , mustSendAsBinary = false + ; + + // extract file name + _filename = meta.url.replace(/^.+?\/([\w\-\.]+)$/, '$1').toLowerCase(); + + _xhr = _getNativeXHR(); + _xhr.open(meta.method, meta.url, meta.async, meta.user, meta.password); + + + // prepare data to be sent + if (data instanceof Blob) { + if (data.isDetached()) { + mustSendAsBinary = true; + } + data = data.getSource(); + } else if (data instanceof FormData) { + + if (data.hasBlob()) { + if (data.getBlob().isDetached()) { + data = _prepareMultipart.call(target, data); // _xhr must be instantiated and be in OPENED state + mustSendAsBinary = true; + } else if ((isGecko2_5_6 || isAndroidBrowser) && Basic.typeOf(data.getBlob().getSource()) === 'blob' && window.FileReader) { + // Gecko 2/5/6 can't send blob in FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150 + // Android browsers (default one and Dolphin) seem to have the same issue, see: #613 + _preloadAndSend.call(target, meta, data); + return; // _preloadAndSend will reinvoke send() with transmutated FormData =%D + } + } + + // transfer fields to real FormData + if (data instanceof FormData) { // if still a FormData, e.g. not mangled by _prepareMultipart() + var fd = new window.FormData(); + data.each(function(value, name) { + if (value instanceof Blob) { + fd.append(name, value.getSource()); + } else { + fd.append(name, value); + } + }); + data = fd; + } + } + + + // if XHR L2 + if (_xhr.upload) { + if (meta.withCredentials) { + _xhr.withCredentials = true; + } + + _xhr.addEventListener('load', function(e) { + target.trigger(e); + }); + + _xhr.addEventListener('error', function(e) { + target.trigger(e); + }); + + // additionally listen to progress events + _xhr.addEventListener('progress', function(e) { + target.trigger(e); + }); + + _xhr.upload.addEventListener('progress', function(e) { + target.trigger({ + type: 'UploadProgress', + loaded: e.loaded, + total: e.total + }); + }); + // ... otherwise simulate XHR L2 + } else { + _xhr.onreadystatechange = function onReadyStateChange() { + + // fake Level 2 events + switch (_xhr.readyState) { + + case 1: // XMLHttpRequest.OPENED + // readystatechanged is fired twice for OPENED state (in IE and Mozilla) - neu + break; + + // looks like HEADERS_RECEIVED (state 2) is not reported in Opera (or it's old versions) - neu + case 2: // XMLHttpRequest.HEADERS_RECEIVED + break; + + case 3: // XMLHttpRequest.LOADING + // try to fire progress event for not XHR L2 + var total, loaded; + + try { + if (Url.hasSameOrigin(meta.url)) { // Content-Length not accessible for cross-domain on some browsers + total = _xhr.getResponseHeader('Content-Length') || 0; // old Safari throws an exception here + } + + if (_xhr.responseText) { // responseText was introduced in IE7 + loaded = _xhr.responseText.length; + } + } catch(ex) { + total = loaded = 0; + } + + target.trigger({ + type: 'progress', + lengthComputable: !!total, + total: parseInt(total, 10), + loaded: loaded + }); + break; + + case 4: // XMLHttpRequest.DONE + // release readystatechange handler (mostly for IE) + _xhr.onreadystatechange = function() {}; + + // usually status 0 is returned when server is unreachable, but FF also fails to status 0 for 408 timeout + if (_xhr.status === 0) { + target.trigger('error'); + } else { + target.trigger('load'); + } + break; + } + }; + } + + + // set request headers + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + _xhr.setRequestHeader(header, value); + }); + } + + // request response type + if ("" !== meta.responseType && 'responseType' in _xhr) { + if ('json' === meta.responseType && !Env.can('return_response_type', 'json')) { // we can fake this one + _xhr.responseType = 'text'; + } else { + _xhr.responseType = meta.responseType; + } + } + + // send ... + if (!mustSendAsBinary) { + _xhr.send(data); + } else { + if (_xhr.sendAsBinary) { // Gecko + _xhr.sendAsBinary(data); + } else { // other browsers having support for typed arrays + (function() { + // mimic Gecko's sendAsBinary + var ui8a = new Uint8Array(data.length); + for (var i = 0; i < data.length; i++) { + ui8a[i] = (data.charCodeAt(i) & 0xff); + } + _xhr.send(ui8a.buffer); + }()); + } + } + + target.trigger('loadstart'); + }, + + getStatus: function() { + // according to W3C spec it should return 0 for readyState < 3, but instead it throws an exception + try { + if (_xhr) { + return _xhr.status; + } + } catch(ex) {} + return 0; + }, + + getResponse: function(responseType) { + var I = this.getRuntime(); + + try { + switch (responseType) { + case 'blob': + var file = new File(I.uid, _xhr.response); + + // try to extract file name from content-disposition if possible (might be - not, if CORS for example) + var disposition = _xhr.getResponseHeader('Content-Disposition'); + if (disposition) { + // extract filename from response header if available + var match = disposition.match(/filename=([\'\"'])([^\1]+)\1/); + if (match) { + _filename = match[2]; + } + } + file.name = _filename; + + // pre-webkit Opera doesn't set type property on the blob response + if (!file.type) { + file.type = Mime.getFileMime(_filename); + } + return file; + + case 'json': + if (!Env.can('return_response_type', 'json')) { + return _xhr.status === 200 ? parseJSON(_xhr.responseText) : null; + } + return _xhr.response; + + case 'document': + return _getDocument(_xhr); + + default: + return _xhr.responseText !== '' ? _xhr.responseText : null; // against the specs, but for consistency across the runtimes + } + } catch(ex) { + return null; + } + }, + + getAllResponseHeaders: function() { + try { + return _xhr.getAllResponseHeaders(); + } catch(ex) {} + return ''; + }, + + abort: function() { + if (_xhr) { + _xhr.abort(); + } + }, + + destroy: function() { + self = _filename = null; + } + }); + + + // here we go... ugly fix for ugly bug + function _preloadAndSend(meta, data) { + var target = this, blob, fr; + + // get original blob + blob = data.getBlob().getSource(); + + // preload blob in memory to be sent as binary string + fr = new window.FileReader(); + fr.onload = function() { + // overwrite original blob + data.append(data.getBlobName(), new Blob(null, { + type: blob.type, + data: fr.result + })); + // invoke send operation again + self.send.call(target, meta, data); + }; + fr.readAsBinaryString(blob); + } + + + function _getNativeXHR() { + if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.version < 8)) { // IE7 has native XHR but it's buggy + return new window.XMLHttpRequest(); + } else { + return (function() { + var progIDs = ['Msxml2.XMLHTTP.6.0', 'Microsoft.XMLHTTP']; // if 6.0 available, use it, otherwise failback to default 3.0 + for (var i = 0; i < progIDs.length; i++) { + try { + return new ActiveXObject(progIDs[i]); + } catch (ex) {} + } + })(); + } + } + + // @credits Sergey Ilinsky (http://www.ilinsky.com/) + function _getDocument(xhr) { + var rXML = xhr.responseXML; + var rText = xhr.responseText; + + // Try parsing responseText (@see: http://www.ilinsky.com/articles/XMLHttpRequest/#bugs-ie-responseXML-content-type) + if (Env.browser === 'IE' && rText && rXML && !rXML.documentElement && /[^\/]+\/[^\+]+\+xml/.test(xhr.getResponseHeader("Content-Type"))) { + rXML = new window.ActiveXObject("Microsoft.XMLDOM"); + rXML.async = false; + rXML.validateOnParse = false; + rXML.loadXML(rText); + } + + // Check if there is no error in document + if (rXML) { + if ((Env.browser === 'IE' && rXML.parseError !== 0) || !rXML.documentElement || rXML.documentElement.tagName === "parsererror") { + return null; + } + } + return rXML; + } + + + function _prepareMultipart(fd) { + var boundary = '----moxieboundary' + new Date().getTime() + , dashdash = '--' + , crlf = '\r\n' + , multipart = '' + , I = this.getRuntime() + ; + + if (!I.can('send_binary_string')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); + + // append multipart parameters + fd.each(function(value, name) { + // Firefox 3.6 failed to convert multibyte characters to UTF-8 in sendAsBinary(), + // so we try it here ourselves with: unescape(encodeURIComponent(value)) + if (value instanceof Blob) { + // Build RFC2388 blob + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"; filename="' + unescape(encodeURIComponent(value.name || 'blob')) + '"' + crlf + + 'Content-Type: ' + value.type + crlf + crlf + + value.getSource() + crlf; + } else { + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf + + unescape(encodeURIComponent(value)) + crlf; + } + }); + + multipart += dashdash + boundary + dashdash + crlf; + + return multipart; + } + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html5/utils/BinaryReader.js + +/** + * BinaryReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/utils/BinaryReader +@private +*/ +define("moxie/runtime/html5/utils/BinaryReader", [], function() { + return function() { + var II = false, bin; + + // Private functions + function read(idx, size) { + var mv = II ? 0 : -8 * (size - 1), sum = 0, i; + + for (i = 0; i < size; i++) { + sum |= (bin.charCodeAt(idx + i) << Math.abs(mv + i*8)); + } + + return sum; + } + + function putstr(segment, idx, length) { + length = arguments.length === 3 ? length : bin.length - idx - 1; + bin = bin.substr(0, idx) + segment + bin.substr(length + idx); + } + + function write(idx, num, size) { + var str = '', mv = II ? 0 : -8 * (size - 1), i; + + for (i = 0; i < size; i++) { + str += String.fromCharCode((num >> Math.abs(mv + i*8)) & 255); + } + + putstr(str, idx, size); + } + + // Public functions + return { + II: function(order) { + if (order === undefined) { + return II; + } else { + II = order; + } + }, + + init: function(binData) { + II = false; + bin = binData; + }, + + SEGMENT: function(idx, length, segment) { + switch (arguments.length) { + case 1: + return bin.substr(idx, bin.length - idx - 1); + case 2: + return bin.substr(idx, length); + case 3: + putstr(segment, idx, length); + break; + default: return bin; + } + }, + + BYTE: function(idx) { + return read(idx, 1); + }, + + SHORT: function(idx) { + return read(idx, 2); + }, + + LONG: function(idx, num) { + if (num === undefined) { + return read(idx, 4); + } else { + write(idx, num, 4); + } + }, + + SLONG: function(idx) { // 2's complement notation + var num = read(idx, 4); + + return (num > 2147483647 ? num - 4294967296 : num); + }, + + STRING: function(idx, size) { + var str = ''; + + for (size += idx; idx < size; idx++) { + str += String.fromCharCode(read(idx, 1)); + } + + return str; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/JPEGHeaders.js + +/** + * JPEGHeaders.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEGHeaders +@private +*/ +define("moxie/runtime/html5/image/JPEGHeaders", [ + "moxie/runtime/html5/utils/BinaryReader" +], function(BinaryReader) { + + return function JPEGHeaders(data) { + var headers = [], read, idx, marker, length = 0; + + read = new BinaryReader(); + read.init(data); + + // Check if data is jpeg + if (read.SHORT(0) !== 0xFFD8) { + return; + } + + idx = 2; + + while (idx <= data.length) { + marker = read.SHORT(idx); + + // omit RST (restart) markers + if (marker >= 0xFFD0 && marker <= 0xFFD7) { + idx += 2; + continue; + } + + // no headers allowed after SOS marker + if (marker === 0xFFDA || marker === 0xFFD9) { + break; + } + + length = read.SHORT(idx + 2) + 2; + + // APPn marker detected + if (marker >= 0xFFE1 && marker <= 0xFFEF) { + headers.push({ + hex: marker, + name: 'APP' + (marker & 0x000F), + start: idx, + length: length, + segment: read.SEGMENT(idx, length) + }); + } + + idx += length; + } + + read.init(null); // free memory + + return { + headers: headers, + + restore: function(data) { + var max, i; + + read.init(data); + + idx = read.SHORT(2) == 0xFFE0 ? 4 + read.SHORT(4) : 2; + + for (i = 0, max = headers.length; i < max; i++) { + read.SEGMENT(idx, 0, headers[i].segment); + idx += headers[i].length; + } + + data = read.SEGMENT(); + read.init(null); + return data; + }, + + strip: function(data) { + var headers, jpegHeaders, i; + + jpegHeaders = new JPEGHeaders(data); + headers = jpegHeaders.headers; + jpegHeaders.purge(); + + read.init(data); + + i = headers.length; + while (i--) { + read.SEGMENT(headers[i].start, headers[i].length, ''); + } + + data = read.SEGMENT(); + read.init(null); + return data; + }, + + get: function(name) { + var array = []; + + for (var i = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + array.push(headers[i].segment); + } + } + return array; + }, + + set: function(name, segment) { + var array = [], i, ii, max; + + if (typeof(segment) === 'string') { + array.push(segment); + } else { + array = segment; + } + + for (i = ii = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + headers[i].segment = array[ii]; + headers[i].length = array[ii].length; + ii++; + } + if (ii >= array.length) { + break; + } + } + }, + + purge: function() { + headers = []; + read.init(null); + read = null; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/ExifParser.js + +/** + * ExifParser.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ExifParser +@private +*/ +define("moxie/runtime/html5/image/ExifParser", [ + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader" +], function(Basic, BinaryReader) { + + return function ExifParser() { + // Private ExifParser fields + var data, tags, Tiff, offsets = {}, tagDescs; + + data = new BinaryReader(); + + tags = { + tiff : { + /* + The image orientation viewed in terms of rows and columns. + + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + 0x0112: 'Orientation', + 0x010E: 'ImageDescription', + 0x010F: 'Make', + 0x0110: 'Model', + 0x0131: 'Software', + 0x8769: 'ExifIFDPointer', + 0x8825: 'GPSInfoIFDPointer' + }, + exif : { + 0x9000: 'ExifVersion', + 0xA001: 'ColorSpace', + 0xA002: 'PixelXDimension', + 0xA003: 'PixelYDimension', + 0x9003: 'DateTimeOriginal', + 0x829A: 'ExposureTime', + 0x829D: 'FNumber', + 0x8827: 'ISOSpeedRatings', + 0x9201: 'ShutterSpeedValue', + 0x9202: 'ApertureValue' , + 0x9207: 'MeteringMode', + 0x9208: 'LightSource', + 0x9209: 'Flash', + 0x920A: 'FocalLength', + 0xA402: 'ExposureMode', + 0xA403: 'WhiteBalance', + 0xA406: 'SceneCaptureType', + 0xA404: 'DigitalZoomRatio', + 0xA408: 'Contrast', + 0xA409: 'Saturation', + 0xA40A: 'Sharpness' + }, + gps : { + 0x0000: 'GPSVersionID', + 0x0001: 'GPSLatitudeRef', + 0x0002: 'GPSLatitude', + 0x0003: 'GPSLongitudeRef', + 0x0004: 'GPSLongitude' + } + }; + + tagDescs = { + 'ColorSpace': { + 1: 'sRGB', + 0: 'Uncalibrated' + }, + + 'MeteringMode': { + 0: 'Unknown', + 1: 'Average', + 2: 'CenterWeightedAverage', + 3: 'Spot', + 4: 'MultiSpot', + 5: 'Pattern', + 6: 'Partial', + 255: 'Other' + }, + + 'LightSource': { + 1: 'Daylight', + 2: 'Fliorescent', + 3: 'Tungsten', + 4: 'Flash', + 9: 'Fine weather', + 10: 'Cloudy weather', + 11: 'Shade', + 12: 'Daylight fluorescent (D 5700 - 7100K)', + 13: 'Day white fluorescent (N 4600 -5400K)', + 14: 'Cool white fluorescent (W 3900 - 4500K)', + 15: 'White fluorescent (WW 3200 - 3700K)', + 17: 'Standard light A', + 18: 'Standard light B', + 19: 'Standard light C', + 20: 'D55', + 21: 'D65', + 22: 'D75', + 23: 'D50', + 24: 'ISO studio tungsten', + 255: 'Other' + }, + + 'Flash': { + 0x0000: 'Flash did not fire.', + 0x0001: 'Flash fired.', + 0x0005: 'Strobe return light not detected.', + 0x0007: 'Strobe return light detected.', + 0x0009: 'Flash fired, compulsory flash mode', + 0x000D: 'Flash fired, compulsory flash mode, return light not detected', + 0x000F: 'Flash fired, compulsory flash mode, return light detected', + 0x0010: 'Flash did not fire, compulsory flash mode', + 0x0018: 'Flash did not fire, auto mode', + 0x0019: 'Flash fired, auto mode', + 0x001D: 'Flash fired, auto mode, return light not detected', + 0x001F: 'Flash fired, auto mode, return light detected', + 0x0020: 'No flash function', + 0x0041: 'Flash fired, red-eye reduction mode', + 0x0045: 'Flash fired, red-eye reduction mode, return light not detected', + 0x0047: 'Flash fired, red-eye reduction mode, return light detected', + 0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode', + 0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected', + 0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected', + 0x0059: 'Flash fired, auto mode, red-eye reduction mode', + 0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode', + 0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode' + }, + + 'ExposureMode': { + 0: 'Auto exposure', + 1: 'Manual exposure', + 2: 'Auto bracket' + }, + + 'WhiteBalance': { + 0: 'Auto white balance', + 1: 'Manual white balance' + }, + + 'SceneCaptureType': { + 0: 'Standard', + 1: 'Landscape', + 2: 'Portrait', + 3: 'Night scene' + }, + + 'Contrast': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + 'Saturation': { + 0: 'Normal', + 1: 'Low saturation', + 2: 'High saturation' + }, + + 'Sharpness': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + // GPS related + 'GPSLatitudeRef': { + N: 'North latitude', + S: 'South latitude' + }, + + 'GPSLongitudeRef': { + E: 'East longitude', + W: 'West longitude' + } + }; + + function extractTags(IFD_offset, tags2extract) { + var length = data.SHORT(IFD_offset), i, ii, + tag, type, count, tagOffset, offset, value, values = [], hash = {}; + + for (i = 0; i < length; i++) { + // Set binary reader pointer to beginning of the next tag + offset = tagOffset = IFD_offset + 12 * i + 2; + + tag = tags2extract[data.SHORT(offset)]; + + if (tag === undefined) { + continue; // Not the tag we requested + } + + type = data.SHORT(offset+=2); + count = data.LONG(offset+=2); + + offset += 4; + values = []; + + switch (type) { + case 1: // BYTE + case 7: // UNDEFINED + if (count > 4) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.BYTE(offset + ii); + } + + break; + + case 2: // STRING + if (count > 4) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + hash[tag] = data.STRING(offset, count - 1); + + continue; + + case 3: // SHORT + if (count > 2) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SHORT(offset + ii*2); + } + + break; + + case 4: // LONG + if (count > 1) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.LONG(offset + ii*4); + } + + break; + + case 5: // RATIONAL + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.LONG(offset + ii*4) / data.LONG(offset + ii*4 + 4); + } + + break; + + case 9: // SLONG + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SLONG(offset + ii*4); + } + + break; + + case 10: // SRATIONAL + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SLONG(offset + ii*4) / data.SLONG(offset + ii*4 + 4); + } + + break; + + default: + continue; + } + + value = (count == 1 ? values[0] : values); + + if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') { + hash[tag] = tagDescs[tag][value]; + } else { + hash[tag] = value; + } + } + + return hash; + } + + function getIFDOffsets() { + var idx = offsets.tiffHeader; + + // Set read order of multi-byte data + data.II(data.SHORT(idx) == 0x4949); + + // Check if always present bytes are indeed present + if (data.SHORT(idx+=2) !== 0x002A) { + return false; + } + + offsets.IFD0 = offsets.tiffHeader + data.LONG(idx += 2); + Tiff = extractTags(offsets.IFD0, tags.tiff); + + if ('ExifIFDPointer' in Tiff) { + offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer; + delete Tiff.ExifIFDPointer; + } + + if ('GPSInfoIFDPointer' in Tiff) { + offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer; + delete Tiff.GPSInfoIFDPointer; + } + return true; + } + + // At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported + function setTag(ifd, tag, value) { + var offset, length, tagOffset, valueOffset = 0; + + // If tag name passed translate into hex key + if (typeof(tag) === 'string') { + var tmpTags = tags[ifd.toLowerCase()]; + for (var hex in tmpTags) { + if (tmpTags[hex] === tag) { + tag = hex; + break; + } + } + } + offset = offsets[ifd.toLowerCase() + 'IFD']; + length = data.SHORT(offset); + + for (var i = 0; i < length; i++) { + tagOffset = offset + 12 * i + 2; + + if (data.SHORT(tagOffset) == tag) { + valueOffset = tagOffset + 8; + break; + } + } + + if (!valueOffset) { + return false; + } + + data.LONG(valueOffset, value); + return true; + } + + + // Public functions + return { + init: function(segment) { + // Reset internal data + offsets = { + tiffHeader: 10 + }; + + if (segment === undefined || !segment.length) { + return false; + } + + data.init(segment); + + // Check if that's APP1 and that it has EXIF + if (data.SHORT(0) === 0xFFE1 && data.STRING(4, 5).toUpperCase() === "EXIF\0") { + return getIFDOffsets(); + } + return false; + }, + + TIFF: function() { + return Tiff; + }, + + EXIF: function() { + var Exif; + + // Populate EXIF hash + Exif = extractTags(offsets.exifIFD, tags.exif); + + // Fix formatting of some tags + if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') { + for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { + exifVersion += String.fromCharCode(Exif.ExifVersion[i]); + } + Exif.ExifVersion = exifVersion; + } + + return Exif; + }, + + GPS: function() { + var GPS; + + GPS = extractTags(offsets.gpsIFD, tags.gps); + + // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..) + if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') { + GPS.GPSVersionID = GPS.GPSVersionID.join('.'); + } + + return GPS; + }, + + setExif: function(tag, value) { + // Right now only setting of width/height is possible + if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') {return false;} + + return setTag('exif', tag, value); + }, + + + getBinary: function() { + return data.SEGMENT(); + }, + + purge: function() { + data.init(null); + data = Tiff = null; + offsets = {}; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/JPEG.js + +/** + * JPEG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEG +@private +*/ +define("moxie/runtime/html5/image/JPEG", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEGHeaders", + "moxie/runtime/html5/utils/BinaryReader", + "moxie/runtime/html5/image/ExifParser" +], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) { + + function JPEG(binstr) { + var _binstr, _br, _hm, _ep, _info, hasExif; + + function _getDimensions() { + var idx = 0, marker, length; + + // examine all through the end, since some images might have very large APP segments + while (idx <= _binstr.length) { + marker = _br.SHORT(idx += 2); + + if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn + idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte) + return { + height: _br.SHORT(idx), + width: _br.SHORT(idx += 2) + }; + } + length = _br.SHORT(idx += 2); + idx += length - 2; + } + return null; + } + + _binstr = binstr; + + _br = new BinaryReader(); + _br.init(_binstr); + + // check if it is jpeg + if (_br.SHORT(0) !== 0xFFD8) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + // backup headers + _hm = new JPEGHeaders(binstr); + + // extract exif info + _ep = new ExifParser(); + hasExif = !!_ep.init(_hm.get('app1')[0]); + + // get dimensions + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/jpeg', + + size: _binstr.length, + + width: _info && _info.width || 0, + + height: _info && _info.height || 0, + + setExif: function(tag, value) { + if (!hasExif) { + return false; // or throw an exception + } + + if (Basic.typeOf(tag) === 'object') { + Basic.each(tag, function(value, tag) { + _ep.setExif(tag, value); + }); + } else { + _ep.setExif(tag, value); + } + + // update internal headers + _hm.set('app1', _ep.getBinary()); + }, + + writeHeaders: function() { + if (!arguments.length) { + // if no arguments passed, update headers internally + return (_binstr = _hm.restore(_binstr)); + } + return _hm.restore(arguments[0]); + }, + + stripHeaders: function(binstr) { + return _hm.strip(binstr); + }, + + purge: function() { + _purge.call(this); + } + }); + + if (hasExif) { + this.meta = { + tiff: _ep.TIFF(), + exif: _ep.EXIF(), + gps: _ep.GPS() + }; + } + + function _purge() { + if (!_ep || !_hm || !_br) { + return; // ignore any repeating purge requests + } + _ep.purge(); + _hm.purge(); + _br.init(null); + _binstr = _info = _hm = _ep = _br = null; + } + } + + return JPEG; +}); + +// Included from: src/javascript/runtime/html5/image/PNG.js + +/** + * PNG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/PNG +@private +*/ +define("moxie/runtime/html5/image/PNG", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader" +], function(x, Basic, BinaryReader) { + + function PNG(binstr) { + var _binstr, _br, _hm, _ep, _info; + + _binstr = binstr; + + _br = new BinaryReader(); + _br.init(_binstr); + + // check if it's png + (function() { + var idx = 0, i = 0 + , signature = [0x8950, 0x4E47, 0x0D0A, 0x1A0A] + ; + + for (i = 0; i < signature.length; i++, idx += 2) { + if (signature[i] != _br.SHORT(idx)) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + } + }()); + + function _getDimensions() { + var chunk, idx; + + chunk = _getChunkAt.call(this, 8); + + if (chunk.type == 'IHDR') { + idx = chunk.start; + return { + width: _br.LONG(idx), + height: _br.LONG(idx += 4) + }; + } + return null; + } + + function _purge() { + if (!_br) { + return; // ignore any repeating purge requests + } + _br.init(null); + _binstr = _info = _hm = _ep = _br = null; + } + + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/png', + + size: _binstr.length, + + width: _info.width, + + height: _info.height, + + purge: function() { + _purge.call(this); + } + }); + + // for PNG we can safely trigger purge automatically, as we do not keep any data for later + _purge.call(this); + + function _getChunkAt(idx) { + var length, type, start, CRC; + + length = _br.LONG(idx); + type = _br.STRING(idx += 4, 4); + start = idx += 4; + CRC = _br.LONG(idx + length); + + return { + length: length, + type: type, + start: start, + CRC: CRC + }; + } + } + + return PNG; +}); + +// Included from: src/javascript/runtime/html5/image/ImageInfo.js + +/** + * ImageInfo.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ImageInfo +@private +*/ +define("moxie/runtime/html5/image/ImageInfo", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEG", + "moxie/runtime/html5/image/PNG" +], function(Basic, x, JPEG, PNG) { + /** + Optional image investigation tool for HTML5 runtime. Provides the following features: + - ability to distinguish image type (JPEG or PNG) by signature + - ability to extract image width/height directly from it's internals, without preloading in memory (fast) + - ability to extract APP headers from JPEGs (Exif, GPS, etc) + - ability to replace width/height tags in extracted JPEG headers + - ability to restore APP headers, that were for example stripped during image manipulation + + @class ImageInfo + @constructor + @param {String} binstr Image source as binary string + */ + return function(binstr) { + var _cs = [JPEG, PNG], _img; + + // figure out the format, throw: ImageError.WRONG_FORMAT if not supported + _img = (function() { + for (var i = 0; i < _cs.length; i++) { + try { + return new _cs[i](binstr); + } catch (ex) { + // console.info(ex); + } + } + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + }()); + + Basic.extend(this, { + /** + Image Mime Type extracted from it's depths + + @property type + @type {String} + @default '' + */ + type: '', + + /** + Image size in bytes + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Image width extracted from image source + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Image height extracted from image source + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Sets Exif tag. Currently applicable only for width and height tags. Obviously works only with JPEGs. + + @method setExif + @param {String} tag Tag to set + @param {Mixed} value Value to assign to the tag + */ + setExif: function() {}, + + /** + Restores headers to the source. + + @method writeHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + writeHeaders: function(data) { + return data; + }, + + /** + Strip all headers from the source. + + @method stripHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + stripHeaders: function(data) { + return data; + }, + + /** + Dispose resources. + + @method purge + */ + purge: function() {} + }); + + Basic.extend(this, _img); + + this.purge = function() { + _img.purge(); + _img = null; + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/MegaPixel.js + +/** +(The MIT License) + +Copyright (c) 2012 Shinichi Tomita ; + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** + * Mega pixel image rendering library for iOS6 Safari + * + * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel), + * which causes unexpected subsampling when drawing it in canvas. + * By using this library, you can safely render the image with proper stretching. + * + * Copyright (c) 2012 Shinichi Tomita + * Released under the MIT license + */ + +/** +@class moxie/runtime/html5/image/MegaPixel +@private +*/ +define("moxie/runtime/html5/image/MegaPixel", [], function() { + + /** + * Rendering image element (with resizing) into the canvas element + */ + function renderImageToCanvas(img, canvas, options) { + var iw = img.naturalWidth, ih = img.naturalHeight; + var width = options.width, height = options.height; + var x = options.x || 0, y = options.y || 0; + var ctx = canvas.getContext('2d'); + if (detectSubsampling(img)) { + iw /= 2; + ih /= 2; + } + var d = 1024; // size of tiling canvas + var tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = tmpCanvas.height = d; + var tmpCtx = tmpCanvas.getContext('2d'); + var vertSquashRatio = detectVerticalSquash(img, iw, ih); + var sy = 0; + while (sy < ih) { + var sh = sy + d > ih ? ih - sy : d; + var sx = 0; + while (sx < iw) { + var sw = sx + d > iw ? iw - sx : d; + tmpCtx.clearRect(0, 0, d, d); + tmpCtx.drawImage(img, -sx, -sy); + var dx = (sx * width / iw + x) << 0; + var dw = Math.ceil(sw * width / iw); + var dy = (sy * height / ih / vertSquashRatio + y) << 0; + var dh = Math.ceil(sh * height / ih / vertSquashRatio); + ctx.drawImage(tmpCanvas, 0, 0, sw, sh, dx, dy, dw, dh); + sx += d; + } + sy += d; + } + tmpCanvas = tmpCtx = null; + } + + /** + * Detect subsampling in loaded image. + * In iOS, larger images than 2M pixels may be subsampled in rendering. + */ + function detectSubsampling(img) { + var iw = img.naturalWidth, ih = img.naturalHeight; + if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, -iw + 1, 0); + // subsampled image becomes half smaller in rendering size. + // check alpha channel value to confirm image is covering edge pixel or not. + // if alpha value is 0 image is not covering, hence subsampled. + return ctx.getImageData(0, 0, 1, 1).data[3] === 0; + } else { + return false; + } + } + + + /** + * Detecting vertical squash in loaded image. + * Fixes a bug which squash image vertically while drawing into canvas for some images. + */ + function detectVerticalSquash(img, iw, ih) { + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = ih; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, 1, ih).data; + // search image edge pixel position in case it is squashed vertically. + var sy = 0; + var ey = ih; + var py = ih; + while (py > sy) { + var alpha = data[(py - 1) * 4 + 3]; + if (alpha === 0) { + ey = py; + } else { + sy = py; + } + py = (ey + sy) >> 1; + } + canvas = null; + var ratio = (py / ih); + return (ratio === 0) ? 1 : ratio; + } + + return { + isSubsampled: detectSubsampling, + renderTo: renderImageToCanvas + }; +}); + +// Included from: src/javascript/runtime/html5/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/Image +@private +*/ +define("moxie/runtime/html5/image/Image", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/utils/Encode", + "moxie/file/Blob", + "moxie/runtime/html5/image/ImageInfo", + "moxie/runtime/html5/image/MegaPixel", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, x, Encode, Blob, ImageInfo, MegaPixel, Mime, Env) { + + function HTML5Image() { + var me = this + , _img, _imgInfo, _canvas, _binStr, _blob + , _modified = false // is set true whenever image is modified + , _preserveHeaders = true + ; + + Basic.extend(this, { + loadFromBlob: function(blob) { + var comp = this, I = comp.getRuntime() + , asBinary = arguments.length > 1 ? arguments[1] : true + ; + + if (!I.can('access_binary')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _blob = blob; + + if (blob.isDetached()) { + _binStr = blob.getSource(); + _preload.call(this, _binStr); + return; + } else { + _readAsDataUrl.call(this, blob.getSource(), function(dataUrl) { + if (asBinary) { + _binStr = _toBinary(dataUrl); + } + _preload.call(comp, dataUrl); + }); + } + }, + + loadFromImage: function(img, exact) { + this.meta = img.meta; + + _blob = new Blob(null, { + name: img.name, + size: img.size, + type: img.type + }); + + _preload.call(this, exact ? (_binStr = img.getAsBinaryString()) : img.getAsDataURL()); + }, + + getInfo: function() { + var I = this.getRuntime(), info; + + if (!_imgInfo && _binStr && I.can('access_image_binary')) { + _imgInfo = new ImageInfo(_binStr); + } + + info = { + width: _getImg().width || 0, + height: _getImg().height || 0, + type: _blob.type || Mime.getFileMime(_blob.name), + size: _binStr && _binStr.length || _blob.size || 0, + name: _blob.name || '', + meta: _imgInfo && _imgInfo.meta || this.meta || {} + }; + + return info; + }, + + downsize: function() { + _downsize.apply(this, arguments); + }, + + getAsCanvas: function() { + if (_canvas) { + _canvas.id = this.uid + '_canvas'; + } + return _canvas; + }, + + getAsBlob: function(type, quality) { + if (type !== this.type) { + // if different mime type requested prepare image for conversion + _downsize.call(this, this.width, this.height, false); + } + return new Blob(null, { + type: type, + data: me.getAsBinaryString.call(this, type, quality) + }); + }, + + getAsDataURL: function(type) { + var quality = arguments[1] || 90; + + // if image has not been modified, return the source right away + if (!_modified) { + return _img.src; + } + + if ('image/jpeg' !== type) { + return _canvas.toDataURL('image/png'); + } else { + try { + // older Geckos used to result in an exception on quality argument + return _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + return _canvas.toDataURL('image/jpeg'); + } + } + }, + + getAsBinaryString: function(type, quality) { + // if image has not been modified, return the source right away + if (!_modified) { + // if image was not loaded from binary string + if (!_binStr) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } + return _binStr; + } + + if ('image/jpeg' !== type) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } else { + var dataUrl; + + // if jpeg + if (!quality) { + quality = 90; + } + + try { + // older Geckos used to result in an exception on quality argument + dataUrl = _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + dataUrl = _canvas.toDataURL('image/jpeg'); + } + + _binStr = _toBinary(dataUrl); + + if (_imgInfo) { + _binStr = _imgInfo.stripHeaders(_binStr); + + if (_preserveHeaders) { + // update dimensions info in exif + if (_imgInfo.meta && _imgInfo.meta.exif) { + _imgInfo.setExif({ + PixelXDimension: this.width, + PixelYDimension: this.height + }); + } + + // re-inject the headers + _binStr = _imgInfo.writeHeaders(_binStr); + } + + // will be re-created from fresh on next getInfo call + _imgInfo.purge(); + _imgInfo = null; + } + } + + _modified = false; + + return _binStr; + }, + + destroy: function() { + me = null; + _purge.call(this); + this.getRuntime().getShim().removeInstance(this.uid); + } + }); + + + function _getImg() { + if (!_canvas && !_img) { + throw new x.ImageError(x.DOMException.INVALID_STATE_ERR); + } + return _canvas || _img; + } + + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + + + function _toDataUrl(str, type) { + return 'data:' + (type || '') + ';base64,' + Encode.btoa(str); + } + + + function _preload(str) { + var comp = this; + + _img = new Image(); + _img.onerror = function() { + _purge.call(this); + comp.trigger('error', new x.ImageError(x.ImageError.WRONG_FORMAT)); + }; + _img.onload = function() { + comp.trigger('load'); + }; + + _img.src = /^data:[^;]*;base64,/.test(str) ? str : _toDataUrl(str, _blob.type); + } + + + function _readAsDataUrl(file, callback) { + var comp = this, fr; + + // use FileReader if it's available + if (window.FileReader) { + fr = new FileReader(); + fr.onload = function() { + callback(this.result); + }; + fr.onerror = function() { + comp.trigger('error', new x.FileException(x.FileException.NOT_READABLE_ERR)); + }; + fr.readAsDataURL(file); + } else { + return callback(file.getAsDataURL()); + } + } + + function _downsize(width, height, crop, preserveHeaders) { + var self = this, ctx, scale, mathFn, x, y, img, imgWidth, imgHeight, orientation; + + _preserveHeaders = preserveHeaders; // we will need to check this on export + + // take into account orientation tag + orientation = (this.meta && this.meta.tiff && this.meta.tiff.Orientation) || 1; + + if (Basic.inArray(orientation, [5,6,7,8]) !== -1) { // values that require 90 degree rotation + // swap dimensions + var mem = width; + width = height; + height = mem; + } + + img = _getImg(); + + // unify dimensions + mathFn = !crop ? Math.min : Math.max; + scale = mathFn(width/img.width, height/img.height); + + // we only downsize here + if (scale > 1 && (!crop || preserveHeaders)) { // when cropping one of dimensions may still exceed max, so process it anyway + this.trigger('Resize'); + return; + } + + imgWidth = Math.round(img.width * scale); + imgHeight = Math.round(img.height * scale); + + // prepare canvas if necessary + if (!_canvas) { + _canvas = document.createElement("canvas"); + } + + ctx = _canvas.getContext('2d'); + + // scale image and canvas + if (crop) { + _canvas.width = width; + _canvas.height = height; + } else { + _canvas.width = imgWidth; + _canvas.height = imgHeight; + } + + // if dimensions of the resulting image still larger than canvas, center it + x = imgWidth > _canvas.width ? Math.round((imgWidth - _canvas.width) / 2) : 0; + y = imgHeight > _canvas.height ? Math.round((imgHeight - _canvas.height) / 2) : 0; + + if (!_preserveHeaders) { + _rotateToOrientaion(_canvas.width, _canvas.height, orientation); + } + + _drawToCanvas.call(this, img, _canvas, -x, -y, imgWidth, imgHeight); + + this.width = _canvas.width; + this.height = _canvas.height; + + _modified = true; + self.trigger('Resize'); + } + + + function _drawToCanvas(img, canvas, x, y, w, h) { + if (Env.OS === 'iOS') { + // avoid squish bug in iOS6 + MegaPixel.renderTo(img, canvas, { width: w, height: h, x: x, y: y }); + } else { + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, x, y, w, h); + } + } + + + /** + * Transform canvas coordination according to specified frame size and orientation + * Orientation value is from EXIF tag + * @author Shinichi Tomita + */ + function _rotateToOrientaion(width, height, orientation) { + switch (orientation) { + case 5: + case 6: + case 7: + case 8: + _canvas.width = height; + _canvas.height = width; + break; + default: + _canvas.width = width; + _canvas.height = height; + } + + /** + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + + var ctx = _canvas.getContext('2d'); + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180 rotate left + ctx.translate(width, height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(width, -height); + ctx.scale(-1, 1); + break; + case 8: + // 90 rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-width, 0); + break; + } + } + + + function _purge() { + if (_imgInfo) { + _imgInfo.purge(); + _imgInfo = null; + } + _binStr = _img = _canvas = _blob = null; + _modified = false; + } + } + + return (extensions.Image = HTML5Image); +}); + +// Included from: src/javascript/runtime/flash/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Flash runtime. + +@class moxie/runtime/flash/Runtime +@private +*/ +define("moxie/runtime/flash/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = 'flash', extensions = {}; + + /** + Get the version of the Flash Player + + @method getShimVersion + @private + @return {Number} Flash Player version + */ + function getShimVersion() { + var version; + + try { + version = navigator.plugins['Shockwave Flash']; + version = version.description; + } catch (e1) { + try { + version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); + } catch (e2) { + version = '0.0'; + } + } + version = version.match(/\d+/g); + return parseFloat(version[0] + '.' + version[1]); + } + + /** + Constructor for the Flash Runtime + + @class FlashRuntime + @extends Runtime + */ + function FlashRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ swf_url: Env.swf_url }, options); + + Runtime.call(this, options, type, { + access_binary: function(value) { + return value && I.mode === 'browser'; + }, + access_image_binary: function(value) { + return value && I.mode === 'browser'; + }, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: function() { + return I.mode === 'client'; + }, + resize_image: Runtime.capTrue, + return_response_headers: false, + return_response_type: function(responseType) { + return !Basic.arrayDiff(responseType, ['', 'text', 'json', 'document']) || I.mode === 'browser'; + }, + return_status_code: function(code) { + return I.mode === 'browser' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: function(value) { + return value && I.mode === 'browser'; + }, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'browser'; + }, + send_multipart: Runtime.capTrue, + slice_blob: Runtime.capTrue, + stream_upload: function(value) { + return value && I.mode === 'browser'; + }, + summon_file_dialog: false, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) <= 2097152 || I.mode === 'client'; + }, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + access_binary: function(value) { + return value ? 'browser' : 'client'; + }, + access_image_binary: function(value) { + return value ? 'browser' : 'client'; + }, + report_upload_progress: function(value) { + return value ? 'browser' : 'client'; + }, + return_response_type: function(responseType) { + return Basic.arrayDiff(responseType, ['', 'text', 'json', 'document']) ? 'browser' : ['client', 'browser']; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'browser' : ['client', 'browser']; + }, + send_binary_string: function(value) { + return value ? 'browser' : 'client'; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'browser' : 'client'; + }, + stream_upload: function(value) { + return value ? 'client' : 'browser'; + }, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) >= 2097152 ? 'client' : 'browser'; + } + }, 'client'); + + + // minimal requirement Flash Player 10 + if (getShimVersion() < 10) { + this.mode = false; // with falsy mode, runtime won't operable, no matter what the mode was before + } + + + Basic.extend(this, { + + getShim: function() { + return Dom.get(this.uid); + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init: function() { + var html, el, container; + + container = this.getShimContainer(); + + // if not the minimal height, shims are not initialized in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) + Basic.extend(container.style, { + position: 'absolute', + top: '-8px', + left: '-8px', + width: '9px', + height: '9px', + overflow: 'hidden' + }); + + // insert flash object + html = '' + + '' + + '' + + '' + + ''; + + if (Env.browser === 'IE') { + el = document.createElement('div'); + container.appendChild(el); + el.outerHTML = html; + el = container = null; // just in case + } else { + container.innerHTML = html; + } + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + } + }, 5000); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, FlashRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/flash/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/Blob +@private +*/ +define("moxie/runtime/flash/file/Blob", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var FlashBlob = { + slice: function(blob, start, end, type) { + var self = this.getRuntime(); + + if (start < 0) { + start = Math.max(blob.size + start, 0); + } else if (start > 0) { + start = Math.min(start, blob.size); + } + + if (end < 0) { + end = Math.max(blob.size + end, 0); + } else if (end > 0) { + end = Math.min(end, blob.size); + } + + blob = self.shimExec.call(this, 'Blob', 'slice', start, end, type || ''); + + if (blob) { + blob = new Blob(self.uid, blob); + } + return blob; + } + }; + + return (extensions.Blob = FlashBlob); +}); + +// Included from: src/javascript/runtime/flash/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileInput +@private +*/ +define("moxie/runtime/flash/file/FileInput", [ + "moxie/runtime/flash/Runtime" +], function(extensions) { + + var FileInput = { + init: function(options) { + this.getRuntime().shimExec.call(this, 'FileInput', 'init', { + name: options.name, + accept: options.accept, + multiple: options.multiple + }); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/flash/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReader +@private +*/ +define("moxie/runtime/flash/file/FileReader", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + var _result = ''; + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReader = { + read: function(op, blob) { + var target = this, self = target.getRuntime(); + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + _result = 'data:' + (blob.type || '') + ';base64,'; + } + + target.bind('Progress', function(e, data) { + if (data) { + _result += _formatData(data, op); + } + }); + + return self.shimExec.call(this, 'FileReader', 'readAsBase64', blob.uid); + }, + + getResult: function() { + return _result; + }, + + destroy: function() { + _result = null; + } + }; + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/flash/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReaderSync +@private +*/ +define("moxie/runtime/flash/file/FileReaderSync", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReaderSync = { + read: function(op, blob) { + var result, self = this.getRuntime(); + + result = self.shimExec.call(this, 'FileReaderSync', 'readAsBase64', blob.uid); + if (!result) { + return null; // or throw ex + } + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + result = 'data:' + (blob.type || '') + ';base64,' + result; + } + + return _formatData(result, op, blob.type); + } + }; + + return (extensions.FileReaderSync = FileReaderSync); +}); + +// Included from: src/javascript/runtime/flash/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/flash/xhr/XMLHttpRequest", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/file/Blob", + "moxie/file/File", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/runtime/Transporter", + "moxie/core/JSON" +], function(extensions, Basic, Blob, File, FileReaderSync, FormData, Transporter, parseJSON) { + + var XMLHttpRequest = { + + send: function(meta, data) { + var target = this, self = target.getRuntime(); + + function send() { + meta.transport = self.mode; + self.shimExec.call(target, 'XMLHttpRequest', 'send', meta, data); + } + + + function appendBlob(name, blob) { + self.shimExec.call(target, 'XMLHttpRequest', 'appendBlob', name, blob.uid); + data = null; + send(); + } + + + function attachBlob(blob, cb) { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + cb(this.result); + }); + + tr.transport(blob.getSource(), blob.type, { + ruid: self.uid + }); + } + + // copy over the headers if any + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + self.shimExec.call(target, 'XMLHttpRequest', 'setRequestHeader', header, value.toString()); // Silverlight doesn't accept integers into the arguments of type object + }); + } + + // transfer over multipart params and blob itself + if (data instanceof FormData) { + var blobField; + data.each(function(value, name) { + if (value instanceof Blob) { + blobField = name; + } else { + self.shimExec.call(target, 'XMLHttpRequest', 'append', name, value); + } + }); + + if (!data.hasBlob()) { + data = null; + send(); + } else { + var blob = data.getBlob(); + if (blob.isDetached()) { + attachBlob(blob, function(attachedBlob) { + blob.destroy(); + appendBlob(blobField, attachedBlob); + }); + } else { + appendBlob(blobField, blob); + } + } + } else if (data instanceof Blob) { + if (data.isDetached()) { + attachBlob(data, function(attachedBlob) { + data.destroy(); + data = attachedBlob.uid; + send(); + }); + } else { + data = data.uid; + send(); + } + } else { + send(); + } + }, + + getResponse: function(responseType) { + var frs, blob, self = this.getRuntime(); + + blob = self.shimExec.call(this, 'XMLHttpRequest', 'getResponseAsBlob'); + + if (blob) { + blob = new File(self.uid, blob); + + if ('blob' === responseType) { + return blob; + } else if (!!~Basic.inArray(responseType, ["", "text"])) { + frs = new FileReaderSync(); + return frs.readAsText(blob); + } else if ('arraybuffer' === responseType) { + + // do something + + } else if ('json' === responseType) { + frs = new FileReaderSync(); + + try { + return parseJSON(frs.readAsText(blob)); + } catch (ex) { + return null; + } + } + } + + return null; + }, + + abort: function(upload_complete_flag) { + var self = this.getRuntime(); + + self.shimExec.call(this, 'XMLHttpRequest', 'abort'); + + this.dispatchEvent('readystatechange'); + // this.dispatchEvent('progress'); + this.dispatchEvent('abort'); + + if (!upload_complete_flag) { + // this.dispatchEvent('uploadprogress'); + } + } + }; + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/flash/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/runtime/Transporter +@private +*/ +define("moxie/runtime/flash/runtime/Transporter", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var Transporter = { + getAsBlob: function(type) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Transporter', 'getAsBlob', type) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + } + }; + + return (extensions.Transporter = Transporter); +}); + +// Included from: src/javascript/runtime/flash/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/image/Image +@private +*/ +define("moxie/runtime/flash/image/Image", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/Transporter", + "moxie/file/Blob", + "moxie/file/FileReaderSync" +], function(extensions, Basic, Transporter, Blob, FileReaderSync) { + + var Image = { + loadFromBlob: function(blob) { + var comp = this, self = comp.getRuntime(); + + function exec(srcBlob) { + self.shimExec.call(comp, 'Image', 'loadFromBlob', srcBlob.uid); + comp = self = null; + } + + if (blob.isDetached()) { // binary string + var tr = new Transporter(); + tr.bind("TransportingComplete", function() { + exec(tr.result.getSource()); + }); + tr.transport(blob.getSource(), blob.type, { ruid: self.uid }); + } else { + exec(blob.getSource()); + } + }, + + loadFromImage: function(img) { + var self = this.getRuntime(); + return self.shimExec.call(this, 'Image', 'loadFromImage', img.uid); + }, + + getAsBlob: function(type, quality) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Image', 'getAsBlob', type, quality) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + }, + + getAsDataURL: function() { + var self = this.getRuntime() + , blob = self.Image.getAsBlob.apply(this, arguments) + , frs + ; + if (!blob) { + return null; + } + frs = new FileReaderSync(); + return frs.readAsDataURL(blob); + } + }; + + return (extensions.Image = Image); +}); + +// Included from: src/javascript/runtime/silverlight/Runtime.js + +/** + * RunTime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Silverlight runtime. + +@class moxie/runtime/silverlight/Runtime +@private +*/ +define("moxie/runtime/silverlight/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = "silverlight", extensions = {}; + + function isInstalled(version) { + var isVersionSupported = false, control = null, actualVer, + actualVerArray, reqVerArray, requiredVersionPart, actualVersionPart, index = 0; + + try { + try { + control = new ActiveXObject('AgControl.AgControl'); + + if (control.IsVersionSupported(version)) { + isVersionSupported = true; + } + + control = null; + } catch (e) { + var plugin = navigator.plugins["Silverlight Plug-In"]; + + if (plugin) { + actualVer = plugin.description; + + if (actualVer === "1.0.30226.2") { + actualVer = "2.0.30226.2"; + } + + actualVerArray = actualVer.split("."); + + while (actualVerArray.length > 3) { + actualVerArray.pop(); + } + + while ( actualVerArray.length < 4) { + actualVerArray.push(0); + } + + reqVerArray = version.split("."); + + while (reqVerArray.length > 4) { + reqVerArray.pop(); + } + + do { + requiredVersionPart = parseInt(reqVerArray[index], 10); + actualVersionPart = parseInt(actualVerArray[index], 10); + index++; + } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); + + if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) { + isVersionSupported = true; + } + } + } + } catch (e2) { + isVersionSupported = false; + } + + return isVersionSupported; + } + + /** + Constructor for the Silverlight Runtime + + @class SilverlightRuntime + @extends Runtime + */ + function SilverlightRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ xap_url: Env.xap_url }, options); + + Runtime.call(this, options, type, { + access_binary: Runtime.capTrue, + access_image_binary: Runtime.capTrue, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: Runtime.capTrue, + resize_image: Runtime.capTrue, + return_response_headers: function(value) { + return value && I.mode === 'client'; + }, + return_response_type: Runtime.capTrue, + return_status_code: function(code) { + return I.mode === 'client' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: Runtime.capTrue, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'client'; + }, + send_multipart: Runtime.capTrue, + slice_blob: Runtime.capTrue, + stream_upload: true, + summon_file_dialog: false, + upload_filesize: Runtime.capTrue, + use_http_method: function(methods) { + return I.mode === 'client' || !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + return_response_headers: function(value) { + return value ? 'client' : 'browser'; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'client' : ['client', 'browser']; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'client' : 'browser'; + }, + use_http_method: function(methods) { + return Basic.arrayDiff(methods, ['GET', 'POST']) ? 'client' : ['client', 'browser']; + } + }); + + + // minimal requirement + if (!isInstalled('2.0.31005.0') || Env.browser === 'Opera') { + this.mode = false; + } + + + Basic.extend(this, { + getShim: function() { + return Dom.get(this.uid).content.Moxie; + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init : function() { + var container; + + container = this.getShimContainer(); + + container.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + ''; + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + } + }, Env.OS !== 'Windows'? 10000 : 5000); // give it more time to initialize in non Windows OS (like Mac) + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, SilverlightRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/silverlight/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/Blob +@private +*/ +define("moxie/runtime/silverlight/file/Blob", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/Blob" +], function(extensions, Basic, Blob) { + return (extensions.Blob = Basic.extend({}, Blob)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileInput +@private +*/ +define("moxie/runtime/silverlight/file/FileInput", [ + "moxie/runtime/silverlight/Runtime" +], function(extensions) { + + var FileInput = { + init: function(options) { + + function toFilters(accept) { + var filter = ''; + for (var i = 0; i < accept.length; i++) { + filter += (filter !== '' ? '|' : '') + accept[i].title + " | *." + accept[i].extensions.replace(/,/g, ';*.'); + } + return filter; + } + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', toFilters(options.accept), options.name, options.multiple); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileDrop +@private +*/ +define("moxie/runtime/silverlight/file/FileDrop", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Dom", + "moxie/core/utils/Events" +], function(extensions, Dom, Events) { + + // not exactly useful, since works only in safari (...crickets...) + var FileDrop = { + init: function() { + var comp = this, self = comp.getRuntime(), dropZone; + + dropZone = self.getShimContainer(); + + Events.addEvent(dropZone, 'dragover', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragEnter(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragDrop(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + return self.shimExec.call(this, 'FileDrop', 'init'); + } + }; + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReader +@private +*/ +define("moxie/runtime/silverlight/file/FileReader", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReader" +], function(extensions, Basic, FileReader) { + return (extensions.FileReader = Basic.extend({}, FileReader)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReaderSync +@private +*/ +define("moxie/runtime/silverlight/file/FileReaderSync", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReaderSync" +], function(extensions, Basic, FileReaderSync) { + return (extensions.FileReaderSync = Basic.extend({}, FileReaderSync)); +}); + +// Included from: src/javascript/runtime/silverlight/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/silverlight/xhr/XMLHttpRequest", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/xhr/XMLHttpRequest" +], function(extensions, Basic, XMLHttpRequest) { + return (extensions.XMLHttpRequest = Basic.extend({}, XMLHttpRequest)); +}); + +// Included from: src/javascript/runtime/silverlight/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/runtime/Transporter +@private +*/ +define("moxie/runtime/silverlight/runtime/Transporter", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/runtime/Transporter" +], function(extensions, Basic, Transporter) { + return (extensions.Transporter = Basic.extend({}, Transporter)); +}); + +// Included from: src/javascript/runtime/silverlight/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/image/Image +@private +*/ +define("moxie/runtime/silverlight/image/Image", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/image/Image" +], function(extensions, Basic, Image) { + return (extensions.Image = Basic.extend({}, Image)); +}); + +// Included from: src/javascript/runtime/html4/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML4 runtime. + +@class moxie/runtime/html4/Runtime +@private +*/ +define("moxie/runtime/html4/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = 'html4', extensions = {}; + + function Html4Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + Runtime.call(this, options, type, { + access_binary: Test(window.FileReader || window.File && File.getAsDataURL), + access_image_binary: false, + display_media: Test(extensions.Image && (Env.can('create_canvas') || Env.can('use_data_uri_over32kb'))), + do_cors: false, + drag_and_drop: false, + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + }()), + resize_image: function() { + return extensions.Image && I.can('access_binary') && Env.can('create_canvas'); + }, + report_upload_progress: false, + return_response_headers: false, + return_response_type: function(responseType) { + return !!~Basic.inArray(responseType, ['json', 'text', 'document', '']); + }, + return_status_code: function(code) { + return !Basic.arrayDiff(code, [200, 404]); + }, + select_file: function() { + return Env.can('use_fileinput'); + }, + select_multiple: false, + send_binary_string: false, + send_custom_headers: false, + send_multipart: true, + slice_blob: false, + stream_upload: function() { + return I.can('select_file'); + }, + summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... + return (Env.browser === 'Firefox' && Env.version >= 4) || + (Env.browser === 'Opera' && Env.version >= 12) || + (Env.browser === 'IE' && Env.version >= 10) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); + }()), + upload_filesize: True, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }); + + + Basic.extend(this, { + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html4Runtime); + + return extensions; +}); + +// Included from: src/javascript/runtime/html4/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileInput +@private +*/ +define("moxie/runtime/html4/file/FileInput", [ + "moxie/runtime/html4/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _uid, _files = [], _mimes = [], _options; + + function addInput() { + var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid; + + uid = Basic.guid('uid_'); + + shimContainer = I.getShimContainer(); // we get new ref everytime to avoid memory leaks in IE + + if (_uid) { // move previous form out of the view + currForm = Dom.get(_uid + '_form'); + if (currForm) { + Basic.extend(currForm.style, { top: '100%' }); + } + } + + // build form in DOM, since innerHTML version not able to submit file for some reason + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', 'post'); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + + Basic.extend(form.style, { + overflow: 'hidden', + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + input = document.createElement('input'); + input.setAttribute('id', uid); + input.setAttribute('type', 'file'); + input.setAttribute('name', 'Filedata'); + input.setAttribute('accept', _mimes.join(',')); + + Basic.extend(input.style, { + fontSize: '999px', + opacity: 0 + }); + + form.appendChild(input); + shimContainer.appendChild(form); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + if (Env.browser === 'IE' && Env.version < 10) { + Basic.extend(input.style, { + filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)" + }); + } + + input.onchange = function() { // there should be only one handler for this + var file; + + if (!this.value) { + return; + } + + if (this.files) { + file = this.files[0]; + } else { + file = { + name: this.value + }; + } + + _files = [file]; + + this.onchange = function() {}; // clear event handler + addInput.call(comp); + + // after file is initialized as o.File, we need to update form and input ids + comp.bind('change', function() { + var input = Dom.get(uid), form = Dom.get(uid + '_form'), file; + + if (comp.files.length && input && form) { + file = comp.files[0]; + + input.setAttribute('id', file.uid); + form.setAttribute('id', file.uid + '_form'); + + // set upload target + form.setAttribute('target', file.uid + '_iframe'); + } + input = form = null; + }, 998); + + input = form = null; + comp.trigger('change'); + }; + + + // route click event to the input + if (I.can('summon_file_dialog')) { + browseButton = Dom.get(_options.browse_button); + Events.removeEvent(browseButton, 'click', comp.uid); + Events.addEvent(browseButton, 'click', function(e) { + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + _uid = uid; + + shimContainer = currForm = browseButton = null; + + // trigger ready event asynchronously + comp.trigger({ + type: 'ready', + async: true + }); + } + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), shimContainer; + + // figure out accept string + _options = options; + _mimes = options.accept.mimes || Mime.extList2mimes(options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + (function() { + var browseButton, zIndex, top; + + browseButton = Dom.get(options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + browseButton = null; + }()); + + addInput.call(this); + + shimContainer = null; + }, + + getFiles: function() { + return _files; + }, + + disable: function(state) { + var input; + + if ((input = Dom.get(_uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime(), shimContainer = I.getShimContainer(); + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + _uid = _files = _mimes = _options = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html4/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileReader +@private +*/ +define("moxie/runtime/html4/file/FileReader", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/file/FileReader" +], function(extensions, FileReader) { + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html4/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html4/xhr/XMLHttpRequest", [ + "moxie/runtime/html4/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Url", + "moxie/core/Exceptions", + "moxie/core/utils/Events", + "moxie/file/Blob", + "moxie/xhr/FormData", + "moxie/core/JSON" +], function(extensions, Basic, Dom, Url, x, Events, Blob, FormData, parseJSON) { + + function XMLHttpRequest() { + var _status, _response, _iframe; + + function cleanup(cb) { + var target = this, uid, form, inputs, i, hasFile = false; + + if (!_iframe) { + return; + } + + uid = _iframe.id.replace(/_iframe$/, ''); + + form = Dom.get(uid + '_form'); + if (form) { + inputs = form.getElementsByTagName('input'); + i = inputs.length; + + while (i--) { + switch (inputs[i].getAttribute('type')) { + case 'hidden': + inputs[i].parentNode.removeChild(inputs[i]); + break; + case 'file': + hasFile = true; // flag the case for later + break; + } + } + inputs = []; + + if (!hasFile) { // we need to keep the form for sake of possible retries + form.parentNode.removeChild(form); + } + form = null; + } + + // without timeout, request is marked as canceled (in console) + setTimeout(function() { + Events.removeEvent(_iframe, 'load', target.uid); + if (_iframe.parentNode) { // #382 + _iframe.parentNode.removeChild(_iframe); + } + + // check if shim container has any other children, if - not, remove it as well + var shimContainer = target.getRuntime().getShimContainer(); + if (!shimContainer.children.length) { + shimContainer.parentNode.removeChild(shimContainer); + } + + shimContainer = _iframe = null; + cb(); + }, 1); + } + + Basic.extend(this, { + send: function(meta, data) { + var target = this, I = target.getRuntime(), uid, form, input, blob; + + _status = _response = null; + + function createIframe() { + var container = I.getShimContainer() || document.body + , temp = document.createElement('div') + ; + + // IE 6 won't be able to set the name using setAttribute or iframe.name + temp.innerHTML = ''; + _iframe = temp.firstChild; + container.appendChild(_iframe); + + /* _iframe.onreadystatechange = function() { + console.info(_iframe.readyState); + };*/ + + Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8 + var el; + + try { + el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document; + + // try to detect some standard error pages + if (/^4\d{2}\s/.test(el.title) && el.getElementsByTagName('address').length) { // standard Apache style + _status = el.title.replace(/^(\d+).*$/, '$1'); + } else { + _status = 200; + // get result + _response = Basic.trim(el.body.innerHTML); + + // we need to fire these at least once + target.trigger({ + type: 'progress', + loaded: _response.length, + total: _response.length + }); + + if (blob) { // if we were uploading a file + target.trigger({ + type: 'uploadprogress', + loaded: blob.size || 1025, + total: blob.size || 1025 + }); + } + } + } catch (ex) { + if (Url.hasSameOrigin(meta.url)) { + // if response is sent with error code, iframe in IE gets redirected to res://ieframe.dll/http_x.htm + // which obviously results to cross domain error (wtf?) + _status = 404; + } else { + cleanup.call(target, function() { + target.trigger('error'); + }); + return; + } + } + + cleanup.call(target, function() { + target.trigger('load'); + }); + }, target.uid); + } // end createIframe + + // prepare data to be sent and convert if required + if (data instanceof FormData && data.hasBlob()) { + blob = data.getBlob(); + uid = blob.uid; + input = Dom.get(uid); + form = Dom.get(uid + '_form'); + if (!form) { + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + } else { + uid = Basic.guid('uid_'); + + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', meta.method); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + form.setAttribute('target', uid + '_iframe'); + + I.getShimContainer().appendChild(form); + } + + if (data instanceof FormData) { + data.each(function(value, name) { + if (value instanceof Blob) { + if (input) { + input.setAttribute('name', name); + } + } else { + var hidden = document.createElement('input'); + + Basic.extend(hidden, { + type : 'hidden', + name : name, + value : value + }); + + form.appendChild(hidden); + } + }); + } + + // set destination url + form.setAttribute("action", meta.url); + + createIframe(); + form.submit(); + target.trigger('loadstart'); + }, + + getStatus: function() { + return _status; + }, + + getResponse: function(responseType) { + if ('json' === responseType) { + // strip off
    ..
    tags that might be enclosing the response + if (Basic.typeOf(_response) === 'string') { + try { + return parseJSON(_response.replace(/^\s*]*>/, '').replace(/<\/pre>\s*$/, '')); + } catch (ex) { + return null; + } + } + } else if ('document' === responseType) { + + } + return _response; + }, + + abort: function() { + var target = this; + + if (_iframe && _iframe.contentWindow) { + if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome + _iframe.contentWindow.stop(); + } else if (_iframe.contentWindow.document.execCommand) { // IE + _iframe.contentWindow.document.execCommand('Stop'); + } else { + _iframe.src = "about:blank"; + } + } + + cleanup.call(this, function() { + // target.dispatchEvent('readystatechange'); + target.dispatchEvent('abort'); + }); + } + }); + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html4/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/image/Image +@private +*/ +define("moxie/runtime/html4/image/Image", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/image/Image" +], function(extensions, Image) { + return (extensions.Image = Image); +}); + +expose(["moxie/core/utils/Basic","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/file/File","moxie/file/FileInput","moxie/file/FileDrop","moxie/runtime/RuntimeTarget","moxie/file/FileReader","moxie/core/utils/Url","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/core/JSON","moxie/image/Image","moxie/core/utils/Events"]); +})(this);/** + * o.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global moxie:true */ + +/** +Globally exposed namespace with the most frequently used public classes and handy methods. + +@class o +@static +@private +*/ +(function() { + "use strict"; + + var o = {}, inArray = moxie.core.utils.Basic.inArray; + + // directly add some public classes + // (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included) + (function addAlias(ns) { + var name, itemType; + for (name in ns) { + itemType = typeof(ns[name]); + if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) { + addAlias(ns[name]); + } else if (itemType === 'function') { + o[name] = ns[name]; + } + } + })(window.moxie); + + // add some manually + o.Env = window.moxie.core.utils.Env; + o.Mime = window.moxie.core.utils.Mime; + o.Exceptions = window.moxie.core.Exceptions; + + // expose globally + window.mOxie = o; + if (!window.o) { + window.o = o; + } + return o; +})(); diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.min.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.min.js new file mode 100644 index 00000000..00498f2e --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/moxie.min.js @@ -0,0 +1,15 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.0.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2013-09-23 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(a,function(n,a){n!==r&&(e(i[a])===e(n)&&~o(e(n),["array","object"])?t(i[a],n):i[a]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},a=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===o(t[r],n)&&i.push(t[r]);return i.length?i:!1},s=function(e,t){var i=[];return n(e,function(e){-1!==o(e,t)&&i.push(e)}),i.length?i:null},u=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),l=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},d=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:c,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inArray:o,arrayDiff:a,arrayIntersect:s,toArray:u,trim:l,parseSizeStr:d}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1),i="";return e.each(t.split(/%[a-z]/),function(e){i+=e,n.length&&(i+=n.shift())}),i}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/mp4,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),s={can:a,browser:t(i),version:n(navigator.userAgent)||n(navigator.appVersion),OS:t(r),swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return s}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){var n;return""===e.className?!1:(n=new RegExp("(^|\\s+)"+t+"(\\s+|$)"),n.test(e.className))},i=function(e,t){n(e,t)||(e.className=""===e.className?t:e.className.replace(/\s+$/,"")+" "+t)},r=function(e,t){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(p,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(h,[p,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?(t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}),void 0):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),n[this.uid][e]=s,void 0)},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={};if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total&&s.loaded&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var c=[];t.each(o,function(e){a[0].target=e.scope,u.async?c.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):c.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),c.length&&t.inSeries(c)}return!0},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i>16,o=255&d>>8,a=255&d,m[p++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f>18,u=63&d>>12,c=63&d>>6,l=63&d,m[p++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(fa;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(T,[p,u,y],function(e,t,n){function i(){var e,i={},r="";t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?(e&&delete i[e],e=r,i[r]=[o]):"array"===s?(r+="[]",t.each(o,function(e){a.append.call(a,r,e)})):"object"===s?t.each(o,function(e,t){a.append.call(a,r+"["+t+"]",e)}):(o=o.toString(),i[r]||(i[r]=[]),i[r].push(o))},hasBlob:function(){return!!e},getBlob:function(){return i[e]&&i[e][0]||null},getBlobName:function(){return e||null},each:function(e){t.each(i,function(n,i){t.each(n,function(t){e(t,i)})})},destroy:function(){e=null,r="",i={}}})}return i}),i(S,[u,p,h,m,b,g,w,y,A,T,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function p(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:(l.can("define_property")?y[e]=t:v[e]=t,void 0):void 0}function u(t){function i(){B.destroy(),B=null,s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",p.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==p.LOADING&&(n("readyState",p.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",p.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",h[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(L=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){L=!0,n("readyState",p.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:_,method:R,async:E,user:x,password:b,headers:w,mimeType:T,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;M=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),N||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:p.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},E=!0,_,R,w={},x,b,A=null,T=null,S=!1,O=!1,I=!1,D=!1,L=!1,N=!1,M,C,F=null,P=null,H={},B,U="",G; +e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(R=o.toUpperCase()),~e.inArray(R,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),N=r.hasSameOrigin(l),_=r.resolveUrl(a),(u||c)&&!N)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,b=c||l.pass,E=s||!0,E===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);S=!E,O=!1,w={},g.call(this),n("readyState",p.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(w[r]?w[r]+=", "+o:w[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),L||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(G||(G={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),G[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),G.hasOwnProperty(t))?G[t].header+": "+G[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[p.LOADING,p.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,T=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,T=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",T="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!N),I=!S&&this.upload.hasEventListener(),L=!1,D=!n,S||(O=!0),u.call(this,n)},abort:function(){if(L=!0,S=!1,~e.inArray(n("readyState"),[p.UNSENT,p.OPENED,p.DONE]))n("readyState",p.UNSENT);else{if(n("readyState",p.DONE),O=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var h={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return p.UNSENT=0,p.OPENED=1,p.HEADERS_RECEIVED=2,p.LOADING=3,p.DONE=4,p.prototype=n.instance,p}),i(O,[u,m,v,h],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[],function(){return!!window.JSON&&JSON.parse||function(){var e,n,i={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:" "},r,o=function(t){throw{name:"SyntaxError",message:t,at:e,text:r}},a=function(t){return t&&t!==n&&o("Expected '"+t+"' instead of '"+n+"'"),n=r.charAt(e),e+=1,n},s=function(){var e,t="";for("-"===n&&(t="-",a("-"));n>="0"&&"9">=n;)t+=n,a();if("."===n)for(t+=".";a()&&n>="0"&&"9">=n;)t+=n;if("e"===n||"E"===n)for(t+=n,a(),("-"===n||"+"===n)&&(t+=n,a());n>="0"&&"9">=n;)t+=n,a();return e=+t,isFinite(e)?e:(o("Bad number"),void 0)},u=function(){var e,t,r="",s;if('"'===n)for(;a();){if('"'===n)return a(),r;if("\\"===n)if(a(),"u"===n){for(s=0,t=0;4>t&&(e=parseInt(a(),16),isFinite(e));t+=1)s=16*s+e;r+=String.fromCharCode(s)}else{if("string"!=typeof i[n])break;r+=i[n]}else r+=n}o("Bad string")},c=function(){for(;n&&" ">=n;)a()},l=function(){switch(n){case"t":return a("t"),a("r"),a("u"),a("e"),!0;case"f":return a("f"),a("a"),a("l"),a("s"),a("e"),!1;case"n":return a("n"),a("u"),a("l"),a("l"),null}o("Unexpected '"+n+"'")},d,f=function(){var e=[];if("["===n){if(a("["),c(),"]"===n)return a("]"),e;for(;n;){if(e.push(d()),c(),"]"===n)return a("]"),e;a(","),c()}}o("Bad array")},p=function(){var e,t={};if("{"===n){if(a("{"),c(),"}"===n)return a("}"),t;for(;n;){if(e=u(),c(),a(":"),Object.hasOwnProperty.call(t,e)&&o('Duplicate key "'+e+'"'),t[e]=d(),c(),"}"===n)return a("}"),t;a(","),c()}}o("Bad object")};return d=function(){switch(c(),n){case"{":return p();case"[":return f();case'"':return u();case"-":return s();default:return n>="0"&&"9">=n?s():l()}},function(i,a){var s;return r=i,e=0,n=" ",s=d(),c(),n&&o("Syntax error"),"function"==typeof a?function u(e,n){var i,r,o=e[n];if(o&&"object"==typeof o)for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r=u(o,i),r!==t?o[i]=r:delete o[i]);return a.call(e,n,o)}({"":s},""):s}}()}),i(D,[u,f,p,A,S,g,v,O,d,h,y,E,m,I],function(e,t,n,i,r,o,a,s,u,c,l,d,f,p){function h(){function i(t){if(t||(t=this.getRuntime().exec.call(this,"Image","getInfo")),t)if("string"===e.typeOf(t.meta))try{this.meta=p(t.meta)}catch(n){}else this.meta=t.meta;e.extend(this,{size:parseInt(t.size,10),width:parseInt(t.width,10),height:parseInt(t.height,10),type:t.type}),""===this.name&&(this.name=t.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof h){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);g.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);v.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):y.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r)}}function g(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function v(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function y(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){v.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(m),c.apply(this,arguments)},downsize:function(t,i,r,o){try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);(!t&&!i||"undefined"===e.typeOf(r))&&(r=!1),t=t||this.width,i=i||this.height,o="undefined"===e.typeOf(o)?!0:!!o,this.getRuntime().exec.call(this,"Image","downsize",t,i,r,o)}catch(a){this.trigger("error",a)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),o.trigger("embedded"),void 0}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},p,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,p=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=p.type||this.type||"image/jpeg",l=p.quality||90,d="undefined"!==e.typeOf(p.crop)?p.crop:!1,p.width)m=p.width,g=p.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new h,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(E){this.trigger("error",E)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var m=["progress","load","error","resize","embedded"];return h.MAX_RESIZE_WIDTH=6500,h.MAX_RESIZE_HEIGHT=6500,h.prototype=c.instance,h}),i(L,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return r.can("select_file")&&!("Safari"===i.browser&&"Windows"===i.OS)},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[L,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(C,[L,u,f,M,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,p,h,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),p=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(p,"position")&&(p.style.position="relative"),h=parseInt(n.getStyle(p,"z-index"),10)||1,p.style.zIndex=h,d.style.zIndex=h-1,i.addEvent(p,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?p:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),r&&(r.innerHTML=""),e=a=null}})}return e.FileInput=a}),i(F,[L,u,f,M,l],function(e,t,n,i,r){function o(){function e(e){for(var n=[],i=0;i=4&&u.version<7,d="Android Browser"===u.browser,m=!1;if(h=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),p=l(),p.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=f.call(s,r),m=!0;else if((c||d)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return e.call(s,n,r),void 0;if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}p.upload?(n.withCredentials&&(p.withCredentials=!0),p.addEventListener("load",function(e){s.trigger(e)}),p.addEventListener("error",function(e){s.trigger(e)}),p.addEventListener("progress",function(e){s.trigger(e)}),p.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):p.onreadystatechange=function v(){switch(p.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=p.getResponseHeader("Content-Length")||0),p.responseText&&(t=p.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:p.onreadystatechange=function(){},0===p.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){p.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in p&&(p.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?p.sendAsBinary?p.sendAsBinary(r):function(){for(var e=new Uint8Array(r.length),t=0;ta;a++)i|=o.charCodeAt(e+a)<s;s++)o+=String.fromCharCode(255&t>>Math.abs(a+8*s));n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:(r=e,void 0)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):(i(n,r,4),void 0)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(U,[B],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(G,[u,B],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,p,h,m=[],g={};for(r=0;i>r;r++)if(p=f=e+12*r+2,s=n[a.SHORT(p)],s!==t){switch(u=a.SHORT(p+=2),d=a.LONG(p+=2),p+=4,m=[],u){case 1:case 7:for(d>4&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(p+o);break;case 2:d>4&&(p=a.LONG(p)+c.tiffHeader),g[s]=a.STRING(p,d-1);continue;case 3:for(d>2&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(p+2*o);break;case 4:for(d>1&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(p+4*o);break;case 5:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(p+4*o)/a.LONG(p+4*o+4);break;case 9:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o);break;case 10:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o)/a.SLONG(p+4*o+4);break;default:continue}h=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof h?l[s][h]:h}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()?r():!1):!1},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,p;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,p=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return p?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e) +}):d.setExif(t,n),l.set("app1",d.getBinary()),void 0):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),p&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(q,[p,u,B],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+f>a?a-g:f,y=0;o>y;){var E=y+f>o?o-y:f;h.clearRect(0,0,f,f),h.drawImage(e,-y,-g);var _=y*s/o+c<<0,R=Math.ceil(E*s/o),w=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(p,0,0,E,v,_,w,R,x),y+=f}g+=f}p=h=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[L,u,p,m,y,k,X,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",new n.ImageError(n.ImageError.WRONG_FORMAT))},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,w.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",new n.FileException(n.FileException.NOT_READABLE_ERR))},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c,l,d,f,p,g,v;if(b=o,v=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(v,[5,6,7,8])){var y=n;n=i,i=y}return f=e(),c=r?Math.max:Math.min,u=c(n/f.width,i/f.height),u>1&&(!r||o)?(this.trigger("Resize"),void 0):(p=Math.round(f.width*u),g=Math.round(f.height*u),_||(_=document.createElement("canvas")),s=_.getContext("2d"),r?(_.width=n,_.height=i):(_.width=p,_.height=g),l=p>_.width?Math.round((p-_.width)/2):0,d=g>_.height?Math.round((g-_.height)/2):0,b||m(_.width,_.height,v),h.call(this,f,_,-l,-d,p,g),this.width=_.width,this.height=_.height,x=!0,a.trigger("Resize"),void 0)}function h(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){E&&(E.purge(),E=null),R=y=_=w=null,x=!1}var v=this,y,E,_,R,w,x=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return w=e,e.isDetached()?(R=e.getSource(),d.call(this,R),void 0):(f.call(this,e.getSource(),function(e){r&&(R=c(e)),d.call(t,e)}),void 0)},loadFromImage:function(e,t){this.meta=e.meta,w=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?R=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&R&&t.can("access_image_binary")&&(E=new o(R)),n={width:e().width||0,height:e().height||0,type:w.type||s.getFileMime(w.name),size:R&&R.length||w.size||0,name:w.name||"",meta:E&&E.meta||this.meta||{}}},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new r(null,{type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!x)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!x)return R||(R=c(v.getAsDataURL(e,t))),R;if("image/jpeg"!==e)R=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}R=c(n),E&&(R=E.stripHeaders(R),b&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),R=E.writeHeaders(R)),E.purge(),E=null)}return x=!1,R},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(V,[u,d,f,p,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return!e.arrayDiff(t,["","text","json","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n=''+''+''+''+"","IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(W,[V,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[V],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i($,[V,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i(K,[V,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(Z,[V,u,y,E,A,T,O,I],function(e,t,n,i,r,o,a,s){var u={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;if(~t.inArray(e,["","text"]))return n=new r,n.readAsText(o);if("arraybuffer"===e);else if("json"===e){n=new r;try{return s(n.readAsText(o))}catch(u){return null}}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=u}),i(J,[V,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(Q,[V,u,O,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(et,[u,d,f,p,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:r.capTrue,return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML=''+''+''+''+''+''+"",l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(tt,[et,u,W],function(e,t,n){return e.Blob=t.extend({},n)}),i(nt,[et],function(e){var t={init:function(e){function t(e){for(var t="",n=0;n=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return!!~e.inArray(t,["json","text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(lt,[ct,u,f,M,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,p,h,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(p=n.get(a+"_form"),p&&t.extend(p.style,{top:"100%"})),h=document.createElement("form"),h.setAttribute("id",g+"_form"),h.setAttribute("method","post"),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),t.extend(h.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name","Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),h.appendChild(m),d.appendChild(h),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function(){var e=n.get(g),t=n.get(g+"_form"),i;r.files.length&&e&&t&&(i=r.files[0],e.setAttribute("id",i.uid),t.setAttribute("id",i.uid+"_form"),t.setAttribute("target",i.uid+"_iframe")),e=t=null},998),m=h=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=p=f=null,r.trigger({type:"ready",async:!0})}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShimContainer();i.removeAllEvents(t,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),t&&(t.innerHTML=""),a=s=u=c=null}})}return e.FileInput=a}),i(dt,[ct,P],function(e,t){return e.FileReader=t}),i(ft,[ct,u,f,b,p,M,y,T,I],function(e,t,n,i,r,o,a,s,u){function c(){function e(e){var t=this,i,r,a,s,u=!1;if(d){if(i=d.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(d,"load",t.uid),d.parentNode&&d.parentNode.removeChild(d);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=d=null,e()},1)}}var c,l,d;t.extend(this,{send:function(u,f){function p(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',d=r.firstChild,n.appendChild(d),o.addEvent(d,"load",function(){var n;try{n=d.contentWindow.document||d.contentDocument||window.frames[d.id].document,/^4\d{2}\s/.test(n.title)&&n.getElementsByTagName("address").length?c=n.title.replace(/^(\d+).*$/,"$1"):(c=200,l=t.trim(n.body.innerHTML),h.trigger({type:"progress",loaded:l.length,total:l.length}),E&&h.trigger({type:"uploadprogress",loaded:E.size||1025,total:E.size||1025}))}catch(r){if(!i.hasSameOrigin(u.url))return e.call(h,function(){h.trigger("error")}),void 0;c=404}e.call(h,function(){h.trigger("load")})},h.uid)}var h=this,m=h.getRuntime(),g,v,y,E;if(c=l=null,f instanceof s&&f.hasBlob()){if(E=f.getBlob(),g=E.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",u.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),v.appendChild(i)}}),v.setAttribute("action",u.url),p(),v.submit(),h.trigger("loadstart")},getStatus:function(){return c},getResponse:function(e){if("json"===e&&"string"===t.typeOf(l))try{return u(l.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return l},abort:function(){var t=this;d&&d.contentWindow&&(d.contentWindow.stop?d.contentWindow.stop():d.contentWindow.document.execCommand?d.contentWindow.document.execCommand("Stop"):d.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=c}),i(pt,[ct,j],function(e,t){return e.Image=t}),a([u,c,l,d,f,p,h,m,g,v,y,E,_,R,w,x,b,A,T,S,O,I,D,M])}(this);;(function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function n(r){var i,s;for(i in r)s=typeof r[i],s==="object"&&!~t(i,["Exceptions","Env","Mime"])?n(r[i]):s==="function"&&(e[i]=r[i])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e})(); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/plupload.full.min.js b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/plupload.full.min.js new file mode 100644 index 00000000..12e72ccf --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/plupload/plupload.full.min.js @@ -0,0 +1,28 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.0.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2013-09-23 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(a,function(n,a){n!==r&&(e(i[a])===e(n)&&~o(e(n),["array","object"])?t(i[a],n):i[a]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},a=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===o(t[r],n)&&i.push(t[r]);return i.length?i:!1},s=function(e,t){var i=[];return n(e,function(e){-1!==o(e,t)&&i.push(e)}),i.length?i:null},u=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),l=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},d=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:c,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inArray:o,arrayDiff:a,arrayIntersect:s,toArray:u,trim:l,parseSizeStr:d}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1),i="";return e.each(t.split(/%[a-z]/),function(e){i+=e,n.length&&(i+=n.shift())}),i}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/mp4,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),s={can:a,browser:t(i),version:n(navigator.userAgent)||n(navigator.appVersion),OS:t(r),swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return s}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){var n;return""===e.className?!1:(n=new RegExp("(^|\\s+)"+t+"(\\s+|$)"),n.test(e.className))},i=function(e,t){n(e,t)||(e.className=""===e.className?t:e.className.replace(/\s+$/,"")+" "+t)},r=function(e,t){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(p,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(h,[p,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?(t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}),void 0):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),n[this.uid][e]=s,void 0)},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={};if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total&&s.loaded&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var c=[];t.each(o,function(e){a[0].target=e.scope,u.async?c.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):c.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),c.length&&t.inSeries(c)}return!0},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i>16,o=255&d>>8,a=255&d,m[p++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f>18,u=63&d>>12,c=63&d>>6,l=63&d,m[p++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(fa;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(T,[p,u,y],function(e,t,n){function i(){var e,i={},r="";t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?(e&&delete i[e],e=r,i[r]=[o]):"array"===s?(r+="[]",t.each(o,function(e){a.append.call(a,r,e)})):"object"===s?t.each(o,function(e,t){a.append.call(a,r+"["+t+"]",e)}):(o=o.toString(),i[r]||(i[r]=[]),i[r].push(o))},hasBlob:function(){return!!e},getBlob:function(){return i[e]&&i[e][0]||null},getBlobName:function(){return e||null},each:function(e){t.each(i,function(n,i){t.each(n,function(t){e(t,i)})})},destroy:function(){e=null,r="",i={}}})}return i}),i(S,[u,p,h,m,b,g,w,y,A,T,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function p(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:(l.can("define_property")?y[e]=t:v[e]=t,void 0):void 0}function u(t){function i(){B.destroy(),B=null,s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",p.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==p.LOADING&&(n("readyState",p.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",p.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",h[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(L=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){L=!0,n("readyState",p.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:_,method:R,async:E,user:x,password:b,headers:w,mimeType:T,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;M=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),N||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:p.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},E=!0,_,R,w={},x,b,A=null,T=null,S=!1,O=!1,I=!1,D=!1,L=!1,N=!1,M,C,F=null,P=null,H={},B,U="",G; +e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(R=o.toUpperCase()),~e.inArray(R,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),N=r.hasSameOrigin(l),_=r.resolveUrl(a),(u||c)&&!N)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,b=c||l.pass,E=s||!0,E===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);S=!E,O=!1,w={},g.call(this),n("readyState",p.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(w[r]?w[r]+=", "+o:w[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),L||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(G||(G={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),G[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),G.hasOwnProperty(t))?G[t].header+": "+G[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[p.LOADING,p.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,T=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,T=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",T="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!N),I=!S&&this.upload.hasEventListener(),L=!1,D=!n,S||(O=!0),u.call(this,n)},abort:function(){if(L=!0,S=!1,~e.inArray(n("readyState"),[p.UNSENT,p.OPENED,p.DONE]))n("readyState",p.UNSENT);else{if(n("readyState",p.DONE),O=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var h={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return p.UNSENT=0,p.OPENED=1,p.HEADERS_RECEIVED=2,p.LOADING=3,p.DONE=4,p.prototype=n.instance,p}),i(O,[u,m,v,h],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[],function(){return!!window.JSON&&JSON.parse||function(){var e,n,i={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:" "},r,o=function(t){throw{name:"SyntaxError",message:t,at:e,text:r}},a=function(t){return t&&t!==n&&o("Expected '"+t+"' instead of '"+n+"'"),n=r.charAt(e),e+=1,n},s=function(){var e,t="";for("-"===n&&(t="-",a("-"));n>="0"&&"9">=n;)t+=n,a();if("."===n)for(t+=".";a()&&n>="0"&&"9">=n;)t+=n;if("e"===n||"E"===n)for(t+=n,a(),("-"===n||"+"===n)&&(t+=n,a());n>="0"&&"9">=n;)t+=n,a();return e=+t,isFinite(e)?e:(o("Bad number"),void 0)},u=function(){var e,t,r="",s;if('"'===n)for(;a();){if('"'===n)return a(),r;if("\\"===n)if(a(),"u"===n){for(s=0,t=0;4>t&&(e=parseInt(a(),16),isFinite(e));t+=1)s=16*s+e;r+=String.fromCharCode(s)}else{if("string"!=typeof i[n])break;r+=i[n]}else r+=n}o("Bad string")},c=function(){for(;n&&" ">=n;)a()},l=function(){switch(n){case"t":return a("t"),a("r"),a("u"),a("e"),!0;case"f":return a("f"),a("a"),a("l"),a("s"),a("e"),!1;case"n":return a("n"),a("u"),a("l"),a("l"),null}o("Unexpected '"+n+"'")},d,f=function(){var e=[];if("["===n){if(a("["),c(),"]"===n)return a("]"),e;for(;n;){if(e.push(d()),c(),"]"===n)return a("]"),e;a(","),c()}}o("Bad array")},p=function(){var e,t={};if("{"===n){if(a("{"),c(),"}"===n)return a("}"),t;for(;n;){if(e=u(),c(),a(":"),Object.hasOwnProperty.call(t,e)&&o('Duplicate key "'+e+'"'),t[e]=d(),c(),"}"===n)return a("}"),t;a(","),c()}}o("Bad object")};return d=function(){switch(c(),n){case"{":return p();case"[":return f();case'"':return u();case"-":return s();default:return n>="0"&&"9">=n?s():l()}},function(i,a){var s;return r=i,e=0,n=" ",s=d(),c(),n&&o("Syntax error"),"function"==typeof a?function u(e,n){var i,r,o=e[n];if(o&&"object"==typeof o)for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(r=u(o,i),r!==t?o[i]=r:delete o[i]);return a.call(e,n,o)}({"":s},""):s}}()}),i(D,[u,f,p,A,S,g,v,O,d,h,y,E,m,I],function(e,t,n,i,r,o,a,s,u,c,l,d,f,p){function h(){function i(t){if(t||(t=this.getRuntime().exec.call(this,"Image","getInfo")),t)if("string"===e.typeOf(t.meta))try{this.meta=p(t.meta)}catch(n){}else this.meta=t.meta;e.extend(this,{size:parseInt(t.size,10),width:parseInt(t.width,10),height:parseInt(t.height,10),type:t.type}),""===this.name&&(this.name=t.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof h){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);g.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);v.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):y.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r)}}function g(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function v(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function y(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){v.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(m),c.apply(this,arguments)},downsize:function(t,i,r,o){try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);(!t&&!i||"undefined"===e.typeOf(r))&&(r=!1),t=t||this.width,i=i||this.height,o="undefined"===e.typeOf(o)?!0:!!o,this.getRuntime().exec.call(this,"Image","downsize",t,i,r,o)}catch(a){this.trigger("error",a)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),o.trigger("embedded"),void 0}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},p,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,p=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=p.type||this.type||"image/jpeg",l=p.quality||90,d="undefined"!==e.typeOf(p.crop)?p.crop:!1,p.width)m=p.width,g=p.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new h,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(E){this.trigger("error",E)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var m=["progress","load","error","resize","embedded"];return h.MAX_RESIZE_WIDTH=6500,h.MAX_RESIZE_HEIGHT=6500,h.prototype=c.instance,h}),i(L,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return r.can("select_file")&&!("Safari"===i.browser&&"Windows"===i.OS)},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[L,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(C,[L,u,f,M,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,p,h,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),p=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(p,"position")&&(p.style.position="relative"),h=parseInt(n.getStyle(p,"z-index"),10)||1,p.style.zIndex=h,d.style.zIndex=h-1,i.addEvent(p,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?p:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),r&&(r.innerHTML=""),e=a=null}})}return e.FileInput=a}),i(F,[L,u,f,M,l],function(e,t,n,i,r){function o(){function e(e){for(var n=[],i=0;i=4&&u.version<7,d="Android Browser"===u.browser,m=!1;if(h=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),p=l(),p.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=f.call(s,r),m=!0;else if((c||d)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return e.call(s,n,r),void 0;if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}p.upload?(n.withCredentials&&(p.withCredentials=!0),p.addEventListener("load",function(e){s.trigger(e)}),p.addEventListener("error",function(e){s.trigger(e)}),p.addEventListener("progress",function(e){s.trigger(e)}),p.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):p.onreadystatechange=function v(){switch(p.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=p.getResponseHeader("Content-Length")||0),p.responseText&&(t=p.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:p.onreadystatechange=function(){},0===p.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){p.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in p&&(p.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?p.sendAsBinary?p.sendAsBinary(r):function(){for(var e=new Uint8Array(r.length),t=0;ta;a++)i|=o.charCodeAt(e+a)<s;s++)o+=String.fromCharCode(255&t>>Math.abs(a+8*s));n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:(r=e,void 0)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):(i(n,r,4),void 0)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(U,[B],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(G,[u,B],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,p,h,m=[],g={};for(r=0;i>r;r++)if(p=f=e+12*r+2,s=n[a.SHORT(p)],s!==t){switch(u=a.SHORT(p+=2),d=a.LONG(p+=2),p+=4,m=[],u){case 1:case 7:for(d>4&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(p+o);break;case 2:d>4&&(p=a.LONG(p)+c.tiffHeader),g[s]=a.STRING(p,d-1);continue;case 3:for(d>2&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(p+2*o);break;case 4:for(d>1&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(p+4*o);break;case 5:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(p+4*o)/a.LONG(p+4*o+4);break;case 9:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o);break;case 10:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o)/a.SLONG(p+4*o+4);break;default:continue}h=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof h?l[s][h]:h}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()?r():!1):!1},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,p;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,p=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return p?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e) +}):d.setExif(t,n),l.set("app1",d.getBinary()),void 0):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),p&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(q,[p,u,B],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+f>a?a-g:f,y=0;o>y;){var E=y+f>o?o-y:f;h.clearRect(0,0,f,f),h.drawImage(e,-y,-g);var _=y*s/o+c<<0,R=Math.ceil(E*s/o),w=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(p,0,0,E,v,_,w,R,x),y+=f}g+=f}p=h=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[L,u,p,m,y,k,X,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",new n.ImageError(n.ImageError.WRONG_FORMAT))},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,w.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",new n.FileException(n.FileException.NOT_READABLE_ERR))},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c,l,d,f,p,g,v;if(b=o,v=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(v,[5,6,7,8])){var y=n;n=i,i=y}return f=e(),c=r?Math.max:Math.min,u=c(n/f.width,i/f.height),u>1&&(!r||o)?(this.trigger("Resize"),void 0):(p=Math.round(f.width*u),g=Math.round(f.height*u),_||(_=document.createElement("canvas")),s=_.getContext("2d"),r?(_.width=n,_.height=i):(_.width=p,_.height=g),l=p>_.width?Math.round((p-_.width)/2):0,d=g>_.height?Math.round((g-_.height)/2):0,b||m(_.width,_.height,v),h.call(this,f,_,-l,-d,p,g),this.width=_.width,this.height=_.height,x=!0,a.trigger("Resize"),void 0)}function h(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){E&&(E.purge(),E=null),R=y=_=w=null,x=!1}var v=this,y,E,_,R,w,x=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return w=e,e.isDetached()?(R=e.getSource(),d.call(this,R),void 0):(f.call(this,e.getSource(),function(e){r&&(R=c(e)),d.call(t,e)}),void 0)},loadFromImage:function(e,t){this.meta=e.meta,w=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?R=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&R&&t.can("access_image_binary")&&(E=new o(R)),n={width:e().width||0,height:e().height||0,type:w.type||s.getFileMime(w.name),size:R&&R.length||w.size||0,name:w.name||"",meta:E&&E.meta||this.meta||{}}},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new r(null,{type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!x)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!x)return R||(R=c(v.getAsDataURL(e,t))),R;if("image/jpeg"!==e)R=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}R=c(n),E&&(R=E.stripHeaders(R),b&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),R=E.writeHeaders(R)),E.purge(),E=null)}return x=!1,R},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(V,[u,d,f,p,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return!e.arrayDiff(t,["","text","json","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n=''+''+''+''+"","IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(W,[V,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[V],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i($,[V,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i(K,[V,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(Z,[V,u,y,E,A,T,O,I],function(e,t,n,i,r,o,a,s){var u={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;if(~t.inArray(e,["","text"]))return n=new r,n.readAsText(o);if("arraybuffer"===e);else if("json"===e){n=new r;try{return s(n.readAsText(o))}catch(u){return null}}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=u}),i(J,[V,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(Q,[V,u,O,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(et,[u,d,f,p,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:r.capTrue,return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML=''+''+''+''+''+''+"",l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(tt,[et,u,W],function(e,t,n){return e.Blob=t.extend({},n)}),i(nt,[et],function(e){var t={init:function(e){function t(e){for(var t="",n=0;n=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return!!~e.inArray(t,["json","text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(lt,[ct,u,f,M,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,p,h,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(p=n.get(a+"_form"),p&&t.extend(p.style,{top:"100%"})),h=document.createElement("form"),h.setAttribute("id",g+"_form"),h.setAttribute("method","post"),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),t.extend(h.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name","Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),h.appendChild(m),d.appendChild(h),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function(){var e=n.get(g),t=n.get(g+"_form"),i;r.files.length&&e&&t&&(i=r.files[0],e.setAttribute("id",i.uid),t.setAttribute("id",i.uid+"_form"),t.setAttribute("target",i.uid+"_iframe")),e=t=null},998),m=h=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=p=f=null,r.trigger({type:"ready",async:!0})}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShimContainer();i.removeAllEvents(t,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),t&&(t.innerHTML=""),a=s=u=c=null}})}return e.FileInput=a}),i(dt,[ct,P],function(e,t){return e.FileReader=t}),i(ft,[ct,u,f,b,p,M,y,T,I],function(e,t,n,i,r,o,a,s,u){function c(){function e(e){var t=this,i,r,a,s,u=!1;if(d){if(i=d.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(d,"load",t.uid),d.parentNode&&d.parentNode.removeChild(d);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=d=null,e()},1)}}var c,l,d;t.extend(this,{send:function(u,f){function p(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',d=r.firstChild,n.appendChild(d),o.addEvent(d,"load",function(){var n;try{n=d.contentWindow.document||d.contentDocument||window.frames[d.id].document,/^4\d{2}\s/.test(n.title)&&n.getElementsByTagName("address").length?c=n.title.replace(/^(\d+).*$/,"$1"):(c=200,l=t.trim(n.body.innerHTML),h.trigger({type:"progress",loaded:l.length,total:l.length}),E&&h.trigger({type:"uploadprogress",loaded:E.size||1025,total:E.size||1025}))}catch(r){if(!i.hasSameOrigin(u.url))return e.call(h,function(){h.trigger("error")}),void 0;c=404}e.call(h,function(){h.trigger("load")})},h.uid)}var h=this,m=h.getRuntime(),g,v,y,E;if(c=l=null,f instanceof s&&f.hasBlob()){if(E=f.getBlob(),g=E.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",u.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),v.appendChild(i)}}),v.setAttribute("action",u.url),p(),v.submit(),h.trigger("loadstart")},getStatus:function(){return c},getResponse:function(e){if("json"===e&&"string"===t.typeOf(l))try{return u(l.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return l},abort:function(){var t=this;d&&d.contentWindow&&(d.contentWindow.stop?d.contentWindow.stop():d.contentWindow.document.execCommand?d.contentWindow.document.execCommand("Stop"):d.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=c}),i(pt,[ct,j],function(e,t){return e.Image=t}),a([u,c,l,d,f,p,h,m,g,v,y,E,_,R,w,x,b,A,T,S,O,I,D,M])}(this);;(function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function n(r){var i,s;for(i in r)s=typeof r[i],s==="object"&&!~t(i,["Exceptions","Env","Mime"])?n(r[i]):s==="function"&&(e[i]=r[i])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e})(); +/** + * Plupload - multi-runtime File Uploader + * v2.0.0beta + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2012-11-30 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",resize:"send_binary_string",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",max_file_size:"access_binary",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};return typeof t=="string"?o.each(t.split(/\s*,\s*/),function(e){r(e,!0)}):typeof t=="object"?o.each(t,function(e,t){r(t,e)}):t===!0&&(e.multipart||(n.send_binary_string=!0),e.chunk_size>0&&(n.slice_blob=!0),o.each(e,function(e,t){r(t,!!e,!0)})),n}var r=e.setTimeout,i={},o={VERSION:"2.0.0beta",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){return e===n||/\D/.test(e)?o.translate("N/A"):e>1099511627776?Math.round(e/1099511627776,1)+" "+o.translate("tb"):e>1073741824?Math.round(e/1073741824,1)+" "+o.translate("gb"):e>1048576?Math.round(e/1048576,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024,1)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,t){var n,r;return t&&(e.runtimes=t),n=new o.Uploader(e),r=n.runtime,n.destroy(),r},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(){function n(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}var e,t;return function(r,i,s){if(!t||r!=e)t=n(r),e=[].slice.call(r);t.test(i.name)?s(!0):(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:i}),s(!1))}}()),o.addFileFilter("max_file_size",function(e,t,n){var r;t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function m(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,y()}function y(){var e,t;c.reset();for(e=0;e0?Math.ceil(c.uploaded/u.length*100):0:(c.bytesPerSec=Math.ceil(c.loaded/((+(new Date)-l||1)/1e3)),c.percent=c.size>0?Math.ceil(c.loaded/c.size*100):0)}function b(){var n=this,r=0,i={accept:e.filters.mime_types,runtime_order:e.runtimes,required_caps:f,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(i[t]=e[t])}),t.inSeries([function(s){e.browse_button?(p=new t.FileInput(o.extend({},i,{name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:e.browse_button})),p.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(n.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),r++,s()},p.onchange=function(){n.addFile(this.files)},p.bind("mouseenter mouseleave mousedown mouseup",function(n){if(!h){var r=t.get(e.browse_button);r&&(e.browse_button_hover&&("mouseenter"===n.type?t.addClass(r,e.browse_button_hover):"mouseleave"===n.type&&t.removeClass(r,e.browse_button_hover)),e.browse_button_active&&("mousedown"===n.type?t.addClass(r,e.browse_button_active):"mouseup"===n.type&&t.removeClass(r,e.browse_button_active)),r=null)}}),p.bind("error runtimeerror",function(){p=null,s()}),p.init()):s()},function(s){e.drop_element?(d=new t.FileDrop(o.extend({},i,{drop_zone:e.drop_element})),d.onready=function(){var e=t.Runtime.getInfo(this.ruid);n.features.dragdrop=e.can("drag_and_drop"),r++,s()},d.ondrop=function(){n.addFile(this.files)},d.bind("error runtimeerror",function(){d=null,s()}),d.init()):s()}],function(){typeof e.init=="function"?e.init(n):o.each(e.init,function(e,t){n.bind(t,e)}),r?n.trigger("PostInit"):n.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})}function w(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function E(e,n,r){var i=new t.Image;try{i.onload=function(){i.downsize(n.width,n.height,n.crop,n.preserve_headers)},i.onresize=function(){r(this.getAsBlob(e.type,n.quality)),this.destroy()},i.onerror=function(){r(e)},i.load(e)}catch(s){r(e)}}var u=[],a={},f={},l,c,h=!1,p,d,v;c=new o.QueueProgress,e=o.extend({runtimes:t.Runtime.order,max_retries:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",send_chunk_number:!0},e),e.resize&&(e.resize=o.extend({preserve_headers:!0,crop:!1},e.resize)),o.typeOf(e.filters)==="array"&&(e.filters={mime_types:e.filters}),e.filters=o.extend({mime_types:[],prevent_duplicates:!!e.prevent_duplicates,max_file_size:e.max_file_size},e.filters),e.filters.max_file_size=o.parseSize(e.filters.max_file_size)||0,e.chunk_size=o.parseSize(e.chunk_size)||0,e.required_features=f=s(o.extend({},e)),o.extend(this,{id:o.guid(),state:o.STOPPED,features:{},runtime:t.Runtime.thatCan(f,e.runtimes),files:u,settings:e,total:c,init:function(){var n=this;e.browse_button=t.get(e.browse_button),e.drop_element=t.get(e.drop_element),typeof e.preinit=="function"?e.preinit(n):o.each(e.preinit,function(e,t){n.bind(t,e)});if(!e.browse_button||!e.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}n.bind("FilesAdded",function(e,t){[].push.apply(u,t),r(function(){n.trigger("QueueChanged"),n.refresh()},1)}),n.bind("CancelUpload",function(){v&&v.abort()}),e.unique_names&&n.bind("BeforeUpload",function(e,t){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}),n.bind("UploadFile",function(n,i){function p(){l-->0?r(d,1):(i.loaded=h,n.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:i,response:v.responseText,status:v.status,responseHeaders:v.getAllResponseHeaders()}))}function d(){var l,m,g,y;if(i.status==o.DONE||i.status==o.FAILED||n.state==o.STOPPED)return;g={name:i.target_name||i.name},a&&u.chunks&&c.size>a?(y=Math.min(a,c.size-h),l=c.slice(h,h+y)):(y=c.size,l=c),a&&u.chunks&&(e.send_chunk_number?(g.chunk=Math.ceil(h/a),g.chunks=Math.ceil(c.size/a)):(g.offset=h,g.total=c.size)),v=new t.XMLHttpRequest,v.upload&&(v.upload.onprogress=function(e){i.loaded=Math.min(i.size,h+e.loaded),n.trigger("UploadProgress",i)}),v.onload=function(){if(v.status>=400){p();return}y=c.size?(i.size!=i.origSize&&(c.destroy(),c=null),n.trigger("UploadProgress",i),i.status=o.DONE,n.trigger("FileUploaded",i,{response:v.responseText,status:v.status,responseHeaders:v.getAllResponseHeaders()})):r(d,1)},v.onerror=function(){p()},v.onloadend=function(){this.destroy(),v=null},n.settings.multipart&&u.multipart?(g.name=i.target_name||i.name,v.open("post",s,!0),o.each(n.settings.headers,function(e,t){v.setRequestHeader(t,e)}),m=new t.FormData,o.each(o.extend(g,n.settings.multipart_params),function(e,t){m.append(t,e)}),m.append(n.settings.file_data_name,l),v.send(m,{runtime_order:n.settings.runtimes,required_caps:f,swf_url:n.settings.flash_swf_url,xap_url:n.settings.silverlight_xap_url})):(s=o.buildUrl(n.settings.url,o.extend(g,n.settings.multipart_params)),v.open("post",s,!0),v.setRequestHeader("Content-Type","application/octet-stream"),o.each(n.settings.headers,function(e,t){v.setRequestHeader(t,e)}),v.send(l,{runtime_order:n.settings.runtimes,required_caps:f,swf_url:n.settings.flash_swf_url,xap_url:n.settings.silverlight_xap_url}))}var s=n.settings.url,u=n.features,a=e.chunk_size,l=e.max_retries,c,h=0;i.loaded&&(h=i.loaded=a*Math.floor(i.loaded/a)),c=i.getSource(),!t.isEmptyObj(n.settings.resize)&&w(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?E.call(this,c,n.settings.resize,function(e){c=e,i.size=e.size,d()}):d()}),n.bind("UploadProgress",function(e,t){g(t)}),n.bind("StateChanged",function(e){if(e.state==o.STARTED)l=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,y())}),n.bind("QueueChanged",y),n.bind("Error",function(e,t){t.file&&(t.file.status=o.FAILED,g(t.file),e.state==o.STARTED&&r(function(){m.call(n)},1))}),n.bind("FileUploaded",function(){y(),r(function(){m.call(n)},1)}),n.trigger("Init",{runtime:this.runtime}),b.call(this)},refresh:function(){p&&p.trigger("Refresh"),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),m.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){h=arguments[0]!==n?arguments[0]:!0,p&&p.disable(h),this.trigger("DisableBrowse",h)},getFile:function(e){var t;for(t=u.length-1;t>=0;t--)if(u[t].id===e)return u[t]},addFile:function(e,n){function f(){var e=d||p;return e?e.getRuntime().uid:!1}function l(e,n){var s=[];t.each(r.settings.filters,function(t,n){i[n]&&s.push(function(s){i[n].call(r,t,e,function(e){s(!e)})})}),t.inSeries(s,n)}function c(e){var r=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!a)return!1;e.ruid=a,e.connectRuntime(a)}c(new o.File(e))}else e instanceof t.Blob?(c(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),s.push(function(t){l(e,function(n){n||u.push(e),t()})})):t.inArray(r,["file","blob"])!==-1?c(new t.File(null,e)):r==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,c):r==="array"&&(n=null,t.each(e,c))}var r=this,s=[],u=[],a;a=f(),c(e),s.length&&t.inSeries(s,function(){u.length&&r.trigger("FilesAdded",u)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=u.length-1;n>=0;n--)if(u[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=u.splice(e===n?0:e,t===n?u.length:t);return this.trigger("FilesRemoved",r),this.trigger("QueueChanged"),o.each(r,function(e){e.destroy()}),r},trigger:function(e){var t=a[e.toLowerCase()],n,r;if(t){r=Array.prototype.slice.call(arguments),r[0]=this;for(n=0;n=0;r--)if(t[r].func===i){t.splice(r,1);break}}else t=[];t.length||delete a[e]}},unbindAll:function(){var e=this;o.each(a,function(t,n){e.unbind(n)})},destroy:function(){this.stop(),o.each(u,function(e){e.destroy()}),u=[],p&&(p.destroy(),p=null),d&&(d.destroy(),d=null),f={},l=c=h=v=null,this.trigger("Destroy"),this.unbindAll(),a={}}})},o.File=function(){function n(n){o.extend(this,{id:o.guid(),name:n.name||n.fileName,type:n.type||"",size:n.size||n.fileSize,origSize:n.size||n.fileSize,loaded:0,percent:0,status:o.QUEUED,lastModifiedDate:n.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return t.inArray(t.typeOf(e),["blob","file"])!==-1?e:null},getSource:function(){return e[this.id]?e[this.id]:null},destroy:function(){var t=this.getSource();t&&(t.destroy(),delete e[this.id])}}),e[this.id]=n}var e={};return n}(),o.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=o})(window,mOxie); \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/prettyPhoto.css b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/prettyPhoto.css new file mode 100644 index 00000000..f3a76def --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/css/prettyPhoto.css @@ -0,0 +1,170 @@ +div.pp_default .pp_top,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{height:13px} +div.pp_default .pp_top .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -93px no-repeat} +div.pp_default .pp_top .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) top left repeat-x} +div.pp_default .pp_top .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -93px no-repeat} +div.pp_default .pp_content .ppt{color:#f8f8f8} +div.pp_default .pp_content_container .pp_left{background:url(../images/prettyPhoto/default/sprite_y.png) -7px 0 repeat-y;padding-left:13px} +div.pp_default .pp_content_container .pp_right{background:url(../images/prettyPhoto/default/sprite_y.png) top right repeat-y;padding-right:13px} +div.pp_default .pp_next:hover{background:url(../images/prettyPhoto/default/sprite_next.png) center right no-repeat;cursor:pointer} +div.pp_default .pp_previous:hover{background:url(../images/prettyPhoto/default/sprite_prev.png) center left no-repeat;cursor:pointer} +div.pp_default .pp_expand{background:url(../images/prettyPhoto/default/sprite.png) 0 -29px no-repeat;cursor:pointer;width:28px;height:28px} +div.pp_default .pp_expand:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -56px no-repeat;cursor:pointer} +div.pp_default .pp_contract{background:url(../images/prettyPhoto/default/sprite.png) 0 -84px no-repeat;cursor:pointer;width:28px;height:28px} +div.pp_default .pp_contract:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -113px no-repeat;cursor:pointer} +div.pp_default .pp_close{width:30px;height:30px;background:url(../images/prettyPhoto/default/sprite.png) 2px 1px no-repeat;cursor:pointer} +div.pp_default .pp_gallery ul li a{background:url(../images/prettyPhoto/default/default_thumb.png) center center #f8f8f8;border:1px solid #aaa} +div.pp_default .pp_social{margin-top:7px} +div.pp_default .pp_gallery a.pp_arrow_previous,div.pp_default .pp_gallery a.pp_arrow_next{position:static;left:auto} +div.pp_default .pp_nav .pp_play,div.pp_default .pp_nav .pp_pause{background:url(../images/prettyPhoto/default/sprite.png) -51px 1px no-repeat;height:30px;width:30px} +div.pp_default .pp_nav .pp_pause{background-position:-51px -29px} +div.pp_default a.pp_arrow_previous,div.pp_default a.pp_arrow_next{background:url(../images/prettyPhoto/default/sprite.png) -31px -3px no-repeat;height:20px;width:20px;margin:4px 0 0} +div.pp_default a.pp_arrow_next{left:52px;background-position:-82px -3px} +div.pp_default .pp_content_container .pp_details{margin-top:5px} +div.pp_default .pp_nav{clear:none;height:30px;width:110px;position:relative} +div.pp_default .pp_nav .currentTextHolder{font-family:Georgia;font-style:italic;color:#999;font-size:11px;left:75px;line-height:25px;position:absolute;top:2px;margin:0;padding:0 0 0 10px} +div.pp_default .pp_close:hover,div.pp_default .pp_nav .pp_play:hover,div.pp_default .pp_nav .pp_pause:hover,div.pp_default .pp_arrow_next:hover,div.pp_default .pp_arrow_previous:hover{opacity:0.7} +div.pp_default .pp_description{font-size:11px;font-weight:700;line-height:14px;margin:5px 50px 5px 0} +div.pp_default .pp_bottom .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -127px no-repeat} +div.pp_default .pp_bottom .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) bottom left repeat-x} +div.pp_default .pp_bottom .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -127px no-repeat} +div.pp_default .pp_loaderIcon{background:url(../images/prettyPhoto/default/loader.gif) center center no-repeat} +div.light_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -53px no-repeat} +div.light_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -53px no-repeat} +div.light_rounded .pp_next:hover{background:url(../images/prettyPhoto/light_rounded/btnNext.png) center right no-repeat;cursor:pointer} +div.light_rounded .pp_previous:hover{background:url(../images/prettyPhoto/light_rounded/btnPrevious.png) center left no-repeat;cursor:pointer} +div.light_rounded .pp_expand{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer} +div.light_rounded .pp_expand:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer} +div.light_rounded .pp_contract{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer} +div.light_rounded .pp_contract:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer} +div.light_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer} +div.light_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px} +div.light_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px} +div.light_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -71px no-repeat} +div.light_rounded .pp_arrow_next{background:url(../images/prettyPhoto/light_rounded/sprite.png) -22px -71px no-repeat} +div.light_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -80px no-repeat} +div.light_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -80px no-repeat} +div.dark_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -53px no-repeat} +div.dark_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -53px no-repeat} +div.dark_rounded .pp_content_container .pp_left{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat-y} +div.dark_rounded .pp_content_container .pp_right{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top right repeat-y} +div.dark_rounded .pp_next:hover{background:url(../images/prettyPhoto/dark_rounded/btnNext.png) center right no-repeat;cursor:pointer} +div.dark_rounded .pp_previous:hover{background:url(../images/prettyPhoto/dark_rounded/btnPrevious.png) center left no-repeat;cursor:pointer} +div.dark_rounded .pp_expand{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer} +div.dark_rounded .pp_expand:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer} +div.dark_rounded .pp_contract{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer} +div.dark_rounded .pp_contract:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer} +div.dark_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer} +div.dark_rounded .pp_description{margin-right:85px;color:#fff} +div.dark_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px} +div.dark_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px} +div.dark_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -71px no-repeat} +div.dark_rounded .pp_arrow_next{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -22px -71px no-repeat} +div.dark_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -80px no-repeat} +div.dark_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -80px no-repeat} +div.dark_rounded .pp_loaderIcon{background:url(../images/prettyPhoto/dark_rounded/loader.gif) center center no-repeat} +div.dark_square .pp_left,div.dark_square .pp_middle,div.dark_square .pp_right,div.dark_square .pp_content{background:#000} +div.dark_square .pp_description{color:#fff;margin:0 85px 0 0} +div.dark_square .pp_loaderIcon{background:url(../images/prettyPhoto/dark_square/loader.gif) center center no-repeat} +div.dark_square .pp_expand{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -26px no-repeat;cursor:pointer} +div.dark_square .pp_expand:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -47px no-repeat;cursor:pointer} +div.dark_square .pp_contract{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -26px no-repeat;cursor:pointer} +div.dark_square .pp_contract:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -47px no-repeat;cursor:pointer} +div.dark_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -1px no-repeat;cursor:pointer} +div.dark_square .pp_nav{clear:none} +div.dark_square .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px} +div.dark_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px} +div.dark_square .pp_arrow_previous{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -71px no-repeat} +div.dark_square .pp_arrow_next{background:url(../images/prettyPhoto/dark_square/sprite.png) -22px -71px no-repeat} +div.dark_square .pp_next:hover{background:url(../images/prettyPhoto/dark_square/btnNext.png) center right no-repeat;cursor:pointer} +div.dark_square .pp_previous:hover{background:url(../images/prettyPhoto/dark_square/btnPrevious.png) center left no-repeat;cursor:pointer} +div.light_square .pp_expand{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -26px no-repeat;cursor:pointer} +div.light_square .pp_expand:hover{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -47px no-repeat;cursor:pointer} +div.light_square .pp_contract{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -26px no-repeat;cursor:pointer} +div.light_square .pp_contract:hover{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -47px no-repeat;cursor:pointer} +div.light_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_square/sprite.png) -1px -1px no-repeat;cursor:pointer} +div.light_square .pp_nav .pp_play{background:url(../images/prettyPhoto/light_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px} +div.light_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px} +div.light_square .pp_arrow_previous{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -71px no-repeat} +div.light_square .pp_arrow_next{background:url(../images/prettyPhoto/light_square/sprite.png) -22px -71px no-repeat} +div.light_square .pp_next:hover{background:url(../images/prettyPhoto/light_square/btnNext.png) center right no-repeat;cursor:pointer} +div.light_square .pp_previous:hover{background:url(../images/prettyPhoto/light_square/btnPrevious.png) center left no-repeat;cursor:pointer} +div.facebook .pp_top .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -53px no-repeat} +div.facebook .pp_top .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternTop.png) top left repeat-x} +div.facebook .pp_top .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -53px no-repeat} +div.facebook .pp_content_container .pp_left{background:url(../images/prettyPhoto/facebook/contentPatternLeft.png) top left repeat-y} +div.facebook .pp_content_container .pp_right{background:url(../images/prettyPhoto/facebook/contentPatternRight.png) top right repeat-y} +div.facebook .pp_expand{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -26px no-repeat;cursor:pointer} +div.facebook .pp_expand:hover{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -47px no-repeat;cursor:pointer} +div.facebook .pp_contract{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -26px no-repeat;cursor:pointer} +div.facebook .pp_contract:hover{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -47px no-repeat;cursor:pointer} +div.facebook .pp_close{width:22px;height:22px;background:url(../images/prettyPhoto/facebook/sprite.png) -1px -1px no-repeat;cursor:pointer} +div.facebook .pp_description{margin:0 37px 0 0} +div.facebook .pp_loaderIcon{background:url(../images/prettyPhoto/facebook/loader.gif) center center no-repeat} +div.facebook .pp_arrow_previous{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -71px no-repeat;height:22px;margin-top:0;width:22px} +div.facebook .pp_arrow_previous.disabled{background-position:0 -96px;cursor:default} +div.facebook .pp_arrow_next{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -71px no-repeat;height:22px;margin-top:0;width:22px} +div.facebook .pp_arrow_next.disabled{background-position:-32px -96px;cursor:default} +div.facebook .pp_nav{margin-top:0} +div.facebook .pp_nav p{font-size:15px;padding:0 3px 0 4px} +div.facebook .pp_nav .pp_play{background:url(../images/prettyPhoto/facebook/sprite.png) -1px -123px no-repeat;height:22px;width:22px} +div.facebook .pp_nav .pp_pause{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -123px no-repeat;height:22px;width:22px} +div.facebook .pp_next:hover{background:url(../images/prettyPhoto/facebook/btnNext.png) center right no-repeat;cursor:pointer} +div.facebook .pp_previous:hover{background:url(../images/prettyPhoto/facebook/btnPrevious.png) center left no-repeat;cursor:pointer} +div.facebook .pp_bottom .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -80px no-repeat} +div.facebook .pp_bottom .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternBottom.png) top left repeat-x} +div.facebook .pp_bottom .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -80px no-repeat} +div.pp_pic_holder a:focus{outline:none} +div.pp_overlay{background:#000;display:none;left:0;position:absolute;top:0;width:100%;z-index:9500} +div.pp_pic_holder{display:none;position:absolute;width:100px;z-index:10000} +.pp_content{height:40px;min-width:40px} +* html .pp_content{width:40px} +.pp_content_container{position:relative;text-align:left;width:100%} +.pp_content_container .pp_left{padding-left:20px} +.pp_content_container .pp_right{padding-right:20px} +.pp_content_container .pp_details{float:left;margin:10px 0 2px} +.pp_description{display:none;margin:0} +.pp_social{float:left;margin:0} +.pp_social .facebook{float:left;margin-left:5px;width:55px;overflow:hidden} +.pp_social .twitter{float:left} +.pp_nav{clear:right;float:left;margin:3px 10px 0 0} +.pp_nav p{float:left;white-space:nowrap;margin:2px 4px} +.pp_nav .pp_play,.pp_nav .pp_pause{float:left;margin-right:4px;text-indent:-10000px} +a.pp_arrow_previous,a.pp_arrow_next{display:block;float:left;height:15px;margin-top:3px;overflow:hidden;text-indent:-10000px;width:14px} +.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000} +.pp_gallery{display:none;left:50%;margin-top:-50px;position:absolute;z-index:10000} +.pp_gallery div{float:left;overflow:hidden;position:relative} +.pp_gallery ul{float:left;height:35px;position:relative;white-space:nowrap;margin:0 0 0 5px;padding:0} +.pp_gallery ul a{border:1px rgba(0,0,0,0.5) solid;display:block;float:left;height:33px;overflow:hidden} +.pp_gallery ul a img{border:0} +.pp_gallery li{display:block;float:left;margin:0 5px 0 0;padding:0} +.pp_gallery li.default a{background:url(../images/prettyPhoto/facebook/default_thumbnail.gif) 0 0 no-repeat;display:block;height:33px;width:50px} +.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px!important} +a.pp_next{background:url(../images/prettyPhoto/default/sprite_next.png) 10000px 10000px no-repeat;display:block;float:right;height:100%;text-indent:-10000px;width:49%} +a.pp_previous{background:url(../images/prettyPhoto/default/sprite_prev.png) 10000px 10000px no-repeat;display:block;float:left;height:100%;text-indent:-10000px;width:49%} +a.pp_expand,a.pp_contract{cursor:pointer;display:none;height:20px;position:absolute;right:30px;text-indent:-10000px;top:10px;width:20px;z-index:20000} +a.pp_close{position:absolute;right:0;top:0;display:block;line-height:22px;text-indent:-10000px} +.pp_loaderIcon{display:block;height:24px;left:50%;position:absolute;top:50%;width:24px;margin:-12px 0 0 -12px} +#pp_full_res{line-height:1!important} +#pp_full_res .pp_inline{text-align:left} +#pp_full_res .pp_inline p{margin:0 0 15px} +div.ppt{color:#fff;display:none;font-size:17px;z-index:9999;margin:0 0 5px 15px} +div.pp_default .pp_content,div.light_rounded .pp_content{background-color:#fff} +div.pp_default #pp_full_res .pp_inline,div.light_rounded .pp_content .ppt,div.light_rounded #pp_full_res .pp_inline,div.light_square .pp_content .ppt,div.light_square #pp_full_res .pp_inline,div.facebook .pp_content .ppt,div.facebook #pp_full_res .pp_inline{color:#000} +div.pp_default .pp_gallery ul li a:hover,div.pp_default .pp_gallery ul li.selected a,.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff} +div.pp_default .pp_details,div.light_rounded .pp_details,div.dark_rounded .pp_details,div.dark_square .pp_details,div.light_square .pp_details,div.facebook .pp_details{position:relative} +div.light_rounded .pp_top .pp_middle,div.light_rounded .pp_content_container .pp_left,div.light_rounded .pp_content_container .pp_right,div.light_rounded .pp_bottom .pp_middle,div.light_square .pp_left,div.light_square .pp_middle,div.light_square .pp_right,div.light_square .pp_content,div.facebook .pp_content{background:#fff} +div.light_rounded .pp_description,div.light_square .pp_description{margin-right:85px} +div.light_rounded .pp_gallery a.pp_arrow_previous,div.light_rounded .pp_gallery a.pp_arrow_next,div.dark_rounded .pp_gallery a.pp_arrow_previous,div.dark_rounded .pp_gallery a.pp_arrow_next,div.dark_square .pp_gallery a.pp_arrow_previous,div.dark_square .pp_gallery a.pp_arrow_next,div.light_square .pp_gallery a.pp_arrow_previous,div.light_square .pp_gallery a.pp_arrow_next{margin-top:12px!important} +div.light_rounded .pp_arrow_previous.disabled,div.dark_rounded .pp_arrow_previous.disabled,div.dark_square .pp_arrow_previous.disabled,div.light_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default} +div.light_rounded .pp_arrow_next.disabled,div.dark_rounded .pp_arrow_next.disabled,div.dark_square .pp_arrow_next.disabled,div.light_square .pp_arrow_next.disabled{background-position:-22px -87px;cursor:default} +div.light_rounded .pp_loaderIcon,div.light_square .pp_loaderIcon{background:url(../images/prettyPhoto/light_rounded/loader.gif) center center no-repeat} +div.dark_rounded .pp_top .pp_middle,div.dark_rounded .pp_content,div.dark_rounded .pp_bottom .pp_middle{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat} +div.dark_rounded .currentTextHolder,div.dark_square .currentTextHolder{color:#c4c4c4} +div.dark_rounded #pp_full_res .pp_inline,div.dark_square #pp_full_res .pp_inline{color:#fff} +.pp_top,.pp_bottom{height:20px;position:relative} +* html .pp_top,* html .pp_bottom{padding:0 20px} +.pp_top .pp_left,.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px} +.pp_top .pp_middle,.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px} +* html .pp_top .pp_middle,* html .pp_bottom .pp_middle{left:0;position:static} +.pp_top .pp_right,.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px} +.pp_fade,.pp_gallery li.default a img{display:none} \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/default_thumb.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/default_thumb.png new file mode 100644 index 00000000..1a26e4b1 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/default_thumb.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/loader.gif b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/loader.gif new file mode 100644 index 00000000..35d397c9 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/loader.gif differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite.png new file mode 100644 index 00000000..5f07ddc5 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_next.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_next.png new file mode 100644 index 00000000..379dc0d0 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_next.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_prev.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_prev.png new file mode 100644 index 00000000..1ee48651 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_prev.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_x.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_x.png new file mode 100644 index 00000000..d4433ab0 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_x.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_y.png b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_y.png new file mode 100644 index 00000000..7786ab51 Binary files /dev/null and b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/default/sprite_y.png differ diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/images/prettyPhoto/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/index.html b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/jquery.prettyPhoto.js b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/jquery.prettyPhoto.js new file mode 100644 index 00000000..d958202a --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/administrator/prettyphoto/js/jquery.prettyPhoto.js @@ -0,0 +1,7 @@ +/* ------------------------------------------------------------------------ + Class: prettyPhoto + Use: Lightbox clone for jQuery + Author: Stephane Caron (http://www.no-margin-for-errors.com) + Version: 3.1.5 +------------------------------------------------------------------------- */ +(function(e){function t(){var e=location.href;hashtag=e.indexOf("#prettyPhoto")!==-1?decodeURI(e.substring(e.indexOf("#prettyPhoto")+1,e.length)):false;return hashtag}function n(){if(typeof theRel=="undefined")return;location.hash=theRel+"/"+rel_index+"/"}function r(){if(location.href.indexOf("#prettyPhoto")!==-1)location.hash="prettyPhoto"}function i(e,t){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var n="[\\?&]"+e+"=([^&#]*)";var r=new RegExp(n);var i=r.exec(t);return i==null?"":i[1]}e.prettyPhoto={version:"3.1.5"};e.fn.prettyPhoto=function(s){function g(){e(".pp_loaderIcon").hide();projectedTop=scroll_pos["scrollTop"]+(d/2-a["containerHeight"]/2);if(projectedTop<0)projectedTop=0;$ppt.fadeTo(settings.animation_speed,1);$pp_pic_holder.find(".pp_content").animate({height:a["contentHeight"],width:a["contentWidth"]},settings.animation_speed);$pp_pic_holder.animate({top:projectedTop,left:v/2-a["containerWidth"]/2<0?0:v/2-a["containerWidth"]/2,width:a["containerWidth"]},settings.animation_speed,function(){$pp_pic_holder.find(".pp_hoverContainer,#fullResImage").height(a["height"]).width(a["width"]);$pp_pic_holder.find(".pp_fade").fadeIn(settings.animation_speed);if(isSet&&S(pp_images[set_position])=="image"){$pp_pic_holder.find(".pp_hoverContainer").show()}else{$pp_pic_holder.find(".pp_hoverContainer").hide()}if(settings.allow_expand){if(a["resized"]){e("a.pp_expand,a.pp_contract").show()}else{e("a.pp_expand").hide()}}if(settings.autoplay_slideshow&&!m&&!f)e.prettyPhoto.startSlideshow();settings.changepicturecallback();f=true});C();s.ajaxcallback()}function y(t){$pp_pic_holder.find("#pp_full_res object,#pp_full_res embed").css("visibility","hidden");$pp_pic_holder.find(".pp_fade").fadeOut(settings.animation_speed,function(){e(".pp_loaderIcon").show();t()})}function b(t){t>1?e(".pp_nav").show():e(".pp_nav").hide()}function w(e,t){resized=false;E(e,t);imageWidth=e,imageHeight=t;if((p>v||h>d)&&doresize&&settings.allow_resize&&!u){resized=true,fitting=false;while(!fitting){if(p>v){imageWidth=v-200;imageHeight=t/e*imageWidth}else if(h>d){imageHeight=d-200;imageWidth=e/t*imageHeight}else{fitting=true}h=imageHeight,p=imageWidth}if(p>v||h>d){w(p,h)}E(imageWidth,imageHeight)}return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(h),containerWidth:Math.floor(p)+settings.horizontal_padding*2,contentHeight:Math.floor(l),contentWidth:Math.floor(c),resized:resized}}function E(t,n){t=parseFloat(t);n=parseFloat(n);$pp_details=$pp_pic_holder.find(".pp_details");$pp_details.width(t);detailsHeight=parseFloat($pp_details.css("marginTop"))+parseFloat($pp_details.css("marginBottom"));$pp_details=$pp_details.clone().addClass(settings.theme).width(t).appendTo(e("body")).css({position:"absolute",top:-1e4});detailsHeight+=$pp_details.height();detailsHeight=detailsHeight<=34?36:detailsHeight;$pp_details.remove();$pp_title=$pp_pic_holder.find(".ppt");$pp_title.width(t);titleHeight=parseFloat($pp_title.css("marginTop"))+parseFloat($pp_title.css("marginBottom"));$pp_title=$pp_title.clone().appendTo(e("body")).css({position:"absolute",top:-1e4});titleHeight+=$pp_title.height();$pp_title.remove();l=n+detailsHeight;c=t;h=l+titleHeight+$pp_pic_holder.find(".pp_top").height()+$pp_pic_holder.find(".pp_bottom").height();p=t}function S(e){if(e.match(/youtube\.com\/watch/i)||e.match(/youtu\.be/i)){return"youtube"}else if(e.match(/vimeo\.com/i)){return"vimeo"}else if(e.match(/\b.mov\b/i)){return"quicktime"}else if(e.match(/\b.swf\b/i)){return"flash"}else if(e.match(/\biframe=true\b/i)){return"iframe"}else if(e.match(/\bajax=true\b/i)){return"ajax"}else if(e.match(/\bcustom=true\b/i)){return"custom"}else if(e.substr(0,1)=="#"){return"inline"}else{return"image"}}function x(){if(doresize&&typeof $pp_pic_holder!="undefined"){scroll_pos=T();contentHeight=$pp_pic_holder.height(),contentwidth=$pp_pic_holder.width();projectedTop=d/2+scroll_pos["scrollTop"]-contentHeight/2;if(projectedTop<0)projectedTop=0;if(contentHeight>d)return;$pp_pic_holder.css({top:projectedTop,left:v/2+scroll_pos["scrollLeft"]-contentwidth/2})}}function T(){if(self.pageYOffset){return{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset}}else if(document.documentElement&&document.documentElement.scrollTop){return{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft}}else if(document.body){return{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft}}}function N(){d=e(window).height(),v=e(window).width();if(typeof $pp_overlay!="undefined")$pp_overlay.height(e(document).height()).width(v)}function C(){if(isSet&&settings.overlay_gallery&&S(pp_images[set_position])=="image"){itemWidth=52+5;navWidth=settings.theme=="facebook"||settings.theme=="pp_default"?50:30;itemsPerPage=Math.floor((a["containerWidth"]-100-navWidth)/itemWidth);itemsPerPage=itemsPerPage"}toInject=settings.gallery_markup.replace(/{gallery}/g,toInject);$pp_pic_holder.find("#pp_full_res").after(toInject);$pp_gallery=e(".pp_pic_holder .pp_gallery"),$pp_gallery_li=$pp_gallery.find("li");$pp_gallery.find(".pp_arrow_next").click(function(){e.prettyPhoto.changeGalleryPage("next");e.prettyPhoto.stopSlideshow();return false});$pp_gallery.find(".pp_arrow_previous").click(function(){e.prettyPhoto.changeGalleryPage("previous");e.prettyPhoto.stopSlideshow();return false});$pp_pic_holder.find(".pp_content").hover(function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeIn()},function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeOut()});itemWidth=52+5;$pp_gallery_li.each(function(t){e(this).find("a").click(function(){e.prettyPhoto.changePage(t);e.prettyPhoto.stopSlideshow();return false})})}if(settings.slideshow){$pp_pic_holder.find(".pp_nav").prepend('Play');$pp_pic_holder.find(".pp_nav .pp_play").click(function(){e.prettyPhoto.startSlideshow();return false})}$pp_pic_holder.attr("class","pp_pic_holder "+settings.theme);$pp_overlay.css({opacity:0,height:e(document).height(),width:e(window).width()}).bind("click",function(){if(!settings.modal)e.prettyPhoto.close()});e("a.pp_close").bind("click",function(){e.prettyPhoto.close();return false});if(settings.allow_expand){e("a.pp_expand").bind("click",function(t){if(e(this).hasClass("pp_expand")){e(this).removeClass("pp_expand").addClass("pp_contract");doresize=false}else{e(this).removeClass("pp_contract").addClass("pp_expand");doresize=true}y(function(){e.prettyPhoto.open()});return false})}$pp_pic_holder.find(".pp_previous, .pp_nav .pp_arrow_previous").bind("click",function(){e.prettyPhoto.changePage("previous");e.prettyPhoto.stopSlideshow();return false});$pp_pic_holder.find(".pp_next, .pp_nav .pp_arrow_next").bind("click",function(){e.prettyPhoto.changePage("next");e.prettyPhoto.stopSlideshow();return false});x()}s=jQuery.extend({hook:"rel",animation_speed:"fast",ajaxcallback:function(){},slideshow:5e3,autoplay_slideshow:false,opacity:.8,show_title:true,allow_resize:true,allow_expand:true,default_width:500,default_height:344,counter_separator_label:"/",theme:"pp_default",horizontal_padding:20,hideflash:false,wmode:"opaque",autoplay:true,modal:false,deeplinking:true,overlay_gallery:true,overlay_gallery_max:30,keyboard_shortcuts:true,changepicturecallback:function(){},callback:function(){},ie6_fallback:true,markup:'
     
    ',gallery_markup:'',image_markup:'',flash_markup:'',quicktime_markup:'',iframe_markup:'',inline_markup:'
    {content}
    ',custom_markup:"",social_tools:''},s);var o=this,u=false,a,f,l,c,h,p,d=e(window).height(),v=e(window).width(),m;doresize=true,scroll_pos=T();e(window).unbind("resize.prettyphoto").bind("resize.prettyphoto",function(){x();N()});if(s.keyboard_shortcuts){e(document).unbind("keydown.prettyphoto").bind("keydown.prettyphoto",function(t){if(typeof $pp_pic_holder!="undefined"){if($pp_pic_holder.is(":visible")){switch(t.keyCode){case 37:e.prettyPhoto.changePage("previous");t.preventDefault();break;case 39:e.prettyPhoto.changePage("next");t.preventDefault();break;case 27:if(!settings.modal)e.prettyPhoto.close();t.preventDefault();break}}}})}e.prettyPhoto.initialize=function(){settings=s;if(settings.theme=="pp_default")settings.horizontal_padding=16;theRel=e(this).attr(settings.hook);galleryRegExp=/\[(?:.*)\]/;isSet=galleryRegExp.exec(theRel)?true:false;pp_images=isSet?jQuery.map(o,function(t,n){if(e(t).attr(settings.hook).indexOf(theRel)!=-1)return e(t).attr("href")}):e.makeArray(e(this).attr("href"));pp_titles=isSet?jQuery.map(o,function(t,n){if(e(t).attr(settings.hook).indexOf(theRel)!=-1)return e(t).find("img").attr("alt")?e(t).find("img").attr("alt"):""}):e.makeArray(e(this).find("img").attr("alt"));pp_descriptions=isSet?jQuery.map(o,function(t,n){if(e(t).attr(settings.hook).indexOf(theRel)!=-1)return e(t).attr("title")?e(t).attr("title"):""}):e.makeArray(e(this).attr("title"));if(pp_images.length>settings.overlay_gallery_max)settings.overlay_gallery=false;set_position=jQuery.inArray(e(this).attr("href"),pp_images);rel_index=isSet?set_position:e("a["+settings.hook+"^='"+theRel+"']").index(e(this));k(this);if(settings.allow_resize)e(window).bind("scroll.prettyphoto",function(){x()});e.prettyPhoto.open();return false};e.prettyPhoto.open=function(t){if(typeof settings=="undefined"){settings=s;pp_images=e.makeArray(arguments[0]);pp_titles=arguments[1]?e.makeArray(arguments[1]):e.makeArray("");pp_descriptions=arguments[2]?e.makeArray(arguments[2]):e.makeArray("");isSet=pp_images.length>1?true:false;set_position=arguments[3]?arguments[3]:0;k(t.target)}if(settings.hideflash)e("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css("visibility","hidden");b(e(pp_images).size());e(".pp_loaderIcon").show();if(settings.deeplinking)n();if(settings.social_tools){facebook_like_link=settings.social_tools.replace("{location_href}",encodeURIComponent(location.href));$pp_pic_holder.find(".pp_social").html(facebook_like_link)}if($ppt.is(":hidden"))$ppt.css("opacity",0).show();$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);$pp_pic_holder.find(".currentTextHolder").text(set_position+1+settings.counter_separator_label+e(pp_images).size());if(typeof pp_descriptions[set_position]!="undefined"&&pp_descriptions[set_position]!=""){$pp_pic_holder.find(".pp_description").show().html(unescape(pp_descriptions[set_position]))}else{$pp_pic_holder.find(".pp_description").hide()}movie_width=parseFloat(i("width",pp_images[set_position]))?i("width",pp_images[set_position]):settings.default_width.toString();movie_height=parseFloat(i("height",pp_images[set_position]))?i("height",pp_images[set_position]):settings.default_height.toString();u=false;if(movie_height.indexOf("%")!=-1){movie_height=parseFloat(e(window).height()*parseFloat(movie_height)/100-150);u=true}if(movie_width.indexOf("%")!=-1){movie_width=parseFloat(e(window).width()*parseFloat(movie_width)/100-150);u=true}$pp_pic_holder.fadeIn(function(){settings.show_title&&pp_titles[set_position]!=""&&typeof pp_titles[set_position]!="undefined"?$ppt.html(unescape(pp_titles[set_position])):$ppt.html(" ");imgPreloader="";skipInjection=false;switch(S(pp_images[set_position])){case"image":imgPreloader=new Image;nextImage=new Image;if(isSet&&set_position0)movie_id=movie_id.substr(0,movie_id.indexOf("?"));if(movie_id.indexOf("&")>0)movie_id=movie_id.substr(0,movie_id.indexOf("&"))}movie="http://www.youtube.com/embed/"+movie_id;i("rel",pp_images[set_position])?movie+="?rel="+i("rel",pp_images[set_position]):movie+="?rel=1";if(settings.autoplay)movie+="&autoplay=1";toInject=settings.iframe_markup.replace(/{width}/g,a["width"]).replace(/{height}/g,a["height"]).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);break;case"vimeo":a=w(movie_width,movie_height);movie_id=pp_images[set_position];var t=/http(s?):\/\/(www\.)?vimeo.com\/(\d+)/;var n=movie_id.match(t);movie="http://player.vimeo.com/video/"+n[3]+"?title=0&byline=0&portrait=0";if(settings.autoplay)movie+="&autoplay=1;";vimeo_width=a["width"]+"/embed/?moog_width="+a["width"];toInject=settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,a["height"]).replace(/{path}/g,movie);break;case"quicktime":a=w(movie_width,movie_height);a["height"]+=15;a["contentHeight"]+=15;a["containerHeight"]+=15;toInject=settings.quicktime_markup.replace(/{width}/g,a["width"]).replace(/{height}/g,a["height"]).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);break;case"flash":a=w(movie_width,movie_height);flash_vars=pp_images[set_position];flash_vars=flash_vars.substring(pp_images[set_position].indexOf("flashvars")+10,pp_images[set_position].length);filename=pp_images[set_position];filename=filename.substring(0,filename.indexOf("?"));toInject=settings.flash_markup.replace(/{width}/g,a["width"]).replace(/{height}/g,a["height"]).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+"?"+flash_vars);break;case"iframe":a=w(movie_width,movie_height);frame_url=pp_images[set_position];frame_url=frame_url.substr(0,frame_url.indexOf("iframe")-1);toInject=settings.iframe_markup.replace(/{width}/g,a["width"]).replace(/{height}/g,a["height"]).replace(/{path}/g,frame_url);break;case"ajax":doresize=false;a=w(movie_width,movie_height);doresize=true;skipInjection=true;e.get(pp_images[set_position],function(e){toInject=settings.inline_markup.replace(/{content}/g,e);$pp_pic_holder.find("#pp_full_res")[0].innerHTML=toInject;g()});break;case"custom":a=w(movie_width,movie_height);toInject=settings.custom_markup;break;case"inline":myClone=e(pp_images[set_position]).clone().append('
    ').css({width:settings.default_width}).wrapInner('
    ').appendTo(e("body")).show();doresize=false;a=w(e(myClone).width(),e(myClone).height());doresize=true;e(myClone).remove();toInject=settings.inline_markup.replace(/{content}/g,e(pp_images[set_position]).html());break}if(!imgPreloader&&!skipInjection){$pp_pic_holder.find("#pp_full_res")[0].innerHTML=toInject;g()}});return false};e.prettyPhoto.changePage=function(t){currentGalleryPage=0;if(t=="previous"){set_position--;if(set_position<0)set_position=e(pp_images).size()-1}else if(t=="next"){set_position++;if(set_position>e(pp_images).size()-1)set_position=0}else{set_position=t}rel_index=set_position;if(!doresize)doresize=true;if(settings.allow_expand){e(".pp_contract").removeClass("pp_contract").addClass("pp_expand")}y(function(){e.prettyPhoto.open()})};e.prettyPhoto.changeGalleryPage=function(e){if(e=="next"){currentGalleryPage++;if(currentGalleryPage>totalPage)currentGalleryPage=0}else if(e=="previous"){currentGalleryPage--;if(currentGalleryPage<0)currentGalleryPage=totalPage}else{currentGalleryPage=e}slide_speed=e=="next"||e=="previous"?settings.animation_speed:0;slide_to=currentGalleryPage*itemsPerPage*itemWidth;$pp_gallery.find("ul").animate({left:-slide_to},slide_speed)};e.prettyPhoto.startSlideshow=function(){if(typeof m=="undefined"){$pp_pic_holder.find(".pp_play").unbind("click").removeClass("pp_play").addClass("pp_pause").click(function(){e.prettyPhoto.stopSlideshow();return false});m=setInterval(e.prettyPhoto.startSlideshow,settings.slideshow)}else{e.prettyPhoto.changePage("next")}};e.prettyPhoto.stopSlideshow=function(){$pp_pic_holder.find(".pp_pause").unbind("click").removeClass("pp_pause").addClass("pp_play").click(function(){e.prettyPhoto.startSlideshow();return false});clearInterval(m);m=undefined};e.prettyPhoto.close=function(){if($pp_overlay.is(":animated"))return;e.prettyPhoto.stopSlideshow();$pp_pic_holder.stop().find("object,embed").css("visibility","hidden");e("div.pp_pic_holder,div.ppt,.pp_fade").fadeOut(settings.animation_speed,function(){e(this).remove()});$pp_overlay.fadeOut(settings.animation_speed,function(){if(settings.hideflash)e("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css("visibility","visible");e(this).remove();e(window).unbind("scroll.prettyphoto");r();settings.callback();doresize=true;f=false;delete settings})};if(!pp_alreadyInitialized&&t()){pp_alreadyInitialized=true;hashIndex=t();hashRel=hashIndex;hashIndex=hashIndex.substring(hashIndex.indexOf("/")+1,hashIndex.length-1);hashRel=hashRel.substring(0,hashRel.indexOf("/"));setTimeout(function(){e("a["+s.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger("click")},50)}return this.unbind("click.prettyphoto").bind("click.prettyphoto",e.prettyPhoto.initialize)};})(jQuery);var pp_alreadyInitialized=false \ No newline at end of file diff --git a/packages/phocacommander/media/com_phocacommander/js/index.html b/packages/phocacommander/media/com_phocacommander/js/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/packages/phocacommander/media/com_phocacommander/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file