Version Description
Download this release
Release Info
| Developer | jbutkus |
| Plugin | |
| Version | 2.0.7 |
| Comparing to | |
| See all releases | |
Code changes from version 2.0.6 to 2.0.7
- all-in-one-event-calendar.php +1 -1
- app/config/constants.php +2 -2
- app/controller/extension-license.php +7 -7
- app/controller/extension.php +22 -1
- app/controller/front.php +36 -14
- app/controller/javascript.php +6 -1
- app/controller/shutdown.php +6 -0
- app/model/event.php +1 -1
- app/model/event/creating.php +42 -0
- app/model/event/entity.php +4 -1
- app/model/event/instance.php +2 -2
- app/model/event/parent.php +223 -0
- app/model/event/trashing.php +57 -24
- app/model/search.php +1 -1
- app/view/admin/add-new-event.php +30 -2
- app/view/admin/settings.php +8 -1
- app/view/event/content.php +2 -2
- app/view/event/single.php +2 -1
- language/all-in-one-event-calendar.mo +0 -0
- language/all-in-one-event-calendar.po +62 -329
- language/all-in-one-event-calendar.pot +58 -308
- lib/bootstrap/loader-map.php +39 -383
- lib/calendar-feed/ics.php +2 -2
- lib/command/clone.php +2 -1
- lib/command/disable-gzip.php +46 -0
- lib/command/export-events.php +1 -1
- lib/command/resolver.php +5 -0
- lib/command/save-settings.php +3 -6
- lib/css/frontend.php +1 -1
- lib/database/datetime-migration.php +4 -4
- lib/dbi/dbi.php +15 -12
- lib/html/element/setting/calendar-page-selector.php +15 -12
- lib/http/request.php +21 -3
- lib/http/response/helper.php +0 -32
- lib/iCal/{iCalcreator-2.16 → iCalcreator-2.20}/iCalcreator.class.php +1786 -1598
- lib/iCal/{iCalcreator-2.16 → iCalcreator-2.20}/lgpl.txt +0 -0
- lib/import-export/ics.php +12 -15
- lib/notification/admin.php +1 -8
- lib/robots/helper.php +12 -0
- lib/routing/router.php +32 -0
- public/admin/box_event_children.php +5 -5
- public/admin/box_support.php +53 -22
- public/admin/box_time_and_date.php +9 -3
- public/admin/css/add_new_event.css +22 -0
- public/admin/css/bootstrap.min.css +9 -9
- public/admin/css/settings.css +15 -9
- public/admin/img/timely-logo.png +0 -0
- public/admin/less/timely-variables.less +1 -0
- public/admin/twig/bootstrap_tabs.twig +1 -0
- public/admin/twig/setting/calendar-page-selector.twig +4 -0
- public/js/pages/add_new_event.js +1 -1
- public/js/pages/calendar.js +1 -1
- public/js/pages/common_backend.js +1 -1
- public/js/scripts/add_new_event.js +1 -1
- public/js/scripts/add_new_event/event_date_time/date_time_event_handlers.js +1 -1
- public/js/scripts/calendar.js +1 -1
all-in-one-event-calendar.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
* Description: A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds.
|
| 6 |
* Author: Time.ly Network Inc.
|
| 7 |
* Author URI: http://time.ly/
|
| 8 |
-
* Version: 2.0.
|
| 9 |
* Text Domain: all-in-one-event-calendar
|
| 10 |
* Domain Path: /language
|
| 11 |
*/
|
| 5 |
* Description: A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds.
|
| 6 |
* Author: Time.ly Network Inc.
|
| 7 |
* Author URI: http://time.ly/
|
| 8 |
+
* Version: 2.0.7
|
| 9 |
* Text Domain: all-in-one-event-calendar
|
| 10 |
* Domain Path: /language
|
| 11 |
*/
|
app/config/constants.php
CHANGED
|
@@ -50,14 +50,14 @@ function ai1ec_initiate_constants( $ai1ec_base_dir, $ai1ec_base_url ) {
|
|
| 50 |
// = Plugin Version =
|
| 51 |
// ==================
|
| 52 |
if ( ! defined( 'AI1EC_VERSION' ) ) {
|
| 53 |
-
define( 'AI1EC_VERSION', '2.0.
|
| 54 |
}
|
| 55 |
|
| 56 |
// ================
|
| 57 |
// = RSS FEED URL =
|
| 58 |
// ================
|
| 59 |
if ( ! defined( 'AI1EC_RSS_FEED' ) ) {
|
| 60 |
-
define( 'AI1EC_RSS_FEED', 'http://time.ly/feed/' );
|
| 61 |
}
|
| 62 |
|
| 63 |
// =================
|
| 50 |
// = Plugin Version =
|
| 51 |
// ==================
|
| 52 |
if ( ! defined( 'AI1EC_VERSION' ) ) {
|
| 53 |
+
define( 'AI1EC_VERSION', '2.0.7' );
|
| 54 |
}
|
| 55 |
|
| 56 |
// ================
|
| 57 |
// = RSS FEED URL =
|
| 58 |
// ================
|
| 59 |
if ( ! defined( 'AI1EC_RSS_FEED' ) ) {
|
| 60 |
+
define( 'AI1EC_RSS_FEED', 'http://time.ly/blog/feed/' );
|
| 61 |
}
|
| 62 |
|
| 63 |
// =================
|
app/controller/extension-license.php
CHANGED
|
@@ -72,8 +72,8 @@ abstract class Ai1ec_Base_License_Controller extends Ai1ec_Base_Extension_Contro
|
|
| 72 |
public function check_licence( array $old_options, array $new_options ) {
|
| 73 |
$old_licence = $old_options[$this->_licence]['value'];
|
| 74 |
$new_licence = $new_options[$this->_licence]['value'];
|
| 75 |
-
|
| 76 |
-
if (
|
| 77 |
$license = trim( $new_licence );
|
| 78 |
// data to send in our API request
|
| 79 |
$api_params = array(
|
|
@@ -82,23 +82,23 @@ abstract class Ai1ec_Base_License_Controller extends Ai1ec_Base_Extension_Contro
|
|
| 82 |
'item_name' => urlencode( $this->get_name() ),// the name of our product in EDD,
|
| 83 |
'url' => home_url()
|
| 84 |
);
|
| 85 |
-
|
| 86 |
// Call the custom API.
|
| 87 |
$response = wp_remote_get( add_query_arg( $api_params, $this->_store ) );
|
| 88 |
-
|
| 89 |
// make sure the response came back okay
|
| 90 |
if ( is_wp_error( $response ) ) {
|
| 91 |
return false;
|
| 92 |
}
|
| 93 |
-
|
| 94 |
// decode the license data
|
| 95 |
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
| 96 |
// $license_data->license will be either "active" or "inactive"
|
| 97 |
-
|
| 98 |
$this->_registry->get( 'model.settings' )
|
| 99 |
->set( $this->_licence_status, $license_data->license );
|
| 100 |
-
|
| 101 |
}
|
|
|
|
| 102 |
}
|
| 103 |
|
| 104 |
/**
|
| 72 |
public function check_licence( array $old_options, array $new_options ) {
|
| 73 |
$old_licence = $old_options[$this->_licence]['value'];
|
| 74 |
$new_licence = $new_options[$this->_licence]['value'];
|
| 75 |
+
$status = $old_options[$this->_licence_status]['value'];
|
| 76 |
+
if ( 'inactive' === $status || $new_licence !== $old_licence ) {
|
| 77 |
$license = trim( $new_licence );
|
| 78 |
// data to send in our API request
|
| 79 |
$api_params = array(
|
| 82 |
'item_name' => urlencode( $this->get_name() ),// the name of our product in EDD,
|
| 83 |
'url' => home_url()
|
| 84 |
);
|
| 85 |
+
|
| 86 |
// Call the custom API.
|
| 87 |
$response = wp_remote_get( add_query_arg( $api_params, $this->_store ) );
|
| 88 |
+
|
| 89 |
// make sure the response came back okay
|
| 90 |
if ( is_wp_error( $response ) ) {
|
| 91 |
return false;
|
| 92 |
}
|
| 93 |
+
|
| 94 |
// decode the license data
|
| 95 |
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
|
| 96 |
// $license_data->license will be either "active" or "inactive"
|
| 97 |
+
|
| 98 |
$this->_registry->get( 'model.settings' )
|
| 99 |
->set( $this->_licence_status, $license_data->license );
|
|
|
|
| 100 |
}
|
| 101 |
+
|
| 102 |
}
|
| 103 |
|
| 104 |
/**
|
app/controller/extension.php
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
* @subpackage AI1EC.Controller
|
| 11 |
*/
|
| 12 |
abstract class Ai1ec_Base_Extension_Controller {
|
| 13 |
-
|
| 14 |
/**
|
| 15 |
* @var Ai1ec_Registry_Object
|
| 16 |
*/
|
|
@@ -70,6 +70,27 @@ abstract class Ai1ec_Base_Extension_Controller {
|
|
| 70 |
Ai1ec_Event_Dispatcher $dispatcher
|
| 71 |
);
|
| 72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
/**
|
| 74 |
* Removes options when uninstalling the plugin.
|
| 75 |
*/
|
| 10 |
* @subpackage AI1EC.Controller
|
| 11 |
*/
|
| 12 |
abstract class Ai1ec_Base_Extension_Controller {
|
| 13 |
+
|
| 14 |
/**
|
| 15 |
* @var Ai1ec_Registry_Object
|
| 16 |
*/
|
| 70 |
Ai1ec_Event_Dispatcher $dispatcher
|
| 71 |
);
|
| 72 |
|
| 73 |
+
/**
|
| 74 |
+
* Perform the basic compatibility check.
|
| 75 |
+
*
|
| 76 |
+
* @param string $ai1ec_version
|
| 77 |
+
*
|
| 78 |
+
* @return boolean
|
| 79 |
+
*/
|
| 80 |
+
public function check_compatibility( $ai1ec_version ) {
|
| 81 |
+
return version_compare(
|
| 82 |
+
$ai1ec_version,
|
| 83 |
+
$this->minimum_core_required(),
|
| 84 |
+
'>='
|
| 85 |
+
);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
/**
|
| 89 |
+
* @return string
|
| 90 |
+
*/
|
| 91 |
+
public function minimum_core_required() {
|
| 92 |
+
return '2.0.7';
|
| 93 |
+
}
|
| 94 |
/**
|
| 95 |
* Removes options when uninstalling the plugin.
|
| 96 |
*/
|
app/controller/front.php
CHANGED
|
@@ -241,16 +241,16 @@ class Ai1ec_Front_Controller {
|
|
| 241 |
$option = $this->_registry->get( 'model.option' );
|
| 242 |
$theme = $option->get( 'ai1ec_current_theme', array() );
|
| 243 |
$update = false;
|
| 244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 245 |
// Theme setting is undefined; default to Vortex.
|
| 246 |
if ( empty( $theme ) ) {
|
| 247 |
-
$theme =
|
| 248 |
-
'theme_dir' => AI1EC_DEFAULT_THEME_PATH,
|
| 249 |
-
'theme_root' => AI1EC_DEFAULT_THEME_ROOT,
|
| 250 |
-
'theme_url' => AI1EC_THEMES_URL . '/' . AI1EC_DEFAULT_THEME_NAME,
|
| 251 |
-
'stylesheet' => AI1EC_DEFAULT_THEME_NAME,
|
| 252 |
-
'legacy' => false,
|
| 253 |
-
);
|
| 254 |
$update = true;
|
| 255 |
}
|
| 256 |
// Legacy settings; in 1.x the active theme was stored as a bare string,
|
|
@@ -273,8 +273,8 @@ class Ai1ec_Front_Controller {
|
|
| 273 |
// It's missing; something is wrong with this theme. Reset theme to
|
| 274 |
// Vortex and warn the user accordingly.
|
| 275 |
$option->set( 'ai1ec_current_theme', $default_theme );
|
| 276 |
-
|
| 277 |
-
$notification
|
| 278 |
sprintf(
|
| 279 |
Ai1ec_I18n::__(
|
| 280 |
'Your active calendar theme could not be properly initialized. The default theme has been activated instead. Please visit %s and try reactivating your theme manually.'
|
|
@@ -396,6 +396,26 @@ class Ai1ec_Front_Controller {
|
|
| 396 |
2
|
| 397 |
);
|
| 398 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 399 |
// Category colors
|
| 400 |
$dispatcher->register_action(
|
| 401 |
'events_categories_add_form_fields',
|
|
@@ -558,10 +578,12 @@ class Ai1ec_Front_Controller {
|
|
| 558 |
'plugin_action_links_' . AI1EC_PLUGIN_BASENAME,
|
| 559 |
array( 'view.admin.nav', 'plugin_action_links' )
|
| 560 |
);
|
| 561 |
-
$
|
| 562 |
-
|
| 563 |
-
|
| 564 |
-
|
|
|
|
|
|
|
| 565 |
$dispatcher->register_action(
|
| 566 |
'wp_ajax_ai1ec_rescan_cache',
|
| 567 |
array( 'twig.cache', 'rescan' )
|
| 241 |
$option = $this->_registry->get( 'model.option' );
|
| 242 |
$theme = $option->get( 'ai1ec_current_theme', array() );
|
| 243 |
$update = false;
|
| 244 |
+
$default_theme = array(
|
| 245 |
+
'theme_dir' => AI1EC_DEFAULT_THEME_PATH,
|
| 246 |
+
'theme_root' => AI1EC_DEFAULT_THEME_ROOT,
|
| 247 |
+
'theme_url' => AI1EC_THEMES_URL . '/' . AI1EC_DEFAULT_THEME_NAME,
|
| 248 |
+
'stylesheet' => AI1EC_DEFAULT_THEME_NAME,
|
| 249 |
+
'legacy' => false,
|
| 250 |
+
);
|
| 251 |
// Theme setting is undefined; default to Vortex.
|
| 252 |
if ( empty( $theme ) ) {
|
| 253 |
+
$theme = $default_theme;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
$update = true;
|
| 255 |
}
|
| 256 |
// Legacy settings; in 1.x the active theme was stored as a bare string,
|
| 273 |
// It's missing; something is wrong with this theme. Reset theme to
|
| 274 |
// Vortex and warn the user accordingly.
|
| 275 |
$option->set( 'ai1ec_current_theme', $default_theme );
|
| 276 |
+
$notification = $this->_registry->get( 'notification.admin' );
|
| 277 |
+
$notification->store(
|
| 278 |
sprintf(
|
| 279 |
Ai1ec_I18n::__(
|
| 280 |
'Your active calendar theme could not be properly initialized. The default theme has been activated instead. Please visit %s and try reactivating your theme manually.'
|
| 396 |
2
|
| 397 |
);
|
| 398 |
|
| 399 |
+
$dispatcher->register_filter(
|
| 400 |
+
'ai1ec_dbi_debug',
|
| 401 |
+
array( 'http.request', 'debug_filter' )
|
| 402 |
+
);
|
| 403 |
+
|
| 404 |
+
// editing a child instance
|
| 405 |
+
if ( basename( $_SERVER['SCRIPT_NAME'] ) === 'post.php' ) {
|
| 406 |
+
$dispatcher->register_action(
|
| 407 |
+
'admin_action_editpost',
|
| 408 |
+
array( 'model.event.parent', 'admin_init_post' )
|
| 409 |
+
);
|
| 410 |
+
}
|
| 411 |
+
// post row action for parent/child
|
| 412 |
+
$dispatcher->register_action(
|
| 413 |
+
'post_row_actions',
|
| 414 |
+
array( 'model.event.parent', 'post_row_actions' ),
|
| 415 |
+
10,
|
| 416 |
+
2
|
| 417 |
+
);
|
| 418 |
+
|
| 419 |
// Category colors
|
| 420 |
$dispatcher->register_action(
|
| 421 |
'events_categories_add_form_fields',
|
| 578 |
'plugin_action_links_' . AI1EC_PLUGIN_BASENAME,
|
| 579 |
array( 'view.admin.nav', 'plugin_action_links' )
|
| 580 |
);
|
| 581 |
+
if ( $this->_registry->get( 'robots.helper' )->pre_check() ) {
|
| 582 |
+
$dispatcher->register_action(
|
| 583 |
+
'admin_init',
|
| 584 |
+
array( 'robots.helper', 'install' )
|
| 585 |
+
);
|
| 586 |
+
}
|
| 587 |
$dispatcher->register_action(
|
| 588 |
'wp_ajax_ai1ec_rescan_cache',
|
| 589 |
array( 'twig.cache', 'rescan' )
|
app/controller/javascript.php
CHANGED
|
@@ -484,7 +484,12 @@ class Ai1ec_Javascript_Controller {
|
|
| 484 |
'type' => 'text/javascript'
|
| 485 |
)
|
| 486 |
);
|
| 487 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 488 |
$http_encoder->sendAll();
|
| 489 |
}
|
| 490 |
Ai1ec_Http_Response_Helper::stop( 0 );
|
| 484 |
'type' => 'text/javascript'
|
| 485 |
)
|
| 486 |
);
|
| 487 |
+
$compression_level = null;
|
| 488 |
+
if ( $this->_registry->get( 'model.settings' )->get( 'disable_gzip_compression' ) ) {
|
| 489 |
+
// set the compression level to 0 to disable it.
|
| 490 |
+
$compression_level = 0;
|
| 491 |
+
}
|
| 492 |
+
$http_encoder->encode( $compression_level );
|
| 493 |
$http_encoder->sendAll();
|
| 494 |
}
|
| 495 |
Ai1ec_Http_Response_Helper::stop( 0 );
|
app/controller/shutdown.php
CHANGED
|
@@ -69,6 +69,12 @@ class Ai1ec_Shutdown_Controller {
|
|
| 69 |
foreach ( $this->_restorables as $name => $object ) {
|
| 70 |
unset( $object, $this->_restorables[$name] );
|
| 71 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
}
|
| 73 |
|
| 74 |
/**
|
| 69 |
foreach ( $this->_restorables as $name => $object ) {
|
| 70 |
unset( $object, $this->_restorables[$name] );
|
| 71 |
}
|
| 72 |
+
if ( AI1EC_DEBUG ) {
|
| 73 |
+
// __destruct is called twice if facebook extension is installed
|
| 74 |
+
// still can't find the reason, this fixes it but prevent other plugins
|
| 75 |
+
// __destruct() so let's just use it in dev until we fix this.
|
| 76 |
+
exit();
|
| 77 |
+
}
|
| 78 |
}
|
| 79 |
|
| 80 |
/**
|
app/model/event.php
CHANGED
|
@@ -192,7 +192,7 @@ class Ai1ec_Event extends Ai1ec_Base {
|
|
| 192 |
" IF( aei.start IS NOT NULL, aei.end, e.end ) as end ";
|
| 193 |
|
| 194 |
$instance = (int)$instance;
|
| 195 |
-
$this->instance_id
|
| 196 |
$left_join = 'LEFT JOIN ' . $dbi->get_table_name( 'ai1ec_event_instances' ) .
|
| 197 |
' aei ON aei.id = ' . $instance . ' AND e.post_id = aei.post_id ';
|
| 198 |
} else {
|
| 192 |
" IF( aei.start IS NOT NULL, aei.end, e.end ) as end ";
|
| 193 |
|
| 194 |
$instance = (int)$instance;
|
| 195 |
+
$this->set( 'instance_id', $instance );
|
| 196 |
$left_join = 'LEFT JOIN ' . $dbi->get_table_name( 'ai1ec_event_instances' ) .
|
| 197 |
' aei ON aei.id = ' . $instance . ' AND e.post_id = aei.post_id ';
|
| 198 |
} else {
|
app/model/event/creating.php
CHANGED
|
@@ -192,4 +192,46 @@ class Ai1ec_Event_Creating extends Ai1ec_Base {
|
|
| 192 |
return $event;
|
| 193 |
}
|
| 194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
}
|
| 192 |
return $event;
|
| 193 |
}
|
| 194 |
|
| 195 |
+
/**
|
| 196 |
+
* _create_duplicate_post method
|
| 197 |
+
*
|
| 198 |
+
* Create copy of event by calling {@uses wp_insert_post} function.
|
| 199 |
+
* Using 'post_parent' to add hierarchy.
|
| 200 |
+
*
|
| 201 |
+
* @param array $data Event instance data to copy
|
| 202 |
+
*
|
| 203 |
+
* @return int|bool New post ID or false on failure
|
| 204 |
+
**/
|
| 205 |
+
public function create_duplicate_post() {
|
| 206 |
+
if ( ! isset( $_POST['post_ID'] ) ) {
|
| 207 |
+
return false;
|
| 208 |
+
}
|
| 209 |
+
$clean_fields = array(
|
| 210 |
+
'ai1ec_repeat' => NULL,
|
| 211 |
+
'ai1ec_rrule' => '',
|
| 212 |
+
'ai1ec_exrule' => '',
|
| 213 |
+
'ai1ec_exdate' => '',
|
| 214 |
+
'post_ID' => NULL,
|
| 215 |
+
'post_name' => NULL,
|
| 216 |
+
'ai1ec_instance_id' => NULL,
|
| 217 |
+
);
|
| 218 |
+
$old_post_id = $_POST['post_ID'];
|
| 219 |
+
$instance_id = $_POST['ai1ec_instance_id'];
|
| 220 |
+
foreach ( $clean_fields as $field => $to_value ) {
|
| 221 |
+
if ( NULL === $to_value ) {
|
| 222 |
+
unset( $_POST[$field] );
|
| 223 |
+
} else {
|
| 224 |
+
$_POST[$field] = $to_value;
|
| 225 |
+
}
|
| 226 |
+
}
|
| 227 |
+
$_POST = _wp_translate_postdata( false, $_POST );
|
| 228 |
+
$_POST['post_parent'] = $old_post_id;
|
| 229 |
+
$post_id = wp_insert_post( $_POST );
|
| 230 |
+
$this->_registry->get( 'model.event.parent' )->event_parent(
|
| 231 |
+
$post_id,
|
| 232 |
+
$old_post_id,
|
| 233 |
+
$instance_id
|
| 234 |
+
);
|
| 235 |
+
return $post_id;
|
| 236 |
+
}
|
| 237 |
}
|
app/model/event/entity.php
CHANGED
|
@@ -56,6 +56,9 @@ class Ai1ec_Event_Entity extends Ai1ec_Base {
|
|
| 56 |
if ( 'registry' === $name ) {
|
| 57 |
return $this; // short-circuit: protection mean.
|
| 58 |
}
|
|
|
|
|
|
|
|
|
|
| 59 |
$field = '_' . $name;
|
| 60 |
if ( isset( $time_fields[$name] ) ) {
|
| 61 |
// object of Ai1ec_Date_Time type is now handled in it itself
|
|
@@ -68,7 +71,7 @@ class Ai1ec_Event_Entity extends Ai1ec_Base {
|
|
| 68 |
} else {
|
| 69 |
$this->{$field} = $value;
|
| 70 |
}
|
| 71 |
-
if ( 'timezone_name' === $name
|
| 72 |
$this->_start->set_timezone( $value );
|
| 73 |
$this->_end ->set_timezone( $value );
|
| 74 |
}
|
| 56 |
if ( 'registry' === $name ) {
|
| 57 |
return $this; // short-circuit: protection mean.
|
| 58 |
}
|
| 59 |
+
if ( 'timezone_name' === $name && empty( $value ) ) {
|
| 60 |
+
return $this; // protection against invalid TZ values.
|
| 61 |
+
}
|
| 62 |
$field = '_' . $name;
|
| 63 |
if ( isset( $time_fields[$name] ) ) {
|
| 64 |
// object of Ai1ec_Date_Time type is now handled in it itself
|
| 71 |
} else {
|
| 72 |
$this->{$field} = $value;
|
| 73 |
}
|
| 74 |
+
if ( 'timezone_name' === $name ) {
|
| 75 |
$this->_start->set_timezone( $value );
|
| 76 |
$this->_end ->set_timezone( $value );
|
| 77 |
}
|
app/model/event/instance.php
CHANGED
|
@@ -40,8 +40,8 @@ class Ai1ec_Event_Instance extends Ai1ec_Base {
|
|
| 40 |
$where = array( 'post_id' => $post_id );
|
| 41 |
$format = array( '%d' );
|
| 42 |
if ( null !== $instance_id ) {
|
| 43 |
-
$where['
|
| 44 |
-
$format[]
|
| 45 |
}
|
| 46 |
return $this->_dbi->delete( 'ai1ec_event_instances', $where, $format );
|
| 47 |
}
|
| 40 |
$where = array( 'post_id' => $post_id );
|
| 41 |
$format = array( '%d' );
|
| 42 |
if ( null !== $instance_id ) {
|
| 43 |
+
$where['id'] = $instance_id;
|
| 44 |
+
$format[] = '%d';
|
| 45 |
}
|
| 46 |
return $this->_dbi->delete( 'ai1ec_event_instances', $where, $format );
|
| 47 |
}
|
app/model/event/parent.php
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Class which represnt event parent/child relationship.
|
| 4 |
+
*
|
| 5 |
+
* @author Time.ly Network, Inc.
|
| 6 |
+
* @since 2.0
|
| 7 |
+
* @package Ai1EC
|
| 8 |
+
* @subpackage Ai1EC.Model
|
| 9 |
+
*/
|
| 10 |
+
class Ai1ec_Event_Parent extends Ai1ec_Base {
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* event_parent method
|
| 14 |
+
*
|
| 15 |
+
* Get/set event parent
|
| 16 |
+
*
|
| 17 |
+
* @param int $event_id ID of checked event
|
| 18 |
+
* @param int $parent_id ID of new parent [optional=NULL, acts as getter]
|
| 19 |
+
* @param int $instance_id ID of old instance id
|
| 20 |
+
*
|
| 21 |
+
* @return int|bool Value depends on mode:
|
| 22 |
+
* Getter: {@see self::get_parent_event()} for details
|
| 23 |
+
* Setter: true on success.
|
| 24 |
+
*/
|
| 25 |
+
public function event_parent(
|
| 26 |
+
$event_id,
|
| 27 |
+
$parent_id = null,
|
| 28 |
+
$instance_id = null
|
| 29 |
+
) {
|
| 30 |
+
$meta_key = '_ai1ec_event_parent';
|
| 31 |
+
if ( null === $parent_id ) {
|
| 32 |
+
return $this->get_parent_event( $event_id );
|
| 33 |
+
}
|
| 34 |
+
$meta_value = json_encode( array(
|
| 35 |
+
'created' => $this->_registry->get( 'date.system' )->current_time(),
|
| 36 |
+
'instance' => $instance_id,
|
| 37 |
+
) );
|
| 38 |
+
return add_post_meta( $event_id, $meta_key, $meta_value, true );
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Get parent ID for given event
|
| 43 |
+
*
|
| 44 |
+
* @param int $current_id Current event ID
|
| 45 |
+
*
|
| 46 |
+
* @return int|bool ID of parent event or bool(false)
|
| 47 |
+
*/
|
| 48 |
+
public function get_parent_event( $current_id ) {
|
| 49 |
+
static $parents = null;
|
| 50 |
+
if ( null === $parents ) {
|
| 51 |
+
$parents = $this->_registry->get( 'cache.memory' );
|
| 52 |
+
}
|
| 53 |
+
$current_id = (int)$current_id;
|
| 54 |
+
if ( null === ( $parent_id = $parents->get( $current_id ) ) ) {
|
| 55 |
+
$db = $this->_registry->get( 'dbi.dbi' );
|
| 56 |
+
/* @var $db Ai1ec_Dbi */
|
| 57 |
+
$query = '
|
| 58 |
+
SELECT parent.ID, parent.post_status
|
| 59 |
+
FROM
|
| 60 |
+
' . $db->get_table_name( 'posts' ) . ' AS child
|
| 61 |
+
INNER JOIN ' . $db->get_table_name( 'posts' ) . ' AS parent
|
| 62 |
+
ON ( parent.ID = child.post_parent )
|
| 63 |
+
WHERE child.ID = ' . $current_id;
|
| 64 |
+
$parent = $db->get_row( $query );
|
| 65 |
+
if (
|
| 66 |
+
empty( $parent ) ||
|
| 67 |
+
'trash' === $parent->post_status
|
| 68 |
+
) {
|
| 69 |
+
$parent_id = false;
|
| 70 |
+
} else {
|
| 71 |
+
$parent_id = $parent->ID;
|
| 72 |
+
}
|
| 73 |
+
$parents->set( $current_id, $parent_id );
|
| 74 |
+
unset( $query );
|
| 75 |
+
}
|
| 76 |
+
return $parent_id;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
/**
|
| 80 |
+
* Returns a list of modified (children) event objects
|
| 81 |
+
*
|
| 82 |
+
* @param int $parent_id ID of parent event
|
| 83 |
+
* @param bool $include_trash Includes trashed when `true` [optional=false]
|
| 84 |
+
*
|
| 85 |
+
* @return array List (might be empty) of Ai1ec_Event objects
|
| 86 |
+
*/
|
| 87 |
+
public function get_child_event_objects(
|
| 88 |
+
$parent_id,
|
| 89 |
+
$include_trash = false
|
| 90 |
+
) {
|
| 91 |
+
$db = $this->_registry->get( 'dbi.dbi' );
|
| 92 |
+
/* @var $db Ai1ec_Dbi */
|
| 93 |
+
$parent_id = (int)$parent_id;
|
| 94 |
+
$sql_query = 'SELECT ID FROM ' . $db->get_table_name( 'posts' ) .
|
| 95 |
+
' WHERE post_parent = ' . $parent_id;
|
| 96 |
+
$childs = (array)$db->get_col( $sql_query );
|
| 97 |
+
$objects = array();
|
| 98 |
+
foreach ( $childs as $child_id ) {
|
| 99 |
+
try {
|
| 100 |
+
$instance = $this->_registry->get( 'model.event', $child_id );
|
| 101 |
+
if (
|
| 102 |
+
$include_trash ||
|
| 103 |
+
'trash' !== $instance->get( 'post' )->post_status
|
| 104 |
+
) {
|
| 105 |
+
$objects[$child_id] = $instance;
|
| 106 |
+
}
|
| 107 |
+
} catch ( Ai1ec_Event_Not_Found $exception ) {
|
| 108 |
+
// ignore
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
return $objects;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
/**
|
| 115 |
+
* admin_init_post method
|
| 116 |
+
*
|
| 117 |
+
* Bind to admin_action_editpost action to override default save
|
| 118 |
+
* method when user is editing single instance.
|
| 119 |
+
* New post is created with some fields unset.
|
| 120 |
+
*/
|
| 121 |
+
public function admin_init_post( ) {
|
| 122 |
+
if (
|
| 123 |
+
isset( $_POST['ai1ec_instance_id'] ) &&
|
| 124 |
+
isset( $_POST['action'] ) &&
|
| 125 |
+
'editpost' === $_POST['action']
|
| 126 |
+
) {
|
| 127 |
+
$old_post_id = $_POST['post_ID'];
|
| 128 |
+
$instance_id = $_POST['ai1ec_instance_id'];
|
| 129 |
+
$post_id = $this->_registry->get( 'model.event.creating' )
|
| 130 |
+
->create_duplicate_post();
|
| 131 |
+
if ( false !== $post_id ) {
|
| 132 |
+
$created_event = $this->_registry->get( 'model.event', $post_id );
|
| 133 |
+
$this->add_exception_date(
|
| 134 |
+
$old_post_id,
|
| 135 |
+
$created_event->get( 'start' )
|
| 136 |
+
);
|
| 137 |
+
$this->_registry->get( 'model.event.instance' )->clean(
|
| 138 |
+
$old_post_id,
|
| 139 |
+
$instance_id
|
| 140 |
+
);
|
| 141 |
+
$location = add_query_arg(
|
| 142 |
+
'message',
|
| 143 |
+
1,
|
| 144 |
+
get_edit_post_link( $post_id, 'url' )
|
| 145 |
+
);
|
| 146 |
+
wp_redirect(
|
| 147 |
+
apply_filters(
|
| 148 |
+
'redirect_post_location',
|
| 149 |
+
$location,
|
| 150 |
+
$post_id
|
| 151 |
+
)
|
| 152 |
+
);
|
| 153 |
+
exit();
|
| 154 |
+
}
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
/**
|
| 159 |
+
* Inject base event edit link for modified instances
|
| 160 |
+
*
|
| 161 |
+
* Modified instances are events, belonging to some parent having recurrence
|
| 162 |
+
* rule, and having some of it's properties altered.
|
| 163 |
+
*
|
| 164 |
+
* @param array $actions List of defined actions
|
| 165 |
+
* @param stdClass $post Instance being rendered (WP_Post class instance in WP 3.5+)
|
| 166 |
+
*
|
| 167 |
+
* @return array Optionally modified $actions list
|
| 168 |
+
*/
|
| 169 |
+
public function post_row_actions( array $actions, $post ) {
|
| 170 |
+
if ( $this->_registry->get( 'acl.aco' )->is_our_post_type( $post ) ) {
|
| 171 |
+
$parent_post_id = $this->event_parent( $post->ID );
|
| 172 |
+
if (
|
| 173 |
+
$parent_post_id &&
|
| 174 |
+
NULL !== ( $parent_post = get_post( $parent_post_id ) ) &&
|
| 175 |
+
isset( $parent_post->post_status ) &&
|
| 176 |
+
'trash' !== $parent_post->post_status
|
| 177 |
+
) {
|
| 178 |
+
$parent_link = get_edit_post_link(
|
| 179 |
+
$parent_post_id,
|
| 180 |
+
'display'
|
| 181 |
+
);
|
| 182 |
+
$actions['ai1ec_parent'] = sprintf(
|
| 183 |
+
'<a href="%s" title="%s">%s</a>',
|
| 184 |
+
wp_nonce_url( $parent_link ),
|
| 185 |
+
sprintf(
|
| 186 |
+
__( 'Edit “%s”', AI1EC_PLUGIN_NAME ),
|
| 187 |
+
apply_filters(
|
| 188 |
+
'the_title',
|
| 189 |
+
$parent_post->post_title,
|
| 190 |
+
$parent_post->ID
|
| 191 |
+
)
|
| 192 |
+
),
|
| 193 |
+
__( 'Base Event', AI1EC_PLUGIN_NAME )
|
| 194 |
+
);
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
return $actions;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
/**
|
| 201 |
+
* add_exception_date method
|
| 202 |
+
*
|
| 203 |
+
* Add exception (date) to event.
|
| 204 |
+
*
|
| 205 |
+
* @param int $post_id Event edited post ID
|
| 206 |
+
* @param mixed $date Parseable date representation to exclude
|
| 207 |
+
*
|
| 208 |
+
* @return bool Success
|
| 209 |
+
*/
|
| 210 |
+
public function add_exception_date( $post_id, Ai1ec_Date_Time $date ) {
|
| 211 |
+
$event = $this->_registry->get( 'model.event', $post_id );
|
| 212 |
+
$dates_list = explode( ',', $event->get( 'exception_dates' ) );
|
| 213 |
+
if ( empty( $dates_list[0] ) ) {
|
| 214 |
+
unset( $dates_list[0] );
|
| 215 |
+
}
|
| 216 |
+
$date->set_time( 0, 0, 0 );
|
| 217 |
+
$dates_list[] = $date->format(
|
| 218 |
+
'Ymd\THis\Z'
|
| 219 |
+
);
|
| 220 |
+
$event->set( 'exception_dates', implode( ',', $dates_list ) );
|
| 221 |
+
return $event->save( true );
|
| 222 |
+
}
|
| 223 |
+
}
|
app/model/event/trashing.php
CHANGED
|
@@ -15,9 +15,57 @@
|
|
| 15 |
*/
|
| 16 |
class Ai1ec_Event_Trashing extends Ai1ec_Base {
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
}
|
| 22 |
|
| 23 |
/**
|
|
@@ -30,8 +78,7 @@ class Ai1ec_Event_Trashing extends Ai1ec_Base {
|
|
| 30 |
* @return bool Success.
|
| 31 |
*/
|
| 32 |
public function trash( $post_id ) {
|
| 33 |
-
return $this->
|
| 34 |
-
$this->delete_cache( $post_id );
|
| 35 |
}
|
| 36 |
|
| 37 |
/**
|
|
@@ -44,8 +91,7 @@ class Ai1ec_Event_Trashing extends Ai1ec_Base {
|
|
| 44 |
* @return bool Success.
|
| 45 |
*/
|
| 46 |
public function untrash( $post_id ) {
|
| 47 |
-
|
| 48 |
-
return true;
|
| 49 |
}
|
| 50 |
|
| 51 |
/**
|
|
@@ -64,24 +110,11 @@ class Ai1ec_Event_Trashing extends Ai1ec_Base {
|
|
| 64 |
$where = array( 'post_id' => (int)$post_id );
|
| 65 |
$format = array( '%d' );
|
| 66 |
$dbi = $this->_registry->get( 'dbi.dbi' );
|
| 67 |
-
$success = $this->
|
| 68 |
-
$success
|
| 69 |
-
$success
|
| 70 |
unset( $where, $dbi );
|
| 71 |
-
return $success
|
| 72 |
-
}
|
| 73 |
-
|
| 74 |
-
/**
|
| 75 |
-
* Remove the cache for a specific event
|
| 76 |
-
*
|
| 77 |
-
* @param $event_id
|
| 78 |
-
* @internal param $event_id
|
| 79 |
-
*
|
| 80 |
-
* @return boolean
|
| 81 |
-
*/
|
| 82 |
-
public function delete_cache( $event_id ) {
|
| 83 |
-
// to be added with cache introduction
|
| 84 |
-
return true;
|
| 85 |
}
|
| 86 |
|
| 87 |
}
|
| 15 |
*/
|
| 16 |
class Ai1ec_Event_Trashing extends Ai1ec_Base {
|
| 17 |
|
| 18 |
+
/**
|
| 19 |
+
* Trash/untrash/deletes child posts
|
| 20 |
+
*
|
| 21 |
+
* @param id $post_id
|
| 22 |
+
* @param string $action
|
| 23 |
+
*/
|
| 24 |
+
protected function _manage_children( $post_id, $action ) {
|
| 25 |
+
try {
|
| 26 |
+
$ai1ec_event = $this->_registry->get( 'model.event', $post_id );
|
| 27 |
+
if (
|
| 28 |
+
$ai1ec_event->get( 'post' ) &&
|
| 29 |
+
$ai1ec_event->get( 'recurrence_rules' )
|
| 30 |
+
) {
|
| 31 |
+
// when untrashing also get trashed object
|
| 32 |
+
$children = $this->_registry->get( 'model.event.parent' )
|
| 33 |
+
->get_child_event_objects( $ai1ec_event->get( 'post_id' ), $action === 'untrash' );
|
| 34 |
+
$function = 'wp_' . $action . '_post';
|
| 35 |
+
foreach ( $children as $child ) {
|
| 36 |
+
$function( $child->get( 'post_id' ) );
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
} catch ( Ai1ec_Event_Not_Found $exception ) {
|
| 40 |
+
// ignore - not an event
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* Trashes child posts
|
| 46 |
+
*
|
| 47 |
+
* @param int $post_id
|
| 48 |
+
*/
|
| 49 |
+
public function trash_children( $post_id ) {
|
| 50 |
+
$this->_manage_children( $post_id, 'trash' );
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Delete child posts
|
| 55 |
+
*
|
| 56 |
+
* @param int $post_id
|
| 57 |
+
*/
|
| 58 |
+
public function delete_children( $post_id ) {
|
| 59 |
+
$this->_manage_children( $post_id, 'delete' );
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* Untrashes child posts
|
| 64 |
+
*
|
| 65 |
+
* @param int $post_id
|
| 66 |
+
*/
|
| 67 |
+
public function untrash_children( $post_id ) {
|
| 68 |
+
$this->_manage_children( $post_id, 'untrash' );
|
| 69 |
}
|
| 70 |
|
| 71 |
/**
|
| 78 |
* @return bool Success.
|
| 79 |
*/
|
| 80 |
public function trash( $post_id ) {
|
| 81 |
+
return $this->trash_children( $post_id );
|
|
|
|
| 82 |
}
|
| 83 |
|
| 84 |
/**
|
| 91 |
* @return bool Success.
|
| 92 |
*/
|
| 93 |
public function untrash( $post_id ) {
|
| 94 |
+
return $this->untrash_children( $post_id );
|
|
|
|
| 95 |
}
|
| 96 |
|
| 97 |
/**
|
| 110 |
$where = array( 'post_id' => (int)$post_id );
|
| 111 |
$format = array( '%d' );
|
| 112 |
$dbi = $this->_registry->get( 'dbi.dbi' );
|
| 113 |
+
$success = $this->delete_children( $post_id );
|
| 114 |
+
$success = $dbi->delete( 'ai1ec_events', $where, $format );
|
| 115 |
+
$success = $this->_registry->get( 'model.event.instance' )->clean( $post_id );
|
| 116 |
unset( $where, $dbi );
|
| 117 |
+
return $success;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
}
|
| 119 |
|
| 120 |
}
|
app/model/search.php
CHANGED
|
@@ -40,7 +40,7 @@ class Ai1ec_Event_Search extends Ai1ec_Base {
|
|
| 40 |
if ( $instance_id < 1 ) {
|
| 41 |
$instance_id = false;
|
| 42 |
}
|
| 43 |
-
return
|
| 44 |
}
|
| 45 |
|
| 46 |
/**
|
| 40 |
if ( $instance_id < 1 ) {
|
| 41 |
$instance_id = false;
|
| 42 |
}
|
| 43 |
+
return $this->_registry->get( 'model.event', $post_id, $instance_id );
|
| 44 |
}
|
| 45 |
|
| 46 |
/**
|
app/view/admin/add-new-event.php
CHANGED
|
@@ -211,7 +211,11 @@ class Ai1ec_View_Add_New_Event extends Ai1ec_Base {
|
|
| 211 |
// This will store each of the accordion tabs' markup, and passed as an
|
| 212 |
// argument to the final view.
|
| 213 |
$boxes = array();
|
| 214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
// ===============================
|
| 216 |
// = Display event time and date =
|
| 217 |
// ===============================
|
|
@@ -230,6 +234,7 @@ class Ai1ec_View_Add_New_Event extends Ai1ec_Base {
|
|
| 230 |
'timezone_string' => $timezone_string,
|
| 231 |
'timezone_name' => $timezone_name,
|
| 232 |
'exdate' => $exdate,
|
|
|
|
| 233 |
'instance_id' => $instance_id,
|
| 234 |
);
|
| 235 |
|
|
@@ -315,6 +320,30 @@ class Ai1ec_View_Add_New_Event extends Ai1ec_Base {
|
|
| 315 |
|
| 316 |
}
|
| 317 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 318 |
// Display the final view of the meta box.
|
| 319 |
$args = array(
|
| 320 |
'boxes' => $boxes,
|
|
@@ -344,5 +373,4 @@ class Ai1ec_View_Add_New_Event extends Ai1ec_Base {
|
|
| 344 |
return $input;
|
| 345 |
}
|
| 346 |
|
| 347 |
-
|
| 348 |
}
|
| 211 |
// This will store each of the accordion tabs' markup, and passed as an
|
| 212 |
// argument to the final view.
|
| 213 |
$boxes = array();
|
| 214 |
+
$parent_event_id = null;
|
| 215 |
+
if ( $event ) {
|
| 216 |
+
$parent_event_id = $this->_registry->get( 'model.event.parent' )
|
| 217 |
+
->event_parent( $event->get( 'post_id' ) );
|
| 218 |
+
}
|
| 219 |
// ===============================
|
| 220 |
// = Display event time and date =
|
| 221 |
// ===============================
|
| 234 |
'timezone_string' => $timezone_string,
|
| 235 |
'timezone_name' => $timezone_name,
|
| 236 |
'exdate' => $exdate,
|
| 237 |
+
'parent_event_id' => $parent_event_id,
|
| 238 |
'instance_id' => $instance_id,
|
| 239 |
);
|
| 240 |
|
| 320 |
|
| 321 |
}
|
| 322 |
|
| 323 |
+
// ==========================
|
| 324 |
+
// = Parent/Child relations =
|
| 325 |
+
// ==========================
|
| 326 |
+
if ( $event ) {
|
| 327 |
+
$parent = $this->_registry->get( 'model.event.parent' )
|
| 328 |
+
->get_parent_event( $event->get( 'post_id' ) );
|
| 329 |
+
if ( $parent ) {
|
| 330 |
+
try {
|
| 331 |
+
$parent = $this->_registry->get( 'model.event', $parent );
|
| 332 |
+
} catch ( Ai1ec_Event_Not_Found $exception ) { // ignore
|
| 333 |
+
$parent = null;
|
| 334 |
+
}
|
| 335 |
+
}
|
| 336 |
+
$children = $this->_registry->get( 'model.event.parent' )
|
| 337 |
+
->get_child_event_objects( $event->get( 'post_id' ) );
|
| 338 |
+
$args = compact( 'parent', 'children' );
|
| 339 |
+
$args['registry'] = $this->_registry;
|
| 340 |
+
|
| 341 |
+
$boxes[] = $theme_loader->get_file(
|
| 342 |
+
'box_event_children.php',
|
| 343 |
+
$args,
|
| 344 |
+
true
|
| 345 |
+
)->get_content();
|
| 346 |
+
}
|
| 347 |
// Display the final view of the meta box.
|
| 348 |
$args = array(
|
| 349 |
'boxes' => $boxes,
|
| 373 |
return $input;
|
| 374 |
}
|
| 375 |
|
|
|
|
| 376 |
}
|
app/view/admin/settings.php
CHANGED
|
@@ -173,7 +173,14 @@ class Ai1ec_View_Admin_Settings extends Ai1ec_View_Admin_Abstract {
|
|
| 173 |
'class' => 'ai1ec-btn ai1ec-btn-primary ai1ec-btn-lg',
|
| 174 |
),
|
| 175 |
),
|
| 176 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
);
|
| 178 |
|
| 179 |
$file = $loader->get_file( 'setting/bootstrap_tabs.twig', $args, true );
|
| 173 |
'class' => 'ai1ec-btn ai1ec-btn-primary ai1ec-btn-lg',
|
| 174 |
),
|
| 175 |
),
|
| 176 |
+
'pre_tabs_markup' => sprintf(
|
| 177 |
+
'<div class="ai1ec-gzip-causes-js-failure">' .
|
| 178 |
+
Ai1ec_I18n::__(
|
| 179 |
+
'If the form below is not working please follow <a href="%s">this link</a>.'
|
| 180 |
+
) .
|
| 181 |
+
'</div>',
|
| 182 |
+
add_query_arg( 'ai1ec_disable_gzip_compression', '1' )
|
| 183 |
+
)
|
| 184 |
);
|
| 185 |
|
| 186 |
$file = $loader->get_file( 'setting/bootstrap_tabs.twig', $args, true );
|
app/view/event/content.php
CHANGED
|
@@ -118,7 +118,7 @@ class Ai1ec_View_Event_Content extends Ai1ec_Base {
|
|
| 118 |
$href = $href->generate_href();
|
| 119 |
}
|
| 120 |
$text = esc_attr( Ai1ec_I18n::__( 'Back to Calendar' ) );
|
| 121 |
-
$tooltip = esc_attr( Ai1ec_I18n::__( '
|
| 122 |
$html = <<<HTML
|
| 123 |
<a class="ai1ec-calendar-link ai1ec-btn ai1ec-btn-default ai1ec-btn-sm
|
| 124 |
ai1ec-tooltip-trigger $class"
|
|
@@ -126,7 +126,7 @@ class Ai1ec_View_Event_Content extends Ai1ec_Base {
|
|
| 126 |
$data_type
|
| 127 |
data-placement="left"
|
| 128 |
title="$tooltip">
|
| 129 |
-
<i class="ai1ec-fa ai1ec-fa-
|
| 130 |
<span class="ai1ec-hidden-xs">$text</span>
|
| 131 |
</a>
|
| 132 |
HTML;
|
| 118 |
$href = $href->generate_href();
|
| 119 |
}
|
| 120 |
$text = esc_attr( Ai1ec_I18n::__( 'Back to Calendar' ) );
|
| 121 |
+
$tooltip = esc_attr( Ai1ec_I18n::__( 'View all events' ) );
|
| 122 |
$html = <<<HTML
|
| 123 |
<a class="ai1ec-calendar-link ai1ec-btn ai1ec-btn-default ai1ec-btn-sm
|
| 124 |
ai1ec-tooltip-trigger $class"
|
| 126 |
$data_type
|
| 127 |
data-placement="left"
|
| 128 |
title="$tooltip">
|
| 129 |
+
<i class="ai1ec-fa ai1ec-fa-calendar ai1ec-fa-fw"></i>
|
| 130 |
<span class="ai1ec-hidden-xs">$text</span>
|
| 131 |
</a>
|
| 132 |
HTML;
|
app/view/event/single.php
CHANGED
|
@@ -69,9 +69,10 @@ class Ai1ec_View_Event_Single extends Ai1ec_Base {
|
|
| 69 |
'hide_featured_image' => $settings->get( 'hide_featured_image' ),
|
| 70 |
'extra_buttons' => $extra_buttons
|
| 71 |
);
|
|
|
|
| 72 |
if (
|
| 73 |
! empty( $args['recurrence'] ) &&
|
| 74 |
-
|
| 75 |
current_user_can( 'edit_ai1ec_events' )
|
| 76 |
) {
|
| 77 |
$args['edit_instance_url'] = admin_url(
|
| 69 |
'hide_featured_image' => $settings->get( 'hide_featured_image' ),
|
| 70 |
'extra_buttons' => $extra_buttons
|
| 71 |
);
|
| 72 |
+
|
| 73 |
if (
|
| 74 |
! empty( $args['recurrence'] ) &&
|
| 75 |
+
$event->get( 'instance_id' ) &&
|
| 76 |
current_user_can( 'edit_ai1ec_events' )
|
| 77 |
) {
|
| 78 |
$args['edit_instance_url'] = admin_url(
|
language/all-in-one-event-calendar.mo
CHANGED
|
Binary file
|
language/all-in-one-event-calendar.po
CHANGED
|
@@ -2,13 +2,13 @@
|
|
| 2 |
# This file is distributed under the same license as the All-in-One Event Calendar by Time.ly package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: All-in-One Event Calendar by Time.ly 2.0.
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
|
| 7 |
-
"POT-Creation-Date: 2014-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
-
"PO-Revision-Date: 2014-
|
| 12 |
"Last-Translator: Timely <support@time.ly>\n"
|
| 13 |
"Language-Team:\n"
|
| 14 |
|
|
@@ -39,7 +39,7 @@ msgstr ""
|
|
| 39 |
msgid "Calendar Themes"
|
| 40 |
msgstr "Calendar Themes"
|
| 41 |
|
| 42 |
-
#: app/controller/front.php:
|
| 43 |
msgid ""
|
| 44 |
"Your database is found to be corrupt. Likely previous update has failed. "
|
| 45 |
"Please restore All-in-One Event Calendar tables from a backup and retry."
|
|
@@ -115,8 +115,16 @@ msgstr ""
|
|
| 115 |
"The URL you have entered seems to be invalid. Please remember that URLs must "
|
| 116 |
"start with either \"http://\" or \"https://\"."
|
| 117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
#: app/model/settings.php:325
|
| 119 |
-
#: lib/html/element/setting/calendar-page-selector.php:
|
| 120 |
msgid "Calendar page"
|
| 121 |
msgstr "Calendar page"
|
| 122 |
|
|
@@ -384,15 +392,15 @@ msgstr "Templates cache improves site performance"
|
|
| 384 |
msgid "Event Details"
|
| 385 |
msgstr "Event Details"
|
| 386 |
|
| 387 |
-
#: app/view/admin/add-new-event.php:
|
| 388 |
msgid "Publish"
|
| 389 |
msgstr "Publish"
|
| 390 |
|
| 391 |
-
#: app/view/admin/add-new-event.php:
|
| 392 |
msgid "Update"
|
| 393 |
msgstr "Update"
|
| 394 |
|
| 395 |
-
#: app/view/admin/add-new-event.php:
|
| 396 |
msgid "Submit for Review"
|
| 397 |
msgstr "Submit for Review"
|
| 398 |
|
|
@@ -622,6 +630,12 @@ msgstr "Cache Report"
|
|
| 622 |
msgid "Save Settings"
|
| 623 |
msgstr "Save Settings"
|
| 624 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 625 |
#: app/view/admin/theme-options.php:50 app/view/admin/theme-options.php:51
|
| 626 |
msgid "Theme Options"
|
| 627 |
msgstr "Theme Options"
|
|
@@ -704,8 +718,8 @@ msgid "Back to Calendar"
|
|
| 704 |
msgstr "Back to Calendar"
|
| 705 |
|
| 706 |
#: app/view/event/content.php:121
|
| 707 |
-
msgid "
|
| 708 |
-
msgstr "
|
| 709 |
|
| 710 |
#: app/view/event/post.php:29
|
| 711 |
msgid "Event updated. <a href=\"%s\">View event</a>"
|
|
@@ -758,7 +772,7 @@ msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
|
|
| 758 |
msgstr ""
|
| 759 |
"Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
|
| 760 |
|
| 761 |
-
#: app/view/event/single.php:
|
| 762 |
msgid "Edit this occurrence (%s)"
|
| 763 |
msgstr "Edit this occurrence (%s)"
|
| 764 |
|
|
@@ -808,307 +822,6 @@ msgstr "all-day"
|
|
| 808 |
msgid ", and "
|
| 809 |
msgstr ", and "
|
| 810 |
|
| 811 |
-
#: cache/twig/14/14/340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php:31
|
| 812 |
-
msgid "Enabled"
|
| 813 |
-
msgstr "Enabled"
|
| 814 |
-
|
| 815 |
-
#: cache/twig/14/14/340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php:35
|
| 816 |
-
msgid "Default"
|
| 817 |
-
msgstr "Default"
|
| 818 |
-
|
| 819 |
-
#: cache/twig/14/b3/3cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799.php:48
|
| 820 |
-
msgid "Choose a date using calendar"
|
| 821 |
-
msgstr "Choose a date using calendar"
|
| 822 |
-
|
| 823 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:31
|
| 824 |
-
msgid ""
|
| 825 |
-
"Subscribe to this calendar in your personal calendar (iCal, Outlook, etc.)"
|
| 826 |
-
msgstr ""
|
| 827 |
-
"Subscribe to this calendar in your personal calendar (iCal, Outlook, etc.)"
|
| 828 |
-
|
| 829 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:48
|
| 830 |
-
msgid "Subscribe to filtered calendar"
|
| 831 |
-
msgstr "Subscribe to filtered calendar"
|
| 832 |
-
|
| 833 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:54
|
| 834 |
-
msgid "Subscribe"
|
| 835 |
-
msgstr "Subscribe"
|
| 836 |
-
|
| 837 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:77
|
| 838 |
-
msgid "Subscribe to this calendar in your Google Calendar"
|
| 839 |
-
msgstr "Subscribe to this calendar in your Google Calendar"
|
| 840 |
-
|
| 841 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:91
|
| 842 |
-
msgid "Add to Google"
|
| 843 |
-
msgstr "Add to Google"
|
| 844 |
-
|
| 845 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:26
|
| 846 |
-
msgid "Embed the calendar using the Super Widget"
|
| 847 |
-
msgstr "Embed the calendar using the Super Widget"
|
| 848 |
-
|
| 849 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:36
|
| 850 |
-
msgid ""
|
| 851 |
-
"You can also embed a calendar into a remote webpage (for example, a static "
|
| 852 |
-
"HTML page hosted on a different server). Here's how:"
|
| 853 |
-
msgstr ""
|
| 854 |
-
"You can also embed a calendar into a remote webpage (for example, a static "
|
| 855 |
-
"HTML page hosted on a different server). Here's how:"
|
| 856 |
-
|
| 857 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:42
|
| 858 |
-
msgid "Add this line just before the closing <code></head></code> tag:"
|
| 859 |
-
msgstr "Add this line just before the closing <code></head></code> tag:"
|
| 860 |
-
|
| 861 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:52
|
| 862 |
-
msgid ""
|
| 863 |
-
"Insert this markup where you would like to embed the Super Widget (using "
|
| 864 |
-
"default options):"
|
| 865 |
-
msgstr ""
|
| 866 |
-
"Insert this markup where you would like to embed the Super Widget (using "
|
| 867 |
-
"default options):"
|
| 868 |
-
|
| 869 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:60
|
| 870 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:67
|
| 871 |
-
msgid "Optional."
|
| 872 |
-
msgstr "Optional."
|
| 873 |
-
|
| 874 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:64
|
| 875 |
-
msgid "Add options to your Super Widget:"
|
| 876 |
-
msgstr "Add options to your Super Widget:"
|
| 877 |
-
|
| 878 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:70
|
| 879 |
-
msgid "Posterboard view:"
|
| 880 |
-
msgstr "Posterboard view:"
|
| 881 |
-
|
| 882 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:74
|
| 883 |
-
msgid "Stream view:"
|
| 884 |
-
msgstr "Stream view:"
|
| 885 |
-
|
| 886 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:78
|
| 887 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:41
|
| 888 |
-
msgid "Month view:"
|
| 889 |
-
msgstr "Month view:"
|
| 890 |
-
|
| 891 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:82
|
| 892 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:45
|
| 893 |
-
msgid "Week view:"
|
| 894 |
-
msgstr "Week view:"
|
| 895 |
-
|
| 896 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:86
|
| 897 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:49
|
| 898 |
-
msgid "Day view:"
|
| 899 |
-
msgstr "Day view:"
|
| 900 |
-
|
| 901 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:90
|
| 902 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:53
|
| 903 |
-
msgid "Agenda view:"
|
| 904 |
-
msgstr "Agenda view:"
|
| 905 |
-
|
| 906 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:94
|
| 907 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:61
|
| 908 |
-
msgid "Default view as per settings:"
|
| 909 |
-
msgstr "Default view as per settings:"
|
| 910 |
-
|
| 911 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:99
|
| 912 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:91
|
| 913 |
-
msgid "Filter by event category ID:"
|
| 914 |
-
msgstr "Filter by event category ID:"
|
| 915 |
-
|
| 916 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:103
|
| 917 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:95
|
| 918 |
-
msgid "Filter by event category IDs (separate IDs by comma):"
|
| 919 |
-
msgstr "Filter by event category IDs (separate IDs by comma):"
|
| 920 |
-
|
| 921 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:108
|
| 922 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:114
|
| 923 |
-
msgid "Filter by event tag ID:"
|
| 924 |
-
msgstr "Filter by event tag ID:"
|
| 925 |
-
|
| 926 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:112
|
| 927 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:118
|
| 928 |
-
msgid "Filter by event tag IDs (separate IDs by comma):"
|
| 929 |
-
msgstr "Filter by event tag IDs (separate IDs by comma):"
|
| 930 |
-
|
| 931 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:117
|
| 932 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:123
|
| 933 |
-
msgid "Filter by post ID:"
|
| 934 |
-
msgstr "Filter by post ID:"
|
| 935 |
-
|
| 936 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:121
|
| 937 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:127
|
| 938 |
-
msgid "Filter by post IDs (separate IDs by comma):"
|
| 939 |
-
msgstr "Filter by post IDs (separate IDs by comma):"
|
| 940 |
-
|
| 941 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:126
|
| 942 |
-
msgid "Hide title and navigation buttons:"
|
| 943 |
-
msgstr "Hide title and navigation buttons:"
|
| 944 |
-
|
| 945 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:131
|
| 946 |
-
msgid "Set a default start date: *"
|
| 947 |
-
msgstr "Set a default start date: *"
|
| 948 |
-
|
| 949 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:139
|
| 950 |
-
msgid ""
|
| 951 |
-
"* Provide a date in the same format specified by the <strong>Input dates in "
|
| 952 |
-
"this format</strong> setting on the <strong>Adding/Editing Events</strong> "
|
| 953 |
-
"tab."
|
| 954 |
-
msgstr ""
|
| 955 |
-
"* Provide a date in the same format specified by the <strong>Input dates in "
|
| 956 |
-
"this format</strong> setting on the <strong>Adding/Editing Events</strong> "
|
| 957 |
-
"tab."
|
| 958 |
-
|
| 959 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:145
|
| 960 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:133
|
| 961 |
-
msgid "Warning:"
|
| 962 |
-
msgstr "Warning:"
|
| 963 |
-
|
| 964 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:149
|
| 965 |
-
msgid ""
|
| 966 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 967 |
-
"page. Do not attempt to embed the calendar via Super Widget in a page that "
|
| 968 |
-
"already displays the calendar."
|
| 969 |
-
msgstr ""
|
| 970 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 971 |
-
"page. Do not attempt to embed the calendar via Super Widget in a page that "
|
| 972 |
-
"already displays the calendar."
|
| 973 |
-
|
| 974 |
-
#: cache/twig/33/1c/dabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9.php:27
|
| 975 |
-
msgid "All-in-One Event Calendar"
|
| 976 |
-
msgstr "All-in-One Event Calendar"
|
| 977 |
-
|
| 978 |
-
#: cache/twig/36/41/cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php:39
|
| 979 |
-
msgid "Clear tag filter"
|
| 980 |
-
msgstr "Clear tag filter"
|
| 981 |
-
|
| 982 |
-
#: cache/twig/36/41/cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php:45
|
| 983 |
-
#: lib/html/element/setting/tags-categories.php:39
|
| 984 |
-
msgid "Tags"
|
| 985 |
-
msgstr "Tags"
|
| 986 |
-
|
| 987 |
-
#: cache/twig/41/2c/390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php:39
|
| 988 |
-
msgid "Clear category filter"
|
| 989 |
-
msgstr "Clear category filter"
|
| 990 |
-
|
| 991 |
-
#: cache/twig/41/2c/390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php:45
|
| 992 |
-
#: lib/html/element/setting/tags-categories.php:47
|
| 993 |
-
msgid "Categories"
|
| 994 |
-
msgstr "Categories"
|
| 995 |
-
|
| 996 |
-
#: cache/twig/5d/6a/4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php:23
|
| 997 |
-
msgid "Collapse All"
|
| 998 |
-
msgstr "Collapse All"
|
| 999 |
-
|
| 1000 |
-
#: cache/twig/5d/6a/4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php:29
|
| 1001 |
-
msgid "Expand All"
|
| 1002 |
-
msgstr "Expand All"
|
| 1003 |
-
|
| 1004 |
-
#: cache/twig/80/49/21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php:31
|
| 1005 |
-
msgid "Add Your Calendar Feed"
|
| 1006 |
-
msgstr "Add Your Calendar Feed"
|
| 1007 |
-
|
| 1008 |
-
#: cache/twig/80/49/21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php:57
|
| 1009 |
-
#: public/admin/calendar_tasks.php:13
|
| 1010 |
-
msgid "Post Your Event"
|
| 1011 |
-
msgstr "Post Your Event"
|
| 1012 |
-
|
| 1013 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:26
|
| 1014 |
-
msgid "Embed the calendar using a shortcode"
|
| 1015 |
-
msgstr "Embed the calendar using a shortcode"
|
| 1016 |
-
|
| 1017 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:36
|
| 1018 |
-
msgid ""
|
| 1019 |
-
"Insert one of these shortcodes into your page body to embed the calendar "
|
| 1020 |
-
"into any arbitrary WordPress Page:"
|
| 1021 |
-
msgstr ""
|
| 1022 |
-
"Insert one of these shortcodes into your page body to embed the calendar "
|
| 1023 |
-
"into any arbitrary WordPress Page:"
|
| 1024 |
-
|
| 1025 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:57
|
| 1026 |
-
msgid "Some Other view:"
|
| 1027 |
-
msgstr "Some Other view:"
|
| 1028 |
-
|
| 1029 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:71
|
| 1030 |
-
msgid ""
|
| 1031 |
-
"Add options to display a filtered calender. (You can find out category and "
|
| 1032 |
-
"tag IDs by inspecting the URL of your filtered calendar page.)"
|
| 1033 |
-
msgstr ""
|
| 1034 |
-
"Add options to display a filtered calender. (You can find out category and "
|
| 1035 |
-
"tag IDs by inspecting the URL of your filtered calendar page.)"
|
| 1036 |
-
|
| 1037 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:77
|
| 1038 |
-
msgid "Filter by event category name/slug:"
|
| 1039 |
-
msgstr "Filter by event category name/slug:"
|
| 1040 |
-
|
| 1041 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:79
|
| 1042 |
-
msgid "Holidays"
|
| 1043 |
-
msgstr "Holidays"
|
| 1044 |
-
|
| 1045 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:83
|
| 1046 |
-
msgid "Filter by event category names/slugs (separate names by comma):"
|
| 1047 |
-
msgstr "Filter by event category names/slugs (separate names by comma):"
|
| 1048 |
-
|
| 1049 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:85
|
| 1050 |
-
msgid "Lunar Cycles"
|
| 1051 |
-
msgstr "Lunar Cycles"
|
| 1052 |
-
|
| 1053 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:87
|
| 1054 |
-
msgid "zodiac-date-ranges"
|
| 1055 |
-
msgstr "zodiac-date-ranges"
|
| 1056 |
-
|
| 1057 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:100
|
| 1058 |
-
msgid "Filter by event tag name/slug:"
|
| 1059 |
-
msgstr "Filter by event tag name/slug:"
|
| 1060 |
-
|
| 1061 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:102
|
| 1062 |
-
msgid "tips-and-tricks"
|
| 1063 |
-
msgstr "tips-and-tricks"
|
| 1064 |
-
|
| 1065 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:106
|
| 1066 |
-
msgid "Filter by event tag names/slugs (separate names by comma):"
|
| 1067 |
-
msgstr "Filter by event tag names/slugs (separate names by comma):"
|
| 1068 |
-
|
| 1069 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:108
|
| 1070 |
-
msgid "creative writing"
|
| 1071 |
-
msgstr "creative writing"
|
| 1072 |
-
|
| 1073 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:110
|
| 1074 |
-
msgid "performing arts"
|
| 1075 |
-
msgstr "performing arts"
|
| 1076 |
-
|
| 1077 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:137
|
| 1078 |
-
msgid ""
|
| 1079 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 1080 |
-
"page. Do not attempt to embed the calendar via shortcode in a page that "
|
| 1081 |
-
"already displays the calendar."
|
| 1082 |
-
msgstr ""
|
| 1083 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 1084 |
-
"page. Do not attempt to embed the calendar via shortcode in a page that "
|
| 1085 |
-
"already displays the calendar."
|
| 1086 |
-
|
| 1087 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:30
|
| 1088 |
-
msgid "There are no upcoming events to display at this time."
|
| 1089 |
-
msgstr "There are no upcoming events to display at this time."
|
| 1090 |
-
|
| 1091 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:130
|
| 1092 |
-
msgid "@ %s"
|
| 1093 |
-
msgstr "@ %s"
|
| 1094 |
-
|
| 1095 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:149
|
| 1096 |
-
msgid "Edit"
|
| 1097 |
-
msgstr "Edit"
|
| 1098 |
-
|
| 1099 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:219
|
| 1100 |
-
msgid "Read more"
|
| 1101 |
-
msgstr "Read more"
|
| 1102 |
-
|
| 1103 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:238
|
| 1104 |
-
msgid "Categories:"
|
| 1105 |
-
msgstr "Categories:"
|
| 1106 |
-
|
| 1107 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:257
|
| 1108 |
-
#: lib/theme/list.php:323 public/admin/themes.php:29
|
| 1109 |
-
msgid "Tags:"
|
| 1110 |
-
msgstr "Tags:"
|
| 1111 |
-
|
| 1112 |
#: lib/calendar-feed/ics.php:33
|
| 1113 |
msgid "ICS"
|
| 1114 |
msgstr "ICS"
|
|
@@ -1306,10 +1019,22 @@ msgstr "Checking..."
|
|
| 1306 |
msgid "Performance Report"
|
| 1307 |
msgstr "Performance Report"
|
| 1308 |
|
| 1309 |
-
#: lib/html/element/setting/calendar-page-selector.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1310 |
msgid "- Auto-Create New Page -"
|
| 1311 |
msgstr "- Auto-Create New Page -"
|
| 1312 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1313 |
#: lib/less/variable/font.php:64
|
| 1314 |
msgid "Custom..."
|
| 1315 |
msgstr "Custom..."
|
|
@@ -1572,6 +1297,10 @@ msgstr ""
|
|
| 1572 |
msgid "All of this theme’s files are located in <code>%2$s</code>."
|
| 1573 |
msgstr "All of this theme’s files are located in <code>%2$s</code>."
|
| 1574 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1575 |
#: lib/theme/loader.php:285
|
| 1576 |
msgid "We couldn't find a suitable loader for filename with extension '%s'"
|
| 1577 |
msgstr "We couldn't find a suitable loader for filename with extension '%s'"
|
|
@@ -1857,27 +1586,27 @@ msgstr ""
|
|
| 1857 |
"Timely’s All-in-One Event Calendar is a<br />revolutionary new way to find "
|
| 1858 |
"and share events."
|
| 1859 |
|
| 1860 |
-
#: public/admin/box_support.php:
|
| 1861 |
msgid "Get Add-ons"
|
| 1862 |
msgstr "Get Add-ons"
|
| 1863 |
|
| 1864 |
-
#: public/admin/box_support.php:
|
| 1865 |
msgid "Support"
|
| 1866 |
msgstr "Support"
|
| 1867 |
|
| 1868 |
-
#: public/admin/box_support.php:
|
| 1869 |
-
msgid "
|
| 1870 |
-
msgstr "
|
| 1871 |
|
| 1872 |
-
#: public/admin/box_support.php:
|
| 1873 |
msgid "Timely News"
|
| 1874 |
msgstr "Timely News"
|
| 1875 |
|
| 1876 |
-
#: public/admin/box_support.php:
|
| 1877 |
msgid "view all news"
|
| 1878 |
msgstr "view all news"
|
| 1879 |
|
| 1880 |
-
#: public/admin/box_support.php:
|
| 1881 |
msgid "Follow @_Timely"
|
| 1882 |
msgstr "Follow @_Timely"
|
| 1883 |
|
|
@@ -1905,27 +1634,27 @@ msgstr "(Time zone: %s)"
|
|
| 1905 |
msgid "End date / time"
|
| 1906 |
msgstr "End date / time"
|
| 1907 |
|
| 1908 |
-
#: public/admin/box_time_and_date.php:
|
| 1909 |
msgid "Repeat"
|
| 1910 |
msgstr "Repeat"
|
| 1911 |
|
| 1912 |
-
#: public/admin/box_time_and_date.php:
|
| 1913 |
msgid "Exclude"
|
| 1914 |
msgstr "Exclude"
|
| 1915 |
|
| 1916 |
-
#: public/admin/box_time_and_date.php:
|
| 1917 |
msgid "Choose a rule for exclusion"
|
| 1918 |
msgstr "Choose a rule for exclusion"
|
| 1919 |
|
| 1920 |
-
#: public/admin/box_time_and_date.php:
|
| 1921 |
msgid "Exclude dates"
|
| 1922 |
msgstr "Exclude dates"
|
| 1923 |
|
| 1924 |
-
#: public/admin/box_time_and_date.php:
|
| 1925 |
msgid "Select date range"
|
| 1926 |
msgstr "Select date range"
|
| 1927 |
|
| 1928 |
-
#: public/admin/box_time_and_date.php:
|
| 1929 |
msgid "Choose specific dates to exclude"
|
| 1930 |
msgstr "Choose specific dates to exclude"
|
| 1931 |
|
|
@@ -1941,6 +1670,10 @@ msgstr ""
|
|
| 1941 |
"to the All-in-One Event Calendar by <a href=\"http://time.ly/\" target="
|
| 1942 |
"\"_blank\">Timely</a>"
|
| 1943 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1944 |
#: public/admin/calendar_tasks.php:16
|
| 1945 |
msgid "Add a new event to the calendar."
|
| 1946 |
msgstr "Add a new event to the calendar."
|
|
@@ -2364,9 +2097,9 @@ msgstr "Today background"
|
|
| 2364 |
msgid "All-in-One Event Calendar by Time.ly"
|
| 2365 |
msgstr "All-in-One Event Calendar by Time.ly"
|
| 2366 |
|
| 2367 |
-
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.
|
| 2368 |
#. Plugin URI of the plugin/theme
|
| 2369 |
-
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.
|
| 2370 |
#. Author URI of the plugin/theme
|
| 2371 |
msgid "http://time.ly/"
|
| 2372 |
msgstr "http://time.ly/"
|
| 2 |
# This file is distributed under the same license as the All-in-One Event Calendar by Time.ly package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: All-in-One Event Calendar by Time.ly 2.0.7\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
|
| 7 |
+
"POT-Creation-Date: 2014-05-13 16:04:05+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
+
"PO-Revision-Date: 2014-05-13 19:04+0300\n"
|
| 12 |
"Last-Translator: Timely <support@time.ly>\n"
|
| 13 |
"Language-Team:\n"
|
| 14 |
|
| 39 |
msgid "Calendar Themes"
|
| 40 |
msgstr "Calendar Themes"
|
| 41 |
|
| 42 |
+
#: app/controller/front.php:808
|
| 43 |
msgid ""
|
| 44 |
"Your database is found to be corrupt. Likely previous update has failed. "
|
| 45 |
"Please restore All-in-One Event Calendar tables from a backup and retry."
|
| 115 |
"The URL you have entered seems to be invalid. Please remember that URLs must "
|
| 116 |
"start with either \"http://\" or \"https://\"."
|
| 117 |
|
| 118 |
+
#: app/model/event/parent.php:186
|
| 119 |
+
msgid "Edit “%s”"
|
| 120 |
+
msgstr "Edit “%s”"
|
| 121 |
+
|
| 122 |
+
#: app/model/event/parent.php:193
|
| 123 |
+
msgid "Base Event"
|
| 124 |
+
msgstr "Base Event"
|
| 125 |
+
|
| 126 |
#: app/model/settings.php:325
|
| 127 |
+
#: lib/html/element/setting/calendar-page-selector.php:50
|
| 128 |
msgid "Calendar page"
|
| 129 |
msgstr "Calendar page"
|
| 130 |
|
| 392 |
msgid "Event Details"
|
| 393 |
msgstr "Event Details"
|
| 394 |
|
| 395 |
+
#: app/view/admin/add-new-event.php:311
|
| 396 |
msgid "Publish"
|
| 397 |
msgstr "Publish"
|
| 398 |
|
| 399 |
+
#: app/view/admin/add-new-event.php:312
|
| 400 |
msgid "Update"
|
| 401 |
msgstr "Update"
|
| 402 |
|
| 403 |
+
#: app/view/admin/add-new-event.php:314
|
| 404 |
msgid "Submit for Review"
|
| 405 |
msgstr "Submit for Review"
|
| 406 |
|
| 630 |
msgid "Save Settings"
|
| 631 |
msgstr "Save Settings"
|
| 632 |
|
| 633 |
+
#: app/view/admin/settings.php:178
|
| 634 |
+
msgid ""
|
| 635 |
+
"If the form below is not working please follow <a href=\"%s\">this link</a>."
|
| 636 |
+
msgstr ""
|
| 637 |
+
"If the form below is not working please follow <a href=\"%s\">this link</a>."
|
| 638 |
+
|
| 639 |
#: app/view/admin/theme-options.php:50 app/view/admin/theme-options.php:51
|
| 640 |
msgid "Theme Options"
|
| 641 |
msgstr "Theme Options"
|
| 718 |
msgstr "Back to Calendar"
|
| 719 |
|
| 720 |
#: app/view/event/content.php:121
|
| 721 |
+
msgid "View all events"
|
| 722 |
+
msgstr "View all events"
|
| 723 |
|
| 724 |
#: app/view/event/post.php:29
|
| 725 |
msgid "Event updated. <a href=\"%s\">View event</a>"
|
| 772 |
msgstr ""
|
| 773 |
"Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
|
| 774 |
|
| 775 |
+
#: app/view/event/single.php:83
|
| 776 |
msgid "Edit this occurrence (%s)"
|
| 777 |
msgstr "Edit this occurrence (%s)"
|
| 778 |
|
| 822 |
msgid ", and "
|
| 823 |
msgstr ", and "
|
| 824 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 825 |
#: lib/calendar-feed/ics.php:33
|
| 826 |
msgid "ICS"
|
| 827 |
msgstr "ICS"
|
| 1019 |
msgid "Performance Report"
|
| 1020 |
msgstr "Performance Report"
|
| 1021 |
|
| 1022 |
+
#: lib/html/element/setting/calendar-page-selector.php:70
|
| 1023 |
+
msgid "View"
|
| 1024 |
+
msgstr "View"
|
| 1025 |
+
|
| 1026 |
+
#: lib/html/element/setting/calendar-page-selector.php:114
|
| 1027 |
msgid "- Auto-Create New Page -"
|
| 1028 |
msgstr "- Auto-Create New Page -"
|
| 1029 |
|
| 1030 |
+
#: lib/html/element/setting/tags-categories.php:39
|
| 1031 |
+
msgid "Tags"
|
| 1032 |
+
msgstr "Tags"
|
| 1033 |
+
|
| 1034 |
+
#: lib/html/element/setting/tags-categories.php:47
|
| 1035 |
+
msgid "Categories"
|
| 1036 |
+
msgstr "Categories"
|
| 1037 |
+
|
| 1038 |
#: lib/less/variable/font.php:64
|
| 1039 |
msgid "Custom..."
|
| 1040 |
msgstr "Custom..."
|
| 1297 |
msgid "All of this theme’s files are located in <code>%2$s</code>."
|
| 1298 |
msgstr "All of this theme’s files are located in <code>%2$s</code>."
|
| 1299 |
|
| 1300 |
+
#: lib/theme/list.php:323 public/admin/themes.php:29
|
| 1301 |
+
msgid "Tags:"
|
| 1302 |
+
msgstr "Tags:"
|
| 1303 |
+
|
| 1304 |
#: lib/theme/loader.php:285
|
| 1305 |
msgid "We couldn't find a suitable loader for filename with extension '%s'"
|
| 1306 |
msgstr "We couldn't find a suitable loader for filename with extension '%s'"
|
| 1586 |
"Timely’s All-in-One Event Calendar is a<br />revolutionary new way to find "
|
| 1587 |
"and share events."
|
| 1588 |
|
| 1589 |
+
#: public/admin/box_support.php:19
|
| 1590 |
msgid "Get Add-ons"
|
| 1591 |
msgstr "Get Add-ons"
|
| 1592 |
|
| 1593 |
+
#: public/admin/box_support.php:27
|
| 1594 |
msgid "Support"
|
| 1595 |
msgstr "Support"
|
| 1596 |
|
| 1597 |
+
#: public/admin/box_support.php:35
|
| 1598 |
+
msgid "Timely Events"
|
| 1599 |
+
msgstr "Timely Events"
|
| 1600 |
|
| 1601 |
+
#: public/admin/box_support.php:43
|
| 1602 |
msgid "Timely News"
|
| 1603 |
msgstr "Timely News"
|
| 1604 |
|
| 1605 |
+
#: public/admin/box_support.php:47
|
| 1606 |
msgid "view all news"
|
| 1607 |
msgstr "view all news"
|
| 1608 |
|
| 1609 |
+
#: public/admin/box_support.php:95
|
| 1610 |
msgid "Follow @_Timely"
|
| 1611 |
msgstr "Follow @_Timely"
|
| 1612 |
|
| 1634 |
msgid "End date / time"
|
| 1635 |
msgstr "End date / time"
|
| 1636 |
|
| 1637 |
+
#: public/admin/box_time_and_date.php:97
|
| 1638 |
msgid "Repeat"
|
| 1639 |
msgstr "Repeat"
|
| 1640 |
|
| 1641 |
+
#: public/admin/box_time_and_date.php:116
|
| 1642 |
msgid "Exclude"
|
| 1643 |
msgstr "Exclude"
|
| 1644 |
|
| 1645 |
+
#: public/admin/box_time_and_date.php:125
|
| 1646 |
msgid "Choose a rule for exclusion"
|
| 1647 |
msgstr "Choose a rule for exclusion"
|
| 1648 |
|
| 1649 |
+
#: public/admin/box_time_and_date.php:132
|
| 1650 |
msgid "Exclude dates"
|
| 1651 |
msgstr "Exclude dates"
|
| 1652 |
|
| 1653 |
+
#: public/admin/box_time_and_date.php:139
|
| 1654 |
msgid "Select date range"
|
| 1655 |
msgstr "Select date range"
|
| 1656 |
|
| 1657 |
+
#: public/admin/box_time_and_date.php:146
|
| 1658 |
msgid "Choose specific dates to exclude"
|
| 1659 |
msgstr "Choose specific dates to exclude"
|
| 1660 |
|
| 1670 |
"to the All-in-One Event Calendar by <a href=\"http://time.ly/\" target="
|
| 1671 |
"\"_blank\">Timely</a>"
|
| 1672 |
|
| 1673 |
+
#: public/admin/calendar_tasks.php:13
|
| 1674 |
+
msgid "Post Your Event"
|
| 1675 |
+
msgstr "Post Your Event"
|
| 1676 |
+
|
| 1677 |
#: public/admin/calendar_tasks.php:16
|
| 1678 |
msgid "Add a new event to the calendar."
|
| 1679 |
msgstr "Add a new event to the calendar."
|
| 2097 |
msgid "All-in-One Event Calendar by Time.ly"
|
| 2098 |
msgstr "All-in-One Event Calendar by Time.ly"
|
| 2099 |
|
| 2100 |
+
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.7) #-#-#-#-#
|
| 2101 |
#. Plugin URI of the plugin/theme
|
| 2102 |
+
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.7) #-#-#-#-#
|
| 2103 |
#. Author URI of the plugin/theme
|
| 2104 |
msgid "http://time.ly/"
|
| 2105 |
msgstr "http://time.ly/"
|
language/all-in-one-event-calendar.pot
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
# This file is distributed under the same license as the All-in-One Event Calendar by Time.ly package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: All-in-One Event Calendar by Time.ly 2.0.
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
|
| 7 |
-
"POT-Creation-Date: 2014-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
|
@@ -36,7 +36,7 @@ msgstr ""
|
|
| 36 |
msgid "Calendar Themes"
|
| 37 |
msgstr ""
|
| 38 |
|
| 39 |
-
#: app/controller/front.php:
|
| 40 |
msgid ""
|
| 41 |
"Your database is found to be corrupt. Likely previous update has failed. "
|
| 42 |
"Please restore All-in-One Event Calendar tables from a backup and retry."
|
|
@@ -98,8 +98,16 @@ msgid ""
|
|
| 98 |
"start with either \"http://\" or \"https://\"."
|
| 99 |
msgstr ""
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
#: app/model/settings.php:325
|
| 102 |
-
#: lib/html/element/setting/calendar-page-selector.php:
|
| 103 |
msgid "Calendar page"
|
| 104 |
msgstr ""
|
| 105 |
|
|
@@ -321,15 +329,15 @@ msgstr ""
|
|
| 321 |
msgid "Event Details"
|
| 322 |
msgstr ""
|
| 323 |
|
| 324 |
-
#: app/view/admin/add-new-event.php:
|
| 325 |
msgid "Publish"
|
| 326 |
msgstr ""
|
| 327 |
|
| 328 |
-
#: app/view/admin/add-new-event.php:
|
| 329 |
msgid "Update"
|
| 330 |
msgstr ""
|
| 331 |
|
| 332 |
-
#: app/view/admin/add-new-event.php:
|
| 333 |
msgid "Submit for Review"
|
| 334 |
msgstr ""
|
| 335 |
|
|
@@ -557,6 +565,11 @@ msgstr ""
|
|
| 557 |
msgid "Save Settings"
|
| 558 |
msgstr ""
|
| 559 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 560 |
#: app/view/admin/theme-options.php:50 app/view/admin/theme-options.php:51
|
| 561 |
msgid "Theme Options"
|
| 562 |
msgstr ""
|
|
@@ -637,7 +650,7 @@ msgid "Back to Calendar"
|
|
| 637 |
msgstr ""
|
| 638 |
|
| 639 |
#: app/view/event/content.php:121
|
| 640 |
-
msgid "
|
| 641 |
msgstr ""
|
| 642 |
|
| 643 |
#: app/view/event/post.php:29
|
|
@@ -688,7 +701,7 @@ msgstr ""
|
|
| 688 |
msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
|
| 689 |
msgstr ""
|
| 690 |
|
| 691 |
-
#: app/view/event/single.php:
|
| 692 |
msgid "Edit this occurrence (%s)"
|
| 693 |
msgstr ""
|
| 694 |
|
|
@@ -738,289 +751,6 @@ msgstr ""
|
|
| 738 |
msgid ", and "
|
| 739 |
msgstr ""
|
| 740 |
|
| 741 |
-
#: cache/twig/14/14/340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php:31
|
| 742 |
-
msgid "Enabled"
|
| 743 |
-
msgstr ""
|
| 744 |
-
|
| 745 |
-
#: cache/twig/14/14/340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php:35
|
| 746 |
-
msgid "Default"
|
| 747 |
-
msgstr ""
|
| 748 |
-
|
| 749 |
-
#: cache/twig/14/b3/3cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799.php:48
|
| 750 |
-
msgid "Choose a date using calendar"
|
| 751 |
-
msgstr ""
|
| 752 |
-
|
| 753 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:31
|
| 754 |
-
msgid ""
|
| 755 |
-
"Subscribe to this calendar in your personal calendar (iCal, Outlook, etc.)"
|
| 756 |
-
msgstr ""
|
| 757 |
-
|
| 758 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:48
|
| 759 |
-
msgid "Subscribe to filtered calendar"
|
| 760 |
-
msgstr ""
|
| 761 |
-
|
| 762 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:54
|
| 763 |
-
msgid "Subscribe"
|
| 764 |
-
msgstr ""
|
| 765 |
-
|
| 766 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:77
|
| 767 |
-
msgid "Subscribe to this calendar in your Google Calendar"
|
| 768 |
-
msgstr ""
|
| 769 |
-
|
| 770 |
-
#: cache/twig/22/6c/b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php:91
|
| 771 |
-
msgid "Add to Google"
|
| 772 |
-
msgstr ""
|
| 773 |
-
|
| 774 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:26
|
| 775 |
-
msgid "Embed the calendar using the Super Widget"
|
| 776 |
-
msgstr ""
|
| 777 |
-
|
| 778 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:36
|
| 779 |
-
msgid ""
|
| 780 |
-
"You can also embed a calendar into a remote webpage (for example, a static "
|
| 781 |
-
"HTML page hosted on a different server). Here's how:"
|
| 782 |
-
msgstr ""
|
| 783 |
-
|
| 784 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:42
|
| 785 |
-
msgid "Add this line just before the closing <code></head></code> tag:"
|
| 786 |
-
msgstr ""
|
| 787 |
-
|
| 788 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:52
|
| 789 |
-
msgid ""
|
| 790 |
-
"Insert this markup where you would like to embed the Super Widget (using "
|
| 791 |
-
"default options):"
|
| 792 |
-
msgstr ""
|
| 793 |
-
|
| 794 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:60
|
| 795 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:67
|
| 796 |
-
msgid "Optional."
|
| 797 |
-
msgstr ""
|
| 798 |
-
|
| 799 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:64
|
| 800 |
-
msgid "Add options to your Super Widget:"
|
| 801 |
-
msgstr ""
|
| 802 |
-
|
| 803 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:70
|
| 804 |
-
msgid "Posterboard view:"
|
| 805 |
-
msgstr ""
|
| 806 |
-
|
| 807 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:74
|
| 808 |
-
msgid "Stream view:"
|
| 809 |
-
msgstr ""
|
| 810 |
-
|
| 811 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:78
|
| 812 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:41
|
| 813 |
-
msgid "Month view:"
|
| 814 |
-
msgstr ""
|
| 815 |
-
|
| 816 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:82
|
| 817 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:45
|
| 818 |
-
msgid "Week view:"
|
| 819 |
-
msgstr ""
|
| 820 |
-
|
| 821 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:86
|
| 822 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:49
|
| 823 |
-
msgid "Day view:"
|
| 824 |
-
msgstr ""
|
| 825 |
-
|
| 826 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:90
|
| 827 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:53
|
| 828 |
-
msgid "Agenda view:"
|
| 829 |
-
msgstr ""
|
| 830 |
-
|
| 831 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:94
|
| 832 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:61
|
| 833 |
-
msgid "Default view as per settings:"
|
| 834 |
-
msgstr ""
|
| 835 |
-
|
| 836 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:99
|
| 837 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:91
|
| 838 |
-
msgid "Filter by event category ID:"
|
| 839 |
-
msgstr ""
|
| 840 |
-
|
| 841 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:103
|
| 842 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:95
|
| 843 |
-
msgid "Filter by event category IDs (separate IDs by comma):"
|
| 844 |
-
msgstr ""
|
| 845 |
-
|
| 846 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:108
|
| 847 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:114
|
| 848 |
-
msgid "Filter by event tag ID:"
|
| 849 |
-
msgstr ""
|
| 850 |
-
|
| 851 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:112
|
| 852 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:118
|
| 853 |
-
msgid "Filter by event tag IDs (separate IDs by comma):"
|
| 854 |
-
msgstr ""
|
| 855 |
-
|
| 856 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:117
|
| 857 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:123
|
| 858 |
-
msgid "Filter by post ID:"
|
| 859 |
-
msgstr ""
|
| 860 |
-
|
| 861 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:121
|
| 862 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:127
|
| 863 |
-
msgid "Filter by post IDs (separate IDs by comma):"
|
| 864 |
-
msgstr ""
|
| 865 |
-
|
| 866 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:126
|
| 867 |
-
msgid "Hide title and navigation buttons:"
|
| 868 |
-
msgstr ""
|
| 869 |
-
|
| 870 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:131
|
| 871 |
-
msgid "Set a default start date: *"
|
| 872 |
-
msgstr ""
|
| 873 |
-
|
| 874 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:139
|
| 875 |
-
msgid ""
|
| 876 |
-
"* Provide a date in the same format specified by the <strong>Input dates in "
|
| 877 |
-
"this format</strong> setting on the <strong>Adding/Editing Events</strong> "
|
| 878 |
-
"tab."
|
| 879 |
-
msgstr ""
|
| 880 |
-
|
| 881 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:145
|
| 882 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:133
|
| 883 |
-
msgid "Warning:"
|
| 884 |
-
msgstr ""
|
| 885 |
-
|
| 886 |
-
#: cache/twig/31/41/6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php:149
|
| 887 |
-
msgid ""
|
| 888 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 889 |
-
"page. Do not attempt to embed the calendar via Super Widget in a page that "
|
| 890 |
-
"already displays the calendar."
|
| 891 |
-
msgstr ""
|
| 892 |
-
|
| 893 |
-
#: cache/twig/33/1c/dabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9.php:27
|
| 894 |
-
msgid "All-in-One Event Calendar"
|
| 895 |
-
msgstr ""
|
| 896 |
-
|
| 897 |
-
#: cache/twig/36/41/cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php:39
|
| 898 |
-
msgid "Clear tag filter"
|
| 899 |
-
msgstr ""
|
| 900 |
-
|
| 901 |
-
#: cache/twig/36/41/cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php:45
|
| 902 |
-
#: lib/html/element/setting/tags-categories.php:39
|
| 903 |
-
msgid "Tags"
|
| 904 |
-
msgstr ""
|
| 905 |
-
|
| 906 |
-
#: cache/twig/41/2c/390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php:39
|
| 907 |
-
msgid "Clear category filter"
|
| 908 |
-
msgstr ""
|
| 909 |
-
|
| 910 |
-
#: cache/twig/41/2c/390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php:45
|
| 911 |
-
#: lib/html/element/setting/tags-categories.php:47
|
| 912 |
-
msgid "Categories"
|
| 913 |
-
msgstr ""
|
| 914 |
-
|
| 915 |
-
#: cache/twig/5d/6a/4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php:23
|
| 916 |
-
msgid "Collapse All"
|
| 917 |
-
msgstr ""
|
| 918 |
-
|
| 919 |
-
#: cache/twig/5d/6a/4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php:29
|
| 920 |
-
msgid "Expand All"
|
| 921 |
-
msgstr ""
|
| 922 |
-
|
| 923 |
-
#: cache/twig/80/49/21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php:31
|
| 924 |
-
msgid "Add Your Calendar Feed"
|
| 925 |
-
msgstr ""
|
| 926 |
-
|
| 927 |
-
#: cache/twig/80/49/21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php:57
|
| 928 |
-
#: public/admin/calendar_tasks.php:13
|
| 929 |
-
msgid "Post Your Event"
|
| 930 |
-
msgstr ""
|
| 931 |
-
|
| 932 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:26
|
| 933 |
-
msgid "Embed the calendar using a shortcode"
|
| 934 |
-
msgstr ""
|
| 935 |
-
|
| 936 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:36
|
| 937 |
-
msgid ""
|
| 938 |
-
"Insert one of these shortcodes into your page body to embed the calendar "
|
| 939 |
-
"into any arbitrary WordPress Page:"
|
| 940 |
-
msgstr ""
|
| 941 |
-
|
| 942 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:57
|
| 943 |
-
msgid "Some Other view:"
|
| 944 |
-
msgstr ""
|
| 945 |
-
|
| 946 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:71
|
| 947 |
-
msgid ""
|
| 948 |
-
"Add options to display a filtered calender. (You can find out category and "
|
| 949 |
-
"tag IDs by inspecting the URL of your filtered calendar page.)"
|
| 950 |
-
msgstr ""
|
| 951 |
-
|
| 952 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:77
|
| 953 |
-
msgid "Filter by event category name/slug:"
|
| 954 |
-
msgstr ""
|
| 955 |
-
|
| 956 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:79
|
| 957 |
-
msgid "Holidays"
|
| 958 |
-
msgstr ""
|
| 959 |
-
|
| 960 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:83
|
| 961 |
-
msgid "Filter by event category names/slugs (separate names by comma):"
|
| 962 |
-
msgstr ""
|
| 963 |
-
|
| 964 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:85
|
| 965 |
-
msgid "Lunar Cycles"
|
| 966 |
-
msgstr ""
|
| 967 |
-
|
| 968 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:87
|
| 969 |
-
msgid "zodiac-date-ranges"
|
| 970 |
-
msgstr ""
|
| 971 |
-
|
| 972 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:100
|
| 973 |
-
msgid "Filter by event tag name/slug:"
|
| 974 |
-
msgstr ""
|
| 975 |
-
|
| 976 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:102
|
| 977 |
-
msgid "tips-and-tricks"
|
| 978 |
-
msgstr ""
|
| 979 |
-
|
| 980 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:106
|
| 981 |
-
msgid "Filter by event tag names/slugs (separate names by comma):"
|
| 982 |
-
msgstr ""
|
| 983 |
-
|
| 984 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:108
|
| 985 |
-
msgid "creative writing"
|
| 986 |
-
msgstr ""
|
| 987 |
-
|
| 988 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:110
|
| 989 |
-
msgid "performing arts"
|
| 990 |
-
msgstr ""
|
| 991 |
-
|
| 992 |
-
#: cache/twig/ca/44/0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php:137
|
| 993 |
-
msgid ""
|
| 994 |
-
"It is currently not supported to embed more than one calendar in the same "
|
| 995 |
-
"page. Do not attempt to embed the calendar via shortcode in a page that "
|
| 996 |
-
"already displays the calendar."
|
| 997 |
-
msgstr ""
|
| 998 |
-
|
| 999 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:30
|
| 1000 |
-
msgid "There are no upcoming events to display at this time."
|
| 1001 |
-
msgstr ""
|
| 1002 |
-
|
| 1003 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:130
|
| 1004 |
-
msgid "@ %s"
|
| 1005 |
-
msgstr ""
|
| 1006 |
-
|
| 1007 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:149
|
| 1008 |
-
msgid "Edit"
|
| 1009 |
-
msgstr ""
|
| 1010 |
-
|
| 1011 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:219
|
| 1012 |
-
msgid "Read more"
|
| 1013 |
-
msgstr ""
|
| 1014 |
-
|
| 1015 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:238
|
| 1016 |
-
msgid "Categories:"
|
| 1017 |
-
msgstr ""
|
| 1018 |
-
|
| 1019 |
-
#: cache/twig/d5/ea/0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php:257
|
| 1020 |
-
#: lib/theme/list.php:323 public/admin/themes.php:29
|
| 1021 |
-
msgid "Tags:"
|
| 1022 |
-
msgstr ""
|
| 1023 |
-
|
| 1024 |
#: lib/calendar-feed/ics.php:33
|
| 1025 |
msgid "ICS"
|
| 1026 |
msgstr ""
|
|
@@ -1197,10 +927,22 @@ msgstr ""
|
|
| 1197 |
msgid "Performance Report"
|
| 1198 |
msgstr ""
|
| 1199 |
|
| 1200 |
-
#: lib/html/element/setting/calendar-page-selector.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1201 |
msgid "- Auto-Create New Page -"
|
| 1202 |
msgstr ""
|
| 1203 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1204 |
#: lib/less/variable/font.php:64
|
| 1205 |
msgid "Custom..."
|
| 1206 |
msgstr ""
|
|
@@ -1448,6 +1190,10 @@ msgstr ""
|
|
| 1448 |
msgid "All of this theme’s files are located in <code>%2$s</code>."
|
| 1449 |
msgstr ""
|
| 1450 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1451 |
#: lib/theme/loader.php:285
|
| 1452 |
msgid "We couldn't find a suitable loader for filename with extension '%s'"
|
| 1453 |
msgstr ""
|
|
@@ -1724,27 +1470,27 @@ msgid ""
|
|
| 1724 |
"and share events."
|
| 1725 |
msgstr ""
|
| 1726 |
|
| 1727 |
-
#: public/admin/box_support.php:
|
| 1728 |
msgid "Get Add-ons"
|
| 1729 |
msgstr ""
|
| 1730 |
|
| 1731 |
-
#: public/admin/box_support.php:
|
| 1732 |
msgid "Support"
|
| 1733 |
msgstr ""
|
| 1734 |
|
| 1735 |
-
#: public/admin/box_support.php:
|
| 1736 |
-
msgid "
|
| 1737 |
msgstr ""
|
| 1738 |
|
| 1739 |
-
#: public/admin/box_support.php:
|
| 1740 |
msgid "Timely News"
|
| 1741 |
msgstr ""
|
| 1742 |
|
| 1743 |
-
#: public/admin/box_support.php:
|
| 1744 |
msgid "view all news"
|
| 1745 |
msgstr ""
|
| 1746 |
|
| 1747 |
-
#: public/admin/box_support.php:
|
| 1748 |
msgid "Follow @_Timely"
|
| 1749 |
msgstr ""
|
| 1750 |
|
|
@@ -1772,27 +1518,27 @@ msgstr ""
|
|
| 1772 |
msgid "End date / time"
|
| 1773 |
msgstr ""
|
| 1774 |
|
| 1775 |
-
#: public/admin/box_time_and_date.php:
|
| 1776 |
msgid "Repeat"
|
| 1777 |
msgstr ""
|
| 1778 |
|
| 1779 |
-
#: public/admin/box_time_and_date.php:
|
| 1780 |
msgid "Exclude"
|
| 1781 |
msgstr ""
|
| 1782 |
|
| 1783 |
-
#: public/admin/box_time_and_date.php:
|
| 1784 |
msgid "Choose a rule for exclusion"
|
| 1785 |
msgstr ""
|
| 1786 |
|
| 1787 |
-
#: public/admin/box_time_and_date.php:
|
| 1788 |
msgid "Exclude dates"
|
| 1789 |
msgstr ""
|
| 1790 |
|
| 1791 |
-
#: public/admin/box_time_and_date.php:
|
| 1792 |
msgid "Select date range"
|
| 1793 |
msgstr ""
|
| 1794 |
|
| 1795 |
-
#: public/admin/box_time_and_date.php:
|
| 1796 |
msgid "Choose specific dates to exclude"
|
| 1797 |
msgstr ""
|
| 1798 |
|
|
@@ -1806,6 +1552,10 @@ msgid ""
|
|
| 1806 |
"\"_blank\">Timely</a>"
|
| 1807 |
msgstr ""
|
| 1808 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1809 |
#: public/admin/calendar_tasks.php:16
|
| 1810 |
msgid "Add a new event to the calendar."
|
| 1811 |
msgstr ""
|
|
@@ -2224,9 +1974,9 @@ msgstr ""
|
|
| 2224 |
msgid "All-in-One Event Calendar by Time.ly"
|
| 2225 |
msgstr ""
|
| 2226 |
|
| 2227 |
-
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.
|
| 2228 |
#. Plugin URI of the plugin/theme
|
| 2229 |
-
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.
|
| 2230 |
#. Author URI of the plugin/theme
|
| 2231 |
msgid "http://time.ly/"
|
| 2232 |
msgstr ""
|
| 2 |
# This file is distributed under the same license as the All-in-One Event Calendar by Time.ly package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: All-in-One Event Calendar by Time.ly 2.0.7\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
|
| 7 |
+
"POT-Creation-Date: 2014-05-13 16:04:05+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 36 |
msgid "Calendar Themes"
|
| 37 |
msgstr ""
|
| 38 |
|
| 39 |
+
#: app/controller/front.php:808
|
| 40 |
msgid ""
|
| 41 |
"Your database is found to be corrupt. Likely previous update has failed. "
|
| 42 |
"Please restore All-in-One Event Calendar tables from a backup and retry."
|
| 98 |
"start with either \"http://\" or \"https://\"."
|
| 99 |
msgstr ""
|
| 100 |
|
| 101 |
+
#: app/model/event/parent.php:186
|
| 102 |
+
msgid "Edit “%s”"
|
| 103 |
+
msgstr ""
|
| 104 |
+
|
| 105 |
+
#: app/model/event/parent.php:193
|
| 106 |
+
msgid "Base Event"
|
| 107 |
+
msgstr ""
|
| 108 |
+
|
| 109 |
#: app/model/settings.php:325
|
| 110 |
+
#: lib/html/element/setting/calendar-page-selector.php:50
|
| 111 |
msgid "Calendar page"
|
| 112 |
msgstr ""
|
| 113 |
|
| 329 |
msgid "Event Details"
|
| 330 |
msgstr ""
|
| 331 |
|
| 332 |
+
#: app/view/admin/add-new-event.php:311
|
| 333 |
msgid "Publish"
|
| 334 |
msgstr ""
|
| 335 |
|
| 336 |
+
#: app/view/admin/add-new-event.php:312
|
| 337 |
msgid "Update"
|
| 338 |
msgstr ""
|
| 339 |
|
| 340 |
+
#: app/view/admin/add-new-event.php:314
|
| 341 |
msgid "Submit for Review"
|
| 342 |
msgstr ""
|
| 343 |
|
| 565 |
msgid "Save Settings"
|
| 566 |
msgstr ""
|
| 567 |
|
| 568 |
+
#: app/view/admin/settings.php:178
|
| 569 |
+
msgid ""
|
| 570 |
+
"If the form below is not working please follow <a href=\"%s\">this link</a>."
|
| 571 |
+
msgstr ""
|
| 572 |
+
|
| 573 |
#: app/view/admin/theme-options.php:50 app/view/admin/theme-options.php:51
|
| 574 |
msgid "Theme Options"
|
| 575 |
msgstr ""
|
| 650 |
msgstr ""
|
| 651 |
|
| 652 |
#: app/view/event/content.php:121
|
| 653 |
+
msgid "View all events"
|
| 654 |
msgstr ""
|
| 655 |
|
| 656 |
#: app/view/event/post.php:29
|
| 701 |
msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
|
| 702 |
msgstr ""
|
| 703 |
|
| 704 |
+
#: app/view/event/single.php:83
|
| 705 |
msgid "Edit this occurrence (%s)"
|
| 706 |
msgstr ""
|
| 707 |
|
| 751 |
msgid ", and "
|
| 752 |
msgstr ""
|
| 753 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 754 |
#: lib/calendar-feed/ics.php:33
|
| 755 |
msgid "ICS"
|
| 756 |
msgstr ""
|
| 927 |
msgid "Performance Report"
|
| 928 |
msgstr ""
|
| 929 |
|
| 930 |
+
#: lib/html/element/setting/calendar-page-selector.php:70
|
| 931 |
+
msgid "View"
|
| 932 |
+
msgstr ""
|
| 933 |
+
|
| 934 |
+
#: lib/html/element/setting/calendar-page-selector.php:114
|
| 935 |
msgid "- Auto-Create New Page -"
|
| 936 |
msgstr ""
|
| 937 |
|
| 938 |
+
#: lib/html/element/setting/tags-categories.php:39
|
| 939 |
+
msgid "Tags"
|
| 940 |
+
msgstr ""
|
| 941 |
+
|
| 942 |
+
#: lib/html/element/setting/tags-categories.php:47
|
| 943 |
+
msgid "Categories"
|
| 944 |
+
msgstr ""
|
| 945 |
+
|
| 946 |
#: lib/less/variable/font.php:64
|
| 947 |
msgid "Custom..."
|
| 948 |
msgstr ""
|
| 1190 |
msgid "All of this theme’s files are located in <code>%2$s</code>."
|
| 1191 |
msgstr ""
|
| 1192 |
|
| 1193 |
+
#: lib/theme/list.php:323 public/admin/themes.php:29
|
| 1194 |
+
msgid "Tags:"
|
| 1195 |
+
msgstr ""
|
| 1196 |
+
|
| 1197 |
#: lib/theme/loader.php:285
|
| 1198 |
msgid "We couldn't find a suitable loader for filename with extension '%s'"
|
| 1199 |
msgstr ""
|
| 1470 |
"and share events."
|
| 1471 |
msgstr ""
|
| 1472 |
|
| 1473 |
+
#: public/admin/box_support.php:19
|
| 1474 |
msgid "Get Add-ons"
|
| 1475 |
msgstr ""
|
| 1476 |
|
| 1477 |
+
#: public/admin/box_support.php:27
|
| 1478 |
msgid "Support"
|
| 1479 |
msgstr ""
|
| 1480 |
|
| 1481 |
+
#: public/admin/box_support.php:35
|
| 1482 |
+
msgid "Timely Events"
|
| 1483 |
msgstr ""
|
| 1484 |
|
| 1485 |
+
#: public/admin/box_support.php:43
|
| 1486 |
msgid "Timely News"
|
| 1487 |
msgstr ""
|
| 1488 |
|
| 1489 |
+
#: public/admin/box_support.php:47
|
| 1490 |
msgid "view all news"
|
| 1491 |
msgstr ""
|
| 1492 |
|
| 1493 |
+
#: public/admin/box_support.php:95
|
| 1494 |
msgid "Follow @_Timely"
|
| 1495 |
msgstr ""
|
| 1496 |
|
| 1518 |
msgid "End date / time"
|
| 1519 |
msgstr ""
|
| 1520 |
|
| 1521 |
+
#: public/admin/box_time_and_date.php:97
|
| 1522 |
msgid "Repeat"
|
| 1523 |
msgstr ""
|
| 1524 |
|
| 1525 |
+
#: public/admin/box_time_and_date.php:116
|
| 1526 |
msgid "Exclude"
|
| 1527 |
msgstr ""
|
| 1528 |
|
| 1529 |
+
#: public/admin/box_time_and_date.php:125
|
| 1530 |
msgid "Choose a rule for exclusion"
|
| 1531 |
msgstr ""
|
| 1532 |
|
| 1533 |
+
#: public/admin/box_time_and_date.php:132
|
| 1534 |
msgid "Exclude dates"
|
| 1535 |
msgstr ""
|
| 1536 |
|
| 1537 |
+
#: public/admin/box_time_and_date.php:139
|
| 1538 |
msgid "Select date range"
|
| 1539 |
msgstr ""
|
| 1540 |
|
| 1541 |
+
#: public/admin/box_time_and_date.php:146
|
| 1542 |
msgid "Choose specific dates to exclude"
|
| 1543 |
msgstr ""
|
| 1544 |
|
| 1552 |
"\"_blank\">Timely</a>"
|
| 1553 |
msgstr ""
|
| 1554 |
|
| 1555 |
+
#: public/admin/calendar_tasks.php:13
|
| 1556 |
+
msgid "Post Your Event"
|
| 1557 |
+
msgstr ""
|
| 1558 |
+
|
| 1559 |
#: public/admin/calendar_tasks.php:16
|
| 1560 |
msgid "Add a new event to the calendar."
|
| 1561 |
msgstr ""
|
| 1974 |
msgid "All-in-One Event Calendar by Time.ly"
|
| 1975 |
msgstr ""
|
| 1976 |
|
| 1977 |
+
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.7) #-#-#-#-#
|
| 1978 |
#. Plugin URI of the plugin/theme
|
| 1979 |
+
#. #-#-#-#-# all-in-one-event-calendar.pot (All-in-One Event Calendar by Time.ly 2.0.7) #-#-#-#-#
|
| 1980 |
#. Author URI of the plugin/theme
|
| 1981 |
msgid "http://time.ly/"
|
| 1982 |
msgstr ""
|
lib/bootstrap/loader-map.php
CHANGED
|
@@ -212,6 +212,13 @@
|
|
| 212 |
'i' => 'g',
|
| 213 |
'r' => 'y',
|
| 214 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
'Ai1ec_Command_Export_Events' =>
|
| 216 |
array (
|
| 217 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'export-events.php',
|
|
@@ -500,6 +507,13 @@
|
|
| 500 |
'c' => 'Ai1ec_Event_Not_Found_Exception',
|
| 501 |
'i' => 'g',
|
| 502 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 503 |
'Ai1ec_Event_Search' =>
|
| 504 |
array (
|
| 505 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'search.php',
|
|
@@ -2449,192 +2463,6 @@
|
|
| 2449 |
'c' => 'Twig_TokenStream',
|
| 2450 |
'i' => 'g',
|
| 2451 |
),
|
| 2452 |
-
'__TwigTemplate_0390aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577' =>
|
| 2453 |
-
array (
|
| 2454 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '03' . DIRECTORY_SEPARATOR . '90' . DIRECTORY_SEPARATOR . 'aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577.php',
|
| 2455 |
-
'c' => '__TwigTemplate_0390aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577',
|
| 2456 |
-
'i' => 'g',
|
| 2457 |
-
),
|
| 2458 |
-
'__TwigTemplate_0d04fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb' =>
|
| 2459 |
-
array (
|
| 2460 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '0d' . DIRECTORY_SEPARATOR . '04' . DIRECTORY_SEPARATOR . 'fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb.php',
|
| 2461 |
-
'c' => '__TwigTemplate_0d04fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb',
|
| 2462 |
-
'i' => 'g',
|
| 2463 |
-
),
|
| 2464 |
-
'__TwigTemplate_1414340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657' =>
|
| 2465 |
-
array (
|
| 2466 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . '340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php',
|
| 2467 |
-
'c' => '__TwigTemplate_1414340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657',
|
| 2468 |
-
'i' => 'g',
|
| 2469 |
-
),
|
| 2470 |
-
'__TwigTemplate_14b33cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799' =>
|
| 2471 |
-
array (
|
| 2472 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . 'b3' . DIRECTORY_SEPARATOR . '3cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799.php',
|
| 2473 |
-
'c' => '__TwigTemplate_14b33cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799',
|
| 2474 |
-
'i' => 'g',
|
| 2475 |
-
),
|
| 2476 |
-
'__TwigTemplate_18526ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b' =>
|
| 2477 |
-
array (
|
| 2478 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '18' . DIRECTORY_SEPARATOR . '52' . DIRECTORY_SEPARATOR . '6ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b.php',
|
| 2479 |
-
'c' => '__TwigTemplate_18526ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b',
|
| 2480 |
-
'i' => 'g',
|
| 2481 |
-
),
|
| 2482 |
-
'__TwigTemplate_1fb0d88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428' =>
|
| 2483 |
-
array (
|
| 2484 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '1f' . DIRECTORY_SEPARATOR . 'b0' . DIRECTORY_SEPARATOR . 'd88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428.php',
|
| 2485 |
-
'c' => '__TwigTemplate_1fb0d88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428',
|
| 2486 |
-
'i' => 'g',
|
| 2487 |
-
),
|
| 2488 |
-
'__TwigTemplate_226cb502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5' =>
|
| 2489 |
-
array (
|
| 2490 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '22' . DIRECTORY_SEPARATOR . '6c' . DIRECTORY_SEPARATOR . 'b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php',
|
| 2491 |
-
'c' => '__TwigTemplate_226cb502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5',
|
| 2492 |
-
'i' => 'g',
|
| 2493 |
-
),
|
| 2494 |
-
'__TwigTemplate_281c29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c' =>
|
| 2495 |
-
array (
|
| 2496 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '28' . DIRECTORY_SEPARATOR . '1c' . DIRECTORY_SEPARATOR . '29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c.php',
|
| 2497 |
-
'c' => '__TwigTemplate_281c29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c',
|
| 2498 |
-
'i' => 'g',
|
| 2499 |
-
),
|
| 2500 |
-
'__TwigTemplate_31416a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848' =>
|
| 2501 |
-
array (
|
| 2502 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '31' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . '6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php',
|
| 2503 |
-
'c' => '__TwigTemplate_31416a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848',
|
| 2504 |
-
'i' => 'g',
|
| 2505 |
-
),
|
| 2506 |
-
'__TwigTemplate_331cdabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9' =>
|
| 2507 |
-
array (
|
| 2508 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '33' . DIRECTORY_SEPARATOR . '1c' . DIRECTORY_SEPARATOR . 'dabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9.php',
|
| 2509 |
-
'c' => '__TwigTemplate_331cdabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9',
|
| 2510 |
-
'i' => 'g',
|
| 2511 |
-
),
|
| 2512 |
-
'__TwigTemplate_3641cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e' =>
|
| 2513 |
-
array (
|
| 2514 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '36' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . 'cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php',
|
| 2515 |
-
'c' => '__TwigTemplate_3641cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e',
|
| 2516 |
-
'i' => 'g',
|
| 2517 |
-
),
|
| 2518 |
-
'__TwigTemplate_3f6c8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a' =>
|
| 2519 |
-
array (
|
| 2520 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '3f' . DIRECTORY_SEPARATOR . '6c' . DIRECTORY_SEPARATOR . '8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a.php',
|
| 2521 |
-
'c' => '__TwigTemplate_3f6c8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a',
|
| 2522 |
-
'i' => 'g',
|
| 2523 |
-
),
|
| 2524 |
-
'__TwigTemplate_412c390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344' =>
|
| 2525 |
-
array (
|
| 2526 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . '2c' . DIRECTORY_SEPARATOR . '390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php',
|
| 2527 |
-
'c' => '__TwigTemplate_412c390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344',
|
| 2528 |
-
'i' => 'g',
|
| 2529 |
-
),
|
| 2530 |
-
'__TwigTemplate_5528bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40' =>
|
| 2531 |
-
array (
|
| 2532 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '55' . DIRECTORY_SEPARATOR . '28' . DIRECTORY_SEPARATOR . 'bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40.php',
|
| 2533 |
-
'c' => '__TwigTemplate_5528bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40',
|
| 2534 |
-
'i' => 'g',
|
| 2535 |
-
),
|
| 2536 |
-
'__TwigTemplate_583af310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e' =>
|
| 2537 |
-
array (
|
| 2538 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '58' . DIRECTORY_SEPARATOR . '3a' . DIRECTORY_SEPARATOR . 'f310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e.php',
|
| 2539 |
-
'c' => '__TwigTemplate_583af310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e',
|
| 2540 |
-
'i' => 'g',
|
| 2541 |
-
),
|
| 2542 |
-
'__TwigTemplate_5d6a4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b' =>
|
| 2543 |
-
array (
|
| 2544 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '5d' . DIRECTORY_SEPARATOR . '6a' . DIRECTORY_SEPARATOR . '4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php',
|
| 2545 |
-
'c' => '__TwigTemplate_5d6a4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b',
|
| 2546 |
-
'i' => 'g',
|
| 2547 |
-
),
|
| 2548 |
-
'__TwigTemplate_5fd54eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4' =>
|
| 2549 |
-
array (
|
| 2550 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '5f' . DIRECTORY_SEPARATOR . 'd5' . DIRECTORY_SEPARATOR . '4eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4.php',
|
| 2551 |
-
'c' => '__TwigTemplate_5fd54eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4',
|
| 2552 |
-
'i' => 'g',
|
| 2553 |
-
),
|
| 2554 |
-
'__TwigTemplate_70abe50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6' =>
|
| 2555 |
-
array (
|
| 2556 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '70' . DIRECTORY_SEPARATOR . 'ab' . DIRECTORY_SEPARATOR . 'e50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6.php',
|
| 2557 |
-
'c' => '__TwigTemplate_70abe50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6',
|
| 2558 |
-
'i' => 'g',
|
| 2559 |
-
),
|
| 2560 |
-
'__TwigTemplate_804921f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e' =>
|
| 2561 |
-
array (
|
| 2562 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '80' . DIRECTORY_SEPARATOR . '49' . DIRECTORY_SEPARATOR . '21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php',
|
| 2563 |
-
'c' => '__TwigTemplate_804921f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e',
|
| 2564 |
-
'i' => 'g',
|
| 2565 |
-
),
|
| 2566 |
-
'__TwigTemplate_94a55324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb' =>
|
| 2567 |
-
array (
|
| 2568 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '94' . DIRECTORY_SEPARATOR . 'a5' . DIRECTORY_SEPARATOR . '5324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb.php',
|
| 2569 |
-
'c' => '__TwigTemplate_94a55324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb',
|
| 2570 |
-
'i' => 'g',
|
| 2571 |
-
),
|
| 2572 |
-
'__TwigTemplate_a64d88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758' =>
|
| 2573 |
-
array (
|
| 2574 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'a6' . DIRECTORY_SEPARATOR . '4d' . DIRECTORY_SEPARATOR . '88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758.php',
|
| 2575 |
-
'c' => '__TwigTemplate_a64d88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758',
|
| 2576 |
-
'i' => 'g',
|
| 2577 |
-
),
|
| 2578 |
-
'__TwigTemplate_ab8ff375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3' =>
|
| 2579 |
-
array (
|
| 2580 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ab' . DIRECTORY_SEPARATOR . '8f' . DIRECTORY_SEPARATOR . 'f375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3.php',
|
| 2581 |
-
'c' => '__TwigTemplate_ab8ff375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3',
|
| 2582 |
-
'i' => 'g',
|
| 2583 |
-
),
|
| 2584 |
-
'__TwigTemplate_b8dc20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861' =>
|
| 2585 |
-
array (
|
| 2586 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'b8' . DIRECTORY_SEPARATOR . 'dc' . DIRECTORY_SEPARATOR . '20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861.php',
|
| 2587 |
-
'c' => '__TwigTemplate_b8dc20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861',
|
| 2588 |
-
'i' => 'g',
|
| 2589 |
-
),
|
| 2590 |
-
'__TwigTemplate_c3efa6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838' =>
|
| 2591 |
-
array (
|
| 2592 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'c3' . DIRECTORY_SEPARATOR . 'ef' . DIRECTORY_SEPARATOR . 'a6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838.php',
|
| 2593 |
-
'c' => '__TwigTemplate_c3efa6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838',
|
| 2594 |
-
'i' => 'g',
|
| 2595 |
-
),
|
| 2596 |
-
'__TwigTemplate_ca440aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b' =>
|
| 2597 |
-
array (
|
| 2598 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ca' . DIRECTORY_SEPARATOR . '44' . DIRECTORY_SEPARATOR . '0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php',
|
| 2599 |
-
'c' => '__TwigTemplate_ca440aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b',
|
| 2600 |
-
'i' => 'g',
|
| 2601 |
-
),
|
| 2602 |
-
'__TwigTemplate_ce724c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201' =>
|
| 2603 |
-
array (
|
| 2604 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ce' . DIRECTORY_SEPARATOR . '72' . DIRECTORY_SEPARATOR . '4c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201.php',
|
| 2605 |
-
'c' => '__TwigTemplate_ce724c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201',
|
| 2606 |
-
'i' => 'g',
|
| 2607 |
-
),
|
| 2608 |
-
'__TwigTemplate_d465fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8' =>
|
| 2609 |
-
array (
|
| 2610 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'd4' . DIRECTORY_SEPARATOR . '65' . DIRECTORY_SEPARATOR . 'fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8.php',
|
| 2611 |
-
'c' => '__TwigTemplate_d465fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8',
|
| 2612 |
-
'i' => 'g',
|
| 2613 |
-
),
|
| 2614 |
-
'__TwigTemplate_d5ea0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130' =>
|
| 2615 |
-
array (
|
| 2616 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'd5' . DIRECTORY_SEPARATOR . 'ea' . DIRECTORY_SEPARATOR . '0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php',
|
| 2617 |
-
'c' => '__TwigTemplate_d5ea0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130',
|
| 2618 |
-
'i' => 'g',
|
| 2619 |
-
),
|
| 2620 |
-
'__TwigTemplate_ddc2602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10' =>
|
| 2621 |
-
array (
|
| 2622 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'dd' . DIRECTORY_SEPARATOR . 'c2' . DIRECTORY_SEPARATOR . '602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10.php',
|
| 2623 |
-
'c' => '__TwigTemplate_ddc2602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10',
|
| 2624 |
-
'i' => 'g',
|
| 2625 |
-
),
|
| 2626 |
-
'__TwigTemplate_edbe11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967' =>
|
| 2627 |
-
array (
|
| 2628 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ed' . DIRECTORY_SEPARATOR . 'be' . DIRECTORY_SEPARATOR . '11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967.php',
|
| 2629 |
-
'c' => '__TwigTemplate_edbe11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967',
|
| 2630 |
-
'i' => 'g',
|
| 2631 |
-
),
|
| 2632 |
-
'__TwigTemplate_f8b8d195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a' =>
|
| 2633 |
-
array (
|
| 2634 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'f8' . DIRECTORY_SEPARATOR . 'b8' . DIRECTORY_SEPARATOR . 'd195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a.php',
|
| 2635 |
-
'c' => '__TwigTemplate_f8b8d195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a',
|
| 2636 |
-
'i' => 'g',
|
| 2637 |
-
),
|
| 2638 |
'acl.aco' =>
|
| 2639 |
array (
|
| 2640 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'acl' . DIRECTORY_SEPARATOR . 'aco.php',
|
|
@@ -2760,7 +2588,7 @@
|
|
| 2760 |
),
|
| 2761 |
'calendarComponent' =>
|
| 2762 |
array (
|
| 2763 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 2764 |
'c' => 'calendarComponent',
|
| 2765 |
'i' => 'g',
|
| 2766 |
),
|
|
@@ -2799,6 +2627,13 @@
|
|
| 2799 |
'i' => 'g',
|
| 2800 |
'r' => 'y',
|
| 2801 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2802 |
'command.export-events' =>
|
| 2803 |
array (
|
| 2804 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'export-events.php',
|
|
@@ -3443,15 +3278,15 @@
|
|
| 3443 |
'c' => 'iCalcnv',
|
| 3444 |
'i' => 'g',
|
| 3445 |
),
|
| 3446 |
-
'iCal.iCalcreator-2.
|
| 3447 |
array (
|
| 3448 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 3449 |
'c' => 'iCalUtilityFunctions',
|
| 3450 |
'i' => 'g',
|
| 3451 |
),
|
| 3452 |
'iCalUtilityFunctions' =>
|
| 3453 |
array (
|
| 3454 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 3455 |
'c' => 'iCalUtilityFunctions',
|
| 3456 |
'i' => 'g',
|
| 3457 |
),
|
|
@@ -3623,6 +3458,13 @@
|
|
| 3623 |
'c' => 'Ai1ec_Event_Not_Found_Exception',
|
| 3624 |
'i' => 'g',
|
| 3625 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3626 |
'model.event.taxonomy' =>
|
| 3627 |
array (
|
| 3628 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'event' . DIRECTORY_SEPARATOR . 'taxonomy.php',
|
|
@@ -3952,126 +3794,6 @@
|
|
| 3952 |
'i' => 'g',
|
| 3953 |
'r' => 'y',
|
| 3954 |
),
|
| 3955 |
-
'twig.03.90.aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577' =>
|
| 3956 |
-
array (
|
| 3957 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '03' . DIRECTORY_SEPARATOR . '90' . DIRECTORY_SEPARATOR . 'aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577.php',
|
| 3958 |
-
'c' => '__TwigTemplate_0390aeab35788b09647b9a02c8610d09925aabc8c355462d95b2a35074e72577',
|
| 3959 |
-
'i' => 'g',
|
| 3960 |
-
),
|
| 3961 |
-
'twig.0d.04.fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb' =>
|
| 3962 |
-
array (
|
| 3963 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '0d' . DIRECTORY_SEPARATOR . '04' . DIRECTORY_SEPARATOR . 'fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb.php',
|
| 3964 |
-
'c' => '__TwigTemplate_0d04fd8553709f7381252f5b9560ca2f467a3f832e7ef50112df9766d36955eb',
|
| 3965 |
-
'i' => 'g',
|
| 3966 |
-
),
|
| 3967 |
-
'twig.14.14.340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657' =>
|
| 3968 |
-
array (
|
| 3969 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . '340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657.php',
|
| 3970 |
-
'c' => '__TwigTemplate_1414340e18cb8d14d82ac7e5827d0ebc22d4c122f3f55377628ee439cef60657',
|
| 3971 |
-
'i' => 'g',
|
| 3972 |
-
),
|
| 3973 |
-
'twig.14.b3.3cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799' =>
|
| 3974 |
-
array (
|
| 3975 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '14' . DIRECTORY_SEPARATOR . 'b3' . DIRECTORY_SEPARATOR . '3cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799.php',
|
| 3976 |
-
'c' => '__TwigTemplate_14b33cdfb74dcddd288dc4f674be44f9332303e665eaaddeafa0e539e1479799',
|
| 3977 |
-
'i' => 'g',
|
| 3978 |
-
),
|
| 3979 |
-
'twig.18.52.6ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b' =>
|
| 3980 |
-
array (
|
| 3981 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '18' . DIRECTORY_SEPARATOR . '52' . DIRECTORY_SEPARATOR . '6ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b.php',
|
| 3982 |
-
'c' => '__TwigTemplate_18526ce85d9ef23252ecf5353debe4749659b49f5d284d268fdbbc55fedad96b',
|
| 3983 |
-
'i' => 'g',
|
| 3984 |
-
),
|
| 3985 |
-
'twig.1f.b0.d88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428' =>
|
| 3986 |
-
array (
|
| 3987 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '1f' . DIRECTORY_SEPARATOR . 'b0' . DIRECTORY_SEPARATOR . 'd88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428.php',
|
| 3988 |
-
'c' => '__TwigTemplate_1fb0d88f9b3ac4ab4ff245818fcab511b01e585cb62249022aa123e722a52428',
|
| 3989 |
-
'i' => 'g',
|
| 3990 |
-
),
|
| 3991 |
-
'twig.22.6c.b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5' =>
|
| 3992 |
-
array (
|
| 3993 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '22' . DIRECTORY_SEPARATOR . '6c' . DIRECTORY_SEPARATOR . 'b502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5.php',
|
| 3994 |
-
'c' => '__TwigTemplate_226cb502ceaa36d3658c4e1bc82790a015e5a6639b97464b731dc289baa619d5',
|
| 3995 |
-
'i' => 'g',
|
| 3996 |
-
),
|
| 3997 |
-
'twig.28.1c.29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c' =>
|
| 3998 |
-
array (
|
| 3999 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '28' . DIRECTORY_SEPARATOR . '1c' . DIRECTORY_SEPARATOR . '29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c.php',
|
| 4000 |
-
'c' => '__TwigTemplate_281c29136b7dcb658210fac8a4bd81007f1c9b21b1d7579cdaa987e5fb6d4d4c',
|
| 4001 |
-
'i' => 'g',
|
| 4002 |
-
),
|
| 4003 |
-
'twig.31.41.6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848' =>
|
| 4004 |
-
array (
|
| 4005 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '31' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . '6a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848.php',
|
| 4006 |
-
'c' => '__TwigTemplate_31416a842b873aa15c2afe2fd664e027ecf1ba867877537f21b06052271bb848',
|
| 4007 |
-
'i' => 'g',
|
| 4008 |
-
),
|
| 4009 |
-
'twig.33.1c.dabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9' =>
|
| 4010 |
-
array (
|
| 4011 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '33' . DIRECTORY_SEPARATOR . '1c' . DIRECTORY_SEPARATOR . 'dabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9.php',
|
| 4012 |
-
'c' => '__TwigTemplate_331cdabac328da20469e2616008dc56dce67c63be852b24506548f1b388569a9',
|
| 4013 |
-
'i' => 'g',
|
| 4014 |
-
),
|
| 4015 |
-
'twig.36.41.cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e' =>
|
| 4016 |
-
array (
|
| 4017 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '36' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . 'cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e.php',
|
| 4018 |
-
'c' => '__TwigTemplate_3641cb5ba7ae689f85c6edb69ac8d77d4746270ac297a4aabebf1815a1d7784e',
|
| 4019 |
-
'i' => 'g',
|
| 4020 |
-
),
|
| 4021 |
-
'twig.3f.6c.8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a' =>
|
| 4022 |
-
array (
|
| 4023 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '3f' . DIRECTORY_SEPARATOR . '6c' . DIRECTORY_SEPARATOR . '8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a.php',
|
| 4024 |
-
'c' => '__TwigTemplate_3f6c8cdc781204b2b1401ef907fcddb9c3cb7cd72d4b0b8f5abf450db9eaf16a',
|
| 4025 |
-
'i' => 'g',
|
| 4026 |
-
),
|
| 4027 |
-
'twig.41.2c.390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344' =>
|
| 4028 |
-
array (
|
| 4029 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '41' . DIRECTORY_SEPARATOR . '2c' . DIRECTORY_SEPARATOR . '390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344.php',
|
| 4030 |
-
'c' => '__TwigTemplate_412c390dc1284f86a5e8f726b412117f45d6b76198d80b1c3ca743b4a52d8344',
|
| 4031 |
-
'i' => 'g',
|
| 4032 |
-
),
|
| 4033 |
-
'twig.55.28.bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40' =>
|
| 4034 |
-
array (
|
| 4035 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '55' . DIRECTORY_SEPARATOR . '28' . DIRECTORY_SEPARATOR . 'bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40.php',
|
| 4036 |
-
'c' => '__TwigTemplate_5528bfcb0e0fa8155e3469092a742b5dad7834ca41009ce1db3bfa8e0c5ebc40',
|
| 4037 |
-
'i' => 'g',
|
| 4038 |
-
),
|
| 4039 |
-
'twig.58.3a.f310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e' =>
|
| 4040 |
-
array (
|
| 4041 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '58' . DIRECTORY_SEPARATOR . '3a' . DIRECTORY_SEPARATOR . 'f310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e.php',
|
| 4042 |
-
'c' => '__TwigTemplate_583af310a4ee1526dbd6cad652585947c2eef7470a0862828301ed48ad41615e',
|
| 4043 |
-
'i' => 'g',
|
| 4044 |
-
),
|
| 4045 |
-
'twig.5d.6a.4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b' =>
|
| 4046 |
-
array (
|
| 4047 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '5d' . DIRECTORY_SEPARATOR . '6a' . DIRECTORY_SEPARATOR . '4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b.php',
|
| 4048 |
-
'c' => '__TwigTemplate_5d6a4c3721e30bde93d60edc8380d57a3856559300e77878dd71e2abdd927e2b',
|
| 4049 |
-
'i' => 'g',
|
| 4050 |
-
),
|
| 4051 |
-
'twig.5f.d5.4eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4' =>
|
| 4052 |
-
array (
|
| 4053 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '5f' . DIRECTORY_SEPARATOR . 'd5' . DIRECTORY_SEPARATOR . '4eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4.php',
|
| 4054 |
-
'c' => '__TwigTemplate_5fd54eb14d711093fc6d960237fd8b483db342d780035d2e2e9c6e5632cde5b4',
|
| 4055 |
-
'i' => 'g',
|
| 4056 |
-
),
|
| 4057 |
-
'twig.70.ab.e50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6' =>
|
| 4058 |
-
array (
|
| 4059 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '70' . DIRECTORY_SEPARATOR . 'ab' . DIRECTORY_SEPARATOR . 'e50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6.php',
|
| 4060 |
-
'c' => '__TwigTemplate_70abe50c784c9a3bffa0427eda1d918d3e98e322a131f5635f89c98fbe8a74a6',
|
| 4061 |
-
'i' => 'g',
|
| 4062 |
-
),
|
| 4063 |
-
'twig.80.49.21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e' =>
|
| 4064 |
-
array (
|
| 4065 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '80' . DIRECTORY_SEPARATOR . '49' . DIRECTORY_SEPARATOR . '21f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e.php',
|
| 4066 |
-
'c' => '__TwigTemplate_804921f13f8c6c3ea945cecbea222634076899d945460d6d1d07fc875e75fc1e',
|
| 4067 |
-
'i' => 'g',
|
| 4068 |
-
),
|
| 4069 |
-
'twig.94.a5.5324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb' =>
|
| 4070 |
-
array (
|
| 4071 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . '94' . DIRECTORY_SEPARATOR . 'a5' . DIRECTORY_SEPARATOR . '5324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb.php',
|
| 4072 |
-
'c' => '__TwigTemplate_94a55324d66efe7f3272ca99629344807932939c4dd45bc3477dbddba77adcbb',
|
| 4073 |
-
'i' => 'g',
|
| 4074 |
-
),
|
| 4075 |
'twig.Compiler' =>
|
| 4076 |
array (
|
| 4077 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'Compiler.php',
|
|
@@ -5008,42 +4730,12 @@
|
|
| 5008 |
'c' => 'Twig_TokenStream',
|
| 5009 |
'i' => 'g',
|
| 5010 |
),
|
| 5011 |
-
'twig.a6.4d.88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758' =>
|
| 5012 |
-
array (
|
| 5013 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'a6' . DIRECTORY_SEPARATOR . '4d' . DIRECTORY_SEPARATOR . '88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758.php',
|
| 5014 |
-
'c' => '__TwigTemplate_a64d88cdfa6f8bc13511e76d870e4326feee3c2172402687d71f852eb6b8c758',
|
| 5015 |
-
'i' => 'g',
|
| 5016 |
-
),
|
| 5017 |
-
'twig.ab.8f.f375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3' =>
|
| 5018 |
-
array (
|
| 5019 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ab' . DIRECTORY_SEPARATOR . '8f' . DIRECTORY_SEPARATOR . 'f375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3.php',
|
| 5020 |
-
'c' => '__TwigTemplate_ab8ff375c058e5b3ddf71337cc5f39b08710362b0cb927ab047fc87531354ec3',
|
| 5021 |
-
'i' => 'g',
|
| 5022 |
-
),
|
| 5023 |
'twig.ai1ec-extension' =>
|
| 5024 |
array (
|
| 5025 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ai1ec-extension.php',
|
| 5026 |
'c' => 'Ai1ec_Twig_Ai1ec_Extension',
|
| 5027 |
'i' => 'g',
|
| 5028 |
),
|
| 5029 |
-
'twig.b8.dc.20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861' =>
|
| 5030 |
-
array (
|
| 5031 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'b8' . DIRECTORY_SEPARATOR . 'dc' . DIRECTORY_SEPARATOR . '20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861.php',
|
| 5032 |
-
'c' => '__TwigTemplate_b8dc20c6d89f8151e76fcd838573c80d2fe6d63fa3b5f209fbb25455fcbaa861',
|
| 5033 |
-
'i' => 'g',
|
| 5034 |
-
),
|
| 5035 |
-
'twig.c3.ef.a6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838' =>
|
| 5036 |
-
array (
|
| 5037 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'c3' . DIRECTORY_SEPARATOR . 'ef' . DIRECTORY_SEPARATOR . 'a6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838.php',
|
| 5038 |
-
'c' => '__TwigTemplate_c3efa6c892e192ab677abaa0a51f9dce404bdb09045156b1e62e6ad503db8838',
|
| 5039 |
-
'i' => 'g',
|
| 5040 |
-
),
|
| 5041 |
-
'twig.ca.44.0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b' =>
|
| 5042 |
-
array (
|
| 5043 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ca' . DIRECTORY_SEPARATOR . '44' . DIRECTORY_SEPARATOR . '0aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b.php',
|
| 5044 |
-
'c' => '__TwigTemplate_ca440aa661b1c953233505b2506f7ca2ef971ece252f191fef784ea217b3981b',
|
| 5045 |
-
'i' => 'g',
|
| 5046 |
-
),
|
| 5047 |
'twig.cache' =>
|
| 5048 |
array (
|
| 5049 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'cache.php',
|
|
@@ -5051,51 +4743,15 @@
|
|
| 5051 |
'i' => 'g',
|
| 5052 |
'r' => 'y',
|
| 5053 |
),
|
| 5054 |
-
'twig.ce.72.4c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201' =>
|
| 5055 |
-
array (
|
| 5056 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ce' . DIRECTORY_SEPARATOR . '72' . DIRECTORY_SEPARATOR . '4c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201.php',
|
| 5057 |
-
'c' => '__TwigTemplate_ce724c7cb5cac3cffd05dcac960e0136a91e09c2281d281c2aa076bb92249201',
|
| 5058 |
-
'i' => 'g',
|
| 5059 |
-
),
|
| 5060 |
-
'twig.d4.65.fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8' =>
|
| 5061 |
-
array (
|
| 5062 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'd4' . DIRECTORY_SEPARATOR . '65' . DIRECTORY_SEPARATOR . 'fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8.php',
|
| 5063 |
-
'c' => '__TwigTemplate_d465fa726b6c76aa0ab1e5bd1ce6c787ea379c52871b80bf7fa0ff0b1ec788a8',
|
| 5064 |
-
'i' => 'g',
|
| 5065 |
-
),
|
| 5066 |
-
'twig.d5.ea.0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130' =>
|
| 5067 |
-
array (
|
| 5068 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'd5' . DIRECTORY_SEPARATOR . 'ea' . DIRECTORY_SEPARATOR . '0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130.php',
|
| 5069 |
-
'c' => '__TwigTemplate_d5ea0f196084548c56e9b17f48b3fa082f54fbf3f61f088b55acd91d52e27130',
|
| 5070 |
-
'i' => 'g',
|
| 5071 |
-
),
|
| 5072 |
-
'twig.dd.c2.602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10' =>
|
| 5073 |
-
array (
|
| 5074 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'dd' . DIRECTORY_SEPARATOR . 'c2' . DIRECTORY_SEPARATOR . '602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10.php',
|
| 5075 |
-
'c' => '__TwigTemplate_ddc2602f6650e55fce9a9402a7d1062a4384aac357c8b7840b338904a647fe10',
|
| 5076 |
-
'i' => 'g',
|
| 5077 |
-
),
|
| 5078 |
-
'twig.ed.be.11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967' =>
|
| 5079 |
-
array (
|
| 5080 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ed' . DIRECTORY_SEPARATOR . 'be' . DIRECTORY_SEPARATOR . '11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967.php',
|
| 5081 |
-
'c' => '__TwigTemplate_edbe11913727712f3aeca5bcd9308202e49470f0f1d80fdeeab130a9c38ae967',
|
| 5082 |
-
'i' => 'g',
|
| 5083 |
-
),
|
| 5084 |
'twig.environment' =>
|
| 5085 |
array (
|
| 5086 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'environment.php',
|
| 5087 |
'c' => 'Ai1ec_Twig_Environment',
|
| 5088 |
'i' => 'g',
|
| 5089 |
),
|
| 5090 |
-
'twig.f8.b8.d195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a' =>
|
| 5091 |
-
array (
|
| 5092 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'f8' . DIRECTORY_SEPARATOR . 'b8' . DIRECTORY_SEPARATOR . 'd195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a.php',
|
| 5093 |
-
'c' => '__TwigTemplate_f8b8d195bb5bb7102497fc98dcb0702f082b666aaae80097e97d1302a5c5343a',
|
| 5094 |
-
'i' => 'g',
|
| 5095 |
-
),
|
| 5096 |
'valarm' =>
|
| 5097 |
array (
|
| 5098 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5099 |
'c' => 'valarm',
|
| 5100 |
'i' => 'g',
|
| 5101 |
),
|
|
@@ -5121,19 +4777,19 @@
|
|
| 5121 |
),
|
| 5122 |
'vcalendar' =>
|
| 5123 |
array (
|
| 5124 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5125 |
'c' => 'vcalendar',
|
| 5126 |
'i' => 'g',
|
| 5127 |
),
|
| 5128 |
'vevent' =>
|
| 5129 |
array (
|
| 5130 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5131 |
'c' => 'vevent',
|
| 5132 |
'i' => 'g',
|
| 5133 |
),
|
| 5134 |
'vfreebusy' =>
|
| 5135 |
array (
|
| 5136 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5137 |
'c' => 'vfreebusy',
|
| 5138 |
'i' => 'g',
|
| 5139 |
),
|
|
@@ -5333,19 +4989,19 @@
|
|
| 5333 |
),
|
| 5334 |
'vjournal' =>
|
| 5335 |
array (
|
| 5336 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5337 |
'c' => 'vjournal',
|
| 5338 |
'i' => 'g',
|
| 5339 |
),
|
| 5340 |
'vtimezone' =>
|
| 5341 |
array (
|
| 5342 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5343 |
'c' => 'vtimezone',
|
| 5344 |
'i' => 'g',
|
| 5345 |
),
|
| 5346 |
'vtodo' =>
|
| 5347 |
array (
|
| 5348 |
-
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.
|
| 5349 |
'c' => 'vtodo',
|
| 5350 |
'i' => 'g',
|
| 5351 |
),
|
| 212 |
'i' => 'g',
|
| 213 |
'r' => 'y',
|
| 214 |
),
|
| 215 |
+
'Ai1ec_Command_Disable_Gzip' =>
|
| 216 |
+
array (
|
| 217 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'disable-gzip.php',
|
| 218 |
+
'c' => 'Ai1ec_Command_Disable_Gzip',
|
| 219 |
+
'i' => 'g',
|
| 220 |
+
'r' => 'y',
|
| 221 |
+
),
|
| 222 |
'Ai1ec_Command_Export_Events' =>
|
| 223 |
array (
|
| 224 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'export-events.php',
|
| 507 |
'c' => 'Ai1ec_Event_Not_Found_Exception',
|
| 508 |
'i' => 'g',
|
| 509 |
),
|
| 510 |
+
'Ai1ec_Event_Parent' =>
|
| 511 |
+
array (
|
| 512 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'event' . DIRECTORY_SEPARATOR . 'parent.php',
|
| 513 |
+
'c' => 'Ai1ec_Event_Parent',
|
| 514 |
+
'i' => 'g',
|
| 515 |
+
'r' => 'y',
|
| 516 |
+
),
|
| 517 |
'Ai1ec_Event_Search' =>
|
| 518 |
array (
|
| 519 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'search.php',
|
| 2463 |
'c' => 'Twig_TokenStream',
|
| 2464 |
'i' => 'g',
|
| 2465 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2466 |
'acl.aco' =>
|
| 2467 |
array (
|
| 2468 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'acl' . DIRECTORY_SEPARATOR . 'aco.php',
|
| 2588 |
),
|
| 2589 |
'calendarComponent' =>
|
| 2590 |
array (
|
| 2591 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 2592 |
'c' => 'calendarComponent',
|
| 2593 |
'i' => 'g',
|
| 2594 |
),
|
| 2627 |
'i' => 'g',
|
| 2628 |
'r' => 'y',
|
| 2629 |
),
|
| 2630 |
+
'command.disable-gzip' =>
|
| 2631 |
+
array (
|
| 2632 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'disable-gzip.php',
|
| 2633 |
+
'c' => 'Ai1ec_Command_Disable_Gzip',
|
| 2634 |
+
'i' => 'g',
|
| 2635 |
+
'r' => 'y',
|
| 2636 |
+
),
|
| 2637 |
'command.export-events' =>
|
| 2638 |
array (
|
| 2639 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'command' . DIRECTORY_SEPARATOR . 'export-events.php',
|
| 3278 |
'c' => 'iCalcnv',
|
| 3279 |
'i' => 'g',
|
| 3280 |
),
|
| 3281 |
+
'iCal.iCalcreator-2.20.iCalcreator.class' =>
|
| 3282 |
array (
|
| 3283 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 3284 |
'c' => 'iCalUtilityFunctions',
|
| 3285 |
'i' => 'g',
|
| 3286 |
),
|
| 3287 |
'iCalUtilityFunctions' =>
|
| 3288 |
array (
|
| 3289 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 3290 |
'c' => 'iCalUtilityFunctions',
|
| 3291 |
'i' => 'g',
|
| 3292 |
),
|
| 3458 |
'c' => 'Ai1ec_Event_Not_Found_Exception',
|
| 3459 |
'i' => 'g',
|
| 3460 |
),
|
| 3461 |
+
'model.event.parent' =>
|
| 3462 |
+
array (
|
| 3463 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'event' . DIRECTORY_SEPARATOR . 'parent.php',
|
| 3464 |
+
'c' => 'Ai1ec_Event_Parent',
|
| 3465 |
+
'i' => 'g',
|
| 3466 |
+
'r' => 'y',
|
| 3467 |
+
),
|
| 3468 |
'model.event.taxonomy' =>
|
| 3469 |
array (
|
| 3470 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . 'event' . DIRECTORY_SEPARATOR . 'taxonomy.php',
|
| 3794 |
'i' => 'g',
|
| 3795 |
'r' => 'y',
|
| 3796 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3797 |
'twig.Compiler' =>
|
| 3798 |
array (
|
| 3799 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'Compiler.php',
|
| 4730 |
'c' => 'Twig_TokenStream',
|
| 4731 |
'i' => 'g',
|
| 4732 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4733 |
'twig.ai1ec-extension' =>
|
| 4734 |
array (
|
| 4735 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'ai1ec-extension.php',
|
| 4736 |
'c' => 'Ai1ec_Twig_Ai1ec_Extension',
|
| 4737 |
'i' => 'g',
|
| 4738 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4739 |
'twig.cache' =>
|
| 4740 |
array (
|
| 4741 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'cache.php',
|
| 4743 |
'i' => 'g',
|
| 4744 |
'r' => 'y',
|
| 4745 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4746 |
'twig.environment' =>
|
| 4747 |
array (
|
| 4748 |
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'twig' . DIRECTORY_SEPARATOR . 'environment.php',
|
| 4749 |
'c' => 'Ai1ec_Twig_Environment',
|
| 4750 |
'i' => 'g',
|
| 4751 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4752 |
'valarm' =>
|
| 4753 |
array (
|
| 4754 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4755 |
'c' => 'valarm',
|
| 4756 |
'i' => 'g',
|
| 4757 |
),
|
| 4777 |
),
|
| 4778 |
'vcalendar' =>
|
| 4779 |
array (
|
| 4780 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4781 |
'c' => 'vcalendar',
|
| 4782 |
'i' => 'g',
|
| 4783 |
),
|
| 4784 |
'vevent' =>
|
| 4785 |
array (
|
| 4786 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4787 |
'c' => 'vevent',
|
| 4788 |
'i' => 'g',
|
| 4789 |
),
|
| 4790 |
'vfreebusy' =>
|
| 4791 |
array (
|
| 4792 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4793 |
'c' => 'vfreebusy',
|
| 4794 |
'i' => 'g',
|
| 4795 |
),
|
| 4989 |
),
|
| 4990 |
'vjournal' =>
|
| 4991 |
array (
|
| 4992 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4993 |
'c' => 'vjournal',
|
| 4994 |
'i' => 'g',
|
| 4995 |
),
|
| 4996 |
'vtimezone' =>
|
| 4997 |
array (
|
| 4998 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 4999 |
'c' => 'vtimezone',
|
| 5000 |
'i' => 'g',
|
| 5001 |
),
|
| 5002 |
'vtodo' =>
|
| 5003 |
array (
|
| 5004 |
+
'f' => AI1EC_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'iCal' . DIRECTORY_SEPARATOR . 'iCalcreator-2.20' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php',
|
| 5005 |
'c' => 'vtodo',
|
| 5006 |
'i' => 'g',
|
| 5007 |
),
|
lib/calendar-feed/ics.php
CHANGED
|
@@ -84,9 +84,9 @@ class Ai1ecIcsConnectorPlugin extends Ai1ec_Connector_Plugin {
|
|
| 84 |
$import_export = $this->_registry->get( 'controller.import-export' );
|
| 85 |
$args = array();
|
| 86 |
$args['feed'] = $feed;
|
| 87 |
-
$args['
|
| 88 |
if ( isset( $feed->comments_enabled ) && $feed->comments_enabled < 1 ) {
|
| 89 |
-
$comment_status = 'closed';
|
| 90 |
}
|
| 91 |
|
| 92 |
$args['do_show_map'] = 0;
|
| 84 |
$import_export = $this->_registry->get( 'controller.import-export' );
|
| 85 |
$args = array();
|
| 86 |
$args['feed'] = $feed;
|
| 87 |
+
$args['comment_status'] = 'open';
|
| 88 |
if ( isset( $feed->comments_enabled ) && $feed->comments_enabled < 1 ) {
|
| 89 |
+
$args['comment_status'] = 'closed';
|
| 90 |
}
|
| 91 |
|
| 92 |
$args['do_show_map'] = 0;
|
lib/command/clone.php
CHANGED
|
@@ -176,7 +176,8 @@ class Ai1ec_Command_Clone extends Ai1ec_Command {
|
|
| 176 |
$post->post_title,
|
| 177 |
$edit_event_url
|
| 178 |
);
|
| 179 |
-
$notification = $this->_registry->get( 'notification.admin'
|
|
|
|
| 180 |
$this->_duplicate_post_copy_post_taxonomies( $new_post_id, $post );
|
| 181 |
$this->_duplicate_post_copy_attachments( $new_post_id, $post );
|
| 182 |
$this->_duplicate_post_copy_post_meta_info( $new_post_id, $post );
|
| 176 |
$post->post_title,
|
| 177 |
$edit_event_url
|
| 178 |
);
|
| 179 |
+
$notification = $this->_registry->get( 'notification.admin' );
|
| 180 |
+
$notification->store( $message );
|
| 181 |
$this->_duplicate_post_copy_post_taxonomies( $new_post_id, $post );
|
| 182 |
$this->_duplicate_post_copy_attachments( $new_post_id, $post );
|
| 183 |
$this->_duplicate_post_copy_post_meta_info( $new_post_id, $post );
|
lib/command/disable-gzip.php
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* The concrete command that disabel gzip.
|
| 4 |
+
*
|
| 5 |
+
* @author Time.ly Network Inc.
|
| 6 |
+
* @since 2.0
|
| 7 |
+
*
|
| 8 |
+
* @package AI1EC
|
| 9 |
+
* @subpackage AI1EC.Command
|
| 10 |
+
*/
|
| 11 |
+
class Ai1ec_Command_Disable_Gzip extends Ai1ec_Command {
|
| 12 |
+
|
| 13 |
+
/* (non-PHPdoc)
|
| 14 |
+
* @see Ai1ec_Command::is_this_to_execute()
|
| 15 |
+
*/
|
| 16 |
+
public function is_this_to_execute() {
|
| 17 |
+
if ( isset( $_GET['ai1ec_disable_gzip_compression'] ) ) {
|
| 18 |
+
return true;
|
| 19 |
+
}
|
| 20 |
+
return false;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
/* (non-PHPdoc)
|
| 24 |
+
* @see Ai1ec_Command::do_execute()
|
| 25 |
+
*/
|
| 26 |
+
public function do_execute() {
|
| 27 |
+
$this->_registry->get( 'model.settings' )
|
| 28 |
+
->set( 'disable_gzip_compression', true );
|
| 29 |
+
return array(
|
| 30 |
+
'url' => admin_url( 'edit.php' ),
|
| 31 |
+
'query_args' => array(
|
| 32 |
+
'post_type' => 'ai1ec_event',
|
| 33 |
+
'page' => 'all-in-one-event-calendar-settings',
|
| 34 |
+
),
|
| 35 |
+
);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/* (non-PHPdoc)
|
| 39 |
+
* @see Ai1ec_Command::set_render_strategy()
|
| 40 |
+
*/
|
| 41 |
+
public function set_render_strategy( Ai1ec_Request_Parser $request ) {
|
| 42 |
+
$this->_render_strategy = $this->_registry->get(
|
| 43 |
+
'http.response.render.strategy.redirect'
|
| 44 |
+
);
|
| 45 |
+
}
|
| 46 |
+
}
|
lib/command/export-events.php
CHANGED
|
@@ -38,7 +38,7 @@ class Ai1ec_Command_Export_Events extends Ai1ec_Command {
|
|
| 38 |
if ( $params['action'] === self::EXPORT_METHOD &&
|
| 39 |
$params['controller'] === self::EXPORT_CONTROLLER ) {
|
| 40 |
$params['tag_ids'] = Ai1ec_Request_Parser::get_param(
|
| 41 |
-
'
|
| 42 |
false
|
| 43 |
);
|
| 44 |
$params['cat_ids'] = Ai1ec_Request_Parser::get_param(
|
| 38 |
if ( $params['action'] === self::EXPORT_METHOD &&
|
| 39 |
$params['controller'] === self::EXPORT_CONTROLLER ) {
|
| 40 |
$params['tag_ids'] = Ai1ec_Request_Parser::get_param(
|
| 41 |
+
'ai1ec_tag_ids',
|
| 42 |
false
|
| 43 |
);
|
| 44 |
$params['cat_ids'] = Ai1ec_Request_Parser::get_param(
|
lib/command/resolver.php
CHANGED
|
@@ -37,6 +37,11 @@ class Ai1ec_Command_Resolver {
|
|
| 37 |
Ai1ec_Registry_Object $registry,
|
| 38 |
Ai1ec_Request_Parser $request
|
| 39 |
) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
$this->add_command(
|
| 41 |
$registry->get(
|
| 42 |
'command.export-events', $request
|
| 37 |
Ai1ec_Registry_Object $registry,
|
| 38 |
Ai1ec_Request_Parser $request
|
| 39 |
) {
|
| 40 |
+
$this->add_command(
|
| 41 |
+
$registry->get(
|
| 42 |
+
'command.disable-gzip', $request
|
| 43 |
+
)
|
| 44 |
+
);
|
| 45 |
$this->add_command(
|
| 46 |
$registry->get(
|
| 47 |
'command.export-events', $request
|
lib/command/save-settings.php
CHANGED
|
@@ -17,13 +17,10 @@ class Ai1ec_Command_Save_Settings extends Ai1ec_Command_Save_Abstract {
|
|
| 17 |
public function do_execute() {
|
| 18 |
$settings = $this->_registry->get( 'model.settings' );
|
| 19 |
$options = $settings->get_options();
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
isset( $_POST['default_tags'] ) ||
|
| 23 |
isset( $_POST['default_categories'] )
|
| 24 |
-
)
|
| 25 |
-
$_POST['default_tags_categories'] = true;
|
| 26 |
-
}
|
| 27 |
$_POST['enabled_views'] = true;
|
| 28 |
foreach ( $options as $name => $data ) {
|
| 29 |
$value = null;
|
| 17 |
public function do_execute() {
|
| 18 |
$settings = $this->_registry->get( 'model.settings' );
|
| 19 |
$options = $settings->get_options();
|
| 20 |
+
$_POST['default_tags_categories'] = (
|
| 21 |
+
isset( $_POST['default_tags'] ) ||
|
|
|
|
| 22 |
isset( $_POST['default_categories'] )
|
| 23 |
+
);
|
|
|
|
|
|
|
| 24 |
$_POST['enabled_views'] = true;
|
| 25 |
foreach ( $options as $name => $data ) {
|
| 26 |
$value = null;
|
lib/css/frontend.php
CHANGED
|
@@ -85,7 +85,7 @@ class Ai1ec_Css_Frontend extends Ai1ec_Base {
|
|
| 85 |
) {
|
| 86 |
// compress data if possible
|
| 87 |
$compatibility_ob = $this->_registry->get( 'compatibility.ob' );
|
| 88 |
-
if (
|
| 89 |
$compatibility_ob->start( 'ob_gzhandler' );
|
| 90 |
header( 'Content-Encoding: gzip' );
|
| 91 |
} else {
|
| 85 |
) {
|
| 86 |
// compress data if possible
|
| 87 |
$compatibility_ob = $this->_registry->get( 'compatibility.ob' );
|
| 88 |
+
if ( $this->_registry->get( 'http.request' )->client_use_gzip() ) {
|
| 89 |
$compatibility_ob->start( 'ob_gzhandler' );
|
| 90 |
header( 'Content-Encoding: gzip' );
|
| 91 |
} else {
|
lib/database/datetime-migration.php
CHANGED
|
@@ -301,7 +301,7 @@ class Ai1ecdm_Datetime_Migration {
|
|
| 301 |
}
|
| 302 |
$sql_query = 'ALTER TABLE `' . $table . '` ' .
|
| 303 |
implode( ', ', $column_particles );
|
| 304 |
-
return $this->_dbi->query( $sql_query );
|
| 305 |
}
|
| 306 |
|
| 307 |
/**
|
|
@@ -347,7 +347,7 @@ class Ai1ecdm_Datetime_Migration {
|
|
| 347 |
}
|
| 348 |
$sql_query = 'ALTER TABLE `' . $table . '` ' .
|
| 349 |
implode( ', ', $snippets );
|
| 350 |
-
return $this->_dbi->query( $sql_query );
|
| 351 |
}
|
| 352 |
|
| 353 |
/**
|
|
@@ -388,7 +388,7 @@ class Ai1ecdm_Datetime_Migration {
|
|
| 388 |
*/
|
| 389 |
public function drop( $table ) {
|
| 390 |
$sql_query = 'DROP TABLE IF EXISTS ' . $table;
|
| 391 |
-
return false !== $this->_dbi->query( $sql_query );
|
| 392 |
}
|
| 393 |
|
| 394 |
/**
|
|
@@ -447,4 +447,4 @@ class Ai1ecdm_Datetime_Migration {
|
|
| 447 |
return ( (string)$table === (string)$name );
|
| 448 |
}
|
| 449 |
|
| 450 |
-
}
|
| 301 |
}
|
| 302 |
$sql_query = 'ALTER TABLE `' . $table . '` ' .
|
| 303 |
implode( ', ', $column_particles );
|
| 304 |
+
return ( false !== $this->_dbi->query( $sql_query ) );
|
| 305 |
}
|
| 306 |
|
| 307 |
/**
|
| 347 |
}
|
| 348 |
$sql_query = 'ALTER TABLE `' . $table . '` ' .
|
| 349 |
implode( ', ', $snippets );
|
| 350 |
+
return ( false !== $this->_dbi->query( $sql_query ) );
|
| 351 |
}
|
| 352 |
|
| 353 |
/**
|
| 388 |
*/
|
| 389 |
public function drop( $table ) {
|
| 390 |
$sql_query = 'DROP TABLE IF EXISTS ' . $table;
|
| 391 |
+
return ( false !== $this->_dbi->query( $sql_query ) );
|
| 392 |
}
|
| 393 |
|
| 394 |
/**
|
| 447 |
return ( (string)$table === (string)$name );
|
| 448 |
}
|
| 449 |
|
| 450 |
+
}
|
lib/dbi/dbi.php
CHANGED
|
@@ -55,7 +55,11 @@ class Ai1ec_Dbi {
|
|
| 55 |
$this->_registry->get( 'controller.shutdown' )->register(
|
| 56 |
array( $this, 'shutdown' )
|
| 57 |
);
|
| 58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
$this->set_timezone();
|
| 60 |
}
|
| 61 |
|
|
@@ -78,19 +82,19 @@ class Ai1ec_Dbi {
|
|
| 78 |
}
|
| 79 |
|
| 80 |
/**
|
| 81 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
*
|
| 83 |
* @return void
|
| 84 |
*/
|
| 85 |
-
public function
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
)
|
| 90 |
-
$this->_log_enabled = true;
|
| 91 |
-
} else {
|
| 92 |
-
$this->disable_debug();
|
| 93 |
-
}
|
| 94 |
}
|
| 95 |
|
| 96 |
/**
|
|
@@ -377,7 +381,6 @@ class Ai1ec_Dbi {
|
|
| 377 |
* @return void
|
| 378 |
*/
|
| 379 |
public function shutdown() {
|
| 380 |
-
$this->auto_debug();
|
| 381 |
if ( ! $this->_log_enabled ) {
|
| 382 |
return false;
|
| 383 |
}
|
| 55 |
$this->_registry->get( 'controller.shutdown' )->register(
|
| 56 |
array( $this, 'shutdown' )
|
| 57 |
);
|
| 58 |
+
add_action(
|
| 59 |
+
'ai1ec_loaded',
|
| 60 |
+
array( $this, 'check_debug' ),
|
| 61 |
+
PHP_INT_MAX
|
| 62 |
+
);
|
| 63 |
$this->set_timezone();
|
| 64 |
}
|
| 65 |
|
| 82 |
}
|
| 83 |
|
| 84 |
/**
|
| 85 |
+
* Only attempt to enable debug after all add-ons are loaded.
|
| 86 |
+
*
|
| 87 |
+
* @wp_hook ai1ec_loaded
|
| 88 |
+
*
|
| 89 |
+
* @uses apply_filters ai1ec_dbi_debug
|
| 90 |
*
|
| 91 |
* @return void
|
| 92 |
*/
|
| 93 |
+
public function check_debug() {
|
| 94 |
+
$this->_log_enabled = apply_filters(
|
| 95 |
+
'ai1ec_dbi_debug',
|
| 96 |
+
( false !== AI1EC_DEBUG )
|
| 97 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
}
|
| 99 |
|
| 100 |
/**
|
| 381 |
* @return void
|
| 382 |
*/
|
| 383 |
public function shutdown() {
|
|
|
|
| 384 |
if ( ! $this->_log_enabled ) {
|
| 385 |
return false;
|
| 386 |
}
|
lib/html/element/setting/calendar-page-selector.php
CHANGED
|
@@ -21,11 +21,6 @@ class Ai1ec_Html_Element_Calendar_Page_Selector
|
|
| 21 |
*/
|
| 22 |
protected $_pages = array();
|
| 23 |
|
| 24 |
-
/**
|
| 25 |
-
* @var int ID of page currently selected, NULL if none.
|
| 26 |
-
*/
|
| 27 |
-
protected $_selected = null;
|
| 28 |
-
|
| 29 |
/**
|
| 30 |
* Set attributes for element.
|
| 31 |
*
|
|
@@ -64,17 +59,25 @@ class Ai1ec_Html_Element_Calendar_Page_Selector
|
|
| 64 |
* @return string HTML snippet.
|
| 65 |
*/
|
| 66 |
protected function _get_page_view_link() {
|
| 67 |
-
if ( empty( $this->
|
| 68 |
return '';
|
| 69 |
}
|
| 70 |
-
$post = get_post( $this->
|
| 71 |
-
if ( empty( $post ) ) {
|
| 72 |
return '';
|
| 73 |
}
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
}
|
| 79 |
|
| 80 |
/**
|
| 21 |
*/
|
| 22 |
protected $_pages = array();
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
/**
|
| 25 |
* Set attributes for element.
|
| 26 |
*
|
| 59 |
* @return string HTML snippet.
|
| 60 |
*/
|
| 61 |
protected function _get_page_view_link() {
|
| 62 |
+
if ( empty( $this->_args['value'] ) ) {
|
| 63 |
return '';
|
| 64 |
}
|
| 65 |
+
$post = get_post( $this->_args['value'] );
|
| 66 |
+
if ( empty( $post->ID ) ) {
|
| 67 |
return '';
|
| 68 |
}
|
| 69 |
+
$args = array(
|
| 70 |
+
'view' => Ai1ec_I18n::__( 'View' ),
|
| 71 |
+
'link' => get_permalink( $post->ID ),
|
| 72 |
+
'title' => apply_filters(
|
| 73 |
+
'the_title',
|
| 74 |
+
$post->post_title,
|
| 75 |
+
$post->ID
|
| 76 |
+
),
|
| 77 |
+
);
|
| 78 |
+
return $this->_registry->get( 'theme.loader' )
|
| 79 |
+
->get_file( 'setting/calendar-page-selector.twig', $args, true )
|
| 80 |
+
->get_content();
|
| 81 |
}
|
| 82 |
|
| 83 |
/**
|
lib/http/request.php
CHANGED
|
@@ -22,6 +22,22 @@ class Ai1ec_Http_Request {
|
|
| 22 |
$this->_registry = $registry;
|
| 23 |
}
|
| 24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
/**
|
| 26 |
* Check if we are processing AJAX request.
|
| 27 |
*
|
|
@@ -65,9 +81,11 @@ class Ai1ec_Http_Request {
|
|
| 65 |
|
| 66 |
if (
|
| 67 |
$settings->get( 'disable_gzip_compression' ) ||
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
| 71 |
) {
|
| 72 |
return false;
|
| 73 |
}
|
| 22 |
$this->_registry = $registry;
|
| 23 |
}
|
| 24 |
|
| 25 |
+
/**
|
| 26 |
+
* Callback for debug-checking filters. Changes debug to false for AJAX req.
|
| 27 |
+
*
|
| 28 |
+
* @wp_hook ai1ec_dbi_debug
|
| 29 |
+
*
|
| 30 |
+
* @param bool $do_debug Current debug value.
|
| 31 |
+
*
|
| 32 |
+
* @return bool Optionally modified `$do_debug`.
|
| 33 |
+
*/
|
| 34 |
+
public function debug_filter( $do_debug ) {
|
| 35 |
+
if ( $this->is_ajax() ) {
|
| 36 |
+
$do_debug = false;
|
| 37 |
+
}
|
| 38 |
+
return $do_debug;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
/**
|
| 42 |
* Check if we are processing AJAX request.
|
| 43 |
*
|
| 81 |
|
| 82 |
if (
|
| 83 |
$settings->get( 'disable_gzip_compression' ) ||
|
| 84 |
+
(
|
| 85 |
+
isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) &&
|
| 86 |
+
'identity' === $_SERVER['HTTP_ACCEPT_ENCODING'] ||
|
| 87 |
+
! extension_loaded( 'zlib' )
|
| 88 |
+
)
|
| 89 |
) {
|
| 90 |
return false;
|
| 91 |
}
|
lib/http/response/helper.php
CHANGED
|
@@ -42,38 +42,6 @@ class Ai1ec_Http_Response_Helper {
|
|
| 42 |
exit( $code );
|
| 43 |
}
|
| 44 |
|
| 45 |
-
/**
|
| 46 |
-
* Check if client accepts gzip and we should compress content
|
| 47 |
-
*
|
| 48 |
-
* Plugin settings, client preferences and server capabilities are
|
| 49 |
-
* checked to make sure we should use gzip for output compression.
|
| 50 |
-
*
|
| 51 |
-
* @uses Ai1ec_Settings::get_instance To early instantiate object
|
| 52 |
-
*
|
| 53 |
-
* @return bool True when gzip should be used
|
| 54 |
-
*/
|
| 55 |
-
static public function client_use_gzip() {
|
| 56 |
-
if (
|
| 57 |
-
isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) &&
|
| 58 |
-
'identity' === $_SERVER['HTTP_ACCEPT_ENCODING'] ||
|
| 59 |
-
! extension_loaded( 'zlib' )
|
| 60 |
-
) {
|
| 61 |
-
return false;
|
| 62 |
-
}
|
| 63 |
-
$zlib_output_handler = ini_get( 'zlib.output_handler' );
|
| 64 |
-
if (
|
| 65 |
-
in_array( 'ob_gzhandler', ob_list_handlers() ) ||
|
| 66 |
-
in_array(
|
| 67 |
-
strtolower( ini_get( 'zlib.output_compression' ) ),
|
| 68 |
-
array( '1', 'on' )
|
| 69 |
-
) ||
|
| 70 |
-
! empty( $zlib_output_handler )
|
| 71 |
-
) {
|
| 72 |
-
return false;
|
| 73 |
-
}
|
| 74 |
-
return true;
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
/**
|
| 78 |
* ai1ec_utf8 function
|
| 79 |
*
|
| 42 |
exit( $code );
|
| 43 |
}
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
/**
|
| 46 |
* ai1ec_utf8 function
|
| 47 |
*
|
lib/iCal/{iCalcreator-2.16 → iCalcreator-2.20}/iCalcreator.class.php
RENAMED
|
@@ -1,14 +1,16 @@
|
|
| 1 |
<?php
|
| 2 |
/*********************************************************************************/
|
| 3 |
/**
|
| 4 |
-
* iCalcreator v2.16.1
|
| 5 |
-
* copyright (c) 2007-2012 Kjell-Inge Gustafsson kigkonsult
|
| 6 |
-
* kigkonsult.se/iCalcreator/index.php
|
| 7 |
-
* ical@kigkonsult.se
|
| 8 |
*
|
| 9 |
-
* Description:
|
| 10 |
* This file is a PHP implementation of rfc2445/rfc5545.
|
| 11 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
* This library is free software; you can redistribute it and/or
|
| 13 |
* modify it under the terms of the GNU Lesser General Public
|
| 14 |
* License as published by the Free Software Foundation; either
|
|
@@ -24,29 +26,13 @@
|
|
| 24 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| 25 |
*/
|
| 26 |
/*********************************************************************************/
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
$langstr = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
|
| 35 |
-
$pos = strpos( $langstr, ';' );
|
| 36 |
-
if ($pos !== false) {
|
| 37 |
-
$langstr = substr( $langstr, 0, $pos );
|
| 38 |
-
$pos = strpos( $langstr, ',' );
|
| 39 |
-
if ($pos !== false) {
|
| 40 |
-
$pos = strpos( $langstr, ',' );
|
| 41 |
-
$langstr = substr( $langstr, 0, $pos );
|
| 42 |
-
}
|
| 43 |
-
define( 'ICAL_LANG', $langstr );
|
| 44 |
-
}
|
| 45 |
-
*/
|
| 46 |
-
/*********************************************************************************/
|
| 47 |
-
/* version, do NOT remove!! */
|
| 48 |
-
define( 'ICALCREATOR_VERSION', 'iCalcreator 2.16.1' );
|
| 49 |
-
/*********************************************************************************/
|
| 50 |
/*********************************************************************************/
|
| 51 |
/**
|
| 52 |
* vcalendar class
|
|
@@ -113,6 +99,17 @@ class vcalendar {
|
|
| 113 |
$this->xcaldecl = array();
|
| 114 |
$this->components = array();
|
| 115 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
/*********************************************************************************/
|
| 117 |
/**
|
| 118 |
* Property Name: CALSCALE
|
|
@@ -186,13 +183,12 @@ class vcalendar {
|
|
| 186 |
/**
|
| 187 |
* Property Name: PRODID
|
| 188 |
*
|
| 189 |
-
* The identifier is RECOMMENDED to be the identical syntax to the
|
| 190 |
-
* [RFC 822] addr-spec. A good method to assure uniqueness is to put the
|
| 191 |
-
* domain name or a domain literal IP address of the host on which.. .
|
| 192 |
*/
|
| 193 |
/**
|
| 194 |
* creates formatted output for calendar property prodid
|
| 195 |
*
|
|
|
|
|
|
|
| 196 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 197 |
* @since 2.12.11 - 2012-05-13
|
| 198 |
* @return string
|
|
@@ -212,8 +208,10 @@ class vcalendar {
|
|
| 212 |
}
|
| 213 |
}
|
| 214 |
/**
|
| 215 |
-
* make default value for calendar prodid
|
| 216 |
*
|
|
|
|
|
|
|
| 217 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 218 |
* @since 2.6.8 - 2009-12-30
|
| 219 |
* @return void
|
|
@@ -294,28 +292,29 @@ class vcalendar {
|
|
| 294 |
* creates formatted output for calendar property x-prop, iCal format only
|
| 295 |
*
|
| 296 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 297 |
-
* @since 2.
|
| 298 |
* @return string
|
| 299 |
*/
|
| 300 |
function createXprop() {
|
| 301 |
if( empty( $this->xprop ) || !is_array( $this->xprop )) return FALSE;
|
| 302 |
-
$output
|
| 303 |
-
$toolbox
|
| 304 |
$toolbox->setConfig( $this->getConfig());
|
| 305 |
foreach( $this->xprop as $label => $xpropPart ) {
|
| 306 |
if( !isset($xpropPart['value']) || ( empty( $xpropPart['value'] ) && !is_numeric( $xpropPart['value'] ))) {
|
| 307 |
-
|
|
|
|
| 308 |
continue;
|
| 309 |
}
|
| 310 |
-
$attributes
|
| 311 |
if( is_array( $xpropPart['value'] )) {
|
| 312 |
foreach( $xpropPart['value'] as $pix => $theXpart )
|
| 313 |
-
$xpropPart['value'][$pix] =
|
| 314 |
$xpropPart['value'] = implode( ',', $xpropPart['value'] );
|
| 315 |
}
|
| 316 |
else
|
| 317 |
-
$xpropPart['value'] =
|
| 318 |
-
$output
|
| 319 |
if( is_array( $toolbox->xcaldecl ) && ( 0 < count( $toolbox->xcaldecl ))) {
|
| 320 |
foreach( $toolbox->xcaldecl as $localxcaldecl )
|
| 321 |
$this->xcaldecl[] = $localxcaldecl;
|
|
@@ -327,7 +326,7 @@ class vcalendar {
|
|
| 327 |
* set calendar property x-prop
|
| 328 |
*
|
| 329 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 330 |
-
* @since 2.
|
| 331 |
* @param string $label
|
| 332 |
* @param string $value
|
| 333 |
* @param array $params optional
|
|
@@ -336,13 +335,15 @@ class vcalendar {
|
|
| 336 |
function setXprop( $label, $value, $params=FALSE ) {
|
| 337 |
if( empty( $label ))
|
| 338 |
return FALSE;
|
| 339 |
-
|
|
|
|
| 340 |
return FALSE;
|
| 341 |
-
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 342 |
$xprop = array( 'value' => $value );
|
| 343 |
$xprop['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 344 |
-
if( !is_array( $this->xprop ))
|
| 345 |
-
|
|
|
|
| 346 |
return TRUE;
|
| 347 |
}
|
| 348 |
/*********************************************************************************/
|
|
@@ -405,7 +406,7 @@ class vcalendar {
|
|
| 405 |
* get calendar property value/params
|
| 406 |
*
|
| 407 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 408 |
-
* @since 2.
|
| 409 |
* @param string $propName, optional
|
| 410 |
* @param int $propix, optional, if specific property is wanted in case of multiply occurences
|
| 411 |
* @param bool $inclParam=FALSE
|
|
@@ -418,8 +419,11 @@ class vcalendar {
|
|
| 418 |
$propix = ( isset( $this->propix[$propName] )) ? $this->propix[$propName] + 2 : 1;
|
| 419 |
$this->propix[$propName] = --$propix;
|
| 420 |
}
|
| 421 |
-
else
|
| 422 |
$mProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'RELATED-TO', 'RESOURCES' );
|
|
|
|
|
|
|
|
|
|
| 423 |
switch( $propName ) {
|
| 424 |
case 'ATTENDEE':
|
| 425 |
case 'CATEGORIES':
|
|
@@ -439,9 +443,9 @@ class vcalendar {
|
|
| 439 |
case 'URL':
|
| 440 |
$output = array();
|
| 441 |
foreach ( $this->components as $cix => $component) {
|
| 442 |
-
if( !in_array( $component->objName,
|
| 443 |
continue;
|
| 444 |
-
if( in_array(
|
| 445 |
$component->_getProperties( $propName, $output );
|
| 446 |
continue;
|
| 447 |
}
|
|
@@ -450,21 +454,11 @@ class vcalendar {
|
|
| 450 |
$content = $component->getProperty( 'UID' );
|
| 451 |
}
|
| 452 |
elseif( 'GEOLOCATION' == $propName ) {
|
| 453 |
-
$content = $component->getProperty( 'LOCATION' );
|
| 454 |
-
|
| 455 |
-
if(( FALSE === ( $geo = $component->getProperty( 'GEO' ))) || empty( $geo ))
|
| 456 |
continue;
|
| 457 |
-
|
| 458 |
-
|
| 459 |
-
else
|
| 460 |
-
$sign = ( 0.0 > $geo['latitude'] ) ? '-' : '';
|
| 461 |
-
$content .= ' '.$sign.sprintf( "%09.6f", abs( $geo['latitude'] ));
|
| 462 |
-
$content = rtrim( rtrim( $content, '0' ), '.' );
|
| 463 |
-
if( 0.0 < $geo['longitude'] )
|
| 464 |
-
$sign = '+';
|
| 465 |
-
else
|
| 466 |
-
$sign = ( 0.0 > $geo['longitude'] ) ? '-' : '';
|
| 467 |
-
$content .= $sign.sprintf( '%8.6f', abs( $geo['longitude'] )).'/';
|
| 468 |
}
|
| 469 |
elseif( FALSE === ( $content = $component->getProperty( $propName )))
|
| 470 |
continue;
|
|
@@ -472,7 +466,7 @@ class vcalendar {
|
|
| 472 |
continue;
|
| 473 |
elseif( is_array( $content )) {
|
| 474 |
if( isset( $content['year'] )) {
|
| 475 |
-
$key = sprintf(
|
| 476 |
if( !isset( $output[$key] ))
|
| 477 |
$output[$key] = 1;
|
| 478 |
else
|
|
@@ -671,25 +665,23 @@ class vcalendar {
|
|
| 671 |
* general vcalendar config setting
|
| 672 |
*
|
| 673 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 674 |
-
* @since 2.
|
| 675 |
* @param mixed $config
|
| 676 |
* @param string $value
|
| 677 |
* @return void
|
| 678 |
*/
|
| 679 |
function setConfig( $config, $value = FALSE) {
|
| 680 |
if( is_array( $config )) {
|
| 681 |
-
$
|
| 682 |
-
|
| 683 |
-
if(
|
| 684 |
-
|
| 685 |
-
|
| 686 |
-
|
| 687 |
-
|
| 688 |
-
|
| 689 |
-
|
| 690 |
-
|
| 691 |
-
unset( $config[$k] );
|
| 692 |
-
}
|
| 693 |
}
|
| 694 |
foreach( $config as $cKey => $cValue ) {
|
| 695 |
if( FALSE === $this->setConfig( $cKey, $cValue ))
|
|
@@ -697,8 +689,10 @@ class vcalendar {
|
|
| 697 |
}
|
| 698 |
return TRUE;
|
| 699 |
}
|
|
|
|
| 700 |
$res = FALSE;
|
| 701 |
-
|
|
|
|
| 702 |
case 'ALLOWEMPTY':
|
| 703 |
$this->allowEmpty = $value;
|
| 704 |
$subcfg = array( 'ALLOWEMPTY' => $value );
|
|
@@ -709,28 +703,18 @@ class vcalendar {
|
|
| 709 |
return TRUE;
|
| 710 |
break;
|
| 711 |
case 'DIRECTORY':
|
| 712 |
-
$value
|
| 713 |
-
|
| 714 |
-
|
| 715 |
-
$value = substr( $value, 0, ( strlen( $value ) - strlen( $del )));
|
| 716 |
-
if( is_dir( $value )) {
|
| 717 |
/* local directory */
|
| 718 |
-
clearstatcache();
|
| 719 |
$this->directory = $value;
|
| 720 |
$this->url = null;
|
| 721 |
return TRUE;
|
| 722 |
}
|
| 723 |
-
else
|
| 724 |
-
return FALSE;
|
| 725 |
break;
|
| 726 |
case 'FILENAME':
|
| 727 |
$value = trim( $value );
|
| 728 |
-
|
| 729 |
-
/* remote directory+file -> URL */
|
| 730 |
-
$this->filename = $value;
|
| 731 |
-
return TRUE;
|
| 732 |
-
}
|
| 733 |
-
$dirfile = $this->getConfig( 'directory' ).$this->getConfig( 'delimiter' ).$value;
|
| 734 |
if( file_exists( $dirfile )) {
|
| 735 |
/* local file exists */
|
| 736 |
if( is_readable( $dirfile ) || is_writable( $dirfile )) {
|
|
@@ -741,8 +725,9 @@ class vcalendar {
|
|
| 741 |
else
|
| 742 |
return FALSE;
|
| 743 |
}
|
| 744 |
-
elseif( is_readable($this->
|
| 745 |
/* read- or writable directory */
|
|
|
|
| 746 |
$this->filename = $value;
|
| 747 |
return TRUE;
|
| 748 |
}
|
|
@@ -799,14 +784,17 @@ class vcalendar {
|
|
| 799 |
break;
|
| 800 |
case 'URL':
|
| 801 |
/* remote file - URL */
|
| 802 |
-
$value = trim( $value );
|
| 803 |
-
$value = str_replace( '
|
| 804 |
-
|
| 805 |
-
|
|
|
|
| 806 |
$this->url = $value;
|
| 807 |
-
$
|
| 808 |
-
|
| 809 |
-
|
|
|
|
|
|
|
| 810 |
break;
|
| 811 |
default: // any unvalid config key.. .
|
| 812 |
return TRUE;
|
|
@@ -882,7 +870,7 @@ class vcalendar {
|
|
| 882 |
* get calendar component from container
|
| 883 |
*
|
| 884 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 885 |
-
* @since 2.
|
| 886 |
* @param mixed $arg1 optional, ordno/component type/ component uid
|
| 887 |
* @param mixed $arg2 optional, ordno if arg1 = component type
|
| 888 |
* @return object
|
|
@@ -893,11 +881,6 @@ class vcalendar {
|
|
| 893 |
$argType = 'INDEX';
|
| 894 |
$index = $this->compix['INDEX'] = ( isset( $this->compix['INDEX'] )) ? $this->compix['INDEX'] + 1 : 1;
|
| 895 |
}
|
| 896 |
-
elseif ( ctype_digit( (string) $arg1 )) { // specific component in chain
|
| 897 |
-
$argType = 'INDEX';
|
| 898 |
-
$index = (int) $arg1;
|
| 899 |
-
unset( $this->compix );
|
| 900 |
-
}
|
| 901 |
elseif( is_array( $arg1 )) { // array( *[propertyName => propertyValue] )
|
| 902 |
$arg2 = implode( '-', array_keys( $arg1 ));
|
| 903 |
$index = $this->compix[$arg2] = ( isset( $this->compix[$arg2] )) ? $this->compix[$arg2] + 1 : 1;
|
|
@@ -905,6 +888,11 @@ class vcalendar {
|
|
| 905 |
$otherProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL' );
|
| 906 |
$mProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'RELATED-TO', 'RESOURCES' );
|
| 907 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 908 |
elseif(( strlen( $arg1 ) <= strlen( 'vfreebusy' )) && ( FALSE === strpos( $arg1, '@' ))) { // object class name
|
| 909 |
unset( $this->compix['INDEX'] );
|
| 910 |
$argType = strtolower( $arg1 );
|
|
@@ -935,9 +923,9 @@ class vcalendar {
|
|
| 935 |
$cix1gC++;
|
| 936 |
}
|
| 937 |
elseif( is_array( $arg1 )) { // array( *[propertyName => propertyValue] )
|
| 938 |
-
$hit
|
|
|
|
| 939 |
foreach( $arg1 as $pName => $pValue ) {
|
| 940 |
-
$pName = strtoupper( $pName );
|
| 941 |
if( !in_array( $pName, $dateProps ) && !in_array( $pName, $otherProps ))
|
| 942 |
continue;
|
| 943 |
if( in_array( $pName, $mProps )) { // multiple occurrence
|
|
@@ -955,7 +943,7 @@ class vcalendar {
|
|
| 955 |
$hit[] = ( FALSE !== stripos( $value, $pValue )) ? TRUE : FALSE;
|
| 956 |
continue;
|
| 957 |
}
|
| 958 |
-
if( in_array(
|
| 959 |
$valuedate = sprintf( '%04d%02d%02d', $value['year'], $value['month'], $value['day'] );
|
| 960 |
if( 8 < strlen( $pValue )) {
|
| 961 |
if( isset( $value['hour'] )) {
|
|
@@ -1044,7 +1032,7 @@ class vcalendar {
|
|
| 1044 |
* No date controls occurs.
|
| 1045 |
*
|
| 1046 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1047 |
-
* @since 2.
|
| 1048 |
* @param mixed $startY optional, start Year, default current Year ALT. array selecOptions ( *[ <propName> => <uniqueValue> ] )
|
| 1049 |
* @param int $startM optional, start Month, default current Month
|
| 1050 |
* @param int $startD optional, start Day, default current Day
|
|
@@ -1067,75 +1055,85 @@ class vcalendar {
|
|
| 1067 |
if( is_array( $startY ))
|
| 1068 |
return $this->selectComponents2( $startY );
|
| 1069 |
/* check default dates */
|
| 1070 |
-
if(
|
| 1071 |
-
if(
|
| 1072 |
-
if(
|
| 1073 |
$startDate = mktime( 0, 0, 0, $startM, $startD, $startY );
|
| 1074 |
-
if(
|
| 1075 |
-
if(
|
| 1076 |
-
if(
|
| 1077 |
$endDate = mktime( 23, 59, 59, $endM, $endD, $endY );
|
| 1078 |
-
//echo 'selectComp arg='.date( 'Y-m-d H:i:s', $startDate).' -- '.date( 'Y-m-d H:i:s', $endDate)."<br
|
| 1079 |
/* check component types */
|
| 1080 |
$validTypes = array('vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 1081 |
-
if(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1082 |
foreach( $cType as $cix => $theType ) {
|
| 1083 |
-
$cType[$cix] = $theType
|
| 1084 |
if( !in_array( $theType, $validTypes ))
|
| 1085 |
$cType[$cix] = 'vevent';
|
| 1086 |
}
|
| 1087 |
$cType = array_unique( $cType );
|
| 1088 |
}
|
| 1089 |
-
elseif( !empty( $cType )) {
|
| 1090 |
-
$cType = strtolower( $cType );
|
| 1091 |
-
if( !in_array( $cType, $validTypes ))
|
| 1092 |
-
$cType = array( 'vevent' );
|
| 1093 |
-
else
|
| 1094 |
-
$cType = array( $cType );
|
| 1095 |
-
}
|
| 1096 |
-
else
|
| 1097 |
-
$cType = $validTypes;
|
| 1098 |
-
if( 0 >= count( $cType ))
|
| 1099 |
-
$cType = $validTypes;
|
| 1100 |
if(( FALSE === $flat ) && ( FALSE === $any )) // invalid combination
|
| 1101 |
$split = FALSE;
|
| 1102 |
if(( TRUE === $flat ) && ( TRUE === $split )) // invalid combination
|
| 1103 |
$split = FALSE;
|
| 1104 |
/* iterate components */
|
| 1105 |
-
$result
|
|
|
|
|
|
|
|
|
|
| 1106 |
foreach ( $this->components as $cix => $component ) {
|
| 1107 |
if( empty( $component )) continue;
|
| 1108 |
unset( $start );
|
| 1109 |
/* deselect unvalid type components */
|
| 1110 |
if( !in_array( $component->objName, $cType ))
|
| 1111 |
continue;
|
| 1112 |
-
$start = $component->getProperty( 'dtstart' );
|
| 1113 |
/* select due when dtstart is missing */
|
| 1114 |
-
if( empty( $start ) && ( $component->objName == 'vtodo' ) && ( FALSE === ( $start = $component->getProperty( 'due' ))))
|
| 1115 |
continue;
|
| 1116 |
if( empty( $start ))
|
| 1117 |
continue;
|
| 1118 |
-
|
| 1119 |
-
|
| 1120 |
-
$
|
| 1121 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1122 |
/* get end date from dtend/due/duration properties */
|
| 1123 |
-
$end = $component->getProperty( 'dtend' );
|
| 1124 |
if( !empty( $end )) {
|
| 1125 |
-
$dtendExist = TRUE;
|
| 1126 |
-
$
|
| 1127 |
}
|
|
|
|
|
|
|
|
|
|
| 1128 |
if( empty( $end ) && ( $component->objName == 'vtodo' )) {
|
| 1129 |
$end = $component->getProperty( 'due' );
|
| 1130 |
if( !empty( $end )) {
|
| 1131 |
-
$dueExist = TRUE;
|
| 1132 |
-
$
|
| 1133 |
}
|
| 1134 |
}
|
| 1135 |
if( !empty( $end ) && !isset( $end['hour'] )) {
|
| 1136 |
/* a DTEND without time part regards an event that ends the day before,
|
| 1137 |
for an all-day event DTSTART=20071201 DTEND=20071202 (taking place 20071201!!! */
|
| 1138 |
-
$endAllDayEvent = TRUE;
|
| 1139 |
$endWdate = mktime( 23, 59, 59, $end['month'], ($end['day'] - 1), $end['year'] );
|
| 1140 |
$end['year'] = date( 'Y', $endWdate );
|
| 1141 |
$end['month'] = date( 'm', $endWdate );
|
|
@@ -1146,15 +1144,19 @@ class vcalendar {
|
|
| 1146 |
if( empty( $end )) {
|
| 1147 |
$end = $component->getProperty( 'duration', FALSE, FALSE, TRUE );// in dtend (array) format
|
| 1148 |
if( !empty( $end ))
|
| 1149 |
-
$
|
| 1150 |
-
|
| 1151 |
-
|
|
|
|
|
|
|
| 1152 |
}
|
| 1153 |
if( empty( $end )) { // assume one day duration if missing end date
|
| 1154 |
$end = array( 'year' => $start['year'], 'month' => $start['month'], 'day' => $start['day'], 'hour' => 23, 'min' => 59, 'sec' => 59 );
|
|
|
|
|
|
|
| 1155 |
}
|
| 1156 |
-
// if( isset($end)) echo 'selectComp 5 start='.implode('-',$start).' end='.implode('-',$end)."<br
|
| 1157 |
-
$endWdate = iCalUtilityFunctions::_date2timestamp( $end );
|
| 1158 |
if( $endWdate < $startWdate ) { // MUST be after start date!!
|
| 1159 |
$end = array( 'year' => $start['year'], 'month' => $start['month'], 'day' => $start['day'], 'hour' => 23, 'min' => 59, 'sec' => 59 );
|
| 1160 |
$endWdate = iCalUtilityFunctions::_date2timestamp( $end );
|
|
@@ -1174,24 +1176,12 @@ class vcalendar {
|
|
| 1174 |
$exdatelist[$exWdate] = TRUE;
|
| 1175 |
} // end - foreach( $exdate as $theExdate )
|
| 1176 |
} // end - check exdate
|
| 1177 |
-
|
| 1178 |
-
|
| 1179 |
-
if(( FALSE !== ( $recurrid = $component->getProperty( 'recurrence-id' ))) &&
|
| 1180 |
-
( FALSE !== ( $sequence = $component->getProperty( 'sequence' ))) ) {
|
| 1181 |
$recurrid = iCalUtilityFunctions::_date2timestamp( $recurrid );
|
| 1182 |
$recurrid = mktime( 0, 0, 0, date( 'm', $recurrid ), date( 'd', $recurrid ), date( 'Y', $recurrid )); // on a day-basis !!!
|
| 1183 |
-
$
|
| 1184 |
-
|
| 1185 |
-
if( date( 'Ymd', $startWdate ) != date( 'Ymd', $recurrid ))
|
| 1186 |
-
$exdatelist[$recurrid] = TRUE; // exclude all other days than startdate
|
| 1187 |
-
$wd = getdate( $recurrid );
|
| 1188 |
-
if( isset( $result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] ))
|
| 1189 |
-
unset( $result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] ); // remove from output, dtstart etc added below
|
| 1190 |
-
if( $split && ( $recurrid <= $endD ))
|
| 1191 |
-
$recurrid = mktime( 0, 0, 0, date( 'm', $recurrid ), date( 'd', $recurrid ) + 1, date( 'Y', $recurrid )); // step one day
|
| 1192 |
-
else
|
| 1193 |
-
break;
|
| 1194 |
-
} while( TRUE );
|
| 1195 |
} // end recurrence-id/sequence test
|
| 1196 |
/* select only components with.. . */
|
| 1197 |
if(( !$any && ( $startWdate >= $startDate ) && ( $startWdate <= $endDate )) || // (dt)start within the period
|
|
@@ -1204,66 +1194,54 @@ class vcalendar {
|
|
| 1204 |
elseif( $split ) { // split the original component
|
| 1205 |
if( $endWdate > $endDate )
|
| 1206 |
$endWdate = $endDate; // use period end date
|
| 1207 |
-
$rstart = $startWdate;
|
| 1208 |
-
|
| 1209 |
-
$rstart = $startDate; // use period start date
|
| 1210 |
-
$startYMD = date( 'Ymd', $rstart );
|
| 1211 |
$endYMD = date( 'Ymd', $endWdate );
|
| 1212 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1213 |
-
|
| 1214 |
-
|
| 1215 |
-
|
| 1216 |
-
|
| 1217 |
-
|
| 1218 |
-
|
| 1219 |
-
|
| 1220 |
-
|
| 1221 |
-
|
| 1222 |
-
|
| 1223 |
-
|
| 1224 |
-
$
|
| 1225 |
-
|
| 1226 |
-
|
| 1227 |
-
|
| 1228 |
-
|
| 1229 |
-
|
| 1230 |
-
|
| 1231 |
-
|
| 1232 |
-
|
| 1233 |
-
$tend += ( 24 * 3600 ); // alldaysevents has an end date 'day after' meaning this day
|
| 1234 |
-
$datestring = date( $endDateFormat, $tend );
|
| 1235 |
-
if( isset( $end['tz'] ))
|
| 1236 |
-
$datestring .= ' '.$end['tz'];
|
| 1237 |
-
$propName = ( !$dueExist ) ? 'X-CURRENT-DTEND' : 'X-CURRENT-DUE';
|
| 1238 |
-
$component->setProperty( $propName, $datestring );
|
| 1239 |
-
} // end if( $dtendExist || $dueExist || $durationExist )
|
| 1240 |
-
$wd = getdate( $rstart );
|
| 1241 |
-
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component->copy(); // copy to output
|
| 1242 |
-
$rstart = mktime( date( 'H', $rstart ), date( 'i', $rstart ), date( 's', $rstart ), date( 'm', $rstart ), date( 'd', $rstart ) + 1, date( 'Y', $rstart ) ); // step one day
|
| 1243 |
-
} // end while( $rstart <= $endWdate )
|
| 1244 |
-
} // end if( $split ) - else use component date
|
| 1245 |
elseif( $recurrid && !$flat && !$any && !$split )
|
| 1246 |
$continue = TRUE;
|
| 1247 |
else { // !$flat && !$split, i.e. no flat array and DTSTART within period
|
| 1248 |
$checkDate = mktime( 0, 0, 0, date( 'm', $startWdate ), date( 'd', $startWdate ), date( 'Y', $startWdate ) ); // on a day-basis !!!
|
| 1249 |
-
|
|
|
|
|
|
|
|
|
|
| 1250 |
$wd = getdate( $startWdate );
|
| 1251 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component->copy(); // copy to output
|
| 1252 |
}
|
| 1253 |
}
|
| 1254 |
} // end if(( $startWdate >= $startDate ) && ( $startWdate <= $endDate ))
|
| 1255 |
-
|
| 1256 |
/* if 'any' components, check components with reccurrence rules, removing all excluding dates */
|
| 1257 |
if( TRUE === $any ) {
|
| 1258 |
/* make a list of optional repeating dates for component occurence, rrule, rdate */
|
| 1259 |
$recurlist = array();
|
| 1260 |
while( FALSE !== ( $rrule = $component->getProperty( 'rrule' ))) // check rrule
|
| 1261 |
iCalUtilityFunctions::_recur2date( $recurlist, $rrule, $start, $workstart, $workend );
|
| 1262 |
-
foreach( $recurlist as $recurkey => $recurvalue )
|
| 1263 |
-
$recurlist[$recurkey] = $rdurWsecs;
|
| 1264 |
while( FALSE !== ( $rdate = $component->getProperty( 'rdate' ))) { // check rdate
|
| 1265 |
foreach( $rdate as $theRdate ) {
|
| 1266 |
-
if( is_array( $theRdate ) && ( 2 == count( $theRdate )) &&
|
| 1267 |
array_key_exists( '0', $theRdate ) && array_key_exists( '1', $theRdate )) {
|
| 1268 |
$rstart = iCalUtilityFunctions::_date2timestamp( $theRdate[0] );
|
| 1269 |
if(( $rstart < ( $startDate - $rdurWsecs )) || ( $rstart > $endDate ))
|
|
@@ -1286,19 +1264,26 @@ class vcalendar {
|
|
| 1286 |
}
|
| 1287 |
}
|
| 1288 |
} // end - check rdate
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1289 |
if( 0 < count( $recurlist )) {
|
| 1290 |
ksort( $recurlist );
|
| 1291 |
$xRecurrence = 1;
|
| 1292 |
$component2 = $component->copy();
|
| 1293 |
$compUID = $component2->getProperty( 'UID' );
|
| 1294 |
foreach( $recurlist as $recurkey => $durvalue ) {
|
| 1295 |
-
// echo "recurKey=".date( 'Y-m-d H:i:s', $recurkey ).' dur='.iCalUtilityFunctions::offsetSec2His( $durvalue )."<br
|
| 1296 |
if((( $startDate - $rdurWsecs ) > $recurkey ) || ( $endDate < $recurkey )) // not within period
|
| 1297 |
continue;
|
| 1298 |
$checkDate = mktime( 0, 0, 0, date( 'm', $recurkey ), date( 'd', $recurkey ), date( 'Y', $recurkey ) ); // on a day-basis !!!
|
| 1299 |
-
if( isset( $
|
| 1300 |
continue;
|
| 1301 |
-
if(
|
|
|
|
|
|
|
| 1302 |
continue;
|
| 1303 |
$rstart = $recurkey;
|
| 1304 |
$rend = $recurkey + $durvalue;
|
|
@@ -1309,101 +1294,79 @@ class vcalendar {
|
|
| 1309 |
}
|
| 1310 |
/* add repeating components within valid dates to output array, one each day */
|
| 1311 |
elseif( $split ) {
|
|
|
|
| 1312 |
if( $rend > $endDate )
|
| 1313 |
$rend = $endDate;
|
| 1314 |
-
$startYMD = date( 'Ymd', $rstart );
|
| 1315 |
$endYMD = date( 'Ymd', $rend );
|
| 1316 |
-
// echo "splitStart=".date( 'Y-m-d H:i:s', $rstart ).' end='.date( 'Y-m-d H:i:s', $rend )."<br
|
| 1317 |
-
|
| 1318 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1319 |
-
if( isset( $
|
| 1320 |
break;
|
| 1321 |
-
|
| 1322 |
-
|
| 1323 |
-
|
| 1324 |
-
|
| 1325 |
-
|
| 1326 |
-
|
| 1327 |
-
if( isset( $start['tz'] ))
|
| 1328 |
-
$datestring .= ' '.$start['tz'];
|
| 1329 |
-
//echo "X-CURRENT-DTSTART 1 = $datestring xRecurrence=$xRecurrence tcnt =".++$tcnt."<br />";$component2->setProperty( 'X-CNT', $tcnt ); // test ###
|
| 1330 |
-
$component2->setProperty( 'X-CURRENT-DTSTART', $datestring );
|
| 1331 |
-
if( $dtendExist || $dueExist || $durationExist ) {
|
| 1332 |
-
if( date( 'Ymd', $rstart ) < $endYMD ) // not the last day
|
| 1333 |
-
$tend = mktime( 23, 59, 59, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ));
|
| 1334 |
-
else
|
| 1335 |
-
$tend = mktime( date( 'H', $endWdate ), date( 'i', $endWdate ), date( 's', $endWdate ), date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1336 |
-
if( $endAllDayEvent && $dtendExist )
|
| 1337 |
-
$tend += ( 24 * 3600 ); // alldaysevents has an end date 'day after' meaning this day
|
| 1338 |
-
$datestring = date( $endDateFormat, $tend );
|
| 1339 |
-
if( isset( $end['tz'] ))
|
| 1340 |
-
$datestring .= ' '.$end['tz'];
|
| 1341 |
-
$propName = ( !$dueExist ) ? 'X-CURRENT-DTEND' : 'X-CURRENT-DUE';
|
| 1342 |
-
$component2->setProperty( $propName, $datestring );
|
| 1343 |
-
} // end if( $dtendExist || $dueExist || $durationExist )
|
| 1344 |
$component2->setProperty( 'X-RECURRENCE', $xRecurrence );
|
| 1345 |
$wd = getdate( $rstart );
|
| 1346 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component2->copy(); // copy to output
|
| 1347 |
-
} // end if
|
| 1348 |
-
$rstart
|
|
|
|
| 1349 |
} // end while( $rstart <= $rend )
|
| 1350 |
-
$xRecurrence += 1;
|
| 1351 |
} // end elseif( $split )
|
| 1352 |
-
elseif( $rstart >= $startDate ) {
|
|
|
|
| 1353 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1354 |
-
if( !isset( $exdatelist[$checkDate] )) {
|
| 1355 |
-
$
|
| 1356 |
-
$
|
| 1357 |
-
|
| 1358 |
-
$datestring .= ' '.$start['tz'];
|
| 1359 |
-
//echo "X-CURRENT-DTSTART 2 = $datestring xRecurrence=$xRecurrence tcnt =".++$tcnt."<br />";$component2->setProperty( 'X-CNT', $tcnt ); // test ###
|
| 1360 |
-
$component2->setProperty( 'X-CURRENT-DTSTART', $datestring );
|
| 1361 |
-
if( $dtendExist || $dueExist || $durationExist ) {
|
| 1362 |
-
$tend = $rstart + $rdurWsecs;
|
| 1363 |
-
if( date( 'Ymd', $tend ) < date( 'Ymd', $endWdate ))
|
| 1364 |
-
$tend = mktime( 23, 59, 59, date( 'm', $tend ), date( 'd', $tend ), date( 'Y', $tend ));
|
| 1365 |
-
else
|
| 1366 |
-
$tend = mktime( date( 'H', $endWdate ), date( 'i', $endWdate ), date( 's', $endWdate ), date( 'm', $tend ), date( 'd', $tend ), date( 'Y', $tend ) ); // on a day-basis !!!
|
| 1367 |
-
if( $endAllDayEvent && $dtendExist )
|
| 1368 |
-
$tend += ( 24 * 3600 ); // alldaysevents has an end date 'day after' meaning this day
|
| 1369 |
-
$datestring = date( $endDateFormat, $tend );
|
| 1370 |
-
if( isset( $end['tz'] ))
|
| 1371 |
-
$datestring .= ' '.$end['tz'];
|
| 1372 |
-
$propName = ( !$dueExist ) ? 'X-CURRENT-DTEND' : 'X-CURRENT-DUE';
|
| 1373 |
-
$component2->setProperty( $propName, $datestring );
|
| 1374 |
-
} // end if( $dtendExist || $dueExist || $durationExist )
|
| 1375 |
$component2->setProperty( 'X-RECURRENCE', $xRecurrence );
|
| 1376 |
$wd = getdate( $rstart );
|
| 1377 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component2->copy(); // copy to output
|
| 1378 |
} // end if( !isset( $exdatelist[$checkDate] ))
|
| 1379 |
} // end elseif( $rstart >= $startDate )
|
| 1380 |
} // end foreach( $recurlist as $recurkey => $durvalue )
|
|
|
|
| 1381 |
} // end if( 0 < count( $recurlist ))
|
| 1382 |
/* deselect components with startdate/enddate not within period */
|
| 1383 |
if(( $endWdate < $startDate ) || ( $startWdate > $endDate ))
|
| 1384 |
continue;
|
| 1385 |
} // end if( TRUE === $any )
|
| 1386 |
} // end foreach ( $this->components as $cix => $component )
|
| 1387 |
-
|
|
|
|
|
|
|
|
|
|
| 1388 |
elseif( !$flat ) {
|
| 1389 |
foreach( $result as $y => $yeararr ) {
|
| 1390 |
foreach( $yeararr as $m => $montharr ) {
|
| 1391 |
foreach( $montharr as $d => $dayarr ) {
|
| 1392 |
if( empty( $result[$y][$m][$d] ))
|
| 1393 |
unset( $result[$y][$m][$d] );
|
| 1394 |
-
else
|
| 1395 |
-
$result[$y][$m][$d] = array_values( $dayarr ); // skip tricky UID-index
|
| 1396 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1397 |
if( empty( $result[$y][$m] ))
|
| 1398 |
unset( $result[$y][$m] );
|
| 1399 |
else
|
| 1400 |
ksort( $result[$y][$m] );
|
| 1401 |
-
}
|
| 1402 |
if( empty( $result[$y] ))
|
| 1403 |
unset( $result[$y] );
|
| 1404 |
else
|
| 1405 |
ksort( $result[$y] );
|
| 1406 |
-
}
|
| 1407 |
if( empty( $result ))
|
| 1408 |
unset( $result );
|
| 1409 |
else
|
|
@@ -1417,7 +1380,7 @@ class vcalendar {
|
|
| 1417 |
* select components from calendar on based on specific property value(-s)
|
| 1418 |
*
|
| 1419 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1420 |
-
* @since 2.
|
| 1421 |
* @param array $selectOptions, (string) key => (mixed) value, (key=propertyName)
|
| 1422 |
* @return array
|
| 1423 |
*/
|
|
@@ -1425,18 +1388,18 @@ class vcalendar {
|
|
| 1425 |
$output = array();
|
| 1426 |
$allowedComps = array('vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 1427 |
$allowedProperties = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL' );
|
|
|
|
| 1428 |
foreach( $this->components as $cix => $component3 ) {
|
| 1429 |
if( !in_array( $component3->objName, $allowedComps ))
|
| 1430 |
continue;
|
| 1431 |
$uid = $component3->getProperty( 'UID' );
|
| 1432 |
foreach( $selectOptions as $propName => $pvalue ) {
|
| 1433 |
-
$propName = strtoupper( $propName );
|
| 1434 |
if( !in_array( $propName, $allowedProperties ))
|
| 1435 |
continue;
|
| 1436 |
if( !is_array( $pvalue ))
|
| 1437 |
$pvalue = array( $pvalue );
|
| 1438 |
if(( 'UID' == $propName ) && in_array( $uid, $pvalue )) {
|
| 1439 |
-
$output[] = $component3->copy();
|
| 1440 |
continue;
|
| 1441 |
}
|
| 1442 |
elseif(( 'ATTENDEE' == $propName ) || ( 'CATEGORIES' == $propName ) || ( 'CONTACT' == $propName ) || ( 'RELATED-TO' == $propName ) || ( 'RESOURCES' == $propName )) { // multiple occurrence?
|
|
@@ -1444,8 +1407,8 @@ class vcalendar {
|
|
| 1444 |
$component3->_getProperties( $propName, $propValues );
|
| 1445 |
$propValues = array_keys( $propValues );
|
| 1446 |
foreach( $pvalue as $theValue ) {
|
| 1447 |
-
if( in_array( $theValue, $propValues ) && !isset( $output[$uid] )) {
|
| 1448 |
-
$output[$uid] = $component3->copy();
|
| 1449 |
break;
|
| 1450 |
}
|
| 1451 |
}
|
|
@@ -1456,36 +1419,65 @@ class vcalendar {
|
|
| 1456 |
if( is_array( $d )) {
|
| 1457 |
foreach( $d as $part ) {
|
| 1458 |
if( in_array( $part, $pvalue ) && !isset( $output[$uid] ))
|
| 1459 |
-
$output[$uid] = $component3->copy();
|
| 1460 |
}
|
| 1461 |
}
|
| 1462 |
elseif(( 'SUMMARY' == $propName ) && !isset( $output[$uid] )) {
|
| 1463 |
foreach( $pvalue as $pval ) {
|
| 1464 |
if( FALSE !== stripos( $d, $pval )) {
|
| 1465 |
-
$output[$uid] = $component3->copy();
|
| 1466 |
break;
|
| 1467 |
}
|
| 1468 |
}
|
| 1469 |
}
|
| 1470 |
elseif( in_array( $d, $pvalue ) && !isset( $output[$uid] ))
|
| 1471 |
-
$output[$uid] = $component3->copy();
|
| 1472 |
} // end foreach( $selectOptions as $propName => $pvalue ) {
|
| 1473 |
} // end foreach( $this->components as $cix => $component3 ) {
|
| 1474 |
if( !empty( $output )) {
|
| 1475 |
-
ksort( $output );
|
| 1476 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1477 |
}
|
| 1478 |
return $output;
|
| 1479 |
}
|
| 1480 |
/**
|
| 1481 |
-
*
|
| 1482 |
*
|
| 1483 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1484 |
-
* @since 2.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1485 |
* @param object $component calendar component
|
| 1486 |
* @param mixed $arg1 optional, ordno/component type/ component uid
|
| 1487 |
* @param mixed $arg2 optional, ordno if arg1 = component type
|
| 1488 |
-
* @return
|
| 1489 |
*/
|
| 1490 |
function setComponent( $component, $arg1=FALSE, $arg2=FALSE ) {
|
| 1491 |
$component->setConfig( $this->getConfig(), FALSE, TRUE );
|
|
@@ -1494,6 +1486,7 @@ class vcalendar {
|
|
| 1494 |
$dummy1 = $component->getProperty( 'dtstamp' );
|
| 1495 |
$dummy2 = $component->getProperty( 'uid' );
|
| 1496 |
}
|
|
|
|
| 1497 |
if( !$arg1 ) { // plain insert, last in chain
|
| 1498 |
$this->components[] = $component->copy();
|
| 1499 |
return TRUE;
|
|
@@ -1544,133 +1537,54 @@ class vcalendar {
|
|
| 1544 |
* otherwise sorting on specific (argument) property values
|
| 1545 |
*
|
| 1546 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1547 |
-
* @since 2.
|
| 1548 |
* @param string $sortArg, optional
|
|
|
|
|
|
|
| 1549 |
* @return void
|
| 1550 |
-
*
|
| 1551 |
*/
|
| 1552 |
function sort( $sortArg=FALSE ) {
|
| 1553 |
-
if( is_array( $this->components ))
|
| 1554 |
-
|
| 1555 |
-
|
| 1556 |
-
|
| 1557 |
-
|
| 1558 |
-
|
| 1559 |
-
/* set sort parameters for each component */
|
| 1560 |
-
foreach( $this->components as $cix => & $c ) {
|
| 1561 |
-
$c->srtk = array( '0', '0', '0', '0' );
|
| 1562 |
-
if( 'vtimezone' == $c->objName ) {
|
| 1563 |
-
if( FALSE === ( $c->srtk[0] = $c->getProperty( 'tzid' )))
|
| 1564 |
-
$c->srtk[0] = 0;
|
| 1565 |
-
continue;
|
| 1566 |
-
}
|
| 1567 |
-
elseif( $sortArg ) {
|
| 1568 |
-
if(( 'ATTENDEE' == $sortArg ) || ( 'CATEGORIES' == $sortArg ) || ( 'CONTACT' == $sortArg ) || ( 'RELATED-TO' == $sortArg ) || ( 'RESOURCES' == $sortArg )) {
|
| 1569 |
-
$propValues = array();
|
| 1570 |
-
$c->_getProperties( $sortArg, $propValues );
|
| 1571 |
-
if( !empty( $propValues )) {
|
| 1572 |
-
$sk = array_keys( $propValues );
|
| 1573 |
-
$c->srtk[0] = $sk[0];
|
| 1574 |
-
if( 'RELATED-TO' == $sortArg )
|
| 1575 |
-
$c->srtk[0] .= $c->getProperty( 'uid' );
|
| 1576 |
-
}
|
| 1577 |
-
elseif( 'RELATED-TO' == $sortArg )
|
| 1578 |
-
$c->srtk[0] = $c->getProperty( 'uid' );
|
| 1579 |
-
}
|
| 1580 |
-
elseif( FALSE !== ( $d = $c->getProperty( $sortArg )))
|
| 1581 |
-
$c->srtk[0] = $d;
|
| 1582 |
-
continue;
|
| 1583 |
-
}
|
| 1584 |
-
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DTSTART' ))) {
|
| 1585 |
-
$c->srtk[0] = iCalUtilityFunctions::_strdate2date( $d[1] );
|
| 1586 |
-
unset( $c->srtk[0]['unparsedtext'] );
|
| 1587 |
-
}
|
| 1588 |
-
elseif( FALSE === ( $c->srtk[0] = $c->getProperty( 'dtstart' )))
|
| 1589 |
-
$c->srtk[1] = 0; // sortkey 0 : dtstart
|
| 1590 |
-
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DTEND' ))) {
|
| 1591 |
-
$c->srtk[1] = iCalUtilityFunctions::_strdate2date( $d[1] ); // sortkey 1 : dtend/due(/dtstart+duration)
|
| 1592 |
-
unset( $c->srtk[1]['unparsedtext'] );
|
| 1593 |
-
}
|
| 1594 |
-
elseif( FALSE === ( $c->srtk[1] = $c->getProperty( 'dtend' ))) {
|
| 1595 |
-
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DUE' ))) {
|
| 1596 |
-
$c->srtk[1] = iCalUtilityFunctions::_strdate2date( $d[1] );
|
| 1597 |
-
unset( $c->srtk[1]['unparsedtext'] );
|
| 1598 |
-
}
|
| 1599 |
-
elseif( FALSE === ( $c->srtk[1] = $c->getProperty( 'due' )))
|
| 1600 |
-
if( FALSE === ( $c->srtk[1] = $c->getProperty( 'duration', FALSE, FALSE, TRUE )))
|
| 1601 |
-
$c->srtk[1] = 0;
|
| 1602 |
-
}
|
| 1603 |
-
if( FALSE === ( $c->srtk[2] = $c->getProperty( 'created' ))) // sortkey 2 : created/dtstamp
|
| 1604 |
-
if( FALSE === ( $c->srtk[2] = $c->getProperty( 'dtstamp' )))
|
| 1605 |
-
$c->srtk[2] = 0;
|
| 1606 |
-
if( FALSE === ( $c->srtk[3] = $c->getProperty( 'uid' ))) // sortkey 3 : uid
|
| 1607 |
-
$c->srtk[3] = 0;
|
| 1608 |
-
} // end foreach( $this->components as & $c
|
| 1609 |
-
/* sort */
|
| 1610 |
-
usort( $this->components, array( $this, '_cmpfcn' ));
|
| 1611 |
-
}
|
| 1612 |
-
}
|
| 1613 |
-
function _cmpfcn( $a, $b ) {
|
| 1614 |
-
if( empty( $a )) return -1;
|
| 1615 |
-
if( empty( $b )) return 1;
|
| 1616 |
-
if( 'vtimezone' == $a->objName ) {
|
| 1617 |
-
if( 'vtimezone' != $b->objName ) return -1;
|
| 1618 |
-
elseif( $a->srtk[0] <= $b->srtk[0] ) return -1;
|
| 1619 |
-
else return 1;
|
| 1620 |
-
}
|
| 1621 |
-
elseif( 'vtimezone' == $b->objName ) return 1;
|
| 1622 |
-
$sortkeys = array( 'year', 'month', 'day', 'hour', 'min', 'sec' );
|
| 1623 |
-
for( $k = 0; $k < 4 ; $k++ ) {
|
| 1624 |
-
if( empty( $a->srtk[$k] )) return -1;
|
| 1625 |
-
elseif( empty( $b->srtk[$k] )) return 1;
|
| 1626 |
-
if( is_array( $a->srtk[$k] )) {
|
| 1627 |
-
if( is_array( $b->srtk[$k] )) {
|
| 1628 |
-
foreach( $sortkeys as $key ) {
|
| 1629 |
-
if ( !isset( $a->srtk[$k][$key] )) return -1;
|
| 1630 |
-
elseif( !isset( $b->srtk[$k][$key] )) return 1;
|
| 1631 |
-
if ( empty( $a->srtk[$k][$key] )) return -1;
|
| 1632 |
-
elseif( empty( $b->srtk[$k][$key] )) return 1;
|
| 1633 |
-
if ( $a->srtk[$k][$key] == $b->srtk[$k][$key])
|
| 1634 |
-
continue;
|
| 1635 |
-
if (( (int) $a->srtk[$k][$key] ) < ((int) $b->srtk[$k][$key] ))
|
| 1636 |
-
return -1;
|
| 1637 |
-
elseif(( (int) $a->srtk[$k][$key] ) > ((int) $b->srtk[$k][$key] ))
|
| 1638 |
-
return 1;
|
| 1639 |
-
}
|
| 1640 |
-
}
|
| 1641 |
-
else return -1;
|
| 1642 |
-
}
|
| 1643 |
-
elseif( is_array( $b->srtk[$k] )) return 1;
|
| 1644 |
-
elseif( $a->srtk[$k] < $b->srtk[$k] ) return -1;
|
| 1645 |
-
elseif( $a->srtk[$k] > $b->srtk[$k] ) return 1;
|
| 1646 |
}
|
| 1647 |
-
|
|
|
|
|
|
|
| 1648 |
}
|
| 1649 |
/**
|
| 1650 |
* parse iCal text/file into vcalendar, components, properties and parameters
|
| 1651 |
*
|
| 1652 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1653 |
-
* @since 2.
|
| 1654 |
* @param mixed $unparsedtext, optional, strict rfc2445 formatted, single property string or array of property strings
|
| 1655 |
* @return bool FALSE if error occurs during parsing
|
| 1656 |
-
*
|
| 1657 |
*/
|
| 1658 |
function parse( $unparsedtext=FALSE ) {
|
| 1659 |
$nl = $this->getConfig( 'nl' );
|
| 1660 |
if(( FALSE === $unparsedtext ) || empty( $unparsedtext )) {
|
| 1661 |
-
/* directory+filename is set previously via setConfig directory+filename
|
| 1662 |
-
if( FALSE === ( $
|
| 1663 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1664 |
/* READ FILE */
|
| 1665 |
-
if( FALSE === ( $rows = file_get_contents( $
|
| 1666 |
-
return FALSE; /* err
|
| 1667 |
}
|
| 1668 |
elseif( is_array( $unparsedtext ))
|
| 1669 |
$rows = implode( '\n'.$nl, $unparsedtext );
|
| 1670 |
else
|
| 1671 |
$rows = & $unparsedtext;
|
| 1672 |
/* fix line folding */
|
| 1673 |
-
$rows =
|
| 1674 |
/* skip leading (empty/invalid) lines */
|
| 1675 |
foreach( $rows as $lix => $line ) {
|
| 1676 |
if( FALSE !== stripos( $line, 'BEGIN:VCALENDAR' ))
|
|
@@ -1754,9 +1668,6 @@ class vcalendar {
|
|
| 1754 |
$line .= rtrim( substr( $this->unparsed[++$i], 1 ), $nl );
|
| 1755 |
$proprows[] = $line;
|
| 1756 |
}
|
| 1757 |
-
$paramMStz = array( 'utc-', 'utc+', 'gmt-', 'gmt+' );
|
| 1758 |
-
$paramProto3 = array( 'fax:', 'cid:', 'sms:', 'tel:', 'urn:' );
|
| 1759 |
-
$paramProto4 = array( 'crid:', 'news:', 'pres:' );
|
| 1760 |
foreach( $proprows as $line ) {
|
| 1761 |
if( '\n' == substr( $line, -2 ))
|
| 1762 |
$line = substr( $line, 0, -2 );
|
|
@@ -1779,51 +1690,7 @@ class vcalendar {
|
|
| 1779 |
/* rest of the line is opt.params and value */
|
| 1780 |
$line = substr( $line, $cix);
|
| 1781 |
/* separate attributes from value */
|
| 1782 |
-
$
|
| 1783 |
-
$attrix = -1;
|
| 1784 |
-
$strlen = strlen( $line );
|
| 1785 |
-
$WithinQuotes = FALSE;
|
| 1786 |
-
$cix = 0;
|
| 1787 |
-
while( FALSE !== substr( $line, $cix, 1 )) {
|
| 1788 |
-
if( ( ':' == $line[$cix] ) &&
|
| 1789 |
-
( substr( $line,$cix, 3 ) != '://' ) &&
|
| 1790 |
-
( !in_array( strtolower( substr( $line,$cix - 6, 4 )), $paramMStz )) &&
|
| 1791 |
-
( !in_array( strtolower( substr( $line,$cix - 3, 4 )), $paramProto3 )) &&
|
| 1792 |
-
( !in_array( strtolower( substr( $line,$cix - 4, 5 )), $paramProto4 )) &&
|
| 1793 |
-
( strtolower( substr( $line,$cix - 6, 7 )) != 'mailto:' ) &&
|
| 1794 |
-
!$WithinQuotes ) {
|
| 1795 |
-
$attrEnd = TRUE;
|
| 1796 |
-
if(( $cix < ( $strlen - 4 )) &&
|
| 1797 |
-
ctype_digit( substr( $line, $cix+1, 4 ))) { // an URI with a (4pos) portnr??
|
| 1798 |
-
for( $c2ix = $cix; 3 < $c2ix; $c2ix-- ) {
|
| 1799 |
-
if( '://' == substr( $line, $c2ix - 2, 3 )) {
|
| 1800 |
-
$attrEnd = FALSE;
|
| 1801 |
-
break; // an URI with a portnr!!
|
| 1802 |
-
}
|
| 1803 |
-
}
|
| 1804 |
-
}
|
| 1805 |
-
if( $attrEnd) {
|
| 1806 |
-
$line = substr( $line, ( $cix + 1 ));
|
| 1807 |
-
break;
|
| 1808 |
-
}
|
| 1809 |
-
}
|
| 1810 |
-
if( '"' == $line[$cix] )
|
| 1811 |
-
$WithinQuotes = ( FALSE === $WithinQuotes ) ? TRUE : FALSE;
|
| 1812 |
-
if( ';' == $line[$cix] )
|
| 1813 |
-
$attr[++$attrix] = null;
|
| 1814 |
-
else
|
| 1815 |
-
$attr[$attrix] .= $line[$cix];
|
| 1816 |
-
$cix++;
|
| 1817 |
-
}
|
| 1818 |
-
/* make attributes in array format */
|
| 1819 |
-
$propattr = array();
|
| 1820 |
-
foreach( $attr as $attribute ) {
|
| 1821 |
-
$attrsplit = explode( '=', $attribute, 2 );
|
| 1822 |
-
if( 1 < count( $attrsplit ))
|
| 1823 |
-
$propattr[$attrsplit[0]] = $attrsplit[1];
|
| 1824 |
-
else
|
| 1825 |
-
$propattr[] = $attribute;
|
| 1826 |
-
}
|
| 1827 |
/* update Property */
|
| 1828 |
if( FALSE !== strpos( $line, ',' )) {
|
| 1829 |
$content = array( 0 => '' );
|
|
@@ -1839,15 +1706,15 @@ class vcalendar {
|
|
| 1839 |
}
|
| 1840 |
if( 1 < count( $content )) {
|
| 1841 |
foreach( $content as $cix => $contentPart )
|
| 1842 |
-
$content[$cix] =
|
| 1843 |
-
$this->setProperty( $propname, $content, $
|
| 1844 |
continue;
|
| 1845 |
}
|
| 1846 |
else
|
| 1847 |
$line = reset( $content );
|
| 1848 |
-
$line =
|
| 1849 |
}
|
| 1850 |
-
$this->setProperty( $propname, rtrim( $line, "\x00..\x1F" ), $
|
| 1851 |
} // end - foreach( $this->unparsed.. .
|
| 1852 |
} // end - if( is_array( $this->unparsed.. .
|
| 1853 |
unset( $unparsedtext, $rows, $this->unparsed, $proprows );
|
|
@@ -2141,13 +2008,13 @@ class calendarComponent {
|
|
| 2141 |
* set calendar component property action
|
| 2142 |
*
|
| 2143 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2144 |
-
* @since 2.
|
| 2145 |
* @param string $value "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE"
|
| 2146 |
* @param mixed $params
|
| 2147 |
* @return bool
|
| 2148 |
*/
|
| 2149 |
function setAction( $value, $params=FALSE ) {
|
| 2150 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2151 |
$this->action = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2152 |
return TRUE;
|
| 2153 |
}
|
|
@@ -2190,14 +2057,14 @@ class calendarComponent {
|
|
| 2190 |
* set calendar component property attach
|
| 2191 |
*
|
| 2192 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2193 |
-
* @since 2.
|
| 2194 |
* @param string $value
|
| 2195 |
* @param array $params, optional
|
| 2196 |
* @param integer $index, optional
|
| 2197 |
* @return bool
|
| 2198 |
*/
|
| 2199 |
function setAttach( $value, $params=FALSE, $index=FALSE ) {
|
| 2200 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2201 |
iCalUtilityFunctions::_setMval( $this->attach, $value, $params, FALSE, $index );
|
| 2202 |
return TRUE;
|
| 2203 |
}
|
|
@@ -2295,14 +2162,14 @@ class calendarComponent {
|
|
| 2295 |
* set calendar component property attach
|
| 2296 |
*
|
| 2297 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2298 |
-
* @since 2.
|
| 2299 |
* @param string $value
|
| 2300 |
* @param array $params, optional
|
| 2301 |
* @param integer $index, optional
|
| 2302 |
* @return bool
|
| 2303 |
*/
|
| 2304 |
function setAttendee( $value, $params=FALSE, $index=FALSE ) {
|
| 2305 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2306 |
// ftp://, http://, mailto:, file://, gopher://, news:, nntp://, telnet://, wais://, prospero:// may exist.. . also in params
|
| 2307 |
if( !empty( $value )) {
|
| 2308 |
if( FALSE === ( $pos = strpos( substr( $value, 0, 9 ), ':' )))
|
|
@@ -2314,8 +2181,10 @@ class calendarComponent {
|
|
| 2314 |
$params2 = array();
|
| 2315 |
if( is_array($params )) {
|
| 2316 |
$optarrays = array();
|
|
|
|
| 2317 |
foreach( $params as $optparamlabel => $optparamvalue ) {
|
| 2318 |
-
$optparamlabel
|
|
|
|
| 2319 |
switch( $optparamlabel ) {
|
| 2320 |
case 'MEMBER':
|
| 2321 |
case 'DELEGATED-TO':
|
|
@@ -2373,7 +2242,7 @@ class calendarComponent {
|
|
| 2373 |
* creates formatted output for calendar component property categories
|
| 2374 |
*
|
| 2375 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2376 |
-
* @since 2.
|
| 2377 |
* @return string
|
| 2378 |
*/
|
| 2379 |
function createCategories() {
|
|
@@ -2388,11 +2257,11 @@ class calendarComponent {
|
|
| 2388 |
$attributes = $this->_createParams( $category['params'], array( 'LANGUAGE' ));
|
| 2389 |
if( is_array( $category['value'] )) {
|
| 2390 |
foreach( $category['value'] as $cix => $categoryPart )
|
| 2391 |
-
$category['value'][$cix] =
|
| 2392 |
$content = implode( ',', $category['value'] );
|
| 2393 |
}
|
| 2394 |
else
|
| 2395 |
-
$content =
|
| 2396 |
$output .= $this->_createElement( 'CATEGORIES', $attributes, $content );
|
| 2397 |
}
|
| 2398 |
return $output;
|
|
@@ -2401,14 +2270,14 @@ class calendarComponent {
|
|
| 2401 |
* set calendar component property categories
|
| 2402 |
*
|
| 2403 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2404 |
-
* @since 2.
|
| 2405 |
* @param mixed $value
|
| 2406 |
* @param array $params, optional
|
| 2407 |
* @param integer $index, optional
|
| 2408 |
* @return bool
|
| 2409 |
*/
|
| 2410 |
function setCategories( $value, $params=FALSE, $index=FALSE ) {
|
| 2411 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2412 |
iCalUtilityFunctions::_setMval( $this->categories, $value, $params, FALSE, $index );
|
| 2413 |
return TRUE;
|
| 2414 |
}
|
|
@@ -2434,13 +2303,13 @@ class calendarComponent {
|
|
| 2434 |
* set calendar component property class
|
| 2435 |
*
|
| 2436 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2437 |
-
* @since 2.
|
| 2438 |
* @param string $value "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token / x-name
|
| 2439 |
* @param array $params optional
|
| 2440 |
* @return bool
|
| 2441 |
*/
|
| 2442 |
function setClass( $value, $params=FALSE ) {
|
| 2443 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2444 |
$this->class = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2445 |
return TRUE;
|
| 2446 |
}
|
|
@@ -2452,7 +2321,7 @@ class calendarComponent {
|
|
| 2452 |
* creates formatted output for calendar component property comment
|
| 2453 |
*
|
| 2454 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2455 |
-
* @since 2.
|
| 2456 |
* @return string
|
| 2457 |
*/
|
| 2458 |
function createComment() {
|
|
@@ -2464,7 +2333,7 @@ class calendarComponent {
|
|
| 2464 |
continue;
|
| 2465 |
}
|
| 2466 |
$attributes = $this->_createParams( $commentPart['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2467 |
-
$content =
|
| 2468 |
$output .= $this->_createElement( 'COMMENT', $attributes, $content );
|
| 2469 |
}
|
| 2470 |
return $output;
|
|
@@ -2473,14 +2342,14 @@ class calendarComponent {
|
|
| 2473 |
* set calendar component property comment
|
| 2474 |
*
|
| 2475 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2476 |
-
* @since 2.
|
| 2477 |
* @param string $value
|
| 2478 |
* @param array $params, optional
|
| 2479 |
* @param integer $index, optional
|
| 2480 |
* @return bool
|
| 2481 |
*/
|
| 2482 |
function setComment( $value, $params=FALSE, $index=FALSE ) {
|
| 2483 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2484 |
iCalUtilityFunctions::_setMval( $this->comment, $value, $params, FALSE, $index );
|
| 2485 |
return TRUE;
|
| 2486 |
}
|
|
@@ -2514,7 +2383,7 @@ class calendarComponent {
|
|
| 2514 |
* set calendar component property completed
|
| 2515 |
*
|
| 2516 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2517 |
-
* @since 2.
|
| 2518 |
* @param mixed $year
|
| 2519 |
* @param mixed $month optional
|
| 2520 |
* @param int $day optional
|
|
@@ -2527,7 +2396,7 @@ class calendarComponent {
|
|
| 2527 |
function setCompleted( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2528 |
if( empty( $year )) {
|
| 2529 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2530 |
-
$this->completed = array( 'value' =>
|
| 2531 |
return TRUE;
|
| 2532 |
}
|
| 2533 |
else
|
|
@@ -2544,7 +2413,7 @@ class calendarComponent {
|
|
| 2544 |
* creates formatted output for calendar component property contact
|
| 2545 |
*
|
| 2546 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2547 |
-
* @since 2.
|
| 2548 |
* @return string
|
| 2549 |
*/
|
| 2550 |
function createContact() {
|
|
@@ -2553,7 +2422,7 @@ class calendarComponent {
|
|
| 2553 |
foreach( $this->contact as $contact ) {
|
| 2554 |
if( !empty( $contact['value'] )) {
|
| 2555 |
$attributes = $this->_createParams( $contact['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2556 |
-
$content =
|
| 2557 |
$output .= $this->_createElement( 'CONTACT', $attributes, $content );
|
| 2558 |
}
|
| 2559 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'CONTACT' );
|
|
@@ -2564,14 +2433,14 @@ class calendarComponent {
|
|
| 2564 |
* set calendar component property contact
|
| 2565 |
*
|
| 2566 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2567 |
-
* @since 2.
|
| 2568 |
* @param string $value
|
| 2569 |
* @param array $params, optional
|
| 2570 |
* @param integer $index, optional
|
| 2571 |
* @return bool
|
| 2572 |
*/
|
| 2573 |
function setContact( $value, $params=FALSE, $index=FALSE ) {
|
| 2574 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2575 |
iCalUtilityFunctions::_setMval( $this->contact, $value, $params, FALSE, $index );
|
| 2576 |
return TRUE;
|
| 2577 |
}
|
|
@@ -2596,7 +2465,7 @@ class calendarComponent {
|
|
| 2596 |
* set calendar component property created
|
| 2597 |
*
|
| 2598 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2599 |
-
* @since 2.
|
| 2600 |
* @param mixed $year optional
|
| 2601 |
* @param mixed $month optional
|
| 2602 |
* @param int $day optional
|
|
@@ -2607,9 +2476,8 @@ class calendarComponent {
|
|
| 2607 |
* @return bool
|
| 2608 |
*/
|
| 2609 |
function setCreated( $year=FALSE, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2610 |
-
if( !isset( $year ))
|
| 2611 |
-
$year =
|
| 2612 |
-
}
|
| 2613 |
$this->created = iCalUtilityFunctions::_setDate2( $year, $month, $day, $hour, $min, $sec, $params );
|
| 2614 |
return TRUE;
|
| 2615 |
}
|
|
@@ -2621,7 +2489,7 @@ class calendarComponent {
|
|
| 2621 |
* creates formatted output for calendar component property description
|
| 2622 |
*
|
| 2623 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2624 |
-
* @since 2.
|
| 2625 |
* @return string
|
| 2626 |
*/
|
| 2627 |
function createDescription() {
|
|
@@ -2630,7 +2498,7 @@ class calendarComponent {
|
|
| 2630 |
foreach( $this->description as $description ) {
|
| 2631 |
if( !empty( $description['value'] )) {
|
| 2632 |
$attributes = $this->_createParams( $description['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2633 |
-
$content =
|
| 2634 |
$output .= $this->_createElement( 'DESCRIPTION', $attributes, $content );
|
| 2635 |
}
|
| 2636 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'DESCRIPTION' );
|
|
@@ -2641,14 +2509,14 @@ class calendarComponent {
|
|
| 2641 |
* set calendar component property description
|
| 2642 |
*
|
| 2643 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2644 |
-
* @since 2.
|
| 2645 |
* @param string $value
|
| 2646 |
* @param array $params, optional
|
| 2647 |
* @param integer $index, optional
|
| 2648 |
* @return bool
|
| 2649 |
*/
|
| 2650 |
function setDescription( $value, $params=FALSE, $index=FALSE ) {
|
| 2651 |
-
if( empty( $value )) { if( $this->getConfig( 'allowEmpty' )) $value =
|
| 2652 |
if( 'vjournal' != $this->objName )
|
| 2653 |
$index = 1;
|
| 2654 |
iCalUtilityFunctions::_setMval( $this->description, $value, $params, FALSE, $index );
|
|
@@ -2685,7 +2553,7 @@ class calendarComponent {
|
|
| 2685 |
* set calendar component property dtend
|
| 2686 |
*
|
| 2687 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2688 |
-
* @since 2.
|
| 2689 |
* @param mixed $year
|
| 2690 |
* @param mixed $month optional
|
| 2691 |
* @param int $day optional
|
|
@@ -2699,7 +2567,7 @@ class calendarComponent {
|
|
| 2699 |
function setDtend( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2700 |
if( empty( $year )) {
|
| 2701 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2702 |
-
$this->dtend = array( 'value' =>
|
| 2703 |
return TRUE;
|
| 2704 |
}
|
| 2705 |
else
|
|
@@ -2735,11 +2603,11 @@ class calendarComponent {
|
|
| 2735 |
* computes datestamp for calendar component object instance dtstamp
|
| 2736 |
*
|
| 2737 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2738 |
-
* @since 2.
|
| 2739 |
* @return void
|
| 2740 |
*/
|
| 2741 |
function _makeDtstamp() {
|
| 2742 |
-
$d =
|
| 2743 |
$date = explode( '-', $d );
|
| 2744 |
$this->dtstamp['value'] = array( 'year' => $date[0], 'month' => $date[1], 'day' => $date[2], 'hour' => $date[3], 'min' => $date[4], 'sec' => $date[5], 'tz' => 'Z' );
|
| 2745 |
$this->dtstamp['params'] = null;
|
|
@@ -2799,7 +2667,7 @@ class calendarComponent {
|
|
| 2799 |
* set calendar component property dtstart
|
| 2800 |
*
|
| 2801 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2802 |
-
* @since 2.
|
| 2803 |
* @param mixed $year
|
| 2804 |
* @param mixed $month optional
|
| 2805 |
* @param int $day optional
|
|
@@ -2813,7 +2681,7 @@ class calendarComponent {
|
|
| 2813 |
function setDtstart( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2814 |
if( empty( $year )) {
|
| 2815 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2816 |
-
$this->dtstart = array( 'value' =>
|
| 2817 |
return TRUE;
|
| 2818 |
}
|
| 2819 |
else
|
|
@@ -2855,7 +2723,7 @@ class calendarComponent {
|
|
| 2855 |
* set calendar component property due
|
| 2856 |
*
|
| 2857 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2858 |
-
* @since 2.
|
| 2859 |
* @param mixed $year
|
| 2860 |
* @param mixed $month optional
|
| 2861 |
* @param int $day optional
|
|
@@ -2868,7 +2736,7 @@ class calendarComponent {
|
|
| 2868 |
function setDue( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2869 |
if( empty( $year )) {
|
| 2870 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2871 |
-
$this->due = array( 'value' =>
|
| 2872 |
return TRUE;
|
| 2873 |
}
|
| 2874 |
else
|
|
@@ -2885,7 +2753,7 @@ class calendarComponent {
|
|
| 2885 |
* creates formatted output for calendar component property duration
|
| 2886 |
*
|
| 2887 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2888 |
-
* @since 2.
|
| 2889 |
* @return string
|
| 2890 |
*/
|
| 2891 |
function createDuration() {
|
|
@@ -2896,7 +2764,7 @@ class calendarComponent {
|
|
| 2896 |
!isset( $this->duration['value']['min'] ) &&
|
| 2897 |
!isset( $this->duration['value']['sec'] ))
|
| 2898 |
if( $this->getConfig( 'allowEmpty' ))
|
| 2899 |
-
return $this->_createElement( 'DURATION'
|
| 2900 |
else return FALSE;
|
| 2901 |
$attributes = $this->_createParams( $this->duration['params'] );
|
| 2902 |
return $this->_createElement( 'DURATION', $attributes, iCalUtilityFunctions::_duration2str( $this->duration['value'] ));
|
|
@@ -2905,7 +2773,7 @@ class calendarComponent {
|
|
| 2905 |
* set calendar component property duration
|
| 2906 |
*
|
| 2907 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2908 |
-
* @since 2.
|
| 2909 |
* @param mixed $week
|
| 2910 |
* @param mixed $day optional
|
| 2911 |
* @param int $hour optional
|
|
@@ -2915,7 +2783,12 @@ class calendarComponent {
|
|
| 2915 |
* @return bool
|
| 2916 |
*/
|
| 2917 |
function setDuration( $week, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2918 |
-
if( empty( $week )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2919 |
if( is_array( $week ) && ( 1 <= count( $week )))
|
| 2920 |
$this->duration = array( 'value' => iCalUtilityFunctions::_duration2arr( $week ), 'params' => iCalUtilityFunctions::_setParams( $day ));
|
| 2921 |
elseif( is_string( $week ) && ( 3 <= strlen( trim( $week )))) {
|
|
@@ -2924,10 +2797,9 @@ class calendarComponent {
|
|
| 2924 |
$week = substr( $week, 1 );
|
| 2925 |
$this->duration = array( 'value' => iCalUtilityFunctions::_durationStr2arr( $week ), 'params' => iCalUtilityFunctions::_setParams( $day ));
|
| 2926 |
}
|
| 2927 |
-
elseif( empty( $week ) && empty( $day ) && empty( $hour ) && empty( $min ) && empty( $sec ))
|
| 2928 |
-
return FALSE;
|
| 2929 |
else
|
| 2930 |
-
$this->duration = array( 'value' => iCalUtilityFunctions::_duration2arr( array( $week, $day, $hour,
|
|
|
|
| 2931 |
return TRUE;
|
| 2932 |
}
|
| 2933 |
/*********************************************************************************/
|
|
@@ -2938,17 +2810,26 @@ class calendarComponent {
|
|
| 2938 |
* creates formatted output for calendar component property exdate
|
| 2939 |
*
|
| 2940 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2941 |
-
* @since 2.
|
| 2942 |
* @return string
|
| 2943 |
*/
|
| 2944 |
function createExdate() {
|
| 2945 |
if( empty( $this->exdate )) return FALSE;
|
| 2946 |
-
$output
|
| 2947 |
-
|
|
|
|
| 2948 |
if( empty( $theExdate['value'] )) {
|
| 2949 |
-
if( $this->getConfig( 'allowEmpty' ))
|
|
|
|
| 2950 |
continue;
|
| 2951 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2952 |
$content = $attributes = null;
|
| 2953 |
foreach( $theExdate['value'] as $eix => $exdatePart ) {
|
| 2954 |
$parno = count( $exdatePart );
|
|
@@ -2967,19 +2848,19 @@ class calendarComponent {
|
|
| 2967 |
}
|
| 2968 |
else
|
| 2969 |
$formatted = str_replace( 'Z', '', $formatted );
|
| 2970 |
-
}
|
| 2971 |
$content .= ( 0 < $eix ) ? ','.$formatted : $formatted;
|
| 2972 |
-
}
|
| 2973 |
$attributes .= $this->_createParams( $theExdate['params'] );
|
| 2974 |
$output .= $this->_createElement( 'EXDATE', $attributes, $content );
|
| 2975 |
-
}
|
| 2976 |
return $output;
|
| 2977 |
}
|
| 2978 |
/**
|
| 2979 |
* set calendar component property exdate
|
| 2980 |
*
|
| 2981 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2982 |
-
* @since 2.
|
| 2983 |
* @param array exdates
|
| 2984 |
* @param array $params, optional
|
| 2985 |
* @param integer $index, optional
|
|
@@ -2988,7 +2869,7 @@ class calendarComponent {
|
|
| 2988 |
function setExdate( $exdates, $params=FALSE, $index=FALSE ) {
|
| 2989 |
if( empty( $exdates )) {
|
| 2990 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2991 |
-
iCalUtilityFunctions::_setMval( $this->exdate,
|
| 2992 |
return TRUE;
|
| 2993 |
}
|
| 2994 |
else
|
|
@@ -3067,14 +2948,14 @@ class calendarComponent {
|
|
| 3067 |
* set calendar component property exdate
|
| 3068 |
*
|
| 3069 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3070 |
-
* @since 2.
|
| 3071 |
* @param array $exruleset
|
| 3072 |
* @param array $params, optional
|
| 3073 |
* @param integer $index, optional
|
| 3074 |
* @return bool
|
| 3075 |
*/
|
| 3076 |
function setExrule( $exruleset, $params=FALSE, $index=FALSE ) {
|
| 3077 |
-
if( empty( $exruleset )) if( $this->getConfig( 'allowEmpty' )) $exruleset =
|
| 3078 |
iCalUtilityFunctions::_setMval( $this->exrule, iCalUtilityFunctions::_setRexrule( $exruleset ), $params, FALSE, $index );
|
| 3079 |
return TRUE;
|
| 3080 |
}
|
|
@@ -3086,7 +2967,7 @@ class calendarComponent {
|
|
| 3086 |
* creates formatted output for calendar component property freebusy
|
| 3087 |
*
|
| 3088 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3089 |
-
* @since 2.
|
| 3090 |
* @return string
|
| 3091 |
*/
|
| 3092 |
function createFreebusy() {
|
|
@@ -3108,6 +2989,8 @@ class calendarComponent {
|
|
| 3108 |
$attributes .= $this->_createParams( $freebusyPart['params'] );
|
| 3109 |
$fno = 1;
|
| 3110 |
$cnt = count( $freebusyPart['value']);
|
|
|
|
|
|
|
| 3111 |
foreach( $freebusyPart['value'] as $periodix => $freebusyPeriod ) {
|
| 3112 |
$formatted = iCalUtilityFunctions::_date2strdate( $freebusyPeriod[0] );
|
| 3113 |
$content .= $formatted;
|
|
@@ -3138,7 +3021,7 @@ class calendarComponent {
|
|
| 3138 |
* set calendar component property freebusy
|
| 3139 |
*
|
| 3140 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3141 |
-
* @since 2.
|
| 3142 |
* @param string $fbType
|
| 3143 |
* @param array $fbValues
|
| 3144 |
* @param array $params, optional
|
|
@@ -3148,7 +3031,7 @@ class calendarComponent {
|
|
| 3148 |
function setFreebusy( $fbType, $fbValues, $params=FALSE, $index=FALSE ) {
|
| 3149 |
if( empty( $fbValues )) {
|
| 3150 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3151 |
-
iCalUtilityFunctions::_setMval( $this->freebusy,
|
| 3152 |
return TRUE;
|
| 3153 |
}
|
| 3154 |
else
|
|
@@ -3204,48 +3087,36 @@ class calendarComponent {
|
|
| 3204 |
* creates formatted output for calendar component property geo
|
| 3205 |
*
|
| 3206 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3207 |
-
* @since 2.
|
| 3208 |
* @return string
|
| 3209 |
*/
|
| 3210 |
function createGeo() {
|
| 3211 |
if( empty( $this->geo )) return FALSE;
|
| 3212 |
if( empty( $this->geo['value'] ))
|
| 3213 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'GEO' ) : FALSE;
|
| 3214 |
-
$
|
| 3215 |
-
|
| 3216 |
-
|
| 3217 |
-
else
|
| 3218 |
-
$sign = ( 0.0 > $this->geo['value']['latitude'] ) ? '-' : '';
|
| 3219 |
-
$content = $sign.sprintf( "%09.6f", abs( $this->geo['value']['latitude'] )); // sprintf && lpad && float && sign !"#¤%&/(
|
| 3220 |
-
$content = rtrim( rtrim( $content, '0' ), '.' );
|
| 3221 |
-
if( 0.0 < $this->geo['value']['longitude'] )
|
| 3222 |
-
$sign = '+';
|
| 3223 |
-
else
|
| 3224 |
-
$sign = ( 0.0 > $this->geo['value']['longitude'] ) ? '-' : '';
|
| 3225 |
-
$content .= ';'.$sign.sprintf( '%8.6f', abs( $this->geo['value']['longitude'] )); // sprintf && lpad && float && sign !"#¤%&/(
|
| 3226 |
-
$content = rtrim( rtrim( $content, '0' ), '.' );
|
| 3227 |
-
return $this->_createElement( 'GEO', $attributes, $content );
|
| 3228 |
}
|
| 3229 |
/**
|
| 3230 |
* set calendar component property geo
|
| 3231 |
*
|
| 3232 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3233 |
-
* @since 2.
|
| 3234 |
-
* @param
|
| 3235 |
-
* @param
|
| 3236 |
* @param array $params optional
|
| 3237 |
* @return bool
|
| 3238 |
*/
|
| 3239 |
function setGeo( $latitude, $longitude, $params=FALSE ) {
|
| 3240 |
-
if(
|
| 3241 |
-
( !empty( $longitude ) || ( 0 == $longitude ))) {
|
| 3242 |
if( !is_array( $this->geo )) $this->geo = array();
|
| 3243 |
-
$this->geo['value']['latitude'] = (
|
| 3244 |
-
$this->geo['value']['longitude'] = (
|
| 3245 |
$this->geo['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 3246 |
}
|
| 3247 |
elseif( $this->getConfig( 'allowEmpty' ))
|
| 3248 |
-
$this->geo = array( 'value' =>
|
| 3249 |
else
|
| 3250 |
return FALSE;
|
| 3251 |
return TRUE;
|
|
@@ -3271,7 +3142,7 @@ class calendarComponent {
|
|
| 3271 |
* set calendar component property completed
|
| 3272 |
*
|
| 3273 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3274 |
-
* @since 2.
|
| 3275 |
* @param mixed $year optional
|
| 3276 |
* @param mixed $month optional
|
| 3277 |
* @param int $day optional
|
|
@@ -3283,7 +3154,7 @@ class calendarComponent {
|
|
| 3283 |
*/
|
| 3284 |
function setLastModified( $year=FALSE, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 3285 |
if( empty( $year ))
|
| 3286 |
-
$year =
|
| 3287 |
$this->lastmodified = iCalUtilityFunctions::_setDate2( $year, $month, $day, $hour, $min, $sec, $params );
|
| 3288 |
return TRUE;
|
| 3289 |
}
|
|
@@ -3295,7 +3166,7 @@ class calendarComponent {
|
|
| 3295 |
* creates formatted output for calendar component property location
|
| 3296 |
*
|
| 3297 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3298 |
-
* @since 2.
|
| 3299 |
* @return string
|
| 3300 |
*/
|
| 3301 |
function createLocation() {
|
|
@@ -3303,20 +3174,20 @@ class calendarComponent {
|
|
| 3303 |
if( empty( $this->location['value'] ))
|
| 3304 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'LOCATION' ) : FALSE;
|
| 3305 |
$attributes = $this->_createParams( $this->location['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3306 |
-
$content =
|
| 3307 |
return $this->_createElement( 'LOCATION', $attributes, $content );
|
| 3308 |
}
|
| 3309 |
/**
|
| 3310 |
* set calendar component property location
|
| 3311 |
'
|
| 3312 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3313 |
-
* @since 2.
|
| 3314 |
* @param string $value
|
| 3315 |
* @param array params optional
|
| 3316 |
* @return bool
|
| 3317 |
*/
|
| 3318 |
function setLocation( $value, $params=FALSE ) {
|
| 3319 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3320 |
$this->location = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3321 |
return TRUE;
|
| 3322 |
}
|
|
@@ -3343,13 +3214,13 @@ class calendarComponent {
|
|
| 3343 |
* set calendar component property organizer
|
| 3344 |
*
|
| 3345 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3346 |
-
* @since 2.
|
| 3347 |
* @param string $value
|
| 3348 |
* @param array params optional
|
| 3349 |
* @return bool
|
| 3350 |
*/
|
| 3351 |
function setOrganizer( $value, $params=FALSE ) {
|
| 3352 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3353 |
if( !empty( $value )) {
|
| 3354 |
if( FALSE === ( $pos = strpos( substr( $value, 0, 9 ), ':' )))
|
| 3355 |
$value = 'MAILTO:'.$value;
|
|
@@ -3388,13 +3259,13 @@ class calendarComponent {
|
|
| 3388 |
* set calendar component property percent-complete
|
| 3389 |
*
|
| 3390 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3391 |
-
* @since 2.
|
| 3392 |
* @param int $value
|
| 3393 |
* @param array $params optional
|
| 3394 |
* @return bool
|
| 3395 |
*/
|
| 3396 |
function setPercentComplete( $value, $params=FALSE ) {
|
| 3397 |
-
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3398 |
$this->percentcomplete = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3399 |
return TRUE;
|
| 3400 |
}
|
|
@@ -3420,13 +3291,13 @@ class calendarComponent {
|
|
| 3420 |
* set calendar component property priority
|
| 3421 |
*
|
| 3422 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3423 |
-
* @since 2.
|
| 3424 |
* @param int $value
|
| 3425 |
* @param array $params optional
|
| 3426 |
* @return bool
|
| 3427 |
*/
|
| 3428 |
function setPriority( $value, $params=FALSE ) {
|
| 3429 |
-
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3430 |
$this->priority = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3431 |
return TRUE;
|
| 3432 |
}
|
|
@@ -3438,15 +3309,14 @@ class calendarComponent {
|
|
| 3438 |
* creates formatted output for calendar component property rdate
|
| 3439 |
*
|
| 3440 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3441 |
-
* @since 2.
|
| 3442 |
* @return string
|
| 3443 |
*/
|
| 3444 |
function createRdate() {
|
| 3445 |
if( empty( $this->rdate )) return FALSE;
|
| 3446 |
$utctime = ( in_array( $this->objName, array( 'vtimezone', 'standard', 'daylight' ))) ? TRUE : FALSE;
|
| 3447 |
$output = null;
|
| 3448 |
-
|
| 3449 |
-
unset( $this->rdate['params']['TZID'] );
|
| 3450 |
foreach( $this->rdate as $rpix => $theRdate ) {
|
| 3451 |
if( empty( $theRdate['value'] )) {
|
| 3452 |
if( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'RDATE' );
|
|
@@ -3454,6 +3324,13 @@ class calendarComponent {
|
|
| 3454 |
}
|
| 3455 |
if( $utctime )
|
| 3456 |
unset( $theRdate['params']['TZID'] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3457 |
$attributes = $this->_createParams( $theRdate['params'] );
|
| 3458 |
$cnt = count( $theRdate['value'] );
|
| 3459 |
$content = null;
|
|
@@ -3515,7 +3392,7 @@ class calendarComponent {
|
|
| 3515 |
* set calendar component property rdate
|
| 3516 |
*
|
| 3517 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3518 |
-
* @since 2.
|
| 3519 |
* @param array $rdates
|
| 3520 |
* @param array $params, optional
|
| 3521 |
* @param integer $index, optional
|
|
@@ -3524,7 +3401,7 @@ class calendarComponent {
|
|
| 3524 |
function setRdate( $rdates, $params=FALSE, $index=FALSE ) {
|
| 3525 |
if( empty( $rdates )) {
|
| 3526 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3527 |
-
iCalUtilityFunctions::_setMval( $this->rdate,
|
| 3528 |
return TRUE;
|
| 3529 |
}
|
| 3530 |
else
|
|
@@ -3685,7 +3562,7 @@ class calendarComponent {
|
|
| 3685 |
* set calendar component property recurrence-id
|
| 3686 |
*
|
| 3687 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3688 |
-
* @since 2.
|
| 3689 |
* @param mixed $year
|
| 3690 |
* @param mixed $month optional
|
| 3691 |
* @param int $day optional
|
|
@@ -3698,7 +3575,7 @@ class calendarComponent {
|
|
| 3698 |
function setRecurrenceid( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 3699 |
if( empty( $year )) {
|
| 3700 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3701 |
-
$this->recurrenceid = array( 'value' =>
|
| 3702 |
return TRUE;
|
| 3703 |
}
|
| 3704 |
else
|
|
@@ -3715,7 +3592,7 @@ class calendarComponent {
|
|
| 3715 |
* creates formatted output for calendar component property related-to
|
| 3716 |
*
|
| 3717 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3718 |
-
* @since 2.
|
| 3719 |
* @return string
|
| 3720 |
*/
|
| 3721 |
function createRelatedTo() {
|
|
@@ -3723,9 +3600,9 @@ class calendarComponent {
|
|
| 3723 |
$output = null;
|
| 3724 |
foreach( $this->relatedto as $relation ) {
|
| 3725 |
if( !empty( $relation['value'] ))
|
| 3726 |
-
$output .= $this->_createElement( 'RELATED-TO', $this->_createParams( $relation['params'] ),
|
| 3727 |
elseif( $this->getConfig( 'allowEmpty' ))
|
| 3728 |
-
$output .= $this->_createElement( 'RELATED-TO'
|
| 3729 |
}
|
| 3730 |
return $output;
|
| 3731 |
}
|
|
@@ -3733,14 +3610,14 @@ class calendarComponent {
|
|
| 3733 |
* set calendar component property related-to
|
| 3734 |
*
|
| 3735 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3736 |
-
* @since 2.
|
| 3737 |
* @param float $relid
|
| 3738 |
* @param array $params, optional
|
| 3739 |
* @param index $index, optional
|
| 3740 |
* @return bool
|
| 3741 |
*/
|
| 3742 |
function setRelatedTo( $value, $params=FALSE, $index=FALSE ) {
|
| 3743 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3744 |
iCalUtilityFunctions::_existRem( $params, 'RELTYPE', 'PARENT', TRUE ); // remove default
|
| 3745 |
iCalUtilityFunctions::_setMval( $this->relatedto, $value, $params, FALSE, $index );
|
| 3746 |
return TRUE;
|
|
@@ -3767,13 +3644,13 @@ class calendarComponent {
|
|
| 3767 |
* set calendar component property repeat
|
| 3768 |
*
|
| 3769 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3770 |
-
* @since 2.
|
| 3771 |
* @param string $value
|
| 3772 |
* @param array $params optional
|
| 3773 |
* @return void
|
| 3774 |
*/
|
| 3775 |
function setRepeat( $value, $params=FALSE ) {
|
| 3776 |
-
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3777 |
$this->repeat = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3778 |
return TRUE;
|
| 3779 |
}
|
|
@@ -3784,7 +3661,7 @@ class calendarComponent {
|
|
| 3784 |
/**
|
| 3785 |
* creates formatted output for calendar component property request-status
|
| 3786 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3787 |
-
* @since 2.
|
| 3788 |
* @return string
|
| 3789 |
*/
|
| 3790 |
function createRequestStatus() {
|
|
@@ -3797,9 +3674,9 @@ class calendarComponent {
|
|
| 3797 |
}
|
| 3798 |
$attributes = $this->_createParams( $rstat['params'], array( 'LANGUAGE' ));
|
| 3799 |
$content = number_format( (float) $rstat['value']['statcode'], 2, '.', '');
|
| 3800 |
-
$content .= ';'
|
| 3801 |
if( isset( $rstat['value']['extdata'] ))
|
| 3802 |
-
$content .= ';'
|
| 3803 |
$output .= $this->_createElement( 'REQUEST-STATUS', $attributes, $content );
|
| 3804 |
}
|
| 3805 |
return $output;
|
|
@@ -3808,7 +3685,7 @@ class calendarComponent {
|
|
| 3808 |
* set calendar component property request-status
|
| 3809 |
*
|
| 3810 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3811 |
-
* @since 2.
|
| 3812 |
* @param float $statcode
|
| 3813 |
* @param string $text
|
| 3814 |
* @param string $extdata, optional
|
|
@@ -3817,7 +3694,7 @@ class calendarComponent {
|
|
| 3817 |
* @return bool
|
| 3818 |
*/
|
| 3819 |
function setRequestStatus( $statcode, $text, $extdata=FALSE, $params=FALSE, $index=FALSE ) {
|
| 3820 |
-
if( empty( $statcode ) || empty( $text )) if( $this->getConfig( 'allowEmpty' )) $statcode = $text =
|
| 3821 |
$input = array( 'statcode' => $statcode, 'text' => $text );
|
| 3822 |
if( $extdata )
|
| 3823 |
$input['extdata'] = $extdata;
|
|
@@ -3832,7 +3709,7 @@ class calendarComponent {
|
|
| 3832 |
* creates formatted output for calendar component property resources
|
| 3833 |
*
|
| 3834 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3835 |
-
* @since 2.
|
| 3836 |
* @return string
|
| 3837 |
*/
|
| 3838 |
function createResources() {
|
|
@@ -3846,11 +3723,11 @@ class calendarComponent {
|
|
| 3846 |
$attributes = $this->_createParams( $resource['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3847 |
if( is_array( $resource['value'] )) {
|
| 3848 |
foreach( $resource['value'] as $rix => $resourcePart )
|
| 3849 |
-
$resource['value'][$rix] =
|
| 3850 |
$content = implode( ',', $resource['value'] );
|
| 3851 |
}
|
| 3852 |
else
|
| 3853 |
-
$content =
|
| 3854 |
$output .= $this->_createElement( 'RESOURCES', $attributes, $content );
|
| 3855 |
}
|
| 3856 |
return $output;
|
|
@@ -3859,14 +3736,14 @@ class calendarComponent {
|
|
| 3859 |
* set calendar component property recources
|
| 3860 |
*
|
| 3861 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3862 |
-
* @since 2.
|
| 3863 |
* @param mixed $value
|
| 3864 |
* @param array $params, optional
|
| 3865 |
* @param integer $index, optional
|
| 3866 |
* @return bool
|
| 3867 |
*/
|
| 3868 |
function setResources( $value, $params=FALSE, $index=FALSE ) {
|
| 3869 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3870 |
iCalUtilityFunctions::_setMval( $this->resources, $value, $params, FALSE, $index );
|
| 3871 |
return TRUE;
|
| 3872 |
}
|
|
@@ -3889,14 +3766,14 @@ class calendarComponent {
|
|
| 3889 |
* set calendar component property rrule
|
| 3890 |
*
|
| 3891 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3892 |
-
* @since 2.
|
| 3893 |
* @param array $rruleset
|
| 3894 |
* @param array $params, optional
|
| 3895 |
* @param integer $index, optional
|
| 3896 |
* @return void
|
| 3897 |
*/
|
| 3898 |
function setRrule( $rruleset, $params=FALSE, $index=FALSE ) {
|
| 3899 |
-
if( empty( $rruleset )) if( $this->getConfig( 'allowEmpty' )) $rruleset =
|
| 3900 |
iCalUtilityFunctions::_setMval( $this->rrule, iCalUtilityFunctions::_setRexrule( $rruleset ), $params, FALSE, $index );
|
| 3901 |
return TRUE;
|
| 3902 |
}
|
|
@@ -3954,13 +3831,13 @@ class calendarComponent {
|
|
| 3954 |
* set calendar component property status
|
| 3955 |
*
|
| 3956 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3957 |
-
* @since 2.
|
| 3958 |
* @param string $value
|
| 3959 |
* @param array $params optional
|
| 3960 |
* @return bool
|
| 3961 |
*/
|
| 3962 |
function setStatus( $value, $params=FALSE ) {
|
| 3963 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3964 |
$this->status = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3965 |
return TRUE;
|
| 3966 |
}
|
|
@@ -3972,7 +3849,7 @@ class calendarComponent {
|
|
| 3972 |
* creates formatted output for calendar component property summary
|
| 3973 |
*
|
| 3974 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3975 |
-
* @since 2.
|
| 3976 |
* @return string
|
| 3977 |
*/
|
| 3978 |
function createSummary() {
|
|
@@ -3980,20 +3857,20 @@ class calendarComponent {
|
|
| 3980 |
if( empty( $this->summary['value'] ))
|
| 3981 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'SUMMARY' ) : FALSE;
|
| 3982 |
$attributes = $this->_createParams( $this->summary['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3983 |
-
$content =
|
| 3984 |
return $this->_createElement( 'SUMMARY', $attributes, $content );
|
| 3985 |
}
|
| 3986 |
/**
|
| 3987 |
* set calendar component property summary
|
| 3988 |
*
|
| 3989 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3990 |
-
* @since 2.
|
| 3991 |
* @param string $value
|
| 3992 |
* @param string $params optional
|
| 3993 |
* @return bool
|
| 3994 |
*/
|
| 3995 |
function setSummary( $value, $params=FALSE ) {
|
| 3996 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 3997 |
$this->summary = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3998 |
return TRUE;
|
| 3999 |
}
|
|
@@ -4019,13 +3896,13 @@ class calendarComponent {
|
|
| 4019 |
* set calendar component property transp
|
| 4020 |
*
|
| 4021 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4022 |
-
* @since 2.
|
| 4023 |
* @param string $value
|
| 4024 |
* @param string $params optional
|
| 4025 |
* @return bool
|
| 4026 |
*/
|
| 4027 |
function setTransp( $value, $params=FALSE ) {
|
| 4028 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4029 |
$this->transp = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4030 |
return TRUE;
|
| 4031 |
}
|
|
@@ -4063,7 +3940,7 @@ class calendarComponent {
|
|
| 4063 |
* set calendar component property trigger
|
| 4064 |
*
|
| 4065 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4066 |
-
* @since 2.
|
| 4067 |
* @param mixed $year
|
| 4068 |
* @param mixed $month optional
|
| 4069 |
* @param int $day optional
|
|
@@ -4077,9 +3954,9 @@ class calendarComponent {
|
|
| 4077 |
* @return bool
|
| 4078 |
*/
|
| 4079 |
function setTrigger( $year, $month=null, $day=null, $week=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $relatedStart=TRUE, $before=TRUE, $params=FALSE ) {
|
| 4080 |
-
if( empty( $year ) && empty( $month ) && empty( $day ) && empty( $week ) && empty( $hour ) && empty( $min ) && empty( $sec ))
|
| 4081 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 4082 |
-
$this->trigger = array( 'value' =>
|
| 4083 |
return TRUE;
|
| 4084 |
}
|
| 4085 |
else
|
|
@@ -4112,7 +3989,7 @@ class calendarComponent {
|
|
| 4112 |
}
|
| 4113 |
elseif(is_string( $year ) && ( is_array( $month ) || empty( $month ))) { // duration or date in a string
|
| 4114 |
$params = iCalUtilityFunctions::_setParams( $month );
|
| 4115 |
-
if( in_array( $year
|
| 4116 |
$relatedStart = ( isset( $params['RELATED'] ) && ( 'END' == strtoupper( $params['RELATED'] ))) ? FALSE : TRUE;
|
| 4117 |
$before = ( '-' == $year[0] ) ? TRUE : FALSE;
|
| 4118 |
if( 'P' != $year[0] )
|
|
@@ -4164,6 +4041,8 @@ class calendarComponent {
|
|
| 4164 |
$this->trigger['value']['sec'] = 0;
|
| 4165 |
$before = FALSE;
|
| 4166 |
}
|
|
|
|
|
|
|
| 4167 |
$relatedStart = ( FALSE !== $relatedStart ) ? TRUE : FALSE;
|
| 4168 |
$before = ( FALSE !== $before ) ? TRUE : FALSE;
|
| 4169 |
$this->trigger['value']['relatedStart'] = $relatedStart;
|
|
@@ -4180,7 +4059,7 @@ class calendarComponent {
|
|
| 4180 |
* creates formatted output for calendar component property tzid
|
| 4181 |
*
|
| 4182 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4183 |
-
* @since 2.
|
| 4184 |
* @return string
|
| 4185 |
*/
|
| 4186 |
function createTzid() {
|
|
@@ -4188,19 +4067,19 @@ class calendarComponent {
|
|
| 4188 |
if( empty( $this->tzid['value'] ))
|
| 4189 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'TZID' ) : FALSE;
|
| 4190 |
$attributes = $this->_createParams( $this->tzid['params'] );
|
| 4191 |
-
return $this->_createElement( 'TZID', $attributes,
|
| 4192 |
}
|
| 4193 |
/**
|
| 4194 |
* set calendar component property tzid
|
| 4195 |
*
|
| 4196 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4197 |
-
* @since 2.
|
| 4198 |
* @param string $value
|
| 4199 |
* @param array $params optional
|
| 4200 |
* @return bool
|
| 4201 |
*/
|
| 4202 |
function setTzid( $value, $params=FALSE ) {
|
| 4203 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4204 |
$this->tzid = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4205 |
return TRUE;
|
| 4206 |
}
|
|
@@ -4213,7 +4092,7 @@ class calendarComponent {
|
|
| 4213 |
* creates formatted output for calendar component property tzname
|
| 4214 |
*
|
| 4215 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4216 |
-
* @since 2.
|
| 4217 |
* @return string
|
| 4218 |
*/
|
| 4219 |
function createTzname() {
|
|
@@ -4222,7 +4101,7 @@ class calendarComponent {
|
|
| 4222 |
foreach( $this->tzname as $theName ) {
|
| 4223 |
if( !empty( $theName['value'] )) {
|
| 4224 |
$attributes = $this->_createParams( $theName['params'], array( 'LANGUAGE' ));
|
| 4225 |
-
$output .= $this->_createElement( 'TZNAME', $attributes,
|
| 4226 |
}
|
| 4227 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'TZNAME' );
|
| 4228 |
}
|
|
@@ -4232,14 +4111,14 @@ class calendarComponent {
|
|
| 4232 |
* set calendar component property tzname
|
| 4233 |
*
|
| 4234 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4235 |
-
* @since 2.
|
| 4236 |
* @param string $value
|
| 4237 |
* @param string $params, optional
|
| 4238 |
* @param integer $index, optional
|
| 4239 |
* @return bool
|
| 4240 |
*/
|
| 4241 |
function setTzname( $value, $params=FALSE, $index=FALSE ) {
|
| 4242 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4243 |
iCalUtilityFunctions::_setMval( $this->tzname, $value, $params, FALSE, $index );
|
| 4244 |
return TRUE;
|
| 4245 |
}
|
|
@@ -4265,13 +4144,13 @@ class calendarComponent {
|
|
| 4265 |
* set calendar component property tzoffsetfrom
|
| 4266 |
*
|
| 4267 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4268 |
-
* @since 2.
|
| 4269 |
* @param string $value
|
| 4270 |
* @param string $params optional
|
| 4271 |
* @return bool
|
| 4272 |
*/
|
| 4273 |
function setTzoffsetfrom( $value, $params=FALSE ) {
|
| 4274 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4275 |
$this->tzoffsetfrom = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4276 |
return TRUE;
|
| 4277 |
}
|
|
@@ -4297,13 +4176,13 @@ class calendarComponent {
|
|
| 4297 |
* set calendar component property tzoffsetto
|
| 4298 |
*
|
| 4299 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4300 |
-
* @since 2.
|
| 4301 |
* @param string $value
|
| 4302 |
* @param string $params optional
|
| 4303 |
* @return bool
|
| 4304 |
*/
|
| 4305 |
function setTzoffsetto( $value, $params=FALSE ) {
|
| 4306 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4307 |
$this->tzoffsetto = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4308 |
return TRUE;
|
| 4309 |
}
|
|
@@ -4329,13 +4208,13 @@ class calendarComponent {
|
|
| 4329 |
* set calendar component property tzurl
|
| 4330 |
*
|
| 4331 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4332 |
-
* @since 2.
|
| 4333 |
* @param string $value
|
| 4334 |
* @param string $params optional
|
| 4335 |
* @return boll
|
| 4336 |
*/
|
| 4337 |
function setTzurl( $value, $params=FALSE ) {
|
| 4338 |
-
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4339 |
$this->tzurl = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4340 |
return TRUE;
|
| 4341 |
}
|
|
@@ -4347,11 +4226,11 @@ class calendarComponent {
|
|
| 4347 |
* creates formatted output for calendar component property uid
|
| 4348 |
*
|
| 4349 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4350 |
-
* @since
|
| 4351 |
* @return string
|
| 4352 |
*/
|
| 4353 |
function createUid() {
|
| 4354 |
-
if(
|
| 4355 |
$this->_makeuid();
|
| 4356 |
$attributes = $this->_createParams( $this->uid['params'] );
|
| 4357 |
return $this->_createElement( 'UID', $attributes, $this->uid['value'] );
|
|
@@ -4380,13 +4259,13 @@ class calendarComponent {
|
|
| 4380 |
* set calendar component property uid
|
| 4381 |
*
|
| 4382 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4383 |
-
* @since 2.
|
| 4384 |
* @param string $value
|
| 4385 |
* @param string $params optional
|
| 4386 |
* @return bool
|
| 4387 |
*/
|
| 4388 |
function setUid( $value, $params=FALSE ) {
|
| 4389 |
-
if( empty( $value )) return FALSE; // no allowEmpty check here !!!!
|
| 4390 |
$this->uid = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4391 |
return TRUE;
|
| 4392 |
}
|
|
@@ -4412,13 +4291,20 @@ class calendarComponent {
|
|
| 4412 |
* set calendar component property url
|
| 4413 |
*
|
| 4414 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4415 |
-
* @since 2.
|
| 4416 |
* @param string $value
|
| 4417 |
* @param string $params optional
|
| 4418 |
* @return bool
|
| 4419 |
*/
|
| 4420 |
function setUrl( $value, $params=FALSE ) {
|
| 4421 |
-
if( empty( $value ))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4422 |
$this->url = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4423 |
return TRUE;
|
| 4424 |
}
|
|
@@ -4430,7 +4316,7 @@ class calendarComponent {
|
|
| 4430 |
* creates formatted output for calendar component property x-prop
|
| 4431 |
*
|
| 4432 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4433 |
-
* @since 2.
|
| 4434 |
* @return string
|
| 4435 |
*/
|
| 4436 |
function createXprop() {
|
|
@@ -4444,11 +4330,11 @@ class calendarComponent {
|
|
| 4444 |
$attributes = $this->_createParams( $xpropPart['params'], array( 'LANGUAGE' ));
|
| 4445 |
if( is_array( $xpropPart['value'] )) {
|
| 4446 |
foreach( $xpropPart['value'] as $pix => $theXpart )
|
| 4447 |
-
$xpropPart['value'][$pix] =
|
| 4448 |
$xpropPart['value'] = implode( ',', $xpropPart['value'] );
|
| 4449 |
}
|
| 4450 |
else
|
| 4451 |
-
$xpropPart['value'] =
|
| 4452 |
$output .= $this->_createElement( $label, $attributes, $xpropPart['value'] );
|
| 4453 |
}
|
| 4454 |
return $output;
|
|
@@ -4457,7 +4343,7 @@ class calendarComponent {
|
|
| 4457 |
* set calendar component property x-prop
|
| 4458 |
*
|
| 4459 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4460 |
-
* @since 2.
|
| 4461 |
* @param string $label
|
| 4462 |
* @param mixed $value
|
| 4463 |
* @param array $params optional
|
|
@@ -4466,13 +4352,14 @@ class calendarComponent {
|
|
| 4466 |
function setXprop( $label, $value, $params=FALSE ) {
|
| 4467 |
if( empty( $label ))
|
| 4468 |
return FALSE;
|
| 4469 |
-
|
|
|
|
| 4470 |
return FALSE;
|
| 4471 |
-
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value =
|
| 4472 |
$xprop = array( 'value' => $value );
|
| 4473 |
$xprop['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 4474 |
if( !is_array( $this->xprop )) $this->xprop = array();
|
| 4475 |
-
$this->xprop[
|
| 4476 |
return TRUE;
|
| 4477 |
}
|
| 4478 |
/*********************************************************************************/
|
|
@@ -4520,7 +4407,7 @@ class calendarComponent {
|
|
| 4520 |
* creates formatted output for calendar component property
|
| 4521 |
*
|
| 4522 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4523 |
-
* @since 2.
|
| 4524 |
* @param string $label property name
|
| 4525 |
* @param string $attributes property attributes
|
| 4526 |
* @param string $content property content (optional)
|
|
@@ -4621,7 +4508,7 @@ class calendarComponent {
|
|
| 4621 |
break;
|
| 4622 |
default:
|
| 4623 |
$output .= $this->elementStart2.$this->valueInit;
|
| 4624 |
-
return
|
| 4625 |
break;
|
| 4626 |
}
|
| 4627 |
}
|
|
@@ -4632,7 +4519,7 @@ class calendarComponent {
|
|
| 4632 |
return $output.$this->elementEnd1.$label.$this->elementEnd2;
|
| 4633 |
break;
|
| 4634 |
default:
|
| 4635 |
-
return
|
| 4636 |
break;
|
| 4637 |
}
|
| 4638 |
}
|
|
@@ -4640,7 +4527,7 @@ class calendarComponent {
|
|
| 4640 |
* creates formatted output for calendar component property parameters
|
| 4641 |
*
|
| 4642 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4643 |
-
* @since 2.10
|
| 4644 |
* @param array $params optional
|
| 4645 |
* @param array $ctrKeys optional
|
| 4646 |
* @return string
|
|
@@ -4653,6 +4540,7 @@ class calendarComponent {
|
|
| 4653 |
$LANGattrKey = ( in_array( 'LANGUAGE', $ctrKeys )) ? TRUE : FALSE ;
|
| 4654 |
$CNattrExist = $LANGattrExist = FALSE;
|
| 4655 |
$xparams = array();
|
|
|
|
| 4656 |
foreach( $params as $paramKey => $paramValue ) {
|
| 4657 |
if(( FALSE !== strpos( $paramValue, ':' )) ||
|
| 4658 |
( FALSE !== strpos( $paramValue, ';' )) ||
|
|
@@ -4662,7 +4550,6 @@ class calendarComponent {
|
|
| 4662 |
$xparams[] = $paramValue;
|
| 4663 |
continue;
|
| 4664 |
}
|
| 4665 |
-
$paramKey = strtoupper( $paramKey );
|
| 4666 |
if( !in_array( $paramKey, array( 'ALTREP', 'CN', 'DIR', 'ENCODING', 'FMTTYPE', 'LANGUAGE', 'RANGE', 'RELTYPE', 'SENT-BY', 'TZID', 'VALUE' )))
|
| 4667 |
$xparams[$paramKey] = $paramValue;
|
| 4668 |
else
|
|
@@ -4724,7 +4611,7 @@ class calendarComponent {
|
|
| 4724 |
* creates formatted output for calendar component property data value type recur
|
| 4725 |
*
|
| 4726 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4727 |
-
* @since 2.
|
| 4728 |
* @param array $recurlabel
|
| 4729 |
* @param array $recurdata
|
| 4730 |
* @return string
|
|
@@ -4739,7 +4626,7 @@ class calendarComponent {
|
|
| 4739 |
$attributes = ( isset( $therule['params'] )) ? $this->_createParams( $therule['params'] ) : null;
|
| 4740 |
$content1 = $content2 = null;
|
| 4741 |
foreach( $therule['value'] as $rulelabel => $rulevalue ) {
|
| 4742 |
-
switch( $rulelabel ) {
|
| 4743 |
case 'FREQ': {
|
| 4744 |
$content1 .= "FREQ=$rulevalue";
|
| 4745 |
break;
|
|
@@ -4775,32 +4662,21 @@ class calendarComponent {
|
|
| 4775 |
break;
|
| 4776 |
}
|
| 4777 |
case 'BYDAY': {
|
| 4778 |
-
$
|
| 4779 |
-
$
|
| 4780 |
-
foreach( $rulevalue as $
|
| 4781 |
-
$
|
| 4782 |
-
|
| 4783 |
-
|
| 4784 |
-
|
| 4785 |
-
|
| 4786 |
-
|
| 4787 |
-
|
| 4788 |
-
$content22 .= $valuePart2;
|
| 4789 |
-
}
|
| 4790 |
-
$content2 .= $content21.$content22;
|
| 4791 |
-
$bydaycnt++;
|
| 4792 |
-
}
|
| 4793 |
-
else {
|
| 4794 |
-
$content2 .= ( $bydaycnt ) ? ',' : null;
|
| 4795 |
-
if( 'DAY' != strtoupper( $vix ))
|
| 4796 |
-
$content21 .= $valuePart;
|
| 4797 |
-
else {
|
| 4798 |
-
$content22 .= $valuePart;
|
| 4799 |
-
$bydaycnt++;
|
| 4800 |
-
}
|
| 4801 |
-
$content2 .= $content21.$content22;
|
| 4802 |
}
|
| 4803 |
-
}
|
|
|
|
|
|
|
|
|
|
| 4804 |
break;
|
| 4805 |
}
|
| 4806 |
default: {
|
|
@@ -4838,7 +4714,7 @@ class calendarComponent {
|
|
| 4838 |
* get general component config variables or info about subcomponents
|
| 4839 |
*
|
| 4840 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4841 |
-
* @since 2.
|
| 4842 |
* @param mixed $config
|
| 4843 |
* @return value
|
| 4844 |
*/
|
|
@@ -4887,7 +4763,7 @@ class calendarComponent {
|
|
| 4887 |
case 'PROPINFO':
|
| 4888 |
$output = array();
|
| 4889 |
if( !in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' ))) {
|
| 4890 |
-
if( empty( $this->uid
|
| 4891 |
$output['UID'] = 1;
|
| 4892 |
if( empty( $this->dtstamp )) $this->_makeDtstamp();
|
| 4893 |
$output['DTSTAMP'] = 1;
|
|
@@ -4954,7 +4830,7 @@ class calendarComponent {
|
|
| 4954 |
* general component config setting
|
| 4955 |
*
|
| 4956 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4957 |
-
* @since 2.10.18 -
|
| 4958 |
* @param mixed $config
|
| 4959 |
* @param string $value
|
| 4960 |
* @param bool $softUpdate
|
|
@@ -4962,14 +4838,12 @@ class calendarComponent {
|
|
| 4962 |
*/
|
| 4963 |
function setConfig( $config, $value = FALSE, $softUpdate = FALSE ) {
|
| 4964 |
if( is_array( $config )) {
|
| 4965 |
-
$
|
| 4966 |
-
|
| 4967 |
-
|
| 4968 |
-
|
| 4969 |
-
|
| 4970 |
-
|
| 4971 |
-
break;
|
| 4972 |
-
}
|
| 4973 |
}
|
| 4974 |
foreach( $config as $cKey => $cValue ) {
|
| 4975 |
if( FALSE === $this->setConfig( $cKey, $cValue, $softUpdate ))
|
|
@@ -4977,8 +4851,10 @@ class calendarComponent {
|
|
| 4977 |
}
|
| 4978 |
return TRUE;
|
| 4979 |
}
|
|
|
|
|
|
|
| 4980 |
$res = FALSE;
|
| 4981 |
-
switch(
|
| 4982 |
case 'ALLOWEMPTY':
|
| 4983 |
$this->allowEmpty = $value;
|
| 4984 |
$subcfg = array( 'ALLOWEMPTY' => $value );
|
|
@@ -5260,7 +5136,7 @@ class calendarComponent {
|
|
| 5260 |
case 'UID':
|
| 5261 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
| 5262 |
return FALSE;
|
| 5263 |
-
if( !empty( $this->uid )) {
|
| 5264 |
$this->uid = '';
|
| 5265 |
$return = TRUE;
|
| 5266 |
}
|
|
@@ -5325,7 +5201,7 @@ class calendarComponent {
|
|
| 5325 |
* if property has multiply values, consequtive function calls are needed
|
| 5326 |
*
|
| 5327 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 5328 |
-
* @since 2.
|
| 5329 |
* @param string $propName, optional
|
| 5330 |
* @param int @propix, optional, if specific property is wanted in case of multiply occurences
|
| 5331 |
* @param bool $inclParam=FALSE
|
|
@@ -5334,21 +5210,12 @@ class calendarComponent {
|
|
| 5334 |
*/
|
| 5335 |
function getProperty( $propName=FALSE, $propix=FALSE, $inclParam=FALSE, $specform=FALSE ) {
|
| 5336 |
if( 'GEOLOCATION' == strtoupper( $propName )) {
|
| 5337 |
-
$content = $this->getProperty( 'LOCATION' );
|
| 5338 |
-
|
| 5339 |
-
if(( FALSE === ( $geo = $this->getProperty( 'GEO' ))) || empty( $geo ))
|
| 5340 |
return FALSE;
|
| 5341 |
-
|
| 5342 |
-
|
| 5343 |
-
|
| 5344 |
-
$sign = ( 0.0 > $geo['latitude'] ) ? '-' : '';
|
| 5345 |
-
$content .= $sign.sprintf( "%09.6f", abs( $geo['latitude'] )); // sprintf && lpad && float && sign !"#¤%&/(
|
| 5346 |
-
$content = rtrim( rtrim( $content, '0' ), '.' );
|
| 5347 |
-
if( 0.0 < $geo['longitude'] )
|
| 5348 |
-
$sign = '+';
|
| 5349 |
-
else
|
| 5350 |
-
$sign = ( 0.0 > $geo['longitude'] ) ? '-' : '';
|
| 5351 |
-
return $content.$sign.sprintf( '%8.6f', abs( $geo['longitude'] )).'/'; // sprintf && lpad && float && sign !"#¤%&/(
|
| 5352 |
}
|
| 5353 |
if( $this->_notExistProp( $propName )) return FALSE;
|
| 5354 |
$propName = ( $propName ) ? strtoupper( $propName ) : 'X-PROP';
|
|
@@ -5360,7 +5227,7 @@ class calendarComponent {
|
|
| 5360 |
}
|
| 5361 |
switch( $propName ) {
|
| 5362 |
case 'ACTION':
|
| 5363 |
-
if(
|
| 5364 |
break;
|
| 5365 |
case 'ATTACH':
|
| 5366 |
$ak = ( is_array( $this->attach )) ? array_keys( $this->attach ) : array();
|
|
@@ -5387,7 +5254,7 @@ class calendarComponent {
|
|
| 5387 |
return ( $inclParam ) ? $this->categories[$propix] : $this->categories[$propix]['value'];
|
| 5388 |
break;
|
| 5389 |
case 'CLASS':
|
| 5390 |
-
if(
|
| 5391 |
break;
|
| 5392 |
case 'COMMENT':
|
| 5393 |
$ak = ( is_array( $this->comment )) ? array_keys( $this->comment ) : array();
|
|
@@ -5398,7 +5265,7 @@ class calendarComponent {
|
|
| 5398 |
return ( $inclParam ) ? $this->comment[$propix] : $this->comment[$propix]['value'];
|
| 5399 |
break;
|
| 5400 |
case 'COMPLETED':
|
| 5401 |
-
if(
|
| 5402 |
break;
|
| 5403 |
case 'CONTACT':
|
| 5404 |
$ak = ( is_array( $this->contact )) ? array_keys( $this->contact ) : array();
|
|
@@ -5409,7 +5276,7 @@ class calendarComponent {
|
|
| 5409 |
return ( $inclParam ) ? $this->contact[$propix] : $this->contact[$propix]['value'];
|
| 5410 |
break;
|
| 5411 |
case 'CREATED':
|
| 5412 |
-
if(
|
| 5413 |
break;
|
| 5414 |
case 'DESCRIPTION':
|
| 5415 |
$ak = ( is_array( $this->description )) ? array_keys( $this->description ) : array();
|
|
@@ -5420,7 +5287,7 @@ class calendarComponent {
|
|
| 5420 |
return ( $inclParam ) ? $this->description[$propix] : $this->description[$propix]['value'];
|
| 5421 |
break;
|
| 5422 |
case 'DTEND':
|
| 5423 |
-
if(
|
| 5424 |
break;
|
| 5425 |
case 'DTSTAMP':
|
| 5426 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
|
@@ -5430,13 +5297,13 @@ class calendarComponent {
|
|
| 5430 |
return ( $inclParam ) ? $this->dtstamp : $this->dtstamp['value'];
|
| 5431 |
break;
|
| 5432 |
case 'DTSTART':
|
| 5433 |
-
if(
|
| 5434 |
break;
|
| 5435 |
case 'DUE':
|
| 5436 |
-
if(
|
| 5437 |
break;
|
| 5438 |
case 'DURATION':
|
| 5439 |
-
if( !isset( $this->duration['value'] )) return FALSE;
|
| 5440 |
$value = ( $specform && isset( $this->dtstart['value'] ) && isset( $this->duration['value'] )) ? iCalUtilityFunctions::_duration2date( $this->dtstart['value'], $this->duration['value'] ) : $this->duration['value'];
|
| 5441 |
return ( $inclParam ) ? array( 'value' => $value, 'params' => $this->duration['params'] ) : $value;
|
| 5442 |
break;
|
|
@@ -5465,22 +5332,22 @@ class calendarComponent {
|
|
| 5465 |
return ( $inclParam ) ? $this->freebusy[$propix] : $this->freebusy[$propix]['value'];
|
| 5466 |
break;
|
| 5467 |
case 'GEO':
|
| 5468 |
-
if(
|
| 5469 |
break;
|
| 5470 |
case 'LAST-MODIFIED':
|
| 5471 |
-
if(
|
| 5472 |
break;
|
| 5473 |
case 'LOCATION':
|
| 5474 |
-
if(
|
| 5475 |
break;
|
| 5476 |
case 'ORGANIZER':
|
| 5477 |
-
if(
|
| 5478 |
break;
|
| 5479 |
case 'PERCENT-COMPLETE':
|
| 5480 |
-
if(
|
| 5481 |
break;
|
| 5482 |
case 'PRIORITY':
|
| 5483 |
-
if(
|
| 5484 |
break;
|
| 5485 |
case 'RDATE':
|
| 5486 |
$ak = ( is_array( $this->rdate )) ? array_keys( $this->rdate ) : array();
|
|
@@ -5491,7 +5358,7 @@ class calendarComponent {
|
|
| 5491 |
return ( $inclParam ) ? $this->rdate[$propix] : $this->rdate[$propix]['value'];
|
| 5492 |
break;
|
| 5493 |
case 'RECURRENCE-ID':
|
| 5494 |
-
if(
|
| 5495 |
break;
|
| 5496 |
case 'RELATED-TO':
|
| 5497 |
$ak = ( is_array( $this->relatedto )) ? array_keys( $this->relatedto ) : array();
|
|
@@ -5502,7 +5369,7 @@ class calendarComponent {
|
|
| 5502 |
return ( $inclParam ) ? $this->relatedto[$propix] : $this->relatedto[$propix]['value'];
|
| 5503 |
break;
|
| 5504 |
case 'REPEAT':
|
| 5505 |
-
if(
|
| 5506 |
break;
|
| 5507 |
case 'REQUEST-STATUS':
|
| 5508 |
$ak = ( is_array( $this->requeststatus )) ? array_keys( $this->requeststatus ) : array();
|
|
@@ -5529,22 +5396,22 @@ class calendarComponent {
|
|
| 5529 |
return ( $inclParam ) ? $this->rrule[$propix] : $this->rrule[$propix]['value'];
|
| 5530 |
break;
|
| 5531 |
case 'SEQUENCE':
|
| 5532 |
-
if( isset( $this->sequence['value'] )
|
| 5533 |
break;
|
| 5534 |
case 'STATUS':
|
| 5535 |
-
if(
|
| 5536 |
break;
|
| 5537 |
case 'SUMMARY':
|
| 5538 |
-
if(
|
| 5539 |
break;
|
| 5540 |
case 'TRANSP':
|
| 5541 |
-
if(
|
| 5542 |
break;
|
| 5543 |
case 'TRIGGER':
|
| 5544 |
-
if(
|
| 5545 |
break;
|
| 5546 |
case 'TZID':
|
| 5547 |
-
if(
|
| 5548 |
break;
|
| 5549 |
case 'TZNAME':
|
| 5550 |
$ak = ( is_array( $this->tzname )) ? array_keys( $this->tzname ) : array();
|
|
@@ -5555,23 +5422,23 @@ class calendarComponent {
|
|
| 5555 |
return ( $inclParam ) ? $this->tzname[$propix] : $this->tzname[$propix]['value'];
|
| 5556 |
break;
|
| 5557 |
case 'TZOFFSETFROM':
|
| 5558 |
-
if(
|
| 5559 |
break;
|
| 5560 |
case 'TZOFFSETTO':
|
| 5561 |
-
if(
|
| 5562 |
break;
|
| 5563 |
case 'TZURL':
|
| 5564 |
-
if(
|
| 5565 |
break;
|
| 5566 |
case 'UID':
|
| 5567 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
| 5568 |
return FALSE;
|
| 5569 |
-
if( empty( $this->uid
|
| 5570 |
$this->_makeuid();
|
| 5571 |
return ( $inclParam ) ? $this->uid : $this->uid['value'];
|
| 5572 |
break;
|
| 5573 |
case 'URL':
|
| 5574 |
-
if(
|
| 5575 |
break;
|
| 5576 |
default:
|
| 5577 |
if( $propName != 'X-PROP' ) {
|
|
@@ -5681,93 +5548,93 @@ class calendarComponent {
|
|
| 5681 |
}
|
| 5682 |
switch( $arglist[0] ) {
|
| 5683 |
case 'ACTION':
|
| 5684 |
-
return $this->setAction(
|
| 5685 |
case 'ATTACH':
|
| 5686 |
-
return $this->setAttach(
|
| 5687 |
case 'ATTENDEE':
|
| 5688 |
-
return $this->setAttendee(
|
| 5689 |
case 'CATEGORIES':
|
| 5690 |
-
return $this->setCategories(
|
| 5691 |
case 'CLASS':
|
| 5692 |
-
return $this->setClass(
|
| 5693 |
case 'COMMENT':
|
| 5694 |
-
return $this->setComment(
|
| 5695 |
case 'COMPLETED':
|
| 5696 |
-
return $this->setCompleted(
|
| 5697 |
case 'CONTACT':
|
| 5698 |
-
return $this->setContact(
|
| 5699 |
case 'CREATED':
|
| 5700 |
-
return $this->setCreated(
|
| 5701 |
case 'DESCRIPTION':
|
| 5702 |
-
return $this->setDescription(
|
| 5703 |
case 'DTEND':
|
| 5704 |
-
return $this->setDtend(
|
| 5705 |
case 'DTSTAMP':
|
| 5706 |
-
return $this->setDtstamp(
|
| 5707 |
case 'DTSTART':
|
| 5708 |
-
return $this->setDtstart(
|
| 5709 |
case 'DUE':
|
| 5710 |
-
return $this->setDue(
|
| 5711 |
case 'DURATION':
|
| 5712 |
-
return $this->setDuration(
|
| 5713 |
case 'EXDATE':
|
| 5714 |
-
return $this->setExdate(
|
| 5715 |
case 'EXRULE':
|
| 5716 |
-
return $this->setExrule(
|
| 5717 |
case 'FREEBUSY':
|
| 5718 |
-
return $this->setFreebusy(
|
| 5719 |
case 'GEO':
|
| 5720 |
-
return $this->setGeo(
|
| 5721 |
case 'LAST-MODIFIED':
|
| 5722 |
-
return $this->setLastModified(
|
| 5723 |
case 'LOCATION':
|
| 5724 |
-
return $this->setLocation(
|
| 5725 |
case 'ORGANIZER':
|
| 5726 |
-
return $this->setOrganizer(
|
| 5727 |
case 'PERCENT-COMPLETE':
|
| 5728 |
return $this->setPercentComplete( $arglist[1], $arglist[2] );
|
| 5729 |
case 'PRIORITY':
|
| 5730 |
-
return $this->setPriority(
|
| 5731 |
case 'RDATE':
|
| 5732 |
-
return $this->setRdate(
|
| 5733 |
case 'RECURRENCE-ID':
|
| 5734 |
-
return $this->setRecurrenceid(
|
| 5735 |
case 'RELATED-TO':
|
| 5736 |
-
return $this->setRelatedTo(
|
| 5737 |
case 'REPEAT':
|
| 5738 |
-
return $this->setRepeat(
|
| 5739 |
case 'REQUEST-STATUS':
|
| 5740 |
-
return $this->setRequestStatus(
|
| 5741 |
case 'RESOURCES':
|
| 5742 |
-
return $this->setResources(
|
| 5743 |
case 'RRULE':
|
| 5744 |
-
return $this->setRrule(
|
| 5745 |
case 'SEQUENCE':
|
| 5746 |
-
return $this->setSequence(
|
| 5747 |
case 'STATUS':
|
| 5748 |
-
return $this->setStatus(
|
| 5749 |
case 'SUMMARY':
|
| 5750 |
-
return $this->setSummary(
|
| 5751 |
case 'TRANSP':
|
| 5752 |
-
return $this->setTransp(
|
| 5753 |
case 'TRIGGER':
|
| 5754 |
-
return $this->setTrigger(
|
| 5755 |
case 'TZID':
|
| 5756 |
-
return $this->setTzid(
|
| 5757 |
case 'TZNAME':
|
| 5758 |
-
return $this->setTzname(
|
| 5759 |
case 'TZOFFSETFROM':
|
| 5760 |
-
return $this->setTzoffsetfrom(
|
| 5761 |
case 'TZOFFSETTO':
|
| 5762 |
-
return $this->setTzoffsetto(
|
| 5763 |
case 'TZURL':
|
| 5764 |
-
return $this->setTzurl(
|
| 5765 |
case 'UID':
|
| 5766 |
-
return $this->setUid(
|
| 5767 |
case 'URL':
|
| 5768 |
-
return $this->setUrl(
|
| 5769 |
default:
|
| 5770 |
-
return $this->setXprop(
|
| 5771 |
}
|
| 5772 |
return FALSE;
|
| 5773 |
}
|
|
@@ -5776,17 +5643,16 @@ class calendarComponent {
|
|
| 5776 |
* parse component unparsed data into properties
|
| 5777 |
*
|
| 5778 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 5779 |
-
* @since 2.
|
| 5780 |
* @param mixed $unparsedtext, optional, strict rfc2445 formatted, single property string or array of strings
|
| 5781 |
* @return bool FALSE if error occurs during parsing
|
| 5782 |
-
*
|
| 5783 |
*/
|
| 5784 |
function parse( $unparsedtext=null ) {
|
| 5785 |
$nl = $this->getConfig( 'nl' );
|
| 5786 |
if( !empty( $unparsedtext )) {
|
| 5787 |
if( is_array( $unparsedtext ))
|
| 5788 |
$unparsedtext = implode( '\n'.$nl, $unparsedtext );
|
| 5789 |
-
$unparsedtext =
|
| 5790 |
}
|
| 5791 |
elseif( !isset( $this->unparsed ))
|
| 5792 |
$unparsedtext = array();
|
|
@@ -5865,9 +5731,6 @@ class calendarComponent {
|
|
| 5865 |
$proprows[] = $line;
|
| 5866 |
}
|
| 5867 |
/* parse each property 'line' */
|
| 5868 |
-
$paramMStz = array( 'utc-', 'utc+', 'gmt-', 'gmt+' );
|
| 5869 |
-
$paramProto3 = array( 'fax:', 'cid:', 'sms:', 'tel:', 'urn:' );
|
| 5870 |
-
$paramProto4 = array( 'crid:', 'news:', 'pres:' );
|
| 5871 |
foreach( $proprows as $line ) {
|
| 5872 |
if( '\n' == substr( $line, -2 ))
|
| 5873 |
$line = substr( $line, 0, -2 );
|
|
@@ -5890,67 +5753,19 @@ class calendarComponent {
|
|
| 5890 |
/* rest of the line is opt.params and value */
|
| 5891 |
$line = substr( $line, $cix );
|
| 5892 |
/* separate attributes from value */
|
| 5893 |
-
$
|
| 5894 |
-
$attrix = -1;
|
| 5895 |
-
$clen = strlen( $line );
|
| 5896 |
-
$WithinQuotes = FALSE;
|
| 5897 |
-
$cix = 0;
|
| 5898 |
-
while( FALSE !== substr( $line, $cix, 1 )) {
|
| 5899 |
-
if( ( ':' == $line[$cix] ) &&
|
| 5900 |
-
( substr( $line,$cix, 3 ) != '://' ) &&
|
| 5901 |
-
( !in_array( strtolower( substr( $line,$cix - 6, 4 )), $paramMStz )) &&
|
| 5902 |
-
( !in_array( strtolower( substr( $line,$cix - 3, 4 )), $paramProto3 )) &&
|
| 5903 |
-
( !in_array( strtolower( substr( $line,$cix - 4, 5 )), $paramProto4 )) &&
|
| 5904 |
-
( strtolower( substr( $line,$cix - 6, 7 )) != 'mailto:' ) &&
|
| 5905 |
-
!$WithinQuotes ) {
|
| 5906 |
-
$attrEnd = TRUE;
|
| 5907 |
-
if(( $cix < ( $clen - 4 )) &&
|
| 5908 |
-
ctype_digit( substr( $line, $cix+1, 4 ))) { // an URI with a (4pos) portnr??
|
| 5909 |
-
for( $c2ix = $cix; 3 < $c2ix; $c2ix-- ) {
|
| 5910 |
-
if( '://' == substr( $line, $c2ix - 2, 3 )) {
|
| 5911 |
-
$attrEnd = FALSE;
|
| 5912 |
-
break; // an URI with a portnr!!
|
| 5913 |
-
}
|
| 5914 |
-
}
|
| 5915 |
-
}
|
| 5916 |
-
if( $attrEnd) {
|
| 5917 |
-
$line = substr( $line, ( $cix + 1 ));
|
| 5918 |
-
break;
|
| 5919 |
-
}
|
| 5920 |
-
$cix++;
|
| 5921 |
-
}
|
| 5922 |
-
if( '"' == $line[$cix] )
|
| 5923 |
-
$WithinQuotes = ( FALSE === $WithinQuotes ) ? TRUE : FALSE;
|
| 5924 |
-
if( ';' == $line[$cix] )
|
| 5925 |
-
$attr[++$attrix] = null;
|
| 5926 |
-
else
|
| 5927 |
-
$attr[$attrix] .= $line[$cix];
|
| 5928 |
-
$cix++;
|
| 5929 |
-
}
|
| 5930 |
-
/* make attributes in array format */
|
| 5931 |
-
$propattr = array();
|
| 5932 |
-
foreach( $attr as $attribute ) {
|
| 5933 |
-
$attrsplit = explode( '=', $attribute, 2 );
|
| 5934 |
-
if( 1 < count( $attrsplit ))
|
| 5935 |
-
$propattr[$attrsplit[0]] = $attrsplit[1];
|
| 5936 |
-
else
|
| 5937 |
-
$propattr[] = $attribute;
|
| 5938 |
-
}
|
| 5939 |
/* call setProperty( $propname.. . */
|
| 5940 |
switch( strtoupper( $propname )) {
|
| 5941 |
case 'ATTENDEE':
|
| 5942 |
-
foreach( $
|
| 5943 |
if( !in_array( strtoupper( $pix ), array( 'MEMBER', 'DELEGATED-TO', 'DELEGATED-FROM' )))
|
| 5944 |
continue;
|
| 5945 |
$attr2 = explode( ',', $attr );
|
| 5946 |
if( 1 < count( $attr2 ))
|
| 5947 |
-
$
|
| 5948 |
}
|
| 5949 |
-
$this->setProperty( $propname, $line, $
|
| 5950 |
break;
|
| 5951 |
-
case 'X-':
|
| 5952 |
-
$propname = ( isset( $propname2 )) ? $propname2 : $propname;
|
| 5953 |
-
unset( $propname2 );
|
| 5954 |
case 'CATEGORIES':
|
| 5955 |
case 'RESOURCES':
|
| 5956 |
if( FALSE !== strpos( $line, ',' )) {
|
|
@@ -5968,8 +5783,8 @@ class calendarComponent {
|
|
| 5968 |
if( 1 < count( $content )) {
|
| 5969 |
$content = array_values( $content );
|
| 5970 |
foreach( $content as $cix => $contentPart )
|
| 5971 |
-
$content[$cix] =
|
| 5972 |
-
$this->setProperty( $propname, $content, $
|
| 5973 |
break;
|
| 5974 |
}
|
| 5975 |
else
|
|
@@ -5981,43 +5796,43 @@ class calendarComponent {
|
|
| 5981 |
case 'LOCATION':
|
| 5982 |
case 'SUMMARY':
|
| 5983 |
if( empty( $line ))
|
| 5984 |
-
$
|
| 5985 |
-
$this->setProperty( $propname,
|
| 5986 |
break;
|
| 5987 |
case 'REQUEST-STATUS':
|
| 5988 |
$values = explode( ';', $line, 3 );
|
| 5989 |
-
$values[1] = ( !isset( $values[1] )) ? null :
|
| 5990 |
-
$values[2] = ( !isset( $values[2] )) ? null :
|
| 5991 |
$this->setProperty( $propname
|
| 5992 |
, $values[0] // statcode
|
| 5993 |
, $values[1] // statdesc
|
| 5994 |
, $values[2] // extdata
|
| 5995 |
-
, $
|
| 5996 |
break;
|
| 5997 |
case 'FREEBUSY':
|
| 5998 |
-
$fbtype = ( isset( $
|
| 5999 |
-
unset( $
|
| 6000 |
$values = explode( ',', $line );
|
| 6001 |
foreach( $values as $vix => $value ) {
|
| 6002 |
$value2 = explode( '/', $value );
|
| 6003 |
if( 1 < count( $value2 ))
|
| 6004 |
$values[$vix] = $value2;
|
| 6005 |
}
|
| 6006 |
-
$this->setProperty( $propname, $fbtype, $values, $
|
| 6007 |
break;
|
| 6008 |
case 'GEO':
|
| 6009 |
$value = explode( ';', $line, 2 );
|
| 6010 |
if( 2 > count( $value ))
|
| 6011 |
$value[1] = null;
|
| 6012 |
-
$this->setProperty( $propname, $value[0], $value[1], $
|
| 6013 |
break;
|
| 6014 |
case 'EXDATE':
|
| 6015 |
$values = ( !empty( $line )) ? explode( ',', $line ) : null;
|
| 6016 |
-
$this->setProperty( $propname, $values, $
|
| 6017 |
break;
|
| 6018 |
case 'RDATE':
|
| 6019 |
if( empty( $line )) {
|
| 6020 |
-
$this->setProperty( $propname, $line, $
|
| 6021 |
break;
|
| 6022 |
}
|
| 6023 |
$values = explode( ',', $line );
|
|
@@ -6026,7 +5841,7 @@ class calendarComponent {
|
|
| 6026 |
if( 1 < count( $value2 ))
|
| 6027 |
$values[$vix] = $value2;
|
| 6028 |
}
|
| 6029 |
-
$this->setProperty( $propname, $values, $
|
| 6030 |
break;
|
| 6031 |
case 'EXRULE':
|
| 6032 |
case 'RRULE':
|
|
@@ -6085,8 +5900,11 @@ class calendarComponent {
|
|
| 6085 |
}
|
| 6086 |
} // end - switch $rulelabel
|
| 6087 |
} // end - foreach( $values.. .
|
| 6088 |
-
$this->setProperty( $propname, $recur, $
|
| 6089 |
break;
|
|
|
|
|
|
|
|
|
|
| 6090 |
case 'ACTION':
|
| 6091 |
case 'CLASSIFICATION':
|
| 6092 |
case 'STATUS':
|
|
@@ -6095,9 +5913,9 @@ class calendarComponent {
|
|
| 6095 |
case 'TZID':
|
| 6096 |
case 'RELATED-TO':
|
| 6097 |
case 'TZNAME':
|
| 6098 |
-
$line =
|
| 6099 |
default:
|
| 6100 |
-
$this->setProperty( $propname, $line, $
|
| 6101 |
break;
|
| 6102 |
} // end switch( $propname.. .
|
| 6103 |
} // end - foreach( $proprows.. .
|
|
@@ -6362,158 +6180,6 @@ class calendarComponent {
|
|
| 6362 |
}
|
| 6363 |
return $output;
|
| 6364 |
}
|
| 6365 |
-
/********************************************************************************/
|
| 6366 |
-
/**
|
| 6367 |
-
* break lines at pos 75
|
| 6368 |
-
*
|
| 6369 |
-
* Lines of text SHOULD NOT be longer than 75 octets, excluding the line
|
| 6370 |
-
* break. Long content lines SHOULD be split into a multiple line
|
| 6371 |
-
* representations using a line "folding" technique. That is, a long
|
| 6372 |
-
* line can be split between any two characters by inserting a CRLF
|
| 6373 |
-
* immediately followed by a single linear white space character (i.e.,
|
| 6374 |
-
* SPACE, US-ASCII decimal 32 or HTAB, US-ASCII decimal 9). Any sequence
|
| 6375 |
-
* of CRLF followed immediately by a single linear white space character
|
| 6376 |
-
* is ignored (i.e., removed) when processing the content type.
|
| 6377 |
-
*
|
| 6378 |
-
* Edited 2007-08-26 by Anders Litzell, anders@litzell.se to fix bug where
|
| 6379 |
-
* the reserved expression "\n" in the arg $string could be broken up by the
|
| 6380 |
-
* folding of lines, causing ambiguity in the return string.
|
| 6381 |
-
*
|
| 6382 |
-
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6383 |
-
* @since 2.12.17 - 2012-07-15
|
| 6384 |
-
* @param string $value
|
| 6385 |
-
* @return string
|
| 6386 |
-
*/
|
| 6387 |
-
function _size75( $string ) {
|
| 6388 |
-
$tmp = $string;
|
| 6389 |
-
$string = '';
|
| 6390 |
-
$cCnt = $x = 0;
|
| 6391 |
-
while( TRUE ) {
|
| 6392 |
-
if( !isset( $tmp[$x] )) {
|
| 6393 |
-
$string .= $this->nl; // loop breakes here
|
| 6394 |
-
break;
|
| 6395 |
-
}
|
| 6396 |
-
elseif(( 74 <= $cCnt ) && ( '\\' == $tmp[$x] ) && ( 'n' == $tmp[$x+1] )) {
|
| 6397 |
-
$string .= $this->nl.' \n'; // don't break lines inside '\n'
|
| 6398 |
-
$x += 2;
|
| 6399 |
-
if( !isset( $tmp[$x] )) {
|
| 6400 |
-
$string .= $this->nl;
|
| 6401 |
-
break;
|
| 6402 |
-
}
|
| 6403 |
-
$cCnt = 3;
|
| 6404 |
-
}
|
| 6405 |
-
elseif( 75 <= $cCnt ) {
|
| 6406 |
-
$string .= $this->nl.' ';
|
| 6407 |
-
$cCnt = 1;
|
| 6408 |
-
}
|
| 6409 |
-
$byte = ord( $tmp[$x] );
|
| 6410 |
-
$string .= $tmp[$x];
|
| 6411 |
-
switch( TRUE ) { // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
| 6412 |
-
case(( $byte >= 0x20 ) && ( $byte <= 0x7F )): // characters U-00000000 - U-0000007F (same as ASCII)
|
| 6413 |
-
$cCnt += 1;
|
| 6414 |
-
break; // add a one byte character
|
| 6415 |
-
case(( $byte & 0xE0) == 0xC0 ): // characters U-00000080 - U-000007FF, mask 110XXXXX
|
| 6416 |
-
if( isset( $tmp[$x+1] )) {
|
| 6417 |
-
$cCnt += 1;
|
| 6418 |
-
$string .= $tmp[$x+1];
|
| 6419 |
-
$x += 1; // add a two bytes character
|
| 6420 |
-
}
|
| 6421 |
-
break;
|
| 6422 |
-
case(( $byte & 0xF0 ) == 0xE0 ): // characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
| 6423 |
-
if( isset( $tmp[$x+2] )) {
|
| 6424 |
-
$cCnt += 1;
|
| 6425 |
-
$string .= $tmp[$x+1].$tmp[$x+2];
|
| 6426 |
-
$x += 2; // add a three bytes character
|
| 6427 |
-
}
|
| 6428 |
-
break;
|
| 6429 |
-
case(( $byte & 0xF8 ) == 0xF0 ): // characters U-00010000 - U-001FFFFF, mask 11110XXX
|
| 6430 |
-
if( isset( $tmp[$x+3] )) {
|
| 6431 |
-
$cCnt += 1;
|
| 6432 |
-
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3];
|
| 6433 |
-
$x += 3; // add a four bytes character
|
| 6434 |
-
}
|
| 6435 |
-
break;
|
| 6436 |
-
case(( $byte & 0xFC ) == 0xF8 ): // characters U-00200000 - U-03FFFFFF, mask 111110XX
|
| 6437 |
-
if( isset( $tmp[$x+4] )) {
|
| 6438 |
-
$cCnt += 1;
|
| 6439 |
-
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3].$tmp[$x+4];
|
| 6440 |
-
$x += 4; // add a five bytes character
|
| 6441 |
-
}
|
| 6442 |
-
break;
|
| 6443 |
-
case(( $byte & 0xFE ) == 0xFC ): // characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
| 6444 |
-
if( isset( $tmp[$x+5] )) {
|
| 6445 |
-
$cCnt += 1;
|
| 6446 |
-
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3].$tmp[$x+4].$tmp[$x+5];
|
| 6447 |
-
$x += 5; // add a six bytes character
|
| 6448 |
-
}
|
| 6449 |
-
default: // add any other byte without counting up $cCnt
|
| 6450 |
-
break;
|
| 6451 |
-
} // end switch( TRUE )
|
| 6452 |
-
$x += 1; // next 'byte' to test
|
| 6453 |
-
} // end while( TRUE ) {
|
| 6454 |
-
return $string;
|
| 6455 |
-
}
|
| 6456 |
-
/**
|
| 6457 |
-
* special characters management output
|
| 6458 |
-
*
|
| 6459 |
-
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6460 |
-
* @since 2.12.16 - 2012-07-16
|
| 6461 |
-
* @param string $string
|
| 6462 |
-
* @return string
|
| 6463 |
-
*/
|
| 6464 |
-
function _strrep( $string ) {
|
| 6465 |
-
switch( $this->format ) {
|
| 6466 |
-
case 'xcal':
|
| 6467 |
-
$string = str_replace( '\n', $this->nl, $string);
|
| 6468 |
-
$string = htmlspecialchars( strip_tags( stripslashes( urldecode ( $string ))));
|
| 6469 |
-
break;
|
| 6470 |
-
default:
|
| 6471 |
-
$pos = 0;
|
| 6472 |
-
$specChars = array( 'n', 'N', 'r', ',', ';' );
|
| 6473 |
-
while( isset( $string[$pos] )) {
|
| 6474 |
-
if( FALSE === ( $pos = strpos( $string, "\\", $pos )))
|
| 6475 |
-
break;
|
| 6476 |
-
if( !in_array( substr( $string, $pos, 1 ), $specChars )) {
|
| 6477 |
-
$string = substr( $string, 0, $pos )."\\".substr( $string, ( $pos + 1 ));
|
| 6478 |
-
$pos += 1;
|
| 6479 |
-
}
|
| 6480 |
-
$pos += 1;
|
| 6481 |
-
}
|
| 6482 |
-
if( FALSE !== strpos( $string, '"' ))
|
| 6483 |
-
$string = str_replace('"', "'", $string);
|
| 6484 |
-
if( FALSE !== strpos( $string, ',' ))
|
| 6485 |
-
$string = str_replace(',', '\,', $string);
|
| 6486 |
-
if( FALSE !== strpos( $string, ';' ))
|
| 6487 |
-
$string = str_replace(';', '\;', $string);
|
| 6488 |
-
if( FALSE !== strpos( $string, "\r\n" ))
|
| 6489 |
-
$string = str_replace( "\r\n", '\n', $string);
|
| 6490 |
-
elseif( FALSE !== strpos( $string, "\r" ))
|
| 6491 |
-
$string = str_replace( "\r", '\n', $string);
|
| 6492 |
-
elseif( FALSE !== strpos( $string, "\n" ))
|
| 6493 |
-
$string = str_replace( "\n", '\n', $string);
|
| 6494 |
-
if( FALSE !== strpos( $string, '\N' ))
|
| 6495 |
-
$string = str_replace( '\N', '\n', $string);
|
| 6496 |
-
// if( FALSE !== strpos( $string, $this->nl ))
|
| 6497 |
-
$string = str_replace( $this->nl, '\n', $string);
|
| 6498 |
-
break;
|
| 6499 |
-
}
|
| 6500 |
-
return $string;
|
| 6501 |
-
}
|
| 6502 |
-
/**
|
| 6503 |
-
* special characters management input (from iCal file)
|
| 6504 |
-
*
|
| 6505 |
-
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6506 |
-
* @since 2.6.22 - 2010-10-17
|
| 6507 |
-
* @param string $string
|
| 6508 |
-
* @return string
|
| 6509 |
-
*/
|
| 6510 |
-
static function _strunrep( $string ) {
|
| 6511 |
-
$string = str_replace( '\\\\', '\\', $string);
|
| 6512 |
-
$string = str_replace( '\,', ',', $string);
|
| 6513 |
-
$string = str_replace( '\;', ';', $string);
|
| 6514 |
-
// $string = str_replace( '\n', $this->nl, $string); // ??
|
| 6515 |
-
return $string;
|
| 6516 |
-
}
|
| 6517 |
}
|
| 6518 |
/*********************************************************************************/
|
| 6519 |
/*********************************************************************************/
|
|
@@ -7197,8 +6863,7 @@ class vtimezone extends calendarComponent {
|
|
| 7197 |
* 20111223 - move iCalUtilityFunctions class to the end of the iCalcreator class file
|
| 7198 |
*
|
| 7199 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7200 |
-
* @since 2.10
|
| 7201 |
-
*
|
| 7202 |
*/
|
| 7203 |
class iCalUtilityFunctions {
|
| 7204 |
// Store the single instance of iCalUtilityFunctions
|
|
@@ -7208,6 +6873,11 @@ class iCalUtilityFunctions {
|
|
| 7208 |
private function __construct() {
|
| 7209 |
$m_pInstance = FALSE;
|
| 7210 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7211 |
|
| 7212 |
// Getter method for creating/returning the single instance of this class
|
| 7213 |
public static function getInstance() {
|
|
@@ -7220,7 +6890,7 @@ class iCalUtilityFunctions {
|
|
| 7220 |
* ensures internal date-time/date format (keyed array) for an input date-time/date array (keyed or unkeyed)
|
| 7221 |
*
|
| 7222 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7223 |
-
* @since 2.
|
| 7224 |
* @param array $datetime
|
| 7225 |
* @param int $parno optional, default FALSE
|
| 7226 |
* @return array
|
|
@@ -7230,6 +6900,11 @@ class iCalUtilityFunctions {
|
|
| 7230 |
}
|
| 7231 |
public static function _chkDateArr( $datetime, $parno=FALSE ) {
|
| 7232 |
$output = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7233 |
foreach( $datetime as $dateKey => $datePart ) {
|
| 7234 |
switch ( $dateKey ) {
|
| 7235 |
case '0': case 'year': $output['year'] = $datePart; break;
|
|
@@ -7313,6 +6988,51 @@ class iCalUtilityFunctions {
|
|
| 7313 |
$parno = 6;
|
| 7314 |
}
|
| 7315 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7316 |
/**
|
| 7317 |
* byte oriented line folding fix
|
| 7318 |
*
|
|
@@ -7321,32 +7041,30 @@ class iCalUtilityFunctions {
|
|
| 7321 |
* takes care of '\r\n', '\r' and '\n' and mixed '\r\n'+'\r', '\r\n'+'\n'
|
| 7322 |
*
|
| 7323 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7324 |
-
* @since 2.
|
| 7325 |
* @param string $text
|
| 7326 |
* @param string $nl
|
| 7327 |
* @return string
|
| 7328 |
*/
|
| 7329 |
public static function convEolChar( & $text, $nl ) {
|
| 7330 |
-
|
| 7331 |
-
|
| 7332 |
-
|
| 7333 |
-
|
| 7334 |
-
|
| 7335 |
-
|
| 7336 |
-
|
| 7337 |
-
|
| 7338 |
-
|
| 7339 |
-
|
| 7340 |
-
|
| 7341 |
-
|
| 7342 |
-
|
| 7343 |
-
|
| 7344 |
-
|
| 7345 |
-
|
| 7346 |
-
|
| 7347 |
-
|
| 7348 |
-
}
|
| 7349 |
-
return $outp;
|
| 7350 |
}
|
| 7351 |
/**
|
| 7352 |
* create a calendar timezone and standard/daylight components
|
|
@@ -7370,7 +7088,7 @@ class iCalUtilityFunctions {
|
|
| 7370 |
* END:VTIMEZONE
|
| 7371 |
*
|
| 7372 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7373 |
-
* @since 2.
|
| 7374 |
* Generates components for all transitions in a date range, based on contribution by Yitzchok Lavi <icalcreator@onebigsystem.com>
|
| 7375 |
* Additional changes jpirkey
|
| 7376 |
* @param object $calendar, reference to an iCalcreator calendar instance
|
|
@@ -7403,7 +7121,7 @@ class iCalUtilityFunctions {
|
|
| 7403 |
else {
|
| 7404 |
$from = reset( $dates ); // set lowest date to the lowest dtstart date
|
| 7405 |
$dateFrom = new DateTime( $from.'T000000', $dtz );
|
| 7406 |
-
$dateFrom->modify( '-
|
| 7407 |
$dateFrom->setTimezone( $utcTz ); // convert local date to UTC
|
| 7408 |
}
|
| 7409 |
$dateFromYmd = $dateFrom->format('Y-m-d' );
|
|
@@ -7412,7 +7130,7 @@ class iCalUtilityFunctions {
|
|
| 7412 |
else {
|
| 7413 |
$to = end( $dates ); // set highest date to the highest dtstart date
|
| 7414 |
$dateTo = new DateTime( $to.'T235959', $dtz );
|
| 7415 |
-
$dateTo->modify( '+
|
| 7416 |
$dateTo->setTimezone( $utcTz ); // convert local date to UTC
|
| 7417 |
}
|
| 7418 |
$dateToYmd = $dateTo->format('Y-m-d' );
|
|
@@ -7487,7 +7205,7 @@ class iCalUtilityFunctions {
|
|
| 7487 |
}
|
| 7488 |
}
|
| 7489 |
unset( $transitions, $date, $prevTrans );
|
| 7490 |
-
foreach( $transTemp as $tix => $trans ) {
|
| 7491 |
$type = ( TRUE !== $trans['isdst'] ) ? 'standard' : 'daylight';
|
| 7492 |
$scomp = & $tz->newComponent( $type );
|
| 7493 |
$scomp->setProperty( 'dtstart', $trans['time'] );
|
|
@@ -7541,7 +7259,7 @@ class iCalUtilityFunctions {
|
|
| 7541 |
$offset = iCalUtilityFunctions::_tz2offset( $datetime['tz'] );
|
| 7542 |
try {
|
| 7543 |
$d = new DateTime( $output, new DateTimeZone( 'UTC' ));
|
| 7544 |
-
if( 0 != $offset ) // adjust
|
| 7545 |
$d->modify( "$offset seconds" );
|
| 7546 |
$output = $d->format( 'Ymd\THis' );
|
| 7547 |
}
|
|
@@ -7597,7 +7315,7 @@ class iCalUtilityFunctions {
|
|
| 7597 |
* ensures internal duration format for input in array format
|
| 7598 |
*
|
| 7599 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7600 |
-
* @since 2.
|
| 7601 |
* @param array $duration
|
| 7602 |
* @return array
|
| 7603 |
*/
|
|
@@ -7605,47 +7323,42 @@ class iCalUtilityFunctions {
|
|
| 7605 |
return iCalUtilityFunctions::_duration2arr( $duration );
|
| 7606 |
}
|
| 7607 |
public static function _duration2arr( $duration ) {
|
| 7608 |
-
$
|
| 7609 |
-
|
| 7610 |
-
|
| 7611 |
-
|
| 7612 |
-
|
| 7613 |
-
|
| 7614 |
-
|
| 7615 |
-
|
| 7616 |
-
|
| 7617 |
-
|
| 7618 |
-
|
| 7619 |
-
|
| 7620 |
-
|
| 7621 |
-
|
| 7622 |
-
|
| 7623 |
-
|
| 7624 |
-
|
| 7625 |
-
|
| 7626 |
-
|
| 7627 |
-
case '0': case 'week': $output['week'] = $durValue; break;
|
| 7628 |
-
case '1': case 'day': $output['day'] = $durValue; break;
|
| 7629 |
-
case '2': case 'hour': $output['hour'] = $durValue; break;
|
| 7630 |
-
case '3': case 'min': $output['min'] = $durValue; break;
|
| 7631 |
-
case '4': case 'sec': $output['sec'] = $durValue; break;
|
| 7632 |
-
}
|
| 7633 |
}
|
| 7634 |
}
|
| 7635 |
-
|
| 7636 |
-
|
|
|
|
| 7637 |
return $output;
|
| 7638 |
-
}
|
| 7639 |
unset( $output['week'] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7640 |
if( empty( $output['day'] ))
|
| 7641 |
unset( $output['day'] );
|
| 7642 |
-
if
|
| 7643 |
-
|
| 7644 |
-
if( !isset( $output['min'] )) $output['min'] = 0;
|
| 7645 |
-
if( !isset( $output['sec'] )) $output['sec'] = 0;
|
| 7646 |
-
if(( 0 == $output['hour'] ) && ( 0 == $output['min'] ) && ( 0 == $output['sec'] ))
|
| 7647 |
-
unset( $output['hour'], $output['min'], $output['sec'] );
|
| 7648 |
-
}
|
| 7649 |
return $output;
|
| 7650 |
}
|
| 7651 |
/**
|
|
@@ -7797,18 +7510,31 @@ class iCalUtilityFunctions {
|
|
| 7797 |
}
|
| 7798 |
return $elseVal;
|
| 7799 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7800 |
/**
|
| 7801 |
* checks if input contains a (array formatted) date/time
|
| 7802 |
*
|
| 7803 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7804 |
-
* @since 2.
|
| 7805 |
* @param array $input
|
| 7806 |
* @return bool
|
| 7807 |
*/
|
| 7808 |
public static function _isArrayDate( $input ) {
|
| 7809 |
-
if( !is_array( $input ))
|
| 7810 |
-
return FALSE;
|
| 7811 |
-
if( isset( $input['week'] ) || ( !in_array( count( $input ), array( 3, 6, 7 ))))
|
| 7812 |
return FALSE;
|
| 7813 |
if( 7 == count( $input ))
|
| 7814 |
return TRUE;
|
|
@@ -7816,12 +7542,12 @@ class iCalUtilityFunctions {
|
|
| 7816 |
return checkdate( (int) $input['month'], (int) $input['day'], (int) $input['year'] );
|
| 7817 |
if( isset( $input['day'] ) || isset( $input['hour'] ) || isset( $input['min'] ) || isset( $input['sec'] ))
|
| 7818 |
return FALSE;
|
| 7819 |
-
if(
|
| 7820 |
return FALSE;
|
| 7821 |
if(( 1970 > $input[0] ) || ( 12 < $input[1] ) || ( 31 < $input[2] ))
|
| 7822 |
return FALSE;
|
| 7823 |
if(( isset( $input[0] ) && isset( $input[1] ) && isset( $input[2] )) &&
|
| 7824 |
-
checkdate(
|
| 7825 |
return TRUE;
|
| 7826 |
$input = iCalUtilityFunctions::_strdate2date( $input[1].'/'.$input[2].'/'.$input[0], 3 ); // m - d - Y
|
| 7827 |
if( isset( $input['year'] ) && isset( $input['month'] ) && isset( $input['day'] ))
|
|
@@ -7972,24 +7698,6 @@ class iCalUtilityFunctions {
|
|
| 7972 |
*
|
| 7973 |
* if missing, UNTIL is set 1 year from startdate (emergency break)
|
| 7974 |
*
|
| 7975 |
-
* Some additional data from the author
|
| 7976 |
-
* The $result array is an array([timestamp] => TRUE).
|
| 7977 |
-
*
|
| 7978 |
-
* The $startdate and $enddate arguments describes the period start and end
|
| 7979 |
-
* dates where recurrences may appear.
|
| 7980 |
-
*
|
| 7981 |
-
* The $wdate arg. is the component start date (DTSTART), lower than end date.
|
| 7982 |
-
*
|
| 7983 |
-
* The format of the input $wdate, $startdate and $enddate args. are the
|
| 7984 |
-
* iCalcreator internal date format (array( 'year' =>.., 'month' =>.. 'day'
|
| 7985 |
-
* => .., 'hour' => .., 'min'=> .., 'sec' => .. )).
|
| 7986 |
-
* The function do not do any timezone convertions, I don't think it matters
|
| 7987 |
-
* here, only managing YMD dates.
|
| 7988 |
-
*
|
| 7989 |
-
* You can find a brief overview of the $recur array at
|
| 7990 |
-
* kigkonsult.se/iCalcreator/docs/using.html#EXRULE,
|
| 7991 |
-
* also output of calendarComponent::getProperty( "RRULE" ).
|
| 7992 |
-
*
|
| 7993 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7994 |
* @since 2.10.19 - 2011-10-31
|
| 7995 |
* @param array $result, array to update, array([timestamp] => timestamp)
|
|
@@ -8009,7 +7717,7 @@ class iCalUtilityFunctions {
|
|
| 8009 |
$enddate = $startdate;
|
| 8010 |
$enddate['year'] += 1;
|
| 8011 |
}
|
| 8012 |
-
// echo "recur __in_ comp start ".implode('-',$wdate)." period start ".implode('-',$startdate)." period end ".implode('-',$enddate)."<br
|
| 8013 |
$endDatets = iCalUtilityFunctions::_date2timestamp( $enddate ); // fix break
|
| 8014 |
if( !isset( $recur['COUNT'] ) && !isset( $recur['UNTIL'] ))
|
| 8015 |
$recur['UNTIL'] = $enddate; // create break
|
|
@@ -8023,7 +7731,7 @@ class iCalUtilityFunctions {
|
|
| 8023 |
$recur['UNTIL'] = iCalUtilityFunctions::_timestamp2date( $endDatets, 6 );
|
| 8024 |
}
|
| 8025 |
if( $wdatets > $endDatets ) {
|
| 8026 |
-
// echo "recur out of date ".date('Y-m-d H:i:s',$wdatets)."<br
|
| 8027 |
return array(); // nothing to do.. .
|
| 8028 |
}
|
| 8029 |
if( !isset( $recur['FREQ'] )) // "MUST be specified.. ."
|
|
@@ -8056,7 +7764,7 @@ class iCalUtilityFunctions {
|
|
| 8056 |
}
|
| 8057 |
if( isset( $recur['BYSETPOS'] )) { // save start date + weekno
|
| 8058 |
$bysetposymd1 = $bysetposymd2 = $bysetposw1 = $bysetposw2 = array();
|
| 8059 |
-
// echo "bysetposXold_start=$bysetposYold $bysetposMold $bysetposDold<br
|
| 8060 |
if( is_array( $recur['BYSETPOS'] )) {
|
| 8061 |
foreach( $recur['BYSETPOS'] as $bix => $bval )
|
| 8062 |
$recur['BYSETPOS'][$bix] = (int) $bval;
|
|
@@ -8075,7 +7783,7 @@ class iCalUtilityFunctions {
|
|
| 8075 |
}
|
| 8076 |
else
|
| 8077 |
iCalUtilityFunctions::_stepdate( $enddate, $endDatets, $step); // make sure to count whole last period
|
| 8078 |
-
// echo "BYSETPOS endDat++ =".implode('-',$enddate).' step='.var_export($step,TRUE)."<br
|
| 8079 |
$bysetposWold = (int) date( 'W', ( $wdatets + $wkst ));
|
| 8080 |
$bysetposYold = $wdate['year'];
|
| 8081 |
$bysetposMold = $wdate['month'];
|
|
@@ -8086,7 +7794,7 @@ class iCalUtilityFunctions {
|
|
| 8086 |
$year_old = null;
|
| 8087 |
$daynames = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA' );
|
| 8088 |
/* MAIN LOOP */
|
| 8089 |
-
// echo "recur start ".implode('-',$wdate)." end ".implode('-',$enddate)."<br
|
| 8090 |
while( TRUE ) {
|
| 8091 |
if( isset( $endDatets ) && ( $wdatets > $endDatets ))
|
| 8092 |
break;
|
|
@@ -8176,13 +7884,13 @@ class iCalUtilityFunctions {
|
|
| 8176 |
if(( $recur['INTERVAL'] != $intervalarr[$intervalix] ) &&
|
| 8177 |
( 0 != $intervalarr[$intervalix] )) {
|
| 8178 |
/* step up date */
|
| 8179 |
-
// echo "skip: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br
|
| 8180 |
iCalUtilityFunctions::_stepdate( $wdate, $wdatets, $step);
|
| 8181 |
continue;
|
| 8182 |
}
|
| 8183 |
else // continue within the selected interval
|
| 8184 |
$intervalarr[$intervalix] = 0;
|
| 8185 |
-
// echo "cont: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br
|
| 8186 |
}
|
| 8187 |
$updateOK = TRUE;
|
| 8188 |
if( $updateOK && isset( $recur['BYMONTH'] ))
|
|
@@ -8201,7 +7909,7 @@ class iCalUtilityFunctions {
|
|
| 8201 |
$updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYMONTHDAY']
|
| 8202 |
, $wdate['day']
|
| 8203 |
, $daycnts[$wdate['month']][$wdate['day']]['monthcnt_down'] );
|
| 8204 |
-
// echo "efter BYMONTHDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br
|
| 8205 |
if( $updateOK && isset( $recur['BYDAY'] )) {
|
| 8206 |
$updateOK = FALSE;
|
| 8207 |
$m = $wdate['month'];
|
|
@@ -8224,9 +7932,9 @@ class iCalUtilityFunctions {
|
|
| 8224 |
if(( $daynoexists && $daynosw && $daynamesw ) ||
|
| 8225 |
( !$daynoexists && !$daynosw && $daynamesw )) {
|
| 8226 |
$updateOK = TRUE;
|
| 8227 |
-
// echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br
|
| 8228 |
}
|
| 8229 |
-
//echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br
|
| 8230 |
}
|
| 8231 |
else {
|
| 8232 |
foreach( $recur['BYDAY'] as $bydayvalue ) {
|
|
@@ -8246,7 +7954,7 @@ class iCalUtilityFunctions {
|
|
| 8246 |
, $daycnts[$m][$d]['yeardayno_up']
|
| 8247 |
, $daycnts[$m][$d]['yeardayno_down'] );
|
| 8248 |
}
|
| 8249 |
-
// echo "daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw<br
|
| 8250 |
if(( $daynoexists && $daynosw && $daynamesw ) ||
|
| 8251 |
( !$daynoexists && !$daynosw && $daynamesw )) {
|
| 8252 |
$updateOK = TRUE;
|
|
@@ -8255,7 +7963,7 @@ class iCalUtilityFunctions {
|
|
| 8255 |
}
|
| 8256 |
}
|
| 8257 |
}
|
| 8258 |
-
// echo "efter BYDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br
|
| 8259 |
/* check BYSETPOS */
|
| 8260 |
if( $updateOK ) {
|
| 8261 |
if( isset( $recur['BYSETPOS'] ) &&
|
|
@@ -8276,11 +7984,11 @@ class iCalUtilityFunctions {
|
|
| 8276 |
(( $bysetposYold == $wdate['year'] ) &&
|
| 8277 |
( $bysetposMold == $wdate['month']) &&
|
| 8278 |
( $bysetposDold == $wdate['day'] )))) {
|
| 8279 |
-
// echo "bysetposymd1[]=".date('Y-m-d H:i:s',$wdatets)."<br
|
| 8280 |
$bysetposymd1[] = $wdatets;
|
| 8281 |
}
|
| 8282 |
else {
|
| 8283 |
-
// echo "bysetposymd2[]=".date('Y-m-d H:i:s',$wdatets)."<br
|
| 8284 |
$bysetposymd2[] = $wdatets;
|
| 8285 |
}
|
| 8286 |
}
|
|
@@ -8290,9 +7998,9 @@ class iCalUtilityFunctions {
|
|
| 8290 |
$countcnt++;
|
| 8291 |
if( $startdatets <= $wdatets ) { // only output within period
|
| 8292 |
$result[$wdatets] = TRUE;
|
| 8293 |
-
// echo "recur ".date('Y-m-d H:i:s',$wdatets)."<br
|
| 8294 |
}
|
| 8295 |
-
// echo "recur undate ".date('Y-m-d H:i:s',$wdatets)." okdatstart ".date('Y-m-d H:i:s',$startdatets)."<br
|
| 8296 |
$updateOK = FALSE;
|
| 8297 |
}
|
| 8298 |
}
|
|
@@ -8337,7 +8045,7 @@ class iCalUtilityFunctions {
|
|
| 8337 |
$bysetposarr1 = & $bysetposymd1;
|
| 8338 |
$bysetposarr2 = & $bysetposymd2;
|
| 8339 |
}
|
| 8340 |
-
// echo 'test
|
| 8341 |
foreach( $recur['BYSETPOS'] as $ix ) {
|
| 8342 |
if( 0 > $ix ) // both positive and negative BYSETPOS allowed
|
| 8343 |
$ix = ( count( $bysetposarr1 ) + $ix + 1);
|
|
@@ -8355,7 +8063,7 @@ class iCalUtilityFunctions {
|
|
| 8355 |
if( isset( $recur['COUNT'] ) && ( $countcnt >= $recur['COUNT'] ))
|
| 8356 |
break;
|
| 8357 |
}
|
| 8358 |
-
// echo "<br
|
| 8359 |
$bysetposarr1 = $bysetposarr2;
|
| 8360 |
$bysetposarr2 = array();
|
| 8361 |
}
|
|
@@ -8391,11 +8099,84 @@ class iCalUtilityFunctions {
|
|
| 8391 |
}
|
| 8392 |
return $intervalix;
|
| 8393 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8394 |
/**
|
| 8395 |
* convert input format for exrule and rrule to internal format
|
| 8396 |
*
|
| 8397 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8398 |
-
* @since 2.
|
| 8399 |
* @param array $rexrule
|
| 8400 |
* @return array
|
| 8401 |
*/
|
|
@@ -8403,8 +8184,8 @@ class iCalUtilityFunctions {
|
|
| 8403 |
$input = array();
|
| 8404 |
if( empty( $rexrule ))
|
| 8405 |
return $input;
|
|
|
|
| 8406 |
foreach( $rexrule as $rexrulelabel => $rexrulevalue ) {
|
| 8407 |
-
$rexrulelabel = strtoupper( $rexrulelabel );
|
| 8408 |
if( 'UNTIL' != $rexrulelabel )
|
| 8409 |
$input[$rexrulelabel] = $rexrulevalue;
|
| 8410 |
else {
|
|
@@ -8485,7 +8266,7 @@ class iCalUtilityFunctions {
|
|
| 8485 |
* convert format for input date to internal date with parameters
|
| 8486 |
*
|
| 8487 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8488 |
-
* @since 2.
|
| 8489 |
* @param mixed $year
|
| 8490 |
* @param mixed $month optional
|
| 8491 |
* @param int $day optional
|
|
@@ -8504,7 +8285,7 @@ class iCalUtilityFunctions {
|
|
| 8504 |
$localtime = (( 'dtstart' == $caller ) && in_array( $objName, array( 'vtimezone', 'standard', 'daylight' ))) ? TRUE : FALSE;
|
| 8505 |
iCalUtilityFunctions::_strDate2arr( $year );
|
| 8506 |
if( iCalUtilityFunctions::_isArrayDate( $year )) {
|
| 8507 |
-
$input['value'] = iCalUtilityFunctions::_chkDateArr( $year,
|
| 8508 |
if( 100 > $input['value']['year'] )
|
| 8509 |
$input['value']['year'] += 2000;
|
| 8510 |
if( $localtime )
|
|
@@ -8513,7 +8294,7 @@ class iCalUtilityFunctions {
|
|
| 8513 |
$month['TZID'] = $tzid;
|
| 8514 |
if( isset( $input['value']['tz'] ) && iCalUtilityFunctions::_isOffset( $input['value']['tz'] ))
|
| 8515 |
unset( $month['TZID'] );
|
| 8516 |
-
elseif( isset( $month['TZID'] ) && iCalUtilityFunctions::_isOffset( $month['TZID'] )) {
|
| 8517 |
$input['value']['tz'] = $month['TZID'];
|
| 8518 |
unset( $month['TZID'] );
|
| 8519 |
}
|
|
@@ -8521,7 +8302,9 @@ class iCalUtilityFunctions {
|
|
| 8521 |
$hitval = ( isset( $input['value']['tz'] )) ? 7 : 6;
|
| 8522 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval );
|
| 8523 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, count( $input['value'] ), $parno );
|
| 8524 |
-
if(
|
|
|
|
|
|
|
| 8525 |
$d = $input['value'];
|
| 8526 |
$strdate = sprintf( '%04d-%02d-%02d %02d:%02d:%02d %s', $d['year'], $d['month'], $d['day'], $d['hour'], $d['min'], $d['sec'], $d['tz'] );
|
| 8527 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $strdate, $parno );
|
|
@@ -8538,20 +8321,37 @@ class iCalUtilityFunctions {
|
|
| 8538 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3 );
|
| 8539 |
$hitval = 7;
|
| 8540 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval, $parno );
|
| 8541 |
-
if(
|
| 8542 |
-
$
|
| 8543 |
-
if( isset( $year['tz'] )) {
|
| 8544 |
-
$parno = 6;
|
| 8545 |
-
if( !iCalUtilityFunctions::_isOffset( $year['tz'] ))
|
| 8546 |
$input['params']['TZID'] = $year['tz'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8547 |
}
|
| 8548 |
-
elseif( isset( $input['params']['TZID'] )) {
|
| 8549 |
-
$year['tz'] = $input['params']['TZID'];
|
| 8550 |
-
$parno = 6;
|
| 8551 |
if( iCalUtilityFunctions::_isOffset( $input['params']['TZID'] )) {
|
| 8552 |
-
|
| 8553 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8554 |
}
|
|
|
|
|
|
|
| 8555 |
}
|
| 8556 |
$input['value'] = iCalUtilityFunctions::_timestamp2date( $year, $parno );
|
| 8557 |
} // end elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year ))
|
|
@@ -8564,6 +8364,8 @@ class iCalUtilityFunctions {
|
|
| 8564 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7, $parno );
|
| 8565 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, $parno, $parno );
|
| 8566 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $year, $parno );
|
|
|
|
|
|
|
| 8567 |
unset( $input['value']['unparsedtext'] );
|
| 8568 |
if( isset( $input['value']['tz'] )) {
|
| 8569 |
if( iCalUtilityFunctions::_isOffset( $input['value']['tz'] )) {
|
|
@@ -8670,7 +8472,7 @@ class iCalUtilityFunctions {
|
|
| 8670 |
* convert format for input date (UTC) to internal date with parameters
|
| 8671 |
*
|
| 8672 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8673 |
-
* @since 2.
|
| 8674 |
* @param mixed $year
|
| 8675 |
* @param mixed $month optional
|
| 8676 |
* @param int $day optional
|
|
@@ -8688,22 +8490,43 @@ class iCalUtilityFunctions {
|
|
| 8688 |
if( isset( $input['value']['year'] ) && ( 100 > $input['value']['year'] ))
|
| 8689 |
$input['value']['year'] += 2000;
|
| 8690 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
| 8691 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8692 |
$d = $input['value'];
|
| 8693 |
-
$strdate = sprintf( '%04d-%02d-%02d %02d:%02d:%02d %s', $d['year'], $d['month'], $d['day'], $d['hour'], $d['min'], $d['sec'], $
|
| 8694 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $strdate, 7 );
|
| 8695 |
unset( $input['value']['unparsedtext'] );
|
| 8696 |
}
|
| 8697 |
}
|
| 8698 |
elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year )) {
|
| 8699 |
-
$year['tz']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8700 |
$input['value'] = iCalUtilityFunctions::_timestamp2date( $year, 7 );
|
| 8701 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
|
|
|
| 8702 |
}
|
| 8703 |
elseif( 8 <= strlen( trim( $year ))) { // ex. 2006-08-03 10:12:18
|
| 8704 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $year, 7 );
|
| 8705 |
unset( $input['value']['unparsedtext'] );
|
| 8706 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8707 |
}
|
| 8708 |
else {
|
| 8709 |
$input['value'] = array( 'year' => $year
|
|
@@ -8723,6 +8546,7 @@ class iCalUtilityFunctions {
|
|
| 8723 |
unset( $input['value']['unparsedtext'] );
|
| 8724 |
}
|
| 8725 |
$input['params'] = iCalUtilityFunctions::_setParams( $params, array( 'VALUE' => 'DATE-TIME' ));
|
|
|
|
| 8726 |
}
|
| 8727 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7 ); // remove default
|
| 8728 |
if( !isset( $input['value']['hour'] )) $input['value']['hour'] = 0;
|
|
@@ -8762,7 +8586,7 @@ class iCalUtilityFunctions {
|
|
| 8762 |
* default parameters can be set, if missing
|
| 8763 |
*
|
| 8764 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8765 |
-
* @since
|
| 8766 |
* @param array $params
|
| 8767 |
* @param array $defaults
|
| 8768 |
* @return array
|
|
@@ -8770,7 +8594,8 @@ class iCalUtilityFunctions {
|
|
| 8770 |
public static function _setParams( $params, $defaults=FALSE ) {
|
| 8771 |
if( !is_array( $params))
|
| 8772 |
$params = array();
|
| 8773 |
-
$input
|
|
|
|
| 8774 |
foreach( $params as $paramKey => $paramValue ) {
|
| 8775 |
if( is_array( $paramValue )) {
|
| 8776 |
foreach( $paramValue as $pkey => $pValue ) {
|
|
@@ -8780,10 +8605,10 @@ class iCalUtilityFunctions {
|
|
| 8780 |
}
|
| 8781 |
elseif(( '"' == substr( $paramValue, 0, 1 )) && ( '"' == substr( $paramValue, -1 )))
|
| 8782 |
$paramValue = substr( $paramValue, 1, ( strlen( $paramValue ) - 2 ));
|
| 8783 |
-
if( 'VALUE' ==
|
| 8784 |
-
$input['VALUE']
|
| 8785 |
else
|
| 8786 |
-
$input[
|
| 8787 |
}
|
| 8788 |
if( is_array( $defaults )) {
|
| 8789 |
foreach( $defaults as $paramKey => $paramValue ) {
|
|
@@ -8793,6 +8618,283 @@ class iCalUtilityFunctions {
|
|
| 8793 |
}
|
| 8794 |
return (0 < count( $input )) ? $input : null;
|
| 8795 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8796 |
/**
|
| 8797 |
* step date, return updated date, array and timpstamp
|
| 8798 |
*
|
|
@@ -8879,7 +8981,7 @@ class iCalUtilityFunctions {
|
|
| 8879 |
* ensures internal date-time/date format for input date-time/date in string fromat
|
| 8880 |
*
|
| 8881 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8882 |
-
* @since 2.
|
| 8883 |
* Modified to also return original string value by Yitzchok Lavi <icalcreator@onebigsystem.com>
|
| 8884 |
* @param array $datetime
|
| 8885 |
* @param int $parno optional, default FALSE
|
|
@@ -8901,17 +9003,14 @@ class iCalUtilityFunctions {
|
|
| 8901 |
$tz = 'Z';
|
| 8902 |
$datetime = trim( substr( $datetime, 0, ( $len - 1 )));
|
| 8903 |
$tzSts = TRUE;
|
| 8904 |
-
$len = 88;
|
| 8905 |
}
|
| 8906 |
if( iCalUtilityFunctions::_isOffset( substr( $datetime, -5, 5 ))) { // [+/-]NNNN offset
|
| 8907 |
$tz = substr( $datetime, -5, 5 );
|
| 8908 |
$datetime = trim( substr( $datetime, 0, ($len - 5)));
|
| 8909 |
-
$len = strlen( $datetime );
|
| 8910 |
}
|
| 8911 |
elseif( iCalUtilityFunctions::_isOffset( substr( $datetime, -7, 7 ))) { // [+/-]NNNNNN offset
|
| 8912 |
$tz = substr( $datetime, -7, 7 );
|
| 8913 |
$datetime = trim( substr( $datetime, 0, ($len - 7)));
|
| 8914 |
-
$len = strlen( $datetime );
|
| 8915 |
}
|
| 8916 |
elseif( empty( $wtz ) && ctype_digit( substr( $datetime, 0, 4 )) && ctype_digit( substr( $datetime, -2, 2 )) && iCalUtilityFunctions::_strDate2arr( $datetime )) {
|
| 8917 |
$output = $datetime;
|
|
@@ -8922,9 +9021,10 @@ class iCalUtilityFunctions {
|
|
| 8922 |
}
|
| 8923 |
else {
|
| 8924 |
$cx = $tx = 0; // find any trailing timezone or offset
|
|
|
|
| 8925 |
for( $cx = -1; $cx > ( 9 - $len ); $cx-- ) {
|
| 8926 |
$char = substr( $datetime, $cx, 1 );
|
| 8927 |
-
if(( ' ' == $char) || ctype_digit( $char ))
|
| 8928 |
break; // if exists, tz ends here.. . ?
|
| 8929 |
else
|
| 8930 |
$tx--; // tz length counter
|
|
@@ -8932,22 +9032,16 @@ class iCalUtilityFunctions {
|
|
| 8932 |
if( 0 > $tx ) { // if any
|
| 8933 |
$tz = substr( $datetime, $tx );
|
| 8934 |
$datetime = trim( substr( $datetime, 0, $len + $tx ));
|
| 8935 |
-
$len = strlen( $datetime );
|
| 8936 |
}
|
| 8937 |
-
if((
|
| 8938 |
-
( ctype_digit( substr( $datetime, 0,
|
| 8939 |
-
( ctype_digit( substr( $datetime, 0, 14 )))) {
|
| 8940 |
-
$len = 88;
|
| 8941 |
$tzSts = TRUE;
|
| 8942 |
-
}
|
| 8943 |
-
else
|
| 8944 |
-
$tz = null; // no tz for Y-m-d dates
|
| 8945 |
}
|
| 8946 |
if( empty( $tz ) && !empty( $wtz ))
|
| 8947 |
$tz = $wtz;
|
| 8948 |
-
if(
|
| 8949 |
$tz = null;
|
| 8950 |
-
if( !empty( $tz )
|
| 8951 |
if(( 'Z' != $tz ) && ( iCalUtilityFunctions::_isOffset( $tz ))) {
|
| 8952 |
$offset = (string) iCalUtilityFunctions::_tz2offset( $tz ) * -1;
|
| 8953 |
$tz = 'UTC';
|
|
@@ -8970,17 +9064,14 @@ class iCalUtilityFunctions {
|
|
| 8970 |
catch( Exception $e ) {
|
| 8971 |
$datestring = date( 'Y-m-d-H-i-s', strtotime( $datetime ));
|
| 8972 |
}
|
| 8973 |
-
} // end if( !empty( $tz )
|
| 8974 |
else
|
| 8975 |
$datestring = date( 'Y-m-d-H-i-s', strtotime( $datetime ));
|
| 8976 |
-
// echo "<tr><td> <td colspan='3'>_strdate2date input=$datetime, tz=$tz, offset=$offset, wtz=$wtz, len=$len, prepDate=$datestring\n";
|
| 8977 |
if( 'UTC' == $tz )
|
| 8978 |
$tz = 'Z';
|
| 8979 |
$d = explode( '-', $datestring );
|
| 8980 |
$output = array( 'year' => $d[0], 'month' => $d[1], 'day' => $d[2] );
|
| 8981 |
-
if(
|
| 8982 |
-
(( FALSE === $parno ) && ( 'Z' == $tz )) || // parno is not set and UTC
|
| 8983 |
-
(( FALSE === $parno ) && ( 'Z' != $tz ) && ( 0 != $d[3] + $d[4] + $d[5] ) && ( 17 < $len ))) { // !parno and !UTC and 0 != hour+min+sec and long input text
|
| 8984 |
$output['hour'] = $d[3];
|
| 8985 |
$output['min'] = $d[4];
|
| 8986 |
$output['sec'] = $d[5];
|
|
@@ -8991,6 +9082,70 @@ class iCalUtilityFunctions {
|
|
| 8991 |
$output['unparsedtext'] = $unparseddatetime;
|
| 8992 |
return $output;
|
| 8993 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8994 |
/**
|
| 8995 |
* convert timestamp to date array, default UTC or adjusted for offset/timezone
|
| 8996 |
*
|
|
@@ -9007,15 +9162,16 @@ class iCalUtilityFunctions {
|
|
| 9007 |
$timestamp = $timestamp['timestamp'];
|
| 9008 |
}
|
| 9009 |
$tz = ( isset( $tz )) ? $tz : $wtz;
|
|
|
|
| 9010 |
if( empty( $tz ) || ( 'Z' == $tz ) || ( 'GMT' == strtoupper( $tz )))
|
| 9011 |
$tz = 'UTC';
|
| 9012 |
elseif( iCalUtilityFunctions::_isOffset( $tz )) {
|
| 9013 |
$offset = iCalUtilityFunctions::_tz2offset( $tz );
|
| 9014 |
-
$tz = 'UTC';
|
| 9015 |
}
|
| 9016 |
try {
|
| 9017 |
$d = new DateTime( "@$timestamp" ); // set UTC date
|
| 9018 |
-
if(
|
| 9019 |
$d->modify( $offset.' seconds' );
|
| 9020 |
elseif( 'UTC' != $tz )
|
| 9021 |
$d->setTimezone( new DateTimeZone( $tz )); // convert to local date
|
|
@@ -9031,7 +9187,7 @@ class iCalUtilityFunctions {
|
|
| 9031 |
$output['hour'] = $date[3];
|
| 9032 |
$output['min'] = $date[4];
|
| 9033 |
$output['sec'] = $date[5];
|
| 9034 |
-
if( 'UTC' == $tz
|
| 9035 |
$output['tz'] = 'Z';
|
| 9036 |
}
|
| 9037 |
return $output;
|
|
@@ -9092,7 +9248,7 @@ class iCalUtilityFunctions {
|
|
| 9092 |
return TRUE;
|
| 9093 |
}
|
| 9094 |
/**
|
| 9095 |
-
* convert offset, [+/-]HHmm[ss], to seconds used when correcting UTC to localtime or v.v.
|
| 9096 |
*
|
| 9097 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9098 |
* @since 2.11.4 - 2012-01-11
|
|
@@ -9259,20 +9415,21 @@ function iCal2vCards( & $calendar, $version='2.1', $directory=FALSE, $ext='vcf'
|
|
| 9259 |
* format iCal XML output, rfc6321, using PHP SimpleXMLElement
|
| 9260 |
*
|
| 9261 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9262 |
-
* @since 2.
|
| 9263 |
* @param object $calendar, iCalcreator vcalendar instance reference
|
| 9264 |
* @return string
|
| 9265 |
*/
|
| 9266 |
function iCal2XML( & $calendar ) {
|
| 9267 |
/** fix an SimpleXMLElement instance and create root element */
|
| 9268 |
-
$xmlstr
|
| 9269 |
-
$xmlstr
|
| 9270 |
-
$xmlstr
|
| 9271 |
-
$
|
| 9272 |
-
$
|
|
|
|
| 9273 |
/** fix calendar properties */
|
| 9274 |
-
$properties
|
| 9275 |
-
$calProps
|
| 9276 |
foreach( $calProps as $calProp ) {
|
| 9277 |
if( FALSE !== ( $content = $calendar->getProperty( $calProp )))
|
| 9278 |
_addXMLchild( $properties, $calProp, 'text', $content );
|
|
@@ -9281,39 +9438,184 @@ function iCal2XML( & $calendar ) {
|
|
| 9281 |
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9282 |
$langCal = $calendar->getConfig( 'language' );
|
| 9283 |
/** prepare to fix components with properties */
|
| 9284 |
-
$components
|
| 9285 |
-
$comps = array( 'vtimezone', 'vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 9286 |
-
foreach( $comps as $compName ) {
|
| 9287 |
-
switch( $compName ) {
|
| 9288 |
-
case 'vevent':
|
| 9289 |
-
case 'vtodo':
|
| 9290 |
-
$subComps = array( 'valarm' );
|
| 9291 |
-
break;
|
| 9292 |
-
case 'vjournal':
|
| 9293 |
-
case 'vfreebusy':
|
| 9294 |
-
$subComps = array();
|
| 9295 |
-
break;
|
| 9296 |
-
case 'vtimezone':
|
| 9297 |
-
$subComps = array( 'standard', 'daylight' );
|
| 9298 |
-
break;
|
| 9299 |
-
} // end switch( $compName )
|
| 9300 |
/** fix component properties */
|
| 9301 |
-
|
| 9302 |
-
|
| 9303 |
-
|
| 9304 |
-
|
| 9305 |
-
|
| 9306 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9307 |
switch( strtolower( $prop )) {
|
| 9308 |
case 'attach': // may occur multiple times, below
|
| 9309 |
-
while( FALSE !== ( $content = $
|
| 9310 |
$type = ( isset( $content['params']['VALUE'] ) && ( 'BINARY' == $content['params']['VALUE'] )) ? 'binary' : 'uri';
|
| 9311 |
unset( $content['params']['VALUE'] );
|
| 9312 |
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9313 |
}
|
| 9314 |
break;
|
| 9315 |
case 'attendee':
|
| 9316 |
-
while( FALSE !== ( $content = $
|
| 9317 |
if( isset( $content['params']['CN'] ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9318 |
if( $langComp )
|
| 9319 |
$content['params']['LANGUAGE'] = $langComp;
|
|
@@ -9323,35 +9625,20 @@ function iCal2XML( & $calendar ) {
|
|
| 9323 |
_addXMLchild( $properties, $prop, 'cal-address', $content['value'], $content['params'] );
|
| 9324 |
}
|
| 9325 |
break;
|
| 9326 |
-
case '
|
| 9327 |
-
|
| 9328 |
-
|
| 9329 |
-
unset( $content['params']['VALUE'] );
|
| 9330 |
-
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9331 |
-
}
|
| 9332 |
-
break;
|
| 9333 |
-
case 'freebusy':
|
| 9334 |
-
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9335 |
-
if( is_array( $content ) && isset( $content['value']['fbtype'] )) {
|
| 9336 |
-
$content['params']['FBTYPE'] = $content['value']['fbtype'];
|
| 9337 |
-
unset( $content['value']['fbtype'] );
|
| 9338 |
-
}
|
| 9339 |
-
_addXMLchild( $properties, $prop, 'period', $content['value'], $content['params'] );
|
| 9340 |
-
}
|
| 9341 |
-
break;
|
| 9342 |
-
case 'request-status':
|
| 9343 |
-
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9344 |
if( !isset( $content['params']['LANGUAGE'] )) {
|
| 9345 |
if( $langComp )
|
| 9346 |
$content['params']['LANGUAGE'] = $langComp;
|
| 9347 |
elseif( $langCal )
|
| 9348 |
$content['params']['LANGUAGE'] = $langCal;
|
| 9349 |
}
|
| 9350 |
-
_addXMLchild( $properties, $prop, '
|
| 9351 |
}
|
| 9352 |
break;
|
| 9353 |
case 'rdate':
|
| 9354 |
-
while( FALSE !== ( $content = $
|
| 9355 |
$type = 'date-time';
|
| 9356 |
if( isset( $content['params']['VALUE'] )) {
|
| 9357 |
if( 'DATE' == $content['params']['VALUE'] )
|
|
@@ -9363,14 +9650,15 @@ function iCal2XML( & $calendar ) {
|
|
| 9363 |
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9364 |
}
|
| 9365 |
break;
|
| 9366 |
-
case '
|
| 9367 |
-
|
| 9368 |
-
|
|
|
|
|
|
|
| 9369 |
case 'description':
|
| 9370 |
-
case '
|
| 9371 |
-
|
| 9372 |
-
|
| 9373 |
-
if(( 'related-to' != $prop ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9374 |
if( $langComp )
|
| 9375 |
$content['params']['LANGUAGE'] = $langComp;
|
| 9376 |
elseif( $langCal )
|
|
@@ -9379,203 +9667,54 @@ function iCal2XML( & $calendar ) {
|
|
| 9379 |
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9380 |
}
|
| 9381 |
break;
|
| 9382 |
-
case 'x-prop':
|
| 9383 |
-
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9384 |
-
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9385 |
-
break;
|
| 9386 |
-
case 'created': // single occurence below, if set
|
| 9387 |
-
case 'completed':
|
| 9388 |
-
case 'dtstamp':
|
| 9389 |
-
case 'last-modified':
|
| 9390 |
-
$utcDate = TRUE;
|
| 9391 |
case 'dtstart':
|
| 9392 |
-
|
| 9393 |
-
|
| 9394 |
-
|
| 9395 |
-
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9396 |
-
$type = ( isset( $content['params']['VALUE'] ) && ( 'DATE' == $content['params']['VALUE'] )) ? 'date' : 'date-time';
|
| 9397 |
-
unset( $content['params']['VALUE'] );
|
| 9398 |
-
if(( isset( $content['params']['TZID'] ) && empty( $content['params']['TZID'] )) || @is_null( $content['params']['TZID'] ))
|
| 9399 |
-
unset( $content['params']['TZID'] );
|
| 9400 |
-
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9401 |
}
|
| 9402 |
-
unset( $utcDate );
|
| 9403 |
break;
|
| 9404 |
case 'duration':
|
| 9405 |
-
if( FALSE !== ( $content = $
|
| 9406 |
-
if( !isset( $content['value']['relatedStart'] ) || ( TRUE !== $content['value']['relatedStart'] ))
|
| 9407 |
-
$content['params']['RELATED'] = 'END';
|
| 9408 |
_addXMLchild( $properties, $prop, 'duration', $content['value'], $content['params'] );
|
| 9409 |
-
}
|
| 9410 |
break;
|
| 9411 |
-
case '
|
| 9412 |
-
|
| 9413 |
-
_addXMLchild( $properties, $prop, '
|
| 9414 |
-
break;
|
| 9415 |
-
case 'class':
|
| 9416 |
-
case 'location':
|
| 9417 |
-
case 'status':
|
| 9418 |
-
case 'summary':
|
| 9419 |
-
case 'transp':
|
| 9420 |
-
case 'tzid':
|
| 9421 |
-
case 'uid':
|
| 9422 |
-
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9423 |
-
if((( 'location' == $prop ) || ( 'summary' == $prop )) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9424 |
-
if( $langComp )
|
| 9425 |
-
$content['params']['LANGUAGE'] = $langComp;
|
| 9426 |
-
elseif( $langCal )
|
| 9427 |
-
$content['params']['LANGUAGE'] = $langCal;
|
| 9428 |
-
}
|
| 9429 |
-
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9430 |
-
}
|
| 9431 |
-
break;
|
| 9432 |
-
case 'geo':
|
| 9433 |
-
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9434 |
-
_addXMLchild( $properties, $prop, 'geo', $content['value'], $content['params'] );
|
| 9435 |
break;
|
| 9436 |
-
case '
|
| 9437 |
-
if( FALSE !== ( $content = $
|
| 9438 |
-
if( isset( $content['
|
| 9439 |
-
|
| 9440 |
-
$content['
|
| 9441 |
-
|
| 9442 |
-
|
|
|
|
|
|
|
|
|
|
| 9443 |
}
|
| 9444 |
-
_addXMLchild( $properties, $prop,
|
| 9445 |
}
|
| 9446 |
break;
|
| 9447 |
-
case '
|
| 9448 |
-
case '
|
| 9449 |
-
|
| 9450 |
-
|
| 9451 |
-
_addXMLchild( $properties, $prop, 'integer', $content['value'], $content['params'] );
|
| 9452 |
break;
|
| 9453 |
-
case '
|
| 9454 |
-
|
| 9455 |
-
|
| 9456 |
-
_addXMLchild( $properties, $prop, 'uri', $content['value'], $content['params'] );
|
| 9457 |
break;
|
| 9458 |
-
} //
|
| 9459 |
-
} // end foreach( $
|
| 9460 |
-
|
| 9461 |
-
|
| 9462 |
-
while( FALSE !== ( $subcomp = $component->getComponent( $subCompName ))) {
|
| 9463 |
-
$child2 = $child->addChild( $subCompName );
|
| 9464 |
-
$properties = $child2->addChild( 'properties' );
|
| 9465 |
-
$langComp = $subcomp->getConfig( 'language' );
|
| 9466 |
-
$subCompProps = $subcomp->getConfig( 'setPropertyNames' );
|
| 9467 |
-
foreach( $subCompProps as $prop ) {
|
| 9468 |
-
switch( strtolower( $prop )) {
|
| 9469 |
-
case 'attach': // may occur multiple times, below
|
| 9470 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9471 |
-
$type = ( isset( $content['params']['VALUE'] ) && ( 'BINARY' == $content['params']['VALUE'] )) ? 'binary' : 'uri';
|
| 9472 |
-
unset( $content['params']['VALUE'] );
|
| 9473 |
-
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9474 |
-
}
|
| 9475 |
-
break;
|
| 9476 |
-
case 'attendee':
|
| 9477 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9478 |
-
if( isset( $content['params']['CN'] ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9479 |
-
if( $langComp )
|
| 9480 |
-
$content['params']['LANGUAGE'] = $langComp;
|
| 9481 |
-
elseif( $langCal )
|
| 9482 |
-
$content['params']['LANGUAGE'] = $langCal;
|
| 9483 |
-
}
|
| 9484 |
-
_addXMLchild( $properties, $prop, 'cal-address', $content['value'], $content['params'] );
|
| 9485 |
-
}
|
| 9486 |
-
break;
|
| 9487 |
-
case 'comment':
|
| 9488 |
-
case 'tzname':
|
| 9489 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9490 |
-
if( !isset( $content['params']['LANGUAGE'] )) {
|
| 9491 |
-
if( $langComp )
|
| 9492 |
-
$content['params']['LANGUAGE'] = $langComp;
|
| 9493 |
-
elseif( $langCal )
|
| 9494 |
-
$content['params']['LANGUAGE'] = $langCal;
|
| 9495 |
-
}
|
| 9496 |
-
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9497 |
-
}
|
| 9498 |
-
break;
|
| 9499 |
-
case 'rdate':
|
| 9500 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9501 |
-
$type = 'date-time';
|
| 9502 |
-
if( isset( $content['params']['VALUE'] )) {
|
| 9503 |
-
if( 'DATE' == $content['params']['VALUE'] )
|
| 9504 |
-
$type = 'date';
|
| 9505 |
-
elseif( 'PERIOD' == $content['params']['VALUE'] )
|
| 9506 |
-
$type = 'period';
|
| 9507 |
-
}
|
| 9508 |
-
unset( $content['params']['VALUE'] );
|
| 9509 |
-
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9510 |
-
}
|
| 9511 |
-
break;
|
| 9512 |
-
case 'x-prop':
|
| 9513 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9514 |
-
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9515 |
-
break;
|
| 9516 |
-
case 'action': // single occurence below, if set
|
| 9517 |
-
case 'description':
|
| 9518 |
-
case 'summary':
|
| 9519 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9520 |
-
if(( 'action' != $prop ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9521 |
-
if( $langComp )
|
| 9522 |
-
$content['params']['LANGUAGE'] = $langComp;
|
| 9523 |
-
elseif( $langCal )
|
| 9524 |
-
$content['params']['LANGUAGE'] = $langCal;
|
| 9525 |
-
}
|
| 9526 |
-
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9527 |
-
}
|
| 9528 |
-
break;
|
| 9529 |
-
case 'dtstart':
|
| 9530 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9531 |
-
unset( $content['value']['tz'], $content['params']['VALUE'] ); // always local time
|
| 9532 |
-
_addXMLchild( $properties, $prop, 'date-time', $content['value'], $content['params'] );
|
| 9533 |
-
}
|
| 9534 |
-
break;
|
| 9535 |
-
case 'duration':
|
| 9536 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9537 |
-
_addXMLchild( $properties, $prop, 'duration', $content['value'], $content['params'] );
|
| 9538 |
-
break;
|
| 9539 |
-
case 'repeat':
|
| 9540 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9541 |
-
_addXMLchild( $properties, $prop, 'integer', $content['value'], $content['params'] );
|
| 9542 |
-
break;
|
| 9543 |
-
case 'trigger':
|
| 9544 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9545 |
-
if( isset( $content['value']['year'] ) &&
|
| 9546 |
-
isset( $content['value']['month'] ) &&
|
| 9547 |
-
isset( $content['value']['day'] ))
|
| 9548 |
-
$type = 'date-time';
|
| 9549 |
-
else {
|
| 9550 |
-
$type = 'duration';
|
| 9551 |
-
if( !isset( $content['value']['relatedStart'] ) || ( TRUE !== $content['value']['relatedStart'] ))
|
| 9552 |
-
$content['params']['RELATED'] = 'END';
|
| 9553 |
-
}
|
| 9554 |
-
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9555 |
-
}
|
| 9556 |
-
break;
|
| 9557 |
-
case 'tzoffsetto':
|
| 9558 |
-
case 'tzoffsetfrom':
|
| 9559 |
-
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9560 |
-
_addXMLchild( $properties, $prop, 'utc-offset', $content['value'], $content['params'] );
|
| 9561 |
-
break;
|
| 9562 |
-
case 'rrule':
|
| 9563 |
-
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9564 |
-
_addXMLchild( $properties, $prop, 'recur', $content['value'], $content['params'] );
|
| 9565 |
-
break;
|
| 9566 |
-
} // switch( $prop )
|
| 9567 |
-
} // end foreach( $subCompProps as $prop )
|
| 9568 |
-
} // end while( FALSE !== ( $subcomp = $component->getComponent( subCompName )))
|
| 9569 |
-
} // end foreach( $subCombs as $subCompName )
|
| 9570 |
-
} // end while( FALSE !== ( $component = $calendar->getComponent( $compName )))
|
| 9571 |
-
} // end foreach( $comps as $compName)
|
| 9572 |
return $xml->asXML();
|
| 9573 |
}
|
| 9574 |
/**
|
| 9575 |
* Add children to a SimpleXMLelement
|
| 9576 |
*
|
| 9577 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9578 |
-
* @since 2.
|
| 9579 |
* @param object $parent, reference to a SimpleXMLelement node
|
| 9580 |
* @param string $name, new element node name
|
| 9581 |
* @param string $type, content type, subelement(-s) name
|
|
@@ -9587,11 +9726,11 @@ function _addXMLchild( & $parent, $name, $type, $content, $params=array()) {
|
|
| 9587 |
/** create new child node */
|
| 9588 |
$name = strtolower( $name );
|
| 9589 |
$child = $parent->addChild( $name );
|
| 9590 |
-
if( isset( $params['VALUE'] ))
|
| 9591 |
-
unset( $params['VALUE'] );
|
| 9592 |
if( !empty( $params )) {
|
| 9593 |
$parameters = $child->addChild( 'parameters' );
|
| 9594 |
foreach( $params as $param => $parVal ) {
|
|
|
|
|
|
|
| 9595 |
$param = strtolower( $param );
|
| 9596 |
if( 'x-' == substr( $param, 0, 2 )) {
|
| 9597 |
$p1 = $parameters->addChild( $param );
|
|
@@ -9617,8 +9756,8 @@ function _addXMLchild( & $parent, $name, $type, $content, $params=array()) {
|
|
| 9617 |
$p2 = $p1->addChild( $ptype, htmlspecialchars( $parVal ));
|
| 9618 |
}
|
| 9619 |
}
|
| 9620 |
-
}
|
| 9621 |
-
if( empty( $content ) && ( '0' != $content ))
|
| 9622 |
return;
|
| 9623 |
/** store content */
|
| 9624 |
switch( $type ) {
|
|
@@ -9656,11 +9795,13 @@ function _addXMLchild( & $parent, $name, $type, $content, $params=array()) {
|
|
| 9656 |
$v = $child->addChild( $type, $output.iCalUtilityFunctions::_duration2str( $content ) );
|
| 9657 |
break;
|
| 9658 |
case 'geo':
|
| 9659 |
-
|
| 9660 |
-
|
|
|
|
|
|
|
| 9661 |
break;
|
| 9662 |
case 'integer':
|
| 9663 |
-
$v = $child->addChild( $type, $content );
|
| 9664 |
break;
|
| 9665 |
case 'period':
|
| 9666 |
if( !is_array( $content ))
|
|
@@ -9682,8 +9823,8 @@ function _addXMLchild( & $parent, $name, $type, $content, $params=array()) {
|
|
| 9682 |
}
|
| 9683 |
break;
|
| 9684 |
case 'recur':
|
|
|
|
| 9685 |
foreach( $content as $rulelabel => $rulevalue ) {
|
| 9686 |
-
$rulelabel = strtolower( $rulelabel );
|
| 9687 |
switch( $rulelabel ) {
|
| 9688 |
case 'until':
|
| 9689 |
if( isset( $rulevalue['hour'] ))
|
|
@@ -9774,293 +9915,340 @@ function _addXMLchild( & $parent, $name, $type, $content, $params=array()) {
|
|
| 9774 |
break;
|
| 9775 |
}
|
| 9776 |
}
|
| 9777 |
-
/**
|
| 9778 |
-
* parse xml string into iCalcreator instance
|
| 9779 |
-
*
|
| 9780 |
-
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9781 |
-
* @since 2.11.2 - 2012-01-31
|
| 9782 |
-
* @param string $xmlstr
|
| 9783 |
-
* @param array $iCalcfg iCalcreator config array (opt)
|
| 9784 |
-
* @return mixed iCalcreator instance or FALSE on error
|
| 9785 |
-
*/
|
| 9786 |
-
function & XMLstr2iCal( $xmlstr, $iCalcfg=array()) {
|
| 9787 |
-
libxml_use_internal_errors( TRUE );
|
| 9788 |
-
$xml = simplexml_load_string( $xmlstr );
|
| 9789 |
-
if( !$xml ) {
|
| 9790 |
-
$str = '';
|
| 9791 |
-
$return = FALSE;
|
| 9792 |
-
foreach( libxml_get_errors() as $error ) {
|
| 9793 |
-
switch ( $error->level ) {
|
| 9794 |
-
case LIBXML_ERR_FATAL: $str .= ' FATAL '; break;
|
| 9795 |
-
case LIBXML_ERR_ERROR: $str .= ' ERROR '; break;
|
| 9796 |
-
case LIBXML_ERR_WARNING:
|
| 9797 |
-
default: $str .= ' WARNING '; break;
|
| 9798 |
-
}
|
| 9799 |
-
$str .= PHP_EOL.'Error when loading XML';
|
| 9800 |
-
if( !empty( $error->file ))
|
| 9801 |
-
$str .= ', file:'.$error->file.', ';
|
| 9802 |
-
$str .= ', line:'.$error->line;
|
| 9803 |
-
$str .= ', ('.$error->code.') '.$error->message;
|
| 9804 |
-
}
|
| 9805 |
-
error_log( $str );
|
| 9806 |
-
if( LIBXML_ERR_WARNING != $error->level )
|
| 9807 |
-
return $return;
|
| 9808 |
-
libxml_clear_errors();
|
| 9809 |
-
}
|
| 9810 |
-
return xml2iCal( $xml, $iCalcfg );
|
| 9811 |
-
}
|
| 9812 |
/**
|
| 9813 |
* parse xml file into iCalcreator instance
|
| 9814 |
*
|
| 9815 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9816 |
-
* @since
|
| 9817 |
* @param string $xmlfile
|
| 9818 |
-
* @param array$iCalcfg iCalcreator config array (opt)
|
| 9819 |
* @return mixediCalcreator instance or FALSE on error
|
| 9820 |
*/
|
| 9821 |
-
function
|
| 9822 |
-
|
| 9823 |
-
|
| 9824 |
-
|
| 9825 |
-
$str = '';
|
| 9826 |
-
foreach( libxml_get_errors() as $error ) {
|
| 9827 |
-
switch ( $error->level ) {
|
| 9828 |
-
case LIBXML_ERR_FATAL: $str .= 'FATAL '; break;
|
| 9829 |
-
case LIBXML_ERR_ERROR: $str .= 'ERROR '; break;
|
| 9830 |
-
case LIBXML_ERR_WARNING:
|
| 9831 |
-
default: $str .= 'WARNING '; break;
|
| 9832 |
-
}
|
| 9833 |
-
$str .= 'Failed loading XML'.PHP_EOL;
|
| 9834 |
-
if( !empty( $error->file ))
|
| 9835 |
-
$str .= ' file:'.$error->file.', ';
|
| 9836 |
-
$str .= 'line:'.$error->line.PHP_EOL;
|
| 9837 |
-
$str .= '('.$error->code.') '.$error->message.PHP_EOL;
|
| 9838 |
-
}
|
| 9839 |
-
error_log( $str );
|
| 9840 |
-
if( LIBXML_ERR_WARNING != $error->level )
|
| 9841 |
-
return FALSE;
|
| 9842 |
-
libxml_clear_errors();
|
| 9843 |
-
}
|
| 9844 |
-
return xml2iCal( $xml, $iCalcfg );
|
| 9845 |
}
|
| 9846 |
/**
|
| 9847 |
-
* parse
|
| 9848 |
*
|
| 9849 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9850 |
-
* @since
|
| 9851 |
-
* @param
|
| 9852 |
* @param array $iCalcfg iCalcreator config array (opt)
|
| 9853 |
* @return mixed iCalcreator instance or FALSE on error
|
| 9854 |
*/
|
| 9855 |
-
function
|
| 9856 |
-
|
| 9857 |
-
foreach( $xmlobj->children() as $icalendar ) { // vcalendar
|
| 9858 |
-
foreach( $icalendar->children() as $calPart ) { // calendar properties and components
|
| 9859 |
-
if( 'components' == $calPart->getName()) {
|
| 9860 |
-
foreach( $calPart->children() as $component ) { // single components
|
| 9861 |
-
if( 0 < $component->count())
|
| 9862 |
-
_getXMLComponents( $iCal, $component );
|
| 9863 |
-
}
|
| 9864 |
-
}
|
| 9865 |
-
elseif(( 'properties' == $calPart->getName()) && ( 0 < $calPart->count())) {
|
| 9866 |
-
foreach( $calPart->children() as $calProp ) { // calendar properties
|
| 9867 |
-
$propName = $calProp->getName();
|
| 9868 |
-
if(( 'calscale' != $propName ) && ( 'method' != $propName ) && ( 'x-' != substr( $propName,0,2 )))
|
| 9869 |
-
continue;
|
| 9870 |
-
$params = array();
|
| 9871 |
-
foreach( $calProp->children() as $calPropElem ) { // single calendar property
|
| 9872 |
-
if( 'parameters' == $calPropElem->getName())
|
| 9873 |
-
$params = _getXMLParams( $calPropElem );
|
| 9874 |
-
else
|
| 9875 |
-
$iCal->setProperty( $propName, reset( $calPropElem ), $params );
|
| 9876 |
-
} // end foreach( $calProp->children() as $calPropElem )
|
| 9877 |
-
} // end foreach( $calPart->properties->children() as $calProp )
|
| 9878 |
-
} // end if( 0 < $calPart->properties->count())
|
| 9879 |
-
} // end foreach( $icalendar->children() as $calPart )
|
| 9880 |
-
} // end foreach( $xmlobj->children() as $icalendar )
|
| 9881 |
-
return $iCal;
|
| 9882 |
}
|
| 9883 |
/**
|
| 9884 |
-
* parse
|
| 9885 |
*
|
| 9886 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9887 |
-
* @since
|
| 9888 |
-
* @param
|
| 9889 |
-
* @
|
|
|
|
| 9890 |
*/
|
| 9891 |
-
function
|
| 9892 |
-
|
| 9893 |
-
|
| 9894 |
-
$
|
| 9895 |
-
|
| 9896 |
-
|
| 9897 |
-
|
| 9898 |
-
foreach( $parameter->children() as $paramValue ) // skip parameter value type
|
| 9899 |
-
$value[] = reset( $paramValue );
|
| 9900 |
-
if( 2 > count( $value ))
|
| 9901 |
-
$params[$key] = html_entity_decode( reset( $value ));
|
| 9902 |
-
else
|
| 9903 |
-
$params[$key] = $value;
|
| 9904 |
-
}
|
| 9905 |
-
return $params;
|
| 9906 |
}
|
| 9907 |
/**
|
| 9908 |
-
* parse
|
| 9909 |
*
|
| 9910 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9911 |
-
* @since
|
| 9912 |
-
* @param
|
| 9913 |
-
* @param
|
| 9914 |
-
* @return
|
| 9915 |
*/
|
| 9916 |
-
function
|
| 9917 |
-
$
|
| 9918 |
-
$
|
| 9919 |
-
|
| 9920 |
-
|
| 9921 |
-
|
| 9922 |
-
|
| 9923 |
-
|
| 9924 |
-
|
| 9925 |
-
|
| 9926 |
-
|
| 9927 |
-
|
| 9928 |
-
|
| 9929 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9930 |
}
|
| 9931 |
/**
|
| 9932 |
-
* parse
|
| 9933 |
*
|
| 9934 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9935 |
-
* @since
|
| 9936 |
-
* @param array $iCal iCalcreator calendar instance
|
| 9937 |
-
* @param
|
| 9938 |
* @return void
|
| 9939 |
*/
|
| 9940 |
-
function
|
| 9941 |
-
$
|
| 9942 |
-
|
| 9943 |
-
|
| 9944 |
-
|
| 9945 |
-
|
| 9946 |
-
|
| 9947 |
-
$params = _getXMLParams( $propPart );
|
| 9948 |
continue;
|
| 9949 |
}
|
| 9950 |
-
|
| 9951 |
-
|
| 9952 |
-
|
| 9953 |
-
|
| 9954 |
-
|
| 9955 |
-
|
| 9956 |
-
|
| 9957 |
-
$
|
| 9958 |
-
|
| 9959 |
-
|
| 9960 |
-
|
| 9961 |
-
|
| 9962 |
-
|
| 9963 |
-
|
| 9964 |
-
|
| 9965 |
-
|
| 9966 |
-
|
| 9967 |
-
|
| 9968 |
-
$value = reset( $propPart );
|
| 9969 |
-
break;
|
| 9970 |
-
// case 'geo':
|
| 9971 |
-
case 'latitude':
|
| 9972 |
-
case 'longitude':
|
| 9973 |
-
$value[$valueType] = reset( $propPart );
|
| 9974 |
-
break;
|
| 9975 |
-
case 'integer':
|
| 9976 |
-
$value = reset( $propPart );
|
| 9977 |
-
break;
|
| 9978 |
-
case 'period':
|
| 9979 |
-
if( 'rdate' == $propName )
|
| 9980 |
-
$params['VALUE'] = 'PERIOD';
|
| 9981 |
-
$pData = array();
|
| 9982 |
-
foreach( $propPart->children() as $periodPart )
|
| 9983 |
-
$pData[] = reset( $periodPart );
|
| 9984 |
-
if( !empty( $pData ))
|
| 9985 |
-
$value[] = $pData;
|
| 9986 |
-
break;
|
| 9987 |
-
// case 'rrule':
|
| 9988 |
-
case 'freq':
|
| 9989 |
-
case 'count':
|
| 9990 |
-
case 'until':
|
| 9991 |
-
case 'interval':
|
| 9992 |
-
case 'wkst':
|
| 9993 |
-
$value[$valueType] = reset( $propPart );
|
| 9994 |
-
break;
|
| 9995 |
-
case 'bysecond':
|
| 9996 |
-
case 'byminute':
|
| 9997 |
-
case 'byhour':
|
| 9998 |
-
case 'bymonthday':
|
| 9999 |
-
case 'byyearday':
|
| 10000 |
-
case 'byweekno':
|
| 10001 |
-
case 'bymonth':
|
| 10002 |
-
case 'bysetpos':
|
| 10003 |
-
$value[$valueType][] = reset( $propPart );
|
| 10004 |
-
break;
|
| 10005 |
-
case 'byday':
|
| 10006 |
-
$byday = reset( $propPart );
|
| 10007 |
-
if( 2 == strlen( $byday ))
|
| 10008 |
-
$value[$valueType][] = array( 'DAY' => $byday );
|
| 10009 |
else {
|
| 10010 |
-
|
| 10011 |
-
|
| 10012 |
-
|
|
|
|
| 10013 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10014 |
break;
|
| 10015 |
-
|
| 10016 |
-
case '
|
| 10017 |
-
|
| 10018 |
-
|
| 10019 |
-
|
| 10020 |
-
|
| 10021 |
-
|
| 10022 |
-
|
| 10023 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10024 |
break;
|
| 10025 |
-
case '
|
| 10026 |
-
|
| 10027 |
-
$value
|
| 10028 |
break;
|
| 10029 |
-
case '
|
|
|
|
|
|
|
|
|
|
| 10030 |
break;
|
| 10031 |
-
case '
|
| 10032 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10033 |
break;
|
| 10034 |
-
case '
|
| 10035 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10036 |
break;
|
| 10037 |
-
case 'unknown':
|
| 10038 |
default:
|
| 10039 |
-
|
| 10040 |
-
|
| 10041 |
-
|
| 10042 |
-
|
| 10043 |
-
|
| 10044 |
-
|
| 10045 |
-
|
| 10046 |
-
|
| 10047 |
-
|
| 10048 |
-
|
| 10049 |
-
|
| 10050 |
-
|
| 10051 |
-
|
| 10052 |
-
|
| 10053 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10054 |
}
|
| 10055 |
-
|
| 10056 |
-
|
| 10057 |
-
|
| 10058 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10059 |
else
|
| 10060 |
-
|
| 10061 |
}
|
| 10062 |
-
|
|
|
|
| 10063 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10064 |
}
|
| 10065 |
/*********************************************************************************/
|
| 10066 |
/* Additional functions to use with vtimezone components */
|
|
@@ -10116,7 +10304,6 @@ function getTzOffsetForDate($timezonesarray, $tzid, $timestamp) {
|
|
| 10116 |
$timestamp['day'],
|
| 10117 |
$timestamp['year']
|
| 10118 |
) ;
|
| 10119 |
-
//echo '<td colspan="4"> '."\n".'<tr><td> <td class="r">'.$timestamp.'<td class="r">'.$disp.'<td colspan="4"> '."\n".'<tr><td colspan="3"> '; // test ###
|
| 10120 |
}
|
| 10121 |
$tzoffset = array();
|
| 10122 |
// something to return if all goes wrong (such as if $tzid doesn't find us an array of dates)
|
|
@@ -10353,3 +10540,4 @@ function expandTimezoneDates($vtzc) {
|
|
| 10353 |
}
|
| 10354 |
return $tzdates;
|
| 10355 |
}
|
|
|
| 1 |
<?php
|
| 2 |
/*********************************************************************************/
|
| 3 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
*
|
|
|
|
| 5 |
* This file is a PHP implementation of rfc2445/rfc5545.
|
| 6 |
*
|
| 7 |
+
* @copyright Copyright (c) 2007-2014 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
|
| 8 |
+
* @link http://kigkonsult.se/iCalcreator/index.php
|
| 9 |
+
* @license http://kigkonsult.se/downloads/dl.php?f=LGPL
|
| 10 |
+
* @package iCalcreator
|
| 11 |
+
* @version v2.20
|
| 12 |
+
*/
|
| 13 |
+
/**
|
| 14 |
* This library is free software; you can redistribute it and/or
|
| 15 |
* modify it under the terms of the GNU Lesser General Public
|
| 16 |
* License as published by the Free Software Foundation; either
|
| 26 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| 27 |
*/
|
| 28 |
/*********************************************************************************/
|
| 29 |
+
/**
|
| 30 |
+
* Do NOT remove or change version!!
|
| 31 |
+
*
|
| 32 |
+
* @copyright Copyright (c) 2007-2014 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
|
| 33 |
+
* @license http://kigkonsult.se/downloads/dl.php?f=LGPL
|
| 34 |
+
*/
|
| 35 |
+
define( 'ICALCREATOR_VERSION', 'iCalcreator 2.20' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
/*********************************************************************************/
|
| 37 |
/**
|
| 38 |
* vcalendar class
|
| 99 |
$this->xcaldecl = array();
|
| 100 |
$this->components = array();
|
| 101 |
}
|
| 102 |
+
/**
|
| 103 |
+
* return iCalcreator version number
|
| 104 |
+
*
|
| 105 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 106 |
+
* @since 2.18.5 - 2013-08-29
|
| 107 |
+
* @uses ICALCREATOR_VERSION
|
| 108 |
+
* @return string
|
| 109 |
+
*/
|
| 110 |
+
public static function iCalcreatorVersion() {
|
| 111 |
+
return trim( substr( ICALCREATOR_VERSION, strpos( ICALCREATOR_VERSION, ' ' )));
|
| 112 |
+
}
|
| 113 |
/*********************************************************************************/
|
| 114 |
/**
|
| 115 |
* Property Name: CALSCALE
|
| 183 |
/**
|
| 184 |
* Property Name: PRODID
|
| 185 |
*
|
|
|
|
|
|
|
|
|
|
| 186 |
*/
|
| 187 |
/**
|
| 188 |
* creates formatted output for calendar property prodid
|
| 189 |
*
|
| 190 |
+
* @copyright copyright (c) 2007-2013 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
|
| 191 |
+
* @license http://kigkonsult.se/downloads/dl.php?f=LGPL
|
| 192 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 193 |
* @since 2.12.11 - 2012-05-13
|
| 194 |
* @return string
|
| 208 |
}
|
| 209 |
}
|
| 210 |
/**
|
| 211 |
+
* make default value for calendar prodid, do NOT alter or remove this method or invoke of this method
|
| 212 |
*
|
| 213 |
+
* @copyright copyright (c) 2007-2013 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
|
| 214 |
+
* @license http://kigkonsult.se/downloads/dl.php?f=LGPL
|
| 215 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 216 |
* @since 2.6.8 - 2009-12-30
|
| 217 |
* @return void
|
| 292 |
* creates formatted output for calendar property x-prop, iCal format only
|
| 293 |
*
|
| 294 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 295 |
+
* @since 2.16.21 - 2013-05-25
|
| 296 |
* @return string
|
| 297 |
*/
|
| 298 |
function createXprop() {
|
| 299 |
if( empty( $this->xprop ) || !is_array( $this->xprop )) return FALSE;
|
| 300 |
+
$output = null;
|
| 301 |
+
$toolbox = new calendarComponent();
|
| 302 |
$toolbox->setConfig( $this->getConfig());
|
| 303 |
foreach( $this->xprop as $label => $xpropPart ) {
|
| 304 |
if( !isset($xpropPart['value']) || ( empty( $xpropPart['value'] ) && !is_numeric( $xpropPart['value'] ))) {
|
| 305 |
+
if( $this->getConfig( 'allowEmpty' ))
|
| 306 |
+
$output .= $toolbox->_createElement( $label );
|
| 307 |
continue;
|
| 308 |
}
|
| 309 |
+
$attributes = $toolbox->_createParams( $xpropPart['params'], array( 'LANGUAGE' ));
|
| 310 |
if( is_array( $xpropPart['value'] )) {
|
| 311 |
foreach( $xpropPart['value'] as $pix => $theXpart )
|
| 312 |
+
$xpropPart['value'][$pix] = iCalUtilityFunctions::_strrep( $theXpart, $this->format, $this->nl );
|
| 313 |
$xpropPart['value'] = implode( ',', $xpropPart['value'] );
|
| 314 |
}
|
| 315 |
else
|
| 316 |
+
$xpropPart['value'] = iCalUtilityFunctions::_strrep( $xpropPart['value'], $this->format, $this->nl );
|
| 317 |
+
$output .= $toolbox->_createElement( $label, $attributes, $xpropPart['value'] );
|
| 318 |
if( is_array( $toolbox->xcaldecl ) && ( 0 < count( $toolbox->xcaldecl ))) {
|
| 319 |
foreach( $toolbox->xcaldecl as $localxcaldecl )
|
| 320 |
$this->xcaldecl[] = $localxcaldecl;
|
| 326 |
* set calendar property x-prop
|
| 327 |
*
|
| 328 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 329 |
+
* @since 2.18.10 - 2013-09-04
|
| 330 |
* @param string $label
|
| 331 |
* @param string $value
|
| 332 |
* @param array $params optional
|
| 335 |
function setXprop( $label, $value, $params=FALSE ) {
|
| 336 |
if( empty( $label ))
|
| 337 |
return FALSE;
|
| 338 |
+
$label = strtoupper( $label );
|
| 339 |
+
if( 'X-' != substr( $label, 0, 2 ))
|
| 340 |
return FALSE;
|
| 341 |
+
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 342 |
$xprop = array( 'value' => $value );
|
| 343 |
$xprop['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 344 |
+
if( !is_array( $this->xprop ))
|
| 345 |
+
$this->xprop = array();
|
| 346 |
+
$this->xprop[$label] = $xprop;
|
| 347 |
return TRUE;
|
| 348 |
}
|
| 349 |
/*********************************************************************************/
|
| 406 |
* get calendar property value/params
|
| 407 |
*
|
| 408 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 409 |
+
* @since 2.18.10 - 2013-09-04
|
| 410 |
* @param string $propName, optional
|
| 411 |
* @param int $propix, optional, if specific property is wanted in case of multiply occurences
|
| 412 |
* @param bool $inclParam=FALSE
|
| 419 |
$propix = ( isset( $this->propix[$propName] )) ? $this->propix[$propName] + 2 : 1;
|
| 420 |
$this->propix[$propName] = --$propix;
|
| 421 |
}
|
| 422 |
+
else {
|
| 423 |
$mProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'RELATED-TO', 'RESOURCES' );
|
| 424 |
+
$vComps = array('vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 425 |
+
$dateFmt = '%04d%02d%02d';
|
| 426 |
+
}
|
| 427 |
switch( $propName ) {
|
| 428 |
case 'ATTENDEE':
|
| 429 |
case 'CATEGORIES':
|
| 443 |
case 'URL':
|
| 444 |
$output = array();
|
| 445 |
foreach ( $this->components as $cix => $component) {
|
| 446 |
+
if( !in_array( $component->objName, $vComps))
|
| 447 |
continue;
|
| 448 |
+
if( in_array( $propName, $mProps )) {
|
| 449 |
$component->_getProperties( $propName, $output );
|
| 450 |
continue;
|
| 451 |
}
|
| 454 |
$content = $component->getProperty( 'UID' );
|
| 455 |
}
|
| 456 |
elseif( 'GEOLOCATION' == $propName ) {
|
| 457 |
+
$content = ( FALSE === ( $loc = $component->getProperty( 'LOCATION' ))) ? '' : $loc.' ';
|
| 458 |
+
if( FALSE === ( $geo = $component->getProperty( 'GEO' )))
|
|
|
|
| 459 |
continue;
|
| 460 |
+
$content .= iCalUtilityFunctions::_geo2str2( $geo['latitude'], iCalUtilityFunctions::$geoLatFmt ).
|
| 461 |
+
iCalUtilityFunctions::_geo2str2( $geo['longitude'], iCalUtilityFunctions::$geoLongFmt ).'/';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 462 |
}
|
| 463 |
elseif( FALSE === ( $content = $component->getProperty( $propName )))
|
| 464 |
continue;
|
| 466 |
continue;
|
| 467 |
elseif( is_array( $content )) {
|
| 468 |
if( isset( $content['year'] )) {
|
| 469 |
+
$key = sprintf( $dateFmt, $content['year'], $content['month'], $content['day'] );
|
| 470 |
if( !isset( $output[$key] ))
|
| 471 |
$output[$key] = 1;
|
| 472 |
else
|
| 665 |
* general vcalendar config setting
|
| 666 |
*
|
| 667 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 668 |
+
* @since 2.18.12 - 2013-09-12
|
| 669 |
* @param mixed $config
|
| 670 |
* @param string $value
|
| 671 |
* @return void
|
| 672 |
*/
|
| 673 |
function setConfig( $config, $value = FALSE) {
|
| 674 |
if( is_array( $config )) {
|
| 675 |
+
$config = array_change_key_case( $config, CASE_UPPER );
|
| 676 |
+
if( isset( $config['DELIMITER'] )) {
|
| 677 |
+
if( FALSE === $this->setConfig( 'DELIMITER', $config['DELIMITER'] ))
|
| 678 |
+
return FALSE;
|
| 679 |
+
unset( $config['DELIMITER'] );
|
| 680 |
+
}
|
| 681 |
+
if( isset( $config['DIRECTORY'] )) {
|
| 682 |
+
if( FALSE === $this->setConfig( 'DIRECTORY', $config['DIRECTORY'] ))
|
| 683 |
+
return FALSE;
|
| 684 |
+
unset( $config['DIRECTORY'] );
|
|
|
|
|
|
|
| 685 |
}
|
| 686 |
foreach( $config as $cKey => $cValue ) {
|
| 687 |
if( FALSE === $this->setConfig( $cKey, $cValue ))
|
| 689 |
}
|
| 690 |
return TRUE;
|
| 691 |
}
|
| 692 |
+
else
|
| 693 |
$res = FALSE;
|
| 694 |
+
$config = strtoupper( $config );
|
| 695 |
+
switch( $config ) {
|
| 696 |
case 'ALLOWEMPTY':
|
| 697 |
$this->allowEmpty = $value;
|
| 698 |
$subcfg = array( 'ALLOWEMPTY' => $value );
|
| 703 |
return TRUE;
|
| 704 |
break;
|
| 705 |
case 'DIRECTORY':
|
| 706 |
+
if( FALSE === ( $value = realpath( rtrim( trim( $value ), $this->delimiter ))))
|
| 707 |
+
return FALSE;
|
| 708 |
+
else {
|
|
|
|
|
|
|
| 709 |
/* local directory */
|
|
|
|
| 710 |
$this->directory = $value;
|
| 711 |
$this->url = null;
|
| 712 |
return TRUE;
|
| 713 |
}
|
|
|
|
|
|
|
| 714 |
break;
|
| 715 |
case 'FILENAME':
|
| 716 |
$value = trim( $value );
|
| 717 |
+
$dirfile = $this->directory.$this->delimiter.$value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 718 |
if( file_exists( $dirfile )) {
|
| 719 |
/* local file exists */
|
| 720 |
if( is_readable( $dirfile ) || is_writable( $dirfile )) {
|
| 725 |
else
|
| 726 |
return FALSE;
|
| 727 |
}
|
| 728 |
+
elseif( is_readable( $this->directory ) || is_writable( $this->directory )) {
|
| 729 |
/* read- or writable directory */
|
| 730 |
+
clearstatcache();
|
| 731 |
$this->filename = $value;
|
| 732 |
return TRUE;
|
| 733 |
}
|
| 784 |
break;
|
| 785 |
case 'URL':
|
| 786 |
/* remote file - URL */
|
| 787 |
+
$value = str_replace( array( 'HTTP://', 'WEBCAL://', 'webcal://' ), 'http://', trim( $value ));
|
| 788 |
+
$value = str_replace( 'HTTPS://', 'https://', trim( $value ));
|
| 789 |
+
if(( 'http://' != substr( $value, 0, 7 )) && ( 'https://' != substr( $value, 0, 8 )))
|
| 790 |
+
return FALSE;
|
| 791 |
+
$this->directory = '.';
|
| 792 |
$this->url = $value;
|
| 793 |
+
if( '.ics' != strtolower( substr( $value, -4 )))
|
| 794 |
+
unset( $this->filename );
|
| 795 |
+
else
|
| 796 |
+
$this->filename = $basename( $value );
|
| 797 |
+
return TRUE;
|
| 798 |
break;
|
| 799 |
default: // any unvalid config key.. .
|
| 800 |
return TRUE;
|
| 870 |
* get calendar component from container
|
| 871 |
*
|
| 872 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 873 |
+
* @since 2.18.10 - 2013-09-04
|
| 874 |
* @param mixed $arg1 optional, ordno/component type/ component uid
|
| 875 |
* @param mixed $arg2 optional, ordno if arg1 = component type
|
| 876 |
* @return object
|
| 881 |
$argType = 'INDEX';
|
| 882 |
$index = $this->compix['INDEX'] = ( isset( $this->compix['INDEX'] )) ? $this->compix['INDEX'] + 1 : 1;
|
| 883 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 884 |
elseif( is_array( $arg1 )) { // array( *[propertyName => propertyValue] )
|
| 885 |
$arg2 = implode( '-', array_keys( $arg1 ));
|
| 886 |
$index = $this->compix[$arg2] = ( isset( $this->compix[$arg2] )) ? $this->compix[$arg2] + 1 : 1;
|
| 888 |
$otherProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL' );
|
| 889 |
$mProps = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'RELATED-TO', 'RESOURCES' );
|
| 890 |
}
|
| 891 |
+
elseif ( ctype_digit( (string) $arg1 )) { // specific component in chain
|
| 892 |
+
$argType = 'INDEX';
|
| 893 |
+
$index = (int) $arg1;
|
| 894 |
+
unset( $this->compix );
|
| 895 |
+
}
|
| 896 |
elseif(( strlen( $arg1 ) <= strlen( 'vfreebusy' )) && ( FALSE === strpos( $arg1, '@' ))) { // object class name
|
| 897 |
unset( $this->compix['INDEX'] );
|
| 898 |
$argType = strtolower( $arg1 );
|
| 923 |
$cix1gC++;
|
| 924 |
}
|
| 925 |
elseif( is_array( $arg1 )) { // array( *[propertyName => propertyValue] )
|
| 926 |
+
$hit = array();
|
| 927 |
+
$arg1 = array_change_key_case( $arg1, CASE_UPPER );
|
| 928 |
foreach( $arg1 as $pName => $pValue ) {
|
|
|
|
| 929 |
if( !in_array( $pName, $dateProps ) && !in_array( $pName, $otherProps ))
|
| 930 |
continue;
|
| 931 |
if( in_array( $pName, $mProps )) { // multiple occurrence
|
| 943 |
$hit[] = ( FALSE !== stripos( $value, $pValue )) ? TRUE : FALSE;
|
| 944 |
continue;
|
| 945 |
}
|
| 946 |
+
if( in_array( $pName, $dateProps )) {
|
| 947 |
$valuedate = sprintf( '%04d%02d%02d', $value['year'], $value['month'], $value['day'] );
|
| 948 |
if( 8 < strlen( $pValue )) {
|
| 949 |
if( isset( $value['hour'] )) {
|
| 1032 |
* No date controls occurs.
|
| 1033 |
*
|
| 1034 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1035 |
+
* @since 2.18.19 - 2014-02-01
|
| 1036 |
* @param mixed $startY optional, start Year, default current Year ALT. array selecOptions ( *[ <propName> => <uniqueValue> ] )
|
| 1037 |
* @param int $startM optional, start Month, default current Month
|
| 1038 |
* @param int $startD optional, start Day, default current Day
|
| 1055 |
if( is_array( $startY ))
|
| 1056 |
return $this->selectComponents2( $startY );
|
| 1057 |
/* check default dates */
|
| 1058 |
+
if( ! $startY ) $startY = date( 'Y' );
|
| 1059 |
+
if( ! $startM ) $startM = date( 'm' );
|
| 1060 |
+
if( ! $startD ) $startD = date( 'd' );
|
| 1061 |
$startDate = mktime( 0, 0, 0, $startM, $startD, $startY );
|
| 1062 |
+
if( ! $endY ) $endY = $startY;
|
| 1063 |
+
if( ! $endM ) $endM = $startM;
|
| 1064 |
+
if( ! $endD ) $endD = $startD;
|
| 1065 |
$endDate = mktime( 23, 59, 59, $endM, $endD, $endY );
|
| 1066 |
+
// echo 'selectComp arg='.date( 'Y-m-d H:i:s', $startDate).' -- '.date( 'Y-m-d H:i:s', $endDate)."<br>\n"; $tcnt = 0;// test ###
|
| 1067 |
/* check component types */
|
| 1068 |
$validTypes = array('vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 1069 |
+
if( empty( $cType ))
|
| 1070 |
+
$cType = $validTypes;
|
| 1071 |
+
else {
|
| 1072 |
+
if( ! is_array( $cType ))
|
| 1073 |
+
$cType = array( $cType );
|
| 1074 |
+
$cType = array_map( 'strtolower', $cType );
|
| 1075 |
foreach( $cType as $cix => $theType ) {
|
| 1076 |
+
$cType[$cix] = $theType;
|
| 1077 |
if( !in_array( $theType, $validTypes ))
|
| 1078 |
$cType[$cix] = 'vevent';
|
| 1079 |
}
|
| 1080 |
$cType = array_unique( $cType );
|
| 1081 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1082 |
if(( FALSE === $flat ) && ( FALSE === $any )) // invalid combination
|
| 1083 |
$split = FALSE;
|
| 1084 |
if(( TRUE === $flat ) && ( TRUE === $split )) // invalid combination
|
| 1085 |
$split = FALSE;
|
| 1086 |
/* iterate components */
|
| 1087 |
+
$result = array();
|
| 1088 |
+
$this->sort( 'UID' );
|
| 1089 |
+
$compUIDcmp = null;
|
| 1090 |
+
$recurridList = array();
|
| 1091 |
foreach ( $this->components as $cix => $component ) {
|
| 1092 |
if( empty( $component )) continue;
|
| 1093 |
unset( $start );
|
| 1094 |
/* deselect unvalid type components */
|
| 1095 |
if( !in_array( $component->objName, $cType ))
|
| 1096 |
continue;
|
| 1097 |
+
$start = $component->getProperty( 'dtstart', FALSE, TRUE );
|
| 1098 |
/* select due when dtstart is missing */
|
| 1099 |
+
if( empty( $start ) && ( $component->objName == 'vtodo' ) && ( FALSE === ( $start = $component->getProperty( 'due', FALSE, TRUE ))))
|
| 1100 |
continue;
|
| 1101 |
if( empty( $start ))
|
| 1102 |
continue;
|
| 1103 |
+
if( ! isset( $start['value']['tz'] ) && isset( $start['params']['TZID'] ))
|
| 1104 |
+
$start['value']['tz'] = $start['params']['TZID'];
|
| 1105 |
+
$start = $start['value'];
|
| 1106 |
+
$compUID = $component->getProperty( 'UID' );
|
| 1107 |
+
if( $compUIDcmp != $compUID ) {
|
| 1108 |
+
$compUIDcmp = $compUID;
|
| 1109 |
+
unset( $exdatelist, $recurridList );
|
| 1110 |
+
}
|
| 1111 |
+
$SCbools = array( 'dtendExist' => FALSE, 'dueExist' => FALSE, 'durationExist' => FALSE, 'endAllDayEvent' => FALSE );
|
| 1112 |
+
$recurrid = FALSE;
|
| 1113 |
+
$dateFormat = array();
|
| 1114 |
+
unset( $end, $startWdate, $endWdate, $rdurWsecs, $rdur, $workstart, $workend ); // clean up
|
| 1115 |
+
$startWdate = iCalUtilityFunctions::_SCsetXCurrentDateZ( iCalUtilityFunctions::_date2timestamp( $start ), $start );
|
| 1116 |
+
$dateFormat['start'] = ( isset( $start['hour'] )) ? 'Y-m-d H:i:s' : 'Y-m-d';
|
| 1117 |
/* get end date from dtend/due/duration properties */
|
| 1118 |
+
$end = $component->getProperty( 'dtend', FALSE, TRUE );
|
| 1119 |
if( !empty( $end )) {
|
| 1120 |
+
$SCbools[ 'dtendExist'] = TRUE;
|
| 1121 |
+
$dateFormat['end'] = ( isset( $end['value']['hour'] )) ? 'Y-m-d H:i:s' : 'Y-m-d';
|
| 1122 |
}
|
| 1123 |
+
if( ! isset( $end['value']['tz'] ) && isset( $end['params']['TZID'] ))
|
| 1124 |
+
$end['value']['tz'] = $end['params']['TZID'];
|
| 1125 |
+
$end = $end['value'];
|
| 1126 |
if( empty( $end ) && ( $component->objName == 'vtodo' )) {
|
| 1127 |
$end = $component->getProperty( 'due' );
|
| 1128 |
if( !empty( $end )) {
|
| 1129 |
+
$SCbools[ 'dueExist'] = TRUE;
|
| 1130 |
+
$dateFormat['end'] = ( isset( $end['hour'] )) ? 'Y-m-d H:i:s' : 'Y-m-d';
|
| 1131 |
}
|
| 1132 |
}
|
| 1133 |
if( !empty( $end ) && !isset( $end['hour'] )) {
|
| 1134 |
/* a DTEND without time part regards an event that ends the day before,
|
| 1135 |
for an all-day event DTSTART=20071201 DTEND=20071202 (taking place 20071201!!! */
|
| 1136 |
+
$SCbools[ 'endAllDayEvent'] = TRUE;
|
| 1137 |
$endWdate = mktime( 23, 59, 59, $end['month'], ($end['day'] - 1), $end['year'] );
|
| 1138 |
$end['year'] = date( 'Y', $endWdate );
|
| 1139 |
$end['month'] = date( 'm', $endWdate );
|
| 1144 |
if( empty( $end )) {
|
| 1145 |
$end = $component->getProperty( 'duration', FALSE, FALSE, TRUE );// in dtend (array) format
|
| 1146 |
if( !empty( $end ))
|
| 1147 |
+
if( isset( $start['tz'] ))
|
| 1148 |
+
$end['tz'] = $start['tz'];
|
| 1149 |
+
$SCbools[ 'durationExist'] = TRUE;
|
| 1150 |
+
$dateFormat['end'] = ( isset( $start['hour'] )) ? 'Y-m-d H:i:s' : 'Y-m-d';
|
| 1151 |
+
// if( !empty($end)) echo 'selectComp 4 start='.implode('-',$start).' end='.implode('-',$end)."<br>\n"; // test ###
|
| 1152 |
}
|
| 1153 |
if( empty( $end )) { // assume one day duration if missing end date
|
| 1154 |
$end = array( 'year' => $start['year'], 'month' => $start['month'], 'day' => $start['day'], 'hour' => 23, 'min' => 59, 'sec' => 59 );
|
| 1155 |
+
if( isset( $start['tz'] ))
|
| 1156 |
+
$end['tz'] = $start['tz'];
|
| 1157 |
}
|
| 1158 |
+
// if( isset($end)) echo 'selectComp 5 start='.implode('-',$start).' end='.implode('-',$end)."<br>\n"; // test ###
|
| 1159 |
+
$endWdate = iCalUtilityFunctions::_SCsetXCurrentDateZ( iCalUtilityFunctions::_date2timestamp( $end ), $end );
|
| 1160 |
if( $endWdate < $startWdate ) { // MUST be after start date!!
|
| 1161 |
$end = array( 'year' => $start['year'], 'month' => $start['month'], 'day' => $start['day'], 'hour' => 23, 'min' => 59, 'sec' => 59 );
|
| 1162 |
$endWdate = iCalUtilityFunctions::_date2timestamp( $end );
|
| 1176 |
$exdatelist[$exWdate] = TRUE;
|
| 1177 |
} // end - foreach( $exdate as $theExdate )
|
| 1178 |
} // end - check exdate
|
| 1179 |
+
/* check recurrence-id (note, a missing sequence is the same as sequence=0 so don't test for sequence), remove hit with reccurr-id date */
|
| 1180 |
+
if( FALSE !== ( $recurrid = $component->getProperty( 'recurrence-id' ))) {
|
|
|
|
|
|
|
| 1181 |
$recurrid = iCalUtilityFunctions::_date2timestamp( $recurrid );
|
| 1182 |
$recurrid = mktime( 0, 0, 0, date( 'm', $recurrid ), date( 'd', $recurrid ), date( 'Y', $recurrid )); // on a day-basis !!!
|
| 1183 |
+
$recurridList[$recurrid] = TRUE; // no recurring to start this day
|
| 1184 |
+
// echo "adding comp no:$cix with date=".implode($start)." and recurrid=".implode($recurrid)." to recurridList id=$recurrid<br>\n"; // test ###
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1185 |
} // end recurrence-id/sequence test
|
| 1186 |
/* select only components with.. . */
|
| 1187 |
if(( !$any && ( $startWdate >= $startDate ) && ( $startWdate <= $endDate )) || // (dt)start within the period
|
| 1194 |
elseif( $split ) { // split the original component
|
| 1195 |
if( $endWdate > $endDate )
|
| 1196 |
$endWdate = $endDate; // use period end date
|
| 1197 |
+
$rstart = ( $startWdate < $startDate ) ? $startDate : $startWdate; // use period start date
|
| 1198 |
+
$startYMD = $rstartYMD = date( 'Ymd', $rstart );
|
|
|
|
|
|
|
| 1199 |
$endYMD = date( 'Ymd', $endWdate );
|
| 1200 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1201 |
+
// echo "going to test comp no:$cix with rstartYMD=$rstartYMD, endYMD=$endYMD and checkDate($checkDate) with recurridList=".implode(',',array_keys($recurridList))."<br>\n"; // test ###
|
| 1202 |
+
if( !isset( $exdatelist[$checkDate] )) { // exclude any recurrence START date, found in exdatelist
|
| 1203 |
+
while( $rstartYMD <= $endYMD ) { // iterate
|
| 1204 |
+
if( isset( $exdatelist[$checkDate] ) || // exclude any recurrence date, found in the exdatelist
|
| 1205 |
+
( isset( $recurridList[$checkDate] ) && !$recurrid )) { // or in the recurridList, but not itself
|
| 1206 |
+
// echo "skipping comp no:$cix with datestart=$rstartYMD and checkdate=$checkDate<br>\n"; // test ###
|
| 1207 |
+
$rstart += ( 24 *3600 ); // step one day
|
| 1208 |
+
$rstartYMD = date( 'Ymd', $rstart );
|
| 1209 |
+
continue;
|
| 1210 |
+
}
|
| 1211 |
+
iCalUtilityFunctions::_SCsetXCurrentStart( $component, $dateFormat, $checkDate, $rstartYMD, $rstart, $startYMD, $start );
|
| 1212 |
+
iCalUtilityFunctions::_SCsetXCurrentEnd( $component, $dateFormat, $rstart, $rstartYMD, $endWdate, $endYMD, $end, $SCbools );
|
| 1213 |
+
$wd = getdate( $rstart );
|
| 1214 |
+
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component->copy(); // copy to output
|
| 1215 |
+
$rstart += ( 24 *3600 ); // step one day
|
| 1216 |
+
$rstartYMD = date( 'Ymd', $rstart );
|
| 1217 |
+
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1218 |
+
} // end while( $rstart <= $endWdate )
|
| 1219 |
+
} // end if( !isset( $exdatelist[$checkDate] ))
|
| 1220 |
+
} // end elseif( $split ) - else use component date
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1221 |
elseif( $recurrid && !$flat && !$any && !$split )
|
| 1222 |
$continue = TRUE;
|
| 1223 |
else { // !$flat && !$split, i.e. no flat array and DTSTART within period
|
| 1224 |
$checkDate = mktime( 0, 0, 0, date( 'm', $startWdate ), date( 'd', $startWdate ), date( 'Y', $startWdate ) ); // on a day-basis !!!
|
| 1225 |
+
// echo "going to test comp no:$cix with checkDate=$checkDate with recurridList=".implode(',',array_keys($recurridList)); // test ###
|
| 1226 |
+
if(( !$any || !isset( $exdatelist[$checkDate] )) && // exclude any recurrence date, found in exdatelist
|
| 1227 |
+
( !isset( $recurridList[$checkDate] ) || $recurrid )) { // or in the recurridList, but not itself
|
| 1228 |
+
// echo " and copied to output<br>\n"; // test ###
|
| 1229 |
$wd = getdate( $startWdate );
|
| 1230 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component->copy(); // copy to output
|
| 1231 |
}
|
| 1232 |
}
|
| 1233 |
} // end if(( $startWdate >= $startDate ) && ( $startWdate <= $endDate ))
|
|
|
|
| 1234 |
/* if 'any' components, check components with reccurrence rules, removing all excluding dates */
|
| 1235 |
if( TRUE === $any ) {
|
| 1236 |
/* make a list of optional repeating dates for component occurence, rrule, rdate */
|
| 1237 |
$recurlist = array();
|
| 1238 |
while( FALSE !== ( $rrule = $component->getProperty( 'rrule' ))) // check rrule
|
| 1239 |
iCalUtilityFunctions::_recur2date( $recurlist, $rrule, $start, $workstart, $workend );
|
| 1240 |
+
foreach( $recurlist as $recurkey => $recurvalue ) // key=match date as timestamp
|
| 1241 |
+
$recurlist[$recurkey] = $rdurWsecs; // add duration in seconds
|
| 1242 |
while( FALSE !== ( $rdate = $component->getProperty( 'rdate' ))) { // check rdate
|
| 1243 |
foreach( $rdate as $theRdate ) {
|
| 1244 |
+
if( is_array( $theRdate ) && ( 2 == count( $theRdate )) && // all days within PERIOD
|
| 1245 |
array_key_exists( '0', $theRdate ) && array_key_exists( '1', $theRdate )) {
|
| 1246 |
$rstart = iCalUtilityFunctions::_date2timestamp( $theRdate[0] );
|
| 1247 |
if(( $rstart < ( $startDate - $rdurWsecs )) || ( $rstart > $endDate ))
|
| 1264 |
}
|
| 1265 |
}
|
| 1266 |
} // end - check rdate
|
| 1267 |
+
foreach( $recurlist as $recurkey => $durvalue ) { // remove all recurrence START dates found in the exdatelist
|
| 1268 |
+
$checkDate = mktime( 0, 0, 0, date( 'm', $recurkey ), date( 'd', $recurkey ), date( 'Y', $recurkey ) ); // on a day-basis !!!
|
| 1269 |
+
if( isset( $exdatelist[$checkDate] )) // no recurring to start this day
|
| 1270 |
+
unset( $recurlist[$recurkey] );
|
| 1271 |
+
}
|
| 1272 |
if( 0 < count( $recurlist )) {
|
| 1273 |
ksort( $recurlist );
|
| 1274 |
$xRecurrence = 1;
|
| 1275 |
$component2 = $component->copy();
|
| 1276 |
$compUID = $component2->getProperty( 'UID' );
|
| 1277 |
foreach( $recurlist as $recurkey => $durvalue ) {
|
| 1278 |
+
// echo "recurKey=".date( 'Y-m-d H:i:s', $recurkey ).' dur='.iCalUtilityFunctions::offsetSec2His( $durvalue )."<br>\n"; // test ###;
|
| 1279 |
if((( $startDate - $rdurWsecs ) > $recurkey ) || ( $endDate < $recurkey )) // not within period
|
| 1280 |
continue;
|
| 1281 |
$checkDate = mktime( 0, 0, 0, date( 'm', $recurkey ), date( 'd', $recurkey ), date( 'Y', $recurkey ) ); // on a day-basis !!!
|
| 1282 |
+
if( isset( $recurridList[$checkDate] )) // no recurring to start this day
|
| 1283 |
continue;
|
| 1284 |
+
if( isset( $exdatelist[$checkDate] )) // check excluded dates
|
| 1285 |
+
continue;
|
| 1286 |
+
if( $startWdate >= $recurkey ) // exclude component start date
|
| 1287 |
continue;
|
| 1288 |
$rstart = $recurkey;
|
| 1289 |
$rend = $recurkey + $durvalue;
|
| 1294 |
}
|
| 1295 |
/* add repeating components within valid dates to output array, one each day */
|
| 1296 |
elseif( $split ) {
|
| 1297 |
+
$xRecurrence += 1;
|
| 1298 |
if( $rend > $endDate )
|
| 1299 |
$rend = $endDate;
|
| 1300 |
+
$startYMD = $rstartYMD = date( 'Ymd', $rstart );
|
| 1301 |
$endYMD = date( 'Ymd', $rend );
|
| 1302 |
+
// echo "splitStart=".date( 'Y-m-d H:i:s', $rstart ).' end='.date( 'Y-m-d H:i:s', $rend )."<br>\n"; // test ###;
|
| 1303 |
+
while( $rstartYMD <= $endYMD ) { // iterate.. .
|
| 1304 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1305 |
+
if( isset( $recurridList[$checkDate] )) // no recurring to start this day
|
| 1306 |
break;
|
| 1307 |
+
if( isset( $exdatelist[$checkDate] )) // exclude any recurrence START date, found in exdatelist
|
| 1308 |
+
break;
|
| 1309 |
+
// echo "checking date after startdate=".date( 'Y-m-d H:i:s', $rstart ).' mot '.date( 'Y-m-d H:i:s', $startDate )."<br>"; // test ###;
|
| 1310 |
+
if( $rstart >= $startDate ) { // date after dtstart
|
| 1311 |
+
iCalUtilityFunctions::_SCsetXCurrentStart( $component2, $dateFormat, $checkDate, $rstartYMD, $rstart, $startYMD, $start );
|
| 1312 |
+
iCalUtilityFunctions::_SCsetXCurrentEnd( $component2, $dateFormat, $rstart, $rstartYMD, $endWdate, $endYMD, $end, $SCbools );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1313 |
$component2->setProperty( 'X-RECURRENCE', $xRecurrence );
|
| 1314 |
$wd = getdate( $rstart );
|
| 1315 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component2->copy(); // copy to output
|
| 1316 |
+
} // end if$rstart >= $startDate { // date after dtstart
|
| 1317 |
+
$rstart += ( 24 *3600 ); // step one day
|
| 1318 |
+
$rstartYMD = date( 'Ymd', $rstart );
|
| 1319 |
} // end while( $rstart <= $rend )
|
|
|
|
| 1320 |
} // end elseif( $split )
|
| 1321 |
+
elseif( $rstart >= $startDate ) { // date within period //* flat=FALSE && split=FALSE => one comp every recur startdate *//
|
| 1322 |
+
$xRecurrence += 1;
|
| 1323 |
$checkDate = mktime( 0, 0, 0, date( 'm', $rstart ), date( 'd', $rstart ), date( 'Y', $rstart ) ); // on a day-basis !!!
|
| 1324 |
+
if( !isset( $exdatelist[$checkDate] )) { // exclude any recurrence START date, found in exdatelist
|
| 1325 |
+
iCalUtilityFunctions::_SCsetXCurrentStart( $component2, $dateFormat, $rstart, FALSE, FALSE, FALSE, $start );
|
| 1326 |
+
$tend = $rstart + $rdurWsecs;
|
| 1327 |
+
iCalUtilityFunctions::_SCsetXCurrentEnd( $component2, $dateFormat, $tend, date( 'Ymd', $tend ), $endWdate, date( 'Ymd', $endWdate ), $end, $SCbools );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1328 |
$component2->setProperty( 'X-RECURRENCE', $xRecurrence );
|
| 1329 |
$wd = getdate( $rstart );
|
| 1330 |
$result[$wd['year']][$wd['mon']][$wd['mday']][$compUID] = $component2->copy(); // copy to output
|
| 1331 |
} // end if( !isset( $exdatelist[$checkDate] ))
|
| 1332 |
} // end elseif( $rstart >= $startDate )
|
| 1333 |
} // end foreach( $recurlist as $recurkey => $durvalue )
|
| 1334 |
+
unset( $component2 );
|
| 1335 |
} // end if( 0 < count( $recurlist ))
|
| 1336 |
/* deselect components with startdate/enddate not within period */
|
| 1337 |
if(( $endWdate < $startDate ) || ( $startWdate > $endDate ))
|
| 1338 |
continue;
|
| 1339 |
} // end if( TRUE === $any )
|
| 1340 |
} // end foreach ( $this->components as $cix => $component )
|
| 1341 |
+
unset( $SCbools, $recurrid, $recurridList,
|
| 1342 |
+
$end, $startWdate, $endWdate, $rdurWsecs, $rdur, $exdatelist, $recurlist, $workstart, $workend, $dateFormat ); // clean up
|
| 1343 |
+
if( 0 >= count( $result ))
|
| 1344 |
+
return FALSE;
|
| 1345 |
elseif( !$flat ) {
|
| 1346 |
foreach( $result as $y => $yeararr ) {
|
| 1347 |
foreach( $yeararr as $m => $montharr ) {
|
| 1348 |
foreach( $montharr as $d => $dayarr ) {
|
| 1349 |
if( empty( $result[$y][$m][$d] ))
|
| 1350 |
unset( $result[$y][$m][$d] );
|
| 1351 |
+
else {
|
| 1352 |
+
$result[$y][$m][$d] = array_values( $dayarr ); // skip tricky UID-index
|
| 1353 |
+
if( 1 < count( $result[$y][$m][$d] )) {
|
| 1354 |
+
foreach( $result[$y][$m][$d] as & $c ) // sort
|
| 1355 |
+
iCalUtilityFunctions::_setSortArgs( $c );
|
| 1356 |
+
usort( $result[$y][$m][$d], array( 'iCalUtilityFunctions', '_cmpfcn' ));
|
| 1357 |
+
}
|
| 1358 |
+
}
|
| 1359 |
+
} // end foreach( $montharr as $d => $dayarr )
|
| 1360 |
if( empty( $result[$y][$m] ))
|
| 1361 |
unset( $result[$y][$m] );
|
| 1362 |
else
|
| 1363 |
ksort( $result[$y][$m] );
|
| 1364 |
+
} // end foreach( $yeararr as $m => $montharr )
|
| 1365 |
if( empty( $result[$y] ))
|
| 1366 |
unset( $result[$y] );
|
| 1367 |
else
|
| 1368 |
ksort( $result[$y] );
|
| 1369 |
+
}// end foreach( $result as $y => $yeararr )
|
| 1370 |
if( empty( $result ))
|
| 1371 |
unset( $result );
|
| 1372 |
else
|
| 1380 |
* select components from calendar on based on specific property value(-s)
|
| 1381 |
*
|
| 1382 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1383 |
+
* @since 2.16.6 - 2012-12-26
|
| 1384 |
* @param array $selectOptions, (string) key => (mixed) value, (key=propertyName)
|
| 1385 |
* @return array
|
| 1386 |
*/
|
| 1388 |
$output = array();
|
| 1389 |
$allowedComps = array('vevent', 'vtodo', 'vjournal', 'vfreebusy' );
|
| 1390 |
$allowedProperties = array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL' );
|
| 1391 |
+
$selectOptions = array_change_key_case( $selectOptions, CASE_UPPER );
|
| 1392 |
foreach( $this->components as $cix => $component3 ) {
|
| 1393 |
if( !in_array( $component3->objName, $allowedComps ))
|
| 1394 |
continue;
|
| 1395 |
$uid = $component3->getProperty( 'UID' );
|
| 1396 |
foreach( $selectOptions as $propName => $pvalue ) {
|
|
|
|
| 1397 |
if( !in_array( $propName, $allowedProperties ))
|
| 1398 |
continue;
|
| 1399 |
if( !is_array( $pvalue ))
|
| 1400 |
$pvalue = array( $pvalue );
|
| 1401 |
if(( 'UID' == $propName ) && in_array( $uid, $pvalue )) {
|
| 1402 |
+
$output[$uid][] = $component3->copy();
|
| 1403 |
continue;
|
| 1404 |
}
|
| 1405 |
elseif(( 'ATTENDEE' == $propName ) || ( 'CATEGORIES' == $propName ) || ( 'CONTACT' == $propName ) || ( 'RELATED-TO' == $propName ) || ( 'RESOURCES' == $propName )) { // multiple occurrence?
|
| 1407 |
$component3->_getProperties( $propName, $propValues );
|
| 1408 |
$propValues = array_keys( $propValues );
|
| 1409 |
foreach( $pvalue as $theValue ) {
|
| 1410 |
+
if( in_array( $theValue, $propValues )) { // && !isset( $output[$uid] )) {
|
| 1411 |
+
$output[$uid][] = $component3->copy();
|
| 1412 |
break;
|
| 1413 |
}
|
| 1414 |
}
|
| 1419 |
if( is_array( $d )) {
|
| 1420 |
foreach( $d as $part ) {
|
| 1421 |
if( in_array( $part, $pvalue ) && !isset( $output[$uid] ))
|
| 1422 |
+
$output[$uid][] = $component3->copy();
|
| 1423 |
}
|
| 1424 |
}
|
| 1425 |
elseif(( 'SUMMARY' == $propName ) && !isset( $output[$uid] )) {
|
| 1426 |
foreach( $pvalue as $pval ) {
|
| 1427 |
if( FALSE !== stripos( $d, $pval )) {
|
| 1428 |
+
$output[$uid][] = $component3->copy();
|
| 1429 |
break;
|
| 1430 |
}
|
| 1431 |
}
|
| 1432 |
}
|
| 1433 |
elseif( in_array( $d, $pvalue ) && !isset( $output[$uid] ))
|
| 1434 |
+
$output[$uid][] = $component3->copy();
|
| 1435 |
} // end foreach( $selectOptions as $propName => $pvalue ) {
|
| 1436 |
} // end foreach( $this->components as $cix => $component3 ) {
|
| 1437 |
if( !empty( $output )) {
|
| 1438 |
+
ksort( $output ); // uid order
|
| 1439 |
+
$output2 = array();
|
| 1440 |
+
foreach( $output as $uid => $components ) {
|
| 1441 |
+
foreach( $components as $component )
|
| 1442 |
+
$output2[] = $component;
|
| 1443 |
+
}
|
| 1444 |
+
$output = $output2;
|
| 1445 |
}
|
| 1446 |
return $output;
|
| 1447 |
}
|
| 1448 |
/**
|
| 1449 |
+
* replace calendar component in vcalendar
|
| 1450 |
*
|
| 1451 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1452 |
+
* @since 2.18.14 - 2014-03-30
|
| 1453 |
+
* @param object $component calendar component
|
| 1454 |
+
* @return bool
|
| 1455 |
+
*/
|
| 1456 |
+
function replaceComponent( $component ) {
|
| 1457 |
+
if( in_array( $component->objName, array( 'vevent', 'vtodo', 'vjournal', 'vfreebusy' )))
|
| 1458 |
+
return $this->setComponent( $component, $component->getProperty( 'UID' ));
|
| 1459 |
+
if(( 'vtimezone' != $component->objName ) || ( FALSE === ( $tzid = $component->getProperty( 'TZID' ))))
|
| 1460 |
+
return FALSE;
|
| 1461 |
+
foreach( $this->components as $cix => $comp ) {
|
| 1462 |
+
if( 'vtimezone' != $component->objName )
|
| 1463 |
+
continue;
|
| 1464 |
+
if( $tzid == $comp->getComponent( 'TZID' )) {
|
| 1465 |
+
unset( $component->propix, $component->compix );
|
| 1466 |
+
$this->components[$cix] = $component;
|
| 1467 |
+
return TRUE;
|
| 1468 |
+
}
|
| 1469 |
+
}
|
| 1470 |
+
return FALSE;
|
| 1471 |
+
}
|
| 1472 |
+
/**
|
| 1473 |
+
* add calendar component to calendar
|
| 1474 |
+
*
|
| 1475 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1476 |
+
* @since 2.19.3 - 2014-03-30
|
| 1477 |
* @param object $component calendar component
|
| 1478 |
* @param mixed $arg1 optional, ordno/component type/ component uid
|
| 1479 |
* @param mixed $arg2 optional, ordno if arg1 = component type
|
| 1480 |
+
* @return bool
|
| 1481 |
*/
|
| 1482 |
function setComponent( $component, $arg1=FALSE, $arg2=FALSE ) {
|
| 1483 |
$component->setConfig( $this->getConfig(), FALSE, TRUE );
|
| 1486 |
$dummy1 = $component->getProperty( 'dtstamp' );
|
| 1487 |
$dummy2 = $component->getProperty( 'uid' );
|
| 1488 |
}
|
| 1489 |
+
unset( $component->propix, $component->compix );
|
| 1490 |
if( !$arg1 ) { // plain insert, last in chain
|
| 1491 |
$this->components[] = $component->copy();
|
| 1492 |
return TRUE;
|
| 1537 |
* otherwise sorting on specific (argument) property values
|
| 1538 |
*
|
| 1539 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1540 |
+
* @since 2.18.4 - 2013-08-18
|
| 1541 |
* @param string $sortArg, optional
|
| 1542 |
+
* @uses iCalUtilityFunctions::_setSortArgs()
|
| 1543 |
+
* @uses iCalUtilityFunctions::_cmpfcn()
|
| 1544 |
* @return void
|
|
|
|
| 1545 |
*/
|
| 1546 |
function sort( $sortArg=FALSE ) {
|
| 1547 |
+
if( ! is_array( $this->components ) || ( 2 > count( $this->components )))
|
| 1548 |
+
return;
|
| 1549 |
+
if( $sortArg ) {
|
| 1550 |
+
$sortArg = strtoupper( $sortArg );
|
| 1551 |
+
if( !in_array( $sortArg, array( 'ATTENDEE', 'CATEGORIES', 'CONTACT', 'DTSTAMP', 'LOCATION', 'ORGANIZER', 'PRIORITY', 'RELATED-TO', 'RESOURCES', 'STATUS', 'SUMMARY', 'UID', 'URL' )))
|
| 1552 |
+
$sortArg = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1553 |
}
|
| 1554 |
+
foreach( $this->components as & $c )
|
| 1555 |
+
iCalUtilityFunctions::_setSortArgs( $c, $sortArg );
|
| 1556 |
+
usort( $this->components, array( 'iCalUtilityFunctions', '_cmpfcn' ));
|
| 1557 |
}
|
| 1558 |
/**
|
| 1559 |
* parse iCal text/file into vcalendar, components, properties and parameters
|
| 1560 |
*
|
| 1561 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 1562 |
+
* @since 2.18.16 - 2014-04-04
|
| 1563 |
* @param mixed $unparsedtext, optional, strict rfc2445 formatted, single property string or array of property strings
|
| 1564 |
* @return bool FALSE if error occurs during parsing
|
|
|
|
| 1565 |
*/
|
| 1566 |
function parse( $unparsedtext=FALSE ) {
|
| 1567 |
$nl = $this->getConfig( 'nl' );
|
| 1568 |
if(( FALSE === $unparsedtext ) || empty( $unparsedtext )) {
|
| 1569 |
+
/* directory+filename is set previously via setConfig url or directory+filename */
|
| 1570 |
+
if( FALSE === ( $file = $this->getConfig( 'url' ))) {
|
| 1571 |
+
if( FALSE === ( $file = $this->getConfig( 'dirfile' )))
|
| 1572 |
+
return FALSE; /* err 1 */
|
| 1573 |
+
if( ! is_file( $file ))
|
| 1574 |
+
return FALSE; /* err 2 */
|
| 1575 |
+
if( ! is_readable( $file ))
|
| 1576 |
+
return FALSE; /* err 3 */
|
| 1577 |
+
}
|
| 1578 |
/* READ FILE */
|
| 1579 |
+
if( FALSE === ( $rows = file_get_contents( $file )))
|
| 1580 |
+
return FALSE; /* err 5 */
|
| 1581 |
}
|
| 1582 |
elseif( is_array( $unparsedtext ))
|
| 1583 |
$rows = implode( '\n'.$nl, $unparsedtext );
|
| 1584 |
else
|
| 1585 |
$rows = & $unparsedtext;
|
| 1586 |
/* fix line folding */
|
| 1587 |
+
$rows = iCalUtilityFunctions::convEolChar( $rows, $nl );
|
| 1588 |
/* skip leading (empty/invalid) lines */
|
| 1589 |
foreach( $rows as $lix => $line ) {
|
| 1590 |
if( FALSE !== stripos( $line, 'BEGIN:VCALENDAR' ))
|
| 1668 |
$line .= rtrim( substr( $this->unparsed[++$i], 1 ), $nl );
|
| 1669 |
$proprows[] = $line;
|
| 1670 |
}
|
|
|
|
|
|
|
|
|
|
| 1671 |
foreach( $proprows as $line ) {
|
| 1672 |
if( '\n' == substr( $line, -2 ))
|
| 1673 |
$line = substr( $line, 0, -2 );
|
| 1690 |
/* rest of the line is opt.params and value */
|
| 1691 |
$line = substr( $line, $cix);
|
| 1692 |
/* separate attributes from value */
|
| 1693 |
+
iCalUtilityFunctions::_splitContent( $line, $propAttr );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1694 |
/* update Property */
|
| 1695 |
if( FALSE !== strpos( $line, ',' )) {
|
| 1696 |
$content = array( 0 => '' );
|
| 1706 |
}
|
| 1707 |
if( 1 < count( $content )) {
|
| 1708 |
foreach( $content as $cix => $contentPart )
|
| 1709 |
+
$content[$cix] = iCalUtilityFunctions::_strunrep( $contentPart );
|
| 1710 |
+
$this->setProperty( $propname, $content, $propAttr );
|
| 1711 |
continue;
|
| 1712 |
}
|
| 1713 |
else
|
| 1714 |
$line = reset( $content );
|
| 1715 |
+
$line = iCalUtilityFunctions::_strunrep( $line );
|
| 1716 |
}
|
| 1717 |
+
$this->setProperty( $propname, rtrim( $line, "\x00..\x1F" ), $propAttr );
|
| 1718 |
} // end - foreach( $this->unparsed.. .
|
| 1719 |
} // end - if( is_array( $this->unparsed.. .
|
| 1720 |
unset( $unparsedtext, $rows, $this->unparsed, $proprows );
|
| 2008 |
* set calendar component property action
|
| 2009 |
*
|
| 2010 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2011 |
+
* @since 2.16.21 - 2013-06-23
|
| 2012 |
* @param string $value "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE"
|
| 2013 |
* @param mixed $params
|
| 2014 |
* @return bool
|
| 2015 |
*/
|
| 2016 |
function setAction( $value, $params=FALSE ) {
|
| 2017 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2018 |
$this->action = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2019 |
return TRUE;
|
| 2020 |
}
|
| 2057 |
* set calendar component property attach
|
| 2058 |
*
|
| 2059 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2060 |
+
* @since 2.16.21 - 2013-06-23
|
| 2061 |
* @param string $value
|
| 2062 |
* @param array $params, optional
|
| 2063 |
* @param integer $index, optional
|
| 2064 |
* @return bool
|
| 2065 |
*/
|
| 2066 |
function setAttach( $value, $params=FALSE, $index=FALSE ) {
|
| 2067 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2068 |
iCalUtilityFunctions::_setMval( $this->attach, $value, $params, FALSE, $index );
|
| 2069 |
return TRUE;
|
| 2070 |
}
|
| 2162 |
* set calendar component property attach
|
| 2163 |
*
|
| 2164 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2165 |
+
* @since 2.18.13 - 2013-09-22
|
| 2166 |
* @param string $value
|
| 2167 |
* @param array $params, optional
|
| 2168 |
* @param integer $index, optional
|
| 2169 |
* @return bool
|
| 2170 |
*/
|
| 2171 |
function setAttendee( $value, $params=FALSE, $index=FALSE ) {
|
| 2172 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2173 |
// ftp://, http://, mailto:, file://, gopher://, news:, nntp://, telnet://, wais://, prospero:// may exist.. . also in params
|
| 2174 |
if( !empty( $value )) {
|
| 2175 |
if( FALSE === ( $pos = strpos( substr( $value, 0, 9 ), ':' )))
|
| 2181 |
$params2 = array();
|
| 2182 |
if( is_array($params )) {
|
| 2183 |
$optarrays = array();
|
| 2184 |
+
$params = array_change_key_case( $params, CASE_UPPER );
|
| 2185 |
foreach( $params as $optparamlabel => $optparamvalue ) {
|
| 2186 |
+
if(( 'X-' != substr( $optparamlabel, 0, 2 )) && (( 'vfreebusy' == $this->objName ) || ( 'valarm' == $this->objName )))
|
| 2187 |
+
continue;
|
| 2188 |
switch( $optparamlabel ) {
|
| 2189 |
case 'MEMBER':
|
| 2190 |
case 'DELEGATED-TO':
|
| 2242 |
* creates formatted output for calendar component property categories
|
| 2243 |
*
|
| 2244 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2245 |
+
* @since 2.16.2 - 2012-12-18
|
| 2246 |
* @return string
|
| 2247 |
*/
|
| 2248 |
function createCategories() {
|
| 2257 |
$attributes = $this->_createParams( $category['params'], array( 'LANGUAGE' ));
|
| 2258 |
if( is_array( $category['value'] )) {
|
| 2259 |
foreach( $category['value'] as $cix => $categoryPart )
|
| 2260 |
+
$category['value'][$cix] = iCalUtilityFunctions::_strrep( $categoryPart, $this->format, $this->nl );
|
| 2261 |
$content = implode( ',', $category['value'] );
|
| 2262 |
}
|
| 2263 |
else
|
| 2264 |
+
$content = iCalUtilityFunctions::_strrep( $category['value'], $this->format, $this->nl );
|
| 2265 |
$output .= $this->_createElement( 'CATEGORIES', $attributes, $content );
|
| 2266 |
}
|
| 2267 |
return $output;
|
| 2270 |
* set calendar component property categories
|
| 2271 |
*
|
| 2272 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2273 |
+
* @since 2.16.21 - 2013-06-23
|
| 2274 |
* @param mixed $value
|
| 2275 |
* @param array $params, optional
|
| 2276 |
* @param integer $index, optional
|
| 2277 |
* @return bool
|
| 2278 |
*/
|
| 2279 |
function setCategories( $value, $params=FALSE, $index=FALSE ) {
|
| 2280 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2281 |
iCalUtilityFunctions::_setMval( $this->categories, $value, $params, FALSE, $index );
|
| 2282 |
return TRUE;
|
| 2283 |
}
|
| 2303 |
* set calendar component property class
|
| 2304 |
*
|
| 2305 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2306 |
+
* @since 2.16.21 - 2013-06-23
|
| 2307 |
* @param string $value "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token / x-name
|
| 2308 |
* @param array $params optional
|
| 2309 |
* @return bool
|
| 2310 |
*/
|
| 2311 |
function setClass( $value, $params=FALSE ) {
|
| 2312 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2313 |
$this->class = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2314 |
return TRUE;
|
| 2315 |
}
|
| 2321 |
* creates formatted output for calendar component property comment
|
| 2322 |
*
|
| 2323 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2324 |
+
* @since 2.16.2 - 2012-12-18
|
| 2325 |
* @return string
|
| 2326 |
*/
|
| 2327 |
function createComment() {
|
| 2333 |
continue;
|
| 2334 |
}
|
| 2335 |
$attributes = $this->_createParams( $commentPart['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2336 |
+
$content = iCalUtilityFunctions::_strrep( $commentPart['value'], $this->format, $this->nl );
|
| 2337 |
$output .= $this->_createElement( 'COMMENT', $attributes, $content );
|
| 2338 |
}
|
| 2339 |
return $output;
|
| 2342 |
* set calendar component property comment
|
| 2343 |
*
|
| 2344 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2345 |
+
* @since 2.16.21 - 2013-06-23
|
| 2346 |
* @param string $value
|
| 2347 |
* @param array $params, optional
|
| 2348 |
* @param integer $index, optional
|
| 2349 |
* @return bool
|
| 2350 |
*/
|
| 2351 |
function setComment( $value, $params=FALSE, $index=FALSE ) {
|
| 2352 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2353 |
iCalUtilityFunctions::_setMval( $this->comment, $value, $params, FALSE, $index );
|
| 2354 |
return TRUE;
|
| 2355 |
}
|
| 2383 |
* set calendar component property completed
|
| 2384 |
*
|
| 2385 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2386 |
+
* @since 2.16.21 - 2013-06-23
|
| 2387 |
* @param mixed $year
|
| 2388 |
* @param mixed $month optional
|
| 2389 |
* @param int $day optional
|
| 2396 |
function setCompleted( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2397 |
if( empty( $year )) {
|
| 2398 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2399 |
+
$this->completed = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2400 |
return TRUE;
|
| 2401 |
}
|
| 2402 |
else
|
| 2413 |
* creates formatted output for calendar component property contact
|
| 2414 |
*
|
| 2415 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2416 |
+
* @since 2.16.2 - 2012-12-18
|
| 2417 |
* @return string
|
| 2418 |
*/
|
| 2419 |
function createContact() {
|
| 2422 |
foreach( $this->contact as $contact ) {
|
| 2423 |
if( !empty( $contact['value'] )) {
|
| 2424 |
$attributes = $this->_createParams( $contact['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2425 |
+
$content = iCalUtilityFunctions::_strrep( $contact['value'], $this->format, $this->nl );
|
| 2426 |
$output .= $this->_createElement( 'CONTACT', $attributes, $content );
|
| 2427 |
}
|
| 2428 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'CONTACT' );
|
| 2433 |
* set calendar component property contact
|
| 2434 |
*
|
| 2435 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2436 |
+
* @since 2.16.21 - 2013-06-23
|
| 2437 |
* @param string $value
|
| 2438 |
* @param array $params, optional
|
| 2439 |
* @param integer $index, optional
|
| 2440 |
* @return bool
|
| 2441 |
*/
|
| 2442 |
function setContact( $value, $params=FALSE, $index=FALSE ) {
|
| 2443 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 2444 |
iCalUtilityFunctions::_setMval( $this->contact, $value, $params, FALSE, $index );
|
| 2445 |
return TRUE;
|
| 2446 |
}
|
| 2465 |
* set calendar component property created
|
| 2466 |
*
|
| 2467 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2468 |
+
* @since 2.19.5 - 2014-03-29
|
| 2469 |
* @param mixed $year optional
|
| 2470 |
* @param mixed $month optional
|
| 2471 |
* @param int $day optional
|
| 2476 |
* @return bool
|
| 2477 |
*/
|
| 2478 |
function setCreated( $year=FALSE, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2479 |
+
if( !isset( $year ))
|
| 2480 |
+
$year = gmdate( 'Ymd\THis' );
|
|
|
|
| 2481 |
$this->created = iCalUtilityFunctions::_setDate2( $year, $month, $day, $hour, $min, $sec, $params );
|
| 2482 |
return TRUE;
|
| 2483 |
}
|
| 2489 |
* creates formatted output for calendar component property description
|
| 2490 |
*
|
| 2491 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2492 |
+
* @since 2.16.2 - 2012-12-18
|
| 2493 |
* @return string
|
| 2494 |
*/
|
| 2495 |
function createDescription() {
|
| 2498 |
foreach( $this->description as $description ) {
|
| 2499 |
if( !empty( $description['value'] )) {
|
| 2500 |
$attributes = $this->_createParams( $description['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 2501 |
+
$content = iCalUtilityFunctions::_strrep( $description['value'], $this->format, $this->nl );
|
| 2502 |
$output .= $this->_createElement( 'DESCRIPTION', $attributes, $content );
|
| 2503 |
}
|
| 2504 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'DESCRIPTION' );
|
| 2509 |
* set calendar component property description
|
| 2510 |
*
|
| 2511 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2512 |
+
* @since 2.16.21 - 2013-06-23
|
| 2513 |
* @param string $value
|
| 2514 |
* @param array $params, optional
|
| 2515 |
* @param integer $index, optional
|
| 2516 |
* @return bool
|
| 2517 |
*/
|
| 2518 |
function setDescription( $value, $params=FALSE, $index=FALSE ) {
|
| 2519 |
+
if( empty( $value )) { if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE; }
|
| 2520 |
if( 'vjournal' != $this->objName )
|
| 2521 |
$index = 1;
|
| 2522 |
iCalUtilityFunctions::_setMval( $this->description, $value, $params, FALSE, $index );
|
| 2553 |
* set calendar component property dtend
|
| 2554 |
*
|
| 2555 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2556 |
+
* @since 2.16.21 - 2013-06-23
|
| 2557 |
* @param mixed $year
|
| 2558 |
* @param mixed $month optional
|
| 2559 |
* @param int $day optional
|
| 2567 |
function setDtend( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2568 |
if( empty( $year )) {
|
| 2569 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2570 |
+
$this->dtend = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2571 |
return TRUE;
|
| 2572 |
}
|
| 2573 |
else
|
| 2603 |
* computes datestamp for calendar component object instance dtstamp
|
| 2604 |
*
|
| 2605 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2606 |
+
* @since 2.19.5 - 2014-03-29
|
| 2607 |
* @return void
|
| 2608 |
*/
|
| 2609 |
function _makeDtstamp() {
|
| 2610 |
+
$d = gmdate( 'Y-m-d-H-i-s', time());
|
| 2611 |
$date = explode( '-', $d );
|
| 2612 |
$this->dtstamp['value'] = array( 'year' => $date[0], 'month' => $date[1], 'day' => $date[2], 'hour' => $date[3], 'min' => $date[4], 'sec' => $date[5], 'tz' => 'Z' );
|
| 2613 |
$this->dtstamp['params'] = null;
|
| 2667 |
* set calendar component property dtstart
|
| 2668 |
*
|
| 2669 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2670 |
+
* @since 2.16.21 - 2013-06-23
|
| 2671 |
* @param mixed $year
|
| 2672 |
* @param mixed $month optional
|
| 2673 |
* @param int $day optional
|
| 2681 |
function setDtstart( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2682 |
if( empty( $year )) {
|
| 2683 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2684 |
+
$this->dtstart = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2685 |
return TRUE;
|
| 2686 |
}
|
| 2687 |
else
|
| 2723 |
* set calendar component property due
|
| 2724 |
*
|
| 2725 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2726 |
+
* @since 2.16.21 - 2013-06-23
|
| 2727 |
* @param mixed $year
|
| 2728 |
* @param mixed $month optional
|
| 2729 |
* @param int $day optional
|
| 2736 |
function setDue( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 2737 |
if( empty( $year )) {
|
| 2738 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2739 |
+
$this->due = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2740 |
return TRUE;
|
| 2741 |
}
|
| 2742 |
else
|
| 2753 |
* creates formatted output for calendar component property duration
|
| 2754 |
*
|
| 2755 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2756 |
+
* @since 2.16.21 - 2013-05-25
|
| 2757 |
* @return string
|
| 2758 |
*/
|
| 2759 |
function createDuration() {
|
| 2764 |
!isset( $this->duration['value']['min'] ) &&
|
| 2765 |
!isset( $this->duration['value']['sec'] ))
|
| 2766 |
if( $this->getConfig( 'allowEmpty' ))
|
| 2767 |
+
return $this->_createElement( 'DURATION' );
|
| 2768 |
else return FALSE;
|
| 2769 |
$attributes = $this->_createParams( $this->duration['params'] );
|
| 2770 |
return $this->_createElement( 'DURATION', $attributes, iCalUtilityFunctions::_duration2str( $this->duration['value'] ));
|
| 2773 |
* set calendar component property duration
|
| 2774 |
*
|
| 2775 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2776 |
+
* @since 2.16.21 - 2013-05-25
|
| 2777 |
* @param mixed $week
|
| 2778 |
* @param mixed $day optional
|
| 2779 |
* @param int $hour optional
|
| 2783 |
* @return bool
|
| 2784 |
*/
|
| 2785 |
function setDuration( $week, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 2786 |
+
if( empty( $week ) && empty( $day ) && empty( $hour ) && empty( $min ) && empty( $sec )) {
|
| 2787 |
+
if( $this->getConfig( 'allowEmpty' ))
|
| 2788 |
+
$week = $day = null;
|
| 2789 |
+
else
|
| 2790 |
+
return FALSE;
|
| 2791 |
+
}
|
| 2792 |
if( is_array( $week ) && ( 1 <= count( $week )))
|
| 2793 |
$this->duration = array( 'value' => iCalUtilityFunctions::_duration2arr( $week ), 'params' => iCalUtilityFunctions::_setParams( $day ));
|
| 2794 |
elseif( is_string( $week ) && ( 3 <= strlen( trim( $week )))) {
|
| 2797 |
$week = substr( $week, 1 );
|
| 2798 |
$this->duration = array( 'value' => iCalUtilityFunctions::_durationStr2arr( $week ), 'params' => iCalUtilityFunctions::_setParams( $day ));
|
| 2799 |
}
|
|
|
|
|
|
|
| 2800 |
else
|
| 2801 |
+
$this->duration = array( 'value' => iCalUtilityFunctions::_duration2arr( array( 'week' => $week, 'day' => $day, 'hour' => $hour, 'min' => $min, 'sec' => $sec ))
|
| 2802 |
+
, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 2803 |
return TRUE;
|
| 2804 |
}
|
| 2805 |
/*********************************************************************************/
|
| 2810 |
* creates formatted output for calendar component property exdate
|
| 2811 |
*
|
| 2812 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2813 |
+
* @since 2.16.5 - 2012-12-28
|
| 2814 |
* @return string
|
| 2815 |
*/
|
| 2816 |
function createExdate() {
|
| 2817 |
if( empty( $this->exdate )) return FALSE;
|
| 2818 |
+
$output = null;
|
| 2819 |
+
$exdates = array();
|
| 2820 |
+
foreach( $this->exdate as $theExdate ) {
|
| 2821 |
if( empty( $theExdate['value'] )) {
|
| 2822 |
+
if( $this->getConfig( 'allowEmpty' ))
|
| 2823 |
+
$output .= $this->_createElement( 'EXDATE' );
|
| 2824 |
continue;
|
| 2825 |
}
|
| 2826 |
+
if( 1 < count( $theExdate['value'] ))
|
| 2827 |
+
usort( $theExdate['value'], array( 'iCalUtilityFunctions', '_sortExdate1' ));
|
| 2828 |
+
$exdates[] = $theExdate;
|
| 2829 |
+
}
|
| 2830 |
+
if( 1 < count( $exdates ))
|
| 2831 |
+
usort( $exdates, array( 'iCalUtilityFunctions', '_sortExdate2' ));
|
| 2832 |
+
foreach( $exdates as $theExdate ) {
|
| 2833 |
$content = $attributes = null;
|
| 2834 |
foreach( $theExdate['value'] as $eix => $exdatePart ) {
|
| 2835 |
$parno = count( $exdatePart );
|
| 2848 |
}
|
| 2849 |
else
|
| 2850 |
$formatted = str_replace( 'Z', '', $formatted );
|
| 2851 |
+
} // end if( 0 < $eix )
|
| 2852 |
$content .= ( 0 < $eix ) ? ','.$formatted : $formatted;
|
| 2853 |
+
} // end foreach( $theExdate['value'] as $eix => $exdatePart )
|
| 2854 |
$attributes .= $this->_createParams( $theExdate['params'] );
|
| 2855 |
$output .= $this->_createElement( 'EXDATE', $attributes, $content );
|
| 2856 |
+
} // end foreach( $exdates as $theExdate )
|
| 2857 |
return $output;
|
| 2858 |
}
|
| 2859 |
/**
|
| 2860 |
* set calendar component property exdate
|
| 2861 |
*
|
| 2862 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2863 |
+
* @since 2.16.21 - 2013-06-23
|
| 2864 |
* @param array exdates
|
| 2865 |
* @param array $params, optional
|
| 2866 |
* @param integer $index, optional
|
| 2869 |
function setExdate( $exdates, $params=FALSE, $index=FALSE ) {
|
| 2870 |
if( empty( $exdates )) {
|
| 2871 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 2872 |
+
iCalUtilityFunctions::_setMval( $this->exdate, '', $params, FALSE, $index );
|
| 2873 |
return TRUE;
|
| 2874 |
}
|
| 2875 |
else
|
| 2948 |
* set calendar component property exdate
|
| 2949 |
*
|
| 2950 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2951 |
+
* @since 2.16.21 - 2013-06-23
|
| 2952 |
* @param array $exruleset
|
| 2953 |
* @param array $params, optional
|
| 2954 |
* @param integer $index, optional
|
| 2955 |
* @return bool
|
| 2956 |
*/
|
| 2957 |
function setExrule( $exruleset, $params=FALSE, $index=FALSE ) {
|
| 2958 |
+
if( empty( $exruleset )) if( $this->getConfig( 'allowEmpty' )) $exruleset = ''; else return FALSE;
|
| 2959 |
iCalUtilityFunctions::_setMval( $this->exrule, iCalUtilityFunctions::_setRexrule( $exruleset ), $params, FALSE, $index );
|
| 2960 |
return TRUE;
|
| 2961 |
}
|
| 2967 |
* creates formatted output for calendar component property freebusy
|
| 2968 |
*
|
| 2969 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 2970 |
+
* @since 2.16.27 - 2013-07-05
|
| 2971 |
* @return string
|
| 2972 |
*/
|
| 2973 |
function createFreebusy() {
|
| 2989 |
$attributes .= $this->_createParams( $freebusyPart['params'] );
|
| 2990 |
$fno = 1;
|
| 2991 |
$cnt = count( $freebusyPart['value']);
|
| 2992 |
+
if( 1 < $cnt )
|
| 2993 |
+
usort( $freebusyPart['value'], array( 'iCalUtilityFunctions', '_sortRdate1' ));
|
| 2994 |
foreach( $freebusyPart['value'] as $periodix => $freebusyPeriod ) {
|
| 2995 |
$formatted = iCalUtilityFunctions::_date2strdate( $freebusyPeriod[0] );
|
| 2996 |
$content .= $formatted;
|
| 3021 |
* set calendar component property freebusy
|
| 3022 |
*
|
| 3023 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3024 |
+
* @since 2.16.21 - 2013-06-23
|
| 3025 |
* @param string $fbType
|
| 3026 |
* @param array $fbValues
|
| 3027 |
* @param array $params, optional
|
| 3031 |
function setFreebusy( $fbType, $fbValues, $params=FALSE, $index=FALSE ) {
|
| 3032 |
if( empty( $fbValues )) {
|
| 3033 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3034 |
+
iCalUtilityFunctions::_setMval( $this->freebusy, '', $params, FALSE, $index );
|
| 3035 |
return TRUE;
|
| 3036 |
}
|
| 3037 |
else
|
| 3087 |
* creates formatted output for calendar component property geo
|
| 3088 |
*
|
| 3089 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3090 |
+
* @since 2.18.10 - 2013-09-03
|
| 3091 |
* @return string
|
| 3092 |
*/
|
| 3093 |
function createGeo() {
|
| 3094 |
if( empty( $this->geo )) return FALSE;
|
| 3095 |
if( empty( $this->geo['value'] ))
|
| 3096 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'GEO' ) : FALSE;
|
| 3097 |
+
return $this->_createElement( 'GEO', $this->_createParams( $this->geo['params'] ),
|
| 3098 |
+
iCalUtilityFunctions::_geo2str2( $this->geo['value']['latitude'], iCalUtilityFunctions::$geoLatFmt ).
|
| 3099 |
+
';'.iCalUtilityFunctions::_geo2str2( $this->geo['value']['longitude'], iCalUtilityFunctions::$geoLongFmt ));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3100 |
}
|
| 3101 |
/**
|
| 3102 |
* set calendar component property geo
|
| 3103 |
*
|
| 3104 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3105 |
+
* @since 2.18.10 - 2013-09-03
|
| 3106 |
+
* @param mixed $latitude
|
| 3107 |
+
* @param mixed $longitude
|
| 3108 |
* @param array $params optional
|
| 3109 |
* @return bool
|
| 3110 |
*/
|
| 3111 |
function setGeo( $latitude, $longitude, $params=FALSE ) {
|
| 3112 |
+
if( isset( $latitude ) && isset( $longitude )) {
|
|
|
|
| 3113 |
if( !is_array( $this->geo )) $this->geo = array();
|
| 3114 |
+
$this->geo['value']['latitude'] = floatval( $latitude );
|
| 3115 |
+
$this->geo['value']['longitude'] = floatval( $longitude );
|
| 3116 |
$this->geo['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 3117 |
}
|
| 3118 |
elseif( $this->getConfig( 'allowEmpty' ))
|
| 3119 |
+
$this->geo = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $params ) );
|
| 3120 |
else
|
| 3121 |
return FALSE;
|
| 3122 |
return TRUE;
|
| 3142 |
* set calendar component property completed
|
| 3143 |
*
|
| 3144 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3145 |
+
* @since 2.19.5 - 2014-03-29
|
| 3146 |
* @param mixed $year optional
|
| 3147 |
* @param mixed $month optional
|
| 3148 |
* @param int $day optional
|
| 3154 |
*/
|
| 3155 |
function setLastModified( $year=FALSE, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
|
| 3156 |
if( empty( $year ))
|
| 3157 |
+
$year = gmdate( 'Ymd\THis' );
|
| 3158 |
$this->lastmodified = iCalUtilityFunctions::_setDate2( $year, $month, $day, $hour, $min, $sec, $params );
|
| 3159 |
return TRUE;
|
| 3160 |
}
|
| 3166 |
* creates formatted output for calendar component property location
|
| 3167 |
*
|
| 3168 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3169 |
+
* @since 2.16.2 - 2012-12-18
|
| 3170 |
* @return string
|
| 3171 |
*/
|
| 3172 |
function createLocation() {
|
| 3174 |
if( empty( $this->location['value'] ))
|
| 3175 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'LOCATION' ) : FALSE;
|
| 3176 |
$attributes = $this->_createParams( $this->location['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3177 |
+
$content = iCalUtilityFunctions::_strrep( $this->location['value'], $this->format, $this->nl );
|
| 3178 |
return $this->_createElement( 'LOCATION', $attributes, $content );
|
| 3179 |
}
|
| 3180 |
/**
|
| 3181 |
* set calendar component property location
|
| 3182 |
'
|
| 3183 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3184 |
+
* @since 2.16.21 - 2013-06-23
|
| 3185 |
* @param string $value
|
| 3186 |
* @param array params optional
|
| 3187 |
* @return bool
|
| 3188 |
*/
|
| 3189 |
function setLocation( $value, $params=FALSE ) {
|
| 3190 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3191 |
$this->location = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3192 |
return TRUE;
|
| 3193 |
}
|
| 3214 |
* set calendar component property organizer
|
| 3215 |
*
|
| 3216 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3217 |
+
* @since 2.16.21 - 2013-06-23
|
| 3218 |
* @param string $value
|
| 3219 |
* @param array params optional
|
| 3220 |
* @return bool
|
| 3221 |
*/
|
| 3222 |
function setOrganizer( $value, $params=FALSE ) {
|
| 3223 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3224 |
if( !empty( $value )) {
|
| 3225 |
if( FALSE === ( $pos = strpos( substr( $value, 0, 9 ), ':' )))
|
| 3226 |
$value = 'MAILTO:'.$value;
|
| 3259 |
* set calendar component property percent-complete
|
| 3260 |
*
|
| 3261 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3262 |
+
* @since 2.16.21 - 2013-06-23
|
| 3263 |
* @param int $value
|
| 3264 |
* @param array $params optional
|
| 3265 |
* @return bool
|
| 3266 |
*/
|
| 3267 |
function setPercentComplete( $value, $params=FALSE ) {
|
| 3268 |
+
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3269 |
$this->percentcomplete = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3270 |
return TRUE;
|
| 3271 |
}
|
| 3291 |
* set calendar component property priority
|
| 3292 |
*
|
| 3293 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3294 |
+
* @since 2.16.21 - 2013-06-23
|
| 3295 |
* @param int $value
|
| 3296 |
* @param array $params optional
|
| 3297 |
* @return bool
|
| 3298 |
*/
|
| 3299 |
function setPriority( $value, $params=FALSE ) {
|
| 3300 |
+
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3301 |
$this->priority = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3302 |
return TRUE;
|
| 3303 |
}
|
| 3309 |
* creates formatted output for calendar component property rdate
|
| 3310 |
*
|
| 3311 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3312 |
+
* @since 2.16.9 - 2013-01-09
|
| 3313 |
* @return string
|
| 3314 |
*/
|
| 3315 |
function createRdate() {
|
| 3316 |
if( empty( $this->rdate )) return FALSE;
|
| 3317 |
$utctime = ( in_array( $this->objName, array( 'vtimezone', 'standard', 'daylight' ))) ? TRUE : FALSE;
|
| 3318 |
$output = null;
|
| 3319 |
+
$rdates = array();
|
|
|
|
| 3320 |
foreach( $this->rdate as $rpix => $theRdate ) {
|
| 3321 |
if( empty( $theRdate['value'] )) {
|
| 3322 |
if( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'RDATE' );
|
| 3324 |
}
|
| 3325 |
if( $utctime )
|
| 3326 |
unset( $theRdate['params']['TZID'] );
|
| 3327 |
+
if( 1 < count( $theRdate['value'] ))
|
| 3328 |
+
usort( $theRdate['value'], array( 'iCalUtilityFunctions', '_sortRdate1' ));
|
| 3329 |
+
$rdates[] = $theRdate;
|
| 3330 |
+
}
|
| 3331 |
+
if( 1 < count( $rdates ))
|
| 3332 |
+
usort( $rdates, array( 'iCalUtilityFunctions', '_sortRdate2' ));
|
| 3333 |
+
foreach( $rdates as $rpix => $theRdate ) {
|
| 3334 |
$attributes = $this->_createParams( $theRdate['params'] );
|
| 3335 |
$cnt = count( $theRdate['value'] );
|
| 3336 |
$content = null;
|
| 3392 |
* set calendar component property rdate
|
| 3393 |
*
|
| 3394 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3395 |
+
* @since 2.16.21 - 2013-06-23
|
| 3396 |
* @param array $rdates
|
| 3397 |
* @param array $params, optional
|
| 3398 |
* @param integer $index, optional
|
| 3401 |
function setRdate( $rdates, $params=FALSE, $index=FALSE ) {
|
| 3402 |
if( empty( $rdates )) {
|
| 3403 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3404 |
+
iCalUtilityFunctions::_setMval( $this->rdate, '', $params, FALSE, $index );
|
| 3405 |
return TRUE;
|
| 3406 |
}
|
| 3407 |
else
|
| 3562 |
* set calendar component property recurrence-id
|
| 3563 |
*
|
| 3564 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3565 |
+
* @since 2.16.21 - 2013-06-23
|
| 3566 |
* @param mixed $year
|
| 3567 |
* @param mixed $month optional
|
| 3568 |
* @param int $day optional
|
| 3575 |
function setRecurrenceid( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE ) {
|
| 3576 |
if( empty( $year )) {
|
| 3577 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3578 |
+
$this->recurrenceid = array( 'value' => '', 'params' => null );
|
| 3579 |
return TRUE;
|
| 3580 |
}
|
| 3581 |
else
|
| 3592 |
* creates formatted output for calendar component property related-to
|
| 3593 |
*
|
| 3594 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3595 |
+
* @since 2.16.21 - 2013-05-25
|
| 3596 |
* @return string
|
| 3597 |
*/
|
| 3598 |
function createRelatedTo() {
|
| 3600 |
$output = null;
|
| 3601 |
foreach( $this->relatedto as $relation ) {
|
| 3602 |
if( !empty( $relation['value'] ))
|
| 3603 |
+
$output .= $this->_createElement( 'RELATED-TO', $this->_createParams( $relation['params'] ), iCalUtilityFunctions::_strrep( $relation['value'], $this->format, $this->nl ));
|
| 3604 |
elseif( $this->getConfig( 'allowEmpty' ))
|
| 3605 |
+
$output .= $this->_createElement( 'RELATED-TO' );
|
| 3606 |
}
|
| 3607 |
return $output;
|
| 3608 |
}
|
| 3610 |
* set calendar component property related-to
|
| 3611 |
*
|
| 3612 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3613 |
+
* @since 2.16.21 - 2013-06-23
|
| 3614 |
* @param float $relid
|
| 3615 |
* @param array $params, optional
|
| 3616 |
* @param index $index, optional
|
| 3617 |
* @return bool
|
| 3618 |
*/
|
| 3619 |
function setRelatedTo( $value, $params=FALSE, $index=FALSE ) {
|
| 3620 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3621 |
iCalUtilityFunctions::_existRem( $params, 'RELTYPE', 'PARENT', TRUE ); // remove default
|
| 3622 |
iCalUtilityFunctions::_setMval( $this->relatedto, $value, $params, FALSE, $index );
|
| 3623 |
return TRUE;
|
| 3644 |
* set calendar component property repeat
|
| 3645 |
*
|
| 3646 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3647 |
+
* @since 2.16.21 - 2013-06-23
|
| 3648 |
* @param string $value
|
| 3649 |
* @param array $params optional
|
| 3650 |
* @return void
|
| 3651 |
*/
|
| 3652 |
function setRepeat( $value, $params=FALSE ) {
|
| 3653 |
+
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3654 |
$this->repeat = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3655 |
return TRUE;
|
| 3656 |
}
|
| 3661 |
/**
|
| 3662 |
* creates formatted output for calendar component property request-status
|
| 3663 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3664 |
+
* @since 2.16.2 - 2012-12-18
|
| 3665 |
* @return string
|
| 3666 |
*/
|
| 3667 |
function createRequestStatus() {
|
| 3674 |
}
|
| 3675 |
$attributes = $this->_createParams( $rstat['params'], array( 'LANGUAGE' ));
|
| 3676 |
$content = number_format( (float) $rstat['value']['statcode'], 2, '.', '');
|
| 3677 |
+
$content .= ';'.iCalUtilityFunctions::_strrep( $rstat['value']['text'], $this->format, $this->nl );
|
| 3678 |
if( isset( $rstat['value']['extdata'] ))
|
| 3679 |
+
$content .= ';'.iCalUtilityFunctions::_strrep( $rstat['value']['extdata'], $this->format, $this->nl );
|
| 3680 |
$output .= $this->_createElement( 'REQUEST-STATUS', $attributes, $content );
|
| 3681 |
}
|
| 3682 |
return $output;
|
| 3685 |
* set calendar component property request-status
|
| 3686 |
*
|
| 3687 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3688 |
+
* @since 2.16.21 - 2013-06-23
|
| 3689 |
* @param float $statcode
|
| 3690 |
* @param string $text
|
| 3691 |
* @param string $extdata, optional
|
| 3694 |
* @return bool
|
| 3695 |
*/
|
| 3696 |
function setRequestStatus( $statcode, $text, $extdata=FALSE, $params=FALSE, $index=FALSE ) {
|
| 3697 |
+
if( empty( $statcode ) || empty( $text )) if( $this->getConfig( 'allowEmpty' )) $statcode = $text = ''; else return FALSE;
|
| 3698 |
$input = array( 'statcode' => $statcode, 'text' => $text );
|
| 3699 |
if( $extdata )
|
| 3700 |
$input['extdata'] = $extdata;
|
| 3709 |
* creates formatted output for calendar component property resources
|
| 3710 |
*
|
| 3711 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3712 |
+
* @since 2.16.2 - 2012-12-18
|
| 3713 |
* @return string
|
| 3714 |
*/
|
| 3715 |
function createResources() {
|
| 3723 |
$attributes = $this->_createParams( $resource['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3724 |
if( is_array( $resource['value'] )) {
|
| 3725 |
foreach( $resource['value'] as $rix => $resourcePart )
|
| 3726 |
+
$resource['value'][$rix] = iCalUtilityFunctions::_strrep( $resourcePart, $this->format, $this->nl );
|
| 3727 |
$content = implode( ',', $resource['value'] );
|
| 3728 |
}
|
| 3729 |
else
|
| 3730 |
+
$content = iCalUtilityFunctions::_strrep( $resource['value'], $this->format, $this->nl );
|
| 3731 |
$output .= $this->_createElement( 'RESOURCES', $attributes, $content );
|
| 3732 |
}
|
| 3733 |
return $output;
|
| 3736 |
* set calendar component property recources
|
| 3737 |
*
|
| 3738 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3739 |
+
* @since 2.16.21 - 2013-06-23
|
| 3740 |
* @param mixed $value
|
| 3741 |
* @param array $params, optional
|
| 3742 |
* @param integer $index, optional
|
| 3743 |
* @return bool
|
| 3744 |
*/
|
| 3745 |
function setResources( $value, $params=FALSE, $index=FALSE ) {
|
| 3746 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3747 |
iCalUtilityFunctions::_setMval( $this->resources, $value, $params, FALSE, $index );
|
| 3748 |
return TRUE;
|
| 3749 |
}
|
| 3766 |
* set calendar component property rrule
|
| 3767 |
*
|
| 3768 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3769 |
+
* @since 2.16.21 - 2013-06-23
|
| 3770 |
* @param array $rruleset
|
| 3771 |
* @param array $params, optional
|
| 3772 |
* @param integer $index, optional
|
| 3773 |
* @return void
|
| 3774 |
*/
|
| 3775 |
function setRrule( $rruleset, $params=FALSE, $index=FALSE ) {
|
| 3776 |
+
if( empty( $rruleset )) if( $this->getConfig( 'allowEmpty' )) $rruleset = ''; else return FALSE;
|
| 3777 |
iCalUtilityFunctions::_setMval( $this->rrule, iCalUtilityFunctions::_setRexrule( $rruleset ), $params, FALSE, $index );
|
| 3778 |
return TRUE;
|
| 3779 |
}
|
| 3831 |
* set calendar component property status
|
| 3832 |
*
|
| 3833 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3834 |
+
* @since 2.16.21 - 2013-06-23
|
| 3835 |
* @param string $value
|
| 3836 |
* @param array $params optional
|
| 3837 |
* @return bool
|
| 3838 |
*/
|
| 3839 |
function setStatus( $value, $params=FALSE ) {
|
| 3840 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3841 |
$this->status = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3842 |
return TRUE;
|
| 3843 |
}
|
| 3849 |
* creates formatted output for calendar component property summary
|
| 3850 |
*
|
| 3851 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3852 |
+
* @since 2.16.2 - 2012-12-18
|
| 3853 |
* @return string
|
| 3854 |
*/
|
| 3855 |
function createSummary() {
|
| 3857 |
if( empty( $this->summary['value'] ))
|
| 3858 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'SUMMARY' ) : FALSE;
|
| 3859 |
$attributes = $this->_createParams( $this->summary['params'], array( 'ALTREP', 'LANGUAGE' ));
|
| 3860 |
+
$content = iCalUtilityFunctions::_strrep( $this->summary['value'], $this->format, $this->nl );
|
| 3861 |
return $this->_createElement( 'SUMMARY', $attributes, $content );
|
| 3862 |
}
|
| 3863 |
/**
|
| 3864 |
* set calendar component property summary
|
| 3865 |
*
|
| 3866 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3867 |
+
* @since 2.16.21 - 2013-06-23
|
| 3868 |
* @param string $value
|
| 3869 |
* @param string $params optional
|
| 3870 |
* @return bool
|
| 3871 |
*/
|
| 3872 |
function setSummary( $value, $params=FALSE ) {
|
| 3873 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3874 |
$this->summary = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3875 |
return TRUE;
|
| 3876 |
}
|
| 3896 |
* set calendar component property transp
|
| 3897 |
*
|
| 3898 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3899 |
+
* @since 2.16.21 - 2013-06-23
|
| 3900 |
* @param string $value
|
| 3901 |
* @param string $params optional
|
| 3902 |
* @return bool
|
| 3903 |
*/
|
| 3904 |
function setTransp( $value, $params=FALSE ) {
|
| 3905 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 3906 |
$this->transp = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 3907 |
return TRUE;
|
| 3908 |
}
|
| 3940 |
* set calendar component property trigger
|
| 3941 |
*
|
| 3942 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 3943 |
+
* @since 2.16.21 - 2013-06-23
|
| 3944 |
* @param mixed $year
|
| 3945 |
* @param mixed $month optional
|
| 3946 |
* @param int $day optional
|
| 3954 |
* @return bool
|
| 3955 |
*/
|
| 3956 |
function setTrigger( $year, $month=null, $day=null, $week=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $relatedStart=TRUE, $before=TRUE, $params=FALSE ) {
|
| 3957 |
+
if( empty( $year ) && ( empty( $month ) || is_array( $month )) && empty( $day ) && empty( $week ) && empty( $hour ) && empty( $min ) && empty( $sec ))
|
| 3958 |
if( $this->getConfig( 'allowEmpty' )) {
|
| 3959 |
+
$this->trigger = array( 'value' => '', 'params' => iCalUtilityFunctions::_setParams( $month ) );
|
| 3960 |
return TRUE;
|
| 3961 |
}
|
| 3962 |
else
|
| 3989 |
}
|
| 3990 |
elseif(is_string( $year ) && ( is_array( $month ) || empty( $month ))) { // duration or date in a string
|
| 3991 |
$params = iCalUtilityFunctions::_setParams( $month );
|
| 3992 |
+
if( in_array( $year{0}, array( 'P', '+', '-' ))) { // duration
|
| 3993 |
$relatedStart = ( isset( $params['RELATED'] ) && ( 'END' == strtoupper( $params['RELATED'] ))) ? FALSE : TRUE;
|
| 3994 |
$before = ( '-' == $year[0] ) ? TRUE : FALSE;
|
| 3995 |
if( 'P' != $year[0] )
|
| 4041 |
$this->trigger['value']['sec'] = 0;
|
| 4042 |
$before = FALSE;
|
| 4043 |
}
|
| 4044 |
+
else
|
| 4045 |
+
$this->trigger['value'] = iCalUtilityFunctions::_duration2arr( $this->trigger['value'] );
|
| 4046 |
$relatedStart = ( FALSE !== $relatedStart ) ? TRUE : FALSE;
|
| 4047 |
$before = ( FALSE !== $before ) ? TRUE : FALSE;
|
| 4048 |
$this->trigger['value']['relatedStart'] = $relatedStart;
|
| 4059 |
* creates formatted output for calendar component property tzid
|
| 4060 |
*
|
| 4061 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4062 |
+
* @since 2.16.2 - 2012-12-18
|
| 4063 |
* @return string
|
| 4064 |
*/
|
| 4065 |
function createTzid() {
|
| 4067 |
if( empty( $this->tzid['value'] ))
|
| 4068 |
return ( $this->getConfig( 'allowEmpty' )) ? $this->_createElement( 'TZID' ) : FALSE;
|
| 4069 |
$attributes = $this->_createParams( $this->tzid['params'] );
|
| 4070 |
+
return $this->_createElement( 'TZID', $attributes, iCalUtilityFunctions::_strrep( $this->tzid['value'], $this->format, $this->nl ));
|
| 4071 |
}
|
| 4072 |
/**
|
| 4073 |
* set calendar component property tzid
|
| 4074 |
*
|
| 4075 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4076 |
+
* @since 2.16.21 - 2013-06-23
|
| 4077 |
* @param string $value
|
| 4078 |
* @param array $params optional
|
| 4079 |
* @return bool
|
| 4080 |
*/
|
| 4081 |
function setTzid( $value, $params=FALSE ) {
|
| 4082 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4083 |
$this->tzid = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4084 |
return TRUE;
|
| 4085 |
}
|
| 4092 |
* creates formatted output for calendar component property tzname
|
| 4093 |
*
|
| 4094 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4095 |
+
* @since 2.16.2 - 2012-12-18
|
| 4096 |
* @return string
|
| 4097 |
*/
|
| 4098 |
function createTzname() {
|
| 4101 |
foreach( $this->tzname as $theName ) {
|
| 4102 |
if( !empty( $theName['value'] )) {
|
| 4103 |
$attributes = $this->_createParams( $theName['params'], array( 'LANGUAGE' ));
|
| 4104 |
+
$output .= $this->_createElement( 'TZNAME', $attributes, iCalUtilityFunctions::_strrep( $theName['value'], $this->format, $this->nl ));
|
| 4105 |
}
|
| 4106 |
elseif( $this->getConfig( 'allowEmpty' )) $output .= $this->_createElement( 'TZNAME' );
|
| 4107 |
}
|
| 4111 |
* set calendar component property tzname
|
| 4112 |
*
|
| 4113 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4114 |
+
* @since 2.16.21 - 2013-06-23
|
| 4115 |
* @param string $value
|
| 4116 |
* @param string $params, optional
|
| 4117 |
* @param integer $index, optional
|
| 4118 |
* @return bool
|
| 4119 |
*/
|
| 4120 |
function setTzname( $value, $params=FALSE, $index=FALSE ) {
|
| 4121 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4122 |
iCalUtilityFunctions::_setMval( $this->tzname, $value, $params, FALSE, $index );
|
| 4123 |
return TRUE;
|
| 4124 |
}
|
| 4144 |
* set calendar component property tzoffsetfrom
|
| 4145 |
*
|
| 4146 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4147 |
+
* @since 2.16.21 - 2013-06-23
|
| 4148 |
* @param string $value
|
| 4149 |
* @param string $params optional
|
| 4150 |
* @return bool
|
| 4151 |
*/
|
| 4152 |
function setTzoffsetfrom( $value, $params=FALSE ) {
|
| 4153 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4154 |
$this->tzoffsetfrom = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4155 |
return TRUE;
|
| 4156 |
}
|
| 4176 |
* set calendar component property tzoffsetto
|
| 4177 |
*
|
| 4178 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4179 |
+
* @since 2.16.21 - 2013-06-23
|
| 4180 |
* @param string $value
|
| 4181 |
* @param string $params optional
|
| 4182 |
* @return bool
|
| 4183 |
*/
|
| 4184 |
function setTzoffsetto( $value, $params=FALSE ) {
|
| 4185 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4186 |
$this->tzoffsetto = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4187 |
return TRUE;
|
| 4188 |
}
|
| 4208 |
* set calendar component property tzurl
|
| 4209 |
*
|
| 4210 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4211 |
+
* @since 2.16.21 - 2013-06-23
|
| 4212 |
* @param string $value
|
| 4213 |
* @param string $params optional
|
| 4214 |
* @return boll
|
| 4215 |
*/
|
| 4216 |
function setTzurl( $value, $params=FALSE ) {
|
| 4217 |
+
if( empty( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4218 |
$this->tzurl = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4219 |
return TRUE;
|
| 4220 |
}
|
| 4226 |
* creates formatted output for calendar component property uid
|
| 4227 |
*
|
| 4228 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4229 |
+
* @since 2.19.1 - 2014-02-21
|
| 4230 |
* @return string
|
| 4231 |
*/
|
| 4232 |
function createUid() {
|
| 4233 |
+
if( empty( $this->uid ))
|
| 4234 |
$this->_makeuid();
|
| 4235 |
$attributes = $this->_createParams( $this->uid['params'] );
|
| 4236 |
return $this->_createElement( 'UID', $attributes, $this->uid['value'] );
|
| 4259 |
* set calendar component property uid
|
| 4260 |
*
|
| 4261 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4262 |
+
* @since 2.19.1 - 2014-02-21
|
| 4263 |
* @param string $value
|
| 4264 |
* @param string $params optional
|
| 4265 |
* @return bool
|
| 4266 |
*/
|
| 4267 |
function setUid( $value, $params=FALSE ) {
|
| 4268 |
+
if( empty( $value ) && ( '0' != $value )) return FALSE; // no allowEmpty check here !!!!
|
| 4269 |
$this->uid = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4270 |
return TRUE;
|
| 4271 |
}
|
| 4291 |
* set calendar component property url
|
| 4292 |
*
|
| 4293 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4294 |
+
* @since 2.16.21 - 2013-06-23
|
| 4295 |
* @param string $value
|
| 4296 |
* @param string $params optional
|
| 4297 |
* @return bool
|
| 4298 |
*/
|
| 4299 |
function setUrl( $value, $params=FALSE ) {
|
| 4300 |
+
if( !empty( $value )) {
|
| 4301 |
+
if( !filter_var( $value, FILTER_VALIDATE_URL ) && ( 'urn' != strtolower( substr( $value, 0, 3 ))))
|
| 4302 |
+
return FALSE;
|
| 4303 |
+
}
|
| 4304 |
+
elseif( $this->getConfig( 'allowEmpty' ))
|
| 4305 |
+
$value = '';
|
| 4306 |
+
else
|
| 4307 |
+
return FALSE;
|
| 4308 |
$this->url = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params ));
|
| 4309 |
return TRUE;
|
| 4310 |
}
|
| 4316 |
* creates formatted output for calendar component property x-prop
|
| 4317 |
*
|
| 4318 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4319 |
+
* @since 2.16.2 - 2012-12-18
|
| 4320 |
* @return string
|
| 4321 |
*/
|
| 4322 |
function createXprop() {
|
| 4330 |
$attributes = $this->_createParams( $xpropPart['params'], array( 'LANGUAGE' ));
|
| 4331 |
if( is_array( $xpropPart['value'] )) {
|
| 4332 |
foreach( $xpropPart['value'] as $pix => $theXpart )
|
| 4333 |
+
$xpropPart['value'][$pix] = iCalUtilityFunctions::_strrep( $theXpart, $this->format, $this->format );
|
| 4334 |
$xpropPart['value'] = implode( ',', $xpropPart['value'] );
|
| 4335 |
}
|
| 4336 |
else
|
| 4337 |
+
$xpropPart['value'] = iCalUtilityFunctions::_strrep( $xpropPart['value'], $this->format, $this->nl );
|
| 4338 |
$output .= $this->_createElement( $label, $attributes, $xpropPart['value'] );
|
| 4339 |
}
|
| 4340 |
return $output;
|
| 4343 |
* set calendar component property x-prop
|
| 4344 |
*
|
| 4345 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4346 |
+
* @since 2.18.10 - 2013-09-04
|
| 4347 |
* @param string $label
|
| 4348 |
* @param mixed $value
|
| 4349 |
* @param array $params optional
|
| 4352 |
function setXprop( $label, $value, $params=FALSE ) {
|
| 4353 |
if( empty( $label ))
|
| 4354 |
return FALSE;
|
| 4355 |
+
$label = strtoupper( $label );
|
| 4356 |
+
if( 'X-' != substr( $label, 0, 2 ))
|
| 4357 |
return FALSE;
|
| 4358 |
+
if( empty( $value ) && !is_numeric( $value )) if( $this->getConfig( 'allowEmpty' )) $value = ''; else return FALSE;
|
| 4359 |
$xprop = array( 'value' => $value );
|
| 4360 |
$xprop['params'] = iCalUtilityFunctions::_setParams( $params );
|
| 4361 |
if( !is_array( $this->xprop )) $this->xprop = array();
|
| 4362 |
+
$this->xprop[$label] = $xprop;
|
| 4363 |
return TRUE;
|
| 4364 |
}
|
| 4365 |
/*********************************************************************************/
|
| 4407 |
* creates formatted output for calendar component property
|
| 4408 |
*
|
| 4409 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4410 |
+
* @since 2.16.2 - 2012-12-18
|
| 4411 |
* @param string $label property name
|
| 4412 |
* @param string $attributes property attributes
|
| 4413 |
* @param string $content property content (optional)
|
| 4508 |
break;
|
| 4509 |
default:
|
| 4510 |
$output .= $this->elementStart2.$this->valueInit;
|
| 4511 |
+
return iCalUtilityFunctions::_size75( $output, $this->nl );
|
| 4512 |
break;
|
| 4513 |
}
|
| 4514 |
}
|
| 4519 |
return $output.$this->elementEnd1.$label.$this->elementEnd2;
|
| 4520 |
break;
|
| 4521 |
default:
|
| 4522 |
+
return iCalUtilityFunctions::_size75( $output, $this->nl );
|
| 4523 |
break;
|
| 4524 |
}
|
| 4525 |
}
|
| 4527 |
* creates formatted output for calendar component property parameters
|
| 4528 |
*
|
| 4529 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4530 |
+
* @since 2.18.10 - 2012-09-04
|
| 4531 |
* @param array $params optional
|
| 4532 |
* @param array $ctrKeys optional
|
| 4533 |
* @return string
|
| 4540 |
$LANGattrKey = ( in_array( 'LANGUAGE', $ctrKeys )) ? TRUE : FALSE ;
|
| 4541 |
$CNattrExist = $LANGattrExist = FALSE;
|
| 4542 |
$xparams = array();
|
| 4543 |
+
$params = array_change_key_case( $params, CASE_UPPER );
|
| 4544 |
foreach( $params as $paramKey => $paramValue ) {
|
| 4545 |
if(( FALSE !== strpos( $paramValue, ':' )) ||
|
| 4546 |
( FALSE !== strpos( $paramValue, ';' )) ||
|
| 4550 |
$xparams[] = $paramValue;
|
| 4551 |
continue;
|
| 4552 |
}
|
|
|
|
| 4553 |
if( !in_array( $paramKey, array( 'ALTREP', 'CN', 'DIR', 'ENCODING', 'FMTTYPE', 'LANGUAGE', 'RANGE', 'RELTYPE', 'SENT-BY', 'TZID', 'VALUE' )))
|
| 4554 |
$xparams[$paramKey] = $paramValue;
|
| 4555 |
else
|
| 4611 |
* creates formatted output for calendar component property data value type recur
|
| 4612 |
*
|
| 4613 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4614 |
+
* @since 2.16.25 - 2013-06-30
|
| 4615 |
* @param array $recurlabel
|
| 4616 |
* @param array $recurdata
|
| 4617 |
* @return string
|
| 4626 |
$attributes = ( isset( $therule['params'] )) ? $this->_createParams( $therule['params'] ) : null;
|
| 4627 |
$content1 = $content2 = null;
|
| 4628 |
foreach( $therule['value'] as $rulelabel => $rulevalue ) {
|
| 4629 |
+
switch( strtoupper( $rulelabel )) {
|
| 4630 |
case 'FREQ': {
|
| 4631 |
$content1 .= "FREQ=$rulevalue";
|
| 4632 |
break;
|
| 4662 |
break;
|
| 4663 |
}
|
| 4664 |
case 'BYDAY': {
|
| 4665 |
+
$byday = array( '' );
|
| 4666 |
+
$bx = 0;
|
| 4667 |
+
foreach( $rulevalue as $bix => $bydayPart ) {
|
| 4668 |
+
if( ! empty( $byday[$bx] ) && ! ctype_digit( substr( $byday[$bx], -1 ))) // new day
|
| 4669 |
+
$byday[++$bx] = '';
|
| 4670 |
+
if( ! is_array( $bydayPart )) // day without order number
|
| 4671 |
+
$byday[$bx] .= (string) $bydayPart;
|
| 4672 |
+
else { // day with order number
|
| 4673 |
+
foreach( $bydayPart as $bix2 => $bydayPart2 )
|
| 4674 |
+
$byday[$bx] .= (string) $bydayPart2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4675 |
}
|
| 4676 |
+
} // end foreach( $rulevalue as $bix => $bydayPart )
|
| 4677 |
+
if( 1 < count( $byday ))
|
| 4678 |
+
usort( $byday, array( 'iCalUtilityFunctions', '_recurBydaySort' ));
|
| 4679 |
+
$content2 .= ';BYDAY='.implode( ',', $byday );
|
| 4680 |
break;
|
| 4681 |
}
|
| 4682 |
default: {
|
| 4714 |
* get general component config variables or info about subcomponents
|
| 4715 |
*
|
| 4716 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4717 |
+
* @since 2.19.1 - 2014-02-21
|
| 4718 |
* @param mixed $config
|
| 4719 |
* @return value
|
| 4720 |
*/
|
| 4763 |
case 'PROPINFO':
|
| 4764 |
$output = array();
|
| 4765 |
if( !in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' ))) {
|
| 4766 |
+
if( empty( $this->uid )) $this->_makeuid();
|
| 4767 |
$output['UID'] = 1;
|
| 4768 |
if( empty( $this->dtstamp )) $this->_makeDtstamp();
|
| 4769 |
$output['DTSTAMP'] = 1;
|
| 4830 |
* general component config setting
|
| 4831 |
*
|
| 4832 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 4833 |
+
* @since 2.10.18 - 2013-09-06
|
| 4834 |
* @param mixed $config
|
| 4835 |
* @param string $value
|
| 4836 |
* @param bool $softUpdate
|
| 4838 |
*/
|
| 4839 |
function setConfig( $config, $value = FALSE, $softUpdate = FALSE ) {
|
| 4840 |
if( is_array( $config )) {
|
| 4841 |
+
$config = array_change_key_case( $config, CASE_UPPER );
|
| 4842 |
+
if( isset( $config['NEWLINECHAR'] ) || isset( $config['NL'] )) {
|
| 4843 |
+
$k = ( isset( $config['NEWLINECHAR'] )) ? 'NEWLINECHAR' : 'NL';
|
| 4844 |
+
if( FALSE === $this->setConfig( 'NL', $config[$k] ))
|
| 4845 |
+
return FALSE;
|
| 4846 |
+
unset( $config[$k] );
|
|
|
|
|
|
|
| 4847 |
}
|
| 4848 |
foreach( $config as $cKey => $cValue ) {
|
| 4849 |
if( FALSE === $this->setConfig( $cKey, $cValue, $softUpdate ))
|
| 4851 |
}
|
| 4852 |
return TRUE;
|
| 4853 |
}
|
| 4854 |
+
else
|
| 4855 |
+
$config = strtoupper( $config );
|
| 4856 |
$res = FALSE;
|
| 4857 |
+
switch( $config ) {
|
| 4858 |
case 'ALLOWEMPTY':
|
| 4859 |
$this->allowEmpty = $value;
|
| 4860 |
$subcfg = array( 'ALLOWEMPTY' => $value );
|
| 5136 |
case 'UID':
|
| 5137 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
| 5138 |
return FALSE;
|
| 5139 |
+
if( ! empty( $this->uid )) {
|
| 5140 |
$this->uid = '';
|
| 5141 |
$return = TRUE;
|
| 5142 |
}
|
| 5201 |
* if property has multiply values, consequtive function calls are needed
|
| 5202 |
*
|
| 5203 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 5204 |
+
* @since 2.19.1 - 2014-02-21
|
| 5205 |
* @param string $propName, optional
|
| 5206 |
* @param int @propix, optional, if specific property is wanted in case of multiply occurences
|
| 5207 |
* @param bool $inclParam=FALSE
|
| 5210 |
*/
|
| 5211 |
function getProperty( $propName=FALSE, $propix=FALSE, $inclParam=FALSE, $specform=FALSE ) {
|
| 5212 |
if( 'GEOLOCATION' == strtoupper( $propName )) {
|
| 5213 |
+
$content = ( FALSE === ( $loc = $this->getProperty( 'LOCATION' ))) ? '' : $loc.' ';
|
| 5214 |
+
if( FALSE === ( $geo = $this->getProperty( 'GEO' )))
|
|
|
|
| 5215 |
return FALSE;
|
| 5216 |
+
return $content.
|
| 5217 |
+
iCalUtilityFunctions::_geo2str2( $geo['latitude'], iCalUtilityFunctions::$geoLatFmt ).
|
| 5218 |
+
iCalUtilityFunctions::_geo2str2( $geo['longitude'], iCalUtilityFunctions::$geoLongFmt ).'/';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5219 |
}
|
| 5220 |
if( $this->_notExistProp( $propName )) return FALSE;
|
| 5221 |
$propName = ( $propName ) ? strtoupper( $propName ) : 'X-PROP';
|
| 5227 |
}
|
| 5228 |
switch( $propName ) {
|
| 5229 |
case 'ACTION':
|
| 5230 |
+
if( isset( $this->action['value'] )) return ( $inclParam ) ? $this->action : $this->action['value'];
|
| 5231 |
break;
|
| 5232 |
case 'ATTACH':
|
| 5233 |
$ak = ( is_array( $this->attach )) ? array_keys( $this->attach ) : array();
|
| 5254 |
return ( $inclParam ) ? $this->categories[$propix] : $this->categories[$propix]['value'];
|
| 5255 |
break;
|
| 5256 |
case 'CLASS':
|
| 5257 |
+
if( isset( $this->class['value'] )) return ( $inclParam ) ? $this->class : $this->class['value'];
|
| 5258 |
break;
|
| 5259 |
case 'COMMENT':
|
| 5260 |
$ak = ( is_array( $this->comment )) ? array_keys( $this->comment ) : array();
|
| 5265 |
return ( $inclParam ) ? $this->comment[$propix] : $this->comment[$propix]['value'];
|
| 5266 |
break;
|
| 5267 |
case 'COMPLETED':
|
| 5268 |
+
if( isset( $this->completed['value'] )) return ( $inclParam ) ? $this->completed : $this->completed['value'];
|
| 5269 |
break;
|
| 5270 |
case 'CONTACT':
|
| 5271 |
$ak = ( is_array( $this->contact )) ? array_keys( $this->contact ) : array();
|
| 5276 |
return ( $inclParam ) ? $this->contact[$propix] : $this->contact[$propix]['value'];
|
| 5277 |
break;
|
| 5278 |
case 'CREATED':
|
| 5279 |
+
if( isset( $this->created['value'] )) return ( $inclParam ) ? $this->created : $this->created['value'];
|
| 5280 |
break;
|
| 5281 |
case 'DESCRIPTION':
|
| 5282 |
$ak = ( is_array( $this->description )) ? array_keys( $this->description ) : array();
|
| 5287 |
return ( $inclParam ) ? $this->description[$propix] : $this->description[$propix]['value'];
|
| 5288 |
break;
|
| 5289 |
case 'DTEND':
|
| 5290 |
+
if( isset( $this->dtend['value'] )) return ( $inclParam ) ? $this->dtend : $this->dtend['value'];
|
| 5291 |
break;
|
| 5292 |
case 'DTSTAMP':
|
| 5293 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
| 5297 |
return ( $inclParam ) ? $this->dtstamp : $this->dtstamp['value'];
|
| 5298 |
break;
|
| 5299 |
case 'DTSTART':
|
| 5300 |
+
if( isset( $this->dtstart['value'] )) return ( $inclParam ) ? $this->dtstart : $this->dtstart['value'];
|
| 5301 |
break;
|
| 5302 |
case 'DUE':
|
| 5303 |
+
if( isset( $this->due['value'] )) return ( $inclParam ) ? $this->due : $this->due['value'];
|
| 5304 |
break;
|
| 5305 |
case 'DURATION':
|
| 5306 |
+
if( ! isset( $this->duration['value'] )) return FALSE;
|
| 5307 |
$value = ( $specform && isset( $this->dtstart['value'] ) && isset( $this->duration['value'] )) ? iCalUtilityFunctions::_duration2date( $this->dtstart['value'], $this->duration['value'] ) : $this->duration['value'];
|
| 5308 |
return ( $inclParam ) ? array( 'value' => $value, 'params' => $this->duration['params'] ) : $value;
|
| 5309 |
break;
|
| 5332 |
return ( $inclParam ) ? $this->freebusy[$propix] : $this->freebusy[$propix]['value'];
|
| 5333 |
break;
|
| 5334 |
case 'GEO':
|
| 5335 |
+
if( isset( $this->geo['value'] )) return ( $inclParam ) ? $this->geo : $this->geo['value'];
|
| 5336 |
break;
|
| 5337 |
case 'LAST-MODIFIED':
|
| 5338 |
+
if( isset( $this->lastmodified['value'] )) return ( $inclParam ) ? $this->lastmodified : $this->lastmodified['value'];
|
| 5339 |
break;
|
| 5340 |
case 'LOCATION':
|
| 5341 |
+
if( isset( $this->location['value'] )) return ( $inclParam ) ? $this->location : $this->location['value'];
|
| 5342 |
break;
|
| 5343 |
case 'ORGANIZER':
|
| 5344 |
+
if( isset( $this->organizer['value'] )) return ( $inclParam ) ? $this->organizer : $this->organizer['value'];
|
| 5345 |
break;
|
| 5346 |
case 'PERCENT-COMPLETE':
|
| 5347 |
+
if( isset( $this->percentcomplete['value'] )) return ( $inclParam ) ? $this->percentcomplete : $this->percentcomplete['value'];
|
| 5348 |
break;
|
| 5349 |
case 'PRIORITY':
|
| 5350 |
+
if( isset( $this->priority['value'] )) return ( $inclParam ) ? $this->priority : $this->priority['value'];
|
| 5351 |
break;
|
| 5352 |
case 'RDATE':
|
| 5353 |
$ak = ( is_array( $this->rdate )) ? array_keys( $this->rdate ) : array();
|
| 5358 |
return ( $inclParam ) ? $this->rdate[$propix] : $this->rdate[$propix]['value'];
|
| 5359 |
break;
|
| 5360 |
case 'RECURRENCE-ID':
|
| 5361 |
+
if( isset( $this->recurrenceid['value'] )) return ( $inclParam ) ? $this->recurrenceid : $this->recurrenceid['value'];
|
| 5362 |
break;
|
| 5363 |
case 'RELATED-TO':
|
| 5364 |
$ak = ( is_array( $this->relatedto )) ? array_keys( $this->relatedto ) : array();
|
| 5369 |
return ( $inclParam ) ? $this->relatedto[$propix] : $this->relatedto[$propix]['value'];
|
| 5370 |
break;
|
| 5371 |
case 'REPEAT':
|
| 5372 |
+
if( isset( $this->repeat['value'] )) return ( $inclParam ) ? $this->repeat : $this->repeat['value'];
|
| 5373 |
break;
|
| 5374 |
case 'REQUEST-STATUS':
|
| 5375 |
$ak = ( is_array( $this->requeststatus )) ? array_keys( $this->requeststatus ) : array();
|
| 5396 |
return ( $inclParam ) ? $this->rrule[$propix] : $this->rrule[$propix]['value'];
|
| 5397 |
break;
|
| 5398 |
case 'SEQUENCE':
|
| 5399 |
+
if( isset( $this->sequence['value'] )) return ( $inclParam ) ? $this->sequence : $this->sequence['value'];
|
| 5400 |
break;
|
| 5401 |
case 'STATUS':
|
| 5402 |
+
if( isset( $this->status['value'] )) return ( $inclParam ) ? $this->status : $this->status['value'];
|
| 5403 |
break;
|
| 5404 |
case 'SUMMARY':
|
| 5405 |
+
if( isset( $this->summary['value'] )) return ( $inclParam ) ? $this->summary : $this->summary['value'];
|
| 5406 |
break;
|
| 5407 |
case 'TRANSP':
|
| 5408 |
+
if( isset( $this->transp['value'] )) return ( $inclParam ) ? $this->transp : $this->transp['value'];
|
| 5409 |
break;
|
| 5410 |
case 'TRIGGER':
|
| 5411 |
+
if( isset( $this->trigger['value'] )) return ( $inclParam ) ? $this->trigger : $this->trigger['value'];
|
| 5412 |
break;
|
| 5413 |
case 'TZID':
|
| 5414 |
+
if( isset( $this->tzid['value'] )) return ( $inclParam ) ? $this->tzid : $this->tzid['value'];
|
| 5415 |
break;
|
| 5416 |
case 'TZNAME':
|
| 5417 |
$ak = ( is_array( $this->tzname )) ? array_keys( $this->tzname ) : array();
|
| 5422 |
return ( $inclParam ) ? $this->tzname[$propix] : $this->tzname[$propix]['value'];
|
| 5423 |
break;
|
| 5424 |
case 'TZOFFSETFROM':
|
| 5425 |
+
if( isset( $this->tzoffsetfrom['value'] )) return ( $inclParam ) ? $this->tzoffsetfrom : $this->tzoffsetfrom['value'];
|
| 5426 |
break;
|
| 5427 |
case 'TZOFFSETTO':
|
| 5428 |
+
if( isset( $this->tzoffsetto['value'] )) return ( $inclParam ) ? $this->tzoffsetto : $this->tzoffsetto['value'];
|
| 5429 |
break;
|
| 5430 |
case 'TZURL':
|
| 5431 |
+
if( isset( $this->tzurl['value'] )) return ( $inclParam ) ? $this->tzurl : $this->tzurl['value'];
|
| 5432 |
break;
|
| 5433 |
case 'UID':
|
| 5434 |
if( in_array( $this->objName, array( 'valarm', 'vtimezone', 'standard', 'daylight' )))
|
| 5435 |
return FALSE;
|
| 5436 |
+
if( empty( $this->uid ))
|
| 5437 |
$this->_makeuid();
|
| 5438 |
return ( $inclParam ) ? $this->uid : $this->uid['value'];
|
| 5439 |
break;
|
| 5440 |
case 'URL':
|
| 5441 |
+
if( isset( $this->url['value'] )) return ( $inclParam ) ? $this->url : $this->url['value'];
|
| 5442 |
break;
|
| 5443 |
default:
|
| 5444 |
if( $propName != 'X-PROP' ) {
|
| 5548 |
}
|
| 5549 |
switch( $arglist[0] ) {
|
| 5550 |
case 'ACTION':
|
| 5551 |
+
return $this->setAction( $arglist[1], $arglist[2] );
|
| 5552 |
case 'ATTACH':
|
| 5553 |
+
return $this->setAttach( $arglist[1], $arglist[2], $arglist[3] );
|
| 5554 |
case 'ATTENDEE':
|
| 5555 |
+
return $this->setAttendee( $arglist[1], $arglist[2], $arglist[3] );
|
| 5556 |
case 'CATEGORIES':
|
| 5557 |
+
return $this->setCategories( $arglist[1], $arglist[2], $arglist[3] );
|
| 5558 |
case 'CLASS':
|
| 5559 |
+
return $this->setClass( $arglist[1], $arglist[2] );
|
| 5560 |
case 'COMMENT':
|
| 5561 |
+
return $this->setComment( $arglist[1], $arglist[2], $arglist[3] );
|
| 5562 |
case 'COMPLETED':
|
| 5563 |
+
return $this->setCompleted( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7] );
|
| 5564 |
case 'CONTACT':
|
| 5565 |
+
return $this->setContact( $arglist[1], $arglist[2], $arglist[3] );
|
| 5566 |
case 'CREATED':
|
| 5567 |
+
return $this->setCreated( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7] );
|
| 5568 |
case 'DESCRIPTION':
|
| 5569 |
+
return $this->setDescription( $arglist[1], $arglist[2], $arglist[3] );
|
| 5570 |
case 'DTEND':
|
| 5571 |
+
return $this->setDtend( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7], $arglist[8] );
|
| 5572 |
case 'DTSTAMP':
|
| 5573 |
+
return $this->setDtstamp( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7] );
|
| 5574 |
case 'DTSTART':
|
| 5575 |
+
return $this->setDtstart( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7], $arglist[8] );
|
| 5576 |
case 'DUE':
|
| 5577 |
+
return $this->setDue( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7], $arglist[8] );
|
| 5578 |
case 'DURATION':
|
| 5579 |
+
return $this->setDuration( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6] );
|
| 5580 |
case 'EXDATE':
|
| 5581 |
+
return $this->setExdate( $arglist[1], $arglist[2], $arglist[3] );
|
| 5582 |
case 'EXRULE':
|
| 5583 |
+
return $this->setExrule( $arglist[1], $arglist[2], $arglist[3] );
|
| 5584 |
case 'FREEBUSY':
|
| 5585 |
+
return $this->setFreebusy( $arglist[1], $arglist[2], $arglist[3], $arglist[4] );
|
| 5586 |
case 'GEO':
|
| 5587 |
+
return $this->setGeo( $arglist[1], $arglist[2], $arglist[3] );
|
| 5588 |
case 'LAST-MODIFIED':
|
| 5589 |
+
return $this->setLastModified( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7] );
|
| 5590 |
case 'LOCATION':
|
| 5591 |
+
return $this->setLocation( $arglist[1], $arglist[2] );
|
| 5592 |
case 'ORGANIZER':
|
| 5593 |
+
return $this->setOrganizer( $arglist[1], $arglist[2] );
|
| 5594 |
case 'PERCENT-COMPLETE':
|
| 5595 |
return $this->setPercentComplete( $arglist[1], $arglist[2] );
|
| 5596 |
case 'PRIORITY':
|
| 5597 |
+
return $this->setPriority( $arglist[1], $arglist[2] );
|
| 5598 |
case 'RDATE':
|
| 5599 |
+
return $this->setRdate( $arglist[1], $arglist[2], $arglist[3] );
|
| 5600 |
case 'RECURRENCE-ID':
|
| 5601 |
+
return $this->setRecurrenceid( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7], $arglist[8] );
|
| 5602 |
case 'RELATED-TO':
|
| 5603 |
+
return $this->setRelatedTo( $arglist[1], $arglist[2], $arglist[3] );
|
| 5604 |
case 'REPEAT':
|
| 5605 |
+
return $this->setRepeat( $arglist[1], $arglist[2] );
|
| 5606 |
case 'REQUEST-STATUS':
|
| 5607 |
+
return $this->setRequestStatus( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5] );
|
| 5608 |
case 'RESOURCES':
|
| 5609 |
+
return $this->setResources( $arglist[1], $arglist[2], $arglist[3] );
|
| 5610 |
case 'RRULE':
|
| 5611 |
+
return $this->setRrule( $arglist[1], $arglist[2], $arglist[3] );
|
| 5612 |
case 'SEQUENCE':
|
| 5613 |
+
return $this->setSequence( $arglist[1], $arglist[2] );
|
| 5614 |
case 'STATUS':
|
| 5615 |
+
return $this->setStatus( $arglist[1], $arglist[2] );
|
| 5616 |
case 'SUMMARY':
|
| 5617 |
+
return $this->setSummary( $arglist[1], $arglist[2] );
|
| 5618 |
case 'TRANSP':
|
| 5619 |
+
return $this->setTransp( $arglist[1], $arglist[2] );
|
| 5620 |
case 'TRIGGER':
|
| 5621 |
+
return $this->setTrigger( $arglist[1], $arglist[2], $arglist[3], $arglist[4], $arglist[5], $arglist[6], $arglist[7], $arglist[8], $arglist[9], $arglist[10], $arglist[11] );
|
| 5622 |
case 'TZID':
|
| 5623 |
+
return $this->setTzid( $arglist[1], $arglist[2] );
|
| 5624 |
case 'TZNAME':
|
| 5625 |
+
return $this->setTzname( $arglist[1], $arglist[2], $arglist[3] );
|
| 5626 |
case 'TZOFFSETFROM':
|
| 5627 |
+
return $this->setTzoffsetfrom( $arglist[1], $arglist[2] );
|
| 5628 |
case 'TZOFFSETTO':
|
| 5629 |
+
return $this->setTzoffsetto( $arglist[1], $arglist[2] );
|
| 5630 |
case 'TZURL':
|
| 5631 |
+
return $this->setTzurl( $arglist[1], $arglist[2] );
|
| 5632 |
case 'UID':
|
| 5633 |
+
return $this->setUid( $arglist[1], $arglist[2] );
|
| 5634 |
case 'URL':
|
| 5635 |
+
return $this->setUrl( $arglist[1], $arglist[2] );
|
| 5636 |
default:
|
| 5637 |
+
return $this->setXprop( $arglist[0], $arglist[1], $arglist[2] );
|
| 5638 |
}
|
| 5639 |
return FALSE;
|
| 5640 |
}
|
| 5643 |
* parse component unparsed data into properties
|
| 5644 |
*
|
| 5645 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 5646 |
+
* @since 2.18.16 - 2014-04-04
|
| 5647 |
* @param mixed $unparsedtext, optional, strict rfc2445 formatted, single property string or array of strings
|
| 5648 |
* @return bool FALSE if error occurs during parsing
|
|
|
|
| 5649 |
*/
|
| 5650 |
function parse( $unparsedtext=null ) {
|
| 5651 |
$nl = $this->getConfig( 'nl' );
|
| 5652 |
if( !empty( $unparsedtext )) {
|
| 5653 |
if( is_array( $unparsedtext ))
|
| 5654 |
$unparsedtext = implode( '\n'.$nl, $unparsedtext );
|
| 5655 |
+
$unparsedtext = iCalUtilityFunctions::convEolChar( $unparsedtext, $nl );
|
| 5656 |
}
|
| 5657 |
elseif( !isset( $this->unparsed ))
|
| 5658 |
$unparsedtext = array();
|
| 5731 |
$proprows[] = $line;
|
| 5732 |
}
|
| 5733 |
/* parse each property 'line' */
|
|
|
|
|
|
|
|
|
|
| 5734 |
foreach( $proprows as $line ) {
|
| 5735 |
if( '\n' == substr( $line, -2 ))
|
| 5736 |
$line = substr( $line, 0, -2 );
|
| 5753 |
/* rest of the line is opt.params and value */
|
| 5754 |
$line = substr( $line, $cix );
|
| 5755 |
/* separate attributes from value */
|
| 5756 |
+
iCalUtilityFunctions::_splitContent( $line, $propAttr );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5757 |
/* call setProperty( $propname.. . */
|
| 5758 |
switch( strtoupper( $propname )) {
|
| 5759 |
case 'ATTENDEE':
|
| 5760 |
+
foreach( $propAttr as $pix => $attr ) {
|
| 5761 |
if( !in_array( strtoupper( $pix ), array( 'MEMBER', 'DELEGATED-TO', 'DELEGATED-FROM' )))
|
| 5762 |
continue;
|
| 5763 |
$attr2 = explode( ',', $attr );
|
| 5764 |
if( 1 < count( $attr2 ))
|
| 5765 |
+
$propAttr[$pix] = $attr2;
|
| 5766 |
}
|
| 5767 |
+
$this->setProperty( $propname, $line, $propAttr );
|
| 5768 |
break;
|
|
|
|
|
|
|
|
|
|
| 5769 |
case 'CATEGORIES':
|
| 5770 |
case 'RESOURCES':
|
| 5771 |
if( FALSE !== strpos( $line, ',' )) {
|
| 5783 |
if( 1 < count( $content )) {
|
| 5784 |
$content = array_values( $content );
|
| 5785 |
foreach( $content as $cix => $contentPart )
|
| 5786 |
+
$content[$cix] = iCalUtilityFunctions::_strunrep( $contentPart );
|
| 5787 |
+
$this->setProperty( $propname, $content, $propAttr );
|
| 5788 |
break;
|
| 5789 |
}
|
| 5790 |
else
|
| 5796 |
case 'LOCATION':
|
| 5797 |
case 'SUMMARY':
|
| 5798 |
if( empty( $line ))
|
| 5799 |
+
$propAttr = null;
|
| 5800 |
+
$this->setProperty( $propname, iCalUtilityFunctions::_strunrep( $line ), $propAttr );
|
| 5801 |
break;
|
| 5802 |
case 'REQUEST-STATUS':
|
| 5803 |
$values = explode( ';', $line, 3 );
|
| 5804 |
+
$values[1] = ( !isset( $values[1] )) ? null : iCalUtilityFunctions::_strunrep( $values[1] );
|
| 5805 |
+
$values[2] = ( !isset( $values[2] )) ? null : iCalUtilityFunctions::_strunrep( $values[2] );
|
| 5806 |
$this->setProperty( $propname
|
| 5807 |
, $values[0] // statcode
|
| 5808 |
, $values[1] // statdesc
|
| 5809 |
, $values[2] // extdata
|
| 5810 |
+
, $propAttr );
|
| 5811 |
break;
|
| 5812 |
case 'FREEBUSY':
|
| 5813 |
+
$fbtype = ( isset( $propAttr['FBTYPE'] )) ? $propAttr['FBTYPE'] : ''; // force setting default, if missing
|
| 5814 |
+
unset( $propAttr['FBTYPE'] );
|
| 5815 |
$values = explode( ',', $line );
|
| 5816 |
foreach( $values as $vix => $value ) {
|
| 5817 |
$value2 = explode( '/', $value );
|
| 5818 |
if( 1 < count( $value2 ))
|
| 5819 |
$values[$vix] = $value2;
|
| 5820 |
}
|
| 5821 |
+
$this->setProperty( $propname, $fbtype, $values, $propAttr );
|
| 5822 |
break;
|
| 5823 |
case 'GEO':
|
| 5824 |
$value = explode( ';', $line, 2 );
|
| 5825 |
if( 2 > count( $value ))
|
| 5826 |
$value[1] = null;
|
| 5827 |
+
$this->setProperty( $propname, $value[0], $value[1], $propAttr );
|
| 5828 |
break;
|
| 5829 |
case 'EXDATE':
|
| 5830 |
$values = ( !empty( $line )) ? explode( ',', $line ) : null;
|
| 5831 |
+
$this->setProperty( $propname, $values, $propAttr );
|
| 5832 |
break;
|
| 5833 |
case 'RDATE':
|
| 5834 |
if( empty( $line )) {
|
| 5835 |
+
$this->setProperty( $propname, $line, $propAttr );
|
| 5836 |
break;
|
| 5837 |
}
|
| 5838 |
$values = explode( ',', $line );
|
| 5841 |
if( 1 < count( $value2 ))
|
| 5842 |
$values[$vix] = $value2;
|
| 5843 |
}
|
| 5844 |
+
$this->setProperty( $propname, $values, $propAttr );
|
| 5845 |
break;
|
| 5846 |
case 'EXRULE':
|
| 5847 |
case 'RRULE':
|
| 5900 |
}
|
| 5901 |
} // end - switch $rulelabel
|
| 5902 |
} // end - foreach( $values.. .
|
| 5903 |
+
$this->setProperty( $propname, $recur, $propAttr );
|
| 5904 |
break;
|
| 5905 |
+
case 'X-':
|
| 5906 |
+
$propname = ( isset( $propname2 )) ? $propname2 : $propname;
|
| 5907 |
+
unset( $propname2 );
|
| 5908 |
case 'ACTION':
|
| 5909 |
case 'CLASSIFICATION':
|
| 5910 |
case 'STATUS':
|
| 5913 |
case 'TZID':
|
| 5914 |
case 'RELATED-TO':
|
| 5915 |
case 'TZNAME':
|
| 5916 |
+
$line = iCalUtilityFunctions::_strunrep( $line );
|
| 5917 |
default:
|
| 5918 |
+
$this->setProperty( $propname, $line, $propAttr );
|
| 5919 |
break;
|
| 5920 |
} // end switch( $propname.. .
|
| 5921 |
} // end - foreach( $proprows.. .
|
| 6180 |
}
|
| 6181 |
return $output;
|
| 6182 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6183 |
}
|
| 6184 |
/*********************************************************************************/
|
| 6185 |
/*********************************************************************************/
|
| 6863 |
* 20111223 - move iCalUtilityFunctions class to the end of the iCalcreator class file
|
| 6864 |
*
|
| 6865 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6866 |
+
* @since 2.18.10 - 2013-09-02
|
|
|
|
| 6867 |
*/
|
| 6868 |
class iCalUtilityFunctions {
|
| 6869 |
// Store the single instance of iCalUtilityFunctions
|
| 6873 |
private function __construct() {
|
| 6874 |
$m_pInstance = FALSE;
|
| 6875 |
}
|
| 6876 |
+
// tmp line delimiter, used in convEolChar (parse)
|
| 6877 |
+
private static $baseDelim = null;
|
| 6878 |
+
// output format for geo latitude and longitude (before rtrim)
|
| 6879 |
+
public static $geoLatFmt = '%09.6f';
|
| 6880 |
+
public static $geoLongFmt = '%8.6f';
|
| 6881 |
|
| 6882 |
// Getter method for creating/returning the single instance of this class
|
| 6883 |
public static function getInstance() {
|
| 6890 |
* ensures internal date-time/date format (keyed array) for an input date-time/date array (keyed or unkeyed)
|
| 6891 |
*
|
| 6892 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6893 |
+
* @since 2.16.24 - 2013-06-26
|
| 6894 |
* @param array $datetime
|
| 6895 |
* @param int $parno optional, default FALSE
|
| 6896 |
* @return array
|
| 6900 |
}
|
| 6901 |
public static function _chkDateArr( $datetime, $parno=FALSE ) {
|
| 6902 |
$output = array();
|
| 6903 |
+
if(( !$parno || ( 6 <= $parno )) && isset( $datetime[3] ) && !isset( $datetime[4] )) { // Y-m-d with tz
|
| 6904 |
+
$temp = $datetime[3];
|
| 6905 |
+
$datetime[3] = $datetime[4] = $datetime[5] = 0;
|
| 6906 |
+
$datetime[6] = $temp;
|
| 6907 |
+
}
|
| 6908 |
foreach( $datetime as $dateKey => $datePart ) {
|
| 6909 |
switch ( $dateKey ) {
|
| 6910 |
case '0': case 'year': $output['year'] = $datePart; break;
|
| 6988 |
$parno = 6;
|
| 6989 |
}
|
| 6990 |
}
|
| 6991 |
+
/**
|
| 6992 |
+
* vcalendar sort callback function
|
| 6993 |
+
*
|
| 6994 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 6995 |
+
* @since 2.16.2 - 2012-12-17
|
| 6996 |
+
* @param array $a
|
| 6997 |
+
* @param array $b
|
| 6998 |
+
* @return int
|
| 6999 |
+
*/
|
| 7000 |
+
public static function _cmpfcn( $a, $b ) {
|
| 7001 |
+
if( empty( $a )) return -1;
|
| 7002 |
+
if( empty( $b )) return 1;
|
| 7003 |
+
if( 'vtimezone' == $a->objName ) {
|
| 7004 |
+
if( 'vtimezone' != $b->objName ) return -1;
|
| 7005 |
+
elseif( $a->srtk[0] <= $b->srtk[0] ) return -1;
|
| 7006 |
+
else return 1;
|
| 7007 |
+
}
|
| 7008 |
+
elseif( 'vtimezone' == $b->objName ) return 1;
|
| 7009 |
+
$sortkeys = array( 'year', 'month', 'day', 'hour', 'min', 'sec' );
|
| 7010 |
+
for( $k = 0; $k < 4 ; $k++ ) {
|
| 7011 |
+
if( empty( $a->srtk[$k] )) return -1;
|
| 7012 |
+
elseif( empty( $b->srtk[$k] )) return 1;
|
| 7013 |
+
if( is_array( $a->srtk[$k] )) {
|
| 7014 |
+
if( is_array( $b->srtk[$k] )) {
|
| 7015 |
+
foreach( $sortkeys as $key ) {
|
| 7016 |
+
if ( !isset( $a->srtk[$k][$key] )) return -1;
|
| 7017 |
+
elseif( !isset( $b->srtk[$k][$key] )) return 1;
|
| 7018 |
+
if ( empty( $a->srtk[$k][$key] )) return -1;
|
| 7019 |
+
elseif( empty( $b->srtk[$k][$key] )) return 1;
|
| 7020 |
+
if ( $a->srtk[$k][$key] == $b->srtk[$k][$key])
|
| 7021 |
+
continue;
|
| 7022 |
+
if (( (int) $a->srtk[$k][$key] ) < ((int) $b->srtk[$k][$key] ))
|
| 7023 |
+
return -1;
|
| 7024 |
+
elseif(( (int) $a->srtk[$k][$key] ) > ((int) $b->srtk[$k][$key] ))
|
| 7025 |
+
return 1;
|
| 7026 |
+
}
|
| 7027 |
+
}
|
| 7028 |
+
else return -1;
|
| 7029 |
+
}
|
| 7030 |
+
elseif( is_array( $b->srtk[$k] )) return 1;
|
| 7031 |
+
elseif( $a->srtk[$k] < $b->srtk[$k] ) return -1;
|
| 7032 |
+
elseif( $a->srtk[$k] > $b->srtk[$k] ) return 1;
|
| 7033 |
+
}
|
| 7034 |
+
return 0;
|
| 7035 |
+
}
|
| 7036 |
/**
|
| 7037 |
* byte oriented line folding fix
|
| 7038 |
*
|
| 7041 |
* takes care of '\r\n', '\r' and '\n' and mixed '\r\n'+'\r', '\r\n'+'\n'
|
| 7042 |
*
|
| 7043 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7044 |
+
* @since 2.18.16 - 2014-04-04
|
| 7045 |
* @param string $text
|
| 7046 |
* @param string $nl
|
| 7047 |
* @return string
|
| 7048 |
*/
|
| 7049 |
public static function convEolChar( & $text, $nl ) {
|
| 7050 |
+
/* fix dummy line separator */
|
| 7051 |
+
if( empty( iCalUtilityFunctions::$baseDelim )) {
|
| 7052 |
+
iCalUtilityFunctions::$baseDelim = substr( microtime(), 2, 4 );
|
| 7053 |
+
$base = 'aAbB!cCdD"eEfF#gGhHiIjJ%kKlL&mMnN/oOpP(rRsS)tTuU=vVxX?uUvV*wWzZ-1234_5678|90';
|
| 7054 |
+
$len = strlen( $base ) - 1;
|
| 7055 |
+
for( $p = 0; $p < 6; $p++ )
|
| 7056 |
+
iCalUtilityFunctions::$baseDelim .= $base{mt_rand( 0, $len )};
|
| 7057 |
+
}
|
| 7058 |
+
/* fix eol chars */
|
| 7059 |
+
$text = str_replace( array( "\r\n", "\n\r", "\n", "\r" ), iCalUtilityFunctions::$baseDelim, $text );
|
| 7060 |
+
/* fix empty lines */
|
| 7061 |
+
$text = str_replace( iCalUtilityFunctions::$baseDelim.iCalUtilityFunctions::$baseDelim, iCalUtilityFunctions::$baseDelim.str_pad( '', 75 ).iCalUtilityFunctions::$baseDelim, $text );
|
| 7062 |
+
/* fix line folding */
|
| 7063 |
+
$text = str_replace( iCalUtilityFunctions::$baseDelim, $nl, $text );
|
| 7064 |
+
$text = str_replace( array( $nl.' ', $nl."\t" ), '', $text );
|
| 7065 |
+
/* split in component/property lines */
|
| 7066 |
+
$text = explode( $nl, $text );
|
| 7067 |
+
return $text;
|
|
|
|
|
|
|
| 7068 |
}
|
| 7069 |
/**
|
| 7070 |
* create a calendar timezone and standard/daylight components
|
| 7088 |
* END:VTIMEZONE
|
| 7089 |
*
|
| 7090 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7091 |
+
* @since 2.18.17 - 2013-12-22
|
| 7092 |
* Generates components for all transitions in a date range, based on contribution by Yitzchok Lavi <icalcreator@onebigsystem.com>
|
| 7093 |
* Additional changes jpirkey
|
| 7094 |
* @param object $calendar, reference to an iCalcreator calendar instance
|
| 7121 |
else {
|
| 7122 |
$from = reset( $dates ); // set lowest date to the lowest dtstart date
|
| 7123 |
$dateFrom = new DateTime( $from.'T000000', $dtz );
|
| 7124 |
+
$dateFrom->modify( '-7 month' ); // set $dateFrom to seven month before the lowest date
|
| 7125 |
$dateFrom->setTimezone( $utcTz ); // convert local date to UTC
|
| 7126 |
}
|
| 7127 |
$dateFromYmd = $dateFrom->format('Y-m-d' );
|
| 7130 |
else {
|
| 7131 |
$to = end( $dates ); // set highest date to the highest dtstart date
|
| 7132 |
$dateTo = new DateTime( $to.'T235959', $dtz );
|
| 7133 |
+
$dateTo->modify( '+7 month' ); // set $dateTo to seven month after the highest date
|
| 7134 |
$dateTo->setTimezone( $utcTz ); // convert local date to UTC
|
| 7135 |
}
|
| 7136 |
$dateToYmd = $dateTo->format('Y-m-d' );
|
| 7205 |
}
|
| 7206 |
}
|
| 7207 |
unset( $transitions, $date, $prevTrans );
|
| 7208 |
+
foreach( $transTemp as $tix => $trans ) { // create standard/daylight subcomponents
|
| 7209 |
$type = ( TRUE !== $trans['isdst'] ) ? 'standard' : 'daylight';
|
| 7210 |
$scomp = & $tz->newComponent( $type );
|
| 7211 |
$scomp->setProperty( 'dtstart', $trans['time'] );
|
| 7259 |
$offset = iCalUtilityFunctions::_tz2offset( $datetime['tz'] );
|
| 7260 |
try {
|
| 7261 |
$d = new DateTime( $output, new DateTimeZone( 'UTC' ));
|
| 7262 |
+
if( 0 != $offset ) // adjust för offset
|
| 7263 |
$d->modify( "$offset seconds" );
|
| 7264 |
$output = $d->format( 'Ymd\THis' );
|
| 7265 |
}
|
| 7315 |
* ensures internal duration format for input in array format
|
| 7316 |
*
|
| 7317 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7318 |
+
* @since 2.19.4 - 2014-03-14
|
| 7319 |
* @param array $duration
|
| 7320 |
* @return array
|
| 7321 |
*/
|
| 7323 |
return iCalUtilityFunctions::_duration2arr( $duration );
|
| 7324 |
}
|
| 7325 |
public static function _duration2arr( $duration ) {
|
| 7326 |
+
$seconds = 0;
|
| 7327 |
+
foreach( $duration as $durKey => $durValue ) {
|
| 7328 |
+
if( empty( $durValue )) continue;
|
| 7329 |
+
switch ( $durKey ) {
|
| 7330 |
+
case '0': case 'week':
|
| 7331 |
+
$seconds += (((int) $durValue ) * 60 * 60 * 24 * 7 );
|
| 7332 |
+
break;
|
| 7333 |
+
case '1': case 'day':
|
| 7334 |
+
$seconds += (((int) $durValue ) * 60 * 60 * 24 );
|
| 7335 |
+
break;
|
| 7336 |
+
case '2': case 'hour':
|
| 7337 |
+
$seconds += (((int) $durValue ) * 60 * 60 );
|
| 7338 |
+
break;
|
| 7339 |
+
case '3': case 'min':
|
| 7340 |
+
$seconds += (((int) $durValue ) * 60 );
|
| 7341 |
+
break;
|
| 7342 |
+
case '4': case 'sec':
|
| 7343 |
+
$seconds += (int) $durValue;
|
| 7344 |
+
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7345 |
}
|
| 7346 |
}
|
| 7347 |
+
$output = array();
|
| 7348 |
+
$output['week'] = (int) floor( $seconds / ( 60 * 60 * 24 * 7 ));
|
| 7349 |
+
if(( 0 < $output['week'] ) && ( 0 == ( $seconds % ( 60 * 60 * 24 * 7 ))))
|
| 7350 |
return $output;
|
|
|
|
| 7351 |
unset( $output['week'] );
|
| 7352 |
+
$output['day'] = (int) floor( $seconds / ( 60 * 60 * 24 ));
|
| 7353 |
+
$seconds = ( $seconds % ( 60 * 60 * 24 ));
|
| 7354 |
+
$output['hour'] = (int) floor( $seconds / ( 60 * 60 ));
|
| 7355 |
+
$seconds = ( $seconds % ( 60 * 60 ));
|
| 7356 |
+
$output['min'] = (int) floor( $seconds / 60 );
|
| 7357 |
+
$output['sec'] = ( $seconds % 60 );
|
| 7358 |
if( empty( $output['day'] ))
|
| 7359 |
unset( $output['day'] );
|
| 7360 |
+
if(( 0 == $output['hour'] ) && ( 0 == $output['min'] ) && ( 0 == $output['sec'] ))
|
| 7361 |
+
unset( $output['hour'], $output['min'], $output['sec'] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7362 |
return $output;
|
| 7363 |
}
|
| 7364 |
/**
|
| 7510 |
}
|
| 7511 |
return $elseVal;
|
| 7512 |
}
|
| 7513 |
+
/**
|
| 7514 |
+
* mgnt geo part output
|
| 7515 |
+
*
|
| 7516 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7517 |
+
* @since 2.8.10 - 2013-09-02
|
| 7518 |
+
* @param float $ll
|
| 7519 |
+
* @return string
|
| 7520 |
+
*/
|
| 7521 |
+
public static function _geo2str2( $ll, $format ) {
|
| 7522 |
+
if( 0.0 < $ll )
|
| 7523 |
+
$sign = '+';
|
| 7524 |
+
else
|
| 7525 |
+
$sign = ( 0.0 > $ll ) ? '-' : '';
|
| 7526 |
+
return rtrim( rtrim( $sign.sprintf( $format, abs( $ll )), '0' ), '.' );
|
| 7527 |
+
}
|
| 7528 |
/**
|
| 7529 |
* checks if input contains a (array formatted) date/time
|
| 7530 |
*
|
| 7531 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7532 |
+
* @since 2.16.24 - 2013-07-02
|
| 7533 |
* @param array $input
|
| 7534 |
* @return bool
|
| 7535 |
*/
|
| 7536 |
public static function _isArrayDate( $input ) {
|
| 7537 |
+
if( !is_array( $input ) || isset( $input['week'] ) || isset( $input['timestamp'] ) || ( 3 > count( $input )))
|
|
|
|
|
|
|
| 7538 |
return FALSE;
|
| 7539 |
if( 7 == count( $input ))
|
| 7540 |
return TRUE;
|
| 7542 |
return checkdate( (int) $input['month'], (int) $input['day'], (int) $input['year'] );
|
| 7543 |
if( isset( $input['day'] ) || isset( $input['hour'] ) || isset( $input['min'] ) || isset( $input['sec'] ))
|
| 7544 |
return FALSE;
|
| 7545 |
+
if(( 0 == $input[0] ) || ( 0 == $input[1] ) || ( 0 == $input[2] ))
|
| 7546 |
return FALSE;
|
| 7547 |
if(( 1970 > $input[0] ) || ( 12 < $input[1] ) || ( 31 < $input[2] ))
|
| 7548 |
return FALSE;
|
| 7549 |
if(( isset( $input[0] ) && isset( $input[1] ) && isset( $input[2] )) &&
|
| 7550 |
+
checkdate((int) $input[1], (int) $input[2], (int) $input[0] ))
|
| 7551 |
return TRUE;
|
| 7552 |
$input = iCalUtilityFunctions::_strdate2date( $input[1].'/'.$input[2].'/'.$input[0], 3 ); // m - d - Y
|
| 7553 |
if( isset( $input['year'] ) && isset( $input['month'] ) && isset( $input['day'] ))
|
| 7698 |
*
|
| 7699 |
* if missing, UNTIL is set 1 year from startdate (emergency break)
|
| 7700 |
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7701 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 7702 |
* @since 2.10.19 - 2011-10-31
|
| 7703 |
* @param array $result, array to update, array([timestamp] => timestamp)
|
| 7717 |
$enddate = $startdate;
|
| 7718 |
$enddate['year'] += 1;
|
| 7719 |
}
|
| 7720 |
+
// echo "recur __in_ comp start ".implode('-',$wdate)." period start ".implode('-',$startdate)." period end ".implode('-',$enddate)."<br>\n";print_r($recur);echo "<br>\n";//test###
|
| 7721 |
$endDatets = iCalUtilityFunctions::_date2timestamp( $enddate ); // fix break
|
| 7722 |
if( !isset( $recur['COUNT'] ) && !isset( $recur['UNTIL'] ))
|
| 7723 |
$recur['UNTIL'] = $enddate; // create break
|
| 7731 |
$recur['UNTIL'] = iCalUtilityFunctions::_timestamp2date( $endDatets, 6 );
|
| 7732 |
}
|
| 7733 |
if( $wdatets > $endDatets ) {
|
| 7734 |
+
// echo "recur out of date ".date('Y-m-d H:i:s',$wdatets)."<br>\n";//test
|
| 7735 |
return array(); // nothing to do.. .
|
| 7736 |
}
|
| 7737 |
if( !isset( $recur['FREQ'] )) // "MUST be specified.. ."
|
| 7764 |
}
|
| 7765 |
if( isset( $recur['BYSETPOS'] )) { // save start date + weekno
|
| 7766 |
$bysetposymd1 = $bysetposymd2 = $bysetposw1 = $bysetposw2 = array();
|
| 7767 |
+
// echo "bysetposXold_start=$bysetposYold $bysetposMold $bysetposDold<br>\n"; // test ###
|
| 7768 |
if( is_array( $recur['BYSETPOS'] )) {
|
| 7769 |
foreach( $recur['BYSETPOS'] as $bix => $bval )
|
| 7770 |
$recur['BYSETPOS'][$bix] = (int) $bval;
|
| 7783 |
}
|
| 7784 |
else
|
| 7785 |
iCalUtilityFunctions::_stepdate( $enddate, $endDatets, $step); // make sure to count whole last period
|
| 7786 |
+
// echo "BYSETPOS endDat++ =".implode('-',$enddate).' step='.var_export($step,TRUE)."<br>\n";//test###
|
| 7787 |
$bysetposWold = (int) date( 'W', ( $wdatets + $wkst ));
|
| 7788 |
$bysetposYold = $wdate['year'];
|
| 7789 |
$bysetposMold = $wdate['month'];
|
| 7794 |
$year_old = null;
|
| 7795 |
$daynames = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA' );
|
| 7796 |
/* MAIN LOOP */
|
| 7797 |
+
// echo "recur start ".implode('-',$wdate)." end ".implode('-',$enddate)."<br>\n";//test
|
| 7798 |
while( TRUE ) {
|
| 7799 |
if( isset( $endDatets ) && ( $wdatets > $endDatets ))
|
| 7800 |
break;
|
| 7884 |
if(( $recur['INTERVAL'] != $intervalarr[$intervalix] ) &&
|
| 7885 |
( 0 != $intervalarr[$intervalix] )) {
|
| 7886 |
/* step up date */
|
| 7887 |
+
// echo "skip: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br>\n";//test
|
| 7888 |
iCalUtilityFunctions::_stepdate( $wdate, $wdatets, $step);
|
| 7889 |
continue;
|
| 7890 |
}
|
| 7891 |
else // continue within the selected interval
|
| 7892 |
$intervalarr[$intervalix] = 0;
|
| 7893 |
+
// echo "cont: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br>\n";//test
|
| 7894 |
}
|
| 7895 |
$updateOK = TRUE;
|
| 7896 |
if( $updateOK && isset( $recur['BYMONTH'] ))
|
| 7909 |
$updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYMONTHDAY']
|
| 7910 |
, $wdate['day']
|
| 7911 |
, $daycnts[$wdate['month']][$wdate['day']]['monthcnt_down'] );
|
| 7912 |
+
// echo "efter BYMONTHDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br>\n";//test###
|
| 7913 |
if( $updateOK && isset( $recur['BYDAY'] )) {
|
| 7914 |
$updateOK = FALSE;
|
| 7915 |
$m = $wdate['month'];
|
| 7932 |
if(( $daynoexists && $daynosw && $daynamesw ) ||
|
| 7933 |
( !$daynoexists && !$daynosw && $daynamesw )) {
|
| 7934 |
$updateOK = TRUE;
|
| 7935 |
+
// echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br>\n"; // test ###
|
| 7936 |
}
|
| 7937 |
+
// echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br>\n"; // test ###
|
| 7938 |
}
|
| 7939 |
else {
|
| 7940 |
foreach( $recur['BYDAY'] as $bydayvalue ) {
|
| 7954 |
, $daycnts[$m][$d]['yeardayno_up']
|
| 7955 |
, $daycnts[$m][$d]['yeardayno_down'] );
|
| 7956 |
}
|
| 7957 |
+
// echo "daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw<br>\n"; // test ###
|
| 7958 |
if(( $daynoexists && $daynosw && $daynamesw ) ||
|
| 7959 |
( !$daynoexists && !$daynosw && $daynamesw )) {
|
| 7960 |
$updateOK = TRUE;
|
| 7963 |
}
|
| 7964 |
}
|
| 7965 |
}
|
| 7966 |
+
// echo "efter BYDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br>\n"; // test ###
|
| 7967 |
/* check BYSETPOS */
|
| 7968 |
if( $updateOK ) {
|
| 7969 |
if( isset( $recur['BYSETPOS'] ) &&
|
| 7984 |
(( $bysetposYold == $wdate['year'] ) &&
|
| 7985 |
( $bysetposMold == $wdate['month']) &&
|
| 7986 |
( $bysetposDold == $wdate['day'] )))) {
|
| 7987 |
+
// echo "bysetposymd1[]=".date('Y-m-d H:i:s',$wdatets)."<br>\n";//test
|
| 7988 |
$bysetposymd1[] = $wdatets;
|
| 7989 |
}
|
| 7990 |
else {
|
| 7991 |
+
// echo "bysetposymd2[]=".date('Y-m-d H:i:s',$wdatets)."<br>\n";//test
|
| 7992 |
$bysetposymd2[] = $wdatets;
|
| 7993 |
}
|
| 7994 |
}
|
| 7998 |
$countcnt++;
|
| 7999 |
if( $startdatets <= $wdatets ) { // only output within period
|
| 8000 |
$result[$wdatets] = TRUE;
|
| 8001 |
+
// echo "recur ".date('Y-m-d H:i:s',$wdatets)."<br>\n";//test
|
| 8002 |
}
|
| 8003 |
+
// echo "recur undate ".date('Y-m-d H:i:s',$wdatets)." okdatstart ".date('Y-m-d H:i:s',$startdatets)."<br>\n";//test
|
| 8004 |
$updateOK = FALSE;
|
| 8005 |
}
|
| 8006 |
}
|
| 8045 |
$bysetposarr1 = & $bysetposymd1;
|
| 8046 |
$bysetposarr2 = & $bysetposymd2;
|
| 8047 |
}
|
| 8048 |
+
// echo 'test före out startYMD (weekno)='.$wdateStart['year'].':'.$wdateStart['month'].':'.$wdateStart['day']." ($weekStart) "; // test ###
|
| 8049 |
foreach( $recur['BYSETPOS'] as $ix ) {
|
| 8050 |
if( 0 > $ix ) // both positive and negative BYSETPOS allowed
|
| 8051 |
$ix = ( count( $bysetposarr1 ) + $ix + 1);
|
| 8063 |
if( isset( $recur['COUNT'] ) && ( $countcnt >= $recur['COUNT'] ))
|
| 8064 |
break;
|
| 8065 |
}
|
| 8066 |
+
// echo "<br>\n"; // test ###
|
| 8067 |
$bysetposarr1 = $bysetposarr2;
|
| 8068 |
$bysetposarr2 = array();
|
| 8069 |
}
|
| 8099 |
}
|
| 8100 |
return $intervalix;
|
| 8101 |
}
|
| 8102 |
+
public static function _recurBydaySort( $bydaya, $bydayb ) {
|
| 8103 |
+
static $days = array( 'SU' => 0, 'MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6 );
|
| 8104 |
+
return ( $days[substr( $bydaya, -2 )] < $days[substr( $bydayb, -2 )] ) ? -1 : 1;
|
| 8105 |
+
}
|
| 8106 |
+
/**
|
| 8107 |
+
* helper function for vcalendar::selectComponents, set property X-CURRENT-DTEND/DUE
|
| 8108 |
+
*
|
| 8109 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8110 |
+
* @since 2.18.7 - 2013-08-30
|
| 8111 |
+
* @param object $comp component to update
|
| 8112 |
+
* @param array $dateFormat
|
| 8113 |
+
* @param int $timestamp1
|
| 8114 |
+
* @param string $cmpYMD1 date('Ymd') related to $timestamp1
|
| 8115 |
+
* @param int $timestamp2
|
| 8116 |
+
* @param string $cmpYMD2 date('Ymd') related to $timestamp2
|
| 8117 |
+
* @param array $tz date array opt. with key for 'tz'
|
| 8118 |
+
* @param array $SCbools (end) date booleans
|
| 8119 |
+
* @return void
|
| 8120 |
+
*/
|
| 8121 |
+
static function _SCsetXCurrentEnd( $comp, $dateFormat, $timestamp1, $cmpYMD1, $timestamp2, $cmpYMD2, $tz, $SCbools ) {
|
| 8122 |
+
if( ! $SCbools[ 'dtendExist'] && ! $SCbools[ 'dueExist'] && ! $SCbools[ 'durationExist'] )
|
| 8123 |
+
return;
|
| 8124 |
+
$H = ( $cmpYMD1 < $cmpYMD2 ) ? 23 : date( 'H', $timestamp2 );
|
| 8125 |
+
$i = ( $cmpYMD1 < $cmpYMD2 ) ? 59 : date( 'i', $timestamp2 );
|
| 8126 |
+
$s = ( $cmpYMD1 < $cmpYMD2 ) ? 59 : date( 's', $timestamp2 );
|
| 8127 |
+
$tend = mktime( $H, $i, $s, date( 'm', $timestamp1 ), date( 'd', $timestamp1 ), date( 'Y', $timestamp1 ) ); // on a day-basis !!!
|
| 8128 |
+
if( $SCbools[ 'endAllDayEvent'] && $SCbools[ 'dtendExist'] )
|
| 8129 |
+
$tend += ( 24 * 3600 ); // alldaysevents has an end date 'day after' meaning this day
|
| 8130 |
+
$datestring = date( $dateFormat['end'], $tend );
|
| 8131 |
+
if( isset( $tz['tz'] ))
|
| 8132 |
+
$datestring .= ' '.$tz['tz'];
|
| 8133 |
+
$propName = ( ! $SCbools[ 'dueExist'] ) ? 'X-CURRENT-DTEND' : 'X-CURRENT-DUE';
|
| 8134 |
+
$comp->setProperty( $propName, $datestring );
|
| 8135 |
+
}
|
| 8136 |
+
/**
|
| 8137 |
+
* helper function for vcalendar::selectComponents, set property X-CURRENT-DTSTART
|
| 8138 |
+
*
|
| 8139 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8140 |
+
* @since 2.18.7 - 2013-08-30
|
| 8141 |
+
* @param object $comp component to update
|
| 8142 |
+
* @param array $dateFormat
|
| 8143 |
+
* @param int $timestamp1
|
| 8144 |
+
* @param string $cpmYMD1 date('Ymd') related to $timestamp1
|
| 8145 |
+
* @param int $timestamp2
|
| 8146 |
+
* @param string $cpmYMD2 date('Ymd') related to $timestamp2
|
| 8147 |
+
* @param array $tz date array opt. with key for 'tz'
|
| 8148 |
+
* @return void
|
| 8149 |
+
*/
|
| 8150 |
+
static function _SCsetXCurrentStart( $comp, $dateFormat, $timestamp1, $cpmYMD1=FALSE, $timestamp2=FALSE, $cpmYMD2=FALSE, $tz=FALSE ) {
|
| 8151 |
+
if( $cpmYMD2 && ( $cpmYMD1 <= $cpmYMD2 )) // check date after dtstart
|
| 8152 |
+
$timestamp1 = $timestamp2;
|
| 8153 |
+
$datestring = date( $dateFormat['start'], $timestamp1 );
|
| 8154 |
+
if( isset( $tz['tz'] ))
|
| 8155 |
+
$datestring .= ' '.$tz['tz'];
|
| 8156 |
+
$comp->setProperty( 'X-CURRENT-DTSTART', $datestring );
|
| 8157 |
+
}
|
| 8158 |
+
/**
|
| 8159 |
+
* helper function for vcalendar::selectComponents, adjust UTC X-CURRENT-x date
|
| 8160 |
+
*
|
| 8161 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8162 |
+
* @since 2.18.19 - 2014-02-01
|
| 8163 |
+
* @param int $timestamp
|
| 8164 |
+
* @param array $tz date array opt. with key for 'tz'
|
| 8165 |
+
* @return int
|
| 8166 |
+
*/
|
| 8167 |
+
static function _SCsetXCurrentDateZ( $timestamp, $tz=array()) {
|
| 8168 |
+
if( ! is_array( $tz ) || ! isset( $tz['tz'] ))
|
| 8169 |
+
return $timestamp;
|
| 8170 |
+
$tz['tz'] = strtoupper( $tz['tz'] );
|
| 8171 |
+
if(( 'Z' == $tz['tz'] ) ||( 'UTC' == $tz['tz'] ) ||( 'GMT' == $tz['tz'] ))
|
| 8172 |
+
$timestamp -= date( 'Z', $timestamp );
|
| 8173 |
+
return $timestamp;
|
| 8174 |
+
}
|
| 8175 |
/**
|
| 8176 |
* convert input format for exrule and rrule to internal format
|
| 8177 |
*
|
| 8178 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8179 |
+
* @since 2.18.10 - 2013-09-04
|
| 8180 |
* @param array $rexrule
|
| 8181 |
* @return array
|
| 8182 |
*/
|
| 8184 |
$input = array();
|
| 8185 |
if( empty( $rexrule ))
|
| 8186 |
return $input;
|
| 8187 |
+
$rexrule = array_change_key_case( $rexrule, CASE_UPPER );
|
| 8188 |
foreach( $rexrule as $rexrulelabel => $rexrulevalue ) {
|
|
|
|
| 8189 |
if( 'UNTIL' != $rexrulelabel )
|
| 8190 |
$input[$rexrulelabel] = $rexrulevalue;
|
| 8191 |
else {
|
| 8266 |
* convert format for input date to internal date with parameters
|
| 8267 |
*
|
| 8268 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8269 |
+
* @since 2.16.24 - 2013-06-26
|
| 8270 |
* @param mixed $year
|
| 8271 |
* @param mixed $month optional
|
| 8272 |
* @param int $day optional
|
| 8285 |
$localtime = (( 'dtstart' == $caller ) && in_array( $objName, array( 'vtimezone', 'standard', 'daylight' ))) ? TRUE : FALSE;
|
| 8286 |
iCalUtilityFunctions::_strDate2arr( $year );
|
| 8287 |
if( iCalUtilityFunctions::_isArrayDate( $year )) {
|
| 8288 |
+
$input['value'] = iCalUtilityFunctions::_chkDateArr( $year, FALSE ); //$parno );
|
| 8289 |
if( 100 > $input['value']['year'] )
|
| 8290 |
$input['value']['year'] += 2000;
|
| 8291 |
if( $localtime )
|
| 8294 |
$month['TZID'] = $tzid;
|
| 8295 |
if( isset( $input['value']['tz'] ) && iCalUtilityFunctions::_isOffset( $input['value']['tz'] ))
|
| 8296 |
unset( $month['TZID'] );
|
| 8297 |
+
elseif( !isset( $input['value']['tz'] ) && isset( $month['TZID'] ) && iCalUtilityFunctions::_isOffset( $month['TZID'] )) {
|
| 8298 |
$input['value']['tz'] = $month['TZID'];
|
| 8299 |
unset( $month['TZID'] );
|
| 8300 |
}
|
| 8302 |
$hitval = ( isset( $input['value']['tz'] )) ? 7 : 6;
|
| 8303 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval );
|
| 8304 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, count( $input['value'] ), $parno );
|
| 8305 |
+
if( 6 > $parno )
|
| 8306 |
+
unset( $input['value']['tz'], $input['params']['TZID'], $tzid );
|
| 8307 |
+
if(( 6 <= $parno ) && isset( $input['value']['tz'] ) && ( 'Z' != $input['value']['tz'] ) && iCalUtilityFunctions::_isOffset( $input['value']['tz'] )) {
|
| 8308 |
$d = $input['value'];
|
| 8309 |
$strdate = sprintf( '%04d-%02d-%02d %02d:%02d:%02d %s', $d['year'], $d['month'], $d['day'], $d['hour'], $d['min'], $d['sec'], $d['tz'] );
|
| 8310 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $strdate, $parno );
|
| 8321 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3 );
|
| 8322 |
$hitval = 7;
|
| 8323 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval, $parno );
|
| 8324 |
+
if( isset( $year['tz'] ) && !empty( $year['tz'] )) {
|
| 8325 |
+
if( !iCalUtilityFunctions::_isOffset( $year['tz'] )) {
|
|
|
|
|
|
|
|
|
|
| 8326 |
$input['params']['TZID'] = $year['tz'];
|
| 8327 |
+
unset( $year['tz'], $tzid );
|
| 8328 |
+
}
|
| 8329 |
+
else {
|
| 8330 |
+
if( isset( $input['params']['TZID'] ) && !empty( $input['params']['TZID'] )) {
|
| 8331 |
+
if( !iCalUtilityFunctions::_isOffset( $input['params']['TZID'] ))
|
| 8332 |
+
unset( $tzid );
|
| 8333 |
+
else
|
| 8334 |
+
unset( $input['params']['TZID']);
|
| 8335 |
+
}
|
| 8336 |
+
elseif( isset( $tzid ) && !iCalUtilityFunctions::_isOffset( $tzid ))
|
| 8337 |
+
$input['params']['TZID'] = $tzid;
|
| 8338 |
+
}
|
| 8339 |
}
|
| 8340 |
+
elseif( isset( $input['params']['TZID'] ) && !empty( $input['params']['TZID'] )) {
|
|
|
|
|
|
|
| 8341 |
if( iCalUtilityFunctions::_isOffset( $input['params']['TZID'] )) {
|
| 8342 |
+
$year['tz'] = $input['params']['TZID'];
|
| 8343 |
+
unset( $input['params']['TZID']);
|
| 8344 |
+
if( isset( $tzid ) && !empty( $tzid ) && !iCalUtilityFunctions::_isOffset( $tzid ))
|
| 8345 |
+
$input['params']['TZID'] = $tzid;
|
| 8346 |
+
}
|
| 8347 |
+
}
|
| 8348 |
+
elseif( isset( $tzid ) && !empty( $tzid )) {
|
| 8349 |
+
if( iCalUtilityFunctions::_isOffset( $tzid )) {
|
| 8350 |
+
$year['tz'] = $tzid;
|
| 8351 |
+
unset( $input['params']['TZID']);
|
| 8352 |
}
|
| 8353 |
+
else
|
| 8354 |
+
$input['params']['TZID'] = $tzid;
|
| 8355 |
}
|
| 8356 |
$input['value'] = iCalUtilityFunctions::_timestamp2date( $year, $parno );
|
| 8357 |
} // end elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year ))
|
| 8364 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7, $parno );
|
| 8365 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, $parno, $parno );
|
| 8366 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $year, $parno );
|
| 8367 |
+
if( 3 == $parno )
|
| 8368 |
+
unset( $input['value']['tz'], $input['params']['TZID'] );
|
| 8369 |
unset( $input['value']['unparsedtext'] );
|
| 8370 |
if( isset( $input['value']['tz'] )) {
|
| 8371 |
if( iCalUtilityFunctions::_isOffset( $input['value']['tz'] )) {
|
| 8472 |
* convert format for input date (UTC) to internal date with parameters
|
| 8473 |
*
|
| 8474 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8475 |
+
* @since 2.16.24 - 2013-07-01
|
| 8476 |
* @param mixed $year
|
| 8477 |
* @param mixed $month optional
|
| 8478 |
* @param int $day optional
|
| 8490 |
if( isset( $input['value']['year'] ) && ( 100 > $input['value']['year'] ))
|
| 8491 |
$input['value']['year'] += 2000;
|
| 8492 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
| 8493 |
+
unset( $input['params']['VALUE'] );
|
| 8494 |
+
if( isset( $input['value']['tz'] ) && iCalUtilityFunctions::_isOffset( $input['value']['tz'] ))
|
| 8495 |
+
$tzid = $input['value']['tz'];
|
| 8496 |
+
elseif( isset( $input['params']['TZID'] ) && iCalUtilityFunctions::_isOffset( $input['params']['TZID'] ))
|
| 8497 |
+
$tzid = $input['params']['TZID'];
|
| 8498 |
+
else
|
| 8499 |
+
$tzid = '';
|
| 8500 |
+
unset( $input['params']['VALUE'], $input['params']['TZID'] );
|
| 8501 |
+
if( !empty( $tzid ) && ( 'Z' != $tzid ) && iCalUtilityFunctions::_isOffset( $tzid )) {
|
| 8502 |
$d = $input['value'];
|
| 8503 |
+
$strdate = sprintf( '%04d-%02d-%02d %02d:%02d:%02d %s', $d['year'], $d['month'], $d['day'], $d['hour'], $d['min'], $d['sec'], $tzid );
|
| 8504 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $strdate, 7 );
|
| 8505 |
unset( $input['value']['unparsedtext'] );
|
| 8506 |
}
|
| 8507 |
}
|
| 8508 |
elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year )) {
|
| 8509 |
+
if( isset( $year['tz'] ) && ! iCalUtilityFunctions::_isOffset( $year['tz'] ))
|
| 8510 |
+
$year['tz'] = 'UTC';
|
| 8511 |
+
elseif( isset( $input['params']['TZID'] ) && iCalUtilityFunctions::_isOffset( $input['params']['TZID'] ))
|
| 8512 |
+
$year['tz'] = $input['params']['TZID'];
|
| 8513 |
+
else
|
| 8514 |
+
$year['tz'] = 'UTC';
|
| 8515 |
$input['value'] = iCalUtilityFunctions::_timestamp2date( $year, 7 );
|
| 8516 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
| 8517 |
+
unset( $input['params']['VALUE'], $input['params']['TZID'] );
|
| 8518 |
}
|
| 8519 |
elseif( 8 <= strlen( trim( $year ))) { // ex. 2006-08-03 10:12:18
|
| 8520 |
$input['value'] = iCalUtilityFunctions::_strdate2date( $year, 7 );
|
| 8521 |
unset( $input['value']['unparsedtext'] );
|
| 8522 |
$input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
|
| 8523 |
+
if(( !isset( $input['value']['tz'] ) || empty( $input['value']['tz'] )) && isset( $input['params']['TZID'] ) && iCalUtilityFunctions::_isOffset( $input['params']['TZID'] )) {
|
| 8524 |
+
$d = $input['value'];
|
| 8525 |
+
$strdate = sprintf( '%04d-%02d-%02d %02d:%02d:%02d %s', $d['year'], $d['month'], $d['day'], $d['hour'], $d['min'], $d['sec'], $input['params']['TZID'] );
|
| 8526 |
+
$input['value'] = iCalUtilityFunctions::_strdate2date( $strdate, 7 );
|
| 8527 |
+
unset( $input['value']['unparsedtext'] );
|
| 8528 |
+
}
|
| 8529 |
+
unset( $input['params']['VALUE'], $input['params']['TZID'] );
|
| 8530 |
}
|
| 8531 |
else {
|
| 8532 |
$input['value'] = array( 'year' => $year
|
| 8546 |
unset( $input['value']['unparsedtext'] );
|
| 8547 |
}
|
| 8548 |
$input['params'] = iCalUtilityFunctions::_setParams( $params, array( 'VALUE' => 'DATE-TIME' ));
|
| 8549 |
+
unset( $input['params']['VALUE'] );
|
| 8550 |
}
|
| 8551 |
$parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7 ); // remove default
|
| 8552 |
if( !isset( $input['value']['hour'] )) $input['value']['hour'] = 0;
|
| 8586 |
* default parameters can be set, if missing
|
| 8587 |
*
|
| 8588 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8589 |
+
* @since 2.18.10 - 2013-09-04
|
| 8590 |
* @param array $params
|
| 8591 |
* @param array $defaults
|
| 8592 |
* @return array
|
| 8594 |
public static function _setParams( $params, $defaults=FALSE ) {
|
| 8595 |
if( !is_array( $params))
|
| 8596 |
$params = array();
|
| 8597 |
+
$input = array();
|
| 8598 |
+
$params = array_change_key_case( $params, CASE_UPPER );
|
| 8599 |
foreach( $params as $paramKey => $paramValue ) {
|
| 8600 |
if( is_array( $paramValue )) {
|
| 8601 |
foreach( $paramValue as $pkey => $pValue ) {
|
| 8605 |
}
|
| 8606 |
elseif(( '"' == substr( $paramValue, 0, 1 )) && ( '"' == substr( $paramValue, -1 )))
|
| 8607 |
$paramValue = substr( $paramValue, 1, ( strlen( $paramValue ) - 2 ));
|
| 8608 |
+
if( 'VALUE' == $paramKey )
|
| 8609 |
+
$input['VALUE'] = strtoupper( $paramValue );
|
| 8610 |
else
|
| 8611 |
+
$input[$paramKey] = $paramValue;
|
| 8612 |
}
|
| 8613 |
if( is_array( $defaults )) {
|
| 8614 |
foreach( $defaults as $paramKey => $paramValue ) {
|
| 8618 |
}
|
| 8619 |
return (0 < count( $input )) ? $input : null;
|
| 8620 |
}
|
| 8621 |
+
/**
|
| 8622 |
+
* set sort arguments/parameters in component
|
| 8623 |
+
*
|
| 8624 |
+
*
|
| 8625 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8626 |
+
* @since 2.18.4 - 2013-08-18
|
| 8627 |
+
* @param object $c valendar component
|
| 8628 |
+
* @param string $sortArg, optional
|
| 8629 |
+
* @return void
|
| 8630 |
+
*/
|
| 8631 |
+
public static function _setSortArgs( & $c, $sortArg=FALSE ) {
|
| 8632 |
+
$c->srtk = array( '0', '0', '0', '0' );
|
| 8633 |
+
if( 'vtimezone' == $c->objName ) {
|
| 8634 |
+
if( FALSE === ( $c->srtk[0] = $c->getProperty( 'tzid' )))
|
| 8635 |
+
$c->srtk[0] = 0;
|
| 8636 |
+
return;
|
| 8637 |
+
}
|
| 8638 |
+
elseif( $sortArg ) {
|
| 8639 |
+
if(( 'ATTENDEE' == $sortArg ) || ( 'CATEGORIES' == $sortArg ) || ( 'CONTACT' == $sortArg ) || ( 'RELATED-TO' == $sortArg ) || ( 'RESOURCES' == $sortArg )) {
|
| 8640 |
+
$propValues = array();
|
| 8641 |
+
$c->_getProperties( $sortArg, $propValues );
|
| 8642 |
+
if( !empty( $propValues )) {
|
| 8643 |
+
$sk = array_keys( $propValues );
|
| 8644 |
+
$c->srtk[0] = $sk[0];
|
| 8645 |
+
if( 'RELATED-TO' == $sortArg )
|
| 8646 |
+
$c->srtk[0] .= $c->getProperty( 'uid' );
|
| 8647 |
+
}
|
| 8648 |
+
elseif( 'RELATED-TO' == $sortArg )
|
| 8649 |
+
$c->srtk[0] = $c->getProperty( 'uid' );
|
| 8650 |
+
}
|
| 8651 |
+
elseif( FALSE !== ( $d = $c->getProperty( $sortArg ))) {
|
| 8652 |
+
$c->srtk[0] = $d;
|
| 8653 |
+
if( 'UID' == $sortArg ) {
|
| 8654 |
+
if( FALSE !== ( $d = $c->getProperty( 'recurrence-id' ))) {
|
| 8655 |
+
$c->srtk[1] = iCalUtilityFunctions::_date2strdate( $d );
|
| 8656 |
+
if( FALSE === ( $c->srtk[2] = $c->getProperty( 'sequence' )))
|
| 8657 |
+
$c->srtk[2] = PHP_INT_MAX;
|
| 8658 |
+
}
|
| 8659 |
+
else
|
| 8660 |
+
$c->srtk[1] = $c->srtk[2] = PHP_INT_MAX;
|
| 8661 |
+
}
|
| 8662 |
+
}
|
| 8663 |
+
return;
|
| 8664 |
+
} // end elseif( $sortArg )
|
| 8665 |
+
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DTSTART' ))) {
|
| 8666 |
+
$c->srtk[0] = iCalUtilityFunctions::_strdate2date( $d[1] );
|
| 8667 |
+
unset( $c->srtk[0]['unparsedtext'] );
|
| 8668 |
+
}
|
| 8669 |
+
elseif( FALSE === ( $c->srtk[0] = $c->getProperty( 'dtstart' )))
|
| 8670 |
+
$c->srtk[0] = 0; // sortkey 0 : dtstart
|
| 8671 |
+
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DTEND' ))) {
|
| 8672 |
+
$c->srtk[1] = iCalUtilityFunctions::_strdate2date( $d[1] ); // sortkey 1 : dtend/due(/duration)
|
| 8673 |
+
unset( $c->srtk[1]['unparsedtext'] );
|
| 8674 |
+
}
|
| 8675 |
+
elseif( FALSE === ( $c->srtk[1] = $c->getProperty( 'dtend' ))) {
|
| 8676 |
+
if( FALSE !== ( $d = $c->getProperty( 'X-CURRENT-DUE' ))) {
|
| 8677 |
+
$c->srtk[1] = iCalUtilityFunctions::_strdate2date( $d[1] );
|
| 8678 |
+
unset( $c->srtk[1]['unparsedtext'] );
|
| 8679 |
+
}
|
| 8680 |
+
elseif( FALSE === ( $c->srtk[1] = $c->getProperty( 'due' )))
|
| 8681 |
+
if( FALSE === ( $c->srtk[1] = $c->getProperty( 'duration', FALSE, FALSE, TRUE )))
|
| 8682 |
+
$c->srtk[1] = 0;
|
| 8683 |
+
}
|
| 8684 |
+
if( FALSE === ( $c->srtk[2] = $c->getProperty( 'created' ))) // sortkey 2 : created/dtstamp
|
| 8685 |
+
if( FALSE === ( $c->srtk[2] = $c->getProperty( 'dtstamp' )))
|
| 8686 |
+
$c->srtk[2] = 0;
|
| 8687 |
+
if( FALSE === ( $c->srtk[3] = $c->getProperty( 'uid' ))) // sortkey 3 : uid
|
| 8688 |
+
$c->srtk[3] = 0;
|
| 8689 |
+
}
|
| 8690 |
+
/**
|
| 8691 |
+
* break lines at pos 75
|
| 8692 |
+
*
|
| 8693 |
+
* Lines of text SHOULD NOT be longer than 75 octets, excluding the line
|
| 8694 |
+
* break. Long content lines SHOULD be split into a multiple line
|
| 8695 |
+
* representations using a line "folding" technique. That is, a long
|
| 8696 |
+
* line can be split between any two characters by inserting a CRLF
|
| 8697 |
+
* immediately followed by a single linear white space character (i.e.,
|
| 8698 |
+
* SPACE, US-ASCII decimal 32 or HTAB, US-ASCII decimal 9). Any sequence
|
| 8699 |
+
* of CRLF followed immediately by a single linear white space character
|
| 8700 |
+
* is ignored (i.e., removed) when processing the content type.
|
| 8701 |
+
*
|
| 8702 |
+
* Edited 2007-08-26 by Anders Litzell, anders@litzell.se to fix bug where
|
| 8703 |
+
* the reserved expression "\n" in the arg $string could be broken up by the
|
| 8704 |
+
* folding of lines, causing ambiguity in the return string.
|
| 8705 |
+
*
|
| 8706 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8707 |
+
* @since 2.16.2 - 2012-12-18
|
| 8708 |
+
* @param string $value
|
| 8709 |
+
* @return string
|
| 8710 |
+
*/
|
| 8711 |
+
public static function _size75( $string, $nl ) {
|
| 8712 |
+
$tmp = $string;
|
| 8713 |
+
$string = '';
|
| 8714 |
+
$cCnt = $x = 0;
|
| 8715 |
+
while( TRUE ) {
|
| 8716 |
+
if( !isset( $tmp[$x] )) {
|
| 8717 |
+
$string .= $nl; // loop breakes here
|
| 8718 |
+
break;
|
| 8719 |
+
}
|
| 8720 |
+
elseif(( 74 <= $cCnt ) && ( '\\' == $tmp[$x] ) && ( 'n' == $tmp[$x+1] )) {
|
| 8721 |
+
$string .= $nl.' \n'; // don't break lines inside '\n'
|
| 8722 |
+
$x += 2;
|
| 8723 |
+
if( !isset( $tmp[$x] )) {
|
| 8724 |
+
$string .= $nl;
|
| 8725 |
+
break;
|
| 8726 |
+
}
|
| 8727 |
+
$cCnt = 3;
|
| 8728 |
+
}
|
| 8729 |
+
elseif( 75 <= $cCnt ) {
|
| 8730 |
+
$string .= $nl.' ';
|
| 8731 |
+
$cCnt = 1;
|
| 8732 |
+
}
|
| 8733 |
+
$byte = ord( $tmp[$x] );
|
| 8734 |
+
$string .= $tmp[$x];
|
| 8735 |
+
switch( TRUE ) { // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
| 8736 |
+
case(( $byte >= 0x20 ) && ( $byte <= 0x7F )): // characters U-00000000 - U-0000007F (same as ASCII)
|
| 8737 |
+
$cCnt += 1;
|
| 8738 |
+
break; // add a one byte character
|
| 8739 |
+
case(( $byte & 0xE0) == 0xC0 ): // characters U-00000080 - U-000007FF, mask 110XXXXX
|
| 8740 |
+
if( isset( $tmp[$x+1] )) {
|
| 8741 |
+
$cCnt += 1;
|
| 8742 |
+
$string .= $tmp[$x+1];
|
| 8743 |
+
$x += 1; // add a two bytes character
|
| 8744 |
+
}
|
| 8745 |
+
break;
|
| 8746 |
+
case(( $byte & 0xF0 ) == 0xE0 ): // characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
| 8747 |
+
if( isset( $tmp[$x+2] )) {
|
| 8748 |
+
$cCnt += 1;
|
| 8749 |
+
$string .= $tmp[$x+1].$tmp[$x+2];
|
| 8750 |
+
$x += 2; // add a three bytes character
|
| 8751 |
+
}
|
| 8752 |
+
break;
|
| 8753 |
+
case(( $byte & 0xF8 ) == 0xF0 ): // characters U-00010000 - U-001FFFFF, mask 11110XXX
|
| 8754 |
+
if( isset( $tmp[$x+3] )) {
|
| 8755 |
+
$cCnt += 1;
|
| 8756 |
+
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3];
|
| 8757 |
+
$x += 3; // add a four bytes character
|
| 8758 |
+
}
|
| 8759 |
+
break;
|
| 8760 |
+
case(( $byte & 0xFC ) == 0xF8 ): // characters U-00200000 - U-03FFFFFF, mask 111110XX
|
| 8761 |
+
if( isset( $tmp[$x+4] )) {
|
| 8762 |
+
$cCnt += 1;
|
| 8763 |
+
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3].$tmp[$x+4];
|
| 8764 |
+
$x += 4; // add a five bytes character
|
| 8765 |
+
}
|
| 8766 |
+
break;
|
| 8767 |
+
case(( $byte & 0xFE ) == 0xFC ): // characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
| 8768 |
+
if( isset( $tmp[$x+5] )) {
|
| 8769 |
+
$cCnt += 1;
|
| 8770 |
+
$string .= $tmp[$x+1].$tmp[$x+2].$tmp[$x+3].$tmp[$x+4].$tmp[$x+5];
|
| 8771 |
+
$x += 5; // add a six bytes character
|
| 8772 |
+
}
|
| 8773 |
+
default: // add any other byte without counting up $cCnt
|
| 8774 |
+
break;
|
| 8775 |
+
} // end switch( TRUE )
|
| 8776 |
+
$x += 1; // next 'byte' to test
|
| 8777 |
+
} // end while( TRUE ) {
|
| 8778 |
+
return $string;
|
| 8779 |
+
}
|
| 8780 |
+
/**
|
| 8781 |
+
* sort callback functions for exdate
|
| 8782 |
+
*
|
| 8783 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8784 |
+
* @since 2.16.11 - 2013-01-12
|
| 8785 |
+
* @param array $a
|
| 8786 |
+
* @param array $b
|
| 8787 |
+
* @return int
|
| 8788 |
+
*/
|
| 8789 |
+
public static function _sortExdate1( $a, $b ) {
|
| 8790 |
+
$as = sprintf( '%04d%02d%02d', $a['year'], $a['month'], $a['day'] );
|
| 8791 |
+
$as .= ( isset( $a['hour'] )) ? sprintf( '%02d%02d%02d', $a['hour'], $a['min'], $a['sec'] ) : '';
|
| 8792 |
+
$bs = sprintf( '%04d%02d%02d', $b['year'], $b['month'], $b['day'] );
|
| 8793 |
+
$bs .= ( isset( $b['hour'] )) ? sprintf( '%02d%02d%02d', $b['hour'], $b['min'], $b['sec'] ) : '';
|
| 8794 |
+
return strcmp( $as, $bs );
|
| 8795 |
+
}
|
| 8796 |
+
public static function _sortExdate2( $a, $b ) {
|
| 8797 |
+
$val = reset( $a['value'] );
|
| 8798 |
+
$as = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8799 |
+
$as .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8800 |
+
$val = reset( $b['value'] );
|
| 8801 |
+
$bs = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8802 |
+
$bs .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8803 |
+
return strcmp( $as, $bs );
|
| 8804 |
+
}
|
| 8805 |
+
/**
|
| 8806 |
+
* sort callback functions for rdate
|
| 8807 |
+
*
|
| 8808 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8809 |
+
* @since 2.16.27 - 2013-07-05
|
| 8810 |
+
* @param array $a
|
| 8811 |
+
* @param array $b
|
| 8812 |
+
* @return int
|
| 8813 |
+
*/
|
| 8814 |
+
public static function _sortRdate1( $a, $b ) {
|
| 8815 |
+
$val = isset( $a['year'] ) ? $a : $a[0];
|
| 8816 |
+
$as = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8817 |
+
$as .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8818 |
+
$val = isset( $b['year'] ) ? $b : $b[0];
|
| 8819 |
+
$bs = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8820 |
+
$bs .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8821 |
+
return strcmp( $as, $bs );
|
| 8822 |
+
}
|
| 8823 |
+
public static function _sortRdate2( $a, $b ) {
|
| 8824 |
+
$val = isset( $a['value'][0]['year'] ) ? $a['value'][0] : $a['value'][0][0];
|
| 8825 |
+
if( empty( $val ))
|
| 8826 |
+
$as = '';
|
| 8827 |
+
else {
|
| 8828 |
+
$as = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8829 |
+
$as .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8830 |
+
}
|
| 8831 |
+
$val = isset( $b['value'][0]['year'] ) ? $b['value'][0] : $b['value'][0][0];
|
| 8832 |
+
if( empty( $val ))
|
| 8833 |
+
$bs = '';
|
| 8834 |
+
else {
|
| 8835 |
+
$bs = sprintf( '%04d%02d%02d', $val['year'], $val['month'], $val['day'] );
|
| 8836 |
+
$bs .= ( isset( $val['hour'] )) ? sprintf( '%02d%02d%02d', $val['hour'], $val['min'], $val['sec'] ) : '';
|
| 8837 |
+
}
|
| 8838 |
+
return strcmp( $as, $bs );
|
| 8839 |
+
}
|
| 8840 |
+
static $parValPrefix = array ( 'MStz' => array( 'utc-', 'utc+', 'gmt-', 'gmt+' )
|
| 8841 |
+
, 'Proto3' => array( 'fax:', 'cid:', 'sms:', 'tel:', 'urn:' )
|
| 8842 |
+
, 'Proto4' => array( 'crid:', 'news:', 'pres:' )
|
| 8843 |
+
, 'Proto6' => array( 'mailto:' ));
|
| 8844 |
+
/**
|
| 8845 |
+
* separate property attributes from property value
|
| 8846 |
+
*
|
| 8847 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8848 |
+
* @since 2.18.6 - 2013-08-29
|
| 8849 |
+
* @param string $line, property content
|
| 8850 |
+
* @param array $propAttr property parameters
|
| 8851 |
+
* @return void
|
| 8852 |
+
*/
|
| 8853 |
+
public static function _splitContent( & $line, & $propAttr=null ) {
|
| 8854 |
+
$attr = array();
|
| 8855 |
+
$attrix = -1;
|
| 8856 |
+
$clen = strlen( $line );
|
| 8857 |
+
$WithinQuotes = FALSE;
|
| 8858 |
+
$cix = 0;
|
| 8859 |
+
while( FALSE !== substr( $line, $cix, 1 )) {
|
| 8860 |
+
if( ! $WithinQuotes && ( ':' == $line[$cix] ) &&
|
| 8861 |
+
( substr( $line,$cix, 3 ) != '://' ) &&
|
| 8862 |
+
( ! in_array( strtolower( substr( $line,$cix - 6, 4 )), iCalUtilityFunctions::$parValPrefix['MStz'] )) &&
|
| 8863 |
+
( ! in_array( strtolower( substr( $line,$cix - 3, 4 )), iCalUtilityFunctions::$parValPrefix['Proto3'] )) &&
|
| 8864 |
+
( ! in_array( strtolower( substr( $line,$cix - 4, 5 )), iCalUtilityFunctions::$parValPrefix['Proto4'] )) &&
|
| 8865 |
+
( ! in_array( strtolower( substr( $line,$cix - 6, 7 )), iCalUtilityFunctions::$parValPrefix['Proto6'] ))) {
|
| 8866 |
+
$attrEnd = TRUE;
|
| 8867 |
+
if(( $cix < ( $clen - 4 )) &&
|
| 8868 |
+
ctype_digit( substr( $line, $cix+1, 4 ))) { // an URI with a (4pos) portnr??
|
| 8869 |
+
for( $c2ix = $cix; 3 < $c2ix; $c2ix-- ) {
|
| 8870 |
+
if( '://' == substr( $line, $c2ix - 2, 3 )) {
|
| 8871 |
+
$attrEnd = FALSE;
|
| 8872 |
+
break; // an URI with a portnr!!
|
| 8873 |
+
}
|
| 8874 |
+
}
|
| 8875 |
+
}
|
| 8876 |
+
if( $attrEnd) {
|
| 8877 |
+
$line = substr( $line, ( $cix + 1 ));
|
| 8878 |
+
break;
|
| 8879 |
+
}
|
| 8880 |
+
$cix++;
|
| 8881 |
+
}
|
| 8882 |
+
if( '"' == $line[$cix] )
|
| 8883 |
+
$WithinQuotes = ! $WithinQuotes;
|
| 8884 |
+
if( ';' == $line[$cix] )
|
| 8885 |
+
$attr[++$attrix] = null;
|
| 8886 |
+
else
|
| 8887 |
+
$attr[$attrix] .= $line[$cix];
|
| 8888 |
+
$cix++;
|
| 8889 |
+
}
|
| 8890 |
+
/* make attributes in array format */
|
| 8891 |
+
$propAttr = array();
|
| 8892 |
+
foreach( $attr as $attribute ) {
|
| 8893 |
+
$attrsplit = explode( '=', $attribute, 2 );
|
| 8894 |
+
if( 1 < count( $attrsplit ))
|
| 8895 |
+
$propAttr[$attrsplit[0]] = $attrsplit[1];
|
| 8896 |
+
}
|
| 8897 |
+
}
|
| 8898 |
/**
|
| 8899 |
* step date, return updated date, array and timpstamp
|
| 8900 |
*
|
| 8981 |
* ensures internal date-time/date format for input date-time/date in string fromat
|
| 8982 |
*
|
| 8983 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 8984 |
+
* @since 2.16.24 - 2013-06-26
|
| 8985 |
* Modified to also return original string value by Yitzchok Lavi <icalcreator@onebigsystem.com>
|
| 8986 |
* @param array $datetime
|
| 8987 |
* @param int $parno optional, default FALSE
|
| 9003 |
$tz = 'Z';
|
| 9004 |
$datetime = trim( substr( $datetime, 0, ( $len - 1 )));
|
| 9005 |
$tzSts = TRUE;
|
|
|
|
| 9006 |
}
|
| 9007 |
if( iCalUtilityFunctions::_isOffset( substr( $datetime, -5, 5 ))) { // [+/-]NNNN offset
|
| 9008 |
$tz = substr( $datetime, -5, 5 );
|
| 9009 |
$datetime = trim( substr( $datetime, 0, ($len - 5)));
|
|
|
|
| 9010 |
}
|
| 9011 |
elseif( iCalUtilityFunctions::_isOffset( substr( $datetime, -7, 7 ))) { // [+/-]NNNNNN offset
|
| 9012 |
$tz = substr( $datetime, -7, 7 );
|
| 9013 |
$datetime = trim( substr( $datetime, 0, ($len - 7)));
|
|
|
|
| 9014 |
}
|
| 9015 |
elseif( empty( $wtz ) && ctype_digit( substr( $datetime, 0, 4 )) && ctype_digit( substr( $datetime, -2, 2 )) && iCalUtilityFunctions::_strDate2arr( $datetime )) {
|
| 9016 |
$output = $datetime;
|
| 9021 |
}
|
| 9022 |
else {
|
| 9023 |
$cx = $tx = 0; // find any trailing timezone or offset
|
| 9024 |
+
$len = strlen( $datetime );
|
| 9025 |
for( $cx = -1; $cx > ( 9 - $len ); $cx-- ) {
|
| 9026 |
$char = substr( $datetime, $cx, 1 );
|
| 9027 |
+
if(( ' ' == $char ) || ctype_digit( $char ))
|
| 9028 |
break; // if exists, tz ends here.. . ?
|
| 9029 |
else
|
| 9030 |
$tx--; // tz length counter
|
| 9032 |
if( 0 > $tx ) { // if any
|
| 9033 |
$tz = substr( $datetime, $tx );
|
| 9034 |
$datetime = trim( substr( $datetime, 0, $len + $tx ));
|
|
|
|
| 9035 |
}
|
| 9036 |
+
if(( ctype_digit( substr( $datetime, 0, 8 )) && ( 'T' == substr( $datetime, 8, 1 )) && ctype_digit( substr( $datetime, -6, 6 ))) ||
|
| 9037 |
+
( ctype_digit( substr( $datetime, 0, 14 ))))
|
|
|
|
|
|
|
| 9038 |
$tzSts = TRUE;
|
|
|
|
|
|
|
|
|
|
| 9039 |
}
|
| 9040 |
if( empty( $tz ) && !empty( $wtz ))
|
| 9041 |
$tz = $wtz;
|
| 9042 |
+
if( 3 == $parno )
|
| 9043 |
$tz = null;
|
| 9044 |
+
if( !empty( $tz )) { // tz set
|
| 9045 |
if(( 'Z' != $tz ) && ( iCalUtilityFunctions::_isOffset( $tz ))) {
|
| 9046 |
$offset = (string) iCalUtilityFunctions::_tz2offset( $tz ) * -1;
|
| 9047 |
$tz = 'UTC';
|
| 9064 |
catch( Exception $e ) {
|
| 9065 |
$datestring = date( 'Y-m-d-H-i-s', strtotime( $datetime ));
|
| 9066 |
}
|
| 9067 |
+
} // end if( !empty( $tz ))
|
| 9068 |
else
|
| 9069 |
$datestring = date( 'Y-m-d-H-i-s', strtotime( $datetime ));
|
|
|
|
| 9070 |
if( 'UTC' == $tz )
|
| 9071 |
$tz = 'Z';
|
| 9072 |
$d = explode( '-', $datestring );
|
| 9073 |
$output = array( 'year' => $d[0], 'month' => $d[1], 'day' => $d[2] );
|
| 9074 |
+
if( !$parno || ( 3 != $parno )) { // parno is set to 6 or 7
|
|
|
|
|
|
|
| 9075 |
$output['hour'] = $d[3];
|
| 9076 |
$output['min'] = $d[4];
|
| 9077 |
$output['sec'] = $d[5];
|
| 9082 |
$output['unparsedtext'] = $unparseddatetime;
|
| 9083 |
return $output;
|
| 9084 |
}
|
| 9085 |
+
/********************************************************************************/
|
| 9086 |
+
/**
|
| 9087 |
+
* special characters management output
|
| 9088 |
+
*
|
| 9089 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9090 |
+
* @since 2.16.2 - 2012-12-18
|
| 9091 |
+
* @param string $string
|
| 9092 |
+
* @param string $format
|
| 9093 |
+
* @param string $nl
|
| 9094 |
+
* @return string
|
| 9095 |
+
*/
|
| 9096 |
+
public static function _strrep( $string, $format, $nl ) {
|
| 9097 |
+
switch( $format ) {
|
| 9098 |
+
case 'xcal':
|
| 9099 |
+
$string = str_replace( '\n', $nl, $string);
|
| 9100 |
+
$string = htmlspecialchars( strip_tags( stripslashes( urldecode ( $string ))));
|
| 9101 |
+
break;
|
| 9102 |
+
default:
|
| 9103 |
+
$pos = 0;
|
| 9104 |
+
$specChars = array( 'n', 'N', 'r', ',', ';' );
|
| 9105 |
+
while( isset( $string[$pos] )) {
|
| 9106 |
+
if( FALSE === ( $pos = strpos( $string, "\\", $pos )))
|
| 9107 |
+
break;
|
| 9108 |
+
if( !in_array( substr( $string, $pos, 1 ), $specChars )) {
|
| 9109 |
+
$string = substr( $string, 0, $pos )."\\".substr( $string, ( $pos + 1 ));
|
| 9110 |
+
$pos += 1;
|
| 9111 |
+
}
|
| 9112 |
+
$pos += 1;
|
| 9113 |
+
}
|
| 9114 |
+
if( FALSE !== strpos( $string, '"' ))
|
| 9115 |
+
$string = str_replace('"', "'", $string);
|
| 9116 |
+
if( FALSE !== strpos( $string, ',' ))
|
| 9117 |
+
$string = str_replace(',', '\,', $string);
|
| 9118 |
+
if( FALSE !== strpos( $string, ';' ))
|
| 9119 |
+
$string = str_replace(';', '\;', $string);
|
| 9120 |
+
if( FALSE !== strpos( $string, "\r\n" ))
|
| 9121 |
+
$string = str_replace( "\r\n", '\n', $string);
|
| 9122 |
+
elseif( FALSE !== strpos( $string, "\r" ))
|
| 9123 |
+
$string = str_replace( "\r", '\n', $string);
|
| 9124 |
+
elseif( FALSE !== strpos( $string, "\n" ))
|
| 9125 |
+
$string = str_replace( "\n", '\n', $string);
|
| 9126 |
+
if( FALSE !== strpos( $string, '\N' ))
|
| 9127 |
+
$string = str_replace( '\N', '\n', $string);
|
| 9128 |
+
// if( FALSE !== strpos( $string, $nl ))
|
| 9129 |
+
$string = str_replace( $nl, '\n', $string);
|
| 9130 |
+
break;
|
| 9131 |
+
}
|
| 9132 |
+
return $string;
|
| 9133 |
+
}
|
| 9134 |
+
/**
|
| 9135 |
+
* special characters management input (from iCal file)
|
| 9136 |
+
*
|
| 9137 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9138 |
+
* @since 2.16.2 - 2012-12-18
|
| 9139 |
+
* @param string $string
|
| 9140 |
+
* @return string
|
| 9141 |
+
*/
|
| 9142 |
+
public static function _strunrep( $string ) {
|
| 9143 |
+
$string = str_replace( '\\\\', '\\', $string);
|
| 9144 |
+
$string = str_replace( '\,', ',', $string);
|
| 9145 |
+
$string = str_replace( '\;', ';', $string);
|
| 9146 |
+
// $string = str_replace( '\n', $nl, $string); // ??
|
| 9147 |
+
return $string;
|
| 9148 |
+
}
|
| 9149 |
/**
|
| 9150 |
* convert timestamp to date array, default UTC or adjusted for offset/timezone
|
| 9151 |
*
|
| 9162 |
$timestamp = $timestamp['timestamp'];
|
| 9163 |
}
|
| 9164 |
$tz = ( isset( $tz )) ? $tz : $wtz;
|
| 9165 |
+
$offset = 0;
|
| 9166 |
if( empty( $tz ) || ( 'Z' == $tz ) || ( 'GMT' == strtoupper( $tz )))
|
| 9167 |
$tz = 'UTC';
|
| 9168 |
elseif( iCalUtilityFunctions::_isOffset( $tz )) {
|
| 9169 |
$offset = iCalUtilityFunctions::_tz2offset( $tz );
|
| 9170 |
+
// $tz = 'UTC';
|
| 9171 |
}
|
| 9172 |
try {
|
| 9173 |
$d = new DateTime( "@$timestamp" ); // set UTC date
|
| 9174 |
+
if( 0 != $offset ) // adjust for offset
|
| 9175 |
$d->modify( $offset.' seconds' );
|
| 9176 |
elseif( 'UTC' != $tz )
|
| 9177 |
$d->setTimezone( new DateTimeZone( $tz )); // convert to local date
|
| 9187 |
$output['hour'] = $date[3];
|
| 9188 |
$output['min'] = $date[4];
|
| 9189 |
$output['sec'] = $date[5];
|
| 9190 |
+
if(( 'UTC' == $tz ) || ( 0 == $offset ))
|
| 9191 |
$output['tz'] = 'Z';
|
| 9192 |
}
|
| 9193 |
return $output;
|
| 9248 |
return TRUE;
|
| 9249 |
}
|
| 9250 |
/**
|
| 9251 |
+
* convert offset, [+/-]HHmm[ss], to seconds, used when correcting UTC to localtime or v.v.
|
| 9252 |
*
|
| 9253 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9254 |
* @since 2.11.4 - 2012-01-11
|
| 9415 |
* format iCal XML output, rfc6321, using PHP SimpleXMLElement
|
| 9416 |
*
|
| 9417 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9418 |
+
* @since 2.18.1 - 2013-08-18
|
| 9419 |
* @param object $calendar, iCalcreator vcalendar instance reference
|
| 9420 |
* @return string
|
| 9421 |
*/
|
| 9422 |
function iCal2XML( & $calendar ) {
|
| 9423 |
/** fix an SimpleXMLElement instance and create root element */
|
| 9424 |
+
$xmlstr = '<?xml version="1.0" encoding="utf-8"?><icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">';
|
| 9425 |
+
$xmlstr .= '<!-- created '.gmdate( 'Ymd\THis\Z' );
|
| 9426 |
+
$xmlstr .= ' using kigkonsult.se '.ICALCREATOR_VERSION.' iCal2XMl (rfc6321) -->';
|
| 9427 |
+
$xmlstr .= '</icalendar>';
|
| 9428 |
+
$xml = new SimpleXMLElement( $xmlstr );
|
| 9429 |
+
$vcalendar = $xml->addChild( 'vcalendar' );
|
| 9430 |
/** fix calendar properties */
|
| 9431 |
+
$properties = $vcalendar->addChild( 'properties' );
|
| 9432 |
+
$calProps = array( 'version', 'prodid', 'calscale', 'method' );
|
| 9433 |
foreach( $calProps as $calProp ) {
|
| 9434 |
if( FALSE !== ( $content = $calendar->getProperty( $calProp )))
|
| 9435 |
_addXMLchild( $properties, $calProp, 'text', $content );
|
| 9438 |
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9439 |
$langCal = $calendar->getConfig( 'language' );
|
| 9440 |
/** prepare to fix components with properties */
|
| 9441 |
+
$components = $vcalendar->addChild( 'components' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9442 |
/** fix component properties */
|
| 9443 |
+
while( FALSE !== ( $component = $calendar->getComponent())) {
|
| 9444 |
+
$compName = $component->objName;
|
| 9445 |
+
$child = $components->addChild( $compName );
|
| 9446 |
+
$properties = $child->addChild( 'properties' );
|
| 9447 |
+
$langComp = $component->getConfig( 'language' );
|
| 9448 |
+
$props = $component->getConfig( 'setPropertyNames' );
|
| 9449 |
+
foreach( $props as $prop ) {
|
| 9450 |
+
switch( strtolower( $prop )) {
|
| 9451 |
+
case 'attach': // may occur multiple times, below
|
| 9452 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9453 |
+
$type = ( isset( $content['params']['VALUE'] ) && ( 'BINARY' == $content['params']['VALUE'] )) ? 'binary' : 'uri';
|
| 9454 |
+
unset( $content['params']['VALUE'] );
|
| 9455 |
+
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9456 |
+
}
|
| 9457 |
+
break;
|
| 9458 |
+
case 'attendee':
|
| 9459 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9460 |
+
if( isset( $content['params']['CN'] ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9461 |
+
if( $langComp )
|
| 9462 |
+
$content['params']['LANGUAGE'] = $langComp;
|
| 9463 |
+
elseif( $langCal )
|
| 9464 |
+
$content['params']['LANGUAGE'] = $langCal;
|
| 9465 |
+
}
|
| 9466 |
+
_addXMLchild( $properties, $prop, 'cal-address', $content['value'], $content['params'] );
|
| 9467 |
+
}
|
| 9468 |
+
break;
|
| 9469 |
+
case 'exdate':
|
| 9470 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9471 |
+
$type = ( isset( $content['params']['VALUE'] ) && ( 'DATE' == $content['params']['VALUE'] )) ? 'date' : 'date-time';
|
| 9472 |
+
unset( $content['params']['VALUE'] );
|
| 9473 |
+
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9474 |
+
}
|
| 9475 |
+
break;
|
| 9476 |
+
case 'freebusy':
|
| 9477 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9478 |
+
if( is_array( $content ) && isset( $content['value']['fbtype'] )) {
|
| 9479 |
+
$content['params']['FBTYPE'] = $content['value']['fbtype'];
|
| 9480 |
+
unset( $content['value']['fbtype'] );
|
| 9481 |
+
}
|
| 9482 |
+
_addXMLchild( $properties, $prop, 'period', $content['value'], $content['params'] );
|
| 9483 |
+
}
|
| 9484 |
+
break;
|
| 9485 |
+
case 'request-status':
|
| 9486 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9487 |
+
if( !isset( $content['params']['LANGUAGE'] )) {
|
| 9488 |
+
if( $langComp )
|
| 9489 |
+
$content['params']['LANGUAGE'] = $langComp;
|
| 9490 |
+
elseif( $langCal )
|
| 9491 |
+
$content['params']['LANGUAGE'] = $langCal;
|
| 9492 |
+
}
|
| 9493 |
+
_addXMLchild( $properties, $prop, 'rstatus', $content['value'], $content['params'] );
|
| 9494 |
+
}
|
| 9495 |
+
break;
|
| 9496 |
+
case 'rdate':
|
| 9497 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9498 |
+
$type = 'date-time';
|
| 9499 |
+
if( isset( $content['params']['VALUE'] )) {
|
| 9500 |
+
if( 'DATE' == $content['params']['VALUE'] )
|
| 9501 |
+
$type = 'date';
|
| 9502 |
+
elseif( 'PERIOD' == $content['params']['VALUE'] )
|
| 9503 |
+
$type = 'period';
|
| 9504 |
+
}
|
| 9505 |
+
unset( $content['params']['VALUE'] );
|
| 9506 |
+
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9507 |
+
}
|
| 9508 |
+
break;
|
| 9509 |
+
case 'categories':
|
| 9510 |
+
case 'comment':
|
| 9511 |
+
case 'contact':
|
| 9512 |
+
case 'description':
|
| 9513 |
+
case 'related-to':
|
| 9514 |
+
case 'resources':
|
| 9515 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9516 |
+
if(( 'related-to' != $prop ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9517 |
+
if( $langComp )
|
| 9518 |
+
$content['params']['LANGUAGE'] = $langComp;
|
| 9519 |
+
elseif( $langCal )
|
| 9520 |
+
$content['params']['LANGUAGE'] = $langCal;
|
| 9521 |
+
}
|
| 9522 |
+
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9523 |
+
}
|
| 9524 |
+
break;
|
| 9525 |
+
case 'x-prop':
|
| 9526 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9527 |
+
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9528 |
+
break;
|
| 9529 |
+
case 'created': // single occurence below, if set
|
| 9530 |
+
case 'completed':
|
| 9531 |
+
case 'dtstamp':
|
| 9532 |
+
case 'last-modified':
|
| 9533 |
+
$utcDate = TRUE;
|
| 9534 |
+
case 'dtstart':
|
| 9535 |
+
case 'dtend':
|
| 9536 |
+
case 'due':
|
| 9537 |
+
case 'recurrence-id':
|
| 9538 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9539 |
+
$type = ( isset( $content['params']['VALUE'] ) && ( 'DATE' == $content['params']['VALUE'] )) ? 'date' : 'date-time';
|
| 9540 |
+
unset( $content['params']['VALUE'] );
|
| 9541 |
+
if(( isset( $content['params']['TZID'] ) && empty( $content['params']['TZID'] )) || @is_null( $content['params']['TZID'] ))
|
| 9542 |
+
unset( $content['params']['TZID'] );
|
| 9543 |
+
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9544 |
+
}
|
| 9545 |
+
unset( $utcDate );
|
| 9546 |
+
break;
|
| 9547 |
+
case 'duration':
|
| 9548 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9549 |
+
_addXMLchild( $properties, $prop, 'duration', $content['value'], $content['params'] );
|
| 9550 |
+
break;
|
| 9551 |
+
case 'exrule':
|
| 9552 |
+
case 'rrule':
|
| 9553 |
+
while( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9554 |
+
_addXMLchild( $properties, $prop, 'recur', $content['value'], $content['params'] );
|
| 9555 |
+
break;
|
| 9556 |
+
case 'class':
|
| 9557 |
+
case 'location':
|
| 9558 |
+
case 'status':
|
| 9559 |
+
case 'summary':
|
| 9560 |
+
case 'transp':
|
| 9561 |
+
case 'tzid':
|
| 9562 |
+
case 'uid':
|
| 9563 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9564 |
+
if((( 'location' == $prop ) || ( 'summary' == $prop )) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9565 |
+
if( $langComp )
|
| 9566 |
+
$content['params']['LANGUAGE'] = $langComp;
|
| 9567 |
+
elseif( $langCal )
|
| 9568 |
+
$content['params']['LANGUAGE'] = $langCal;
|
| 9569 |
+
}
|
| 9570 |
+
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9571 |
+
}
|
| 9572 |
+
break;
|
| 9573 |
+
case 'geo':
|
| 9574 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9575 |
+
_addXMLchild( $properties, $prop, 'geo', $content['value'], $content['params'] );
|
| 9576 |
+
break;
|
| 9577 |
+
case 'organizer':
|
| 9578 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE ))) {
|
| 9579 |
+
if( isset( $content['params']['CN'] ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9580 |
+
if( $langComp )
|
| 9581 |
+
$content['params']['LANGUAGE'] = $langComp;
|
| 9582 |
+
elseif( $langCal )
|
| 9583 |
+
$content['params']['LANGUAGE'] = $langCal;
|
| 9584 |
+
}
|
| 9585 |
+
_addXMLchild( $properties, $prop, 'cal-address', $content['value'], $content['params'] );
|
| 9586 |
+
}
|
| 9587 |
+
break;
|
| 9588 |
+
case 'percent-complete':
|
| 9589 |
+
case 'priority':
|
| 9590 |
+
case 'sequence':
|
| 9591 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9592 |
+
_addXMLchild( $properties, $prop, 'integer', $content['value'], $content['params'] );
|
| 9593 |
+
break;
|
| 9594 |
+
case 'tzurl':
|
| 9595 |
+
case 'url':
|
| 9596 |
+
if( FALSE !== ( $content = $component->getProperty( $prop, FALSE, TRUE )))
|
| 9597 |
+
_addXMLchild( $properties, $prop, 'uri', $content['value'], $content['params'] );
|
| 9598 |
+
break;
|
| 9599 |
+
} // end switch( $prop )
|
| 9600 |
+
} // end foreach( $props as $prop )
|
| 9601 |
+
/** fix subComponent properties, if any */
|
| 9602 |
+
while( FALSE !== ( $subcomp = $component->getComponent())) {
|
| 9603 |
+
$subCompName = $subcomp->objName;
|
| 9604 |
+
$child2 = $child->addChild( $subCompName );
|
| 9605 |
+
$properties = $child2->addChild( 'properties' );
|
| 9606 |
+
$langComp = $subcomp->getConfig( 'language' );
|
| 9607 |
+
$subCompProps = $subcomp->getConfig( 'setPropertyNames' );
|
| 9608 |
+
foreach( $subCompProps as $prop ) {
|
| 9609 |
switch( strtolower( $prop )) {
|
| 9610 |
case 'attach': // may occur multiple times, below
|
| 9611 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9612 |
$type = ( isset( $content['params']['VALUE'] ) && ( 'BINARY' == $content['params']['VALUE'] )) ? 'binary' : 'uri';
|
| 9613 |
unset( $content['params']['VALUE'] );
|
| 9614 |
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9615 |
}
|
| 9616 |
break;
|
| 9617 |
case 'attendee':
|
| 9618 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9619 |
if( isset( $content['params']['CN'] ) && !isset( $content['params']['LANGUAGE'] )) {
|
| 9620 |
if( $langComp )
|
| 9621 |
$content['params']['LANGUAGE'] = $langComp;
|
| 9625 |
_addXMLchild( $properties, $prop, 'cal-address', $content['value'], $content['params'] );
|
| 9626 |
}
|
| 9627 |
break;
|
| 9628 |
+
case 'comment':
|
| 9629 |
+
case 'tzname':
|
| 9630 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9631 |
if( !isset( $content['params']['LANGUAGE'] )) {
|
| 9632 |
if( $langComp )
|
| 9633 |
$content['params']['LANGUAGE'] = $langComp;
|
| 9634 |
elseif( $langCal )
|
| 9635 |
$content['params']['LANGUAGE'] = $langCal;
|
| 9636 |
}
|
| 9637 |
+
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9638 |
}
|
| 9639 |
break;
|
| 9640 |
case 'rdate':
|
| 9641 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9642 |
$type = 'date-time';
|
| 9643 |
if( isset( $content['params']['VALUE'] )) {
|
| 9644 |
if( 'DATE' == $content['params']['VALUE'] )
|
| 9650 |
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9651 |
}
|
| 9652 |
break;
|
| 9653 |
+
case 'x-prop':
|
| 9654 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9655 |
+
_addXMLchild( $properties, $content[0], 'unknown', $content[1]['value'], $content[1]['params'] );
|
| 9656 |
+
break;
|
| 9657 |
+
case 'action': // single occurence below, if set
|
| 9658 |
case 'description':
|
| 9659 |
+
case 'summary':
|
| 9660 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9661 |
+
if(( 'action' != $prop ) && !isset( $content['params']['LANGUAGE'] )) {
|
|
|
|
| 9662 |
if( $langComp )
|
| 9663 |
$content['params']['LANGUAGE'] = $langComp;
|
| 9664 |
elseif( $langCal )
|
| 9667 |
_addXMLchild( $properties, $prop, 'text', $content['value'], $content['params'] );
|
| 9668 |
}
|
| 9669 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9670 |
case 'dtstart':
|
| 9671 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9672 |
+
unset( $content['value']['tz'], $content['params']['VALUE'] ); // always local time
|
| 9673 |
+
_addXMLchild( $properties, $prop, 'date-time', $content['value'], $content['params'] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9674 |
}
|
|
|
|
| 9675 |
break;
|
| 9676 |
case 'duration':
|
| 9677 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
|
|
|
|
|
|
| 9678 |
_addXMLchild( $properties, $prop, 'duration', $content['value'], $content['params'] );
|
|
|
|
| 9679 |
break;
|
| 9680 |
+
case 'repeat':
|
| 9681 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9682 |
+
_addXMLchild( $properties, $prop, 'integer', $content['value'], $content['params'] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9683 |
break;
|
| 9684 |
+
case 'trigger':
|
| 9685 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE ))) {
|
| 9686 |
+
if( isset( $content['value']['year'] ) &&
|
| 9687 |
+
isset( $content['value']['month'] ) &&
|
| 9688 |
+
isset( $content['value']['day'] ))
|
| 9689 |
+
$type = 'date-time';
|
| 9690 |
+
else {
|
| 9691 |
+
$type = 'duration';
|
| 9692 |
+
if( !isset( $content['value']['relatedStart'] ) || ( TRUE !== $content['value']['relatedStart'] ))
|
| 9693 |
+
$content['params']['RELATED'] = 'END';
|
| 9694 |
}
|
| 9695 |
+
_addXMLchild( $properties, $prop, $type, $content['value'], $content['params'] );
|
| 9696 |
}
|
| 9697 |
break;
|
| 9698 |
+
case 'tzoffsetto':
|
| 9699 |
+
case 'tzoffsetfrom':
|
| 9700 |
+
if( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9701 |
+
_addXMLchild( $properties, $prop, 'utc-offset', $content['value'], $content['params'] );
|
|
|
|
| 9702 |
break;
|
| 9703 |
+
case 'rrule':
|
| 9704 |
+
while( FALSE !== ( $content = $subcomp->getProperty( $prop, FALSE, TRUE )))
|
| 9705 |
+
_addXMLchild( $properties, $prop, 'recur', $content['value'], $content['params'] );
|
|
|
|
| 9706 |
break;
|
| 9707 |
+
} // switch( $prop )
|
| 9708 |
+
} // end foreach( $subCompProps as $prop )
|
| 9709 |
+
} // end while( FALSE !== ( $subcomp = $component->getComponent()))
|
| 9710 |
+
} // end while( FALSE !== ( $component = $calendar->getComponent()))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9711 |
return $xml->asXML();
|
| 9712 |
}
|
| 9713 |
/**
|
| 9714 |
* Add children to a SimpleXMLelement
|
| 9715 |
*
|
| 9716 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9717 |
+
* @since 2.18.10 - 2013-09-04
|
| 9718 |
* @param object $parent, reference to a SimpleXMLelement node
|
| 9719 |
* @param string $name, new element node name
|
| 9720 |
* @param string $type, content type, subelement(-s) name
|
| 9726 |
/** create new child node */
|
| 9727 |
$name = strtolower( $name );
|
| 9728 |
$child = $parent->addChild( $name );
|
|
|
|
|
|
|
| 9729 |
if( !empty( $params )) {
|
| 9730 |
$parameters = $child->addChild( 'parameters' );
|
| 9731 |
foreach( $params as $param => $parVal ) {
|
| 9732 |
+
if( 'VALUE' == $param )
|
| 9733 |
+
continue;
|
| 9734 |
$param = strtolower( $param );
|
| 9735 |
if( 'x-' == substr( $param, 0, 2 )) {
|
| 9736 |
$p1 = $parameters->addChild( $param );
|
| 9756 |
$p2 = $p1->addChild( $ptype, htmlspecialchars( $parVal ));
|
| 9757 |
}
|
| 9758 |
}
|
| 9759 |
+
} // end if( !empty( $params ))
|
| 9760 |
+
if(( empty( $content ) && ( '0' != $content )) || ( !is_array( $content) && ( '-' != substr( $content, 0, 1 ) && ( 0 > $content ))))
|
| 9761 |
return;
|
| 9762 |
/** store content */
|
| 9763 |
switch( $type ) {
|
| 9795 |
$v = $child->addChild( $type, $output.iCalUtilityFunctions::_duration2str( $content ) );
|
| 9796 |
break;
|
| 9797 |
case 'geo':
|
| 9798 |
+
if( !empty( $content )) {
|
| 9799 |
+
$v1 = $child->addChild( 'latitude', iCalUtilityFunctions::_geo2str2( $content['latitude'], iCalUtilityFunctions::$geoLatFmt ));
|
| 9800 |
+
$v1 = $child->addChild( 'longitude', iCalUtilityFunctions::_geo2str2( $content['longitude'], iCalUtilityFunctions::$geoLongFmt ));
|
| 9801 |
+
}
|
| 9802 |
break;
|
| 9803 |
case 'integer':
|
| 9804 |
+
$v = $child->addChild( $type, (string) $content );
|
| 9805 |
break;
|
| 9806 |
case 'period':
|
| 9807 |
if( !is_array( $content ))
|
| 9823 |
}
|
| 9824 |
break;
|
| 9825 |
case 'recur':
|
| 9826 |
+
$content = array_change_key_case( $content );
|
| 9827 |
foreach( $content as $rulelabel => $rulevalue ) {
|
|
|
|
| 9828 |
switch( $rulelabel ) {
|
| 9829 |
case 'until':
|
| 9830 |
if( isset( $rulevalue['hour'] ))
|
| 9915 |
break;
|
| 9916 |
}
|
| 9917 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9918 |
/**
|
| 9919 |
* parse xml file into iCalcreator instance
|
| 9920 |
*
|
| 9921 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9922 |
+
* @since 2.16.22 - 2013-06-18
|
| 9923 |
* @param string $xmlfile
|
| 9924 |
+
* @param array $iCalcfg iCalcreator config array (opt)
|
| 9925 |
* @return mixediCalcreator instance or FALSE on error
|
| 9926 |
*/
|
| 9927 |
+
function XMLfile2iCal( $xmlfile, $iCalcfg=array()) {
|
| 9928 |
+
if( FALSE === ( $xmlstr = file_get_contents( $xmlfile )))
|
| 9929 |
+
return FALSE;
|
| 9930 |
+
return xml2iCal( $xmlstr, $iCalcfg );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9931 |
}
|
| 9932 |
/**
|
| 9933 |
+
* parse xml string into iCalcreator instance, alias of XML2iCal
|
| 9934 |
*
|
| 9935 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9936 |
+
* @since 2.16.22 - 2013-06-18
|
| 9937 |
+
* @param string $xmlstr
|
| 9938 |
* @param array $iCalcfg iCalcreator config array (opt)
|
| 9939 |
* @return mixed iCalcreator instance or FALSE on error
|
| 9940 |
*/
|
| 9941 |
+
function XMLstr2iCal( $xmlstr, $iCalcfg=array()) {
|
| 9942 |
+
return XML2iCal( $xmlstr, $iCalcfg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9943 |
}
|
| 9944 |
/**
|
| 9945 |
+
* parse xml string into iCalcreator instance
|
| 9946 |
*
|
| 9947 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9948 |
+
* @since 2.16.22 - 2013-06-20
|
| 9949 |
+
* @param string $xmlstr
|
| 9950 |
+
* @param array $iCalcfg iCalcreator config array (opt)
|
| 9951 |
+
* @return mixed iCalcreator instance or FALSE on error
|
| 9952 |
*/
|
| 9953 |
+
function XML2iCal( $xmlstr, $iCalcfg=array()) {
|
| 9954 |
+
$xmlstr = str_replace( array( "\r\n", "\n\r", "\n", "\r" ), '', $xmlstr );
|
| 9955 |
+
$xml = XMLgetTagContent1( $xmlstr, 'vcalendar', $endIx );
|
| 9956 |
+
$iCal = new vcalendar( $iCalcfg );
|
| 9957 |
+
XMLgetComps( $iCal, $xmlstr );
|
| 9958 |
+
unset( $xmlstr );
|
| 9959 |
+
return $iCal;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9960 |
}
|
| 9961 |
/**
|
| 9962 |
+
* parse XML string into iCalcreator components
|
| 9963 |
*
|
| 9964 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9965 |
+
* @since 2.16.22 - 2013-06-20
|
| 9966 |
+
* @param object $iCal, iCalcreator vcalendar or component object instance
|
| 9967 |
+
* @param string $xml
|
| 9968 |
+
* @return bool
|
| 9969 |
*/
|
| 9970 |
+
function XMLgetComps( $iCal, $xml ) {
|
| 9971 |
+
static $comps = array( 'vtimezone', 'standard', 'daylight', 'vevent', 'vtodo', 'vjournal', 'vfreebusy', 'valarm' );
|
| 9972 |
+
$sx = 0;
|
| 9973 |
+
while(( FALSE !== substr( $xml, ( $sx + 11 ), 1 )) &&
|
| 9974 |
+
( '<properties>' != substr( $xml, $sx, 12 )) && ( '<components>' != substr( $xml, $sx, 12 )))
|
| 9975 |
+
$sx += 1;
|
| 9976 |
+
if( FALSE === substr( $xml, ( $sx + 11 ), 1 ))
|
| 9977 |
+
return FALSE;
|
| 9978 |
+
if( '<properties>' == substr( $xml, $sx, 12 )) {
|
| 9979 |
+
$xml2 = XMLgetTagContent1( $xml, 'properties', $endIx );
|
| 9980 |
+
XMLgetProps( $iCal, $xml2 );
|
| 9981 |
+
$xml = substr( $xml, $endIx );
|
| 9982 |
+
}
|
| 9983 |
+
if( '<components>' == substr( $xml, 0, 12 ))
|
| 9984 |
+
$xml = XMLgetTagContent1( $xml, 'components', $endIx );
|
| 9985 |
+
while( ! empty( $xml )) {
|
| 9986 |
+
$xml2 = XMLgetTagContent2( $xml, $tagName, $endIx );
|
| 9987 |
+
if( in_array( strtolower( $tagName ), $comps ) && ( FALSE !== ( $subComp = $iCal->newComponent( $tagName ))))
|
| 9988 |
+
XMLgetComps( $subComp, $xml2 );
|
| 9989 |
+
$xml = substr( $xml, $endIx);
|
| 9990 |
+
}
|
| 9991 |
+
unset( $xml );
|
| 9992 |
+
return $iCal;
|
| 9993 |
}
|
| 9994 |
/**
|
| 9995 |
+
* parse XML into iCalcreator properties
|
| 9996 |
*
|
| 9997 |
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 9998 |
+
* @since 2.16.21 - 2013-06-23
|
| 9999 |
+
* @param array $iCal iCalcreator calendar/component instance
|
| 10000 |
+
* @param string $xml
|
| 10001 |
* @return void
|
| 10002 |
*/
|
| 10003 |
+
function XMLgetProps( $iCal, $xml) {
|
| 10004 |
+
while( ! empty( $xml )) {
|
| 10005 |
+
$xml2 = XMLgetTagContent2( $xml, $propName, $endIx );
|
| 10006 |
+
$propName = strtoupper( $propName );
|
| 10007 |
+
if( empty( $xml2 ) && ( '0' != $xml2 )) {
|
| 10008 |
+
$iCal->setProperty( $propName );
|
| 10009 |
+
$xml = substr( $xml, $endIx);
|
|
|
|
| 10010 |
continue;
|
| 10011 |
}
|
| 10012 |
+
$params = array();
|
| 10013 |
+
if( '<parameters/>' == substr( $xml2, 0, 13 ))
|
| 10014 |
+
$xml2 = substr( $xml2, 13 );
|
| 10015 |
+
elseif( '<parameters>' == substr( $xml2, 0, 12 )) {
|
| 10016 |
+
$xml3 = XMLgetTagContent1( $xml2, 'parameters', $endIx2 );
|
| 10017 |
+
while( ! empty( $xml3 )) {
|
| 10018 |
+
$xml4 = XMLgetTagContent2( $xml3, $paramKey, $endIx3 );
|
| 10019 |
+
$pType = FALSE; // skip parameter valueType
|
| 10020 |
+
$paramKey = strtoupper( $paramKey );
|
| 10021 |
+
if( in_array( $paramKey, array( 'DELEGATED-FROM', 'DELEGATED-TO', 'MEMBER' ))) {
|
| 10022 |
+
while( ! empty( $xml4 )) {
|
| 10023 |
+
if( ! isset( $params[$paramKey] ))
|
| 10024 |
+
$params[$paramKey] = array( XMLgetTagContent1( $xml4, 'cal-address', $endIx4 ));
|
| 10025 |
+
else
|
| 10026 |
+
$params[$paramKey][] = XMLgetTagContent1( $xml4, 'cal-address', $endIx4 );
|
| 10027 |
+
$xml4 = substr( $xml4, $endIx4 );
|
| 10028 |
+
}
|
| 10029 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10030 |
else {
|
| 10031 |
+
if( ! isset( $params[$paramKey] ))
|
| 10032 |
+
$params[$paramKey] = html_entity_decode( XMLgetTagContent2( $xml4, $pType, $endIx4 ));
|
| 10033 |
+
else
|
| 10034 |
+
$params[$paramKey] .= ','.html_entity_decode( XMLgetTagContent2( $xml4, $pType, $endIx4 ));
|
| 10035 |
}
|
| 10036 |
+
$xml3 = substr( $xml3, $endIx3 );
|
| 10037 |
+
}
|
| 10038 |
+
$xml2 = substr( $xml2, $endIx2 );
|
| 10039 |
+
} // if( '<parameters>' == substr( $xml2, 0, 12 ))
|
| 10040 |
+
$valueType = FALSE;
|
| 10041 |
+
$value = ( ! empty( $xml2 ) || ( '0' == $xml2 )) ? XMLgetTagContent2( $xml2, $valueType, $endIx3 ) : '';
|
| 10042 |
+
switch( $propName ) {
|
| 10043 |
+
case 'CATEGORIES':
|
| 10044 |
+
case 'RESOURCES':
|
| 10045 |
+
$tValue = array();
|
| 10046 |
+
while( ! empty( $xml2 )) {
|
| 10047 |
+
$tValue[] = html_entity_decode( XMLgetTagContent2( $xml2, $valueType, $endIx4 ));
|
| 10048 |
+
$xml2 = substr( $xml2, $endIx4 );
|
| 10049 |
+
}
|
| 10050 |
+
$value = $tValue;
|
| 10051 |
break;
|
| 10052 |
+
case 'EXDATE': // multiple single-date(-times) may exist
|
| 10053 |
+
case 'RDATE':
|
| 10054 |
+
if( 'period' != $valueType ) {
|
| 10055 |
+
if( 'date' == $valueType )
|
| 10056 |
+
$params['VALUE'] = 'DATE';
|
| 10057 |
+
$t = array();
|
| 10058 |
+
while( ! empty( $xml2 ) && ( '<date' == substr( $xml2, 0, 5 ))) {
|
| 10059 |
+
$t[] = XMLgetTagContent2( $xml2, $pType, $endIx4 );
|
| 10060 |
+
$xml2 = substr( $xml2, $endIx4 );
|
| 10061 |
+
}
|
| 10062 |
+
$value = $t;
|
| 10063 |
+
break;
|
| 10064 |
+
}
|
| 10065 |
+
case 'FREEBUSY':
|
| 10066 |
+
if( 'RDATE' == $propName )
|
| 10067 |
+
$params['VALUE'] = 'PERIOD';
|
| 10068 |
+
$value = array();
|
| 10069 |
+
while( ! empty( $xml2 ) && ( '<period>' == substr( $xml2, 0, 8 ))) {
|
| 10070 |
+
$xml3 = XMLgetTagContent1( $xml2, 'period', $endIx4 ); // period
|
| 10071 |
+
$t = array();
|
| 10072 |
+
while( ! empty( $xml3 )) {
|
| 10073 |
+
$t[] = XMLgetTagContent2( $xml3, $pType, $endIx5 ); // start - end/duration
|
| 10074 |
+
$xml3 = substr( $xml3, $endIx5 );
|
| 10075 |
+
}
|
| 10076 |
+
$value[] = $t;
|
| 10077 |
+
$xml2 = substr( $xml2, $endIx4 );
|
| 10078 |
+
}
|
| 10079 |
break;
|
| 10080 |
+
case 'TZOFFSETTO':
|
| 10081 |
+
case 'TZOFFSETFROM':
|
| 10082 |
+
$value = str_replace( ':', '', $value );
|
| 10083 |
break;
|
| 10084 |
+
case 'GEO':
|
| 10085 |
+
$tValue = array( 'latitude' => $value );
|
| 10086 |
+
$tValue['longitude'] = XMLgetTagContent1( substr( $xml2, $endIx3 ), 'longitude', $endIx3 );
|
| 10087 |
+
$value = $tValue;
|
| 10088 |
break;
|
| 10089 |
+
case 'EXRULE':
|
| 10090 |
+
case 'RRULE':
|
| 10091 |
+
$tValue = array( $valueType => $value );
|
| 10092 |
+
$xml2 = substr( $xml2, $endIx3 );
|
| 10093 |
+
$valueType = FALSE;
|
| 10094 |
+
while( ! empty( $xml2 )) {
|
| 10095 |
+
$t = XMLgetTagContent2( $xml2, $valueType, $endIx4 );
|
| 10096 |
+
switch( $valueType ) {
|
| 10097 |
+
case 'freq':
|
| 10098 |
+
case 'count':
|
| 10099 |
+
case 'until':
|
| 10100 |
+
case 'interval':
|
| 10101 |
+
case 'wkst':
|
| 10102 |
+
$tValue[$valueType] = $t;
|
| 10103 |
+
break;
|
| 10104 |
+
case 'byday':
|
| 10105 |
+
if( 2 == strlen( $t ))
|
| 10106 |
+
$tValue[$valueType][] = array( 'DAY' => $t );
|
| 10107 |
+
else {
|
| 10108 |
+
$day = substr( $t, -2 );
|
| 10109 |
+
$key = substr( $t, 0, ( strlen( $t ) - 2 ));
|
| 10110 |
+
$tValue[$valueType][] = array( $key, 'DAY' => $day );
|
| 10111 |
+
}
|
| 10112 |
+
break;
|
| 10113 |
+
default:
|
| 10114 |
+
$tValue[$valueType][] = $t;
|
| 10115 |
+
}
|
| 10116 |
+
$xml2 = substr( $xml2, $endIx4 );
|
| 10117 |
+
}
|
| 10118 |
+
$value = $tValue;
|
| 10119 |
break;
|
| 10120 |
+
case 'REQUEST-STATUS':
|
| 10121 |
+
$tValue = array();
|
| 10122 |
+
while( ! empty( $xml2 )) {
|
| 10123 |
+
$t = html_entity_decode( XMLgetTagContent2( $xml2, $valueType, $endIx4 ));
|
| 10124 |
+
$tValue[$valueType] = $t;
|
| 10125 |
+
$xml2 = substr( $xml2, $endIx4 );
|
| 10126 |
+
}
|
| 10127 |
+
if( ! empty( $tValue ))
|
| 10128 |
+
$value = $tValue;
|
| 10129 |
+
else
|
| 10130 |
+
$value = array( 'code' => null, 'description' => null );
|
| 10131 |
break;
|
|
|
|
| 10132 |
default:
|
| 10133 |
+
switch( $valueType ) {
|
| 10134 |
+
case 'binary': $params['VALUE'] = 'BINARY'; break;
|
| 10135 |
+
case 'date': $params['VALUE'] = 'DATE'; break;
|
| 10136 |
+
case 'date-time': $params['VALUE'] = 'DATE-TIME'; break;
|
| 10137 |
+
case 'text':
|
| 10138 |
+
case 'unknown': $value = html_entity_decode( $value ); break;
|
| 10139 |
+
}
|
| 10140 |
+
break;
|
| 10141 |
+
} // end switch( $propName )
|
| 10142 |
+
if( 'FREEBUSY' == $propName ) {
|
| 10143 |
+
$fbtype = $params['FBTYPE'];
|
| 10144 |
+
unset( $params['FBTYPE'] );
|
| 10145 |
+
$iCal->setProperty( $propName, $fbtype, $value, $params );
|
| 10146 |
+
}
|
| 10147 |
+
elseif( 'GEO' == $propName )
|
| 10148 |
+
$iCal->setProperty( $propName, $value['latitude'], $value['longitude'], $params );
|
| 10149 |
+
elseif( 'REQUEST-STATUS' == $propName ) {
|
| 10150 |
+
if( !isset( $value['data'] ))
|
| 10151 |
+
$value['data'] = FALSE;
|
| 10152 |
+
$iCal->setProperty( $propName, $value['code'], $value['description'], $value['data'], $params );
|
| 10153 |
+
}
|
| 10154 |
+
else {
|
| 10155 |
+
if( empty( $value ) && ( is_array( $value ) || ( '0' > $value )))
|
| 10156 |
+
$value = '';
|
| 10157 |
+
$iCal->setProperty( $propName, $value, $params );
|
| 10158 |
+
}
|
| 10159 |
+
$xml = substr( $xml, $endIx);
|
| 10160 |
+
} // end while( ! empty( $xml ))
|
| 10161 |
+
}
|
| 10162 |
+
/**
|
| 10163 |
+
* fetch a specific XML tag content
|
| 10164 |
+
*
|
| 10165 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 10166 |
+
* @since 2.16.22 - 2013-06-20
|
| 10167 |
+
* @param string $xml
|
| 10168 |
+
* @param string $tagName
|
| 10169 |
+
* @param int $endIx
|
| 10170 |
+
* @return mixed
|
| 10171 |
+
*/
|
| 10172 |
+
function XMLgetTagContent1( $xml, $tagName, & $endIx=0 ) {
|
| 10173 |
+
$strlen = strlen( $tagName );
|
| 10174 |
+
$sx1 = 0;
|
| 10175 |
+
while( FALSE !== substr( $xml, $sx1, 1 )) {
|
| 10176 |
+
if(( FALSE !== substr( $xml, ( $sx1 + $strlen + 1 ), 1 )) &&
|
| 10177 |
+
( strtolower( "<$tagName>" ) == strtolower( substr( $xml, $sx1, ( $strlen + 2 )))))
|
| 10178 |
+
break;
|
| 10179 |
+
if(( FALSE !== substr( $xml, ( $sx1 + $strlen + 3 ), 1 )) &&
|
| 10180 |
+
( strtolower( "<$tagName />" ) == strtolower( substr( $xml, $sx1, ( $strlen + 4 ))))) { // empty tag
|
| 10181 |
+
$endIx = $strlen + 5;
|
| 10182 |
+
return '';
|
| 10183 |
+
}
|
| 10184 |
+
if(( FALSE !== substr( $xml, ( $sx1 + $strlen + 2 ), 1 )) &&
|
| 10185 |
+
( strtolower( "<$tagName/>" ) == strtolower( substr( $xml, $sx1, ( $strlen + 3 ))))) { // empty tag
|
| 10186 |
+
$endIx = $strlen + 4;
|
| 10187 |
+
return '';
|
| 10188 |
+
}
|
| 10189 |
+
$sx1 += 1;
|
| 10190 |
}
|
| 10191 |
+
if( FALSE === substr( $xml, $sx1, 1 )) {
|
| 10192 |
+
$endIx = ( empty( $sx )) ? 0 : $sx - 1;
|
| 10193 |
+
return '';
|
| 10194 |
+
}
|
| 10195 |
+
if( FALSE === ( $pos = stripos( $xml, "</$tagName>" ))) { // missing end tag??
|
| 10196 |
+
$endIx = strlen( $xml ) + 1;
|
| 10197 |
+
return '';
|
| 10198 |
+
}
|
| 10199 |
+
$endIx = $pos + $strlen + 3;
|
| 10200 |
+
return substr( $xml, ( $sx1 + $strlen + 2 ), ( $pos - $sx1 - 2 - $strlen ));
|
| 10201 |
+
}
|
| 10202 |
+
/**
|
| 10203 |
+
* fetch next (unknown) XML tagname AND content
|
| 10204 |
+
*
|
| 10205 |
+
* @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
|
| 10206 |
+
* @since 2.16.22 - 2013-06-20
|
| 10207 |
+
* @param string $xml
|
| 10208 |
+
* @param string $tagName
|
| 10209 |
+
* @param int $endIx
|
| 10210 |
+
* @return mixed
|
| 10211 |
+
*/
|
| 10212 |
+
function XMLgetTagContent2( $xml, & $tagName, & $endIx ) {
|
| 10213 |
+
$endIx = strlen( $xml ) + 1; // just in case.. .
|
| 10214 |
+
$sx1 = 0;
|
| 10215 |
+
while( FALSE !== substr( $xml, $sx1, 1 )) {
|
| 10216 |
+
if( '<' == substr( $xml, $sx1, 1 )) {
|
| 10217 |
+
if(( FALSE !== substr( $xml, ( $sx1 + 3 ), 1 )) && ( '<!--' == substr( $xml, $sx1, 4 ))) // skip comment
|
| 10218 |
+
$sx1 += 1;
|
| 10219 |
else
|
| 10220 |
+
break; // tagname start here
|
| 10221 |
}
|
| 10222 |
+
else
|
| 10223 |
+
$sx1 += 1;
|
| 10224 |
}
|
| 10225 |
+
$sx2 = $sx1;
|
| 10226 |
+
while( FALSE !== substr( $xml, $sx2 )) {
|
| 10227 |
+
if(( FALSE !== substr( $xml, ( $sx2 + 1 ), 1 )) && ( '/>' == substr( $xml, $sx2, 2 ))) { // empty tag
|
| 10228 |
+
$tagName = trim( substr( $xml, ( $sx1 + 1 ), ( $sx2 - $sx1 - 1 )));
|
| 10229 |
+
$endIx = $sx2 + 2;
|
| 10230 |
+
return '';
|
| 10231 |
+
}
|
| 10232 |
+
if( '>' == substr( $xml, $sx2, 1 )) // tagname ends here
|
| 10233 |
+
break;
|
| 10234 |
+
$sx2 += 1;
|
| 10235 |
+
}
|
| 10236 |
+
$tagName = substr( $xml, ( $sx1 + 1 ), ( $sx2 - $sx1 - 1 ));
|
| 10237 |
+
$endIx = $sx2 + 1;
|
| 10238 |
+
if( FALSE === substr( $xml, $sx2, 1 )) {
|
| 10239 |
+
return '';
|
| 10240 |
+
}
|
| 10241 |
+
$strlen = strlen( $tagName );
|
| 10242 |
+
if(( 'duration' == $tagName ) &&
|
| 10243 |
+
( FALSE !== ( $pos1 = stripos( $xml, "<duration>", $sx1+1 ))) &&
|
| 10244 |
+
( FALSE !== ( $pos2 = stripos( $xml, "</duration>", $pos1+1 ))) &&
|
| 10245 |
+
( FALSE !== ( $pos3 = stripos( $xml, "</duration>", $pos2+1 ))) &&
|
| 10246 |
+
( $pos1 < $pos2 ) && ( $pos2 < $pos3 ))
|
| 10247 |
+
$pos = $pos3;
|
| 10248 |
+
elseif( FALSE === ( $pos = stripos( $xml, "</$tagName>", $sx2 )))
|
| 10249 |
+
return '';
|
| 10250 |
+
$endIx = $pos + $strlen + 3;
|
| 10251 |
+
return substr( $xml, ( $sx1 + $strlen + 2 ), ( $pos - $strlen - 2 ));
|
| 10252 |
}
|
| 10253 |
/*********************************************************************************/
|
| 10254 |
/* Additional functions to use with vtimezone components */
|
| 10304 |
$timestamp['day'],
|
| 10305 |
$timestamp['year']
|
| 10306 |
) ;
|
|
|
|
| 10307 |
}
|
| 10308 |
$tzoffset = array();
|
| 10309 |
// something to return if all goes wrong (such as if $tzid doesn't find us an array of dates)
|
| 10540 |
}
|
| 10541 |
return $tzdates;
|
| 10542 |
}
|
| 10543 |
+
?>
|
lib/iCal/{iCalcreator-2.16 → iCalcreator-2.20}/lgpl.txt
RENAMED
|
File without changes
|
lib/import-export/ics.php
CHANGED
|
@@ -892,30 +892,27 @@ class Ai1ec_Ics_Import_Export_Engine
|
|
| 892 |
// We must also match the exact starting time
|
| 893 |
$exception_dates = $event->get( 'exception_dates' );
|
| 894 |
if ( ! empty( $exception_dates ) ) {
|
| 895 |
-
$params = array(
|
| 896 |
-
|
|
|
|
|
|
|
|
|
|
| 897 |
foreach (
|
| 898 |
explode( ',', $exception_dates )
|
| 899 |
as $exdate
|
| 900 |
) {
|
| 901 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 902 |
}
|
| 903 |
-
$e->setProperty( 'exdate', $use_dates, $params );
|
| 904 |
}
|
| 905 |
return $calendar;
|
| 906 |
}
|
| 907 |
|
| 908 |
-
/**
|
| 909 |
-
* Format exdate for export.
|
| 910 |
-
*
|
| 911 |
-
* @param string $exdate Previously written exdate.
|
| 912 |
-
*
|
| 913 |
-
* @return string Value to use when exporting.
|
| 914 |
-
*/
|
| 915 |
-
public function format_exception_date( $exdate ) {
|
| 916 |
-
return substr( $exdate, 0, 8 );
|
| 917 |
-
}
|
| 918 |
-
|
| 919 |
/**
|
| 920 |
* _sanitize_value method
|
| 921 |
*
|
| 892 |
// We must also match the exact starting time
|
| 893 |
$exception_dates = $event->get( 'exception_dates' );
|
| 894 |
if ( ! empty( $exception_dates ) ) {
|
| 895 |
+
$params = array(
|
| 896 |
+
'VALUE' => 'DATE-TIME',
|
| 897 |
+
'TZID' => $tz,
|
| 898 |
+
);
|
| 899 |
+
$dt_suffix = $event->get( 'start' )->format( '\THis' );
|
| 900 |
foreach (
|
| 901 |
explode( ',', $exception_dates )
|
| 902 |
as $exdate
|
| 903 |
) {
|
| 904 |
+
$exdate = $this->_registry->get( 'date.time', $exdate )
|
| 905 |
+
->format( 'Ymd' );
|
| 906 |
+
$e->setProperty(
|
| 907 |
+
'exdate',
|
| 908 |
+
array( $exdate . $dt_suffix ),
|
| 909 |
+
$params
|
| 910 |
+
);
|
| 911 |
}
|
|
|
|
| 912 |
}
|
| 913 |
return $calendar;
|
| 914 |
}
|
| 915 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 916 |
/**
|
| 917 |
* _sanitize_value method
|
| 918 |
*
|
lib/notification/admin.php
CHANGED
|
@@ -48,16 +48,9 @@ class Ai1ec_Notification_Admin extends Ai1ec_Notification {
|
|
| 48 |
* @return Ai1ec_Notification_Admin
|
| 49 |
*/
|
| 50 |
public function __construct(
|
| 51 |
-
Ai1ec_Registry_Object $registry
|
| 52 |
-
$message = null,
|
| 53 |
-
$class = 'updated',
|
| 54 |
-
$importance = 0,
|
| 55 |
-
array $recipients = array( self::RCPT_ADMIN )
|
| 56 |
) {
|
| 57 |
$this->_registry = $registry;
|
| 58 |
-
if ( $message ) {
|
| 59 |
-
$this->store( $message, $class, $importance, $recipients );
|
| 60 |
-
}
|
| 61 |
}
|
| 62 |
|
| 63 |
/**
|
| 48 |
* @return Ai1ec_Notification_Admin
|
| 49 |
*/
|
| 50 |
public function __construct(
|
| 51 |
+
Ai1ec_Registry_Object $registry
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
) {
|
| 53 |
$this->_registry = $registry;
|
|
|
|
|
|
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
/**
|
lib/robots/helper.php
CHANGED
|
@@ -11,6 +11,18 @@
|
|
| 11 |
*/
|
| 12 |
class Ai1ec_Robots_Helper extends Ai1ec_Base {
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
/**
|
| 15 |
* Install robotx.txt into current Wordpress instance
|
| 16 |
*
|
| 11 |
*/
|
| 12 |
class Ai1ec_Robots_Helper extends Ai1ec_Base {
|
| 13 |
|
| 14 |
+
/**
|
| 15 |
+
* Activation status.
|
| 16 |
+
*
|
| 17 |
+
* @return bool Whereas activation must be triggered.
|
| 18 |
+
*/
|
| 19 |
+
public function pre_check() {
|
| 20 |
+
if ( defined( 'FS_METHOD' ) && 'direct' === FS_METHOD ) {
|
| 21 |
+
return true;
|
| 22 |
+
}
|
| 23 |
+
return false; // disable until FS is properly resolved
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
/**
|
| 27 |
* Install robotx.txt into current Wordpress instance
|
| 28 |
*
|
lib/routing/router.php
CHANGED
|
@@ -128,6 +128,36 @@ class Ai1ec_Router extends Ai1ec_Base {
|
|
| 128 |
return $result_uri;
|
| 129 |
}
|
| 130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
/**
|
| 132 |
* Register rewrite rule to enable work with pretty URIs
|
| 133 |
*/
|
|
@@ -142,12 +172,14 @@ class Ai1ec_Router extends Ai1ec_Base {
|
|
| 142 |
if ( false !== strpos( $base, '?' ) ) {
|
| 143 |
return $this;
|
| 144 |
}
|
|
|
|
| 145 |
$base = '(?:.+/)?' . $base;
|
| 146 |
$named_args = str_replace(
|
| 147 |
'[:DS:]',
|
| 148 |
preg_quote( Ai1ec_Uri::DIRECTION_SEPARATOR ),
|
| 149 |
'[a-z][a-z0-9\-_[:DS:]\/]*[:DS:][a-z0-9\-_[:DS:]\/]'
|
| 150 |
);
|
|
|
|
| 151 |
$regexp = $base . '(\/' . $named_args . ')';
|
| 152 |
$clean_base = trim( $this->_calendar_base, '/' );
|
| 153 |
$clean_site = trim( $this->get_site_url(), '/' );
|
| 128 |
return $result_uri;
|
| 129 |
}
|
| 130 |
|
| 131 |
+
/**
|
| 132 |
+
* Properly capitalize encoded URL sequence.
|
| 133 |
+
*
|
| 134 |
+
* @param string $url Original URL to use.
|
| 135 |
+
*
|
| 136 |
+
* @return string Modified URL.
|
| 137 |
+
*/
|
| 138 |
+
protected function _fix_encoded_uri( $url ) {
|
| 139 |
+
$particles = preg_split(
|
| 140 |
+
'|(%[a-f0-9]{2})|',
|
| 141 |
+
$url,
|
| 142 |
+
-1,
|
| 143 |
+
PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY
|
| 144 |
+
);
|
| 145 |
+
$state = false;
|
| 146 |
+
$output = '';
|
| 147 |
+
foreach ( $particles as $particle ) {
|
| 148 |
+
if ( '%' === $particle ) {
|
| 149 |
+
$state = true;
|
| 150 |
+
} else {
|
| 151 |
+
if ( ! $state && '%' === $particle{0} ) {
|
| 152 |
+
$particle = strtoupper( $particle );
|
| 153 |
+
}
|
| 154 |
+
$state = false;
|
| 155 |
+
}
|
| 156 |
+
$output .= $particle;
|
| 157 |
+
}
|
| 158 |
+
return $output;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
/**
|
| 162 |
* Register rewrite rule to enable work with pretty URIs
|
| 163 |
*/
|
| 172 |
if ( false !== strpos( $base, '?' ) ) {
|
| 173 |
return $this;
|
| 174 |
}
|
| 175 |
+
$base = $this->_fix_encoded_uri( $base );
|
| 176 |
$base = '(?:.+/)?' . $base;
|
| 177 |
$named_args = str_replace(
|
| 178 |
'[:DS:]',
|
| 179 |
preg_quote( Ai1ec_Uri::DIRECTION_SEPARATOR ),
|
| 180 |
'[a-z][a-z0-9\-_[:DS:]\/]*[:DS:][a-z0-9\-_[:DS:]\/]'
|
| 181 |
);
|
| 182 |
+
|
| 183 |
$regexp = $base . '(\/' . $named_args . ')';
|
| 184 |
$clean_base = trim( $this->_calendar_base, '/' );
|
| 185 |
$clean_site = trim( $this->get_site_url(), '/' );
|
public/admin/box_event_children.php
CHANGED
|
@@ -20,8 +20,8 @@ if ( empty( $parent ) && empty( $children ) ) {
|
|
| 20 |
<div class="ai1ec-panel-body">
|
| 21 |
<?php if ( $parent ) : ?>
|
| 22 |
<?php _e( 'Edit parent:', AI1EC_PLUGIN_NAME ); ?>
|
| 23 |
-
<a href="<?php echo get_edit_post_link( $parent->post_id ); ?>"><?php
|
| 24 |
-
echo apply_filters( 'the_title', $parent->post->post_title, $parent->post_id );
|
| 25 |
?></a>
|
| 26 |
<?php else : /* children */ ?>
|
| 27 |
<h4><?php _e( 'Modified Events', AI1EC_PLUGIN_NAME ); ?></h4>
|
|
@@ -29,9 +29,9 @@ if ( empty( $parent ) && empty( $children ) ) {
|
|
| 29 |
<?php foreach ( $children as $child ) : ?>
|
| 30 |
<li>
|
| 31 |
<?php _e( 'Edit:', AI1EC_PLUGIN_NAME ); ?>
|
| 32 |
-
<a href="<?php echo get_edit_post_link( $child->post_id ); ?>"><?php
|
| 33 |
-
echo $child->post->post_title;
|
| 34 |
-
?></a>, <?php echo $
|
| 35 |
</li>
|
| 36 |
<?php endforeach; ?>
|
| 37 |
</ul>
|
| 20 |
<div class="ai1ec-panel-body">
|
| 21 |
<?php if ( $parent ) : ?>
|
| 22 |
<?php _e( 'Edit parent:', AI1EC_PLUGIN_NAME ); ?>
|
| 23 |
+
<a href="<?php echo get_edit_post_link( $parent->get( 'post_id' ) ); ?>"><?php
|
| 24 |
+
echo apply_filters( 'the_title', $parent->get( 'post' )->post_title, $parent->get( 'post_id' ) );
|
| 25 |
?></a>
|
| 26 |
<?php else : /* children */ ?>
|
| 27 |
<h4><?php _e( 'Modified Events', AI1EC_PLUGIN_NAME ); ?></h4>
|
| 29 |
<?php foreach ( $children as $child ) : ?>
|
| 30 |
<li>
|
| 31 |
<?php _e( 'Edit:', AI1EC_PLUGIN_NAME ); ?>
|
| 32 |
+
<a href="<?php echo get_edit_post_link( $child->get( 'post_id' ) ); ?>"><?php
|
| 33 |
+
echo $child->get( 'post' )->post_title;
|
| 34 |
+
?></a>, <?php echo $registry->get( 'view.event.time' )->get_timespan_html( $child, 'long' ); ?>
|
| 35 |
</li>
|
| 36 |
<?php endforeach; ?>
|
| 37 |
</ul>
|
public/admin/box_support.php
CHANGED
|
@@ -10,14 +10,37 @@
|
|
| 10 |
<h2>
|
| 11 |
<?php _e( 'Timely’s All-in-One Event Calendar is a<br />revolutionary new way to find and share events.', AI1EC_PLUGIN_NAME ); ?>
|
| 12 |
</h2>
|
| 13 |
-
<div class="ai1ec-support-
|
| 14 |
-
<
|
| 15 |
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
</div>
|
| 18 |
</div>
|
| 19 |
<div class="ai1ec-news">
|
| 20 |
-
<h2
|
|
|
|
|
|
|
| 21 |
<small>
|
| 22 |
<a href="http://time.ly/blog?utm_source=dashboard utm_medium=blog utm_term=ai1ec-pro utm_content=1.11.4 utm_campaign=news"
|
| 23 |
target="_blank">
|
|
@@ -28,29 +51,37 @@
|
|
| 28 |
</h2>
|
| 29 |
<div>
|
| 30 |
<?php if ( count( $news ) > 0 ) : ?>
|
| 31 |
-
<?php foreach ( $news as $n ) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
<article>
|
| 33 |
<header>
|
| 34 |
-
<
|
| 35 |
-
$
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
'utm_term' => urlencode(
|
| 40 |
-
strtolower( substr( $n->get_title(), 0, 40 ) )
|
| 41 |
-
),
|
| 42 |
-
);
|
| 43 |
-
echo add_query_arg( $ga_args, $n->get_permalink() );
|
| 44 |
-
?>" target="_blank"><?php echo $n->get_title() ?></a></strong>
|
| 45 |
</header>
|
| 46 |
-
<
|
| 47 |
-
<?php echo preg_replace( '/\s+?(\S+)?$/', '', $n->get_description() ); ?>
|
| 48 |
-
</div>
|
| 49 |
</article>
|
| 50 |
-
<?php endforeach ?>
|
| 51 |
<?php else : ?>
|
| 52 |
<p><em>No news available.</em></p>
|
| 53 |
-
<?php endif ?>
|
| 54 |
</div>
|
| 55 |
</div>
|
| 56 |
|
| 10 |
<h2>
|
| 11 |
<?php _e( 'Timely’s All-in-One Event Calendar is a<br />revolutionary new way to find and share events.', AI1EC_PLUGIN_NAME ); ?>
|
| 12 |
</h2>
|
| 13 |
+
<div class="ai1ec-support-buttons ai1ec-row">
|
| 14 |
+
<div class="ai1ec-col-lg-4" id="ai1ec-addons-col">
|
| 15 |
+
<a class="ai1ec-btn ai1ec-btn-info ai1ec-btn-block ai1ec-btn-lg"
|
| 16 |
+
target="_blank"
|
| 17 |
+
href="http://time.ly/add-ons/?utm_source=dashboard&utm_medium=button&utm_campaign=addons">
|
| 18 |
+
<i class="ai1ec-fa ai1ec-fa-magic ai1ec-fa-fw"></i>
|
| 19 |
+
<?php _e( 'Get Add-ons', AI1EC_PLUGIN_NAME ); ?>
|
| 20 |
+
</a>
|
| 21 |
+
</div>
|
| 22 |
+
<div class="ai1ec-col-lg-4" id="ai1ec-support-col">
|
| 23 |
+
<a class="ai1ec-btn ai1ec-btn-primary ai1ec-btn-block ai1ec-btn-lg"
|
| 24 |
+
target="_blank"
|
| 25 |
+
href="http://time.ly/support/?utm_source=dashboard&utm_medium=button&utm_campaign=support">
|
| 26 |
+
<i class="ai1ec-fa ai1ec-fa-comments ai1ec-fa-fw"></i>
|
| 27 |
+
<?php _e( 'Support', AI1EC_PLUGIN_NAME ); ?>
|
| 28 |
+
</a>
|
| 29 |
+
</div>
|
| 30 |
+
<div class="ai1ec-col-lg-4" id="ai1ec-events-col">
|
| 31 |
+
<a class="ai1ec-btn ai1ec-btn-primary ai1ec-btn-block ai1ec-btn-lg"
|
| 32 |
+
target="_blank"
|
| 33 |
+
href="http://time.ly/calendar/?utm_source=dashboard&utm_medium=button&utm_campaign=events">
|
| 34 |
+
<i class="ai1ec-fa ai1ec-fa-calendar ai1ec-fa-fw"></i>
|
| 35 |
+
<?php _e( 'Timely Events', AI1EC_PLUGIN_NAME ); ?>
|
| 36 |
+
</a>
|
| 37 |
+
</div>
|
| 38 |
</div>
|
| 39 |
</div>
|
| 40 |
<div class="ai1ec-news">
|
| 41 |
+
<h2>
|
| 42 |
+
<i class="ai1ec-fa ai1ec-fa-bullhorn"></i>
|
| 43 |
+
<?php _e( 'Timely News', AI1EC_PLUGIN_NAME ); ?>
|
| 44 |
<small>
|
| 45 |
<a href="http://time.ly/blog?utm_source=dashboard utm_medium=blog utm_term=ai1ec-pro utm_content=1.11.4 utm_campaign=news"
|
| 46 |
target="_blank">
|
| 51 |
</h2>
|
| 52 |
<div>
|
| 53 |
<?php if ( count( $news ) > 0 ) : ?>
|
| 54 |
+
<?php foreach ( $news as $n ) :
|
| 55 |
+
$ga_args = array(
|
| 56 |
+
'utm_source' => 'dashboard',
|
| 57 |
+
'utm_medium' => 'blog',
|
| 58 |
+
'utm_campaign' => 'news',
|
| 59 |
+
'utm_term' => urlencode(
|
| 60 |
+
strtolower( substr( $n->get_title(), 0, 40 ) )
|
| 61 |
+
),
|
| 62 |
+
);
|
| 63 |
+
$href = esc_attr( add_query_arg( $ga_args, $n->get_permalink() ) );
|
| 64 |
+
$desc = preg_replace( '/\s+?(\S+)?$/', '', $n->get_description() );
|
| 65 |
+
$desc = wp_trim_words(
|
| 66 |
+
$desc,
|
| 67 |
+
40,
|
| 68 |
+
' <a href="' . $href . '" target="_blank">[…]</a>'
|
| 69 |
+
);
|
| 70 |
+
?>
|
| 71 |
<article>
|
| 72 |
<header>
|
| 73 |
+
<h4>
|
| 74 |
+
<a href="<?php echo $href; ?>" target="_blank">
|
| 75 |
+
<?php echo $n->get_title(); ?>
|
| 76 |
+
</a>
|
| 77 |
+
</h4>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
</header>
|
| 79 |
+
<p><?php echo $desc; ?></p>
|
|
|
|
|
|
|
| 80 |
</article>
|
| 81 |
+
<?php endforeach; ?>
|
| 82 |
<?php else : ?>
|
| 83 |
<p><em>No news available.</em></p>
|
| 84 |
+
<?php endif; ?>
|
| 85 |
</div>
|
| 86 |
</div>
|
| 87 |
|
public/admin/box_time_and_date.php
CHANGED
|
@@ -80,7 +80,13 @@
|
|
| 80 |
value="<?php echo $end->format_to_javascript(); ?>">
|
| 81 |
</td>
|
| 82 |
</tr>
|
| 83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
<td>
|
| 85 |
<input type="checkbox" name="ai1ec_repeat" id="ai1ec_repeat"
|
| 86 |
value="1"
|
|
@@ -98,7 +104,7 @@
|
|
| 98 |
</div>
|
| 99 |
</td>
|
| 100 |
</tr>
|
| 101 |
-
<tr
|
| 102 |
<td>
|
| 103 |
<input type="checkbox" name="ai1ec_exclude" id="ai1ec_exclude"
|
| 104 |
value="1"
|
|
@@ -120,7 +126,7 @@
|
|
| 120 |
</span>
|
| 121 |
</td>
|
| 122 |
</tr>
|
| 123 |
-
<tr
|
| 124 |
<td>
|
| 125 |
<label for="ai1ec_exdate_calendar_icon" id="ai1ec_exclude_date_label">
|
| 126 |
<?php _e( 'Exclude dates', AI1EC_PLUGIN_NAME ); ?>:
|
| 80 |
value="<?php echo $end->format_to_javascript(); ?>">
|
| 81 |
</td>
|
| 82 |
</tr>
|
| 83 |
+
<?php
|
| 84 |
+
$recurrence_attr = '';
|
| 85 |
+
if ( $parent_event_id || $instance_id ) :
|
| 86 |
+
$recurrence_attr = ' class="ai1ec-hide"';
|
| 87 |
+
endif;
|
| 88 |
+
?>
|
| 89 |
+
<tr<?php echo $recurrence_attr; ?>>
|
| 90 |
<td>
|
| 91 |
<input type="checkbox" name="ai1ec_repeat" id="ai1ec_repeat"
|
| 92 |
value="1"
|
| 104 |
</div>
|
| 105 |
</td>
|
| 106 |
</tr>
|
| 107 |
+
<tr<?php echo $recurrence_attr; ?>>
|
| 108 |
<td>
|
| 109 |
<input type="checkbox" name="ai1ec_exclude" id="ai1ec_exclude"
|
| 110 |
value="1"
|
| 126 |
</span>
|
| 127 |
</td>
|
| 128 |
</tr>
|
| 129 |
+
<tr<?php echo $recurrence_attr; ?>>
|
| 130 |
<td>
|
| 131 |
<label for="ai1ec_exdate_calendar_icon" id="ai1ec_exclude_date_label">
|
| 132 |
<?php _e( 'Exclude dates', AI1EC_PLUGIN_NAME ); ?>:
|
public/admin/css/add_new_event.css
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
/* General form attributes */
|
| 2 |
|
| 3 |
/* Add/edit event form hidden by default to that DOM can be rearranged without
|
| 1 |
+
/* Event details meta box arrow and handle fix */
|
| 2 |
+
|
| 3 |
+
.js #ai1ec_event .handlediv:before {
|
| 4 |
+
content: '\f142';
|
| 5 |
+
right: 12px;
|
| 6 |
+
font: 400 20px/1 dashicons;
|
| 7 |
+
speak: none;
|
| 8 |
+
display: inline-block;
|
| 9 |
+
padding: 8px 10px;
|
| 10 |
+
top: 0;
|
| 11 |
+
position: relative;
|
| 12 |
+
-webkit-font-smoothing: antialiased;
|
| 13 |
+
-moz-osx-font-smoothing: grayscale;
|
| 14 |
+
text-decoration: none!important;
|
| 15 |
+
}
|
| 16 |
+
.js #ai1ec_event.closed .handlediv:before {
|
| 17 |
+
content: '\f140';
|
| 18 |
+
}
|
| 19 |
+
.js #ai1ec_event .hndle {
|
| 20 |
+
cursor: default;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
/* General form attributes */
|
| 24 |
|
| 25 |
/* Add/edit event form hidden by default to that DOM can be rearranged without
|
public/admin/css/bootstrap.min.css
CHANGED
|
@@ -3073,8 +3073,8 @@ fieldset[disabled] .timely .ai1ec-btn-success.ai1ec-active {
|
|
| 3073 |
}
|
| 3074 |
.timely .ai1ec-btn-info {
|
| 3075 |
color: #ffffff;
|
| 3076 |
-
background-color: #
|
| 3077 |
-
border-color: #
|
| 3078 |
}
|
| 3079 |
.timely .ai1ec-btn-info:hover,
|
| 3080 |
.timely .ai1ec-btn-info:focus,
|
|
@@ -3082,8 +3082,8 @@ fieldset[disabled] .timely .ai1ec-btn-success.ai1ec-active {
|
|
| 3082 |
.timely .ai1ec-btn-info.ai1ec-active,
|
| 3083 |
.ai1ec-open .ai1ec-dropdown-toggle.timely .ai1ec-btn-info {
|
| 3084 |
color: #ffffff;
|
| 3085 |
-
background-color: #
|
| 3086 |
-
border-color: #
|
| 3087 |
}
|
| 3088 |
.timely .ai1ec-btn-info:active,
|
| 3089 |
.timely .ai1ec-btn-info.ai1ec-active,
|
|
@@ -3105,11 +3105,11 @@ fieldset[disabled] .timely .ai1ec-btn-info:active,
|
|
| 3105 |
.timely .ai1ec-btn-info.ai1ec-disabled.ai1ec-active,
|
| 3106 |
.timely .ai1ec-btn-info[disabled].ai1ec-active,
|
| 3107 |
fieldset[disabled] .timely .ai1ec-btn-info.ai1ec-active {
|
| 3108 |
-
background-color: #
|
| 3109 |
-
border-color: #
|
| 3110 |
}
|
| 3111 |
.timely .ai1ec-btn-info .ai1ec-badge {
|
| 3112 |
-
color: #
|
| 3113 |
background-color: #fff;
|
| 3114 |
}
|
| 3115 |
.timely .ai1ec-btn-link {
|
|
@@ -4223,11 +4223,11 @@ textarea.ai1ec-input-group-sm > .ai1ec-input-group-btn > .ai1ec-btn {
|
|
| 4223 |
background-color: #449d44;
|
| 4224 |
}
|
| 4225 |
.ai1ec-label-info {
|
| 4226 |
-
background-color: #
|
| 4227 |
}
|
| 4228 |
.ai1ec-label-info[href]:hover,
|
| 4229 |
.ai1ec-label-info[href]:focus {
|
| 4230 |
-
background-color: #
|
| 4231 |
}
|
| 4232 |
.ai1ec-label-warning {
|
| 4233 |
background-color: #f0ad4e;
|
| 3073 |
}
|
| 3074 |
.timely .ai1ec-btn-info {
|
| 3075 |
color: #ffffff;
|
| 3076 |
+
background-color: #f48121;
|
| 3077 |
+
border-color: #f0730c;
|
| 3078 |
}
|
| 3079 |
.timely .ai1ec-btn-info:hover,
|
| 3080 |
.timely .ai1ec-btn-info:focus,
|
| 3082 |
.timely .ai1ec-btn-info.ai1ec-active,
|
| 3083 |
.ai1ec-open .ai1ec-dropdown-toggle.timely .ai1ec-btn-info {
|
| 3084 |
color: #ffffff;
|
| 3085 |
+
background-color: #e16c0b;
|
| 3086 |
+
border-color: #b55709;
|
| 3087 |
}
|
| 3088 |
.timely .ai1ec-btn-info:active,
|
| 3089 |
.timely .ai1ec-btn-info.ai1ec-active,
|
| 3105 |
.timely .ai1ec-btn-info.ai1ec-disabled.ai1ec-active,
|
| 3106 |
.timely .ai1ec-btn-info[disabled].ai1ec-active,
|
| 3107 |
fieldset[disabled] .timely .ai1ec-btn-info.ai1ec-active {
|
| 3108 |
+
background-color: #f48121;
|
| 3109 |
+
border-color: #f0730c;
|
| 3110 |
}
|
| 3111 |
.timely .ai1ec-btn-info .ai1ec-badge {
|
| 3112 |
+
color: #f48121;
|
| 3113 |
background-color: #fff;
|
| 3114 |
}
|
| 3115 |
.timely .ai1ec-btn-link {
|
| 4223 |
background-color: #449d44;
|
| 4224 |
}
|
| 4225 |
.ai1ec-label-info {
|
| 4226 |
+
background-color: #f48121;
|
| 4227 |
}
|
| 4228 |
.ai1ec-label-info[href]:hover,
|
| 4229 |
.ai1ec-label-info[href]:focus {
|
| 4230 |
+
background-color: #d7680b;
|
| 4231 |
}
|
| 4232 |
.ai1ec-label-warning {
|
| 4233 |
background-color: #f0ad4e;
|
public/admin/css/settings.css
CHANGED
|
@@ -15,10 +15,21 @@
|
|
| 15 |
|
| 16 |
/* Support box */
|
| 17 |
|
| 18 |
-
.ai1ec-support-
|
| 19 |
text-align: center;
|
| 20 |
margin: 20px 0;
|
| 21 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
#ai1ec-support {
|
| 23 |
background: #f9f9f9;
|
| 24 |
min-width: 350px;
|
|
@@ -38,8 +49,10 @@
|
|
| 38 |
}
|
| 39 |
#ai1ec-support .timely-logo a {
|
| 40 |
background: url(../img/timely-logo.png) no-repeat center center;
|
|
|
|
|
|
|
| 41 |
display: block;
|
| 42 |
-
height:
|
| 43 |
}
|
| 44 |
#ai1ec-support .timely-intro {
|
| 45 |
text-align: center;
|
|
@@ -96,7 +109,6 @@
|
|
| 96 |
}
|
| 97 |
|
| 98 |
#ai1ec-support .ai1ec-news h2 small {
|
| 99 |
-
font-family: sans-serif;
|
| 100 |
font-size: 0.8em;
|
| 101 |
margin-left: 0.3em;
|
| 102 |
}
|
|
@@ -109,12 +121,6 @@
|
|
| 109 |
border-top: 1px solid #e0e0e0;
|
| 110 |
padding-top: 5px;
|
| 111 |
}
|
| 112 |
-
#ai1ec-support .ai1ec-news article div {
|
| 113 |
-
font-size: 0.9em;
|
| 114 |
-
overflow: hidden;
|
| 115 |
-
text-overflow: ellipsis;
|
| 116 |
-
white-space: nowrap;
|
| 117 |
-
}
|
| 118 |
|
| 119 |
/* General settings */
|
| 120 |
|
| 15 |
|
| 16 |
/* Support box */
|
| 17 |
|
| 18 |
+
.ai1ec-support-buttons {
|
| 19 |
text-align: center;
|
| 20 |
margin: 20px 0;
|
| 21 |
}
|
| 22 |
+
.timely .ai1ec-support-buttons .ai1ec-btn-block {
|
| 23 |
+
margin-bottom: 5px;
|
| 24 |
+
}
|
| 25 |
+
@media ( min-width: 1200px ) {
|
| 26 |
+
#ai1ec-addons-col {
|
| 27 |
+
padding-right: 0;
|
| 28 |
+
}
|
| 29 |
+
#ai1ec-events-col {
|
| 30 |
+
padding-left: 0;
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
#ai1ec-support {
|
| 34 |
background: #f9f9f9;
|
| 35 |
min-width: 350px;
|
| 49 |
}
|
| 50 |
#ai1ec-support .timely-logo a {
|
| 51 |
background: url(../img/timely-logo.png) no-repeat center center;
|
| 52 |
+
-webkit-background-size: 250px auto;
|
| 53 |
+
background-size: 250px auto;
|
| 54 |
display: block;
|
| 55 |
+
height: 109px;
|
| 56 |
}
|
| 57 |
#ai1ec-support .timely-intro {
|
| 58 |
text-align: center;
|
| 109 |
}
|
| 110 |
|
| 111 |
#ai1ec-support .ai1ec-news h2 small {
|
|
|
|
| 112 |
font-size: 0.8em;
|
| 113 |
margin-left: 0.3em;
|
| 114 |
}
|
| 121 |
border-top: 1px solid #e0e0e0;
|
| 122 |
padding-top: 5px;
|
| 123 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
|
| 125 |
/* General settings */
|
| 126 |
|
public/admin/img/timely-logo.png
CHANGED
|
Binary file
|
public/admin/less/timely-variables.less
CHANGED
|
@@ -3,6 +3,7 @@
|
|
| 3 |
//
|
| 4 |
|
| 5 |
@brand-primary: #6AAB2D;
|
|
|
|
| 6 |
@font-size-base: 13px;
|
| 7 |
@font-family-sans-serif: "Open Sans", Arial, sans-serif;
|
| 8 |
@headings-color: @gray-dark;
|
| 3 |
//
|
| 4 |
|
| 5 |
@brand-primary: #6AAB2D;
|
| 6 |
+
@brand-info: #F48121;
|
| 7 |
@font-size-base: 13px;
|
| 8 |
@font-family-sans-serif: "Open Sans", Arial, sans-serif;
|
| 9 |
@headings-color: @gray-dark;
|
public/admin/twig/bootstrap_tabs.twig
CHANGED
|
@@ -35,6 +35,7 @@
|
|
| 35 |
{% if stacked %}</div><div class="ai1ec-col-sm-9">{% endif %}
|
| 36 |
|
| 37 |
<div class="ai1ec-tab-content {{ content_class }}">
|
|
|
|
| 38 |
{% for id, data in tabs %}
|
| 39 |
<div class="ai1ec-tab-pane" id="ai1ec-{{ id }}">
|
| 40 |
{% for element in data.elements %}
|
| 35 |
{% if stacked %}</div><div class="ai1ec-col-sm-9">{% endif %}
|
| 36 |
|
| 37 |
<div class="ai1ec-tab-content {{ content_class }}">
|
| 38 |
+
{{ pre_tabs_markup | raw}}
|
| 39 |
{% for id, data in tabs %}
|
| 40 |
<div class="ai1ec-tab-pane" id="ai1ec-{{ id }}">
|
| 41 |
{% for element in data.elements %}
|
public/admin/twig/setting/calendar-page-selector.twig
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<p><a target="_blank" href="{{ link }}">
|
| 2 |
+
{{ view }} "{{ title|raw }}"
|
| 3 |
+
<i class="ai1ec-fa ai1ec-fa-arrow-right"></i>
|
| 4 |
+
</a></p>
|
public/js/pages/add_new_event.js
CHANGED
|
@@ -118,4 +118,4 @@
|
|
| 118 |
* limitations under the License.
|
| 119 |
* ======================================================================== */
|
| 120 |
|
| 121 |
-
timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("scripts/add_new_event/event_location/input_coordinates_utility_functions",["jquery_timely","ai1ec_config","libs/utils"],function(e,t,n){var r=function(){e("#ai1ec_input_coordinates:checked").length>0&&e("#ai1ec_table_coordinates input.coordinates").each(function(){this.value=n.convert_comma_to_dot(this.value)})},i=function(t,n){var r=e("<div />",{text:n,"class":"ai1ec-error"});e(t).after(r)},s=function(t,n){t.target.id==="post"&&(t.stopImmediatePropagation(),t.preventDefault(),e("#publish").removeClass("button-primary-disabled"),e("#publish").siblings(".spinner").css("visibility","hidden")),e(n).focus()},o=function(){var t=n.field_has_value("ai1ec_address"),r=!0;return e(".coordinates").each(function(){var e=n.field_has_value(this.id);e||(r=!1)}),t||r},u=function(n){var r=!0,o=!1;return e("#ai1ec_input_coordinates:checked").length>0&&(e("div.ai1ec-error").remove(),e("#ai1ec_table_coordinates input.coordinates").each(function(){var n=e(this).hasClass("latitude"),s=n?t.error_message_not_entered_lat:t.error_message_not_entered_long;this.value===""&&(r=!1,o===!1&&(o=this),i(this,s))})),r===!1&&s(n,o),r},a=function(r){if(e("#ai1ec_input_coordinates:checked").length===1){e("div.ai1ec-error").remove();var o=!0,u=!1,a=!1;return e("#ai1ec_table_coordinates input.coordinates").each(function(){if(this.value===""){a=!0;return}var r=e(this).hasClass("latitude"),s=r?t.error_message_not_valid_lat:t.error_message_not_valid_long;n.is_valid_coordinate(this.value,r)||(o=!1,u===!1&&(u=this),i(this,s))}),o===!1&&s(r,u),a===!0&&(o=!1),o}};return{ai1ec_convert_commas_to_dots_for_coordinates:r,ai1ec_show_error_message_after_element:i,check_if_address_or_coordinates_are_set:o,ai1ec_check_lat_long_fields_filled_when_publishing_event:u,ai1ec_check_lat_long_ok_for_search:a}}),timely.define("external_libs/jquery.autocomplete_geomod",["jquery_timely"],function(e){e.fn.extend({autocomplete:function(t,n){var r=typeof t=="string";return n=e.extend({},e.Autocompleter.defaults,{url:r?t:null,data:r?null:t,delay:r?e.Autocompleter.defaults.delay:10,max:n&&!n.scroll?10:150},n),n.highlight=n.highlight||function(e){return e},n.formatMatch=n.formatMatch||n.formatItem,this.each(function(){new e.Autocompleter(this,n)})},result:function(e){return this.bind("result",e)},search:function(e){return this.trigger("search",[e])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(e){return this.trigger("setOptions",[e])},unautocomplete:function(){return this.trigger("unautocomplete")}}),e.Autocompleter=function(t,n){function d(){var r=h.selected();if(!r)return!1;var s=r.result;o=s;if(n.multiple){var u=m(i.val());if(u.length>1){var a=n.multipleSeparator.length,f=e(t).selection().start,l,c=0;e.each(u,function(e,t){c+=t.length;if(f<=c)return l=e,!1;c+=a}),u[l]=s,s=u.join(n.multipleSeparator)}s+=n.multipleSeparator}return i.val(s),w(),i.trigger("result",[r.data,r.value]),!0}function v(e,t){if(f==r.DEL){h.hide();return}var s=i.val();if(!t&&s==o)return;o=s,s=g(s),s.length>=n.minChars?(i.addClass(n.loadingClass),n.matchCase||(s=s.toLowerCase()),S(s,E,w)):(T(),h.hide())}function m(t){return t?n.multiple?e.map(t.split(n.multipleSeparator),function(n){return e.trim(t).length?e.trim(n):null}):[e.trim(t)]:[""]}function g(r){if(!n.multiple)return r;var i=m(r);if(i.length==1)return i[0];var s=e(t).selection().start;return s==r.length?i=m(r):i=m(r.replace(r.substring(s),"")),i[i.length-1]}function y(s,u){n.autoFill&&g(i.val()).toLowerCase()==s.toLowerCase()&&f!=r.BACKSPACE&&(i.val(i.val()+u.substring(g(o).length)),e(t).selection(o.length,o.length+u.length))}function b(){clearTimeout(s),s=setTimeout(w,200)}function w(){var e=h.visible();h.hide(),clearTimeout(s),T(),n.mustMatch&&i.search(function(e){if(!e)if(n.multiple){var t=m(i.val()).slice(0,-1);i.val(t.join(n.multipleSeparator)+(t.length?n.multipleSeparator:""))}else i.val(""),i.trigger("result",null)})}function E(e,t){t&&t.length&&a?(T(),h.display(t,e),y(e,t[0].value),h.show()):w()}function S(r,i,s){n.matchCase||(r=r.toLowerCase());var o=u.load(r);if(o&&o.length)i(r,o);else if(n.geocoder){var a=g(r),f={address:a};n.region&&(f.region=n.region),n.geocoder.geocode(f,function(e,t){var s=n.parse(e,t,a);u.add(r,s),i(r,s)})}else if(typeof n.url=="string"&&n.url.length>0){var l={timestamp:+(new Date)};e.each(n.extraParams,function(e,t){l[e]=typeof t=="function"?t():t}),e.ajax({mode:"abort",port:"autocomplete"+t.name,dataType:n.dataType,url:n.url,data:e.extend({q:g(r),limit:n.max},l),success:function(e){var t=n.parse&&n.parse(e)||x(e);u.add(r,t),i(r,t)}})}else h.emptyList(),s(r)}function x(t){var r=[],i=t.split("\n");for(var s=0;s<i.length;s++){var o=e.trim(i[s]);o&&(o=o.split("|"),r[r.length]={data:o,value:o[0],result:n.formatResult&&n.formatResult(o,o[0])||o[0]})}return r}function T(){i.removeClass(n.loadingClass)}var r={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},i=e(t).attr("autocomplete","off").addClass(n.inputClass),s,o="",u=e.Autocompleter.Cache(n),a=0,f,l=navigator.userAgent.match(/opera/i),c={mouseDownOnSelect:!1},h=e.Autocompleter.Select(n,t,d,c),p;l&&e(t.form).bind("submit.autocomplete",function(){if(p)return p=!1,!1}),i.bind((l?"keypress":"keydown")+".autocomplete",function(t){a=1,f=t.keyCode;switch(t.keyCode){case r.UP:t.preventDefault(),h.visible()?h.prev():v(0,!0);break;case r.DOWN:t.preventDefault(),h.visible()?h.next():v(0,!0);break;case r.PAGEUP:t.preventDefault(),h.visible()?h.pageUp():v(0,!0);break;case r.PAGEDOWN:t.preventDefault(),h.visible()?h.pageDown():v(0,!0);break;case n.multiple&&e.trim(n.multipleSeparator)==","&&r.COMMA:case r.TAB:case r.RETURN:if(d())return t.preventDefault(),p=!0,!1;break;case r.ESC:h.hide();break;default:clearTimeout(s),s=setTimeout(v,n.delay)}}).focus(function(){a++}).blur(function(){a=0,c.mouseDownOnSelect||b()}).click(function(){a++>1&&!h.visible()&&v(0,!0)}).bind("search",function(){function n(e,n){var r;if(n&&n.length)for(var s=0;s<n.length;s++)if(n[s].result.toLowerCase()==e.toLowerCase()){r=n[s];break}typeof t=="function"?t(r):i.trigger("result",r&&[r.data,r.value])}var t=arguments.length>1?arguments[1]:null;e.each(m(i.val()),function(e,t){S(t,n,n)})}).bind("flushCache",function(){u.flush()}).bind("setOptions",function(){e.extend(n,arguments[1]),"data"in arguments[1]&&u.populate()}).bind("unautocomplete",function(){h.unbind(),i.unbind(),e(t.form).unbind(".autocomplete")})},e.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:!1,matchSubset:!0,matchContains:!1,cacheLength:10,max:100,mustMatch:!1,extraParams:{},selectFirst:!0,formatItem:function(e){return e[0]},formatMatch:null,autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",highlight:function(e,t){return e.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+t.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:!0,scrollHeight:180},e.Autocompleter.Cache=function(t){function i(e,n){t.matchCase||(e=e.toLowerCase());var r=e.indexOf(n);return t.matchContains=="word"&&(r=e.toLowerCase().search("\\b"+n.toLowerCase())),r==-1?!1:r==0||t.matchContains}function s(e,i){r>t.cacheLength&&u(),n[e]||r++,n[e]=i}function o(){if(!t.data)return!1;var n={},r=0;t.url||(t.cacheLength=1),n[""]=[];for(var i=0,o=t.data.length;i<o;i++){var u=t.data[i];u=typeof u=="string"?[u]:u;var a=t.formatMatch(u,i+1,t.data.length);if(a===!1)continue;var f=a.charAt(0).toLowerCase();n[f]||(n[f]=[]);var l={value:a,data:u,result:t.formatResult&&t.formatResult(u)||a};n[f].push(l),r++<t.max&&n[""].push(l)}e.each(n,function(e,n){t.cacheLength++,s(e,n)})}function u(){n={},r=0}var n={},r=0;return setTimeout(o,25),{flush:u,add:s,populate:o,load:function(s){if(!t.cacheLength||!r)return null;if(!t.url&&t.matchContains){var o=[];for(var u in n)if(u.length>0){var a=n[u];e.each(a,function(e,t){i(t.value,s)&&o.push(t)})}return o}if(n[s])return n[s];if(t.matchSubset)for(var f=s.length-1;f>=t.minChars;f--){var a=n[s.substr(0,f)];if(a){var o=[];return e.each(a,function(e,t){i(t.value,s)&&(o[o.length]=t)}),o}}return null}}},e.Autocompleter.Select=function(t,n,r,i){function p(){if(!l)return;c=e("<div/>").hide().addClass(t.resultsClass).css("position","absolute").appendTo(document.body),h=e("<ul/>").appendTo(c).mouseover(function(t){d(t).nodeName&&d(t).nodeName.toUpperCase()=="LI"&&(u=e("li",h).removeClass(s.ACTIVE).index(d(t)),e(d(t)).addClass(s.ACTIVE))}).click(function(t){return e(d(t)).addClass(s.ACTIVE),r(),n.focus(),!1}).mousedown(function(){i.mouseDownOnSelect=!0}).mouseup(function(){i.mouseDownOnSelect=!1}),t.width>0&&c.css("width",t.width),l=!1}function d(e){var t=e.target;while(t&&t.tagName!="LI")t=t.parentNode;return t?t:[]}function v(e){o.slice(u,u+1).removeClass(s.ACTIVE),m(e);var n=o.slice(u,u+1).addClass(s.ACTIVE);if(t.scroll){var r=0;o.slice(0,u).each(function(){r+=this.offsetHeight}),r+n[0].offsetHeight-h.scrollTop()>h[0].clientHeight?h.scrollTop(r+n[0].offsetHeight-h.innerHeight()):r<h.scrollTop()&&h.scrollTop(r)}}function m(e){u+=e,u<0?u=o.size()-1:u>=o.size()&&(u=0)}function g(e){return t.max&&t.max<e?t.max:e}function y(){h.empty();var n=g(a.length);for(var r=0;r<n;r++){if(!a[r])continue;var i=t.formatItem(a[r].data,r+1,n,a[r].value,f);if(i===!1)continue;var l=e("<li/>").html(t.highlight(i,f)).addClass(r%2==0?"ac_even":"ac_odd").appendTo(h)[0];e.data(l,"ac_data",a[r])}o=h.find("li"),t.selectFirst&&(o.slice(0,1).addClass(s.ACTIVE),u=0),e.fn.bgiframe&&h.bgiframe()}var s={ACTIVE:"ac_over"},o,u=-1,a,f="",l=!0,c,h;return{display:function(e,t){p(),a=e,f=t,y()},next:function(){v(1)},prev:function(){v(-1)},pageUp:function(){u!=0&&u-8<0?v(-u):v(-8)},pageDown:function(){u!=o.size()-1&&u+8>o.size()?v(o.size()-1-u):v(8)},hide:function(){c&&c.hide(),o&&o.removeClass(s.ACTIVE),u=-1},visible:function(){return c&&c.is(":visible")},current:function(){return this.visible()&&(o.filter("."+s.ACTIVE)[0]||t.selectFirst&&o[0])},show:function(){var r=e(n).offset();c.css({width:typeof t.width=="string"||t.width>0?t.width:e(n).width(),top:r.top+n.offsetHeight,left:r.left}).show();if(t.scroll){h.scrollTop(0),h.css({maxHeight:t.scrollHeight,overflow:"auto"});if(navigator.userAgent.match(/msie/i)&&typeof document.body.style.maxHeight=="undefined"){var i=0;o.each(function(){i+=this.offsetHeight});var s=i>t.scrollHeight;h.css("height",s?t.scrollHeight:i),s||o.width(h.width()-parseInt(o.css("padding-left"))-parseInt(o.css("padding-right")))}}},selected:function(){var t=o&&o.filter("."+s.ACTIVE).removeClass(s.ACTIVE);return t&&t.length&&e.data(t[0],"ac_data")},emptyList:function(){h&&h.empty()},unbind:function(){c&&c.remove()}}},e.fn.selection=function(e,t){if(e!==undefined)return this.each(function(){if(this.createTextRange){var n=this.createTextRange();t===undefined||e==t?(n.move("character",e),n.select()):(n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",t),n.select())}else this.setSelectionRange?this.setSelectionRange(e,t):this.selectionStart&&(this.selectionStart=e,this.selectionEnd=t)});var n=this[0];if(n.createTextRange){var r=document.selection.createRange(),i=n.value,s="<->",o=r.text.length;r.text=s;var u=n.value.indexOf(s);return n.value=i,this.selection(u,u+o),{start:u,end:u+o}}if(n.selectionStart!==undefined)return{start:n.selectionStart,end:n.selectionEnd}}}),timely.define("external_libs/geo_autocomplete",["jquery_timely","external_libs/jquery.autocomplete_geomod"],function(e){e.fn.extend({geo_autocomplete:function(t,n){return options=e.extend({},e.Autocompleter.defaults,{geocoder:t,mapwidth:100,mapheight:100,maptype:"terrain",mapkey:"ABQIAAAAbnvDoAoYOSW2iqoXiGTpYBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQNumU68AwGqjbSNF9YO8NokKst8w",mapsensor:!1,parse:function(t,n,r){var i=[];return t&&n&&n=="OK"&&e.each(t,function(t,n){if(n.geometry&&n.geometry.viewport){var s=n.formatted_address.split(","),o=s[0];e.each(s,function(t,n){if(n.toLowerCase().indexOf(r.toLowerCase())!=-1)return o=e.trim(n),!1}),i.push({data:n,value:o,result:o})}}),i},formatItem:function(e,t,n,r){var i="https://maps.google.com/maps/api/staticmap?visible="+e.geometry.viewport.getSouthWest().toUrlValue()+"|"+e.geometry.viewport.getNorthEast().toUrlValue()+"&size="+options.mapwidth+"x"+options.mapheight+"&maptype="+options.maptype+"&key="+options.mapkey+"&sensor="+(options.mapsensor?"true":"false"),s=e.formatted_address.replace(/,/gi,",<br/>");return'<img src="'+i+'" width="'+options.mapwidth+'" height="'+options.mapheight+'" /> '+s+'<br clear="both"/>'}},n),options.highlight=options.highlight||function(e){return e},options.formatMatch=options.formatMatch||options.formatItem,options.resultsClass="ai1ec-geo-ac-results-not-ready",this.each(function(){e(this).one("focus",function(){var t=setInterval(function(){var n=e(".ai1ec-geo-ac-results-not-ready");n.length&&(n.removeClass("ai1ec-geo-ac-results-not-ready").addClass("ai1ec-geo-ac-results").children("ul").addClass("ai1ec-dropdown-menu"),clearInterval(t))},500)}),new e.Autocompleter(this,options)})}})}),timely.define("scripts/add_new_event/event_location/gmaps_helper",["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/input_coordinates_utility_functions","external_libs/jquery.autocomplete_geomod","external_libs/geo_autocomplete"],function(e,t,n,r){var i,s,o,u,a,f,l=function(t){e("input.longitude").val(t.latLng.lng()),e("input.latitude").val(t.latLng.lat()),e("#ai1ec_input_coordinates:checked").length===0&&e("#ai1ec_input_coordinates").trigger("click")},c=function(){!navigator.geolocation||navigator.geolocation.getCurrentPosition(function(e){var t=r.check_if_address_or_coordinates_are_set();if(t===!1){var n=e.coords.latitude,i=e.coords.longitude;s=new google.maps.LatLng(n,i),a.setPosition(s),u.setCenter(s),u.setZoom(15),f=e}})},h=function(){n.disable_autocompletion||e("#ai1ec_address").geo_autocomplete(new google.maps.Geocoder,{selectFirst:!1,minChars:3,cacheLength:50,width:300,scroll:!0,scrollHeight:330,region:n.region}).result(function(e,t){t&&d(t)}).change(function(){if(e(this).val().length>0){var t=e(this).val();i.geocode({address:t,region:n.region},function(e,t){t===google.maps.GeocoderStatus.OK&&d(e[0])})}})},p=function(){i=new google.maps.Geocoder,s=new google.maps.LatLng(9.965,-83.327),o={zoom:0,mapTypeId:google.maps.MapTypeId.ROADMAP,center:s},t(function(){e("#ai1ec_map_canvas").length>0&&(u=new google.maps.Map(e("#ai1ec_map_canvas").get(0),o),a=new google.maps.Marker({map:u,draggable:!0}),google.maps.event.addListener(a,"dragend",l),a.setPosition(s),c(),h(),m())})},d=function(t){u.setCenter(t.geometry.location),u.setZoom(15),a.setPosition(t.geometry.location),e("#ai1ec_address").val(t.formatted_address),e("#ai1ec_latitude").val(t.geometry.location.lat()),e("#ai1ec_longitude").val(t.geometry.location.lng()),e("#ai1ec_input_coordinates").is(":checked")||e("#ai1ec_input_coordinates").click();var n="",r="",i="",s=0,o=0,f="";for(var l=0;l<t.address_components.length;l++)switch(t.address_components[l].types[0]){case"street_number":n=t.address_components[l].long_name;break;case"route":r=t.address_components[l].long_name;break;case"locality":i=t.address_components[l].long_name;break;case"administrative_area_level_1":f=t.address_components[l].long_name;break;case"postal_code":s=t.address_components[l].long_name;break;case"country":o=t.address_components[l].long_name}var c=n.length>0?n+" ":"";c+=r.length>0?r:"",s=s!==0?s:"",e("#ai1ec_city").val(i),e("#ai1ec_province").val(f),e("#ai1ec_postal_code").val(s),e("#ai1ec_country").val(o)},v=function(){var t=parseFloat(e("input.latitude").val()),n=parseFloat(e("input.longitude").val()),r=new google.maps.LatLng(t,n);u.setCenter(r),u.setZoom(15),a.setPosition(r)},m=function(){e("#ai1ec_input_coordinates:checked").length===0?(e("#ai1ec_table_coordinates").css({visibility:"hidden"}),e("#ai1ec_address").change()):v()},g=function(){return a},y=function(){return f};return{init_gmaps:p,ai1ec_update_map_from_coordinates:v,get_marker:g,get_position:y}}),timely.define("scripts/add_new_event/event_location/input_coordinates_event_handlers",["jquery_timely","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_location/gmaps_helper","ai1ec_config"],function(e,t,n,r){var i=function(t){e(this).is(":checked")?e(".ai1ec_box_map").addClass("ai1ec_box_map_visible").hide().slideDown("fast"):e(".ai1ec_box_map").slideUp("fast")},s=function(t){this.checked===!0?e("#ai1ec_table_coordinates").css({visibility:"visible"}):(e("#ai1ec_table_coordinates").css({visibility:"hidden"}),e("#ai1ec_table_coordinates input").val(""),e("div.ai1ec-error").remove())},o=function(e){t.ai1ec_convert_commas_to_dots_for_coordinates();var r=t.ai1ec_check_lat_long_ok_for_search(e);r===!0&&n.ai1ec_update_map_from_coordinates()};return{toggle_visibility_of_google_map_on_click:i,toggle_visibility_of_coordinate_fields_on_click:s,update_map_from_coordinates_on_blur:o}}),timely.define("scripts/add_new_event/event_date_time/date_time_utility_functions",["jquery_timely","ai1ec_config","libs/utils"],function(e,t,n){var r=n.get_ajax_url(),i=function(t,n,r,i,s,o){e(t).val(i),e("#ai1ec_repeat_box").modal("hide");var u=e.trim(e(n).text());u.lastIndexOf(":")===-1&&(u=u.substring(0,u.length-3),e(n).text(u+":")),e(s).attr("disabled",!1),e(r).fadeOut("fast",function(){e(this).text(o.message),e(this).fadeIn("fast")})},s=function(t,n,r,i){e("#ai1ec_repeat_box .ai1ec-alert-danger").text(r.message).removeClass("ai1ec-hide"),e(i).attr("disabled",!1),e(t).val("");var s=e.trim(e(n).text());s.lastIndexOf("...")===-1&&(s=s.substring(0,s.length-1),e(n).text(s+"...")),e(this).closest("tr").find(".ai1ec_rule_text").text()===""&&e(t).siblings("input:checkbox").removeAttr("checked")},o=function(t,n,r,i,s){e(document).on("click",t,function(){if(!e(n).is(":checked")){e(n).attr("checked",!0);var t=e.trim(e(r).text());t=t.substring(0,t.length-3),e(r).text(t+":")}return l(i,s),!1})},u=function(t,n,r,i,s){e(t).click(function(){if(e(this).is(":checked"))this.id==="ai1ec_repeat"&&e("#ai1ec_exclude").removeAttr("disabled"),l(i,s);else{this.id==="ai1ec_repeat"&&e("#ai1ec_exclude").attr("disabled",!0),e(n).text("");var t=e.trim(e(r).text());t=t.substring(0,t.length-1),e(r).text(t+"...")}})},a=function(t,n,r){if(e.trim(e(t).text())===""){e(n).removeAttr("checked"),e("#ai1ec_repeat").is(":checked")||e("#ai1ec_exclude").attr("disabled",!0);var i=e.trim(e(r).text());i.lastIndexOf("...")===-1&&(i=i.substring(0,i.length-1),e(r).text(i+"..."))}},f=function(){e("#ai1ec_count, #ai1ec_daily_count, #ai1ec_weekly_count, #ai1ec_monthly_count, #ai1ec_yearly_count").rangeinput({css:{input:"ai1ec-range",slider:"ai1ec-slider",progress:"ai1ec-progress",handle:"ai1ec-handle"}});var n={start_date_input:"#ai1ec_until-date-input",start_time:"#ai1ec_until-time",date_format:t.date_format,month_names:t.month_names,day_names:t.day_names,week_start_day:t.week_start_day,twentyfour_hour:t.twentyfour_hour,now:new Date(t.now*1e3)};e.inputdate(n)},l=function(t,n){var i=e("#ai1ec_repeat_box"),s=e(".ai1ec-loading",i);i.modal({backdrop:"static"}),e.post(r,t,function(e){e.error?(window.alert(e.message),i.modal("hide")):(s.addClass("ai1ec-hide").after(e.message),typeof n=="function"&&n())},"json")};return{show_repeat_tabs:l,init_modal_widgets:f,click_on_modal_cancel:a,click_on_checkbox:u,click_on_ics_rule_text:o,repeat_form_error:s,repeat_form_success:i}}),timely.define("external_libs/jquery.calendrical_timespan",["jquery_timely"],function(e){function l(){var e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function c(e,t){return typeof e=="string"&&(e=new Date(e)),typeof t=="string"&&(t=new Date(t)),e.getUTCDate()===t.getUTCDate()&&e.getUTCMonth()===t.getUTCMonth()&&e.getUTCFullYear()===t.getUTCFullYear()?!0:!1}function h(e,t){if(e instanceof Date)return h(e.getUTCFullYear(),e.getUTCMonth());if(t==1){var n=e%4==0&&(e%100!=0||e%400==0);return n?29:28}return t==3||t==5||t==8||t==10?30:31}function p(e){return new Date(e.getTime()+864e5)}function d(e){return new Date(e.getTime()-864e5)}function v(e,t){return t==11?new Date(e+1,0,1):new Date(e,t+1,1)}function m(t,n,r,i){var s=i.monthNames.split(","),o=e("<thead />"),u=e("<tr />").appendTo(o);e("<th />").addClass("monthCell").append(e('<a href="javascript:;">«</a>').addClass("prevMonth").mousedown(function(e){g(t,r==0?n-1:n,r==0?11:r-1,i),e.preventDefault()})).appendTo(u),e("<th />").addClass("monthCell").attr("colSpan",5).append(e('<a href="javascript:;">'+s[r]+" "+n+"</a>").addClass("monthName")).appendTo(u),e("<th />").addClass("monthCell").append(e('<a href="javascript:;">»</a>').addClass("nextMonth").mousedown(function(){g(t,r==11?n+1:n,r==11?0:r+1,i)})).appendTo(u);var a=i.dayNames.split(","),f=parseInt(i.weekStartDay),l=[];for(var c=0,h=a.length;c<h;c++)l[c]=a[(c+f)%h];var p=e("<tr />").appendTo(o);return e.each(l,function(t,n){e("<td />").addClass("dayName").append(n).appendTo(p)}),o}function g(t,n,r,i){i=i||{};var s=parseInt(i.weekStartDay),o=i.today?i.today:l();o.setHours(0),o.setMinutes(0);var u=new Date(n,r,1),a=v(n,r),f=Math.abs(o.getTimezoneOffset());f!=0&&(o.setHours(o.getHours()+f/60),o.setMinutes(o.getMinutes()+f%60),u.setHours(u.getHours()+f/60),u.setMinutes(u.getMinutes()+f%60),a.setHours(a.getHours()+f/60),a.setMinutes(a.getMinutes()+f%60));var h=a.getUTCDay()-s;h<0?h=Math.abs(h)-1:h=6-h;for(var g=0;g<h;g++)a=p(a);var y=e("<table />");m(t,n,r,i).appendTo(y);var b=e("<tbody />").appendTo(y),w=e("<tr />"),E=u.getUTCDay()-s;E<0&&(E=7+E);for(var g=0;g<E;g++)u=d(u);while(u<=a){var S=e("<td />").addClass("day").append(e('<a href="javascript:;">'+u.getUTCDate()+"</a>").click(function(){var e=u;return function(){i&&i.selectDate&&i.selectDate(e)}}())).appendTo(w),x=c(u,o),T=i.selected&&c(i.selected,u);x&&S.addClass("today"),T&&S.addClass("selected"),x&&T&&S.addClass("today_selected"),u.getUTCMonth()!=r&&S.addClass("nonMonth");var N=u.getUTCDay();(N+1)%7==s&&(b.append(w),w=e("<tr />")),u=p(u)}w.children().length?b.append(w):w.remove(),t.empty().append(y)}function y(t,n){var r=n.selection&&f(n.selection);r&&(r.minute=Math.floor(r.minute/15)*15);var i=n.startTime&&n.startTime.hour*60+n.startTime.minute,s,o=e("<ul />");for(var a=0;a<24;a++)for(var l=0;l<60;l+=15){if(i&&i>a*60+l)continue;(function(){var t=u(a,l,n.isoTime),f=t;if(i!=null){var c=a*60+l-i;c<60?f+=" ("+c+" min)":c==60?f+=" (1 hr)":f+=" ("+Math.floor(c/60)+" hr "+c%60+" min)"}var h=e("<li />").append(e('<a href="javascript:;">'+f+"</a>").click(function(){n&&n.selectTime&&n.selectTime(t)}).mousemove(function(){e("li.selected",o).removeClass("selected")})).appendTo(o);!s&&a==n.defaultHour&&(s=h),r&&r.hour==a&&r.minute==l&&(h.addClass("selected"),s=h)})()}s&&setTimeout(function(){t[0].scrollTop=s[0].offsetTop-s.height()*2},0),t.empty().append(o)}function b(e){e.addClass("error").fadeOut("normal",function(){e.val(e.data("timespan.stored")).removeClass("error").fadeIn("fast")})}function w(){e(this).data("timespan.stored",this.value)}function E(t,n,r,i,a,f,l,c,h,p){r.val(r.data("timespan.initial_value")),f.val(f.data("timespan.initial_value")),l.get(0).checked=l.data("timespan.initial_value");var d=s(r,p,0,15);n.val(u(d.getUTCHours(),d.getUTCMinutes(),c)),t.val(o(d,h));var v=s(f,d.getTime(),1,15);a.val(u(v.getUTCHours(),v.getUTCMinutes(),c)),l.get(0).checked&&v.setUTCDate(v.getUTCDate()-1),i.val(o(v,h)),t.each(w),n.each(w),i.each(w),a.each(w),l.trigger("change.timespan"),e("#ai1ec_instant_event").trigger("change.timespan")}var t={us:{pattern:/([\d]{1,2})\/([\d]{1,2})\/([\d]{4}|[\d]{2})/,format:"m/d/y",order:"middleEndian",zeroPad:!1},iso:{pattern:/([\d]{4}|[\d]{2})-([\d]{1,2})-([\d]{1,2})/,format:"y-m-d",order:"bigEndian",zeroPad:!0},dot:{pattern:/([\d]{1,2}).([\d]{1,2}).([\d]{4}|[\d]{2})/,format:"d.m.y",order:"littleEndian",zeroPad:!1},def:{pattern:/([\d]{1,2})\/([\d]{1,2})\/([\d]{4}|[\d]{2})/,format:"d/m/y",order:"littleEndian",zeroPad:!1}},n=function(e){return e<10?"0"+e:e},r=function(e,t){typeof t=="undefined"&&(t=!1);var r=e.getUTCFullYear()+"-"+n(e.getUTCMonth()+1)+"-"+n(e.getUTCDate());return t&&(r+="T"+n(e.getUTCHours())+":"+n(e.getUTCMinutes())+":00"),r},i=function(e,t){var n=e.val(),r=null;if(n.length<4)r=new Date(t);else{r=new Date(n);var i=n.split("T"),s=i[0].split("-"),o=i[1].split(":");r.setUTCFullYear(s[0],s[1]-1,s[2]),r.setUTCHours(o[0],o[1],o[2],0)}return r},s=function(e,t,n,r){return t+=n*36e5,t-=t%(r*6e4),i(e,t)},o=function(e,n,r){var i,s,o;typeof t[n]=="undefined"&&(n="def"),typeof r=="undefined"&&(r=!1),!0===r?(i=e.getFullYear().toString(),s=(e.getMonth()+1).toString(),o=e.getDate().toString()):(i=e.getUTCFullYear().toString(),s=(e.getUTCMonth()+1).toString(),o=e.getUTCDate().toString()),t[n].zeroPad&&(s.length==1&&(s="0"+s),o.length==1&&(o="0"+o));var u=t[n].format;return u=u.replace("d",o),u=u.replace("m",s),u=u.replace("y",i),u},u=function(e,t,n){var r=t;t<10&&(r="0"+t);if(n){var i=e;return i<10&&(i="0"+e),i+":"+r}var i=e%12;i==0&&(i=12);var s=e<12?"am":"pm";return i+":"+r+s},a=function(e,n){typeof t[n]=="undefined"&&(n="def");var r=e.match(t[n].pattern);if(!r||r.length!=4)return Date("invalid");switch(t[n].order){case"bigEndian":var i=r[3],s=r[2],o=r[1];break;case"littleEndian":var i=r[1],s=r[2],o=r[3];break;case"middleEndian":var i=r[2],s=r[1],o=r[3];break;default:var i=r[1],s=r[2],o=r[3]}return o.length==2&&(o=(new Date).getUTCFullYear().toString().substr(0,2)+o),new Date(s+"/"+i+"/"+o+" GMT")},f=function(e){var t=t=/(\d+)\s*[:\-\.,]\s*(\d+)\s*(am|pm)?/i.exec(e);if(t&&t.length>=3){var n=Number(t[1]),r=Number(t[2]);return n==12&&t[3]&&(n-=12),t[3]&&t[3].toLowerCase()=="pm"&&(n+=12),{hour:n,minute:r}}return null};e.fn.calendricalDate=function(t){return t=t||{},t.padding=t.padding||4,t.monthNames=t.monthNames||"January,February,March,April,May,June,July,August,September,October,November,December",t.dayNames=t.dayNames||"S,M,T,W,T,F,S",t.weekStartDay=t.weekStartDay||0,this.each(function(){var n=e(this),r,i=!1;n.bind("focus",function(){if(r)return;var s=n.position(),u=n.css("padding-left");r=e("<div />").addClass("calendricalDatePopup").mouseenter(function(){i=!0}).mouseleave(function(){i=!1}).mousedown(function(e){e.preventDefault()}).css({position:"absolute",left:s.left,top:s.top+n.height()+t.padding*2}),n.after(r);var f=a(n.val(),t.dateFormat);f.getUTCFullYear()||(f=t.today?t.today:l()),g(r,f.getUTCFullYear(),f.getUTCMonth(),{today:t.today,selected:f,monthNames:t.monthNames,dayNames:t.dayNames,weekStartDay:t.weekStartDay,selectDate:function(e){i=!1,n.val(o(e,t.dateFormat)),r.remove(),r=null;if(t.endDate){var s=a(t.endDate.val(),t.dateFormat);s>=f&&t.endDate.val(o(new Date(e.getTime()+s.getTime()-f.getTime()),t.dateFormat))}}})}).blur(function(){if(i){r&&n.focus();return}if(!r)return;r.remove(),r=null})})},e.fn.calendricalDateRange=function(t){return this.length>=2&&(e(this[0]).calendricalDate(e.extend({endDate:e(this[1])},t)),e(this[1]).calendricalDate(t)),this},e.fn.calendricalDateRangeSingle=function(t){return this.length==1&&e(this).calendricalDate(t),this},e.fn.calendricalTime=function(t){return t=t||{},t.padding=t.padding||4,this.each(function(){var n=e(this),r,i=!1;n.bind("focus click",function(){if(r)return;var s=t.startTime;s&&t.startDate&&t.endDate&&!c(a(t.startDate.val()),a(t.endDate.val()))&&(s=!1);var o=n.position();r=e("<div />").addClass("calendricalTimePopup").mouseenter(function(){i=!0}).mouseleave(function(){i=!1}).mousedown(function(e){e.preventDefault()}).css({position:"absolute",left:o.left,top:o.top+n.height()+t.padding*2}),s&&r.addClass("calendricalEndTimePopup"),n.after(r);var u={selection:n.val(),selectTime:function(e){i=!1,n.val(e),r.remove(),r=null},isoTime:t.isoTime||!1,defaultHour:t.defaultHour!=null?t.defaultHour:8};s&&(u.startTime=f(t.startTime.val())),y(r,u)}).blur(function(){if(i){r&&n.focus();return}if(!r)return;r.remove(),r=null})})},e.fn.calendricalTimeRange=function(t){return this.length>=2&&(e(this[0]).calendricalTime(t),e(this[1]).calendricalTime(e.extend({startTime:e(this[0])},t))),this},e.fn.calendricalDateTimeRange=function(t){return this.length>=4&&(e(this[0]).calendricalDate(e.extend({endDate:e(this[2])},t)),e(this[1]).calendricalTime(t),e(this[2]).calendricalDate(t),e(this[3]).calendricalTime(e.extend({startTime:e(this[1]),startDate:e(this[0]),endDate:e(this[2])},t))),this};var S={allday:"#allday",start_date_input:"#start-date-input",start_time_input:"#start-time-input",start_time:"#start-time",end_date_input:"#end-date-input",end_time_input:"#end-time-input",end_time:"#end-time",twentyfour_hour:!1,date_format:"def",now:new Date},x={init:function(t){function C(){var e=a(s.val(),n.date_format).getTime()/1e3,t=f(l.val());e+=t.hour*3600+t.minute*60;var r=a(h.val(),n.date_format).getTime()/1e3,i=f(p.val());return r+=i.hour*3600+i.minute*60,r-e}function k(){var e=a(s.data("timespan.stored"),n.date_format),t=f(l.data("timespan.stored")),r=e.getTime()/1e3+t.hour*3600+t.minute*60+s.data("time_diff");return r=new Date(r*1e3),h.val(o(r,n.date_format)),p.val(u(r.getUTCHours(),r.getUTCMinutes(),n.twentyfour_hour)),!0}var n=e.extend({},S,t),i=e(n.allday),s=e(n.start_date_input),l=e(n.start_time_input),c=e(n.start_time),h=e(n.end_date_input),p=e(n.end_time_input),d=e(n.end_time),v=e("#ai1ec_instant_event"),m=h.add(p),g=s.add(n.end_date_input),y=l.add(n.end_time_input),x=s.add(n.start_time_input).add(n.end_date_input).add(n.end_time_input);x.bind("focus.timespan",w),v.bind("change.timespan",function(){this.checked?(m.closest("tr").fadeOut(),i.attr("disabled",!0)):(i.removeAttr("disabled"),m.closest("tr").fadeIn())});var T=new Date(n.now.getFullYear(),n.now.getMonth(),n.now.getDate()),N=!1;return i.bind("change.timespan",function(){this.checked?(y.fadeOut(),v.attr("disabled",!0)):(v.removeAttr("disabled"),y.fadeIn()),N||(N=!0,x.calendricalDateTimeRange({today:T,dateFormat:n.date_format,isoTime:n.twentyfour_hour,monthNames:n.month_names,dayNames:n.day_names,weekStartDay:n.week_start_day}))}).get().checked=!1,g.bind("blur.timespan",function(){var t=a(this.value,n.date_format);isNaN(t)?b(e(this)):(e(this).data("timespan.stored",this.value),e(this).val(o(t,n.date_format)))}),y.bind("blur.timespan",function(){var t=f(this.value);t?(e(this).data("timespan.stored",this.value),e(this).val(u(t.hour,t.minute,n.twentyfour_hour))):b(e(this))}),s.add(n.start_time_input).bind("focus.timespan",function(){s.data("time_diff",C())}).bind("blur.timespan",function(){s.data("time_diff")<0&&s.data("time_diff",900);var e=k()}),h.add(n.start_time_input).bind("blur.timespan",function(){if(C()<0){s.data("time_diff",900);var e=k()}}),s.closest("form").bind("submit.timespan",function(){var e=a(s.val(),n.date_format).getTime()/1e3;if(!isNaN(e)){if(!i.get(0).checked){var t=f(l.val());t?e+=t.hour*3600+t.minute*60:e=""}}else e="";e>0&&c.val(r(new Date(e*1e3),!0));var o=a(h.val(),n.date_format).getTime()/1e3;if(!isNaN(o))if(i.get(0).checked)o+=86400;else{var t=f(p.val());t?o+=t.hour*3600+t.minute*60:o=""}else o="";o>0&&d.val(r(new Date(o*1e3),!0))}),c.data("timespan.initial_value",c.val()),d.data("timespan.initial_value",d.val()),i.data("timespan.initial_value",i.get(0).checked),E(s,l,c,h,p,d,i,n.twentyfour_hour,n.date_format,n.now),this},reset:function(t){var n=e.extend({},S,t);return E(e(n.start_date_input),e(n.start_time_input),e(n.start_time),e(n.end_date_input),e(n.end_time_input),e(n.end_time),e(n.allday),n.twentyfour_hour,n.date_format,n.now),this},destroy:function(t){return t=e.extend({},S,t),e.each(t,function(t,n){e(n).unbind(".timespan")}),e(t.start_date_input).closest("form").unbind(".timespan"),this}};return e.timespan=function(t){if(x[t])return x[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return x.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timespan")},{formatDate:o,parseDate:a}}),timely.define("external_libs/bootstrap/button",["jquery_timely"],function(e){var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r)};t.DEFAULTS={loadingText:"loading..."},t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.is("input")?"val":"html",i=n.data();e+="Text",i.resetText||n.data("resetText",n[r]()),n[r](i[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass("ai1ec-"+t).attr(t,t):n.removeClass("ai1ec-"+t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="ai1ec-buttons"]'),t=!0;if(e.length){var n=this.$element.find("input");n.prop("type")==="radio"&&(n.prop("checked")&&this.$element.hasClass("ai1ec-active")?t=!1:e.find(".ai1ec-active").removeClass("ai1ec-active")),t&&n.prop("checked",!this.$element.hasClass("ai1ec-active")).trigger("change")}t&&this.$element.toggleClass("ai1ec-active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("bs.button"),s=typeof n=="object"&&n;i||r.data("bs.button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.bs.button.data-api","[data-toggle^=ai1ec-button]",function(t){var n=e(t.target);n.hasClass("ai1ec-btn")||(n=n.closest(".ai1ec-btn")),n.button("toggle"),t.preventDefault()})}),timely.define("scripts/add_new_event/event_date_time/date_time_event_handlers",["jquery_timely","ai1ec_config","scripts/add_new_event/event_date_time/date_time_utility_functions","external_libs/jquery.calendrical_timespan","libs/utils","external_libs/bootstrap/button"],function(e,t,n,r,i){var s=i.get_ajax_url(),o=function(){var t=e("#ai1ec_end option:selected").val();switch(t){case"0":e("#ai1ec_until_holder, #ai1ec_count_holder").collapse("hide");break;case"1":e("#ai1ec_until_holder").collapse("hide"),e("#ai1ec_count_holder").collapse("show");break;case"2":e("#ai1ec_count_holder").collapse("hide"),e("#ai1ec_until_holder").collapse("show")}},u=function(){e("#publish").trigger("click")},a=function(){var i=e(this),o="",u=e("#ai1ec_repeat_box .ai1ec-tab-pane.ai1ec-active"),a=u.data("freq");switch(a){case"daily":o+="FREQ=DAILY;";var f=e("#ai1ec_daily_count").val();f>1&&(o+="INTERVAL="+f+";");break;case"weekly":o+="FREQ=WEEKLY;";var l=e("#ai1ec_weekly_count").val();l>1&&(o+="INTERVAL="+l+";");var c=e('input[name="ai1ec_weekly_date_select"]:first').val(),h=e('#ai1ec_weekly_date_select > li:first > input[type="hidden"]:first').val();c.length>0&&(o+="WKST="+h+";BYday="+c+";");break;case"monthly":o+="FREQ=MONTHLY;";var p=e("#ai1ec_monthly_count").val(),d=e('input[name="ai1ec_monthly_type"]:checked').val();p>1&&(o+="INTERVAL="+p+";");var v=e('input[name="ai1ec_montly_date_select"]:first').val();if(v.length>0&&d==="bymonthday")o+="BYMONTHDAY="+v+";";else if(d==="byday"){var m=e("#ai1ec_monthly_byday_num").val(),g=e("#ai1ec_monthly_byday_weekday").val();o+="BYday="+m+g+";"}break;case"yearly":o+="FREQ=YEARLY;";var y=e("#ai1ec_yearly_count").val();y>1&&(o+="INTERVAL="+y+";");var b=e('input[name="ai1ec_yearly_date_select"]:first').val();b.length>0&&(o+="BYMONTH="+b+";")}var w=e("#ai1ec_end").val();if(w==="1")o+="COUNT="+e("#ai1ec_count").val()+";";else if(w==="2"){var E=e("#ai1ec_until-date-input").val();E=r.parseDate(E,t.date_format);var S=e("#ai1ec_start-time").val();S=r.parseDate(S,t.date_format),S=new Date(S);var x=E.getUTCDate(),T=E.getUTCMonth()+1,N=S.getUTCHours(),C=S.getUTCMinutes();T=T<10?"0"+T:T,x=x<10?"0"+x:x,N=N<10?"0"+N:N,C=C<10?"0"+C:C,E=E.getUTCFullYear()+""+T+x+"T235959Z",o+="UNTIL="+E+";"}var k={action:"ai1ec_rrule_to_text",rrule:o};i.button("loading").next().addClass("ai1ec-disabled"),e.post(s,k,function(t){t.error?(i.button("reset").next().removeClass("ai1ec-disabled"),"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_error("#ai1ec_rrule","#ai1ec_repeat_label",t,i):n.repeat_form_error("#ai1ec_exrule","#ai1ec_exclude_label",t,i)):"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_success("#ai1ec_rrule","#ai1ec_repeat_label","#ai1ec_repeat_text > a",o,i,t):n.repeat_form_success("#ai1ec_exrule","#ai1ec_exclude_label","#ai1ec_exclude_text > a",o,i,t)},"json")},f=function(){return e("#ai1ec_is_box_repeat").val()==="1"?n.click_on_modal_cancel("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label"):n.click_on_modal_cancel("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label"),e("#ai1ec_repeat_box").modal("hide"),!1},l=function(){e(this).is("#ai1ec_monthly_type_bymonthday")?(e("#ai1ec_repeat_monthly_byday").collapse("hide"),e("#ai1ec_repeat_monthly_bymonthday").collapse("show")):(e("#ai1ec_repeat_monthly_bymonthday").collapse("hide"),e("#ai1ec_repeat_monthly_byday").collapse("show"))},c=function(){var t=e(this),n=[],r=t.closest(".ai1ec-btn-group-grid"),i;t.toggleClass("ai1ec-active"),e("a",r).each(function(){var t=e(this);t.is(".ai1ec-active")&&(i=t.next().val(),n.push(i))}),r.next().val(n.join())},h=function(){n.click_on_ics_rule_text("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_ics_rule_text("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_repeat","#ai1ec_repeat_text > a","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_exclude","#ai1ec_exclude_text > a","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets)},p=function(t){var n=e(this).data("state")===undefined?!1:e(this).data("state");return e("#widgetCalendar").stop().animate({height:n?0:e("#widgetCalendar div.datepicker").get(0).offsetHeight},500),e(this).data("state",!n),!1},d=function(){e(".ai1ec-modal-content",this).not(".ai1ec-loading ").remove().end().removeClass("ai1ec-hide")};return{show_end_fields:o,trigger_publish:u,handle_click_on_apply_button:a,handle_click_on_cancel_modal:f,handle_checkbox_monthly_tab_modal:l,execute_pseudo_handlers:h,handle_animation_of_calendar_widget:p,handle_click_on_toggle_buttons:c,handle_modal_hide:d}}),timely.define("scripts/add_new_event/event_cost_helper",["jquery_timely","ai1ec_config"],function(e,t){var n=function(){return e("#ai1ec_is_free").is(":checked")},r=function(){return e("#ai1ec_cost").val()!==""},i=function(r){var i=e(this).parents("table:eq(0)"),s=e("#ai1ec_cost",i),o=t.label_a_buy_tickets_url;n()?(s.attr("value","").addClass("ai1ec-hidden"),o=t.label_a_rsvp_url):s.removeClass("ai1ec-hidden"),e("label[for=ai1ec_ticket_url]",i).text(o)};return{handle_change_is_free:i,check_is_free:n,check_is_price_entered:r}}),timely.define("external_libs/jquery.inputdate",["jquery_timely","external_libs/jquery.calendrical_timespan"],function(e,t){function n(e){e.addClass("error").fadeOut("normal",function(){e.val(e.data("timespan.stored")).removeClass("error").fadeIn("fast")})}function r(){e(this).data("timespan.stored",this.value)}function i(e,n,i,s,o){n.val(n.data("timespan.initial_value"));var u=parseInt(n.val());isNaN(parseInt(u))?u=new Date(o):u=new Date(parseInt(u)*1e3),e.val(t.formatDate(u,s)),e.each(r)}var s={start_date_input:"date-input",start_time:"time",twentyfour_hour:!1,date_format:"def",now:new Date},o={init:function(o){var u=e.extend({},s,o),a=e(u.start_date_input),f=e(u.start_time),l=a,c=a;return c.bind("focus.timespan",r),l.calendricalDate({today:new Date(u.now.getFullYear(),u.now.getMonth(),u.now.getDate()),dateFormat:u.date_format,monthNames:u.month_names,dayNames:u.day_names,weekStartDay:u.week_start_day}),l.bind("blur.timespan",function(){var r=t.parseDate(this.value,u.date_format);isNaN(r)?n(e(this)):(e(this).data("timespan.stored",this.value),e(this).val(t.formatDate(r,u.date_format)))}),a.bind("focus.timespan",function(){var e=t.parseDate(a.val(),u.date_format).getTime()/1e3}).bind("blur.timespan",function(){var e=t.parseDate(a.data("timespan.stored"),u.date_format)}),a.closest("form").bind("submit.timespan",function(){var e=t.parseDate(a.val(),u.date_format).getTime()/1e3;isNaN(e)&&(e=""),f.val(e)}),f.data("timespan.initial_value",f.val()),i(a,f,u.twentyfour_hour,u.date_format,u.now),this},reset:function(t){var n=e.extend({},s,t);return i(e(n.start_date_input),e(n.start_time),n.twentyfour_hour,n.date_format,n.now),this},destroy:function(t){return t=e.extend({},s,t),e.each(t,function(t,n){e(n).unbind(".timespan")}),e(t.start_date_input).closest("form").unbind(".timespan"),this}};e.inputdate=function(t){if(o[t])return o[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return o.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timespan")}}),timely.define("external_libs/jquery.tools",["jquery_timely"],function(e){function i(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function s(e,t){var n=parseInt(e.css(t),10);if(n)return n;var r=e[0].currentStyle;return r&&r.width&&parseInt(r.width,10)}function o(e){var t=e.data("events");return t&&t.onSlide}function u(t,n){function x(e,s,o,u){o===undefined?o=s/h*m:u&&(o-=n.min),g&&(o=Math.round(o/g)*g);if(s===undefined||g)s=o*h/m;if(isNaN(o))return r;s=Math.max(0,Math.min(s,h)),o=s/h*m;if(u||!f)o+=n.min;f&&(u?s=h-s:o=n.max-o),o=i(o,y);var a=e.type=="click";if(S&&l!==undefined&&!a){e.type="onSlide",E.trigger(e,[o,s]);if(e.isDefaultPrevented())return r}var c=a?n.speed:0,b=a?function(){e.type="change",E.trigger(e,[o])}:null;return f?(d.animate({top:s},c,b),n.progress&&v.animate({height:h-s+d.height()/2},c)):(d.animate({left:s},c,b),n.progress&&v.animate({width:s+d.width()/2},c)),l=o,p=s,t.val(o),r}function T(){f=n.vertical||s(a,"height")>s(a,"width"),f?(h=s(a,"height")-s(d,"height"),c=a.offset().top+h):(h=s(a,"width")-s(d,"width"),c=a.offset().left)}function N(){T(),r.setValue(n.value!==undefined?n.value:n.min)}var r=this,u=n.css,a=e("<div><div/><a href='#'/></div>").data("rangeinput",r),f,l,c,h,p;t.before(a);var d=a.addClass(u.slider).find("a").addClass(u.handle),v=a.find("div").addClass(u.progress);e.each("min,max,step,value".split(","),function(e,r){var i=t.attr(r);parseFloat(i)&&(n[r]=parseFloat(i,10))});var m=n.max-n.min,g=n.step=="any"?0:n.step,y=n.precision;y===undefined&&(y=g.toString().split("."),y=y.length===2?y[1].length:0);if(t.attr("type")=="range"){var b=t.clone().wrap("<div/>").parent().html(),w=e(b.replace(/type/i,"type=text data-orig-type"));w.val(n.value),t.replaceWith(w),t=w}t.addClass(u.input);var E=e(r).add(t),S=!0;e.extend(r,{getValue:function(){return l},setValue:function(t,n){return T(),x(n||e.Event("api"),undefined,t,!0)},getConf:function(){return n},getProgress:function(){return v},getHandle:function(){return d},getInput:function(){return t},step:function(t,i){i=i||e.Event();var s=n.step=="any"?1:n.step;r.setValue(l+s*(t||1),i)},stepUp:function(e){return r.step(e||1)},stepDown:function(e){return r.step(-e||-1)}}),e.each("onSlide,change".split(","),function(t,i){e.isFunction(n[i])&&e(r).on(i,n[i]),r[i]=function(t){return t&&e(r).on(i,t),r}}),d.drag({drag:!1}).on("dragStart",function(){T(),S=o(e(r))||o(t)}).on("drag",function(e,n,r){if(t.is(":disabled"))return!1;x(e,f?n:r)}).on("dragEnd",function(e){e.isDefaultPrevented()||(e.type="change",E.trigger(e,[l]))}).click(function(e){return e.preventDefault()}),a.click(function(e){if(t.is(":disabled")||e.target==d[0])return e.preventDefault();T();var n=f?d.height()/2:d.width()/2;x(e,f?h-c-n+e.pageY:e.pageX-c-n)}),n.keyboard&&t.keydown(function(n){if(t.attr("readonly"))return;var i=n.keyCode,s=e([75,76,38,33,39]).index(i)!=-1,o=e([74,72,40,34,37]).index(i)!=-1;if((s||o)&&!(n.shiftKey||n.altKey||n.ctrlKey))return s?r.step(i==33?10:1,n):o&&r.step(i==34?-10:-1,n),n.preventDefault()}),t.blur(function(t){var n=e(this).val();n!==l&&r.setValue(n,t)}),e.extend(t[0],{stepUp:r.stepUp,stepDown:r.stepDown}),N(),h||e(window).load(N)}e.tools=e.tools||{version:"1.2.7"};var t;t=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:!0,progress:!1,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var n,r;e.fn.drag=function(t){return document.ondragstart=function(){return!1},t=e.extend({x:!0,y:!0,drag:!0},t),n=n||e(document).on("mousedown mouseup",function(i){var s=e(i.target);if(i.type=="mousedown"&&s.data("drag")){var o=s.position(),u=i.pageX-o.left,a=i.pageY-o.top,f=!0;n.on("mousemove.drag",function(e){var n=e.pageX-u,i=e.pageY-a,o={};t.x&&(o.left=n),t.y&&(o.top=i),f&&(s.trigger("dragStart"),f=!1),t.drag&&s.css(o),s.trigger("drag",[i,n]),r=s}),i.preventDefault()}else try{r&&r.trigger("dragEnd")}finally{n.off("mousemove.drag"),r=null}}),this.data("drag",!0)},e.expr[":"].range=function(t){var n=t.getAttribute("type");return n&&n=="range"||!!e(t).filter("input").data("rangeinput")},e.fn.rangeinput=function(n){if(this.data("rangeinput"))return this;n=e.extend(!0,{},t.conf,n);var r;return this.each(function(){var t=new u(e(this),e.extend(!0,{},n)),i=t.getInput().data("rangeinput",t);r=r?r.add(i):i}),r?r:this}}),timely.define("external_libs/ai1ec_datepicker",["jquery_timely"],function(e){var t=function(){var t={},n={years:"datepickerViewYears",moths:"datepickerViewMonths",days:"datepickerViewDays"},i={wrapper:'<div class="datepicker"><div class="datepickerBorderT" /><div class="datepickerBorderB" /><div class="datepickerBorderL" /><div class="datepickerBorderR" /><div class="datepickerBorderTL" /><div class="datepickerBorderTR" /><div class="datepickerBorderBL" /><div class="datepickerBorderBR" /><div class="datepickerContainer"><table cellspacing="0" cellpadding="0"><tbody><tr></tr></tbody></table></div></div>',head:["<td>",'<table cellspacing="0" cellpadding="0">',"<thead>","<tr>",'<th class="datepickerGoPrev"><a href="#"><span><%=prev%></span></a></th>','<th colspan="6" class="datepickerMonth"><a href="#"><span></span></a></th>','<th class="datepickerGoNext"><a href="#"><span><%=next%></span></a></th>',"</tr>",'<tr class="datepickerDoW">',"<th><span><%=week%></span></th>","<th><span><%=day1%></span></th>","<th><span><%=day2%></span></th>","<th><span><%=day3%></span></th>","<th><span><%=day4%></span></th>","<th><span><%=day5%></span></th>","<th><span><%=day6%></span></th>","<th><span><%=day7%></span></th>","</tr>","</thead>","</table></td>"],space:'<td class="datepickerSpace"><div></div></td>',days:['<tbody class="datepickerDays">',"<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[0].week%></span></a></th>','<td class="<%=weeks[0].days[0].classname%>"><a href="#"><span><%=weeks[0].days[0].text%></span></a></td>','<td class="<%=weeks[0].days[1].classname%>"><a href="#"><span><%=weeks[0].days[1].text%></span></a></td>','<td class="<%=weeks[0].days[2].classname%>"><a href="#"><span><%=weeks[0].days[2].text%></span></a></td>','<td class="<%=weeks[0].days[3].classname%>"><a href="#"><span><%=weeks[0].days[3].text%></span></a></td>','<td class="<%=weeks[0].days[4].classname%>"><a href="#"><span><%=weeks[0].days[4].text%></span></a></td>','<td class="<%=weeks[0].days[5].classname%>"><a href="#"><span><%=weeks[0].days[5].text%></span></a></td>','<td class="<%=weeks[0].days[6].classname%>"><a href="#"><span><%=weeks[0].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[1].week%></span></a></th>','<td class="<%=weeks[1].days[0].classname%>"><a href="#"><span><%=weeks[1].days[0].text%></span></a></td>','<td class="<%=weeks[1].days[1].classname%>"><a href="#"><span><%=weeks[1].days[1].text%></span></a></td>','<td class="<%=weeks[1].days[2].classname%>"><a href="#"><span><%=weeks[1].days[2].text%></span></a></td>','<td class="<%=weeks[1].days[3].classname%>"><a href="#"><span><%=weeks[1].days[3].text%></span></a></td>','<td class="<%=weeks[1].days[4].classname%>"><a href="#"><span><%=weeks[1].days[4].text%></span></a></td>','<td class="<%=weeks[1].days[5].classname%>"><a href="#"><span><%=weeks[1].days[5].text%></span></a></td>','<td class="<%=weeks[1].days[6].classname%>"><a href="#"><span><%=weeks[1].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[2].week%></span></a></th>','<td class="<%=weeks[2].days[0].classname%>"><a href="#"><span><%=weeks[2].days[0].text%></span></a></td>','<td class="<%=weeks[2].days[1].classname%>"><a href="#"><span><%=weeks[2].days[1].text%></span></a></td>','<td class="<%=weeks[2].days[2].classname%>"><a href="#"><span><%=weeks[2].days[2].text%></span></a></td>','<td class="<%=weeks[2].days[3].classname%>"><a href="#"><span><%=weeks[2].days[3].text%></span></a></td>','<td class="<%=weeks[2].days[4].classname%>"><a href="#"><span><%=weeks[2].days[4].text%></span></a></td>','<td class="<%=weeks[2].days[5].classname%>"><a href="#"><span><%=weeks[2].days[5].text%></span></a></td>','<td class="<%=weeks[2].days[6].classname%>"><a href="#"><span><%=weeks[2].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[3].week%></span></a></th>','<td class="<%=weeks[3].days[0].classname%>"><a href="#"><span><%=weeks[3].days[0].text%></span></a></td>','<td class="<%=weeks[3].days[1].classname%>"><a href="#"><span><%=weeks[3].days[1].text%></span></a></td>','<td class="<%=weeks[3].days[2].classname%>"><a href="#"><span><%=weeks[3].days[2].text%></span></a></td>','<td class="<%=weeks[3].days[3].classname%>"><a href="#"><span><%=weeks[3].days[3].text%></span></a></td>','<td class="<%=weeks[3].days[4].classname%>"><a href="#"><span><%=weeks[3].days[4].text%></span></a></td>','<td class="<%=weeks[3].days[5].classname%>"><a href="#"><span><%=weeks[3].days[5].text%></span></a></td>','<td class="<%=weeks[3].days[6].classname%>"><a href="#"><span><%=weeks[3].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[4].week%></span></a></th>','<td class="<%=weeks[4].days[0].classname%>"><a href="#"><span><%=weeks[4].days[0].text%></span></a></td>','<td class="<%=weeks[4].days[1].classname%>"><a href="#"><span><%=weeks[4].days[1].text%></span></a></td>','<td class="<%=weeks[4].days[2].classname%>"><a href="#"><span><%=weeks[4].days[2].text%></span></a></td>','<td class="<%=weeks[4].days[3].classname%>"><a href="#"><span><%=weeks[4].days[3].text%></span></a></td>','<td class="<%=weeks[4].days[4].classname%>"><a href="#"><span><%=weeks[4].days[4].text%></span></a></td>','<td class="<%=weeks[4].days[5].classname%>"><a href="#"><span><%=weeks[4].days[5].text%></span></a></td>','<td class="<%=weeks[4].days[6].classname%>"><a href="#"><span><%=weeks[4].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[5].week%></span></a></th>','<td class="<%=weeks[5].days[0].classname%>"><a href="#"><span><%=weeks[5].days[0].text%></span></a></td>','<td class="<%=weeks[5].days[1].classname%>"><a href="#"><span><%=weeks[5].days[1].text%></span></a></td>','<td class="<%=weeks[5].days[2].classname%>"><a href="#"><span><%=weeks[5].days[2].text%></span></a></td>','<td class="<%=weeks[5].days[3].classname%>"><a href="#"><span><%=weeks[5].days[3].text%></span></a></td>','<td class="<%=weeks[5].days[4].classname%>"><a href="#"><span><%=weeks[5].days[4].text%></span></a></td>','<td class="<%=weeks[5].days[5].classname%>"><a href="#"><span><%=weeks[5].days[5].text%></span></a></td>','<td class="<%=weeks[5].days[6].classname%>"><a href="#"><span><%=weeks[5].days[6].text%></span></a></td>',"</tr>","</tbody>"],months:['<tbody class="<%=className%>">',"<tr>",'<td colspan="2"><a href="#"><span><%=data[0]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[1]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[2]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[3]%></span></a></td>',"</tr>","<tr>",'<td colspan="2"><a href="#"><span><%=data[4]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[5]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[6]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[7]%></span></a></td>',"</tr>","<tr>",'<td colspan="2"><a href="#"><span><%=data[8]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[9]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[10]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[11]%></span></a></td>',"</tr>","</tbody>"]},s={flat:!1,starts:1,prev:"◀",next:"▶",lastSel:!1,mode:"single",view:"days",calendars:1,format:"Y-m-d",position:"bottom",eventName:"click",onRender:function(){return{}},onChange:function(){return!0},onShow:function(){return!0},onBeforeShow:function(){return!0},onHide:function(){return!0},locale:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekMin:"wk"}},o=function(t){var n=e(t).data("datepicker"),s=e(t),o=Math.floor(n.calendars/2),u,f,l,c,h=0,p,d,v,m,g,y;s.find("td>table tbody").remove();for(var b=0;b<n.calendars;b++){u=new Date(n.current),u.addMonths(-o+b),y=s.find("table").eq(b+1);switch(y[0].className){case"datepickerViewDays":l=a(u,"B, Y");break;case"datepickerViewMonths":l=u.getFullYear();break;case"datepickerViewYears":l=u.getFullYear()-6+" - "+(u.getFullYear()+5)}y.find("thead tr:first th:eq(1) span").text(l),l=u.getFullYear()-6,f={data:[],className:"datepickerYears"};for(var w=0;w<12;w++)f.data.push(l+w);g=r(i.months.join(""),f),u.setDate(1),f={weeks:[],test:10},c=u.getMonth();var l=(u.getDay()-n.starts)%7;u.addDays(-(l+(l<0?7:0))),p=-1,h=0;while(h<42){v=parseInt(h/7,10),m=h%7,f.weeks[v]||(p=u.getWeekNumber(),f.weeks[v]={week:p,days:[]}),f.weeks[v].days[m]={text:u.getDate(),classname:[]},c!=u.getMonth()&&f.weeks[v].days[m].classname.push("datepickerNotInMonth"),u.getDay()==0&&f.weeks[v].days[m].classname.push("datepickerSunday"),u.getDay()==6&&f.weeks[v].days[m].classname.push("datepickerSaturday");var E=n.onRender(u),S=u.valueOf();(E.selected||n.date==S||e.inArray(S,n.date)>-1||n.mode=="range"&&S>=n.date[0]&&S<=n.date[1])&&f.weeks[v].days[m].classname.push("datepickerSelected"),E.disabled&&f.weeks[v].days[m].classname.push("datepickerDisabled"),E.className&&f.weeks[v].days[m].classname.push(E.className),f.weeks[v].days[m].classname=f.weeks[v].days[m].classname.join(" "),h++,u.addDays(1)}g=r(i.days.join(""),f)+g,f={data:n.locale.monthsShort,className:"datepickerMonths"},g=r(i.months.join(""),f)+g,y.append(g)}},u=function(e,t){if(e.constructor==Date)return new Date(e);var n=e.split(/\W+/),r=t.split(/\W+/),i,s,o,u,a,f=new Date;for(var l=0;l<n.length;l++)switch(r[l]){case"d":case"e":i=parseInt(n[l],10);break;case"m":s=parseInt(n[l],10)-1;break;case"Y":case"y":o=parseInt(n[l],10),o+=o>100?0:o<29?2e3:1900;break;case"H":case"I":case"k":case"l":u=parseInt(n[l],10);break;case"P":case"p":/pm/i.test(n[l])&&u<12?u+=12:/am/i.test(n[l])&&u>=12&&(u-=12);break;case"M":a=parseInt(n[l],10)}return new Date(o===undefined?f.getFullYear():o,s===undefined?f.getMonth():s,i===undefined?f.getDate():i,u===undefined?f.getHours():u,a===undefined?f.getMinutes():a,0)},a=function(e,t){var n=e.getMonth(),r=e.getDate(),i=e.getFullYear(),s=e.getWeekNumber(),o=e.getDay(),u={},a=e.getHours(),f=a>=12,l=f?a-12:a,c=e.getDayOfYear();l==0&&(l=12);var h=e.getMinutes(),p=e.getSeconds(),d=t.split(""),v;for(var m=0;m<d.length;m++){v=d[m];switch(d[m]){case"a":v=e.getDayName();break;case"A":v=e.getDayName(!0);break;case"b":v=e.getMonthName();break;case"B":v=e.getMonthName(!0);break;case"C":v=1+Math.floor(i/100);break;case"d":v=r<10?"0"+r:r;break;case"e":v=r;break;case"H":v=a<10?"0"+a:a;break;case"I":v=l<10?"0"+l:l;break;case"j":v=c<100?c<10?"00"+c:"0"+c:c;break;case"k":v=a;break;case"l":v=l;break;case"m":v=n<9?"0"+(1+n):1+n;break;case"M":v=h<10?"0"+h:h;break;case"p":case"P":v=f?"PM":"AM";break;case"s":v=Math.floor(e.getTime()/1e3);break;case"S":v=p<10?"0"+p:p;break;case"u":v=o+1;break;case"w":v=o;break;case"y":v=(""+i).substr(2,2);break;case"Y":v=i}d[m]=v}return d.join("")},f=function(e){if(Date.prototype.tempDate)return;Date.prototype.tempDate=null,Date.prototype.months=e.months,Date.prototype.monthsShort=e.monthsShort,Date.prototype.days=e.days,Date.prototype.daysShort=e.daysShort,Date.prototype.getMonthName=function(e){return this[e?"months":"monthsShort"][this.getMonth()]},Date.prototype.getDayName=function(e){return this[e?"days":"daysShort"][this.getDay()]},Date.prototype.addDays=function(e){this.setDate(this.getDate()+e),this.tempDate=this.getDate()},Date.prototype.addMonths=function(e){this.tempDate==null&&(this.tempDate=this.getDate()),this.setDate(1),this.setMonth(this.getMonth()+e),this.setDate(Math.min(this.tempDate,this.getMaxDays()))},Date.prototype.addYears=function(e){this.tempDate==null&&(this.tempDate=this.getDate()),this.setDate(1),this.setFullYear(this.getFullYear()+e),this.setDate(Math.min(this.tempDate,this.getMaxDays()))},Date.prototype.getMaxDays=function(){var e=new Date(Date.parse(this)),t=28,n;n=e.getMonth(),t=28;while(e.getMonth()==n)t++,e.setDate(t);return t-1},Date.prototype.getFirstDay=function(){var e=new Date(Date.parse(this));return e.setDate(1),e.getDay()},Date.prototype.getWeekNumber=function(){var e=new Date(this);e.setDate(e.getDate()-(e.getDay()+6)%7+3);var t=e.valueOf();return e.setMonth(0),e.setDate(4),Math.round((t-e.valueOf())/6048e5)+1},Date.prototype.getDayOfYear=function(){var e=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0),t=new Date(this.getFullYear(),0,0,0,0,0),n=e-t;return Math.floor(n/24*60*60*1e3)}},l=function(t){var n=e(t).data("datepicker"),r=e("#"+n.id);if(!n.extraHeight){var i=e(t).find("div");n.extraHeight=i.get(0).offsetHeight+i.get(1).offsetHeight,n.extraWidth=i.get(2).offsetWidth+i.get(3).offsetWidth}var s=r.find("table:first").get(0),o=s.offsetWidth,u=s.offsetHeight;r.css({width:o+n.extraWidth+"px",height:u+n.extraHeight+"px"}).find("div.datepickerContainer").css({width:o+"px",height:u+"px"})},c=function(t){e(t.target).is("span")&&(t.target=t.target.parentNode);var n=e(t.target);if(n.is("a")){t.target.blur();if(n.hasClass("datepickerDisabled"))return!1;var r=e(this).data("datepicker"),i=n.parent(),s=i.parent().parent().parent(),u=e("table",this).index(s.get(0))-1,f=new Date(r.current),l=!1,c=!1;if(i.is("th")){if(i.hasClass("datepickerWeek")&&r.mode=="range"&&!i.next().hasClass("datepickerDisabled")){var p=parseInt(i.next().text(),10);f.addMonths(u-Math.floor(r.calendars/2)),i.next().hasClass("datepickerNotInMonth")&&f.addMonths(p>15?-1:1),f.setDate(p),r.date[0]=f.setHours(0,0,0,0).valueOf(),f.setHours(23,59,59,0),f.addDays(6),r.date[1]=f.valueOf(),c=!0,l=!0,r.lastSel=!1}else if(i.hasClass("datepickerMonth")){f.addMonths(u-Math.floor(r.calendars/2));switch(s.get(0).className){case"datepickerViewDays":s.get(0).className="datepickerViewMonths",n.find("span").text(f.getFullYear());break;case"datepickerViewMonths":s.get(0).className="datepickerViewYears",n.find("span").text(f.getFullYear()-6+" - "+(f.getFullYear()+5));break;case"datepickerViewYears":s.get(0).className="datepickerViewDays",n.find("span").text(a(f,"B, Y"))}}else if(i.parent().parent().is("thead")){switch(s.get(0).className){case"datepickerViewDays":r.current.addMonths(i.hasClass("datepickerGoPrev")?-1:1);break;case"datepickerViewMonths":r.current.addYears(i.hasClass("datepickerGoPrev")?-1:1);break;case"datepickerViewYears":r.current.addYears(i.hasClass("datepickerGoPrev")?-12:12)}c=!0}}else if(i.is("td")&&!i.hasClass("datepickerDisabled")){switch(s.get(0).className){case"datepickerViewMonths":r.current.setMonth(s.find("tbody.datepickerMonths td").index(i)),r.current.setFullYear(parseInt(s.find("thead th.datepickerMonth span").text(),10)),r.current.addMonths(Math.floor(r.calendars/2)-u),s.get(0).className="datepickerViewDays";break;case"datepickerViewYears":r.current.setFullYear(parseInt(n.text(),10)),s.get(0).className="datepickerViewMonths";break;default:var p=parseInt(n.text(),10);f.addMonths(u-Math.floor(r.calendars/2)),i.hasClass("datepickerNotInMonth")&&f.addMonths(p>15?-1:1),f.setDate(p);switch(r.mode){case"multiple":p=f.setHours(0,0,0,0).valueOf(),e.inArray(p,r.date)>-1?e.each(r.date,function(e,t){if(t==p)return r.date.splice(e,1),!1}):r.date.push(p);break;case"range":r.lastSel||(r.date[0]=f.setHours(0,0,0,0).valueOf()),p=f.setHours(23,59,59,0).valueOf(),p<r.date[0]?(r.date[1]=r.date[0]+86399e3,r.date[0]=p-86399e3):r.date[1]=p,r.lastSel=!r.lastSel;break;default:r.date=f.valueOf()}}c=!0,l=!0}c&&o(this),l&&r.onChange.apply(this,h(r))}return!1},h=function(t){var n;return t.mode=="single"?(n=new Date(t.date),[a(n,t.format),n,t.el]):(n=[[],[],t.el],e.each(t.date,function(e,r){var i=new Date(r);n[0].push(a(i,t.format)),n[1].push(i)}),n)},p=function(){var e=document.compatMode=="CSS1Compat";return{l:window.pageXOffset||(e?document.documentElement.scrollLeft:document.body.scrollLeft),t:window.pageYOffset||(e?document.documentElement.scrollTop:document.body.scrollTop),w:window.innerWidth||(e?document.documentElement.clientWidth:document.body.clientWidth),h:window.innerHeight||(e?document.documentElement.clientHeight:document.body.clientHeight)}},d=function(e,t,n){if(e==t)return!0;if(e.contains)return e.contains(t);if(e.compareDocumentPosition)return!!(e.compareDocumentPosition(t)&16);var r=t.parentNode;while(r&&r!=n){if(r==e)return!0;r=r.parentNode}return!1},v=function(t){var n=e("#"+e(this).data("datepickerId"));if(!n.is(":visible")){var r=n.get(0);o(r);var i=n.data("datepicker");i.onBeforeShow.apply(this,[n.get(0)]);var s=e(this).offset(),u=p(),a=s.top,f=s.left,c=e.curCSS(r,"display");n.css({visibility:"hidden",display:"block"}),l(r);switch(i.position){case"top":a-=r.offsetHeight;break;case"left":f-=r.offsetWidth;break;case"right":f+=this.offsetWidth;break;case"bottom":a+=this.offsetHeight}a+r.offsetHeight>u.t+u.h&&(a=s.top-r.offsetHeight),a<u.t&&(a=s.top+this.offsetHeight+r.offsetHeight),f+r.offsetWidth>u.l+u.w&&(f=s.left-r.offsetWidth),f<u.l&&(f=s.left+this.offsetWidth),n.css({visibility:"visible",display:"block",top:a+"px",left:f+"px"}),i.onShow.apply(this,[n.get(0)])!=0&&n.show(),e(document).bind("mousedown",{cal:n,trigger:this},m)}return!1},m=function(t){t.target!=t.data.trigger&&!d(t.data.cal.get(0),t.target,t.data.cal.get(0))&&(t.data.cal.data("datepicker").onHide.apply(this,[t.data.cal.get(0)])!=0&&t.data.cal.hide(),e(document).unbind("mousedown",m))};return{init:function(t){return t=e.extend({},s,t||{}),f(t.locale),t.calendars=Math.max(1,parseInt(t.calendars,10)||1),t.mode=/single|multiple|range/.test(t.mode)?t.mode:"single",this.each(function(){if(!e(this).data("datepicker")){t.el=this,t.date.constructor==String&&(t.date=u(t.date,t.format),t.date.setHours(0,0,0,0));if(t.mode!="single")if(t.date.constructor!=Array)t.date=[t.date.valueOf()],t.mode=="range"&&t.date.push((new Date(t.date[0])).setHours(23,59,59,0).valueOf());else{for(var s=0;s<t.date.length;s++)t.date[s]=u(t.date[s],t.format).setHours(0,0,0,0).valueOf();t.mode=="range"&&(t.date[1]=(new Date(t.date[1])).setHours(23,59,59,0).valueOf())}else t.date=t.date.valueOf();t.current?t.current=u(t.current,t.format):t.current=new Date,t.current.setDate(1),t.current.setHours(0,0,0,0);var a="datepicker_"+parseInt(Math.random()*1e3),f;t.id=a,e(this).data("datepickerId",t.id);var h=e(i.wrapper).attr("id",a).bind("click",c).data("datepicker",t);t.className&&h.addClass(t.className);var p="";for(var s=0;s<t.calendars;s++)f=t.starts,s>0&&(p+=i.space),p+=r(i.head.join(""),{week:t.locale.weekMin,prev:t.prev,next:t.next,day1:t.locale.daysMin[f++%7],day2:t.locale.daysMin[f++%7],day3:t.locale.daysMin[f++%7],day4:t.locale.daysMin[f++%7],day5:t.locale.daysMin[f++%7],day6:t.locale.daysMin[f++%7],day7:t.locale.daysMin[f++%7]});h.find("tr:first").append(p).find("table").addClass(n[t.view]),o(h.get(0)),t.flat?(h.appendTo(this).show().css("position","relative"),l(h.get(0))):(h.appendTo(document.body),e(this).bind(t.eventName,v))}})},showPicker:function(){return this.each(function(){e(this).data("datepickerId")&&v.apply(this)})},hidePicker:function(){return this.each(function(){e(this).data("datepickerId")&&e("#"+e(this).data("datepickerId")).hide()})},setDate:function(t,n){return this.each(function(){if(e(this).data("datepickerId")){var r=e("#"+e(this).data("datepickerId")),i=r.data("datepicker");i.date=t,i.date.constructor==String&&(i.date=u(i.date,i.format),i.date.setHours(0,0,0,0));if(i.mode!="single")if(i.date.constructor!=Array)i.date=[i.date.valueOf()],i.mode=="range"&&i.date.push((new Date(i.date[0])).setHours(23,59,59,0).valueOf());else{for(var s=0;s<i.date.length;s++)i.date[s]=u(i.date[s],i.format).setHours(0,0,0,0).valueOf();i.mode=="range"&&(i.date[1]=(new Date(i.date[1])).setHours(23,59,59,0).valueOf())}else i.date=i.date.valueOf();n&&(i.current=new Date(i.mode!="single"?i.date[0]:i.date)),o(r.get(0))}})},getDate:function(t){if(this.size()>0)return h(e("#"+e(this).data("datepickerId")).data("datepicker"))[t?0:1]},clear:function(){return this.each(function(){if(e(this).data("datepickerId")){var t=e("#"+e(this).data("datepickerId")),n=t.data("datepicker");n.mode!="single"&&(n.date=[],o(t.get(0)))}})},fixLayout:function(){return this.each(function(){if(e(this).data("datepickerId")){var t=e("#"+e(this).data("datepickerId")),n=t.data("datepicker");n.flat&&l(t.get(0))}})}}}();e.fn.extend({DatePicker:t.init,DatePickerHide:t.hidePicker,DatePickerShow:t.showPicker,DatePickerSetDate:t.setDate,DatePickerGetDate:t.getDate,DatePickerClear:t.clear,DatePickerLayout:t.fixLayout});var n={},r=function(e,t){var i=/\W/.test(e)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join(" ").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split(" ").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):n[e]=n[e]||r(document.getElementById(e).innerHTML);return t?i(t):i}}),timely.define("external_libs/bootstrap/transition",["jquery_timely"],function(e){function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(e.support.transition.end,function(){n=!0});var i=function(){n||e(r).trigger(e.support.transition.end)};return setTimeout(i,t),this},e(function(){e.support.transition=t()})}),timely.define("external_libs/bootstrap/collapse",["jquery_timely"],function(e){var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r),this.transitioning=null,this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){var e=this.$element.hasClass("ai1ec-width");return e?"width":"height"},t.prototype.show=function(){if(this.transitioning||this.$element.hasClass("ai1ec-in"))return;var t=e.Event("show.bs.collapse");this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.$parent&&this.$parent.find("> .ai1ec-panel > .ai1ec-in");if(n&&n.length){var r=n.data("bs.collapse");if(r&&r.transitioning)return;n.collapse("hide"),r||n.data("bs.collapse",null)}var i=this.dimension();this.$element.removeClass("ai1ec-collapse").addClass("ai1ec-collapsing")[i](0),this.transitioning=1;var s=function(){this.$element.removeClass("ai1ec-collapsing").addClass("ai1ec-in")[i]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return s.call(this);var o=e.camelCase(["scroll",i].join("-"));this.$element.one(e.support.transition.end,e.proxy(s,this)).emulateTransitionEnd(350)[i](this.$element[0][o])},t.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("ai1ec-in"))return;var t=e.Event("hide.bs.collapse");this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("ai1ec-collapsing").removeClass("ai1ec-collapse").removeClass("ai1ec-in"),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("ai1ec-collapsing").addClass("ai1ec-collapse")};if(!e.support.transition)return r.call(this);this.$element[n](0).one(e.support.transition.end,e.proxy(r,this)).emulateTransitionEnd(350)},t.prototype.toggle=function(){this[this.$element.hasClass("ai1ec-in")?"hide":"show"]()};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("bs.collapse"),s=e.extend({},t.DEFAULTS,r.data(),typeof n=="object"&&n);i||r.data("bs.collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.bs.collapse.data-api","[data-toggle=ai1ec-collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i),o=s.data("bs.collapse"),u=o?"toggle":n.data(),a=n.attr("data-parent"),f=a&&e(a);if(!o||!o.transitioning)f&&f.find('[data-toggle=ai1ec-collapse][data-parent="'+a+'"]').not(n).addClass("ai1ec-collapsed"),n[s.hasClass("ai1ec-in")?"addClass":"removeClass"]("ai1ec-collapsed");s.collapse(u)})}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("external_libs/bootstrap/alert",["jquery_timely"],function(e){var t='[data-dismiss="ai1ec-alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("ai1ec-alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("ai1ec-in"),e.support.transition&&i.hasClass("ai1ec-fade")?i.one(e.support.transition.end,s).emulateTransitionEnd(150):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}),timely.define("scripts/add_new_event",["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/gmaps_helper","scripts/add_new_event/event_location/input_coordinates_event_handlers","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_date_time/date_time_event_handlers","scripts/add_new_event/event_cost_helper","external_libs/jquery.calendrical_timespan","external_libs/jquery.inputdate","external_libs/jquery.tools","external_libs/ai1ec_datepicker","external_libs/bootstrap/transition","external_libs/bootstrap/collapse","external_libs/bootstrap/modal","external_libs/bootstrap/alert","external_libs/bootstrap/tab"],function(e,t,n,r,i,s,o,u,a){var f=function(){var t=new Date(n.now*1e3),r={allday:"#ai1ec_all_day_event",start_date_input:"#ai1ec_start-date-input",start_time_input:"#ai1ec_start-time-input",start_time:"#ai1ec_start-time",end_date_input:"#ai1ec_end-date-input",end_time_input:"#ai1ec_end-time-input",end_time:"#ai1ec_end-time",date_format:n.date_format,month_names:n.month_names,day_names:n.day_names,week_start_day:n.week_start_day,twentyfour_hour:n.twentyfour_hour,now:t};e.timespan(r);var i=e("#ai1ec_exdate").val(),s=null,o=!1,u;if(i.length>=8){s=[];var f=[];e.each(i.split(","),function(e,t){var r=t.slice(0,8),i=r.substr(0,4),o=r.substr(4,2);u=r.substr(6,2),o=o.charAt(0)==="0"?"0"+(parseInt(o.charAt(1),10)-1):parseInt(o,10)-1,s.push(new Date(i,o,u)),f.push(a.formatDate(new Date(i,o,u),n.date_format,!0))}),e("#widgetField span:first").html(f.join(", "))}else s=new Date(n.now*1e3),o=!0;e("#widgetCalendar").DatePicker({flat:!0,calendars:3,mode:"multiple",start:1,date:s,onChange:function(t){t=t.toString();if(t.length>=8){var r="",i=[];e.each(t.split(","),function(e,t){i.push(a.formatDate(new Date(t),n.date_format)),r+=t.replace(/-/g,"")+"T000000Z,"}),e("#widgetField span").html(i.join(", ")),r=r.slice(0,r.length-1),e("#ai1ec_exdate").val(r)}else e("#ai1ec_exdate").val("")}}),o&&e("#widgetCalendar").DatePickerClear(),e("#widgetCalendar div.datepicker").css("position","absolute")},l=function(){e(".ai1ec-panel-collapse").on("hide",function(){e(this).parent().removeClass("ai1ec-overflow-visible")}),e(".ai1ec-panel-collapse").on("shown",function(){var t=e(this);window.setTimeout(function(){t.parent().addClass("ai1ec-overflow-visible")},350)})},c=function(){f(),timely.require(["libs/gmaps"],function(e){e(r.init_gmaps)})},h=function(t,n){window.alert(n),t.preventDefault(),e("#publish, #ai1ec_bottom_publish").removeClass("button-primary-disabled"),e("#publish, #ai1ec_bottom_publish").siblings("#ajax-loading, .spinner").css("visibility","hidden")},p=function(t){s.ai1ec_check_lat_long_fields_filled_when_publishing_event(t)===!0&&(s.ai1ec_convert_commas_to_dots_for_coordinates(),s.ai1ec_check_lat_long_ok_for_search(t)),e("#ai1ec_ticket_url, #ai1ec_contact_url").each(function(){var e=this.value;if(""!==e){var r=/(http|https):\/\//;r.test(e)||h(t,n.url_not_valid)}})},d=function(){e("#ai1ec_google_map").click(i.toggle_visibility_of_google_map_on_click),e("#ai1ec_input_coordinates").change(i.toggle_visibility_of_coordinate_fields_on_click),e("#post").submit(p),e("input.coordinates").blur(i.update_map_from_coordinates_on_blur),e("#ai1ec_bottom_publish").on("click",o.trigger_publish),e(document).on("change","#ai1ec_end",o.show_end_fields).on("click","#ai1ec_repeat_apply",o.handle_click_on_apply_button).on("click","#ai1ec_repeat_cancel",o.handle_click_on_cancel_modal).on("click","#ai1ec_monthly_type_bymonthday, #ai1ec_monthly_type_byday",o.handle_checkbox_monthly_tab_modal).on("click",".ai1ec-btn-group-grid a",o.handle_click_on_toggle_buttons),e("#ai1ec_repeat_box").on("hidden.bs.modal",o.handle_modal_hide),o.execute_pseudo_handlers(),e("#widgetField > a, #widgetField > span, #ai1ec_exclude_date_label").on("click",o.handle_animation_of_calendar_widget),e("#ai1ec_is_free").on("change",u.handle_change_is_free)},v=function(){e("#ai1ec_event").insertAfter("#titlediv"),e("#post").addClass("ai1ec-visible")},m=function(){c(),t(function(){l(),v(),d()})};return{start:m}}),timely.require(["scripts/add_new_event"],function(e){e.start()}),timely.define("pages/add_new_event",function(){});
|
| 118 |
* limitations under the License.
|
| 119 |
* ======================================================================== */
|
| 120 |
|
| 121 |
+
timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("scripts/add_new_event/event_location/input_coordinates_utility_functions",["jquery_timely","ai1ec_config","libs/utils"],function(e,t,n){var r=function(){e("#ai1ec_input_coordinates:checked").length>0&&e("#ai1ec_table_coordinates input.coordinates").each(function(){this.value=n.convert_comma_to_dot(this.value)})},i=function(t,n){var r=e("<div />",{text:n,"class":"ai1ec-error"});e(t).after(r)},s=function(t,n){t.target.id==="post"&&(t.stopImmediatePropagation(),t.preventDefault(),e("#publish").removeClass("button-primary-disabled"),e("#publish").siblings(".spinner").css("visibility","hidden")),e(n).focus()},o=function(){var t=n.field_has_value("ai1ec_address"),r=!0;return e(".coordinates").each(function(){var e=n.field_has_value(this.id);e||(r=!1)}),t||r},u=function(n){var r=!0,o=!1;return e("#ai1ec_input_coordinates:checked").length>0&&(e("div.ai1ec-error").remove(),e("#ai1ec_table_coordinates input.coordinates").each(function(){var n=e(this).hasClass("latitude"),s=n?t.error_message_not_entered_lat:t.error_message_not_entered_long;this.value===""&&(r=!1,o===!1&&(o=this),i(this,s))})),r===!1&&s(n,o),r},a=function(r){if(e("#ai1ec_input_coordinates:checked").length===1){e("div.ai1ec-error").remove();var o=!0,u=!1,a=!1;return e("#ai1ec_table_coordinates input.coordinates").each(function(){if(this.value===""){a=!0;return}var r=e(this).hasClass("latitude"),s=r?t.error_message_not_valid_lat:t.error_message_not_valid_long;n.is_valid_coordinate(this.value,r)||(o=!1,u===!1&&(u=this),i(this,s))}),o===!1&&s(r,u),a===!0&&(o=!1),o}};return{ai1ec_convert_commas_to_dots_for_coordinates:r,ai1ec_show_error_message_after_element:i,check_if_address_or_coordinates_are_set:o,ai1ec_check_lat_long_fields_filled_when_publishing_event:u,ai1ec_check_lat_long_ok_for_search:a}}),timely.define("external_libs/jquery.autocomplete_geomod",["jquery_timely"],function(e){e.fn.extend({autocomplete:function(t,n){var r=typeof t=="string";return n=e.extend({},e.Autocompleter.defaults,{url:r?t:null,data:r?null:t,delay:r?e.Autocompleter.defaults.delay:10,max:n&&!n.scroll?10:150},n),n.highlight=n.highlight||function(e){return e},n.formatMatch=n.formatMatch||n.formatItem,this.each(function(){new e.Autocompleter(this,n)})},result:function(e){return this.bind("result",e)},search:function(e){return this.trigger("search",[e])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(e){return this.trigger("setOptions",[e])},unautocomplete:function(){return this.trigger("unautocomplete")}}),e.Autocompleter=function(t,n){function d(){var r=h.selected();if(!r)return!1;var s=r.result;o=s;if(n.multiple){var u=m(i.val());if(u.length>1){var a=n.multipleSeparator.length,f=e(t).selection().start,l,c=0;e.each(u,function(e,t){c+=t.length;if(f<=c)return l=e,!1;c+=a}),u[l]=s,s=u.join(n.multipleSeparator)}s+=n.multipleSeparator}return i.val(s),w(),i.trigger("result",[r.data,r.value]),!0}function v(e,t){if(f==r.DEL){h.hide();return}var s=i.val();if(!t&&s==o)return;o=s,s=g(s),s.length>=n.minChars?(i.addClass(n.loadingClass),n.matchCase||(s=s.toLowerCase()),S(s,E,w)):(T(),h.hide())}function m(t){return t?n.multiple?e.map(t.split(n.multipleSeparator),function(n){return e.trim(t).length?e.trim(n):null}):[e.trim(t)]:[""]}function g(r){if(!n.multiple)return r;var i=m(r);if(i.length==1)return i[0];var s=e(t).selection().start;return s==r.length?i=m(r):i=m(r.replace(r.substring(s),"")),i[i.length-1]}function y(s,u){n.autoFill&&g(i.val()).toLowerCase()==s.toLowerCase()&&f!=r.BACKSPACE&&(i.val(i.val()+u.substring(g(o).length)),e(t).selection(o.length,o.length+u.length))}function b(){clearTimeout(s),s=setTimeout(w,200)}function w(){var e=h.visible();h.hide(),clearTimeout(s),T(),n.mustMatch&&i.search(function(e){if(!e)if(n.multiple){var t=m(i.val()).slice(0,-1);i.val(t.join(n.multipleSeparator)+(t.length?n.multipleSeparator:""))}else i.val(""),i.trigger("result",null)})}function E(e,t){t&&t.length&&a?(T(),h.display(t,e),y(e,t[0].value),h.show()):w()}function S(r,i,s){n.matchCase||(r=r.toLowerCase());var o=u.load(r);if(o&&o.length)i(r,o);else if(n.geocoder){var a=g(r),f={address:a};n.region&&(f.region=n.region),n.geocoder.geocode(f,function(e,t){var s=n.parse(e,t,a);u.add(r,s),i(r,s)})}else if(typeof n.url=="string"&&n.url.length>0){var l={timestamp:+(new Date)};e.each(n.extraParams,function(e,t){l[e]=typeof t=="function"?t():t}),e.ajax({mode:"abort",port:"autocomplete"+t.name,dataType:n.dataType,url:n.url,data:e.extend({q:g(r),limit:n.max},l),success:function(e){var t=n.parse&&n.parse(e)||x(e);u.add(r,t),i(r,t)}})}else h.emptyList(),s(r)}function x(t){var r=[],i=t.split("\n");for(var s=0;s<i.length;s++){var o=e.trim(i[s]);o&&(o=o.split("|"),r[r.length]={data:o,value:o[0],result:n.formatResult&&n.formatResult(o,o[0])||o[0]})}return r}function T(){i.removeClass(n.loadingClass)}var r={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},i=e(t).attr("autocomplete","off").addClass(n.inputClass),s,o="",u=e.Autocompleter.Cache(n),a=0,f,l=navigator.userAgent.match(/opera/i),c={mouseDownOnSelect:!1},h=e.Autocompleter.Select(n,t,d,c),p;l&&e(t.form).bind("submit.autocomplete",function(){if(p)return p=!1,!1}),i.bind((l?"keypress":"keydown")+".autocomplete",function(t){a=1,f=t.keyCode;switch(t.keyCode){case r.UP:t.preventDefault(),h.visible()?h.prev():v(0,!0);break;case r.DOWN:t.preventDefault(),h.visible()?h.next():v(0,!0);break;case r.PAGEUP:t.preventDefault(),h.visible()?h.pageUp():v(0,!0);break;case r.PAGEDOWN:t.preventDefault(),h.visible()?h.pageDown():v(0,!0);break;case n.multiple&&e.trim(n.multipleSeparator)==","&&r.COMMA:case r.TAB:case r.RETURN:if(d())return t.preventDefault(),p=!0,!1;break;case r.ESC:h.hide();break;default:clearTimeout(s),s=setTimeout(v,n.delay)}}).focus(function(){a++}).blur(function(){a=0,c.mouseDownOnSelect||b()}).click(function(){a++>1&&!h.visible()&&v(0,!0)}).bind("search",function(){function n(e,n){var r;if(n&&n.length)for(var s=0;s<n.length;s++)if(n[s].result.toLowerCase()==e.toLowerCase()){r=n[s];break}typeof t=="function"?t(r):i.trigger("result",r&&[r.data,r.value])}var t=arguments.length>1?arguments[1]:null;e.each(m(i.val()),function(e,t){S(t,n,n)})}).bind("flushCache",function(){u.flush()}).bind("setOptions",function(){e.extend(n,arguments[1]),"data"in arguments[1]&&u.populate()}).bind("unautocomplete",function(){h.unbind(),i.unbind(),e(t.form).unbind(".autocomplete")})},e.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:!1,matchSubset:!0,matchContains:!1,cacheLength:10,max:100,mustMatch:!1,extraParams:{},selectFirst:!0,formatItem:function(e){return e[0]},formatMatch:null,autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",highlight:function(e,t){return e.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+t.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:!0,scrollHeight:180},e.Autocompleter.Cache=function(t){function i(e,n){t.matchCase||(e=e.toLowerCase());var r=e.indexOf(n);return t.matchContains=="word"&&(r=e.toLowerCase().search("\\b"+n.toLowerCase())),r==-1?!1:r==0||t.matchContains}function s(e,i){r>t.cacheLength&&u(),n[e]||r++,n[e]=i}function o(){if(!t.data)return!1;var n={},r=0;t.url||(t.cacheLength=1),n[""]=[];for(var i=0,o=t.data.length;i<o;i++){var u=t.data[i];u=typeof u=="string"?[u]:u;var a=t.formatMatch(u,i+1,t.data.length);if(a===!1)continue;var f=a.charAt(0).toLowerCase();n[f]||(n[f]=[]);var l={value:a,data:u,result:t.formatResult&&t.formatResult(u)||a};n[f].push(l),r++<t.max&&n[""].push(l)}e.each(n,function(e,n){t.cacheLength++,s(e,n)})}function u(){n={},r=0}var n={},r=0;return setTimeout(o,25),{flush:u,add:s,populate:o,load:function(s){if(!t.cacheLength||!r)return null;if(!t.url&&t.matchContains){var o=[];for(var u in n)if(u.length>0){var a=n[u];e.each(a,function(e,t){i(t.value,s)&&o.push(t)})}return o}if(n[s])return n[s];if(t.matchSubset)for(var f=s.length-1;f>=t.minChars;f--){var a=n[s.substr(0,f)];if(a){var o=[];return e.each(a,function(e,t){i(t.value,s)&&(o[o.length]=t)}),o}}return null}}},e.Autocompleter.Select=function(t,n,r,i){function p(){if(!l)return;c=e("<div/>").hide().addClass(t.resultsClass).css("position","absolute").appendTo(document.body),h=e("<ul/>").appendTo(c).mouseover(function(t){d(t).nodeName&&d(t).nodeName.toUpperCase()=="LI"&&(u=e("li",h).removeClass(s.ACTIVE).index(d(t)),e(d(t)).addClass(s.ACTIVE))}).click(function(t){return e(d(t)).addClass(s.ACTIVE),r(),n.focus(),!1}).mousedown(function(){i.mouseDownOnSelect=!0}).mouseup(function(){i.mouseDownOnSelect=!1}),t.width>0&&c.css("width",t.width),l=!1}function d(e){var t=e.target;while(t&&t.tagName!="LI")t=t.parentNode;return t?t:[]}function v(e){o.slice(u,u+1).removeClass(s.ACTIVE),m(e);var n=o.slice(u,u+1).addClass(s.ACTIVE);if(t.scroll){var r=0;o.slice(0,u).each(function(){r+=this.offsetHeight}),r+n[0].offsetHeight-h.scrollTop()>h[0].clientHeight?h.scrollTop(r+n[0].offsetHeight-h.innerHeight()):r<h.scrollTop()&&h.scrollTop(r)}}function m(e){u+=e,u<0?u=o.size()-1:u>=o.size()&&(u=0)}function g(e){return t.max&&t.max<e?t.max:e}function y(){h.empty();var n=g(a.length);for(var r=0;r<n;r++){if(!a[r])continue;var i=t.formatItem(a[r].data,r+1,n,a[r].value,f);if(i===!1)continue;var l=e("<li/>").html(t.highlight(i,f)).addClass(r%2==0?"ac_even":"ac_odd").appendTo(h)[0];e.data(l,"ac_data",a[r])}o=h.find("li"),t.selectFirst&&(o.slice(0,1).addClass(s.ACTIVE),u=0),e.fn.bgiframe&&h.bgiframe()}var s={ACTIVE:"ac_over"},o,u=-1,a,f="",l=!0,c,h;return{display:function(e,t){p(),a=e,f=t,y()},next:function(){v(1)},prev:function(){v(-1)},pageUp:function(){u!=0&&u-8<0?v(-u):v(-8)},pageDown:function(){u!=o.size()-1&&u+8>o.size()?v(o.size()-1-u):v(8)},hide:function(){c&&c.hide(),o&&o.removeClass(s.ACTIVE),u=-1},visible:function(){return c&&c.is(":visible")},current:function(){return this.visible()&&(o.filter("."+s.ACTIVE)[0]||t.selectFirst&&o[0])},show:function(){var r=e(n).offset();c.css({width:typeof t.width=="string"||t.width>0?t.width:e(n).width(),top:r.top+n.offsetHeight,left:r.left}).show();if(t.scroll){h.scrollTop(0),h.css({maxHeight:t.scrollHeight,overflow:"auto"});if(navigator.userAgent.match(/msie/i)&&typeof document.body.style.maxHeight=="undefined"){var i=0;o.each(function(){i+=this.offsetHeight});var s=i>t.scrollHeight;h.css("height",s?t.scrollHeight:i),s||o.width(h.width()-parseInt(o.css("padding-left"))-parseInt(o.css("padding-right")))}}},selected:function(){var t=o&&o.filter("."+s.ACTIVE).removeClass(s.ACTIVE);return t&&t.length&&e.data(t[0],"ac_data")},emptyList:function(){h&&h.empty()},unbind:function(){c&&c.remove()}}},e.fn.selection=function(e,t){if(e!==undefined)return this.each(function(){if(this.createTextRange){var n=this.createTextRange();t===undefined||e==t?(n.move("character",e),n.select()):(n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",t),n.select())}else this.setSelectionRange?this.setSelectionRange(e,t):this.selectionStart&&(this.selectionStart=e,this.selectionEnd=t)});var n=this[0];if(n.createTextRange){var r=document.selection.createRange(),i=n.value,s="<->",o=r.text.length;r.text=s;var u=n.value.indexOf(s);return n.value=i,this.selection(u,u+o),{start:u,end:u+o}}if(n.selectionStart!==undefined)return{start:n.selectionStart,end:n.selectionEnd}}}),timely.define("external_libs/geo_autocomplete",["jquery_timely","external_libs/jquery.autocomplete_geomod"],function(e){e.fn.extend({geo_autocomplete:function(t,n){return options=e.extend({},e.Autocompleter.defaults,{geocoder:t,mapwidth:100,mapheight:100,maptype:"terrain",mapkey:"ABQIAAAAbnvDoAoYOSW2iqoXiGTpYBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQNumU68AwGqjbSNF9YO8NokKst8w",mapsensor:!1,parse:function(t,n,r){var i=[];return t&&n&&n=="OK"&&e.each(t,function(t,n){if(n.geometry&&n.geometry.viewport){var s=n.formatted_address.split(","),o=s[0];e.each(s,function(t,n){if(n.toLowerCase().indexOf(r.toLowerCase())!=-1)return o=e.trim(n),!1}),i.push({data:n,value:o,result:o})}}),i},formatItem:function(e,t,n,r){var i="https://maps.google.com/maps/api/staticmap?visible="+e.geometry.viewport.getSouthWest().toUrlValue()+"|"+e.geometry.viewport.getNorthEast().toUrlValue()+"&size="+options.mapwidth+"x"+options.mapheight+"&maptype="+options.maptype+"&key="+options.mapkey+"&sensor="+(options.mapsensor?"true":"false"),s=e.formatted_address.replace(/,/gi,",<br/>");return'<img src="'+i+'" width="'+options.mapwidth+'" height="'+options.mapheight+'" /> '+s+'<br clear="both"/>'}},n),options.highlight=options.highlight||function(e){return e},options.formatMatch=options.formatMatch||options.formatItem,options.resultsClass="ai1ec-geo-ac-results-not-ready",this.each(function(){e(this).one("focus",function(){var t=setInterval(function(){var n=e(".ai1ec-geo-ac-results-not-ready");n.length&&(n.removeClass("ai1ec-geo-ac-results-not-ready").addClass("ai1ec-geo-ac-results").children("ul").addClass("ai1ec-dropdown-menu"),clearInterval(t))},500)}),new e.Autocompleter(this,options)})}})}),timely.define("scripts/add_new_event/event_location/gmaps_helper",["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/input_coordinates_utility_functions","external_libs/jquery.autocomplete_geomod","external_libs/geo_autocomplete"],function(e,t,n,r){var i,s,o,u,a,f,l=function(t){e("input.longitude").val(t.latLng.lng()),e("input.latitude").val(t.latLng.lat()),e("#ai1ec_input_coordinates:checked").length===0&&e("#ai1ec_input_coordinates").trigger("click")},c=function(){!navigator.geolocation||navigator.geolocation.getCurrentPosition(function(e){var t=r.check_if_address_or_coordinates_are_set();if(t===!1){var n=e.coords.latitude,i=e.coords.longitude;s=new google.maps.LatLng(n,i),a.setPosition(s),u.setCenter(s),u.setZoom(15),f=e}})},h=function(){n.disable_autocompletion||e("#ai1ec_address").geo_autocomplete(new google.maps.Geocoder,{selectFirst:!1,minChars:3,cacheLength:50,width:300,scroll:!0,scrollHeight:330,region:n.region}).result(function(e,t){t&&d(t)}).change(function(){if(e(this).val().length>0){var t=e(this).val();i.geocode({address:t,region:n.region},function(e,t){t===google.maps.GeocoderStatus.OK&&d(e[0])})}})},p=function(){i=new google.maps.Geocoder,s=new google.maps.LatLng(9.965,-83.327),o={zoom:0,mapTypeId:google.maps.MapTypeId.ROADMAP,center:s},t(function(){e("#ai1ec_map_canvas").length>0&&(u=new google.maps.Map(e("#ai1ec_map_canvas").get(0),o),a=new google.maps.Marker({map:u,draggable:!0}),google.maps.event.addListener(a,"dragend",l),a.setPosition(s),c(),h(),m())})},d=function(t){u.setCenter(t.geometry.location),u.setZoom(15),a.setPosition(t.geometry.location),e("#ai1ec_address").val(t.formatted_address),e("#ai1ec_latitude").val(t.geometry.location.lat()),e("#ai1ec_longitude").val(t.geometry.location.lng()),e("#ai1ec_input_coordinates").is(":checked")||e("#ai1ec_input_coordinates").click();var n="",r="",i="",s=0,o=0,f="";for(var l=0;l<t.address_components.length;l++)switch(t.address_components[l].types[0]){case"street_number":n=t.address_components[l].long_name;break;case"route":r=t.address_components[l].long_name;break;case"locality":i=t.address_components[l].long_name;break;case"administrative_area_level_1":f=t.address_components[l].long_name;break;case"postal_code":s=t.address_components[l].long_name;break;case"country":o=t.address_components[l].long_name}var c=n.length>0?n+" ":"";c+=r.length>0?r:"",s=s!==0?s:"",e("#ai1ec_city").val(i),e("#ai1ec_province").val(f),e("#ai1ec_postal_code").val(s),e("#ai1ec_country").val(o)},v=function(){var t=parseFloat(e("input.latitude").val()),n=parseFloat(e("input.longitude").val()),r=new google.maps.LatLng(t,n);u.setCenter(r),u.setZoom(15),a.setPosition(r)},m=function(){e("#ai1ec_input_coordinates:checked").length===0?(e("#ai1ec_table_coordinates").css({visibility:"hidden"}),e("#ai1ec_address").change()):v()},g=function(){return a},y=function(){return f};return{init_gmaps:p,ai1ec_update_map_from_coordinates:v,get_marker:g,get_position:y}}),timely.define("scripts/add_new_event/event_location/input_coordinates_event_handlers",["jquery_timely","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_location/gmaps_helper","ai1ec_config"],function(e,t,n,r){var i=function(t){e(this).is(":checked")?e(".ai1ec_box_map").addClass("ai1ec_box_map_visible").hide().slideDown("fast"):e(".ai1ec_box_map").slideUp("fast")},s=function(t){this.checked===!0?e("#ai1ec_table_coordinates").css({visibility:"visible"}):(e("#ai1ec_table_coordinates").css({visibility:"hidden"}),e("#ai1ec_table_coordinates input").val(""),e("div.ai1ec-error").remove())},o=function(e){t.ai1ec_convert_commas_to_dots_for_coordinates();var r=t.ai1ec_check_lat_long_ok_for_search(e);r===!0&&n.ai1ec_update_map_from_coordinates()};return{toggle_visibility_of_google_map_on_click:i,toggle_visibility_of_coordinate_fields_on_click:s,update_map_from_coordinates_on_blur:o}}),timely.define("scripts/add_new_event/event_date_time/date_time_utility_functions",["jquery_timely","ai1ec_config","libs/utils"],function(e,t,n){var r=n.get_ajax_url(),i=function(t,n,r,i,s,o){e(t).val(i),e("#ai1ec_repeat_box").modal("hide");var u=e.trim(e(n).text());u.lastIndexOf(":")===-1&&(u=u.substring(0,u.length-3),e(n).text(u+":")),e(s).attr("disabled",!1),e(r).fadeOut("fast",function(){e(this).text(o.message),e(this).fadeIn("fast")})},s=function(t,n,r,i){e("#ai1ec_repeat_box .ai1ec-alert-danger").text(r.message).removeClass("ai1ec-hide"),e(i).attr("disabled",!1),e(t).val("");var s=e.trim(e(n).text());s.lastIndexOf("...")===-1&&(s=s.substring(0,s.length-1),e(n).text(s+"...")),e(this).closest("tr").find(".ai1ec_rule_text").text()===""&&e(t).siblings("input:checkbox").removeAttr("checked")},o=function(t,n,r,i,s){e(document).on("click",t,function(){if(!e(n).is(":checked")){e(n).attr("checked",!0);var t=e.trim(e(r).text());t=t.substring(0,t.length-3),e(r).text(t+":")}return l(i,s),!1})},u=function(t,n,r,i,s){e(t).click(function(){if(e(this).is(":checked"))this.id==="ai1ec_repeat"&&e("#ai1ec_exclude").removeAttr("disabled"),l(i,s);else{this.id==="ai1ec_repeat"&&e("#ai1ec_exclude").attr("disabled",!0),e(n).text("");var t=e.trim(e(r).text());t=t.substring(0,t.length-1),e(r).text(t+"...")}})},a=function(t,n,r){if(e.trim(e(t).text())===""){e(n).removeAttr("checked"),e("#ai1ec_repeat").is(":checked")||e("#ai1ec_exclude").attr("disabled",!0);var i=e.trim(e(r).text());i.lastIndexOf("...")===-1&&(i=i.substring(0,i.length-1),e(r).text(i+"..."))}},f=function(){e("#ai1ec_count, #ai1ec_daily_count, #ai1ec_weekly_count, #ai1ec_monthly_count, #ai1ec_yearly_count").rangeinput({css:{input:"ai1ec-range",slider:"ai1ec-slider",progress:"ai1ec-progress",handle:"ai1ec-handle"}});var n={start_date_input:"#ai1ec_until-date-input",start_time:"#ai1ec_until-time",date_format:t.date_format,month_names:t.month_names,day_names:t.day_names,week_start_day:t.week_start_day,twentyfour_hour:t.twentyfour_hour,now:new Date(t.now*1e3)};e.inputdate(n)},l=function(t,n){var i=e("#ai1ec_repeat_box"),s=e(".ai1ec-loading",i);i.modal({backdrop:"static"}),e.post(r,t,function(e){e.error?(window.alert(e.message),i.modal("hide")):(s.addClass("ai1ec-hide").after(e.message),typeof n=="function"&&n())},"json")};return{show_repeat_tabs:l,init_modal_widgets:f,click_on_modal_cancel:a,click_on_checkbox:u,click_on_ics_rule_text:o,repeat_form_error:s,repeat_form_success:i}}),timely.define("external_libs/jquery.calendrical_timespan",["jquery_timely"],function(e){function l(){var e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function c(e,t){return typeof e=="string"&&(e=new Date(e)),typeof t=="string"&&(t=new Date(t)),e.getUTCDate()===t.getUTCDate()&&e.getUTCMonth()===t.getUTCMonth()&&e.getUTCFullYear()===t.getUTCFullYear()?!0:!1}function h(e,t){if(e instanceof Date)return h(e.getUTCFullYear(),e.getUTCMonth());if(t==1){var n=e%4==0&&(e%100!=0||e%400==0);return n?29:28}return t==3||t==5||t==8||t==10?30:31}function p(e){return new Date(e.getTime()+864e5)}function d(e){return new Date(e.getTime()-864e5)}function v(e,t){return t==11?new Date(e+1,0,1):new Date(e,t+1,1)}function m(t,n,r,i){var s=i.monthNames.split(","),o=e("<thead />"),u=e("<tr />").appendTo(o);e("<th />").addClass("monthCell").append(e('<a href="javascript:;">«</a>').addClass("prevMonth").mousedown(function(e){g(t,r==0?n-1:n,r==0?11:r-1,i),e.preventDefault()})).appendTo(u),e("<th />").addClass("monthCell").attr("colSpan",5).append(e('<a href="javascript:;">'+s[r]+" "+n+"</a>").addClass("monthName")).appendTo(u),e("<th />").addClass("monthCell").append(e('<a href="javascript:;">»</a>').addClass("nextMonth").mousedown(function(){g(t,r==11?n+1:n,r==11?0:r+1,i)})).appendTo(u);var a=i.dayNames.split(","),f=parseInt(i.weekStartDay),l=[];for(var c=0,h=a.length;c<h;c++)l[c]=a[(c+f)%h];var p=e("<tr />").appendTo(o);return e.each(l,function(t,n){e("<td />").addClass("dayName").append(n).appendTo(p)}),o}function g(t,n,r,i){i=i||{};var s=parseInt(i.weekStartDay),o=i.today?i.today:l();o.setHours(0),o.setMinutes(0);var u=new Date(n,r,1),a=v(n,r),f=Math.abs(o.getTimezoneOffset());f!=0&&(o.setHours(o.getHours()+f/60),o.setMinutes(o.getMinutes()+f%60),u.setHours(u.getHours()+f/60),u.setMinutes(u.getMinutes()+f%60),a.setHours(a.getHours()+f/60),a.setMinutes(a.getMinutes()+f%60));var h=a.getUTCDay()-s;h<0?h=Math.abs(h)-1:h=6-h;for(var g=0;g<h;g++)a=p(a);var y=e("<table />");m(t,n,r,i).appendTo(y);var b=e("<tbody />").appendTo(y),w=e("<tr />"),E=u.getUTCDay()-s;E<0&&(E=7+E);for(var g=0;g<E;g++)u=d(u);while(u<=a){var S=e("<td />").addClass("day").append(e('<a href="javascript:;">'+u.getUTCDate()+"</a>").click(function(){var e=u;return function(){i&&i.selectDate&&i.selectDate(e)}}())).appendTo(w),x=c(u,o),T=i.selected&&c(i.selected,u);x&&S.addClass("today"),T&&S.addClass("selected"),x&&T&&S.addClass("today_selected"),u.getUTCMonth()!=r&&S.addClass("nonMonth");var N=u.getUTCDay();(N+1)%7==s&&(b.append(w),w=e("<tr />")),u=p(u)}w.children().length?b.append(w):w.remove(),t.empty().append(y)}function y(t,n){var r=n.selection&&f(n.selection);r&&(r.minute=Math.floor(r.minute/15)*15);var i=n.startTime&&n.startTime.hour*60+n.startTime.minute,s,o=e("<ul />");for(var a=0;a<24;a++)for(var l=0;l<60;l+=15){if(i&&i>a*60+l)continue;(function(){var t=u(a,l,n.isoTime),f=t;if(i!=null){var c=a*60+l-i;c<60?f+=" ("+c+" min)":c==60?f+=" (1 hr)":f+=" ("+Math.floor(c/60)+" hr "+c%60+" min)"}var h=e("<li />").append(e('<a href="javascript:;">'+f+"</a>").click(function(){n&&n.selectTime&&n.selectTime(t)}).mousemove(function(){e("li.selected",o).removeClass("selected")})).appendTo(o);!s&&a==n.defaultHour&&(s=h),r&&r.hour==a&&r.minute==l&&(h.addClass("selected"),s=h)})()}s&&setTimeout(function(){t[0].scrollTop=s[0].offsetTop-s.height()*2},0),t.empty().append(o)}function b(e){e.addClass("error").fadeOut("normal",function(){e.val(e.data("timespan.stored")).removeClass("error").fadeIn("fast")})}function w(){e(this).data("timespan.stored",this.value)}function E(t,n,r,i,a,f,l,c,h,p){r.val(r.data("timespan.initial_value")),f.val(f.data("timespan.initial_value")),l.get(0).checked=l.data("timespan.initial_value");var d=s(r,p,0,15);n.val(u(d.getUTCHours(),d.getUTCMinutes(),c)),t.val(o(d,h));var v=s(f,d.getTime(),1,15);a.val(u(v.getUTCHours(),v.getUTCMinutes(),c)),l.get(0).checked&&v.setUTCDate(v.getUTCDate()-1),i.val(o(v,h)),t.each(w),n.each(w),i.each(w),a.each(w),l.trigger("change.timespan"),e("#ai1ec_instant_event").trigger("change.timespan")}var t={us:{pattern:/([\d]{1,2})\/([\d]{1,2})\/([\d]{4}|[\d]{2})/,format:"m/d/y",order:"middleEndian",zeroPad:!1},iso:{pattern:/([\d]{4}|[\d]{2})-([\d]{1,2})-([\d]{1,2})/,format:"y-m-d",order:"bigEndian",zeroPad:!0},dot:{pattern:/([\d]{1,2}).([\d]{1,2}).([\d]{4}|[\d]{2})/,format:"d.m.y",order:"littleEndian",zeroPad:!1},def:{pattern:/([\d]{1,2})\/([\d]{1,2})\/([\d]{4}|[\d]{2})/,format:"d/m/y",order:"littleEndian",zeroPad:!1}},n=function(e){return e<10?"0"+e:e},r=function(e,t){typeof t=="undefined"&&(t=!1);var r=e.getUTCFullYear()+"-"+n(e.getUTCMonth()+1)+"-"+n(e.getUTCDate());return t&&(r+="T"+n(e.getUTCHours())+":"+n(e.getUTCMinutes())+":00"),r},i=function(e,t){var n=e.val(),r=null;if(n.length<4)r=new Date(t);else{r=new Date(n);var i=n.split("T"),s=i[0].split("-"),o=i[1].split(":");r.setUTCFullYear(s[0],s[1]-1,s[2]),r.setUTCHours(o[0],o[1],o[2],0)}return r},s=function(e,t,n,r){return t+=n*36e5,t-=t%(r*6e4),i(e,t)},o=function(e,n,r){var i,s,o;typeof t[n]=="undefined"&&(n="def"),typeof r=="undefined"&&(r=!1),!0===r?(i=e.getFullYear().toString(),s=(e.getMonth()+1).toString(),o=e.getDate().toString()):(i=e.getUTCFullYear().toString(),s=(e.getUTCMonth()+1).toString(),o=e.getUTCDate().toString()),t[n].zeroPad&&(s.length==1&&(s="0"+s),o.length==1&&(o="0"+o));var u=t[n].format;return u=u.replace("d",o),u=u.replace("m",s),u=u.replace("y",i),u},u=function(e,t,n){var r=t;t<10&&(r="0"+t);if(n){var i=e;return i<10&&(i="0"+e),i+":"+r}var i=e%12;i==0&&(i=12);var s=e<12?"am":"pm";return i+":"+r+s},a=function(e,n){typeof t[n]=="undefined"&&(n="def");var r=e.match(t[n].pattern);if(!r||r.length!=4)return Date("invalid");switch(t[n].order){case"bigEndian":var i=r[3],s=r[2],o=r[1];break;case"littleEndian":var i=r[1],s=r[2],o=r[3];break;case"middleEndian":var i=r[2],s=r[1],o=r[3];break;default:var i=r[1],s=r[2],o=r[3]}return o.length==2&&(o=(new Date).getUTCFullYear().toString().substr(0,2)+o),new Date(s+"/"+i+"/"+o+" GMT")},f=function(e){var t=t=/(\d+)\s*[:\-\.,]\s*(\d+)\s*(am|pm)?/i.exec(e);if(t&&t.length>=3){var n=Number(t[1]),r=Number(t[2]);return n==12&&t[3]&&(n-=12),t[3]&&t[3].toLowerCase()=="pm"&&(n+=12),{hour:n,minute:r}}return null};e.fn.calendricalDate=function(t){return t=t||{},t.padding=t.padding||4,t.monthNames=t.monthNames||"January,February,March,April,May,June,July,August,September,October,November,December",t.dayNames=t.dayNames||"S,M,T,W,T,F,S",t.weekStartDay=t.weekStartDay||0,this.each(function(){var n=e(this),r,i=!1;n.bind("focus",function(){if(r)return;var s=n.position(),u=n.css("padding-left");r=e("<div />").addClass("calendricalDatePopup").mouseenter(function(){i=!0}).mouseleave(function(){i=!1}).mousedown(function(e){e.preventDefault()}).css({position:"absolute",left:s.left,top:s.top+n.height()+t.padding*2}),n.after(r);var f=a(n.val(),t.dateFormat);f.getUTCFullYear()||(f=t.today?t.today:l()),g(r,f.getUTCFullYear(),f.getUTCMonth(),{today:t.today,selected:f,monthNames:t.monthNames,dayNames:t.dayNames,weekStartDay:t.weekStartDay,selectDate:function(e){i=!1,n.val(o(e,t.dateFormat)),r.remove(),r=null;if(t.endDate){var s=a(t.endDate.val(),t.dateFormat);s>=f&&t.endDate.val(o(new Date(e.getTime()+s.getTime()-f.getTime()),t.dateFormat))}}})}).blur(function(){if(i){r&&n.focus();return}if(!r)return;r.remove(),r=null})})},e.fn.calendricalDateRange=function(t){return this.length>=2&&(e(this[0]).calendricalDate(e.extend({endDate:e(this[1])},t)),e(this[1]).calendricalDate(t)),this},e.fn.calendricalDateRangeSingle=function(t){return this.length==1&&e(this).calendricalDate(t),this},e.fn.calendricalTime=function(t){return t=t||{},t.padding=t.padding||4,this.each(function(){var n=e(this),r,i=!1;n.bind("focus click",function(){if(r)return;var s=t.startTime;s&&t.startDate&&t.endDate&&!c(a(t.startDate.val()),a(t.endDate.val()))&&(s=!1);var o=n.position();r=e("<div />").addClass("calendricalTimePopup").mouseenter(function(){i=!0}).mouseleave(function(){i=!1}).mousedown(function(e){e.preventDefault()}).css({position:"absolute",left:o.left,top:o.top+n.height()+t.padding*2}),s&&r.addClass("calendricalEndTimePopup"),n.after(r);var u={selection:n.val(),selectTime:function(e){i=!1,n.val(e),r.remove(),r=null},isoTime:t.isoTime||!1,defaultHour:t.defaultHour!=null?t.defaultHour:8};s&&(u.startTime=f(t.startTime.val())),y(r,u)}).blur(function(){if(i){r&&n.focus();return}if(!r)return;r.remove(),r=null})})},e.fn.calendricalTimeRange=function(t){return this.length>=2&&(e(this[0]).calendricalTime(t),e(this[1]).calendricalTime(e.extend({startTime:e(this[0])},t))),this},e.fn.calendricalDateTimeRange=function(t){return this.length>=4&&(e(this[0]).calendricalDate(e.extend({endDate:e(this[2])},t)),e(this[1]).calendricalTime(t),e(this[2]).calendricalDate(t),e(this[3]).calendricalTime(e.extend({startTime:e(this[1]),startDate:e(this[0]),endDate:e(this[2])},t))),this};var S={allday:"#allday",start_date_input:"#start-date-input",start_time_input:"#start-time-input",start_time:"#start-time",end_date_input:"#end-date-input",end_time_input:"#end-time-input",end_time:"#end-time",twentyfour_hour:!1,date_format:"def",now:new Date},x={init:function(t){function C(){var e=a(s.val(),n.date_format).getTime()/1e3,t=f(l.val());e+=t.hour*3600+t.minute*60;var r=a(h.val(),n.date_format).getTime()/1e3,i=f(p.val());return r+=i.hour*3600+i.minute*60,r-e}function k(){var e=a(s.data("timespan.stored"),n.date_format),t=f(l.data("timespan.stored")),r=e.getTime()/1e3+t.hour*3600+t.minute*60+s.data("time_diff");return r=new Date(r*1e3),h.val(o(r,n.date_format)),p.val(u(r.getUTCHours(),r.getUTCMinutes(),n.twentyfour_hour)),!0}var n=e.extend({},S,t),i=e(n.allday),s=e(n.start_date_input),l=e(n.start_time_input),c=e(n.start_time),h=e(n.end_date_input),p=e(n.end_time_input),d=e(n.end_time),v=e("#ai1ec_instant_event"),m=h.add(p),g=s.add(n.end_date_input),y=l.add(n.end_time_input),x=s.add(n.start_time_input).add(n.end_date_input).add(n.end_time_input);x.bind("focus.timespan",w),v.bind("change.timespan",function(){this.checked?(m.closest("tr").fadeOut(),i.attr("disabled",!0)):(i.removeAttr("disabled"),m.closest("tr").fadeIn())});var T=new Date(n.now.getFullYear(),n.now.getMonth(),n.now.getDate()),N=!1;return i.bind("change.timespan",function(){this.checked?(y.fadeOut(),v.attr("disabled",!0)):(v.removeAttr("disabled"),y.fadeIn()),N||(N=!0,x.calendricalDateTimeRange({today:T,dateFormat:n.date_format,isoTime:n.twentyfour_hour,monthNames:n.month_names,dayNames:n.day_names,weekStartDay:n.week_start_day}))}).get().checked=!1,g.bind("blur.timespan",function(){var t=a(this.value,n.date_format);isNaN(t)?b(e(this)):(e(this).data("timespan.stored",this.value),e(this).val(o(t,n.date_format)))}),y.bind("blur.timespan",function(){var t=f(this.value);t?(e(this).data("timespan.stored",this.value),e(this).val(u(t.hour,t.minute,n.twentyfour_hour))):b(e(this))}),s.add(n.start_time_input).bind("focus.timespan",function(){s.data("time_diff",C())}).bind("blur.timespan",function(){s.data("time_diff")<0&&s.data("time_diff",900);var e=k()}),h.add(n.start_time_input).bind("blur.timespan",function(){if(C()<0){s.data("time_diff",900);var e=k()}}),s.closest("form").bind("submit.timespan",function(){var e=a(s.val(),n.date_format).getTime()/1e3;if(!isNaN(e)){if(!i.get(0).checked){var t=f(l.val());t?e+=t.hour*3600+t.minute*60:e=""}}else e="";e>0&&c.val(r(new Date(e*1e3),!0));var o=a(h.val(),n.date_format).getTime()/1e3;if(!isNaN(o))if(i.get(0).checked)o+=86400;else{var t=f(p.val());t?o+=t.hour*3600+t.minute*60:o=""}else o="";o>0&&d.val(r(new Date(o*1e3),!0))}),c.data("timespan.initial_value",c.val()),d.data("timespan.initial_value",d.val()),i.data("timespan.initial_value",i.get(0).checked),E(s,l,c,h,p,d,i,n.twentyfour_hour,n.date_format,n.now),this},reset:function(t){var n=e.extend({},S,t);return E(e(n.start_date_input),e(n.start_time_input),e(n.start_time),e(n.end_date_input),e(n.end_time_input),e(n.end_time),e(n.allday),n.twentyfour_hour,n.date_format,n.now),this},destroy:function(t){return t=e.extend({},S,t),e.each(t,function(t,n){e(n).unbind(".timespan")}),e(t.start_date_input).closest("form").unbind(".timespan"),this}};return e.timespan=function(t){if(x[t])return x[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return x.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timespan")},{formatDate:o,parseDate:a}}),timely.define("external_libs/bootstrap/button",["jquery_timely"],function(e){var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r)};t.DEFAULTS={loadingText:"loading..."},t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.is("input")?"val":"html",i=n.data();e+="Text",i.resetText||n.data("resetText",n[r]()),n[r](i[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass("ai1ec-"+t).attr(t,t):n.removeClass("ai1ec-"+t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="ai1ec-buttons"]'),t=!0;if(e.length){var n=this.$element.find("input");n.prop("type")==="radio"&&(n.prop("checked")&&this.$element.hasClass("ai1ec-active")?t=!1:e.find(".ai1ec-active").removeClass("ai1ec-active")),t&&n.prop("checked",!this.$element.hasClass("ai1ec-active")).trigger("change")}t&&this.$element.toggleClass("ai1ec-active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("bs.button"),s=typeof n=="object"&&n;i||r.data("bs.button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.bs.button.data-api","[data-toggle^=ai1ec-button]",function(t){var n=e(t.target);n.hasClass("ai1ec-btn")||(n=n.closest(".ai1ec-btn")),n.button("toggle"),t.preventDefault()})}),timely.define("scripts/add_new_event/event_date_time/date_time_event_handlers",["jquery_timely","ai1ec_config","scripts/add_new_event/event_date_time/date_time_utility_functions","external_libs/jquery.calendrical_timespan","libs/utils","external_libs/bootstrap/button"],function(e,t,n,r,i){var s=i.get_ajax_url(),o=function(){var t=e("#ai1ec_end option:selected").val();switch(t){case"0":e("#ai1ec_until_holder, #ai1ec_count_holder").collapse("hide");break;case"1":e("#ai1ec_until_holder").collapse("hide"),e("#ai1ec_count_holder").collapse("show");break;case"2":e("#ai1ec_count_holder").collapse("hide"),e("#ai1ec_until_holder").collapse("show")}},u=function(){e("#publish").trigger("click")},a=function(){var i=e(this),o="",u=e("#ai1ec_repeat_box .ai1ec-tab-pane.ai1ec-active"),a=u.data("freq");switch(a){case"daily":o+="FREQ=DAILY;";var f=e("#ai1ec_daily_count").val();f>1&&(o+="INTERVAL="+f+";");break;case"weekly":o+="FREQ=WEEKLY;";var l=e("#ai1ec_weekly_count").val();l>1&&(o+="INTERVAL="+l+";");var c=e('input[name="ai1ec_weekly_date_select"]:first').val(),h=e('#ai1ec_weekly_date_select > div:first > input[type="hidden"]:first').val();c.length>0&&(o+="WKST="+h+";BYday="+c+";");break;case"monthly":o+="FREQ=MONTHLY;";var p=e("#ai1ec_monthly_count").val(),d=e('input[name="ai1ec_monthly_type"]:checked').val();p>1&&(o+="INTERVAL="+p+";");var v=e('input[name="ai1ec_montly_date_select"]:first').val();if(v.length>0&&d==="bymonthday")o+="BYMONTHDAY="+v+";";else if(d==="byday"){var m=e("#ai1ec_monthly_byday_num").val(),g=e("#ai1ec_monthly_byday_weekday").val();o+="BYday="+m+g+";"}break;case"yearly":o+="FREQ=YEARLY;";var y=e("#ai1ec_yearly_count").val();y>1&&(o+="INTERVAL="+y+";");var b=e('input[name="ai1ec_yearly_date_select"]:first').val();b.length>0&&(o+="BYMONTH="+b+";")}var w=e("#ai1ec_end").val();if(w==="1")o+="COUNT="+e("#ai1ec_count").val()+";";else if(w==="2"){var E=e("#ai1ec_until-date-input").val();E=r.parseDate(E,t.date_format);var S=e("#ai1ec_start-time").val();S=r.parseDate(S,t.date_format),S=new Date(S);var x=E.getUTCDate(),T=E.getUTCMonth()+1,N=S.getUTCHours(),C=S.getUTCMinutes();T=T<10?"0"+T:T,x=x<10?"0"+x:x,N=N<10?"0"+N:N,C=C<10?"0"+C:C,E=E.getUTCFullYear()+""+T+x+"T235959Z",o+="UNTIL="+E+";"}var k={action:"ai1ec_rrule_to_text",rrule:o};i.button("loading").next().addClass("ai1ec-disabled"),e.post(s,k,function(t){t.error?(i.button("reset").next().removeClass("ai1ec-disabled"),"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_error("#ai1ec_rrule","#ai1ec_repeat_label",t,i):n.repeat_form_error("#ai1ec_exrule","#ai1ec_exclude_label",t,i)):"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_success("#ai1ec_rrule","#ai1ec_repeat_label","#ai1ec_repeat_text > a",o,i,t):n.repeat_form_success("#ai1ec_exrule","#ai1ec_exclude_label","#ai1ec_exclude_text > a",o,i,t)},"json")},f=function(){return e("#ai1ec_is_box_repeat").val()==="1"?n.click_on_modal_cancel("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label"):n.click_on_modal_cancel("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label"),e("#ai1ec_repeat_box").modal("hide"),!1},l=function(){e(this).is("#ai1ec_monthly_type_bymonthday")?(e("#ai1ec_repeat_monthly_byday").collapse("hide"),e("#ai1ec_repeat_monthly_bymonthday").collapse("show")):(e("#ai1ec_repeat_monthly_bymonthday").collapse("hide"),e("#ai1ec_repeat_monthly_byday").collapse("show"))},c=function(){var t=e(this),n=[],r=t.closest(".ai1ec-btn-group-grid"),i;t.toggleClass("ai1ec-active"),e("a",r).each(function(){var t=e(this);t.is(".ai1ec-active")&&(i=t.next().val(),n.push(i))}),r.next().val(n.join())},h=function(){n.click_on_ics_rule_text("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_ics_rule_text("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_repeat","#ai1ec_repeat_text > a","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_exclude","#ai1ec_exclude_text > a","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets)},p=function(t){var n=e(this).data("state")===undefined?!1:e(this).data("state");return e("#widgetCalendar").stop().animate({height:n?0:e("#widgetCalendar div.datepicker").get(0).offsetHeight},500),e(this).data("state",!n),!1},d=function(){e(".ai1ec-modal-content",this).not(".ai1ec-loading ").remove().end().removeClass("ai1ec-hide")};return{show_end_fields:o,trigger_publish:u,handle_click_on_apply_button:a,handle_click_on_cancel_modal:f,handle_checkbox_monthly_tab_modal:l,execute_pseudo_handlers:h,handle_animation_of_calendar_widget:p,handle_click_on_toggle_buttons:c,handle_modal_hide:d}}),timely.define("scripts/add_new_event/event_cost_helper",["jquery_timely","ai1ec_config"],function(e,t){var n=function(){return e("#ai1ec_is_free").is(":checked")},r=function(){return e("#ai1ec_cost").val()!==""},i=function(r){var i=e(this).parents("table:eq(0)"),s=e("#ai1ec_cost",i),o=t.label_a_buy_tickets_url;n()?(s.attr("value","").addClass("ai1ec-hidden"),o=t.label_a_rsvp_url):s.removeClass("ai1ec-hidden"),e("label[for=ai1ec_ticket_url]",i).text(o)};return{handle_change_is_free:i,check_is_free:n,check_is_price_entered:r}}),timely.define("external_libs/jquery.inputdate",["jquery_timely","external_libs/jquery.calendrical_timespan"],function(e,t){function n(e){e.addClass("error").fadeOut("normal",function(){e.val(e.data("timespan.stored")).removeClass("error").fadeIn("fast")})}function r(){e(this).data("timespan.stored",this.value)}function i(e,n,i,s,o){n.val(n.data("timespan.initial_value"));var u=parseInt(n.val());isNaN(parseInt(u))?u=new Date(o):u=new Date(parseInt(u)*1e3),e.val(t.formatDate(u,s)),e.each(r)}var s={start_date_input:"date-input",start_time:"time",twentyfour_hour:!1,date_format:"def",now:new Date},o={init:function(o){var u=e.extend({},s,o),a=e(u.start_date_input),f=e(u.start_time),l=a,c=a;return c.bind("focus.timespan",r),l.calendricalDate({today:new Date(u.now.getFullYear(),u.now.getMonth(),u.now.getDate()),dateFormat:u.date_format,monthNames:u.month_names,dayNames:u.day_names,weekStartDay:u.week_start_day}),l.bind("blur.timespan",function(){var r=t.parseDate(this.value,u.date_format);isNaN(r)?n(e(this)):(e(this).data("timespan.stored",this.value),e(this).val(t.formatDate(r,u.date_format)))}),a.bind("focus.timespan",function(){var e=t.parseDate(a.val(),u.date_format).getTime()/1e3}).bind("blur.timespan",function(){var e=t.parseDate(a.data("timespan.stored"),u.date_format)}),a.closest("form").bind("submit.timespan",function(){var e=t.parseDate(a.val(),u.date_format).getTime()/1e3;isNaN(e)&&(e=""),f.val(e)}),f.data("timespan.initial_value",f.val()),i(a,f,u.twentyfour_hour,u.date_format,u.now),this},reset:function(t){var n=e.extend({},s,t);return i(e(n.start_date_input),e(n.start_time),n.twentyfour_hour,n.date_format,n.now),this},destroy:function(t){return t=e.extend({},s,t),e.each(t,function(t,n){e(n).unbind(".timespan")}),e(t.start_date_input).closest("form").unbind(".timespan"),this}};e.inputdate=function(t){if(o[t])return o[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return o.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timespan")}}),timely.define("external_libs/jquery.tools",["jquery_timely"],function(e){function i(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function s(e,t){var n=parseInt(e.css(t),10);if(n)return n;var r=e[0].currentStyle;return r&&r.width&&parseInt(r.width,10)}function o(e){var t=e.data("events");return t&&t.onSlide}function u(t,n){function x(e,s,o,u){o===undefined?o=s/h*m:u&&(o-=n.min),g&&(o=Math.round(o/g)*g);if(s===undefined||g)s=o*h/m;if(isNaN(o))return r;s=Math.max(0,Math.min(s,h)),o=s/h*m;if(u||!f)o+=n.min;f&&(u?s=h-s:o=n.max-o),o=i(o,y);var a=e.type=="click";if(S&&l!==undefined&&!a){e.type="onSlide",E.trigger(e,[o,s]);if(e.isDefaultPrevented())return r}var c=a?n.speed:0,b=a?function(){e.type="change",E.trigger(e,[o])}:null;return f?(d.animate({top:s},c,b),n.progress&&v.animate({height:h-s+d.height()/2},c)):(d.animate({left:s},c,b),n.progress&&v.animate({width:s+d.width()/2},c)),l=o,p=s,t.val(o),r}function T(){f=n.vertical||s(a,"height")>s(a,"width"),f?(h=s(a,"height")-s(d,"height"),c=a.offset().top+h):(h=s(a,"width")-s(d,"width"),c=a.offset().left)}function N(){T(),r.setValue(n.value!==undefined?n.value:n.min)}var r=this,u=n.css,a=e("<div><div/><a href='#'/></div>").data("rangeinput",r),f,l,c,h,p;t.before(a);var d=a.addClass(u.slider).find("a").addClass(u.handle),v=a.find("div").addClass(u.progress);e.each("min,max,step,value".split(","),function(e,r){var i=t.attr(r);parseFloat(i)&&(n[r]=parseFloat(i,10))});var m=n.max-n.min,g=n.step=="any"?0:n.step,y=n.precision;y===undefined&&(y=g.toString().split("."),y=y.length===2?y[1].length:0);if(t.attr("type")=="range"){var b=t.clone().wrap("<div/>").parent().html(),w=e(b.replace(/type/i,"type=text data-orig-type"));w.val(n.value),t.replaceWith(w),t=w}t.addClass(u.input);var E=e(r).add(t),S=!0;e.extend(r,{getValue:function(){return l},setValue:function(t,n){return T(),x(n||e.Event("api"),undefined,t,!0)},getConf:function(){return n},getProgress:function(){return v},getHandle:function(){return d},getInput:function(){return t},step:function(t,i){i=i||e.Event();var s=n.step=="any"?1:n.step;r.setValue(l+s*(t||1),i)},stepUp:function(e){return r.step(e||1)},stepDown:function(e){return r.step(-e||-1)}}),e.each("onSlide,change".split(","),function(t,i){e.isFunction(n[i])&&e(r).on(i,n[i]),r[i]=function(t){return t&&e(r).on(i,t),r}}),d.drag({drag:!1}).on("dragStart",function(){T(),S=o(e(r))||o(t)}).on("drag",function(e,n,r){if(t.is(":disabled"))return!1;x(e,f?n:r)}).on("dragEnd",function(e){e.isDefaultPrevented()||(e.type="change",E.trigger(e,[l]))}).click(function(e){return e.preventDefault()}),a.click(function(e){if(t.is(":disabled")||e.target==d[0])return e.preventDefault();T();var n=f?d.height()/2:d.width()/2;x(e,f?h-c-n+e.pageY:e.pageX-c-n)}),n.keyboard&&t.keydown(function(n){if(t.attr("readonly"))return;var i=n.keyCode,s=e([75,76,38,33,39]).index(i)!=-1,o=e([74,72,40,34,37]).index(i)!=-1;if((s||o)&&!(n.shiftKey||n.altKey||n.ctrlKey))return s?r.step(i==33?10:1,n):o&&r.step(i==34?-10:-1,n),n.preventDefault()}),t.blur(function(t){var n=e(this).val();n!==l&&r.setValue(n,t)}),e.extend(t[0],{stepUp:r.stepUp,stepDown:r.stepDown}),N(),h||e(window).load(N)}e.tools=e.tools||{version:"1.2.7"};var t;t=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:!0,progress:!1,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var n,r;e.fn.drag=function(t){return document.ondragstart=function(){return!1},t=e.extend({x:!0,y:!0,drag:!0},t),n=n||e(document).on("mousedown mouseup",function(i){var s=e(i.target);if(i.type=="mousedown"&&s.data("drag")){var o=s.position(),u=i.pageX-o.left,a=i.pageY-o.top,f=!0;n.on("mousemove.drag",function(e){var n=e.pageX-u,i=e.pageY-a,o={};t.x&&(o.left=n),t.y&&(o.top=i),f&&(s.trigger("dragStart"),f=!1),t.drag&&s.css(o),s.trigger("drag",[i,n]),r=s}),i.preventDefault()}else try{r&&r.trigger("dragEnd")}finally{n.off("mousemove.drag"),r=null}}),this.data("drag",!0)},e.expr[":"].range=function(t){var n=t.getAttribute("type");return n&&n=="range"||!!e(t).filter("input").data("rangeinput")},e.fn.rangeinput=function(n){if(this.data("rangeinput"))return this;n=e.extend(!0,{},t.conf,n);var r;return this.each(function(){var t=new u(e(this),e.extend(!0,{},n)),i=t.getInput().data("rangeinput",t);r=r?r.add(i):i}),r?r:this}}),timely.define("external_libs/ai1ec_datepicker",["jquery_timely"],function(e){var t=function(){var t={},n={years:"datepickerViewYears",moths:"datepickerViewMonths",days:"datepickerViewDays"},i={wrapper:'<div class="datepicker"><div class="datepickerBorderT" /><div class="datepickerBorderB" /><div class="datepickerBorderL" /><div class="datepickerBorderR" /><div class="datepickerBorderTL" /><div class="datepickerBorderTR" /><div class="datepickerBorderBL" /><div class="datepickerBorderBR" /><div class="datepickerContainer"><table cellspacing="0" cellpadding="0"><tbody><tr></tr></tbody></table></div></div>',head:["<td>",'<table cellspacing="0" cellpadding="0">',"<thead>","<tr>",'<th class="datepickerGoPrev"><a href="#"><span><%=prev%></span></a></th>','<th colspan="6" class="datepickerMonth"><a href="#"><span></span></a></th>','<th class="datepickerGoNext"><a href="#"><span><%=next%></span></a></th>',"</tr>",'<tr class="datepickerDoW">',"<th><span><%=week%></span></th>","<th><span><%=day1%></span></th>","<th><span><%=day2%></span></th>","<th><span><%=day3%></span></th>","<th><span><%=day4%></span></th>","<th><span><%=day5%></span></th>","<th><span><%=day6%></span></th>","<th><span><%=day7%></span></th>","</tr>","</thead>","</table></td>"],space:'<td class="datepickerSpace"><div></div></td>',days:['<tbody class="datepickerDays">',"<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[0].week%></span></a></th>','<td class="<%=weeks[0].days[0].classname%>"><a href="#"><span><%=weeks[0].days[0].text%></span></a></td>','<td class="<%=weeks[0].days[1].classname%>"><a href="#"><span><%=weeks[0].days[1].text%></span></a></td>','<td class="<%=weeks[0].days[2].classname%>"><a href="#"><span><%=weeks[0].days[2].text%></span></a></td>','<td class="<%=weeks[0].days[3].classname%>"><a href="#"><span><%=weeks[0].days[3].text%></span></a></td>','<td class="<%=weeks[0].days[4].classname%>"><a href="#"><span><%=weeks[0].days[4].text%></span></a></td>','<td class="<%=weeks[0].days[5].classname%>"><a href="#"><span><%=weeks[0].days[5].text%></span></a></td>','<td class="<%=weeks[0].days[6].classname%>"><a href="#"><span><%=weeks[0].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[1].week%></span></a></th>','<td class="<%=weeks[1].days[0].classname%>"><a href="#"><span><%=weeks[1].days[0].text%></span></a></td>','<td class="<%=weeks[1].days[1].classname%>"><a href="#"><span><%=weeks[1].days[1].text%></span></a></td>','<td class="<%=weeks[1].days[2].classname%>"><a href="#"><span><%=weeks[1].days[2].text%></span></a></td>','<td class="<%=weeks[1].days[3].classname%>"><a href="#"><span><%=weeks[1].days[3].text%></span></a></td>','<td class="<%=weeks[1].days[4].classname%>"><a href="#"><span><%=weeks[1].days[4].text%></span></a></td>','<td class="<%=weeks[1].days[5].classname%>"><a href="#"><span><%=weeks[1].days[5].text%></span></a></td>','<td class="<%=weeks[1].days[6].classname%>"><a href="#"><span><%=weeks[1].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[2].week%></span></a></th>','<td class="<%=weeks[2].days[0].classname%>"><a href="#"><span><%=weeks[2].days[0].text%></span></a></td>','<td class="<%=weeks[2].days[1].classname%>"><a href="#"><span><%=weeks[2].days[1].text%></span></a></td>','<td class="<%=weeks[2].days[2].classname%>"><a href="#"><span><%=weeks[2].days[2].text%></span></a></td>','<td class="<%=weeks[2].days[3].classname%>"><a href="#"><span><%=weeks[2].days[3].text%></span></a></td>','<td class="<%=weeks[2].days[4].classname%>"><a href="#"><span><%=weeks[2].days[4].text%></span></a></td>','<td class="<%=weeks[2].days[5].classname%>"><a href="#"><span><%=weeks[2].days[5].text%></span></a></td>','<td class="<%=weeks[2].days[6].classname%>"><a href="#"><span><%=weeks[2].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[3].week%></span></a></th>','<td class="<%=weeks[3].days[0].classname%>"><a href="#"><span><%=weeks[3].days[0].text%></span></a></td>','<td class="<%=weeks[3].days[1].classname%>"><a href="#"><span><%=weeks[3].days[1].text%></span></a></td>','<td class="<%=weeks[3].days[2].classname%>"><a href="#"><span><%=weeks[3].days[2].text%></span></a></td>','<td class="<%=weeks[3].days[3].classname%>"><a href="#"><span><%=weeks[3].days[3].text%></span></a></td>','<td class="<%=weeks[3].days[4].classname%>"><a href="#"><span><%=weeks[3].days[4].text%></span></a></td>','<td class="<%=weeks[3].days[5].classname%>"><a href="#"><span><%=weeks[3].days[5].text%></span></a></td>','<td class="<%=weeks[3].days[6].classname%>"><a href="#"><span><%=weeks[3].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[4].week%></span></a></th>','<td class="<%=weeks[4].days[0].classname%>"><a href="#"><span><%=weeks[4].days[0].text%></span></a></td>','<td class="<%=weeks[4].days[1].classname%>"><a href="#"><span><%=weeks[4].days[1].text%></span></a></td>','<td class="<%=weeks[4].days[2].classname%>"><a href="#"><span><%=weeks[4].days[2].text%></span></a></td>','<td class="<%=weeks[4].days[3].classname%>"><a href="#"><span><%=weeks[4].days[3].text%></span></a></td>','<td class="<%=weeks[4].days[4].classname%>"><a href="#"><span><%=weeks[4].days[4].text%></span></a></td>','<td class="<%=weeks[4].days[5].classname%>"><a href="#"><span><%=weeks[4].days[5].text%></span></a></td>','<td class="<%=weeks[4].days[6].classname%>"><a href="#"><span><%=weeks[4].days[6].text%></span></a></td>',"</tr>","<tr>",'<th class="datepickerWeek"><a href="#"><span><%=weeks[5].week%></span></a></th>','<td class="<%=weeks[5].days[0].classname%>"><a href="#"><span><%=weeks[5].days[0].text%></span></a></td>','<td class="<%=weeks[5].days[1].classname%>"><a href="#"><span><%=weeks[5].days[1].text%></span></a></td>','<td class="<%=weeks[5].days[2].classname%>"><a href="#"><span><%=weeks[5].days[2].text%></span></a></td>','<td class="<%=weeks[5].days[3].classname%>"><a href="#"><span><%=weeks[5].days[3].text%></span></a></td>','<td class="<%=weeks[5].days[4].classname%>"><a href="#"><span><%=weeks[5].days[4].text%></span></a></td>','<td class="<%=weeks[5].days[5].classname%>"><a href="#"><span><%=weeks[5].days[5].text%></span></a></td>','<td class="<%=weeks[5].days[6].classname%>"><a href="#"><span><%=weeks[5].days[6].text%></span></a></td>',"</tr>","</tbody>"],months:['<tbody class="<%=className%>">',"<tr>",'<td colspan="2"><a href="#"><span><%=data[0]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[1]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[2]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[3]%></span></a></td>',"</tr>","<tr>",'<td colspan="2"><a href="#"><span><%=data[4]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[5]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[6]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[7]%></span></a></td>',"</tr>","<tr>",'<td colspan="2"><a href="#"><span><%=data[8]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[9]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[10]%></span></a></td>','<td colspan="2"><a href="#"><span><%=data[11]%></span></a></td>',"</tr>","</tbody>"]},s={flat:!1,starts:1,prev:"◀",next:"▶",lastSel:!1,mode:"single",view:"days",calendars:1,format:"Y-m-d",position:"bottom",eventName:"click",onRender:function(){return{}},onChange:function(){return!0},onShow:function(){return!0},onBeforeShow:function(){return!0},onHide:function(){return!0},locale:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekMin:"wk"}},o=function(t){var n=e(t).data("datepicker"),s=e(t),o=Math.floor(n.calendars/2),u,f,l,c,h=0,p,d,v,m,g,y;s.find("td>table tbody").remove();for(var b=0;b<n.calendars;b++){u=new Date(n.current),u.addMonths(-o+b),y=s.find("table").eq(b+1);switch(y[0].className){case"datepickerViewDays":l=a(u,"B, Y");break;case"datepickerViewMonths":l=u.getFullYear();break;case"datepickerViewYears":l=u.getFullYear()-6+" - "+(u.getFullYear()+5)}y.find("thead tr:first th:eq(1) span").text(l),l=u.getFullYear()-6,f={data:[],className:"datepickerYears"};for(var w=0;w<12;w++)f.data.push(l+w);g=r(i.months.join(""),f),u.setDate(1),f={weeks:[],test:10},c=u.getMonth();var l=(u.getDay()-n.starts)%7;u.addDays(-(l+(l<0?7:0))),p=-1,h=0;while(h<42){v=parseInt(h/7,10),m=h%7,f.weeks[v]||(p=u.getWeekNumber(),f.weeks[v]={week:p,days:[]}),f.weeks[v].days[m]={text:u.getDate(),classname:[]},c!=u.getMonth()&&f.weeks[v].days[m].classname.push("datepickerNotInMonth"),u.getDay()==0&&f.weeks[v].days[m].classname.push("datepickerSunday"),u.getDay()==6&&f.weeks[v].days[m].classname.push("datepickerSaturday");var E=n.onRender(u),S=u.valueOf();(E.selected||n.date==S||e.inArray(S,n.date)>-1||n.mode=="range"&&S>=n.date[0]&&S<=n.date[1])&&f.weeks[v].days[m].classname.push("datepickerSelected"),E.disabled&&f.weeks[v].days[m].classname.push("datepickerDisabled"),E.className&&f.weeks[v].days[m].classname.push(E.className),f.weeks[v].days[m].classname=f.weeks[v].days[m].classname.join(" "),h++,u.addDays(1)}g=r(i.days.join(""),f)+g,f={data:n.locale.monthsShort,className:"datepickerMonths"},g=r(i.months.join(""),f)+g,y.append(g)}},u=function(e,t){if(e.constructor==Date)return new Date(e);var n=e.split(/\W+/),r=t.split(/\W+/),i,s,o,u,a,f=new Date;for(var l=0;l<n.length;l++)switch(r[l]){case"d":case"e":i=parseInt(n[l],10);break;case"m":s=parseInt(n[l],10)-1;break;case"Y":case"y":o=parseInt(n[l],10),o+=o>100?0:o<29?2e3:1900;break;case"H":case"I":case"k":case"l":u=parseInt(n[l],10);break;case"P":case"p":/pm/i.test(n[l])&&u<12?u+=12:/am/i.test(n[l])&&u>=12&&(u-=12);break;case"M":a=parseInt(n[l],10)}return new Date(o===undefined?f.getFullYear():o,s===undefined?f.getMonth():s,i===undefined?f.getDate():i,u===undefined?f.getHours():u,a===undefined?f.getMinutes():a,0)},a=function(e,t){var n=e.getMonth(),r=e.getDate(),i=e.getFullYear(),s=e.getWeekNumber(),o=e.getDay(),u={},a=e.getHours(),f=a>=12,l=f?a-12:a,c=e.getDayOfYear();l==0&&(l=12);var h=e.getMinutes(),p=e.getSeconds(),d=t.split(""),v;for(var m=0;m<d.length;m++){v=d[m];switch(d[m]){case"a":v=e.getDayName();break;case"A":v=e.getDayName(!0);break;case"b":v=e.getMonthName();break;case"B":v=e.getMonthName(!0);break;case"C":v=1+Math.floor(i/100);break;case"d":v=r<10?"0"+r:r;break;case"e":v=r;break;case"H":v=a<10?"0"+a:a;break;case"I":v=l<10?"0"+l:l;break;case"j":v=c<100?c<10?"00"+c:"0"+c:c;break;case"k":v=a;break;case"l":v=l;break;case"m":v=n<9?"0"+(1+n):1+n;break;case"M":v=h<10?"0"+h:h;break;case"p":case"P":v=f?"PM":"AM";break;case"s":v=Math.floor(e.getTime()/1e3);break;case"S":v=p<10?"0"+p:p;break;case"u":v=o+1;break;case"w":v=o;break;case"y":v=(""+i).substr(2,2);break;case"Y":v=i}d[m]=v}return d.join("")},f=function(e){if(Date.prototype.tempDate)return;Date.prototype.tempDate=null,Date.prototype.months=e.months,Date.prototype.monthsShort=e.monthsShort,Date.prototype.days=e.days,Date.prototype.daysShort=e.daysShort,Date.prototype.getMonthName=function(e){return this[e?"months":"monthsShort"][this.getMonth()]},Date.prototype.getDayName=function(e){return this[e?"days":"daysShort"][this.getDay()]},Date.prototype.addDays=function(e){this.setDate(this.getDate()+e),this.tempDate=this.getDate()},Date.prototype.addMonths=function(e){this.tempDate==null&&(this.tempDate=this.getDate()),this.setDate(1),this.setMonth(this.getMonth()+e),this.setDate(Math.min(this.tempDate,this.getMaxDays()))},Date.prototype.addYears=function(e){this.tempDate==null&&(this.tempDate=this.getDate()),this.setDate(1),this.setFullYear(this.getFullYear()+e),this.setDate(Math.min(this.tempDate,this.getMaxDays()))},Date.prototype.getMaxDays=function(){var e=new Date(Date.parse(this)),t=28,n;n=e.getMonth(),t=28;while(e.getMonth()==n)t++,e.setDate(t);return t-1},Date.prototype.getFirstDay=function(){var e=new Date(Date.parse(this));return e.setDate(1),e.getDay()},Date.prototype.getWeekNumber=function(){var e=new Date(this);e.setDate(e.getDate()-(e.getDay()+6)%7+3);var t=e.valueOf();return e.setMonth(0),e.setDate(4),Math.round((t-e.valueOf())/6048e5)+1},Date.prototype.getDayOfYear=function(){var e=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0),t=new Date(this.getFullYear(),0,0,0,0,0),n=e-t;return Math.floor(n/24*60*60*1e3)}},l=function(t){var n=e(t).data("datepicker"),r=e("#"+n.id);if(!n.extraHeight){var i=e(t).find("div");n.extraHeight=i.get(0).offsetHeight+i.get(1).offsetHeight,n.extraWidth=i.get(2).offsetWidth+i.get(3).offsetWidth}var s=r.find("table:first").get(0),o=s.offsetWidth,u=s.offsetHeight;r.css({width:o+n.extraWidth+"px",height:u+n.extraHeight+"px"}).find("div.datepickerContainer").css({width:o+"px",height:u+"px"})},c=function(t){e(t.target).is("span")&&(t.target=t.target.parentNode);var n=e(t.target);if(n.is("a")){t.target.blur();if(n.hasClass("datepickerDisabled"))return!1;var r=e(this).data("datepicker"),i=n.parent(),s=i.parent().parent().parent(),u=e("table",this).index(s.get(0))-1,f=new Date(r.current),l=!1,c=!1;if(i.is("th")){if(i.hasClass("datepickerWeek")&&r.mode=="range"&&!i.next().hasClass("datepickerDisabled")){var p=parseInt(i.next().text(),10);f.addMonths(u-Math.floor(r.calendars/2)),i.next().hasClass("datepickerNotInMonth")&&f.addMonths(p>15?-1:1),f.setDate(p),r.date[0]=f.setHours(0,0,0,0).valueOf(),f.setHours(23,59,59,0),f.addDays(6),r.date[1]=f.valueOf(),c=!0,l=!0,r.lastSel=!1}else if(i.hasClass("datepickerMonth")){f.addMonths(u-Math.floor(r.calendars/2));switch(s.get(0).className){case"datepickerViewDays":s.get(0).className="datepickerViewMonths",n.find("span").text(f.getFullYear());break;case"datepickerViewMonths":s.get(0).className="datepickerViewYears",n.find("span").text(f.getFullYear()-6+" - "+(f.getFullYear()+5));break;case"datepickerViewYears":s.get(0).className="datepickerViewDays",n.find("span").text(a(f,"B, Y"))}}else if(i.parent().parent().is("thead")){switch(s.get(0).className){case"datepickerViewDays":r.current.addMonths(i.hasClass("datepickerGoPrev")?-1:1);break;case"datepickerViewMonths":r.current.addYears(i.hasClass("datepickerGoPrev")?-1:1);break;case"datepickerViewYears":r.current.addYears(i.hasClass("datepickerGoPrev")?-12:12)}c=!0}}else if(i.is("td")&&!i.hasClass("datepickerDisabled")){switch(s.get(0).className){case"datepickerViewMonths":r.current.setMonth(s.find("tbody.datepickerMonths td").index(i)),r.current.setFullYear(parseInt(s.find("thead th.datepickerMonth span").text(),10)),r.current.addMonths(Math.floor(r.calendars/2)-u),s.get(0).className="datepickerViewDays";break;case"datepickerViewYears":r.current.setFullYear(parseInt(n.text(),10)),s.get(0).className="datepickerViewMonths";break;default:var p=parseInt(n.text(),10);f.addMonths(u-Math.floor(r.calendars/2)),i.hasClass("datepickerNotInMonth")&&f.addMonths(p>15?-1:1),f.setDate(p);switch(r.mode){case"multiple":p=f.setHours(0,0,0,0).valueOf(),e.inArray(p,r.date)>-1?e.each(r.date,function(e,t){if(t==p)return r.date.splice(e,1),!1}):r.date.push(p);break;case"range":r.lastSel||(r.date[0]=f.setHours(0,0,0,0).valueOf()),p=f.setHours(23,59,59,0).valueOf(),p<r.date[0]?(r.date[1]=r.date[0]+86399e3,r.date[0]=p-86399e3):r.date[1]=p,r.lastSel=!r.lastSel;break;default:r.date=f.valueOf()}}c=!0,l=!0}c&&o(this),l&&r.onChange.apply(this,h(r))}return!1},h=function(t){var n;return t.mode=="single"?(n=new Date(t.date),[a(n,t.format),n,t.el]):(n=[[],[],t.el],e.each(t.date,function(e,r){var i=new Date(r);n[0].push(a(i,t.format)),n[1].push(i)}),n)},p=function(){var e=document.compatMode=="CSS1Compat";return{l:window.pageXOffset||(e?document.documentElement.scrollLeft:document.body.scrollLeft),t:window.pageYOffset||(e?document.documentElement.scrollTop:document.body.scrollTop),w:window.innerWidth||(e?document.documentElement.clientWidth:document.body.clientWidth),h:window.innerHeight||(e?document.documentElement.clientHeight:document.body.clientHeight)}},d=function(e,t,n){if(e==t)return!0;if(e.contains)return e.contains(t);if(e.compareDocumentPosition)return!!(e.compareDocumentPosition(t)&16);var r=t.parentNode;while(r&&r!=n){if(r==e)return!0;r=r.parentNode}return!1},v=function(t){var n=e("#"+e(this).data("datepickerId"));if(!n.is(":visible")){var r=n.get(0);o(r);var i=n.data("datepicker");i.onBeforeShow.apply(this,[n.get(0)]);var s=e(this).offset(),u=p(),a=s.top,f=s.left,c=e.curCSS(r,"display");n.css({visibility:"hidden",display:"block"}),l(r);switch(i.position){case"top":a-=r.offsetHeight;break;case"left":f-=r.offsetWidth;break;case"right":f+=this.offsetWidth;break;case"bottom":a+=this.offsetHeight}a+r.offsetHeight>u.t+u.h&&(a=s.top-r.offsetHeight),a<u.t&&(a=s.top+this.offsetHeight+r.offsetHeight),f+r.offsetWidth>u.l+u.w&&(f=s.left-r.offsetWidth),f<u.l&&(f=s.left+this.offsetWidth),n.css({visibility:"visible",display:"block",top:a+"px",left:f+"px"}),i.onShow.apply(this,[n.get(0)])!=0&&n.show(),e(document).bind("mousedown",{cal:n,trigger:this},m)}return!1},m=function(t){t.target!=t.data.trigger&&!d(t.data.cal.get(0),t.target,t.data.cal.get(0))&&(t.data.cal.data("datepicker").onHide.apply(this,[t.data.cal.get(0)])!=0&&t.data.cal.hide(),e(document).unbind("mousedown",m))};return{init:function(t){return t=e.extend({},s,t||{}),f(t.locale),t.calendars=Math.max(1,parseInt(t.calendars,10)||1),t.mode=/single|multiple|range/.test(t.mode)?t.mode:"single",this.each(function(){if(!e(this).data("datepicker")){t.el=this,t.date.constructor==String&&(t.date=u(t.date,t.format),t.date.setHours(0,0,0,0));if(t.mode!="single")if(t.date.constructor!=Array)t.date=[t.date.valueOf()],t.mode=="range"&&t.date.push((new Date(t.date[0])).setHours(23,59,59,0).valueOf());else{for(var s=0;s<t.date.length;s++)t.date[s]=u(t.date[s],t.format).setHours(0,0,0,0).valueOf();t.mode=="range"&&(t.date[1]=(new Date(t.date[1])).setHours(23,59,59,0).valueOf())}else t.date=t.date.valueOf();t.current?t.current=u(t.current,t.format):t.current=new Date,t.current.setDate(1),t.current.setHours(0,0,0,0);var a="datepicker_"+parseInt(Math.random()*1e3),f;t.id=a,e(this).data("datepickerId",t.id);var h=e(i.wrapper).attr("id",a).bind("click",c).data("datepicker",t);t.className&&h.addClass(t.className);var p="";for(var s=0;s<t.calendars;s++)f=t.starts,s>0&&(p+=i.space),p+=r(i.head.join(""),{week:t.locale.weekMin,prev:t.prev,next:t.next,day1:t.locale.daysMin[f++%7],day2:t.locale.daysMin[f++%7],day3:t.locale.daysMin[f++%7],day4:t.locale.daysMin[f++%7],day5:t.locale.daysMin[f++%7],day6:t.locale.daysMin[f++%7],day7:t.locale.daysMin[f++%7]});h.find("tr:first").append(p).find("table").addClass(n[t.view]),o(h.get(0)),t.flat?(h.appendTo(this).show().css("position","relative"),l(h.get(0))):(h.appendTo(document.body),e(this).bind(t.eventName,v))}})},showPicker:function(){return this.each(function(){e(this).data("datepickerId")&&v.apply(this)})},hidePicker:function(){return this.each(function(){e(this).data("datepickerId")&&e("#"+e(this).data("datepickerId")).hide()})},setDate:function(t,n){return this.each(function(){if(e(this).data("datepickerId")){var r=e("#"+e(this).data("datepickerId")),i=r.data("datepicker");i.date=t,i.date.constructor==String&&(i.date=u(i.date,i.format),i.date.setHours(0,0,0,0));if(i.mode!="single")if(i.date.constructor!=Array)i.date=[i.date.valueOf()],i.mode=="range"&&i.date.push((new Date(i.date[0])).setHours(23,59,59,0).valueOf());else{for(var s=0;s<i.date.length;s++)i.date[s]=u(i.date[s],i.format).setHours(0,0,0,0).valueOf();i.mode=="range"&&(i.date[1]=(new Date(i.date[1])).setHours(23,59,59,0).valueOf())}else i.date=i.date.valueOf();n&&(i.current=new Date(i.mode!="single"?i.date[0]:i.date)),o(r.get(0))}})},getDate:function(t){if(this.size()>0)return h(e("#"+e(this).data("datepickerId")).data("datepicker"))[t?0:1]},clear:function(){return this.each(function(){if(e(this).data("datepickerId")){var t=e("#"+e(this).data("datepickerId")),n=t.data("datepicker");n.mode!="single"&&(n.date=[],o(t.get(0)))}})},fixLayout:function(){return this.each(function(){if(e(this).data("datepickerId")){var t=e("#"+e(this).data("datepickerId")),n=t.data("datepicker");n.flat&&l(t.get(0))}})}}}();e.fn.extend({DatePicker:t.init,DatePickerHide:t.hidePicker,DatePickerShow:t.showPicker,DatePickerSetDate:t.setDate,DatePickerGetDate:t.getDate,DatePickerClear:t.clear,DatePickerLayout:t.fixLayout});var n={},r=function(e,t){var i=/\W/.test(e)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join(" ").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split(" ").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):n[e]=n[e]||r(document.getElementById(e).innerHTML);return t?i(t):i}}),timely.define("external_libs/bootstrap/transition",["jquery_timely"],function(e){function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(e.support.transition.end,function(){n=!0});var i=function(){n||e(r).trigger(e.support.transition.end)};return setTimeout(i,t),this},e(function(){e.support.transition=t()})}),timely.define("external_libs/bootstrap/collapse",["jquery_timely"],function(e){var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r),this.transitioning=null,this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){var e=this.$element.hasClass("ai1ec-width");return e?"width":"height"},t.prototype.show=function(){if(this.transitioning||this.$element.hasClass("ai1ec-in"))return;var t=e.Event("show.bs.collapse");this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.$parent&&this.$parent.find("> .ai1ec-panel > .ai1ec-in");if(n&&n.length){var r=n.data("bs.collapse");if(r&&r.transitioning)return;n.collapse("hide"),r||n.data("bs.collapse",null)}var i=this.dimension();this.$element.removeClass("ai1ec-collapse").addClass("ai1ec-collapsing")[i](0),this.transitioning=1;var s=function(){this.$element.removeClass("ai1ec-collapsing").addClass("ai1ec-in")[i]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return s.call(this);var o=e.camelCase(["scroll",i].join("-"));this.$element.one(e.support.transition.end,e.proxy(s,this)).emulateTransitionEnd(350)[i](this.$element[0][o])},t.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("ai1ec-in"))return;var t=e.Event("hide.bs.collapse");this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("ai1ec-collapsing").removeClass("ai1ec-collapse").removeClass("ai1ec-in"),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("ai1ec-collapsing").addClass("ai1ec-collapse")};if(!e.support.transition)return r.call(this);this.$element[n](0).one(e.support.transition.end,e.proxy(r,this)).emulateTransitionEnd(350)},t.prototype.toggle=function(){this[this.$element.hasClass("ai1ec-in")?"hide":"show"]()};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("bs.collapse"),s=e.extend({},t.DEFAULTS,r.data(),typeof n=="object"&&n);i||r.data("bs.collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.bs.collapse.data-api","[data-toggle=ai1ec-collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i),o=s.data("bs.collapse"),u=o?"toggle":n.data(),a=n.attr("data-parent"),f=a&&e(a);if(!o||!o.transitioning)f&&f.find('[data-toggle=ai1ec-collapse][data-parent="'+a+'"]').not(n).addClass("ai1ec-collapsed"),n[s.hasClass("ai1ec-in")?"addClass":"removeClass"]("ai1ec-collapsed");s.collapse(u)})}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("external_libs/bootstrap/alert",["jquery_timely"],function(e){var t='[data-dismiss="ai1ec-alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("ai1ec-alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("ai1ec-in"),e.support.transition&&i.hasClass("ai1ec-fade")?i.one(e.support.transition.end,s).emulateTransitionEnd(150):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}),timely.define("scripts/add_new_event",["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/gmaps_helper","scripts/add_new_event/event_location/input_coordinates_event_handlers","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_date_time/date_time_event_handlers","scripts/add_new_event/event_cost_helper","external_libs/jquery.calendrical_timespan","external_libs/jquery.inputdate","external_libs/jquery.tools","external_libs/ai1ec_datepicker","external_libs/bootstrap/transition","external_libs/bootstrap/collapse","external_libs/bootstrap/modal","external_libs/bootstrap/alert","external_libs/bootstrap/tab"],function(e,t,n,r,i,s,o,u,a){var f=function(){var t=new Date(n.now*1e3),r={allday:"#ai1ec_all_day_event",start_date_input:"#ai1ec_start-date-input",start_time_input:"#ai1ec_start-time-input",start_time:"#ai1ec_start-time",end_date_input:"#ai1ec_end-date-input",end_time_input:"#ai1ec_end-time-input",end_time:"#ai1ec_end-time",date_format:n.date_format,month_names:n.month_names,day_names:n.day_names,week_start_day:n.week_start_day,twentyfour_hour:n.twentyfour_hour,now:t};e.timespan(r);var i=e("#ai1ec_exdate").val(),s=null,o=!1,u;if(i.length>=8){s=[];var f=[];e.each(i.split(","),function(e,t){var r=t.slice(0,8),i=r.substr(0,4),o=r.substr(4,2);u=r.substr(6,2),o=o.charAt(0)==="0"?"0"+(parseInt(o.charAt(1),10)-1):parseInt(o,10)-1,s.push(new Date(i,o,u)),f.push(a.formatDate(new Date(i,o,u),n.date_format,!0))}),e("#widgetField span:first").html(f.join(", "))}else s=new Date(n.now*1e3),o=!0;e("#widgetCalendar").DatePicker({flat:!0,calendars:3,mode:"multiple",start:1,date:s,onChange:function(t){t=t.toString();if(t.length>=8){var r="",i=[];e.each(t.split(","),function(e,t){i.push(a.formatDate(new Date(t),n.date_format)),r+=t.replace(/-/g,"")+"T000000Z,"}),e("#widgetField span").html(i.join(", ")),r=r.slice(0,r.length-1),e("#ai1ec_exdate").val(r)}else e("#ai1ec_exdate").val("")}}),o&&e("#widgetCalendar").DatePickerClear(),e("#widgetCalendar div.datepicker").css("position","absolute")},l=function(){e(".ai1ec-panel-collapse").on("hide",function(){e(this).parent().removeClass("ai1ec-overflow-visible")}),e(".ai1ec-panel-collapse").on("shown",function(){var t=e(this);window.setTimeout(function(){t.parent().addClass("ai1ec-overflow-visible")},350)})},c=function(){f(),timely.require(["libs/gmaps"],function(e){e(r.init_gmaps)})},h=function(t,n){window.alert(n),t.preventDefault(),e("#publish, #ai1ec_bottom_publish").removeClass("button-primary-disabled"),e("#publish, #ai1ec_bottom_publish").siblings("#ajax-loading, .spinner").css("visibility","hidden")},p=function(t){s.ai1ec_check_lat_long_fields_filled_when_publishing_event(t)===!0&&(s.ai1ec_convert_commas_to_dots_for_coordinates(),s.ai1ec_check_lat_long_ok_for_search(t)),e("#ai1ec_ticket_url, #ai1ec_contact_url").each(function(){var e=this.value;if(""!==e){var r=/(http|https):\/\//;r.test(e)||h(t,n.url_not_valid)}})},d=function(){e("#ai1ec_google_map").click(i.toggle_visibility_of_google_map_on_click),e("#ai1ec_input_coordinates").change(i.toggle_visibility_of_coordinate_fields_on_click),e("#post").submit(p),e("input.coordinates").blur(i.update_map_from_coordinates_on_blur),e("#ai1ec_bottom_publish").on("click",o.trigger_publish),e(document).on("change","#ai1ec_end",o.show_end_fields).on("click","#ai1ec_repeat_apply",o.handle_click_on_apply_button).on("click","#ai1ec_repeat_cancel",o.handle_click_on_cancel_modal).on("click","#ai1ec_monthly_type_bymonthday, #ai1ec_monthly_type_byday",o.handle_checkbox_monthly_tab_modal).on("click",".ai1ec-btn-group-grid a",o.handle_click_on_toggle_buttons),e("#ai1ec_repeat_box").on("hidden.bs.modal",o.handle_modal_hide),o.execute_pseudo_handlers(),e("#widgetField > a, #widgetField > span, #ai1ec_exclude_date_label").on("click",o.handle_animation_of_calendar_widget),e("#ai1ec_is_free").on("change",u.handle_change_is_free)},v=function(){e("#ai1ec_event").insertAfter("#titlediv")},m=function(){c(),t(function(){l(),v(),d()})};return{start:m}}),timely.require(["scripts/add_new_event"],function(e){e.start()}),timely.define("pages/add_new_event",function(){});
|
public/js/pages/calendar.js
CHANGED
|
@@ -304,4 +304,4 @@ OTHER DEALINGS IN THE SOFTWARE.
|
|
| 304 |
* limitations under the License.
|
| 305 |
* ======================================================================== */
|
| 306 |
|
| 307 |
-
timely.define("scripts/calendar/print",["jquery_timely"],function(e){var t=function(t){t.preventDefault();var n=e("body"),r=e("html"),i=e("#ai1ec-container").html(),s=n.html();s=s.replace(/<script.*?>([\s\S]*?)<\/script>/gmi,""),n.empty(),n.addClass("timely"),r.addClass("ai1ec-print"),n.html(i),e("span").click(function(){return!1}),window.print(),n.removeClass("timely"),r.removeClass("ai1ec-print"),n.html(s)};return{handle_click_on_print_button:t}}),timely.define("scripts/calendar/agenda_view",["jquery_timely"],function(e){var t=function(){e(this).closest(".ai1ec-event").toggleClass("ai1ec-expanded").find(".ai1ec-event-summary").slideToggle(300)},n=function(){e(".ai1ec-expanded .ai1ec-event-toggle").click()},r=function(){e(".ai1ec-event:not(.ai1ec-expanded) .ai1ec-event-toggle").click()};return{toggle_event:t,collapse_all:n,expand_all:r}}),timely.define("external_libs/modernizr",[],function(){var e=function(e,t,n){function S(e){f.cssText=e}function x(e,t){return S(h.join(e+";")+(t||""))}function T(e,t){return typeof e===t}function N(e,t){return!!~(""+e).indexOf(t)}function C(e,t,r){for(var i in e){var s=t[e[i]];if(s!==n)return r===!1?e[i]:T(s,"function")?s.bind(r||t):s}return!1}var r="2.5.3",i={},s=!0,o=t.documentElement,u="modernizr",a=t.createElement(u),f=a.style,l,c={}.toString,h=" -webkit- -moz- -o- -ms- ".split(" "),p={},d={},v={},m=[],g=m.slice,y,b=function(e,n,r,i){var s,a,f,l=t.createElement("div"),c=t.body,h=c?c:t.createElement("body");if(parseInt(r,10))while(r--)f=t.createElement("div"),f.id=i?i[r]:u+(r+1),l.appendChild(f);return s=["­","<style>",e,"</style>"].join(""),l.id=u,(c?l:h).innerHTML+=s,h.appendChild(l),c||(h.style.background="",o.appendChild(h)),a=n(l,e),c?l.parentNode.removeChild(l):h.parentNode.removeChild(h),!!a},w={}.hasOwnProperty,E;!T(w,"undefined")&&!T(w.call,"undefined")?E=function(e,t){return w.call(e,t)}:E=function(e,t){return t in e&&T(e.constructor.prototype[t],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=g.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,o=n.apply(s,r.concat(g.call(arguments)));return Object(o)===o?o:s}return n.apply(t,r.concat(g.call(arguments)))};return i});var k=function(n,r){var s=n.join(""),o=r.length;b(s,function(n,r){var s=t.styleSheets[t.styleSheets.length-1],u=s?s.cssRules&&s.cssRules[0]?s.cssRules[0].cssText:s.cssText||"":"",a=n.childNodes,f={};while(o--)f[a[o].id]=a[o];i.touch="ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch||(f.touch&&f.touch.offsetTop)===9},o,r)}([,["@media (",h.join("touch-enabled),("),u,")","{#touch{top:9px;position:absolute}}"].join("")],[,"touch"]);p.touch=function(){return i.touch};for(var L in p)E(p,L)&&(y=L.toLowerCase(),i[y]=p[L](),m.push((i[y]?"":"no-")+y));return S(""),a=l=null,i._version=r,i._prefixes=h,i.testStyles=b,o.className=o.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(s?" js "+m.join(" "):""),i}(window,window.document);return e}),timely.define("scripts/calendar/month_view",["jquery_timely","external_libs/modernizr"],function(e,t){var n=navigator.userAgent.match(/opera/i),r=navigator.userAgent.match(/webkit/i),i=function(){var t=e(".ai1ec-day"),n=e(".ai1ec-week:first .ai1ec-day").length;e(".ai1ec-month-view .ai1ec-multiday").each(function(){var n=this.parentNode,r=e(this).outerHeight(!0),i=parseInt(e(this).data("endDay"),10),u=e(".ai1ec-date",n),a=parseInt(u.text(),10),f=e(this).data("endTruncated");f&&(i=parseInt(e(t[t.length-1]).text(),10));var l=e(this),c=e(".ai1ec-event",l)[0].style.backgroundColor,h=0,p=i-a+1,d=p,v,m=0;t.each(function(t){var n=e(".ai1ec-date",this),r=e(this.parentNode),u=r.index(),f=parseInt(n.text(),10);if(f>=a&&f<=i){f===a&&(v=parseInt(n.css("marginBottom"),10)+16),h===0&&m++;if(u===0&&f>a&&d!==0){var p=l.next(".ai1ec-popup").andSelf().clone(!1);n.parent().append(p);var g=p.first();g.addClass("ai1ec-multiday-bar ai1ec-multiday-clone"),g.css({position:"absolute",left:"1px",top:parseInt(n.css("marginBottom"),10)+13,backgroundColor:c});var y=d>7?7:d;g.css("width",s(y)),d>7&&g.append(o(1,c)),g.append(o(2,c))}h===0?n.css({marginBottom:v+"px"}):n.css({marginBottom:"+=16px"}),d--,d>0&&u===6&&h++}});if(f){var g=e("."+l[0].className.replace(/\s+/igm,".")).last();g.append(o(1,c))}e(this).css({position:"absolute",top:u.outerHeight(!0)-r-1+"px",left:"1px",width:s(m)}),h>0&&e(this).append(o(1,c)),e(this).data("startTruncated")&&e(this).append(o(2,c)).addClass("ai1ec-multiday-bar")})},s=function(e){var t;switch(e){case 1:t=97.5;break;case 2:t=198.7;break;case 3:t=300;break;case 4:t=401;break;case 5:r||n?t=507:t=503.4;break;case 6:r||n?t=608:t=603.5;break;case 7:r||n?t=709:t=705}return t+"%"},o=function(t,n){var r=e('<div class="ai1ec-multiday-arrow'+t+'"></div>');return t===1?r.css({borderLeftColor:n}):r.css({borderTopColor:n,borderRightColor:n,borderBottomColor:n}),r};return{extend_multiday_events:i}}),timely.define("libs/frontend_utils",[],function(){var e=function(e){var t,n;t=function(e){if(/&[^;]+;/.test(e)){var t=document.createElement("div");return t.innerHTML=e,t.firstChild?t.firstChild.nodeValue:e}return e};if(typeof e=="string")return t(e);if(typeof e=="object")for(n in e)typeof e[n]=="string"&&(e[n]=t(e[n]));return e},t=function(e,t,n){var r,i,s,o,u;if("#"===e.charAt(0)||"?"===e.charAt(0))e=e.substring(1);r={},e=e.split(t);for(i=0;i<e.length;i++)o=e[i].trim(),-1!==(u=o.indexOf(n))?(s=o.substring(0,u).trim(),o=o.substring(u+1).trim()):(s=o,o=!0),r[s]=o;return r},n=function(e){var n,r,i,s,o;e=t(e,"&","="),i=Object.keys(e),n={ai1ec:{},action:"month"};for(r=0;r<i.length;r++)if("ai1ec"===i[r]){var u=t(e[i[r]],"|",":");for(s in u)if(""!==u[s]){if("action"===s||"view"===s)n.action=u[s];n.ai1ec[s]=u[s]}}else"ai1ec_"===i[r].substring(0,6)?n.ai1ec[i[r].substring(6)]=e[i[r]]:n[i[r]]=e[i[r]];"ai1ec_"!==n.action.substring(0,6)&&(n.action="ai1ec_"+n.action),o="action="+n.action+"&ai1ec=";for(s in n.ai1ec)n.ai1ec.hasOwnProperty(s)&&(o+=escape(s)+":"+escape(n.ai1ec[s])+"|");o=o.substring(0,o.length-1);for(s in n)"ai1ec"!==s&&"action"!==s&&(o+="&"+s+"="+escape(n[s]));return o};return{ai1ec_convert_entities:e,ai1ec_map_internal_query:n,ai1ec_tokenize_uri:t}}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/frontend/common_event_handlers",["jquery_timely"],function(e){var t=function(t){var n=e(this),r=n.next(".ai1ec-popup"),i,s,o;if(r.length===0)return;i=r.html(),s=r.attr("class");var u=n.closest("#ai1ec-calendar-view");u.length===0&&(u=e("body")),n.offset().left-u.offset().left>182?o="left":o="right",n.constrained_popover({content:i,title:"",placement:o,trigger:"manual",html:!0,template:'<div class="timely ai1ec-popover '+s+'">'+'<div class="ai1ec-arrow"></div>'+'<div class="ai1ec-popover-inner">'+'<div class="ai1ec-popover-content"><div></div></div>'+"</div>"+"</div>",container:"body"}).constrained_popover("show")},n=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-popup").length===0&&e(this).constrained_popover("hide")},r=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&(e(this).remove(),e("body > .ai1ec-tooltip").remove())},i=function(t){var n=e(this),r={template:'<div class="timely ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"manual",container:"body"};if(n.is(".ai1ec-category .ai1ec-color-swatch"))return;n.tooltip(r),n.tooltip("show")},s=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&e(this).data("bs.tooltip")&&e(this).tooltip("hide")},o=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip-trigger").length===0&&e(this).remove(),n.closest(".ai1ec-popup").length===0&&e("body > .ai1ec-popup").remove()};return{handle_popover_over:t,handle_popover_out:n,handle_popover_self_out:r,handle_tooltip_over:i,handle_tooltip_out:s,handle_tooltip_self_out:o}}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/constrained_popover",["jquery_timely","external_libs/bootstrap/popover"],function(e){var t=function(e,t){this.init("constrained_popover",e,t)};t.DEFAULTS=e.extend({},e.fn.popover.Constructor.DEFAULTS,{container:"",content:this.options}),t.prototype=e.extend({},e.fn.popover.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.applyPlacement=function(t,n){e.fn.popover.Constructor.prototype.applyPlacement.call(this,t,n);var r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=this.getPosition(),u={};switch(n){case"left":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left-i:u.left=newPos.left-i,r.offset(u);break;case"right":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left+o.width:u.left=newPos.left+o.width,r.offset(u)}},t.prototype.defineBounds=function(t){var n,r,i,s,o,u={},a=e(this.options.container);return a.length?(n=a.offset(),r=n.top,i=n.left,s=r+a.height(),o=i+a.width(),t.top+t.height/2<r&&(u.top=r),t.top+t.height/2>s&&(u.top=s),t.left-t.width/2<i&&(u.left=i),t.left-t.width/2>o&&(u.left=o),u):!1};var n=e.fn.popover;e.fn.constrained_popover=function(n){return this.each(function(){var r=e(this),i=r.data("ai1ec.constrained_popover"),s=typeof n=="object"&&n;i||r.data("ai1ec.constrained_popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.constrained_popover.Constructor=t,e.fn.constrained_popover.noConflict=function(){return e.fn.constrained_popover=n,this}}),timely.define("external_libs/bootstrap/dropdown",["jquery_timely"],function(e){function i(){e(t).remove(),e(n).each(function(t){var n=s(e(this));if(!n.hasClass("ai1ec-open"))return;n.trigger(t=e.Event("hide.bs.dropdown"));if(t.isDefaultPrevented())return;n.removeClass("ai1ec-open").trigger("hidden.bs.dropdown")})}function s(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&e(n);return r&&r.length?r:t.parent()}var t=".ai1ec-dropdown-backdrop",n="[data-toggle=ai1ec-dropdown]",r=function(t){e(t).on("click.bs.dropdown",this.toggle)};r.prototype.toggle=function(t){var n=e(this);if(n.is(".ai1ec-disabled, :disabled"))return;var r=s(n),o=r.hasClass("ai1ec-open");i();if(!o){"ontouchstart"in document.documentElement&&!r.closest(".ai1ec-navbar-nav").length&&e('<div class="ai1ec-dropdown-backdrop"/>').insertAfter(e(this)).on("click",i),r.trigger(t=e.Event("show.bs.dropdown"));if(t.isDefaultPrevented())return;r.toggleClass("ai1ec-open").trigger("shown.bs.dropdown"),n.focus()}return!1},r.prototype.keydown=function(t){if(!/(38|40|27)/.test(t.keyCode))return;var r=e(this);t.preventDefault(),t.stopPropagation();if(r.is(".ai1ec-disabled, :disabled"))return;var i=s(r),o=i.hasClass("ai1ec-open");if(!o||o&&t.keyCode==27)return t.which==27&&i.find(n).focus(),r.click();var u=e("[role=menu] li:not(.ai1ec-divider):visible a",i);if(!u.length)return;var a=u.index(u.filter(":focus"));t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<u.length-1&&a++,~a||(a=0),u.eq(a).focus()};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),typeof t=="string"&&i[t].call(n)})},e.fn.dropdown.Constructor=r,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".ai1ec-dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,r.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",r.prototype.keydown)}),timely.define("scripts/common_scripts/frontend/common_frontend",["jquery_timely","domReady","scripts/common_scripts/frontend/common_event_handlers","ai1ec_calendar","external_libs/modernizr","external_libs/bootstrap/tooltip","external_libs/constrained_popover","external_libs/bootstrap/dropdown"],function(e,t,n,r,i){var s=!1,o=function(){s=!0,e(document).on("mouseenter",".ai1ec-popup-trigger",n.handle_popover_over),e(document).on("mouseleave",".ai1ec-popup-trigger",n.handle_popover_out),e(document).on("mouseleave",".ai1ec-popup",n.handle_popover_self_out),e(document).on("mouseenter",".ai1ec-tooltip-trigger",n.handle_tooltip_over),e(document).on("mouseleave",".ai1ec-tooltip-trigger",n.handle_tooltip_out),e(document).on("mouseleave",".ai1ec-tooltip",n.handle_tooltip_self_out)},u=function(){t(function(){o()})},a=function(){return s};return{start:u,are_event_listeners_attached:a}}),timely.define("external_libs/select2",["jquery_timely"],function(e){(function(e){typeof e.fn.each2=="undefined"&&e.fn.extend({each2:function(t){var n=e([0]),r=-1,i=this.length;while(++r<i&&(n.context=n[0]=this[r])&&t.call(n[0],r,n)!==!1);return this}})})(e),function(e,t){function l(e,t){var n=0,r=t.length;for(;n<r;n+=1)if(c(e,t[n]))return n;return-1}function c(e,n){return e===n?!0:e===t||n===t?!1:e===null||n===null?!1:e.constructor===String?e===n+"":n.constructor===String?n===e+"":!1}function h(t,n){var r,i,s;if(t===null||t.length<1)return[];r=t.split(n);for(i=0,s=r.length;i<s;i+=1)r[i]=e.trim(r[i]);return r}function p(e){return e.outerWidth(!1)-e.width()}function d(n){var r="keyup-change-value";n.bind("keydown",function(){e.data(n,r)===t&&e.data(n,r,n.val())}),n.bind("keyup",function(){var i=e.data(n,r);i!==t&&n.val()!==i&&(e.removeData(n,r),n.trigger("keyup-change"))})}function v(n){n.bind("mousemove",function(n){var r=a;(r===t||r.x!==n.pageX||r.y!==n.pageY)&&e(n.target).trigger("mousemove-filtered",n)})}function m(e,n,r){r=r||t;var i;return function(){var t=arguments;window.clearTimeout(i),i=window.setTimeout(function(){n.apply(r,t)},e)}}function g(e){var t=!1,n;return function(){return t===!1&&(n=e(),t=!0),n}}function y(e,t){var n=m(e,function(e){t.trigger("scroll-debounced",e)});t.bind("scroll",function(e){l(e.target,t.get())>=0&&n(e)})}function b(e){if(e[0]===document.activeElement)return;window.setTimeout(function(){var t=e[0],n=e.val().length,r;e.focus(),t.setSelectionRange?t.setSelectionRange(n,n):t.createTextRange&&(r=t.createTextRange(),r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",n),r.select())},0)}function w(e){e.preventDefault(),e.stopPropagation()}function E(e){e.preventDefault(),e.stopImmediatePropagation()}function S(t){if(!u){var n=t[0].currentStyle||window.getComputedStyle(t[0],null);u=e(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:n.fontSize,fontFamily:n.fontFamily,fontStyle:n.fontStyle,fontWeight:n.fontWeight,letterSpacing:n.letterSpacing,textTransform:n.textTransform,whiteSpace:"nowrap"}),u.attr("class","select2-sizer"),e("body").append(u)}return u.text(t.val()),u.width()}function x(t,n,r){var i,s=[],o;i=t.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")===0&&s.push(this)}),i=n.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")!==0&&(o=r(this),typeof o=="string"&&o.length>0&&s.push(this))}),t.attr("class",s.join(" "))}function T(e,t,n,r){var i=e.toUpperCase().indexOf(t.toUpperCase()),s=t.length;if(i<0){n.push(r(e));return}n.push(r(e.substring(0,i))),n.push("<span class='select2-match'>"),n.push(r(e.substring(i,i+s))),n.push("</span>"),n.push(r(e.substring(i+s,e.length)))}function N(t){var n,r=0,i=null,s=t.quietMillis||100,o=t.url,u=this;return function(a){window.clearTimeout(n),n=window.setTimeout(function(){r+=1;var n=r,s=t.data,f=o,l=t.transport||e.ajax,c=t.type||"GET",h={};s=s?s.call(u,a.term,a.page,a.context):null,f=typeof f=="function"?f.call(u,a.term,a.page,a.context):f,null!==i&&i.abort(),t.params&&(e.isFunction(t.params)?e.extend(h,t.params.call(u)):e.extend(h,t.params)),e.extend(h,{url:f,dataType:t.dataType,data:s,type:c,cache:!1,success:function(e){if(n<r)return;var i=t.results(e,a.page);a.callback(i)}}),i=l.call(u,h)},s)}}function C(t){var n=t,r,i,s=function(e){return""+e.text};e.isArray(n)&&(i=n,n={results:i}),e.isFunction(n)===!1&&(i=n,n=function(){return i});var o=n();return o.text&&(s=o.text,e.isFunction(s)||(r=n.text,s=function(e){return e[r]})),function(t){var r=t.term,i={results:[]},o;if(r===""){t.callback(n());return}o=function(n,i){var u,a;n=n[0];if(n.children){u={};for(a in n)n.hasOwnProperty(a)&&(u[a]=n[a]);u.children=[],e(n.children).each2(function(e,t){o(t,u.children)}),(u.children.length||t.matcher(r,s(u),n))&&i.push(u)}else t.matcher(r,s(n),n)&&i.push(n)},e(n().results).each2(function(e,t){o(t,i.results)}),t.callback(i)}}function k(n){var r=e.isFunction(n);return function(i){var s=i.term,o={results:[]};e(r?n():n).each(function(){var e=this.text!==t,n=e?this.text:this;(s===""||i.matcher(s,n))&&o.results.push(e?this:{id:this,text:this})}),i.callback(o)}}function L(t,n){if(e.isFunction(t))return!0;if(!t)return!1;throw new Error("formatterName must be a function or a falsy value")}function A(t){return e.isFunction(t)?t():t}function O(t){var n=0;return e.each(t,function(e,t){t.children?n+=O(t.children):n++}),n}function M(e,n,r,i){var s=e,o=!1,u,a,f,l,h;if(!i.createSearchChoice||!i.tokenSeparators||i.tokenSeparators.length<1)return t;for(;;){a=-1;for(f=0,l=i.tokenSeparators.length;f<l;f++){h=i.tokenSeparators[f],a=e.indexOf(h);if(a>=0)break}if(a<0)break;u=e.substring(0,a),e=e.substring(a+h.length);if(u.length>0){u=i.createSearchChoice(u,n);if(u!==t&&u!==null&&i.id(u)!==t&&i.id(u)!==null){o=!1;for(f=0,l=n.length;f<l;f++)if(c(i.id(u),i.id(n[f]))){o=!0;break}o||r(u)}}}if(s!==e)return e}function _(t,n){var r=function(){};return r.prototype=new t,r.prototype.constructor=r,r.prototype.parent=t.prototype,r.prototype=e.extend(r.prototype,n),r}var n,r,i,s,o,u,a,f;n={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(e){e=e.which?e.which:e;switch(e){case n.LEFT:case n.RIGHT:case n.UP:case n.DOWN:return!0}return!1},isControl:function(e){var t=e.which;switch(t){case n.SHIFT:case n.CTRL:case n.ALT:return!0}return e.metaKey?!0:!1},isFunctionKey:function(e){return e=e.which?e.which:e,e>=112&&e<=123}},f=e(document),o=function(){var e=1;return function(){return e++}}(),f.bind("mousemove",function(e){a={x:e.pageX,y:e.pageY}}),r=_(Object,{bind:function(e){var t=this;return function(){e.apply(t,arguments)}},init:function(n){var r,i,s=".select2-results",u;this.opts=n=this.prepareOpts(n),this.id=n.id,n.element.data("select2")!==t&&n.element.data("select2")!==null&&this.destroy(),this.enabled=!0,this.container=this.createContainer(),this.containerId="s2id_"+(n.element.attr("id")||"autogen"+o()),this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.body=g(function(){return n.element.closest("body")}),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.css(A(n.containerCss)),this.container.addClass(A(n.containerCssClass)),this.elementTabIndex=this.opts.element.attr("tabIndex"),this.opts.element.data("select2",this).addClass("select2-offscreen").bind("focus.select2",function(){e(this).select2("focus")}).attr("tabIndex","-1").before(this.container),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),this.dropdown.addClass(A(n.dropdownCssClass)),this.dropdown.data("select2",this),this.results=r=this.container.find(s),this.search=i=this.container.find("input.select2-input"),i.attr("tabIndex",this.elementTabIndex),this.resultsPage=0,this.context=null,this.initContainer(),v(this.results),this.dropdown.delegate(s,"mousemove-filtered touchstart touchmove touchend",this.bind(this.highlightUnderEvent)),y(80,this.results),this.dropdown.delegate(s,"scroll-debounced",this.bind(this.loadMoreIfNeeded)),e.fn.mousewheel&&r.mousewheel(function(e,t,n,i){var s=r.scrollTop(),o;i>0&&s-i<=0?(r.scrollTop(0),w(e)):i<0&&r.get(0).scrollHeight-r.scrollTop()+i<=r.height()&&(r.scrollTop(r.get(0).scrollHeight-r.height()),w(e))}),d(i),i.bind("keyup-change input paste",this.bind(this.updateResults)),i.bind("focus",function(){i.addClass("select2-focused")}),i.bind("blur",function(){i.removeClass("select2-focused")}),this.dropdown.delegate(s,"mouseup",this.bind(function(t){e(t.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(t),this.selectHighlighted(t))})),this.dropdown.bind("click mouseup mousedown",function(e){e.stopPropagation()}),e.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),(n.element.is(":disabled")||n.element.is("[readonly='readonly']"))&&this.disable()},destroy:function(){var e=this.opts.element.data("select2");this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),e!==t&&(e.container.remove(),e.dropdown.remove(),e.opts.element.removeClass("select2-offscreen").removeData("select2").unbind(".select2").attr({tabIndex:this.elementTabIndex}).show())},prepareOpts:function(n){var r,i,s,o;r=n.element,r.get(0).tagName.toLowerCase()==="select"&&(this.select=i=n.element),i&&e.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in n)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),n=e.extend({},{populateResults:function(r,i,s){var o,u,a,f,l=this.opts.id,c=this;o=function(r,i,u){var a,f,h,p,d,v,m,g,y,b;r=n.sortResults(r,i,s);for(a=0,f=r.length;a<f;a+=1)h=r[a],d=h.disabled===!0,p=!d&&l(h)!==t,v=h.children&&h.children.length>0,m=e("<li></li>"),m.addClass("select2-results-dept-"+u),m.addClass("select2-result"),m.addClass(p?"select2-result-selectable":"select2-result-unselectable"),d&&m.addClass("select2-disabled"),v&&m.addClass("select2-result-with-children"),m.addClass(c.opts.formatResultCssClass(h)),g=e(document.createElement("div")),g.addClass("select2-result-label"),b=n.formatResult(h,g,s,c.opts.escapeMarkup),b!==t&&g.html(b),m.append(g),v&&(y=e("<ul></ul>"),y.addClass("select2-result-sub"),o(h.children,y,u+1),m.append(y)),m.data("select2-data",h),i.append(m)},o(i,r,0)}},e.fn.select2.defaults,n),typeof n.id!="function"&&(s=n.id,n.id=function(e){return e[s]});if(e.isArray(n.element.data("select2Tags"))){if("tags"in n)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+n.element.attr("id");n.tags=n.element.attr("data-select2-tags")}i?(n.query=this.bind(function(n){var i={results:[],more:!1},s=n.term,o,u,a;a=function(e,t){var r;e.is("option")?n.matcher(s,e.text(),e)&&t.push({id:e.attr("value"),text:e.text(),element:e.get(),css:e.attr("class"),disabled:c(e.attr("disabled"),"disabled")}):e.is("optgroup")&&(r={text:e.attr("label"),children:[],element:e.get(),css:e.attr("class")},e.children().each2(function(e,t){a(t,r.children)}),r.children.length>0&&t.push(r))},o=r.children(),this.getPlaceholder()!==t&&o.length>0&&(u=o[0],e(u).text()===""&&(o=o.not(u))),o.each2(function(e,t){a(t,i.results)}),n.callback(i)}),n.id=function(e){return e.id},n.formatResultCssClass=function(e){return e.css}):"query"in n||("ajax"in n?(o=n.element.data("ajax-url"),o&&o.length>0&&(n.ajax.url=o),n.query=N.call(n.element,n.ajax)):"data"in n?n.query=C(n.data):"tags"in n&&(n.query=k(n.tags),n.createSearchChoice===t&&(n.createSearchChoice=function(e){return{id:e,text:e}}),n.initSelection===t&&(n.initSelection=function(t,r){var i=[];e(h(t.val(),n.separator)).each(function(){var t=this,r=this,s=n.tags;e.isFunction(s)&&(s=s()),e(s).each(function(){if(c(this.id,t))return r=this.text,!1}),i.push({id:t,text:r})}),r(i)})));if(typeof n.query!="function")throw"query function not defined for Select2 "+n.element.attr("id");return n},monitorSource:function(){var e=this.opts.element,t;e.bind("change.select2",this.bind(function(e){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),t=this.bind(function(){var e,t,n=this;e=this.opts.element.attr("disabled")!=="disabled",t=this.opts.element.attr("readonly")==="readonly",e=e&&!t,this.enabled!==e&&(e?this.enable():this.disable()),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(A(this.opts.containerCssClass)),x(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(A(this.opts.dropdownCssClass))}),e.bind("propertychange.select2 DOMAttrModified.select2",t),typeof WebKitMutationObserver!="undefined"&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new WebKitMutationObserver(function(e){e.forEach(t)}),this.propertyObserver.observe(e.get(0),{attributes:!0,subtree:!1}))},triggerChange:function(t){t=t||{},t=e.extend({},t,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(t),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},enable:function(){if(this.enabled)return;this.enabled=!0,this.container.removeClass("select2-container-disabled"),this.opts.element.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.close(),this.enabled=!1,this.container.addClass("select2-container-disabled"),this.opts.element.attr("disabled","disabled")},opened:function(){return this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var t=this.container.offset(),n=this.container.outerHeight(!1),r=this.container.outerWidth(!1),i=this.dropdown.outerHeight(!1),s=e(window).scrollLeft()+e(window).width(),o=e(window).scrollTop()+e(window).height(),u=t.top+n,a=t.left,f=u+i<=o,l=t.top-i>=this.body().scrollTop(),c=this.dropdown.outerWidth(!1),h=a+c<=s,p=this.dropdown.hasClass("select2-drop-above"),d,v,m;this.body().css("position")!=="static"&&(d=this.body().offset(),u-=d.top,a-=d.left),p?(v=!0,!l&&f&&(v=!1)):(v=!1,!f&&l&&(v=!0)),h||(a=t.left+r-c),v?(u=t.top-i,this.container.addClass("select2-drop-above"),this.dropdown.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")),m=e.extend({top:u,left:a,width:r},A(this.opts.dropdownCss)),this.dropdown.css(m)},shouldOpen:function(){var t;return this.opened()?!1:(t=e.Event("opening"),this.opts.element.trigger(t),!t.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(window.setTimeout(this.bind(this.opening),1),!0):!1},opening:function(){var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t,s;this.clearDropdownAlignmentPreference(),this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body()),this.updateResults(!0),s=e("#select2-drop-mask"),s.length==0&&(s=e(document.createElement("div")),s.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),s.hide(),s.appendTo(this.body()),s.bind("mousedown touchstart",function(t){var n=e("#select2-drop"),r;n.length>0&&(r=n.data("select2"),r.opts.selectOnBlur&&r.selectHighlighted({noFocus:!0}),r.close())})),this.dropdown.prev()[0]!==s[0]&&this.dropdown.before(s),e("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),s.css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),s.show(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active"),this.ensureHighlightVisible();var o=this;this.container.parents().add(window).each(function(){e(this).bind(r+" "+n+" "+i,function(t){e("#select2-drop-mask").css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),o.positionDropdown()})}),this.focusSearch()},close:function(){if(!this.opened())return;var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t;this.container.parents().add(window).each(function(){e(this).unbind(n).unbind(r).unbind(i)}),this.clearDropdownAlignmentPreference(),e("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open"),this.results.empty(),this.clearSearch(),this.opts.element.trigger(e.Event("close"))},clearSearch:function(){},getMaximumSelectionSize:function(){return A(this.opts.maximumSelectionSize)},ensureHighlightVisible:function(){var t=this.results,n,r,i,s,o,u,a;r=this.highlight();if(r<0)return;if(r==0){t.scrollTop(0);return}n=this.findHighlightableChoices(),i=e(n[r]),s=i.offset().top+i.outerHeight(!0),r===n.length-1&&(a=t.find("li.select2-more-results"),a.length>0&&(s=a.offset().top+a.outerHeight(!0))),o=t.offset().top+t.outerHeight(!0),s>o&&t.scrollTop(t.scrollTop()+(s-o)),u=i.offset().top-t.offset().top,u<0&&i.css("display")!="none"&&t.scrollTop(t.scrollTop()+u)},findHighlightableChoices:function(){var e=this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)")},moveHighlight:function(t){var n=this.findHighlightableChoices(),r=this.highlight();while(r>-1&&r<n.length){r+=t;var i=e(n[r]);if(i.hasClass("select2-result-selectable")&&!i.hasClass("select2-disabled")&&!i.hasClass("select2-selected")){this.highlight(r);break}}},highlight:function(t){var n=this.findHighlightableChoices(),r,i;if(arguments.length===0)return l(n.filter(".select2-highlighted")[0],n.get());t>=n.length&&(t=n.length-1),t<0&&(t=0),this.results.find(".select2-highlighted").removeClass("select2-highlighted"),r=e(n[t]),r.addClass("select2-highlighted"),this.ensureHighlightVisible(),i=r.data("select2-data"),i&&this.opts.element.trigger({type:"highlight",val:this.id(i),choice:i})},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(t){var n=e(t.target).closest(".select2-result-selectable");if(n.length>0&&!n.is(".select2-highlighted")){var r=this.findHighlightableChoices();this.highlight(r.index(n))}else n.length==0&&this.results.find(".select2-highlighted").removeClass("select2-highlighted")},loadMoreIfNeeded:function(){var e=this.results,t=e.find("li.select2-more-results"),n,r=-1,i=this.resultsPage+1,s=this,o=this.search.val(),u=this.context;if(t.length===0)return;n=t.offset().top-e.offset().top-e.height(),n<=this.opts.loadMorePadding&&(t.addClass("select2-active"),this.opts.query({element:this.opts.element,term:o,page:i,context:u,matcher:this.opts.matcher,callback:this.bind(function(n){if(!s.opened())return;s.opts.populateResults.call(this,e,n.results,{term:o,page:i,context:u}),n.more===!0?(t.detach().appendTo(e).text(s.opts.formatLoadMore(i+1)),window.setTimeout(function(){s.loadMoreIfNeeded()},10)):t.remove(),s.positionDropdown(),s.resultsPage=i,s.context=n.context})}))},tokenize:function(){},updateResults:function(n){function f(){i.scrollTop(0),r.removeClass("select2-active"),u.positionDropdown()}function l(e){i.html(e),f()}var r=this.search,i=this.results,s=this.opts,o,u=this,a;if(n!==!0&&(this.showSearchInput===!1||!this.opened()))return;r.addClass("select2-active");var h=this.getMaximumSelectionSize();if(h>=1){o=this.data();if(e.isArray(o)&&o.length>=h&&L(s.formatSelectionTooBig,"formatSelectionTooBig")){l("<li class='select2-selection-limit'>"+s.formatSelectionTooBig(h)+"</li>");return}}if(r.val().length<s.minimumInputLength){L(s.formatInputTooShort,"formatInputTooShort")?l("<li class='select2-no-results'>"+s.formatInputTooShort(r.val(),s.minimumInputLength)+"</li>"):l("");return}s.formatSearching()&&n===!0&&l("<li class='select2-searching'>"+s.formatSearching()+"</li>");if(s.maximumInputLength&&r.val().length>s.maximumInputLength){L(s.formatInputTooLong,"formatInputTooLong")?l("<li class='select2-no-results'>"+s.formatInputTooLong(r.val(),s.maximumInputLength)+"</li>"):l("");return}a=this.tokenize(),a!=t&&a!=null&&r.val(a),this.resultsPage=1,s.query({element:s.element,term:r.val(),page:this.resultsPage,context:null,matcher:s.matcher,callback:this.bind(function(o){var a;if(!this.opened())return;this.context=o.context===t?null:o.context,this.opts.createSearchChoice&&r.val()!==""&&(a=this.opts.createSearchChoice.call(null,r.val(),o.results),a!==t&&a!==null&&u.id(a)!==t&&u.id(a)!==null&&e(o.results).filter(function(){return c(u.id(this),u.id(a))}).length===0&&o.results.unshift(a));if(o.results.length===0&&L(s.formatNoMatches,"formatNoMatches")){l("<li class='select2-no-results'>"+s.formatNoMatches(r.val())+"</li>");return}i.empty(),u.opts.populateResults.call(this,i,o.results,{term:r.val(),page:this.resultsPage,context:null}),o.more===!0&&L(s.formatLoadMore,"formatLoadMore")&&(i.append("<li class='select2-more-results'>"+u.opts.escapeMarkup(s.formatLoadMore(this.resultsPage))+"</li>"),window.setTimeout(function(){u.loadMoreIfNeeded()},10)),this.postprocessResults(o,n),f()})})},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){b(this.search)},selectHighlighted:function(e){var t=this.highlight(),n=this.results.find(".select2-highlighted"),r=n.closest(".select2-result").data("select2-data");r&&(this.highlight(t),this.onSelect(r,e))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder},initContainerWidth:function(){function n(){var n,r,i,s,o;if(this.opts.width==="off")return null;if(this.opts.width==="element")return this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px";if(this.opts.width==="copy"||this.opts.width==="resolve"){n=this.opts.element.attr("style");if(n!==t){r=n.split(";");for(s=0,o=r.length;s<o;s+=1){i=r[s].replace(/\s/g,"").match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/);if(i!==null&&i.length>=1)return i[1]}}return this.opts.width==="resolve"?(n=this.opts.element.css("width"),n.indexOf("%")>0?n:this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px"):null}return e.isFunction(this.opts.width)?this.opts.width():this.opts.width}var r=n.call(this);r!==null&&this.container.css("width",r)}}),i=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>"," <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>"," <div><b></b></div>","</a>","<input class='select2-focusser select2-offscreen' type='text'/>","<div class='select2-drop' style='display:none'>"," <div class='select2-search'>"," <input type='text' autocomplete='off' class='select2-input'/>"," </div>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.focusser.attr("disabled","disabled")},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.focusser.removeAttr("disabled")},opening:function(){this.parent.opening.apply(this,arguments),this.focusser.attr("disabled","disabled"),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments),this.focusser.removeAttr("disabled"),b(this.focusser)},focus:function(){this.opened()?this.close():(this.focusser.removeAttr("disabled"),this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus()},initContainer:function(){var e,t=this.container,r=this.dropdown,i=!1;this.showSearch(this.opts.minimumResultsForSearch>=0),this.selection=e=t.find(".select2-choice"),this.focusser=t.find(".select2-focusser"),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN){w(e);return}switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.TAB:case n.ENTER:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}})),this.focusser.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.ESC)return;if(this.opts.openOnEnter===!1&&e.which===n.ENTER){w(e);return}if(e.which==n.DOWN||e.which==n.UP||e.which==n.ENTER&&this.opts.openOnEnter){this.open(),w(e);return}if(e.which==n.DELETE||e.which==n.BACKSPACE){this.opts.allowClear&&this.clear(),w(e);return}})),d(this.focusser),this.focusser.bind("keyup-change input",this.bind(function(e){if(this.opened())return;this.open(),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.focusser.val(""),w(e)})),e.delegate("abbr","mousedown",this.bind(function(e){if(!this.enabled)return;this.clear(),E(e),this.close(),this.selection.focus()})),e.bind("mousedown",this.bind(function(e){i=!0,this.opened()?this.close():this.enabled&&this.open(),w(e),i=!1})),r.bind("mousedown",this.bind(function(){this.search.focus()})),e.bind("focus",this.bind(function(e){w(e)})),this.focusser.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})).bind("blur",this.bind(function(){this.opened()||this.container.removeClass("select2-container-active")})),this.search.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.setPlaceholder()},clear:function(){var e=this.selection.data("select2-data");this.opts.element.val(""),this.selection.find("span").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),this.opts.element.trigger({type:"removed",val:this.id(e),choice:e}),this.triggerChange({removed:e})},initSelection:function(){var e;if(this.opts.element.val()===""&&this.opts.element.text()==="")this.close(),this.setPlaceholder();else{var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.setPlaceholder())})}},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(t,n){var r=t.find(":selected");e.isFunction(n)&&n({id:r.attr("value"),text:r.text(),element:r})}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=n.val();t.query({matcher:function(e,n,r){return c(i,t.id(r))},callback:e.isFunction(r)?function(e){r(e.results.length?e.results[0]:null)}:e.noop})}),t},getPlaceholder:function(){return this.select&&this.select.find("option").first().text()!==""?t:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var e=this.getPlaceholder();if(this.opts.element.val()===""&&e!==t){if(this.select&&this.select.find("option:first").text()!=="")return;this.selection.find("span").html(this.opts.escapeMarkup(e)),this.selection.addClass("select2-default"),this.selection.find("abbr").hide()}},postprocessResults:function(e,t){var n=0,r=this,i=!0;this.findHighlightableChoices().each2(function(e,t){if(c(r.id(t.data("select2-data")),r.opts.element.val()))return n=e,!1}),this.highlight(n);if(t===!0){var s=this.opts.minimumResultsForSearch;i=s<0?!1:O(e.results)>=s,this.showSearch(i)}},showSearch:function(t){this.showSearchInput=t,this.dropdown.find(".select2-search")[t?"removeClass":"addClass"]("select2-search-hidden"),e(this.dropdown,this.container)[t?"addClass":"removeClass"]("select2-with-searchbox")},onSelect:function(e,t){var n=this.opts.element.val();this.opts.element.val(this.id(e)),this.updateSelection(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),this.close(),(!t||!t.noFocus)&&this.selection.focus(),c(n,this.id(e))||this.triggerChange()},updateSelection:function(e){var n=this.selection.find("span"),r;this.selection.data("select2-data",e),n.empty(),r=this.opts.formatSelection(e,n),r!==t&&n.append(this.opts.escapeMarkup(r)),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==t&&this.selection.find("abbr").show()},val:function(){var e,n=!1,r=null,i=this;if(arguments.length===0)return this.opts.element.val();e=arguments[0],arguments.length>1&&(n=arguments[1]);if(this.select)this.select.val(e).find(":selected").each2(function(e,t){return r={id:t.attr("value"),text:t.text()},!1}),this.updateSelection(r),this.setPlaceholder(),n&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("cannot call val() if initSelection() is not defined");if(!e&&e!==0){this.clear(),n&&this.triggerChange();return}this.opts.element.val(e),this.opts.initSelection(this.opts.element,function(e){i.opts.element.val(e?i.id(e):""),i.updateSelection(e),i.setPlaceholder(),n&&i.triggerChange()})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(e){var n;if(arguments.length===0)return n=this.selection.data("select2-data"),n==t&&(n=null),n;!e||e===""?this.clear():(this.opts.element.val(e?this.id(e):""),this.updateSelection(e))}}),s=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html([" <ul class='select2-choices'>"," <li class='select2-search-field'>"," <input type='text' autocomplete='off' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi' style='display:none;'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(e,t){var n=[];e.find(":selected").each2(function(e,t){n.push({id:t.attr("value"),text:t.text(),element:t[0]})}),t(n)}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=h(n.val(),t.separator);t.query({matcher:function(n,r,s){return e.grep(i,function(e){return c(e,t.id(s))}).length},callback:e.isFunction(r)?function(e){r(e.results)}:e.noop})}),t},initContainer:function(){var t=".select2-choices",r;this.searchContainer=this.container.find(".select2-search-field"),this.selection=r=this.container.find(t),this.search.bind("input paste",this.bind(function(){if(!this.enabled)return;this.opened()||this.open()})),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.BACKSPACE&&this.search.val()===""){this.close();var t,i=r.find(".select2-search-choice-focus");if(i.length>0){this.unselect(i.first()),this.search.width(10),w(e);return}t=r.find(".select2-search-choice:not(.select2-locked)"),t.length>0&&t.last().addClass("select2-search-choice-focus")}else r.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");if(this.opened())switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.ENTER:case n.TAB:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.BACKSPACE||e.which===n.ESC)return;if(e.which===n.ENTER){if(this.opts.openOnEnter===!1)return;if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return}this.open(),(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN)&&w(e)})),this.search.bind("keyup",this.bind(this.resizeSearch)),this.search.bind("blur",this.bind(function(e){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.opened()||this.clearSearch(),e.stopImmediatePropagation()})),this.container.delegate(t,"mousedown",this.bind(function(t){if(!this.enabled)return;if(e(t.target).closest(".select2-search-choice").length>0)return;this.clearPlaceholder(),this.open(),this.focusSearch(),t.preventDefault()})),this.container.delegate(t,"focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder()})),this.initContainerWidth(),this.clearSearch()},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.search.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.search.attr("disabled",!0)},initSelection:function(){var e;this.opts.element.val()===""&&this.opts.element.text()===""&&(this.updateSelection([]),this.close(),this.clearSearch());if(this.select||this.opts.element.val()!==""){var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.clearSearch())})}},clearSearch:function(){var e=this.getPlaceholder();e!==t&&this.getVal().length===0&&this.search.hasClass("select2-focused")===!1?(this.search.val(e).addClass("select2-default"),this.resizeSearch()):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.parent.opening.apply(this,arguments),this.clearPlaceholder(),this.resizeSearch(),this.focusSearch(),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus(),this.opts.element.triggerHandler("focus")},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(t){var n=[],r=[],i=this;e(t).each(function(){l(i.id(this),n)<0&&(n.push(i.id(this)),r.push(this))}),t=r,this.selection.find(".select2-search-choice").remove(),e(t).each(function(){i.addSelectedChoice(this)}),i.postprocessResults()},tokenize:function(){var e=this.search.val();e=this.opts.tokenizer(e,this.data(),this.bind(this.onSelect),this.opts),e!=null&&e!=t&&(this.search.val(e),e.length>0&&this.open())},onSelect:function(e,t){this.addSelectedChoice(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.val().length>=this.getMaximumSelectionSize()&&this.updateResults(!0),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:e}),(!t||!t.noFocus)&&this.focusSearch()},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(n){var r=!n.locked,i=e("<li class='select2-search-choice'> <div></div> <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a></li>"),s=e("<li class='select2-search-choice select2-locked'><div></div></li>"),o=r?i:s,u=this.id(n),a=this.getVal(),f;f=this.opts.formatSelection(n,o.find("div")),f!=t&&o.find("div").replaceWith("<div>"+this.opts.escapeMarkup(f)+"</div>"),r&&o.find(".select2-search-choice-close").bind("mousedown",w).bind("click dblclick",this.bind(function(t){if(!this.enabled)return;e(t.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(e(t.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),this.close(),this.focusSearch()})).dequeue(),w(t)})).bind("focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active")})),o.data("select2-data",n),o.insertBefore(this.searchContainer),a.push(u),this.setVal(a)},unselect:function(e){var t=this.getVal(),n,r;e=e.closest(".select2-search-choice");if(e.length===0)throw"Invalid argument: "+e+". Must be .select2-search-choice";n=e.data("select2-data");if(!n)return;r=l(this.id(n),t),r>=0&&(t.splice(r,1),this.setVal(t),this.select&&this.postprocessResults()),e.remove(),this.opts.element.trigger({type:"removed",val:this.id(n),choice:n}),this.triggerChange({removed:n})},postprocessResults:function(){var e=this.getVal(),t=this.results.find(".select2-result"),n=this.results.find(".select2-result-with-children"),r=this;t.each2(function(t,n){var i=r.id(n.data("select2-data"));l(i,e)>=0&&(n.addClass("select2-selected"),n.find(".select2-result-selectable").addClass("select2-selected"))}),n.each2(function(e,t){!t.is(".select2-result-selectable")&&t.find(".select2-result-selectable:not(.select2-selected)").length===0&&t.addClass("select2-selected")}),this.highlight()==-1&&r.highlight(0)},resizeSearch:function(){var e,t,n,r,i,s=p(this.search);e=S(this.search)+10,t=this.search.offset().left,n=this.selection.width(),r=this.selection.offset().left,i=n-(t-r)-s,i<e&&(i=n-s),i<40&&(i=n-s),i<=0&&(i=e),this.search.width(i)},getVal:function(){var e;return this.select?(e=this.select.val(),e===null?[]:e):(e=this.opts.element.val(),h(e,this.opts.separator))},setVal:function(t){var n;this.select?this.select.val(t):(n=[],e(t).each(function(){l(this,n)<0&&n.push(this)}),this.opts.element.val(n.length===0?"":n.join(this.opts.separator)))},val:function(){var n,r=!1,i=[],s=this;if(arguments.length===0)return this.getVal();n=arguments[0],arguments.length>1&&(r=arguments[1]);if(!n&&n!==0){this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),r&&this.triggerChange();return}this.setVal(n);if(this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),r&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(t){var n=e(t).map(s.id);s.setVal(n),s.updateSelection(t),s.clearSearch(),r&&s.triggerChange()})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var t=[],n=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){t.push(n.opts.id(e(this).data("select2-data")))}),this.setVal(t),this.triggerChange()},data:function(t){var n=this,r;if(arguments.length===0)return this.selection.find(".select2-search-choice").map(function(){return e(this).data("select2-data")}).get();t||(t=[]),r=e.map(t,function(e){return n.opts.id(e)}),this.setVal(r),this.updateSelection(t),this.clearSearch()}}),e.fn.select2=function(){var n=Array.prototype.slice.call(arguments,0),r,o,u,a,f=["val","destroy","opened","open","close","focus","isFocused","container","onSortStart","onSortEnd","enable","disable","positionDropdown","data"];return this.each(function(){if(n.length===0||typeof n[0]=="object")r=n.length===0?{}:e.extend({},n[0]),r.element=e(this),r.element.get(0).tagName.toLowerCase()==="select"?a=r.element.attr("multiple"):(a=r.multiple||!1,"tags"in r&&(r.multiple=a=!0)),o=a?new s:new i,o.init(r);else{if(typeof n[0]!="string")throw"Invalid arguments to select2 plugin: "+n;if(l(n[0],f)<0)throw"Unknown method: "+n[0];u=t,o=e(this).data("select2");if(o===t)return;n[0]==="container"?u=o.container:u=o[n[0]].apply(o,n.slice(1));if(u!==t)return!1}}),u===t?this:u},e.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(e,t,n,r){var i=[];return T(e.text,n.term,i,r),i.join("")},formatSelection:function(e,n){return e?e.text:t},sortResults:function(e,t,n){return e},formatResultCssClass:function(e){return t},formatNoMatches:function(){return"No matches found"},formatInputTooShort:function(e,t){var n=t-e.length;return"Please enter "+n+" more character"+(n==1?"":"s")},formatInputTooLong:function(e,t){var n=e.length-t;return"Please enter "+n+" less character"+(n==1?"":"s")},formatSelectionTooBig:function(e){return"You can only select "+e+" item"+(e==1?"":"s")},formatLoadMore:function(e){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(e){return e.id},matcher:function(e,t){return t.toUpperCase().indexOf(e.toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/\\]/g,function(e){return t[e[0]]})},blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(e){return e},adaptDropdownCssClass:function(e){return null}}}(e)}),timely.define("libs/select2_multiselect_helper",["jquery_timely","external_libs/select2"],function(e){var t=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""&&(s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> '),s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},n=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""?s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> ':s+='<span class="ai1ec-color-swatch-empty"></span> ',s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},r=function(r){typeof r=="undefined"&&(r=e(document)),e(".ai1ec-select2-multiselect-selector",r).select2({allowClear:!0,formatResult:n,formatSelection:t,escapeMarkup:function(e){return e}})},i=function(t){e(".ai1ec-select2-multiselect-selector.select2-container",t).each(function(){e(this).data("select2").resizeSearch()})};return{init:r,refresh:i}}),timely.define("external_libs/jquery_history",["jquery_timely"],function(e){try{(function(t,n){var r=t.History=t.History||{};if(typeof r.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");r.Adapter={bind:function(t,n,r){e(t).bind(n,r)},trigger:function(t,n,r){e(t).trigger(n,r)},extractEventData:function(e,t,r){var i=t&&t.originalEvent&&t.originalEvent[e]||r&&r[e]||n;return i},onDomLoad:function(t){e(t)}},typeof r.init!="undefined"&&r.init()})(window),function(e,t){var n=e.document,r=e.setTimeout||r,i=e.clearTimeout||i,s=e.setInterval||s,o=e.History=e.History||{};if(typeof o.initHtml4!="undefined")throw new Error("History.js HTML4 Support has already been loaded...");o.initHtml4=function(){if(typeof o.initHtml4.initialized!="undefined")return!1;o.initHtml4.initialized=!0,o.enabled=!0,o.savedHashes=[],o.isLastHash=function(e){var t=o.getHashByIndex(),n;return n=e===t,n},o.saveHash=function(e){return o.isLastHash(e)?!1:(o.savedHashes.push(e),!0)},o.getHashByIndex=function(e){var t=null;return typeof e=="undefined"?t=o.savedHashes[o.savedHashes.length-1]:e<0?t=o.savedHashes[o.savedHashes.length+e]:t=o.savedHashes[e],t},o.discardedHashes={},o.discardedStates={},o.discardState=function(e,t,n){var r=o.getHashByState(e),i;return i={discardedState:e,backState:n,forwardState:t},o.discardedStates[r]=i,!0},o.discardHash=function(e,t,n){var r={discardedHash:e,backState:n,forwardState:t};return o.discardedHashes[e]=r,!0},o.discardedState=function(e){var t=o.getHashByState(e),n;return n=o.discardedStates[t]||!1,n},o.discardedHash=function(e){var t=o.discardedHashes[e]||!1;return t},o.recycleState=function(e){var t=o.getHashByState(e);return o.discardedState(e)&&delete o.discardedStates[t],!0},o.emulated.hashChange&&(o.hashChangeInit=function(){o.checkerFunction=null;var t="",r,i,u,a;return o.isInternetExplorer()?(r="historyjs-iframe",i=n.createElement("iframe"),i.setAttribute("id",r),i.style.display="none",n.body.appendChild(i),i.contentWindow.document.open(),i.contentWindow.document.close(),u="",a=!1,o.checkerFunction=function(){if(a)return!1;a=!0;var n=o.getHash()||"",r=o.unescapeHash(i.contentWindow.document.location.hash)||"";return n!==t?(t=n,r!==n&&(u=r=n,i.contentWindow.document.open(),i.contentWindow.document.close(),i.contentWindow.document.location.hash=o.escapeHash(n)),o.Adapter.trigger(e,"hashchange")):r!==u&&(u=r,o.setHash(r,!1)),a=!1,!0}):o.checkerFunction=function(){var n=o.getHash();return n!==t&&(t=n,o.Adapter.trigger(e,"hashchange")),!0},o.intervalList.push(s(o.checkerFunction,o.options.hashChangeInterval)),!0},o.Adapter.onDomLoad(o.hashChangeInit)),o.emulated.pushState&&(o.onHashChange=function(t){var r=t&&t.newURL||n.location.href,i=o.getHashByUrl(r),s=null,u=null,a=null,f;return o.isLastHash(i)?(o.busy(!1),!1):(o.doubleCheckComplete(),o.saveHash(i),i&&o.isTraditionalAnchor(i)?(o.Adapter.trigger(e,"anchorchange"),o.busy(!1),!1):(s=o.extractState(o.getFullUrl(i||n.location.href,!1),!0),o.isLastSavedState(s)?(o.busy(!1),!1):(u=o.getHashByState(s),f=o.discardedState(s),f?(o.getHashByIndex(-2)===o.getHashByState(f.forwardState)?o.back(!1):o.forward(!1),!1):(o.pushState(s.data,s.title,s.url,!1),!0))))},o.Adapter.bind(e,"hashchange",o.onHashChange),o.pushState=function(t,r,i,s){if(o.getHashByUrl(i))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(s!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.pushState,args:arguments,queue:s}),!1;o.busy(!0);var u=o.createStateObject(t,r,i),a=o.getHashByState(u),f=o.getState(!1),l=o.getHashByState(f),c=o.getHash();return o.storeState(u),o.expectedStateId=u.id,o.recycleState(u),o.setTitle(u),a===l?(o.busy(!1),!1):a!==c&&a!==o.getShortUrl(n.location.href)?(o.setHash(a,!1),!1):(o.saveState(u),o.Adapter.trigger(e,"statechange"),o.busy(!1),!0)},o.replaceState=function(e,t,n,r){if(o.getHashByUrl(n))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(r!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.replaceState,args:arguments,queue:r}),!1;o.busy(!0);var i=o.createStateObject(e,t,n),s=o.getState(!1),u=o.getStateByIndex(-2);return o.discardState(s,i,u),o.pushState(i.data,i.title,i.url,!1),!0}),o.emulated.pushState&&o.getHash()&&!o.emulated.hashChange&&o.Adapter.onDomLoad(function(){o.Adapter.trigger(e,"hashchange")})},typeof o.init!="undefined"&&o.init()}(window),function(e,t){var n=e.console||t,r=e.document,i=e.navigator,s=e.sessionStorage||!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!="undefined")throw new Error("History.js Core has already been loaded...");h.init=function(){return typeof h.Adapter=="undefined"?!1:(typeof h.initCore!="undefined"&&h.initCore(),typeof h.initHtml4!="undefined"&&h.initHtml4(),!0)},h.initCore=function(){if(typeof h.initCore.initialized!="undefined")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!="undefined"&&t!==null){for(e=0;e<t.length;e++)f(t[e]);h.intervalList=null}},h.debug=function(){(h.options.debug||!1)&&h.log.apply(h,arguments)},h.log=function(){var e=typeof n!="undefined"&&typeof n.log!="undefined"&&typeof n.log.apply!="undefined",t=r.getElementById("log"),i,s,o,u,a;e?(u=Array.prototype.slice.call(arguments),i=u.shift(),typeof n.debug!="undefined"?n.debug.apply(n,[i,u]):n.log.apply(n,[i,u])):i="\n"+arguments[0]+"\n";for(s=1,o=arguments.length;s<o;++s){a=arguments[s];if(typeof a=="object"&&typeof l!="undefined")try{a=l.stringify(a)}catch(f){}i+="\n"+a+"\n"}return t?(t.value+=i+"\n-----\n",t.scrollTop=t.scrollHeight-t.clientHeight):e||c(i),!0},h.getInternetExplorerMajorVersion=function(){var e=h.getInternetExplorerMajorVersion.cached=typeof h.getInternetExplorerMajorVersion.cached!="undefined"?h.getInternetExplorerMajorVersion.cached:function(){var e=3,t=r.createElement("div"),n=t.getElementsByTagName("i");while((t.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||r.location.href,n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=r.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(h.unescapeString(e.url||r.location.href)),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data);if(t.title||n)t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id;return t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r;return n=/(.*)\&_suid=([0-9]+)$/.exec(e),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getHash=function(){var e=h.unescapeHash(r.location.hash);return e},h.unescapeString=function(t){var n=t,r;for(;;){r=e.unescape(n);if(r===n)break;n=r}return n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=h.unescapeString(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i,s;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(n=h.escapeHash(e),h.busy(!0),i=h.extractState(e,!0),i&&!h.emulated.pushState?h.pushState(i.data,i.title,i.url,!1):r.location.hash!==n&&(h.bugs.setHash?(s=h.getPageUrl(),h.pushState(null,null,s+"#"+n,!1)):r.location.hash=n),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.escape(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(r.location.href),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var d=function(){};h.pushState=h.pushState||d,h.replaceState=h.replaceState||d}else h.onPopState=function(t,n){var i=!1,s=!1,o,u;return h.doubleCheckComplete(),o=h.getHash(),o?(u=h.extractState(o||r.location.href,!0),u?h.replaceState(u.data,u.title,u.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(i=h.Adapter.extractEventData("state",t,n)||!1,i?s=h.getStateById(i):h.expectedStateId?s=h.getStateById(h.expectedStateId):s=h.extractState(r.location.href),s||(s=h.createStateObject(null,null,r.location.href)),h.expectedStateId=!1,h.isLastSavedState(s)?(h.busy(!1),!1):(h.storeState(s),h.saveState(s),h.setTitle(s),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(v){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"beforeunload",h.clearAllIntervals),h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(r.location.href,!0))),s&&(h.onUnload=function(){var e,t;try{e=l.parse(s.getItem("History.store"))||{}}catch(n){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),s.setItem("History.store",l.stringify(e))},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},h.init()}(window)}catch(t){}}),timely.define("external_libs/jquery.tablescroller",["jquery_timely"],function(e){function n(){if(t)return t;var n=e('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div></div>');e("body").append(n);var r=e("div",n).innerWidth();n.css("overflow-y","auto");var i=e("div",n).innerWidth();return e(n).remove(),t=r-i,t}var t=0;e.fn.tableScroll=function(t){if(t=="undo"){var r=e(this).parent().parent();r.hasClass("tablescroll_wrapper")&&(r.find(".tablescroll_head thead").prependTo(this),r.find(".tablescroll_foot tfoot").appendTo(this),r.before(this),r.empty());return}var i=e.extend({},e.fn.tableScroll.defaults,t);return i.scrollbarWidth=n(),this.each(function(){var t=i.flush,n=e(this).addClass("tablescroll_body"),r=e('<div class="tablescroll_wrapper ai1ec-popover-boundary"></div>').insertBefore(n).append(n);r.parent("div").hasClass(i.containerClass)||e("<div></div>").addClass(i.containerClass).insertBefore(r).append(r);var s=i.width?i.width:n.outerWidth(),o=i.scroll?"auto":"hidden";r.css({width:s+"px",height:i.height+"px",overflow:o}),n.css("width",s+"px");var u=r.outerWidth(),a=u-s;r.css({width:s-a-2+"px"}),n.css("width",s-a-i.scrollbarWidth+"px"),n.outerHeight()<=i.height&&(r.css({height:"auto",width:s-a+"px"}),t=!1);var f=e("thead",n).length?!0:!1,l=e("tfoot",n).length?!0:!1,c=e("thead tr:first",n),h=e("tbody tr:first",n),p=e("tfoot tr:first",n),d=0;e("th, td",c).each(function(t){d=e(this).width(),e("th:eq("+t+"), td:eq("+t+")",c).css("width",d+"px"),e("th:eq("+t+"), td:eq("+t+")",h).css("width",d+"px"),l&&e("th:eq("+t+"), td:eq("+t+")",p).css("width",d+"px")});if(f)var v=e('<table class="tablescroll_head" cellspacing="0"></table>').insertBefore(r).prepend(e("thead",n));if(l)var m=e('<table class="tablescroll_foot" cellspacing="0"></table>').insertAfter(r).prepend(e("tfoot",n));v!=undefined&&(v.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",v).css("width",d+i.scrollbarWidth+"px"),v.css("width",r.outerWidth()+"px"))),m!=undefined&&(m.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",m).css("width",d+i.scrollbarWidth+"px"),m.css("width",r.outerWidth()+"px")))}),this},e.fn.tableScroll.defaults={flush:!0,width:null,height:100,containerClass:"tablescroll",scroll:!0}}),timely.define("external_libs/jquery.scrollTo",["jquery_timely"],function(e){function n(e){return typeof e=="object"?e:{top:e,left:e}}var t=e.scrollTo=function(t,n,r){e(window).scrollTo(t,n,r)};t.defaults={axis:"xy",duration:parseFloat(e.fn.jquery)>=1.3?0:1,limit:!0},t.window=function(t){return e(window)._scrollable()},e.fn._scrollable=function(){return this.map(function(){var t=this,n=!t.nodeName||e.inArray(t.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!n)return t;var r=(t.contentWindow||t).document||t.ownerDocument||t;return/webkit/i.test(navigator.userAgent)||r.compatMode=="BackCompat"?r.body:r.documentElement})},e.fn.scrollTo=function(r,i,s){return typeof i=="object"&&(s=i,i=0),typeof s=="function"&&(s={onAfter:s}),r=="max"&&(r=9e9),s=e.extend({},t.defaults,s),i=i||s.duration,s.queue=s.queue&&s.axis.length>1,s.queue&&(i/=2),s.offset=n(s.offset),s.over=n(s.over),this._scrollable().each(function(){function h(e){u.animate(l,i,s.easing,e&&function(){e.call(this,r,s)})}if(r==null)return;var o=this,u=e(o),a=r,f,l={},c=u.is("html,body");switch(typeof a){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(a)){a=n(a);break}a=e(a,this);if(!a.length)return;case"object":if(a.is||a.style)f=(a=e(a)).offset()}e.each(s.axis.split(""),function(e,n){var r=n=="x"?"Left":"Top",i=r.toLowerCase(),p="scroll"+r,d=o[p],v=t.max(o,n);if(f)l[p]=f[i]+(c?0:d-u.offset()[i]),s.margin&&(l[p]-=parseInt(a.css("margin"+r))||0,l[p]-=parseInt(a.css("border"+r+"Width"))||0),l[p]+=s.offset[i]||0,s.over[i]&&(l[p]+=a[n=="x"?"width":"height"]()*s.over[i]);else{var m=a[i];l[p]=m.slice&&m.slice(-1)=="%"?parseFloat(m)/100*v:m}s.limit&&/^\d+$/.test(l[p])&&(l[p]=l[p]<=0?0:Math.min(l[p],v)),!e&&s.queue&&(d!=l[p]&&h(s.onAfterFirst),delete l[p])}),h(s.onAfter)}).end()},t.max=function(t,n){var r=n=="x"?"Width":"Height",i="scroll"+r;if(!e(t).is("html,body"))return t[i]-e(t)[r.toLowerCase()]();var s="client"+r,o=t.ownerDocument.documentElement,u=t.ownerDocument.body;return Math.max(o[i],u[i])-Math.min(o[s],u[s])}}),timely.define("external_libs/locales/bootstrap-datepicker.bg",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота","Неделя"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб","Нед"],daysMin:["Н","П","В","С","Ч","П","С","Н"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.br",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.br={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.cs",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota","Neděle"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob","Ned"],daysMin:["Ne","Po","Út","St","Čt","Pá","So","Ne"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.da",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",clear:"Nulstil"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.de",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam","Son"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa","So"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.es",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb","Dom"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa","Do"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fi",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai","sunnuntai"],daysShort:["sun","maa","tii","kes","tor","per","lau","sun"],daysMin:["su","ma","ti","ke","to","pe","la","su"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",weekStart:1,format:"d.m.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Dim"],daysMin:["D","L","Ma","Me","J","V","S","D"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.id",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab","Mgu"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa","Mg"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.is",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur","Sunnudagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau","Sun"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La","Su"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.it",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato","Domenica"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab","Dom"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa","Do"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ja",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜","日曜"],daysShort:["日","月","火","水","木","金","土","日"],daysMin:["日","月","火","水","木","金","土","日"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.kr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일","일요일"],daysShort:["일","월","화","수","목","금","토","일"],daysMin:["일","월","화","수","목","금","토","일"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis","Sekmadienis"],daysShort:["S","Pr","A","T","K","Pn","Š","S"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št","Sk"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena","Svētdiena"],daysShort:["Sv","P","O","T","C","Pk","S","Sv"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se","Sv"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],today:"Šodien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ms",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu","Ahad"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab","Aha"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa","Ah"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nb",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nb={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nl={days:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag"],daysShort:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],daysMin:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],months:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Vandaag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pl={days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota","Niedziela"],daysShort:["Nie","Pn","Wt","Śr","Czw","Pt","So","Nie"],daysMin:["N","Pn","Wt","Śr","Cz","Pt","So","N"],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthsShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],today:"Dzisiaj",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt-BR",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ru",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб","Вск"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб","Вс"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota","Nedelja"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob","Ned"],daysMin:["Ne","Po","To","Sr","Če","Pe","So","Ne"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sv={days:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag","Söndag"],daysShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör","Sön"],daysMin:["Sö","Må","Ti","On","To","Fr","Lö","Sö"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",format:"yyyy-mm-dd",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.th",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.tr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi","Pazar"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts","Pz"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct","Pz"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-CN",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["周日","周一","周二","周三","周四","周五","周六","周日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今日",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-TW",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["週日","週一","週二","週三","週四","週五","週六","週日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/bootstrap_datepicker",["jquery_timely","ai1ec_config","external_libs/locales/bootstrap-datepicker.bg","external_libs/locales/bootstrap-datepicker.br","external_libs/locales/bootstrap-datepicker.cs","external_libs/locales/bootstrap-datepicker.da","external_libs/locales/bootstrap-datepicker.de","external_libs/locales/bootstrap-datepicker.es","external_libs/locales/bootstrap-datepicker.fi","external_libs/locales/bootstrap-datepicker.fr","external_libs/locales/bootstrap-datepicker.id","external_libs/locales/bootstrap-datepicker.is","external_libs/locales/bootstrap-datepicker.it","external_libs/locales/bootstrap-datepicker.ja","external_libs/locales/bootstrap-datepicker.kr","external_libs/locales/bootstrap-datepicker.lt","external_libs/locales/bootstrap-datepicker.lv","external_libs/locales/bootstrap-datepicker.ms","external_libs/locales/bootstrap-datepicker.nb","external_libs/locales/bootstrap-datepicker.nl","external_libs/locales/bootstrap-datepicker.pl","external_libs/locales/bootstrap-datepicker.pt-BR","external_libs/locales/bootstrap-datepicker.pt","external_libs/locales/bootstrap-datepicker.ru","external_libs/locales/bootstrap-datepicker.sl","external_libs/locales/bootstrap-datepicker.sv","external_libs/locales/bootstrap-datepicker.th","external_libs/locales/bootstrap-datepicker.tr","external_libs/locales/bootstrap-datepicker.zh-CN","external_libs/locales/bootstrap-datepicker.zh-TW"],function(e,t){function r(){return new Date(Date.UTC.apply(Date,arguments))}function i(){var e=new Date;return r(e.getFullYear(),e.getMonth(),e.getDate())}function s(e){return function(){return this[e].apply(this,arguments)}}function f(t,n){var r=e(t).data(),i={},s,o=new RegExp("^"+n.toLowerCase()+"([A-Z])"),n=new RegExp("^"+n.toLowerCase());for(var u in r)n.test(u)&&(s=u.replace(o,function(e,t){return t.toLowerCase()}),i[s]=r[u]);return i}function l(t){var n={};if(!d[t]){t=t.split("-")[0];if(!d[t])return}var r=d[t];return e.each(p,function(e,t){t in r&&(n[t]=r[t])}),n}var n=e(window),o=function(){var t={get:function(e){return this.slice(e)[0]},contains:function(e){var t=e&&e.valueOf();for(var n=0,r=this.length;n<r;n++)if(this[n].valueOf()===t)return n;return-1},remove:function(e){this.splice(e,1)},replace:function(t){if(!t)return;e.isArray(t)||(t=[t]),this.clear(),this.push.apply(this,t)},clear:function(){this.splice(0)},copy:function(){var e=new o;return e.replace(this),e}};return function(){var n=[];return n.push.apply(n,arguments),e.extend(n,t),n}}(),u=function(t,n){this.dates=new o,this.viewDate=i(),this.focusDate=null,this._process_options(n),this.element=e(t),this.isInline=!1,this.isInput=this.element.is("input"),this.component=this.element.is(".ai1ec-date")?this.element.find(".ai1ec-input-group, .ai1ec-input-group-addon, .ai1ec-btn"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&this.component.length===0&&(this.component=!1),this.picker=e(v.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("ai1ec-datepicker-inline").appendTo(this.element):this.picker.addClass("ai1ec-datepicker-dropdown ai1ec-dropdown-menu"),this.o.rtl&&this.picker.addClass("ai1ec-datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("tfoot th.ai1ec-today").attr("colspan",function(e,t){return parseInt(t)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};u.prototype={constructor:u,_process_options:function(n){this._o=e.extend({},this._o,n);var r=this.o=e.extend({},this._o),i=r.language;d[i]||(i=i.split("-")[0],d[i]||(i=t.language,d[i]||(i=h.language))),r.language=i;switch(r.startView){case 2:case"decade":r.startView=2;break;case 1:case"year":r.startView=1;break;default:r.startView=0}switch(r.minViewMode){case 1:case"months":r.minViewMode=1;break;case 2:case"years":r.minViewMode=2;break;default:r.minViewMode=0}r.startView=Math.max(r.startView,r.minViewMode),r.multidate!==!0&&(r.multidate=Number(r.multidate)||!1,r.multidate!==!1?r.multidate=Math.max(0,r.multidate):r.multidate=1),r.multidateSeparator=String(r.multidateSeparator),r.weekStart%=7,r.weekEnd=(r.weekStart+6)%7;var s=v.parseFormat(r.format);r.startDate!==-Infinity&&(r.startDate?r.startDate instanceof Date?r.startDate=this._local_to_utc(this._zero_time(r.startDate)):r.startDate=v.parseDate(r.startDate,s,r.language):r.startDate=-Infinity),r.endDate!==Infinity&&(r.endDate?r.endDate instanceof Date?r.endDate=this._local_to_utc(this._zero_time(r.endDate)):r.endDate=v.parseDate(r.endDate,s,r.language):r.endDate=Infinity),r.daysOfWeekDisabled=r.daysOfWeekDisabled||[],e.isArray(r.daysOfWeekDisabled)||(r.daysOfWeekDisabled=r.daysOfWeekDisabled.split(/[,\s]*/)),r.daysOfWeekDisabled=e.map(r.daysOfWeekDisabled,function(e){return parseInt(e,10)});var o=String(r.orientation).toLowerCase().split(/\s+/g),u=r.orientation.toLowerCase();o=e.grep(o,function(e){return/^auto|left|right|top|bottom$/.test(e)}),r.orientation={x:"auto",y:"auto"};if(!!u&&u!=="auto")if(o.length===1)switch(o[0]){case"top":case"bottom":r.orientation.y=o[0];break;case"left":case"right":r.orientation.x=o[0]}else u=e.grep(o,function(e){return/^left|right$/.test(e)}),r.orientation.x=u[0]||"auto",u=e.grep(o,function(e){return/^top|bottom$/.test(e)}),r.orientation.y=u[0]||"auto"},_events:[],_secondaryEvents:[],_applyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(r=undefined,i=e[t][1]):e[t].length==3&&(r=e[t][1],i=e[t][2]),n.on(i,r)},_unapplyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(i=undefined,r=e[t][1]):e[t].length==3&&(i=e[t][1],r=e[t][2]),n.off(r,i)},_buildEvents:function(){this.isInput?this._events=[[this.element,{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}]]:this.component&&this.hasInput?this._events=[[this.element.find("input"),{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}],[this.component,{click:e.proxy(this.show,this)}]]:this.element.is("div")?this.isInline=!0:this._events=[[this.element,{click:e.proxy(this.show,this)}]],this._events.push([this.element,"*",{blur:e.proxy(function(e){this._focused_from=e.target},this)}],[this.element,{blur:e.proxy(function(e){this._focused_from=e.target},this)}]),this._secondaryEvents=[[this.picker,{click:e.proxy(this.click,this)}],[e(window),{resize:e.proxy(this.place,this)}],[e(document),{"mousedown touchstart":e.proxy(function(e){this.element.is(e.target)||this.element.find(e.target).length||this.picker.is(e.target)||this.picker.find(e.target).length||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(t,n){var r=n||this.dates.get(-1),i=this._utc_to_local(r);this.element.trigger({type:t,date:i,dates:e.map(this.dates,this._utc_to_local),format:e.proxy(function(e,t){arguments.length===0?(e=this.dates.length-1,t=this.o.format):typeof e=="string"&&(t=e,e=this.dates.length-1),t=t||this.o.format;var n=this.dates.get(e);return v.formatDate(n,t,this.o.language)},this)})},show:function(e){this.isInline||this.picker.appendTo("body"),this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),this._attachSecondaryEvents(),this._trigger("show")},hide:function(){if(this.isInline)return;if(!this.picker.is(":visible"))return;this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this._trigger("hide")},remove:function(){this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date},_utc_to_local:function(e){return e&&new Date(e.getTime()+e.getTimezoneOffset()*6e4)},_local_to_utc:function(e){return e&&new Date(e.getTime()-e.getTimezoneOffset()*6e4)},_zero_time:function(e){return e&&new Date(e.getFullYear(),e.getMonth(),e.getDate())},_zero_utc_time:function(e){return e&&new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))},getDates:function(){return e.map(this.dates,this._utc_to_local)},getUTCDates:function(){return e.map(this.dates,function(e){return new Date(e)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){return new Date(this.dates.get(-1))},setDates:function(){this.update.apply(this,arguments),this._trigger("changeDate"),this.setValue()},setUTCDates:function(){this.update.apply(this,e.map(arguments,this._utc_to_local)),this._trigger("changeDate"),this.setValue()},setDate:s("setDates"),setUTCDate:s("setUTCDates"),setValue:function(){var e=this.getFormattedDate();this.isInput?this.element.val(e).change():this.component&&this.element.find("input").val(e).change()},getFormattedDate:function(t){t===undefined&&(t=this.o.format);var n=this.o.language;return e.map(this.dates,function(e){return v.formatDate(e,t,n)}).join(this.o.multidateSeparator)},setStartDate:function(e){this._process_options({startDate:e}),this.update(),this.updateNavArrows()},setEndDate:function(e){this._process_options({endDate:e}),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(e){this._process_options({daysOfWeekDisabled:e}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return;var t=this.picker.outerWidth(),r=this.picker.outerHeight(),i=10,s=n.width(),o=n.height(),u=n.scrollTop(),a=parseInt(this.element.parents().filter(function(){return e(this).css("z-index")!="auto"}).first().css("z-index"))+10,f=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),c=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),h=f.left,p=f.top;this.picker.removeClass("ai1ec-datepicker-orient-top ai1ec-datepicker-orient-bottom ai1ec-datepicker-orient-right ai1ec-datepicker-orient-left"),this.o.orientation.x!=="auto"?(this.picker.addClass("ai1ec-datepicker-orient-"+this.o.orientation.x),this.o.orientation.x==="right"&&(h-=t-c)):(this.picker.addClass("ai1ec-datepicker-orient-left"),f.left<0?h-=f.left-i:f.left+t>s&&(h=s-t-i));var d=this.o.orientation.y,v,m;d==="auto"&&(v=-u+f.top-r,m=u+o-(f.top+l+r),Math.max(v,m)===m?d="top":d="bottom"),this.picker.addClass("ai1ec-datepicker-orient-"+d),d==="top"?p+=l:p-=r+parseInt(this.picker.css("padding-top")),this.picker.css({top:p,left:h,zIndex:a})},_allow_update:!0,update:function(){if(!this._allow_update)return;var t=this.dates.copy(),n=[],r=!1;arguments.length?(e.each(arguments,e.proxy(function(e,t){t instanceof Date&&(t=this._local_to_utc(t)),n.push(t)},this)),r=!0):(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),n&&this.o.multidate?n=n.split(this.o.multidateSeparator):n=[n],delete this.element.data().date),n=e.map(n,e.proxy(function(e){return v.parseDate(e,this.o.format,this.o.language)},this)),n=e.grep(n,e.proxy(function(e){return e<this.o.startDate||e>this.o.endDate||!e},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),r?this.setValue():n.length&&String(t)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&t.length&&this._trigger("clearDate"),this.fill()},fillDow:function(){var e=this.o.weekStart,t="<tr>";if(this.o.calendarWeeks){var n='<th class="ai1ec-cw"> </th>';t+=n,this.picker.find(".ai1ec-datepicker-days thead tr:first-child").prepend(n)}while(e<this.o.weekStart+7)t+='<th class="ai1ec-dow">'+d[this.o.language].daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".ai1ec-datepicker-days thead").append(t)},fillMonths:function(){var e="",t=0;while(t<12)e+='<span class="ai1ec-month">'+d[this.o.language].monthsShort[t++]+"</span>";this.picker.find(".ai1ec-datepicker-months td").html(e)},setRange:function(t){!t||!t.length?delete this.range:this.range=e.map(t,function(e){return e.valueOf()}),this.fill()},getClassNames:function(t){var n=[],r=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),s=new Date;return t.getUTCFullYear()<r||t.getUTCFullYear()==r&&t.getUTCMonth()<i?n.push("ai1ec-old"):(t.getUTCFullYear()>r||t.getUTCFullYear()==r&&t.getUTCMonth()>i)&&n.push("ai1ec-new"),this.focusDate&&t.valueOf()===this.focusDate.valueOf()&&n.push("ai1ec-focused"),this.o.todayHighlight&&t.getUTCFullYear()==s.getFullYear()&&t.getUTCMonth()==s.getMonth()&&t.getUTCDate()==s.getDate()&&n.push("ai1ec-today"),this.dates.contains(t)!==-1&&n.push("ai1ec-active"),(t.valueOf()<this.o.startDate||t.valueOf()>this.o.endDate||e.inArray(t.getUTCDay(),this.o.daysOfWeekDisabled)!==-1)&&n.push("ai1ec-disabled"),this.range&&(t>this.range[0]&&t<this.range[this.range.length-1]&&n.push("ai1ec-range"),e.inArray(t.valueOf(),this.range)!=-1&&n.push("ai1ec-selected")),n},fill:function(){var t=new Date(this.viewDate),n=t.getUTCFullYear(),i=t.getUTCMonth(),s=this.o.startDate!==-Infinity?this.o.startDate.getUTCFullYear():-Infinity,o=this.o.startDate!==-Infinity?this.o.startDate.getUTCMonth():-Infinity,u=this.o.endDate!==Infinity?this.o.endDate.getUTCFullYear():Infinity,a=this.o.endDate!==Infinity?this.o.endDate.getUTCMonth():Infinity,f,l;this.picker.find(".ai1ec-datepicker-days thead th.ai1ec-datepicker-switch").text(d[this.o.language].months[i]+" "+n),this.picker.find("tfoot th.ai1ec-today").text(d[this.o.language].today).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot th.ai1ec-clear").text(d[this.o.language].clear).toggle(this.o.clearBtn!==!1),this.updateNavArrows(),this.fillMonths();var c=r(n,i-1,28),h=v.getDaysInMonth(c.getUTCFullYear(),c.getUTCMonth());c.setUTCDate(h),c.setUTCDate(h-(c.getUTCDay()-this.o.weekStart+7)%7);var p=new Date(c);p.setUTCDate(p.getUTCDate()+42),p=p.valueOf();var m=[],g;while(c.valueOf()<p){if(c.getUTCDay()==this.o.weekStart){m.push("<tr>");if(this.o.calendarWeeks){var y=new Date(+c+(this.o.weekStart-c.getUTCDay()-7)%7*864e5),b=new Date(+y+(11-y.getUTCDay())%7*864e5),w=new Date(+(w=r(b.getUTCFullYear(),0,1))+(11-w.getUTCDay())%7*864e5),E=(b-w)/864e5/7+1;m.push('<td class="ai1ec-cw">'+E+"</td>")}}g=this.getClassNames(c),g.push("ai1ec-day");if(this.o.beforeShowDay!==e.noop){var S=this.o.beforeShowDay(this._utc_to_local(c));S===undefined?S={}:typeof S=="boolean"?S={enabled:S}:typeof S=="string"&&(S={classes:S}),S.enabled===!1&&g.push("ai1ec-disabled"),S.classes&&(g=g.concat(S.classes.split(/\s+/))),S.tooltip&&(f=S.tooltip)}g=e.unique(g),m.push('<td class="'+g.join(" ")+'"'+(f?' title="'+f+'"':"")+">"+c.getUTCDate()+"</td>"),c.getUTCDay()==this.o.weekEnd&&m.push("</tr>"),c.setUTCDate(c.getUTCDate()+1)}this.picker.find(".ai1ec-datepicker-days tbody").empty().append(m.join(""));var x=this.picker.find(".ai1ec-datepicker-months").find("th:eq(1)").text(n).end().find("span").removeClass("ai1ec-active");e.each(this.dates,function(e,t){t.getUTCFullYear()==n&&x.eq(t.getUTCMonth()).addClass("ai1ec-active")}),(n<s||n>u)&&x.addClass("ai1ec-disabled"),n==s&&x.slice(0,o).addClass("ai1ec-disabled"),n==u&&x.slice(a+1).addClass("ai1ec-disabled"),m="",n=parseInt(n/10,10)*10;var T=this.picker.find(".ai1ec-datepicker-years").find("th:eq(1)").text(n+"-"+(n+9)).end().find("td");n-=1;var N=e.map(this.dates,function(e){return e.getUTCFullYear()}),C;for(var k=-1;k<11;k++)C=["ai1ec-year"],k===-1?C.push("ai1ec-old"):k===10&&C.push("ai1ec-new"),e.inArray(n,N)!==-1&&C.push("ai1ec-active"),(n<s||n>u)&&C.push("ai1ec-disabled"),m+='<span class="'+C.join(" ")+'">'+n+"</span>",n+=1;T.html(m)},updateNavArrows:function(){if(!this._allow_update)return;var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"})}},click:function(t){t.preventDefault();var n=e(t.target).closest("span, td, th"),i,s,o;if(n.length==1)switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"ai1ec-datepicker-switch":this.showMode(1);break;case"ai1ec-prev":case"ai1ec-next":var u=v.modes[this.viewMode].navStep*(n[0].className=="ai1ec-prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,u),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,u),this.viewMode===1&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"ai1ec-today":var a=new Date;a=r(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0),this.showMode(-2);var f=this.o.todayBtn=="linked"?null:"view";this._setDate(a,f);break;case"ai1ec-clear":var l;this.isInput?l=this.element:this.component&&(l=this.element.find("input")),l&&l.val("").change(),this.update(),this._trigger("changeDate"),this.o.autoclose&&this.hide()}break;case"span":n.is(".ai1ec-disabled")||(this.viewDate.setUTCDate(1),n.is(".ai1ec-month")?(o=1,s=n.parent().find("span").index(n),i=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(s),this._trigger("changeMonth",this.viewDate),this.o.minViewMode===1&&this._setDate(r(i,s,o))):(o=1,s=0,i=parseInt(n.text(),10)||0,this.viewDate.setUTCFullYear(i),this._trigger("changeYear",this.viewDate),this.o.minViewMode===2&&this._setDate(r(i,s,o))),this.showMode(-1),this.fill());break;case"td":n.is(".ai1ec-day")&&!n.is(".ai1ec-disabled")&&(o=parseInt(n.text(),10)||1,i=this.viewDate.getUTCFullYear(),s=this.viewDate.getUTCMonth(),n.is(".ai1ec-old")?s===0?(s=11,i-=1):s-=1:n.is(".ai1ec-new")&&(s==11?(s=0,i+=1):s+=1),this._setDate(r(i,s,o)))}this.picker.is(":visible")&&this._focused_from&&e(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(e){var t=this.dates.contains(e);e?t!==-1?this.dates.remove(t):this.dates.push(e):this.dates.clear();if(typeof this.o.multidate=="number")while(this.dates.length>this.o.multidate)this.dates.remove(0)},_setDate:function(e,t){(!t||t=="date")&&this._toggle_multidate(e&&new Date(e));if(!t||t=="view")this.viewDate=e&&new Date(e);this.fill(),this.setValue(),this._trigger("changeDate");var n;this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),this.o.autoclose&&(!t||t=="date")&&this.hide()},moveMonth:function(e,t){if(!e)return undefined;if(!t)return e;var n=new Date(e.valueOf()),r=n.getUTCDate(),i=n.getUTCMonth(),s=Math.abs(t),o,u;t=t>0?1:-1;if(s==1){u=t==-1?function(){return n.getUTCMonth()==i}:function(){return n.getUTCMonth()!=o},o=i+t,n.setUTCMonth(o);if(o<0||o>11)o=(o+12)%12}else{for(var a=0;a<s;a++)n=this.moveMonth(n,t);o=n.getUTCMonth(),n.setUTCDate(r),u=function(){return o!=n.getUTCMonth()}}while(u())n.setUTCDate(--r),n.setUTCMonth(o);return n},moveYear:function(e,t){return this.moveMonth(e,t*12)},dateWithinRange:function(e){return e>=this.o.startDate&&e<=this.o.endDate},keydown:function(e){if(this.picker.is(":not(:visible)")){e.keyCode==27&&this.show();return}var t=!1,n,r,s,o=this.focusDate||this.viewDate;switch(e.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),e.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;n=e.keyCode==37?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n),s=new Date(o),s.setUTCDate(o.getUTCDate()+n)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;n=e.keyCode==38?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n*7),s=new Date(o),s.setUTCDate(o.getUTCDate()+n*7)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 32:break;case 13:o=this.focusDate||this.dates.get(-1)||this.viewDate,this._toggle_multidate(o),t=!0,this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(e.preventDefault(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(t){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var u;this.isInput?u=this.element:this.component&&(u=this.element.find("input")),u&&u.change()}},showMode:function(e){e&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(">div").hide().filter(".ai1ec-datepicker-"+v.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var a=function(t,n){this.element=e(t),this.inputs=e.map(n.inputs,function(e){return e.jquery?e[0]:e}),delete n.inputs,e(this.inputs).datepicker(n).bind("changeDate",e.proxy(this.dateUpdated,this)),this.pickers=e.map(this.inputs,function(t){return e(t).data("datepicker")}),this.updateDates()};a.prototype={updateDates:function(){this.dates=e.map(this.pickers,function(e){return e.getUTCDate()}),this.updateRanges()},updateRanges:function(){var t=e.map(this.dates,function(e){return e.valueOf()});e.each(this.pickers,function(e,n){n.setRange(t)})},dateUpdated:function(t){if(this.updating)return;this.updating=!0;var n=e(t.target).data("datepicker"),r=n.getUTCDate(),i=e.inArray(t.target,this.inputs),s=this.inputs.length;if(i==-1)return;e.each(this.pickers,function(e,t){t.getUTCDate()||t.setUTCDate(r)});if(r<this.dates[i])while(i>=0&&r<this.dates[i])this.pickers[i--].setUTCDate(r);else if(r>this.dates[i])while(i<s&&r>this.dates[i])this.pickers[i++].setUTCDate(r);this.updateDates(),delete this.updating},remove:function(){e.map(this.pickers,function(e){e.remove()}),delete this.element.data().datepicker}};var c=e.fn.datepicker;e.fn.datepicker=function(t){var n=Array.apply(null,arguments);n.shift();var r;return this.each(function(){var i=e(this),s=i.data("datepicker"),o=typeof t=="object"&&t;if(!s){var c=f(this,"date"),p=e.extend({},h,c,o),d=l(p.language),v=e.extend({},h,d,c,o);if(i.is(".ai1ec-input-daterange")||v.inputs){var m={inputs:v.inputs||i.find("input").toArray()};i.data("datepicker",s=new a(this,e.extend(v,m)))}else i.data("datepicker",s=new u(this,v))}if(typeof t=="string"&&typeof s[t]=="function"){r=s[t].apply(s,n);if(r!==undefined)return!1}}),r!==undefined?r:this};var h=e.fn.datepicker.defaults={autoclose:!1,beforeShowDay:e.noop,calendarWeeks:!1,clearBtn:!1,daysOfWeekDisabled:[],endDate:Infinity,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-Infinity,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0},p=e.fn.datepicker.locale_opts=["format","rtl","weekStart"];e.fn.datepicker.Constructor=u;var d=e.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"}},v={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},getDaysInMonth:function(e,t){return[31,v.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(e){var t=e.replace(this.validParts,"\0").split("\0"),n=e.match(this.validParts);if(!t||!t.length||!n||n.length===0)throw new Error("Invalid date format.");return{separators:t,parts:n}},parseDate:function(t,n,i){if(!t)return undefined;if(t instanceof Date)return t;typeof n=="string"&&(n=v.parseFormat(n));if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(t)){var s=/([\-+]\d+)([dmwy])/,o=t.match(/([\-+]\d+)([dmwy])/g),a,f;t=new Date;for(var l=0;l<o.length;l++){a=s.exec(o[l]),f=parseInt(a[1]);switch(a[2]){case"d":t.setUTCDate(t.getUTCDate()+f);break;case"m":t=u.prototype.moveMonth.call(u.prototype,t,f);break;case"w":t.setUTCDate(t.getUTCDate()+f*7);break;case"y":t=u.prototype.moveYear.call(u.prototype,t,f)}}return r(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,0)}var o=t&&t.match(this.nonpunctuation)||[],t=new Date,c={},h=["yyyy","yy","M","MM","m","mm","d","dd"],p={yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){if(isNaN(e))return e;t-=1;while(t<0)t+=12;t%=12,e.setUTCMonth(t);while(e.getUTCMonth()!=t)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}},m,g,a;p.M=p.MM=p.mm=p.m,p.dd=p.d,t=r(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0);var y=n.parts.slice();o.length!=y.length&&(y=e(y).filter(function(t,n){return e.inArray(n,h)!==-1}).toArray());if(o.length==y.length){for(var l=0,b=y.length;l<b;l++){m=parseInt(o[l],10),a=y[l];if(isNaN(m))switch(a){case"MM":g=e(d[i].months).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].months)+1;break;case"M":g=e(d[i].monthsShort).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].monthsShort)+1}c[a]=m}for(var l=0,w,E;l<h.length;l++)E=h[l],E in c&&!isNaN(c[E])&&(w=new Date(t),p[E](w,c[E]),isNaN(w)||(t=w))}return t},formatDate:function(t,n,r){if(!t)return"";typeof n=="string"&&(n=v.parseFormat(n));var i={d:t.getUTCDate(),D:d[r].daysShort[t.getUTCDay()],DD:d[r].days[t.getUTCDay()],m:t.getUTCMonth()+1,M:d[r].monthsShort[t.getUTCMonth()],MM:d[r].months[t.getUTCMonth()],yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear()};i.dd=(i.d<10?"0":"")+i.d,i.mm=(i.m<10?"0":"")+i.m;var t=[],s=e.extend([],n.separators);for(var o=0,u=n.parts.length;o<=u;o++)s.length&&t.push(s.shift()),t.push(i[n.parts[o]]);return t.join("")},headTemplate:'<thead><tr><th class="ai1ec-prev"><i class="ai1ec-fa ai1ec-fa-arrow-left"></i></th><th colspan="5" class="ai1ec-datepicker-switch"></th><th class="ai1ec-next"><i class="ai1ec-fa ai1ec-fa-arrow-right"></i></th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="ai1ec-today"></th></tr><tr><th colspan="7" class="ai1ec-clear"></th></tr></tfoot>'};v.template='<div class="ai1ec-datepicker"><div class="ai1ec-datepicker-days"><table class=" ai1ec-table-condensed">'+v.headTemplate+"<tbody></tbody>"+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-months">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-years">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+"</div>",e.fn.datepicker.DPGlobal=v,e.fn.datepicker.noConflict=function(){return e.fn.datepicker=c,this},e(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(t){var n=e(this);if(n.data("datepicker"))return;t.preventDefault(),n.datepicker("show")}),e(function(){e('[data-provide="datepicker-inline"]').datepicker()});for(var m=2,g=arguments.length;m<g;m++)arguments[m].localize()}),timely.define("external_libs/bootstrap/alert",["jquery_timely"],function(e){var t='[data-dismiss="ai1ec-alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("ai1ec-alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("ai1ec-in"),e.support.transition&&i.hasClass("ai1ec-fade")?i.one(e.support.transition.end,s).emulateTransitionEnd(150):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}),timely.define("external_libs/jquery_cookie",["jquery_timely"],function(e){function n(e){return u.raw?e:encodeURIComponent(e)}function r(e){return u.raw?e:decodeURIComponent(e)}function i(e){return n(u.json?JSON.stringify(e):String(e))}function s(e){e.indexOf('"')===0&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return e=decodeURIComponent(e.replace(t," ")),u.json?JSON.parse(e):e}catch(n){}}function o(t,n){var r=u.raw?t:s(t);return e.isFunction(n)?n(r):r}var t=/\+/g,u=e.cookie=function(t,s,a){if(s!==undefined&&!e.isFunction(s)){a=e.extend({},u.defaults,a);if(typeof a.expires=="number"){var f=a.expires,l=a.expires=new Date;l.setTime(+l+f*864e5)}return document.cookie=[n(t),"=",i(s),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}var c=t?undefined:{},h=document.cookie?document.cookie.split("; "):[];for(var p=0,d=h.length;p<d;p++){var v=h[p].split("="),m=r(v.shift()),g=v.join("=");if(t&&t===m){c=o(g,s);break}!t&&(g=o(g))!==undefined&&(c[m]=g)}return c};u.defaults={},e.removeCookie=function(t,n){return e.cookie(t)===undefined?!1:(e.cookie(t,"",e.extend({},n,{expires:-1})),!e.cookie(t))}}),timely.define("scripts/calendar/load_views",["jquery_timely","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","libs/frontend_utils","libs/utils","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/select2_multiselect_helper","external_libs/jquery_history","external_libs/jquery.tablescroller","external_libs/jquery.scrollTo","external_libs/bootstrap_datepicker","external_libs/bootstrap/alert","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){e.cookie.json=!0;var l="ai1ec_saved_filter",c=!e("#save_filtered_views").hasClass("ai1ec-hide"),h=function(){var t=e("#ai1ec-view-dropdown .ai1ec-dropdown-menu .ai1ec-active a"),n=u.week_view_ends_at-u.week_view_starts_at,i=n*60;e("table.ai1ec-week-view-original").tableScroll({height:i,containerClass:"ai1ec-week-view ai1ec-popover-boundary",scroll:!1}),e("table.ai1ec-oneday-view-original").tableScroll({height:i,containerClass:"ai1ec-oneday-view ai1ec-popover-boundary",scroll:!1});if(e(".ai1ec-week-view").length||e(".ai1ec-oneday-view").length)e(".ai1ec-oneday-view .tablescroll_wrapper, .ai1ec-week-view .tablescroll_wrapper").scrollTo(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")"),e(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")").addClass("ai1ec-first-visible");e(".ai1ec-month-view .ai1ec-multiday").length&&r.extend_multiday_events(),e("#ai1ec-calendar-view-container").trigger("initialize_view.ai1ec")},p=function(){e("#ai1ec-calendar-view-container").trigger("destroy_view.ai1ec");var t=e(".ai1ec-minical-trigger").data("datepicker");typeof t!="undefined"&&(t.picker.remove(),e(document).off("changeDate",".ai1ec-minical-trigger")),e(".ai1ec-tooltip.ai1ec-in, .ai1ec-popup").remove()},d=function(){var t=[],n=[],r=[],i;e(".ai1ec-category-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){t.push(e(this).data("term"))}),e(".ai1ec-tag-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){n.push(e(this).data("term"))}),e(".ai1ec-author-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){r.push(e(this).data("term"))});var s={};return s.cat_ids=t,s.tag_ids=n,s.auth_ids=r,i=e(".ai1ec-views-dropdown .ai1ec-dropdown-menu .ai1ec-active").data("action"),s.action=i,s},v=function(){var t=History.getState(),n=e.cookie(l);if(null===n||undefined===n)n={};var r=d();u.is_calendar_page?n.calendar_page=r:n[t.url]=r,e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").addClass("ai1ec-active").attr("data-original-title",u.clear_saved_filter_text);var i=s.make_alert(u.save_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},m=function(t){t.stopImmediatePropagation();var n=e.cookie(l);if(u.is_calendar_page)delete n.calendar_page;else{var r=History.getState();delete n[r.url]}e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").removeClass("ai1ec-active").attr("data-original-title",u.reset_saved_filter_text),c||e("#save_filtered_views").addClass("ai1ec-hide");var i=s.make_alert(u.remove_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},g=function(t,n){e("#ai1ec-calendar-view-loading").fadeIn("fast"),e("#ai1ec-calendar-view").fadeTo("fast",.3,function(){var r={request_type:n,ai1ec_doing_ajax:!0};e.ajax({url:t,dataType:n,data:r,method:"get",success:function(t){p(),typeof t.views_dropdown=="string"&&e(".ai1ec-views-dropdown").replaceWith(t.views_dropdown),typeof t.categories=="string"&&(e(".ai1ec-category-filter").replaceWith(t.categories),u.use_select2&&f.init(e(".ai1ec-category-filter"))),typeof t.authors=="string"&&(e(".ai1ec-author-filter").replaceWith(t.authors),u.use_select2&&f.init(e(".ai1ec-author-filter"))),typeof t.tags=="string"&&(e(".ai1ec-tag-filter").replaceWith(t.tags),u.use_select2&&f.init(e(".ai1ec-tag-filter"))),typeof t.subscribe_buttons=="string"&&e(".ai1ec-subscribe-container").replaceWith(t.subscribe_buttons),typeof t.save_view_btngroup=="string"&&e("#save_filtered_views").closest(".ai1ec-btn-group").replaceWith(t.save_view_btngroup),c=t.are_filters_set;var n=e("#ai1ec-calendar-view-container");n.height(n.height());var r=e("#ai1ec-calendar-view").html(t.html).height();n.animate({height:r},{complete:function(){n.height("auto")}}),e("#ai1ec-calendar-view-loading").fadeOut("fast"),e("#ai1ec-calendar-view").fadeTo("fast",1),h()}})})},y=!1,b=function(e){var t=History.getState();if(t.data.ai1ec!==undefined&&!0===t.data.ai1ec||!0===y)y=!0,g(t.url,"json")},w=function(e,t){if(e==="json"){var n={ai1ec:!0};History.pushState(n,document.title,t)}else g(t,"jsonp")},E=function(t){var n=e(this);t.preventDefault(),w(n.data("type"),n.attr("href"))},S=function(t){var n=e(this);t.preventDefault();if(typeof n.data("datepicker")=="undefined"){n.datepicker({todayBtn:"linked",todayHighlight:!0});var r=n.data("datepicker");r.picker.addClass("ai1ec-right-aligned");var i=r.place;r.place=function(){i.call(this);var t=this.component?this.component:this.element,n=t.offset();this.picker.css({left:"auto",right:e(document).width()-n.left-t.outerWidth()})},e(document).on("changeDate",".ai1ec-minical-trigger",x)}n.datepicker("show")},x=function(t){var n,r=e(this),i;r.datepicker("hide"),n=r.data("href"),i=t.format(),i=i.replace(/\//g,"-"),n=n.replace("__DATE__",i),w(r.data("type"),n)},T=function(t){var n;typeof t.added!="undefined"?n=e(t.added.element).data("href"):n=e("option[value="+t.removed.id+"]",t.target).data("href"),data={ai1ec:!0},History.pushState(data,null,n)},N=function(){w(e(this).data("type"),e(this).data("href"))};return{initialize_view:h,handle_click_on_link_to_load_view:E,handle_minical_trigger:S,handle_minical_change_date:x,clear_filters:N,handle_state_change:b,load_view:g,save_current_filter:v,remove_current_filter:m,load_view_from_select2_filter:T,load_view_according_to_datatype:w}}),timely.define("external_libs/bootstrap/transition",["jquery_timely"],function(e){function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(e.support.transition.end,function(){n=!0});var i=function(){n||e(r).trigger(e.support.transition.end)};return setTimeout(i,t),this},e(function(){e.support.transition=t()})}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("scripts/calendar",["jquery_timely","scripts/calendar/load_views","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/utils","libs/select2_multiselect_helper","external_libs/bootstrap/transition","external_libs/bootstrap/modal","external_libs/jquery.scrollTo","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){var l=function(){if(s.selector!==undefined&&s.selector!==""&&e(s.selector).length===1){var t=e(":header:contains("+s.title+"):first");t.length||(t=e('<h1 class="page-title"></h1>'),t.text(s.title));var n=e("#ai1ec-container").detach().before(t);e(s.selector).empty().append(n).hide().css("visibility","visible").fadeIn("fast")}},c=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).addClass("ai1ec-hover")},h=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).removeClass("ai1ec-hover")},p=function(){var t=e(this),n=t.data("instanceId");t.delay(500).queue(function(){e(".ai1ec-event-instance-id-"+n).addClass("ai1ec-raised")})},d=function(t){var n=e(this),r=n.data("instanceId"),i=e(t.toElement||t.relatedTarget);if(i.is(".ai1ec-event-instance-id-"+r)||i.parent().is(".ai1ec-event-instance-id-"+r))return;e(".ai1ec-event-instance-id-"+r).clearQueue().removeClass("ai1ec-raised")},v=function(){l()},m=function(){e(document).on({mouseenter:c,mouseleave:h},".ai1ec-event-container.ai1ec-multiday"),e(document).on({mouseenter:p,mouseleave:d},".ai1ec-oneday-view .ai1ec-oneday .ai1ec-event-container, .ai1ec-week-view .ai1ec-week .ai1ec-event-container"),e(document).on("click",".ai1ec-agenda-view .ai1ec-event-header",r.toggle_event),e(document).on("click","#ai1ec-agenda-expand-all",r.expand_all),e(document).on("click","#ai1ec-agenda-collapse-all",r.collapse_all),e(document).on("click","a.ai1ec-load-view",t.handle_click_on_link_to_load_view),e(document).on("click",".ai1ec-minical-trigger",t.handle_minical_trigger),e(document).on("click",".ai1ec-clear-filter",t.clear_filters),e(document).on("click","#ai1ec-print-button",n.handle_click_on_print_button),e(document).on("click",".ai1ec-reveal-full-day button",function(){e(this).fadeOut();var t=e(".ai1ec-oneday-view-original"),n=e(".ai1ec-week-view-original");n.length===0&&(n=t);var r=e(".tablescroll_wrapper").offset().top-n.offset().top;e(window).scrollTo("+="+r+"px",400);var i=1440;e(".tablescroll_wrapper").animate({height:i+"px"})}),History.Adapter.bind(window,"statechange",t.handle_state_change),e(document).on("click","#ai1ec-calendar-view .ai1ec-load-event",function(t){t.preventDefault(),e.cookie.raw=!1,e.cookie("ai1ec_calendar_url",document.URL),window.location.href=this.href})},g=function(){f.init(e(".ai1ec-select2-filters")),e(document).on("change",".ai1ec-select2-multiselect-selector",t.load_view_from_select2_filter)},y=function(){e(document).on("page_ready.ai1ec",function(){v(),o.use_select2&&g(),m(),t.initialize_view()})};return{start:y}}),timely.require(["scripts/calendar"],function(e){e.start()}),timely.define("pages/calendar",function(){});
|
| 304 |
* limitations under the License.
|
| 305 |
* ======================================================================== */
|
| 306 |
|
| 307 |
+
timely.define("scripts/calendar/print",["jquery_timely"],function(e){var t=function(t){t.preventDefault();var n=e("body"),r=e("html"),i=e("#ai1ec-container").html(),s=n.html();s=s.replace(/<script.*?>([\s\S]*?)<\/script>/gmi,""),n.empty(),n.addClass("timely"),r.addClass("ai1ec-print"),n.html(i),e("span").click(function(){return!1}),window.print(),n.removeClass("timely"),r.removeClass("ai1ec-print"),n.html(s)};return{handle_click_on_print_button:t}}),timely.define("scripts/calendar/agenda_view",["jquery_timely"],function(e){var t=function(){e(this).closest(".ai1ec-event").toggleClass("ai1ec-expanded").find(".ai1ec-event-summary").slideToggle(300)},n=function(){e(".ai1ec-expanded .ai1ec-event-toggle").click()},r=function(){e(".ai1ec-event:not(.ai1ec-expanded) .ai1ec-event-toggle").click()};return{toggle_event:t,collapse_all:n,expand_all:r}}),timely.define("external_libs/modernizr",[],function(){var e=function(e,t,n){function S(e){f.cssText=e}function x(e,t){return S(h.join(e+";")+(t||""))}function T(e,t){return typeof e===t}function N(e,t){return!!~(""+e).indexOf(t)}function C(e,t,r){for(var i in e){var s=t[e[i]];if(s!==n)return r===!1?e[i]:T(s,"function")?s.bind(r||t):s}return!1}var r="2.5.3",i={},s=!0,o=t.documentElement,u="modernizr",a=t.createElement(u),f=a.style,l,c={}.toString,h=" -webkit- -moz- -o- -ms- ".split(" "),p={},d={},v={},m=[],g=m.slice,y,b=function(e,n,r,i){var s,a,f,l=t.createElement("div"),c=t.body,h=c?c:t.createElement("body");if(parseInt(r,10))while(r--)f=t.createElement("div"),f.id=i?i[r]:u+(r+1),l.appendChild(f);return s=["­","<style>",e,"</style>"].join(""),l.id=u,(c?l:h).innerHTML+=s,h.appendChild(l),c||(h.style.background="",o.appendChild(h)),a=n(l,e),c?l.parentNode.removeChild(l):h.parentNode.removeChild(h),!!a},w={}.hasOwnProperty,E;!T(w,"undefined")&&!T(w.call,"undefined")?E=function(e,t){return w.call(e,t)}:E=function(e,t){return t in e&&T(e.constructor.prototype[t],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=g.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,o=n.apply(s,r.concat(g.call(arguments)));return Object(o)===o?o:s}return n.apply(t,r.concat(g.call(arguments)))};return i});var k=function(n,r){var s=n.join(""),o=r.length;b(s,function(n,r){var s=t.styleSheets[t.styleSheets.length-1],u=s?s.cssRules&&s.cssRules[0]?s.cssRules[0].cssText:s.cssText||"":"",a=n.childNodes,f={};while(o--)f[a[o].id]=a[o];i.touch="ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch||(f.touch&&f.touch.offsetTop)===9},o,r)}([,["@media (",h.join("touch-enabled),("),u,")","{#touch{top:9px;position:absolute}}"].join("")],[,"touch"]);p.touch=function(){return i.touch};for(var L in p)E(p,L)&&(y=L.toLowerCase(),i[y]=p[L](),m.push((i[y]?"":"no-")+y));return S(""),a=l=null,i._version=r,i._prefixes=h,i.testStyles=b,o.className=o.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(s?" js "+m.join(" "):""),i}(window,window.document);return e}),timely.define("scripts/calendar/month_view",["jquery_timely","external_libs/modernizr"],function(e,t){var n=navigator.userAgent.match(/opera/i),r=navigator.userAgent.match(/webkit/i),i=function(){var t=e(".ai1ec-day"),n=e(".ai1ec-week:first .ai1ec-day").length;e(".ai1ec-month-view .ai1ec-multiday").each(function(){var n=this.parentNode,r=e(this).outerHeight(!0),i=parseInt(e(this).data("endDay"),10),u=e(".ai1ec-date",n),a=parseInt(u.text(),10),f=e(this).data("endTruncated");f&&(i=parseInt(e(t[t.length-1]).text(),10));var l=e(this),c=e(".ai1ec-event",l)[0].style.backgroundColor,h=0,p=i-a+1,d=p,v,m=0;t.each(function(t){var n=e(".ai1ec-date",this),r=e(this.parentNode),u=r.index(),f=parseInt(n.text(),10);if(f>=a&&f<=i){f===a&&(v=parseInt(n.css("marginBottom"),10)+16),h===0&&m++;if(u===0&&f>a&&d!==0){var p=l.next(".ai1ec-popup").andSelf().clone(!1);n.parent().append(p);var g=p.first();g.addClass("ai1ec-multiday-bar ai1ec-multiday-clone"),g.css({position:"absolute",left:"1px",top:parseInt(n.css("marginBottom"),10)+13,backgroundColor:c});var y=d>7?7:d;g.css("width",s(y)),d>7&&g.append(o(1,c)),g.append(o(2,c))}h===0?n.css({marginBottom:v+"px"}):n.css({marginBottom:"+=16px"}),d--,d>0&&u===6&&h++}});if(f){var g=e("."+l[0].className.replace(/\s+/igm,".")).last();g.append(o(1,c))}e(this).css({position:"absolute",top:u.outerHeight(!0)-r-1+"px",left:"1px",width:s(m)}),h>0&&e(this).append(o(1,c)),e(this).data("startTruncated")&&e(this).append(o(2,c)).addClass("ai1ec-multiday-bar")})},s=function(e){var t;switch(e){case 1:t=97.5;break;case 2:t=198.7;break;case 3:t=300;break;case 4:t=401;break;case 5:r||n?t=507:t=503.4;break;case 6:r||n?t=608:t=603.5;break;case 7:r||n?t=709:t=705}return t+"%"},o=function(t,n){var r=e('<div class="ai1ec-multiday-arrow'+t+'"></div>');return t===1?r.css({borderLeftColor:n}):r.css({borderTopColor:n,borderRightColor:n,borderBottomColor:n}),r};return{extend_multiday_events:i}}),timely.define("libs/frontend_utils",[],function(){var e=function(e){var t,n;t=function(e){if(/&[^;]+;/.test(e)){var t=document.createElement("div");return t.innerHTML=e,t.firstChild?t.firstChild.nodeValue:e}return e};if(typeof e=="string")return t(e);if(typeof e=="object")for(n in e)typeof e[n]=="string"&&(e[n]=t(e[n]));return e},t=function(e,t,n){var r,i,s,o,u;if("#"===e.charAt(0)||"?"===e.charAt(0))e=e.substring(1);r={},e=e.split(t);for(i=0;i<e.length;i++)o=e[i].trim(),-1!==(u=o.indexOf(n))?(s=o.substring(0,u).trim(),o=o.substring(u+1).trim()):(s=o,o=!0),r[s]=o;return r},n=function(e){var n,r,i,s,o;e=t(e,"&","="),i=Object.keys(e),n={ai1ec:{},action:"month"};for(r=0;r<i.length;r++)if("ai1ec"===i[r]){var u=t(e[i[r]],"|",":");for(s in u)if(""!==u[s]){if("action"===s||"view"===s)n.action=u[s];n.ai1ec[s]=u[s]}}else"ai1ec_"===i[r].substring(0,6)?n.ai1ec[i[r].substring(6)]=e[i[r]]:n[i[r]]=e[i[r]];"ai1ec_"!==n.action.substring(0,6)&&(n.action="ai1ec_"+n.action),o="action="+n.action+"&ai1ec=";for(s in n.ai1ec)n.ai1ec.hasOwnProperty(s)&&(o+=escape(s)+":"+escape(n.ai1ec[s])+"|");o=o.substring(0,o.length-1);for(s in n)"ai1ec"!==s&&"action"!==s&&(o+="&"+s+"="+escape(n[s]));return o};return{ai1ec_convert_entities:e,ai1ec_map_internal_query:n,ai1ec_tokenize_uri:t}}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/frontend/common_event_handlers",["jquery_timely"],function(e){var t=function(t){var n=e(this),r=n.next(".ai1ec-popup"),i,s,o;if(r.length===0)return;i=r.html(),s=r.attr("class");var u=n.closest("#ai1ec-calendar-view");u.length===0&&(u=e("body")),n.offset().left-u.offset().left>182?o="left":o="right",n.constrained_popover({content:i,title:"",placement:o,trigger:"manual",html:!0,template:'<div class="timely ai1ec-popover '+s+'">'+'<div class="ai1ec-arrow"></div>'+'<div class="ai1ec-popover-inner">'+'<div class="ai1ec-popover-content"><div></div></div>'+"</div>"+"</div>",container:"body"}).constrained_popover("show")},n=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-popup").length===0&&e(this).constrained_popover("hide")},r=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&(e(this).remove(),e("body > .ai1ec-tooltip").remove())},i=function(t){var n=e(this),r={template:'<div class="timely ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"manual",container:"body"};if(n.is(".ai1ec-category .ai1ec-color-swatch"))return;n.tooltip(r),n.tooltip("show")},s=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&e(this).data("bs.tooltip")&&e(this).tooltip("hide")},o=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip-trigger").length===0&&e(this).remove(),n.closest(".ai1ec-popup").length===0&&e("body > .ai1ec-popup").remove()};return{handle_popover_over:t,handle_popover_out:n,handle_popover_self_out:r,handle_tooltip_over:i,handle_tooltip_out:s,handle_tooltip_self_out:o}}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/constrained_popover",["jquery_timely","external_libs/bootstrap/popover"],function(e){var t=function(e,t){this.init("constrained_popover",e,t)};t.DEFAULTS=e.extend({},e.fn.popover.Constructor.DEFAULTS,{container:"",content:this.options}),t.prototype=e.extend({},e.fn.popover.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.applyPlacement=function(t,n){e.fn.popover.Constructor.prototype.applyPlacement.call(this,t,n);var r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=this.getPosition(),u={};switch(n){case"left":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left-i:u.left=newPos.left-i,r.offset(u);break;case"right":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left+o.width:u.left=newPos.left+o.width,r.offset(u)}},t.prototype.defineBounds=function(t){var n,r,i,s,o,u={},a=e(this.options.container);return a.length?(n=a.offset(),r=n.top,i=n.left,s=r+a.height(),o=i+a.width(),t.top+t.height/2<r&&(u.top=r),t.top+t.height/2>s&&(u.top=s),t.left-t.width/2<i&&(u.left=i),t.left-t.width/2>o&&(u.left=o),u):!1};var n=e.fn.popover;e.fn.constrained_popover=function(n){return this.each(function(){var r=e(this),i=r.data("ai1ec.constrained_popover"),s=typeof n=="object"&&n;i||r.data("ai1ec.constrained_popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.constrained_popover.Constructor=t,e.fn.constrained_popover.noConflict=function(){return e.fn.constrained_popover=n,this}}),timely.define("external_libs/bootstrap/dropdown",["jquery_timely"],function(e){function i(){e(t).remove(),e(n).each(function(t){var n=s(e(this));if(!n.hasClass("ai1ec-open"))return;n.trigger(t=e.Event("hide.bs.dropdown"));if(t.isDefaultPrevented())return;n.removeClass("ai1ec-open").trigger("hidden.bs.dropdown")})}function s(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&e(n);return r&&r.length?r:t.parent()}var t=".ai1ec-dropdown-backdrop",n="[data-toggle=ai1ec-dropdown]",r=function(t){e(t).on("click.bs.dropdown",this.toggle)};r.prototype.toggle=function(t){var n=e(this);if(n.is(".ai1ec-disabled, :disabled"))return;var r=s(n),o=r.hasClass("ai1ec-open");i();if(!o){"ontouchstart"in document.documentElement&&!r.closest(".ai1ec-navbar-nav").length&&e('<div class="ai1ec-dropdown-backdrop"/>').insertAfter(e(this)).on("click",i),r.trigger(t=e.Event("show.bs.dropdown"));if(t.isDefaultPrevented())return;r.toggleClass("ai1ec-open").trigger("shown.bs.dropdown"),n.focus()}return!1},r.prototype.keydown=function(t){if(!/(38|40|27)/.test(t.keyCode))return;var r=e(this);t.preventDefault(),t.stopPropagation();if(r.is(".ai1ec-disabled, :disabled"))return;var i=s(r),o=i.hasClass("ai1ec-open");if(!o||o&&t.keyCode==27)return t.which==27&&i.find(n).focus(),r.click();var u=e("[role=menu] li:not(.ai1ec-divider):visible a",i);if(!u.length)return;var a=u.index(u.filter(":focus"));t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<u.length-1&&a++,~a||(a=0),u.eq(a).focus()};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),typeof t=="string"&&i[t].call(n)})},e.fn.dropdown.Constructor=r,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".ai1ec-dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,r.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",r.prototype.keydown)}),timely.define("scripts/common_scripts/frontend/common_frontend",["jquery_timely","domReady","scripts/common_scripts/frontend/common_event_handlers","ai1ec_calendar","external_libs/modernizr","external_libs/bootstrap/tooltip","external_libs/constrained_popover","external_libs/bootstrap/dropdown"],function(e,t,n,r,i){var s=!1,o=function(){s=!0,e(document).on("mouseenter",".ai1ec-popup-trigger",n.handle_popover_over),e(document).on("mouseleave",".ai1ec-popup-trigger",n.handle_popover_out),e(document).on("mouseleave",".ai1ec-popup",n.handle_popover_self_out),e(document).on("mouseenter",".ai1ec-tooltip-trigger",n.handle_tooltip_over),e(document).on("mouseleave",".ai1ec-tooltip-trigger",n.handle_tooltip_out),e(document).on("mouseleave",".ai1ec-tooltip",n.handle_tooltip_self_out)},u=function(){t(function(){o()})},a=function(){return s};return{start:u,are_event_listeners_attached:a}}),timely.define("external_libs/select2",["jquery_timely"],function(e){(function(e){typeof e.fn.each2=="undefined"&&e.fn.extend({each2:function(t){var n=e([0]),r=-1,i=this.length;while(++r<i&&(n.context=n[0]=this[r])&&t.call(n[0],r,n)!==!1);return this}})})(e),function(e,t){function l(e,t){var n=0,r=t.length;for(;n<r;n+=1)if(c(e,t[n]))return n;return-1}function c(e,n){return e===n?!0:e===t||n===t?!1:e===null||n===null?!1:e.constructor===String?e===n+"":n.constructor===String?n===e+"":!1}function h(t,n){var r,i,s;if(t===null||t.length<1)return[];r=t.split(n);for(i=0,s=r.length;i<s;i+=1)r[i]=e.trim(r[i]);return r}function p(e){return e.outerWidth(!1)-e.width()}function d(n){var r="keyup-change-value";n.bind("keydown",function(){e.data(n,r)===t&&e.data(n,r,n.val())}),n.bind("keyup",function(){var i=e.data(n,r);i!==t&&n.val()!==i&&(e.removeData(n,r),n.trigger("keyup-change"))})}function v(n){n.bind("mousemove",function(n){var r=a;(r===t||r.x!==n.pageX||r.y!==n.pageY)&&e(n.target).trigger("mousemove-filtered",n)})}function m(e,n,r){r=r||t;var i;return function(){var t=arguments;window.clearTimeout(i),i=window.setTimeout(function(){n.apply(r,t)},e)}}function g(e){var t=!1,n;return function(){return t===!1&&(n=e(),t=!0),n}}function y(e,t){var n=m(e,function(e){t.trigger("scroll-debounced",e)});t.bind("scroll",function(e){l(e.target,t.get())>=0&&n(e)})}function b(e){if(e[0]===document.activeElement)return;window.setTimeout(function(){var t=e[0],n=e.val().length,r;e.focus(),t.setSelectionRange?t.setSelectionRange(n,n):t.createTextRange&&(r=t.createTextRange(),r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",n),r.select())},0)}function w(e){e.preventDefault(),e.stopPropagation()}function E(e){e.preventDefault(),e.stopImmediatePropagation()}function S(t){if(!u){var n=t[0].currentStyle||window.getComputedStyle(t[0],null);u=e(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:n.fontSize,fontFamily:n.fontFamily,fontStyle:n.fontStyle,fontWeight:n.fontWeight,letterSpacing:n.letterSpacing,textTransform:n.textTransform,whiteSpace:"nowrap"}),u.attr("class","select2-sizer"),e("body").append(u)}return u.text(t.val()),u.width()}function x(t,n,r){var i,s=[],o;i=t.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")===0&&s.push(this)}),i=n.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")!==0&&(o=r(this),typeof o=="string"&&o.length>0&&s.push(this))}),t.attr("class",s.join(" "))}function T(e,t,n,r){var i=e.toUpperCase().indexOf(t.toUpperCase()),s=t.length;if(i<0){n.push(r(e));return}n.push(r(e.substring(0,i))),n.push("<span class='select2-match'>"),n.push(r(e.substring(i,i+s))),n.push("</span>"),n.push(r(e.substring(i+s,e.length)))}function N(t){var n,r=0,i=null,s=t.quietMillis||100,o=t.url,u=this;return function(a){window.clearTimeout(n),n=window.setTimeout(function(){r+=1;var n=r,s=t.data,f=o,l=t.transport||e.ajax,c=t.type||"GET",h={};s=s?s.call(u,a.term,a.page,a.context):null,f=typeof f=="function"?f.call(u,a.term,a.page,a.context):f,null!==i&&i.abort(),t.params&&(e.isFunction(t.params)?e.extend(h,t.params.call(u)):e.extend(h,t.params)),e.extend(h,{url:f,dataType:t.dataType,data:s,type:c,cache:!1,success:function(e){if(n<r)return;var i=t.results(e,a.page);a.callback(i)}}),i=l.call(u,h)},s)}}function C(t){var n=t,r,i,s=function(e){return""+e.text};e.isArray(n)&&(i=n,n={results:i}),e.isFunction(n)===!1&&(i=n,n=function(){return i});var o=n();return o.text&&(s=o.text,e.isFunction(s)||(r=n.text,s=function(e){return e[r]})),function(t){var r=t.term,i={results:[]},o;if(r===""){t.callback(n());return}o=function(n,i){var u,a;n=n[0];if(n.children){u={};for(a in n)n.hasOwnProperty(a)&&(u[a]=n[a]);u.children=[],e(n.children).each2(function(e,t){o(t,u.children)}),(u.children.length||t.matcher(r,s(u),n))&&i.push(u)}else t.matcher(r,s(n),n)&&i.push(n)},e(n().results).each2(function(e,t){o(t,i.results)}),t.callback(i)}}function k(n){var r=e.isFunction(n);return function(i){var s=i.term,o={results:[]};e(r?n():n).each(function(){var e=this.text!==t,n=e?this.text:this;(s===""||i.matcher(s,n))&&o.results.push(e?this:{id:this,text:this})}),i.callback(o)}}function L(t,n){if(e.isFunction(t))return!0;if(!t)return!1;throw new Error("formatterName must be a function or a falsy value")}function A(t){return e.isFunction(t)?t():t}function O(t){var n=0;return e.each(t,function(e,t){t.children?n+=O(t.children):n++}),n}function M(e,n,r,i){var s=e,o=!1,u,a,f,l,h;if(!i.createSearchChoice||!i.tokenSeparators||i.tokenSeparators.length<1)return t;for(;;){a=-1;for(f=0,l=i.tokenSeparators.length;f<l;f++){h=i.tokenSeparators[f],a=e.indexOf(h);if(a>=0)break}if(a<0)break;u=e.substring(0,a),e=e.substring(a+h.length);if(u.length>0){u=i.createSearchChoice(u,n);if(u!==t&&u!==null&&i.id(u)!==t&&i.id(u)!==null){o=!1;for(f=0,l=n.length;f<l;f++)if(c(i.id(u),i.id(n[f]))){o=!0;break}o||r(u)}}}if(s!==e)return e}function _(t,n){var r=function(){};return r.prototype=new t,r.prototype.constructor=r,r.prototype.parent=t.prototype,r.prototype=e.extend(r.prototype,n),r}var n,r,i,s,o,u,a,f;n={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(e){e=e.which?e.which:e;switch(e){case n.LEFT:case n.RIGHT:case n.UP:case n.DOWN:return!0}return!1},isControl:function(e){var t=e.which;switch(t){case n.SHIFT:case n.CTRL:case n.ALT:return!0}return e.metaKey?!0:!1},isFunctionKey:function(e){return e=e.which?e.which:e,e>=112&&e<=123}},f=e(document),o=function(){var e=1;return function(){return e++}}(),f.bind("mousemove",function(e){a={x:e.pageX,y:e.pageY}}),r=_(Object,{bind:function(e){var t=this;return function(){e.apply(t,arguments)}},init:function(n){var r,i,s=".select2-results",u;this.opts=n=this.prepareOpts(n),this.id=n.id,n.element.data("select2")!==t&&n.element.data("select2")!==null&&this.destroy(),this.enabled=!0,this.container=this.createContainer(),this.containerId="s2id_"+(n.element.attr("id")||"autogen"+o()),this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.body=g(function(){return n.element.closest("body")}),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.css(A(n.containerCss)),this.container.addClass(A(n.containerCssClass)),this.elementTabIndex=this.opts.element.attr("tabIndex"),this.opts.element.data("select2",this).addClass("select2-offscreen").bind("focus.select2",function(){e(this).select2("focus")}).attr("tabIndex","-1").before(this.container),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),this.dropdown.addClass(A(n.dropdownCssClass)),this.dropdown.data("select2",this),this.results=r=this.container.find(s),this.search=i=this.container.find("input.select2-input"),i.attr("tabIndex",this.elementTabIndex),this.resultsPage=0,this.context=null,this.initContainer(),v(this.results),this.dropdown.delegate(s,"mousemove-filtered touchstart touchmove touchend",this.bind(this.highlightUnderEvent)),y(80,this.results),this.dropdown.delegate(s,"scroll-debounced",this.bind(this.loadMoreIfNeeded)),e.fn.mousewheel&&r.mousewheel(function(e,t,n,i){var s=r.scrollTop(),o;i>0&&s-i<=0?(r.scrollTop(0),w(e)):i<0&&r.get(0).scrollHeight-r.scrollTop()+i<=r.height()&&(r.scrollTop(r.get(0).scrollHeight-r.height()),w(e))}),d(i),i.bind("keyup-change input paste",this.bind(this.updateResults)),i.bind("focus",function(){i.addClass("select2-focused")}),i.bind("blur",function(){i.removeClass("select2-focused")}),this.dropdown.delegate(s,"mouseup",this.bind(function(t){e(t.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(t),this.selectHighlighted(t))})),this.dropdown.bind("click mouseup mousedown",function(e){e.stopPropagation()}),e.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),(n.element.is(":disabled")||n.element.is("[readonly='readonly']"))&&this.disable()},destroy:function(){var e=this.opts.element.data("select2");this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),e!==t&&(e.container.remove(),e.dropdown.remove(),e.opts.element.removeClass("select2-offscreen").removeData("select2").unbind(".select2").attr({tabIndex:this.elementTabIndex}).show())},prepareOpts:function(n){var r,i,s,o;r=n.element,r.get(0).tagName.toLowerCase()==="select"&&(this.select=i=n.element),i&&e.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in n)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),n=e.extend({},{populateResults:function(r,i,s){var o,u,a,f,l=this.opts.id,c=this;o=function(r,i,u){var a,f,h,p,d,v,m,g,y,b;r=n.sortResults(r,i,s);for(a=0,f=r.length;a<f;a+=1)h=r[a],d=h.disabled===!0,p=!d&&l(h)!==t,v=h.children&&h.children.length>0,m=e("<li></li>"),m.addClass("select2-results-dept-"+u),m.addClass("select2-result"),m.addClass(p?"select2-result-selectable":"select2-result-unselectable"),d&&m.addClass("select2-disabled"),v&&m.addClass("select2-result-with-children"),m.addClass(c.opts.formatResultCssClass(h)),g=e(document.createElement("div")),g.addClass("select2-result-label"),b=n.formatResult(h,g,s,c.opts.escapeMarkup),b!==t&&g.html(b),m.append(g),v&&(y=e("<ul></ul>"),y.addClass("select2-result-sub"),o(h.children,y,u+1),m.append(y)),m.data("select2-data",h),i.append(m)},o(i,r,0)}},e.fn.select2.defaults,n),typeof n.id!="function"&&(s=n.id,n.id=function(e){return e[s]});if(e.isArray(n.element.data("select2Tags"))){if("tags"in n)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+n.element.attr("id");n.tags=n.element.attr("data-select2-tags")}i?(n.query=this.bind(function(n){var i={results:[],more:!1},s=n.term,o,u,a;a=function(e,t){var r;e.is("option")?n.matcher(s,e.text(),e)&&t.push({id:e.attr("value"),text:e.text(),element:e.get(),css:e.attr("class"),disabled:c(e.attr("disabled"),"disabled")}):e.is("optgroup")&&(r={text:e.attr("label"),children:[],element:e.get(),css:e.attr("class")},e.children().each2(function(e,t){a(t,r.children)}),r.children.length>0&&t.push(r))},o=r.children(),this.getPlaceholder()!==t&&o.length>0&&(u=o[0],e(u).text()===""&&(o=o.not(u))),o.each2(function(e,t){a(t,i.results)}),n.callback(i)}),n.id=function(e){return e.id},n.formatResultCssClass=function(e){return e.css}):"query"in n||("ajax"in n?(o=n.element.data("ajax-url"),o&&o.length>0&&(n.ajax.url=o),n.query=N.call(n.element,n.ajax)):"data"in n?n.query=C(n.data):"tags"in n&&(n.query=k(n.tags),n.createSearchChoice===t&&(n.createSearchChoice=function(e){return{id:e,text:e}}),n.initSelection===t&&(n.initSelection=function(t,r){var i=[];e(h(t.val(),n.separator)).each(function(){var t=this,r=this,s=n.tags;e.isFunction(s)&&(s=s()),e(s).each(function(){if(c(this.id,t))return r=this.text,!1}),i.push({id:t,text:r})}),r(i)})));if(typeof n.query!="function")throw"query function not defined for Select2 "+n.element.attr("id");return n},monitorSource:function(){var e=this.opts.element,t;e.bind("change.select2",this.bind(function(e){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),t=this.bind(function(){var e,t,n=this;e=this.opts.element.attr("disabled")!=="disabled",t=this.opts.element.attr("readonly")==="readonly",e=e&&!t,this.enabled!==e&&(e?this.enable():this.disable()),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(A(this.opts.containerCssClass)),x(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(A(this.opts.dropdownCssClass))}),e.bind("propertychange.select2 DOMAttrModified.select2",t),typeof WebKitMutationObserver!="undefined"&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new WebKitMutationObserver(function(e){e.forEach(t)}),this.propertyObserver.observe(e.get(0),{attributes:!0,subtree:!1}))},triggerChange:function(t){t=t||{},t=e.extend({},t,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(t),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},enable:function(){if(this.enabled)return;this.enabled=!0,this.container.removeClass("select2-container-disabled"),this.opts.element.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.close(),this.enabled=!1,this.container.addClass("select2-container-disabled"),this.opts.element.attr("disabled","disabled")},opened:function(){return this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var t=this.container.offset(),n=this.container.outerHeight(!1),r=this.container.outerWidth(!1),i=this.dropdown.outerHeight(!1),s=e(window).scrollLeft()+e(window).width(),o=e(window).scrollTop()+e(window).height(),u=t.top+n,a=t.left,f=u+i<=o,l=t.top-i>=this.body().scrollTop(),c=this.dropdown.outerWidth(!1),h=a+c<=s,p=this.dropdown.hasClass("select2-drop-above"),d,v,m;this.body().css("position")!=="static"&&(d=this.body().offset(),u-=d.top,a-=d.left),p?(v=!0,!l&&f&&(v=!1)):(v=!1,!f&&l&&(v=!0)),h||(a=t.left+r-c),v?(u=t.top-i,this.container.addClass("select2-drop-above"),this.dropdown.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")),m=e.extend({top:u,left:a,width:r},A(this.opts.dropdownCss)),this.dropdown.css(m)},shouldOpen:function(){var t;return this.opened()?!1:(t=e.Event("opening"),this.opts.element.trigger(t),!t.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(window.setTimeout(this.bind(this.opening),1),!0):!1},opening:function(){var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t,s;this.clearDropdownAlignmentPreference(),this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body()),this.updateResults(!0),s=e("#select2-drop-mask"),s.length==0&&(s=e(document.createElement("div")),s.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),s.hide(),s.appendTo(this.body()),s.bind("mousedown touchstart",function(t){var n=e("#select2-drop"),r;n.length>0&&(r=n.data("select2"),r.opts.selectOnBlur&&r.selectHighlighted({noFocus:!0}),r.close())})),this.dropdown.prev()[0]!==s[0]&&this.dropdown.before(s),e("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),s.css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),s.show(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active"),this.ensureHighlightVisible();var o=this;this.container.parents().add(window).each(function(){e(this).bind(r+" "+n+" "+i,function(t){e("#select2-drop-mask").css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),o.positionDropdown()})}),this.focusSearch()},close:function(){if(!this.opened())return;var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t;this.container.parents().add(window).each(function(){e(this).unbind(n).unbind(r).unbind(i)}),this.clearDropdownAlignmentPreference(),e("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open"),this.results.empty(),this.clearSearch(),this.opts.element.trigger(e.Event("close"))},clearSearch:function(){},getMaximumSelectionSize:function(){return A(this.opts.maximumSelectionSize)},ensureHighlightVisible:function(){var t=this.results,n,r,i,s,o,u,a;r=this.highlight();if(r<0)return;if(r==0){t.scrollTop(0);return}n=this.findHighlightableChoices(),i=e(n[r]),s=i.offset().top+i.outerHeight(!0),r===n.length-1&&(a=t.find("li.select2-more-results"),a.length>0&&(s=a.offset().top+a.outerHeight(!0))),o=t.offset().top+t.outerHeight(!0),s>o&&t.scrollTop(t.scrollTop()+(s-o)),u=i.offset().top-t.offset().top,u<0&&i.css("display")!="none"&&t.scrollTop(t.scrollTop()+u)},findHighlightableChoices:function(){var e=this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)")},moveHighlight:function(t){var n=this.findHighlightableChoices(),r=this.highlight();while(r>-1&&r<n.length){r+=t;var i=e(n[r]);if(i.hasClass("select2-result-selectable")&&!i.hasClass("select2-disabled")&&!i.hasClass("select2-selected")){this.highlight(r);break}}},highlight:function(t){var n=this.findHighlightableChoices(),r,i;if(arguments.length===0)return l(n.filter(".select2-highlighted")[0],n.get());t>=n.length&&(t=n.length-1),t<0&&(t=0),this.results.find(".select2-highlighted").removeClass("select2-highlighted"),r=e(n[t]),r.addClass("select2-highlighted"),this.ensureHighlightVisible(),i=r.data("select2-data"),i&&this.opts.element.trigger({type:"highlight",val:this.id(i),choice:i})},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(t){var n=e(t.target).closest(".select2-result-selectable");if(n.length>0&&!n.is(".select2-highlighted")){var r=this.findHighlightableChoices();this.highlight(r.index(n))}else n.length==0&&this.results.find(".select2-highlighted").removeClass("select2-highlighted")},loadMoreIfNeeded:function(){var e=this.results,t=e.find("li.select2-more-results"),n,r=-1,i=this.resultsPage+1,s=this,o=this.search.val(),u=this.context;if(t.length===0)return;n=t.offset().top-e.offset().top-e.height(),n<=this.opts.loadMorePadding&&(t.addClass("select2-active"),this.opts.query({element:this.opts.element,term:o,page:i,context:u,matcher:this.opts.matcher,callback:this.bind(function(n){if(!s.opened())return;s.opts.populateResults.call(this,e,n.results,{term:o,page:i,context:u}),n.more===!0?(t.detach().appendTo(e).text(s.opts.formatLoadMore(i+1)),window.setTimeout(function(){s.loadMoreIfNeeded()},10)):t.remove(),s.positionDropdown(),s.resultsPage=i,s.context=n.context})}))},tokenize:function(){},updateResults:function(n){function f(){i.scrollTop(0),r.removeClass("select2-active"),u.positionDropdown()}function l(e){i.html(e),f()}var r=this.search,i=this.results,s=this.opts,o,u=this,a;if(n!==!0&&(this.showSearchInput===!1||!this.opened()))return;r.addClass("select2-active");var h=this.getMaximumSelectionSize();if(h>=1){o=this.data();if(e.isArray(o)&&o.length>=h&&L(s.formatSelectionTooBig,"formatSelectionTooBig")){l("<li class='select2-selection-limit'>"+s.formatSelectionTooBig(h)+"</li>");return}}if(r.val().length<s.minimumInputLength){L(s.formatInputTooShort,"formatInputTooShort")?l("<li class='select2-no-results'>"+s.formatInputTooShort(r.val(),s.minimumInputLength)+"</li>"):l("");return}s.formatSearching()&&n===!0&&l("<li class='select2-searching'>"+s.formatSearching()+"</li>");if(s.maximumInputLength&&r.val().length>s.maximumInputLength){L(s.formatInputTooLong,"formatInputTooLong")?l("<li class='select2-no-results'>"+s.formatInputTooLong(r.val(),s.maximumInputLength)+"</li>"):l("");return}a=this.tokenize(),a!=t&&a!=null&&r.val(a),this.resultsPage=1,s.query({element:s.element,term:r.val(),page:this.resultsPage,context:null,matcher:s.matcher,callback:this.bind(function(o){var a;if(!this.opened())return;this.context=o.context===t?null:o.context,this.opts.createSearchChoice&&r.val()!==""&&(a=this.opts.createSearchChoice.call(null,r.val(),o.results),a!==t&&a!==null&&u.id(a)!==t&&u.id(a)!==null&&e(o.results).filter(function(){return c(u.id(this),u.id(a))}).length===0&&o.results.unshift(a));if(o.results.length===0&&L(s.formatNoMatches,"formatNoMatches")){l("<li class='select2-no-results'>"+s.formatNoMatches(r.val())+"</li>");return}i.empty(),u.opts.populateResults.call(this,i,o.results,{term:r.val(),page:this.resultsPage,context:null}),o.more===!0&&L(s.formatLoadMore,"formatLoadMore")&&(i.append("<li class='select2-more-results'>"+u.opts.escapeMarkup(s.formatLoadMore(this.resultsPage))+"</li>"),window.setTimeout(function(){u.loadMoreIfNeeded()},10)),this.postprocessResults(o,n),f()})})},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){b(this.search)},selectHighlighted:function(e){var t=this.highlight(),n=this.results.find(".select2-highlighted"),r=n.closest(".select2-result").data("select2-data");r&&(this.highlight(t),this.onSelect(r,e))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder},initContainerWidth:function(){function n(){var n,r,i,s,o;if(this.opts.width==="off")return null;if(this.opts.width==="element")return this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px";if(this.opts.width==="copy"||this.opts.width==="resolve"){n=this.opts.element.attr("style");if(n!==t){r=n.split(";");for(s=0,o=r.length;s<o;s+=1){i=r[s].replace(/\s/g,"").match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/);if(i!==null&&i.length>=1)return i[1]}}return this.opts.width==="resolve"?(n=this.opts.element.css("width"),n.indexOf("%")>0?n:this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px"):null}return e.isFunction(this.opts.width)?this.opts.width():this.opts.width}var r=n.call(this);r!==null&&this.container.css("width",r)}}),i=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>"," <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>"," <div><b></b></div>","</a>","<input class='select2-focusser select2-offscreen' type='text'/>","<div class='select2-drop' style='display:none'>"," <div class='select2-search'>"," <input type='text' autocomplete='off' class='select2-input'/>"," </div>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.focusser.attr("disabled","disabled")},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.focusser.removeAttr("disabled")},opening:function(){this.parent.opening.apply(this,arguments),this.focusser.attr("disabled","disabled"),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments),this.focusser.removeAttr("disabled"),b(this.focusser)},focus:function(){this.opened()?this.close():(this.focusser.removeAttr("disabled"),this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus()},initContainer:function(){var e,t=this.container,r=this.dropdown,i=!1;this.showSearch(this.opts.minimumResultsForSearch>=0),this.selection=e=t.find(".select2-choice"),this.focusser=t.find(".select2-focusser"),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN){w(e);return}switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.TAB:case n.ENTER:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}})),this.focusser.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.ESC)return;if(this.opts.openOnEnter===!1&&e.which===n.ENTER){w(e);return}if(e.which==n.DOWN||e.which==n.UP||e.which==n.ENTER&&this.opts.openOnEnter){this.open(),w(e);return}if(e.which==n.DELETE||e.which==n.BACKSPACE){this.opts.allowClear&&this.clear(),w(e);return}})),d(this.focusser),this.focusser.bind("keyup-change input",this.bind(function(e){if(this.opened())return;this.open(),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.focusser.val(""),w(e)})),e.delegate("abbr","mousedown",this.bind(function(e){if(!this.enabled)return;this.clear(),E(e),this.close(),this.selection.focus()})),e.bind("mousedown",this.bind(function(e){i=!0,this.opened()?this.close():this.enabled&&this.open(),w(e),i=!1})),r.bind("mousedown",this.bind(function(){this.search.focus()})),e.bind("focus",this.bind(function(e){w(e)})),this.focusser.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})).bind("blur",this.bind(function(){this.opened()||this.container.removeClass("select2-container-active")})),this.search.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.setPlaceholder()},clear:function(){var e=this.selection.data("select2-data");this.opts.element.val(""),this.selection.find("span").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),this.opts.element.trigger({type:"removed",val:this.id(e),choice:e}),this.triggerChange({removed:e})},initSelection:function(){var e;if(this.opts.element.val()===""&&this.opts.element.text()==="")this.close(),this.setPlaceholder();else{var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.setPlaceholder())})}},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(t,n){var r=t.find(":selected");e.isFunction(n)&&n({id:r.attr("value"),text:r.text(),element:r})}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=n.val();t.query({matcher:function(e,n,r){return c(i,t.id(r))},callback:e.isFunction(r)?function(e){r(e.results.length?e.results[0]:null)}:e.noop})}),t},getPlaceholder:function(){return this.select&&this.select.find("option").first().text()!==""?t:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var e=this.getPlaceholder();if(this.opts.element.val()===""&&e!==t){if(this.select&&this.select.find("option:first").text()!=="")return;this.selection.find("span").html(this.opts.escapeMarkup(e)),this.selection.addClass("select2-default"),this.selection.find("abbr").hide()}},postprocessResults:function(e,t){var n=0,r=this,i=!0;this.findHighlightableChoices().each2(function(e,t){if(c(r.id(t.data("select2-data")),r.opts.element.val()))return n=e,!1}),this.highlight(n);if(t===!0){var s=this.opts.minimumResultsForSearch;i=s<0?!1:O(e.results)>=s,this.showSearch(i)}},showSearch:function(t){this.showSearchInput=t,this.dropdown.find(".select2-search")[t?"removeClass":"addClass"]("select2-search-hidden"),e(this.dropdown,this.container)[t?"addClass":"removeClass"]("select2-with-searchbox")},onSelect:function(e,t){var n=this.opts.element.val();this.opts.element.val(this.id(e)),this.updateSelection(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),this.close(),(!t||!t.noFocus)&&this.selection.focus(),c(n,this.id(e))||this.triggerChange()},updateSelection:function(e){var n=this.selection.find("span"),r;this.selection.data("select2-data",e),n.empty(),r=this.opts.formatSelection(e,n),r!==t&&n.append(this.opts.escapeMarkup(r)),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==t&&this.selection.find("abbr").show()},val:function(){var e,n=!1,r=null,i=this;if(arguments.length===0)return this.opts.element.val();e=arguments[0],arguments.length>1&&(n=arguments[1]);if(this.select)this.select.val(e).find(":selected").each2(function(e,t){return r={id:t.attr("value"),text:t.text()},!1}),this.updateSelection(r),this.setPlaceholder(),n&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("cannot call val() if initSelection() is not defined");if(!e&&e!==0){this.clear(),n&&this.triggerChange();return}this.opts.element.val(e),this.opts.initSelection(this.opts.element,function(e){i.opts.element.val(e?i.id(e):""),i.updateSelection(e),i.setPlaceholder(),n&&i.triggerChange()})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(e){var n;if(arguments.length===0)return n=this.selection.data("select2-data"),n==t&&(n=null),n;!e||e===""?this.clear():(this.opts.element.val(e?this.id(e):""),this.updateSelection(e))}}),s=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html([" <ul class='select2-choices'>"," <li class='select2-search-field'>"," <input type='text' autocomplete='off' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi' style='display:none;'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(e,t){var n=[];e.find(":selected").each2(function(e,t){n.push({id:t.attr("value"),text:t.text(),element:t[0]})}),t(n)}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=h(n.val(),t.separator);t.query({matcher:function(n,r,s){return e.grep(i,function(e){return c(e,t.id(s))}).length},callback:e.isFunction(r)?function(e){r(e.results)}:e.noop})}),t},initContainer:function(){var t=".select2-choices",r;this.searchContainer=this.container.find(".select2-search-field"),this.selection=r=this.container.find(t),this.search.bind("input paste",this.bind(function(){if(!this.enabled)return;this.opened()||this.open()})),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.BACKSPACE&&this.search.val()===""){this.close();var t,i=r.find(".select2-search-choice-focus");if(i.length>0){this.unselect(i.first()),this.search.width(10),w(e);return}t=r.find(".select2-search-choice:not(.select2-locked)"),t.length>0&&t.last().addClass("select2-search-choice-focus")}else r.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");if(this.opened())switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.ENTER:case n.TAB:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.BACKSPACE||e.which===n.ESC)return;if(e.which===n.ENTER){if(this.opts.openOnEnter===!1)return;if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return}this.open(),(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN)&&w(e)})),this.search.bind("keyup",this.bind(this.resizeSearch)),this.search.bind("blur",this.bind(function(e){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.opened()||this.clearSearch(),e.stopImmediatePropagation()})),this.container.delegate(t,"mousedown",this.bind(function(t){if(!this.enabled)return;if(e(t.target).closest(".select2-search-choice").length>0)return;this.clearPlaceholder(),this.open(),this.focusSearch(),t.preventDefault()})),this.container.delegate(t,"focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder()})),this.initContainerWidth(),this.clearSearch()},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.search.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.search.attr("disabled",!0)},initSelection:function(){var e;this.opts.element.val()===""&&this.opts.element.text()===""&&(this.updateSelection([]),this.close(),this.clearSearch());if(this.select||this.opts.element.val()!==""){var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.clearSearch())})}},clearSearch:function(){var e=this.getPlaceholder();e!==t&&this.getVal().length===0&&this.search.hasClass("select2-focused")===!1?(this.search.val(e).addClass("select2-default"),this.resizeSearch()):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.parent.opening.apply(this,arguments),this.clearPlaceholder(),this.resizeSearch(),this.focusSearch(),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus(),this.opts.element.triggerHandler("focus")},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(t){var n=[],r=[],i=this;e(t).each(function(){l(i.id(this),n)<0&&(n.push(i.id(this)),r.push(this))}),t=r,this.selection.find(".select2-search-choice").remove(),e(t).each(function(){i.addSelectedChoice(this)}),i.postprocessResults()},tokenize:function(){var e=this.search.val();e=this.opts.tokenizer(e,this.data(),this.bind(this.onSelect),this.opts),e!=null&&e!=t&&(this.search.val(e),e.length>0&&this.open())},onSelect:function(e,t){this.addSelectedChoice(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.val().length>=this.getMaximumSelectionSize()&&this.updateResults(!0),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:e}),(!t||!t.noFocus)&&this.focusSearch()},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(n){var r=!n.locked,i=e("<li class='select2-search-choice'> <div></div> <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a></li>"),s=e("<li class='select2-search-choice select2-locked'><div></div></li>"),o=r?i:s,u=this.id(n),a=this.getVal(),f;f=this.opts.formatSelection(n,o.find("div")),f!=t&&o.find("div").replaceWith("<div>"+this.opts.escapeMarkup(f)+"</div>"),r&&o.find(".select2-search-choice-close").bind("mousedown",w).bind("click dblclick",this.bind(function(t){if(!this.enabled)return;e(t.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(e(t.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),this.close(),this.focusSearch()})).dequeue(),w(t)})).bind("focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active")})),o.data("select2-data",n),o.insertBefore(this.searchContainer),a.push(u),this.setVal(a)},unselect:function(e){var t=this.getVal(),n,r;e=e.closest(".select2-search-choice");if(e.length===0)throw"Invalid argument: "+e+". Must be .select2-search-choice";n=e.data("select2-data");if(!n)return;r=l(this.id(n),t),r>=0&&(t.splice(r,1),this.setVal(t),this.select&&this.postprocessResults()),e.remove(),this.opts.element.trigger({type:"removed",val:this.id(n),choice:n}),this.triggerChange({removed:n})},postprocessResults:function(){var e=this.getVal(),t=this.results.find(".select2-result"),n=this.results.find(".select2-result-with-children"),r=this;t.each2(function(t,n){var i=r.id(n.data("select2-data"));l(i,e)>=0&&(n.addClass("select2-selected"),n.find(".select2-result-selectable").addClass("select2-selected"))}),n.each2(function(e,t){!t.is(".select2-result-selectable")&&t.find(".select2-result-selectable:not(.select2-selected)").length===0&&t.addClass("select2-selected")}),this.highlight()==-1&&r.highlight(0)},resizeSearch:function(){var e,t,n,r,i,s=p(this.search);e=S(this.search)+10,t=this.search.offset().left,n=this.selection.width(),r=this.selection.offset().left,i=n-(t-r)-s,i<e&&(i=n-s),i<40&&(i=n-s),i<=0&&(i=e),this.search.width(i)},getVal:function(){var e;return this.select?(e=this.select.val(),e===null?[]:e):(e=this.opts.element.val(),h(e,this.opts.separator))},setVal:function(t){var n;this.select?this.select.val(t):(n=[],e(t).each(function(){l(this,n)<0&&n.push(this)}),this.opts.element.val(n.length===0?"":n.join(this.opts.separator)))},val:function(){var n,r=!1,i=[],s=this;if(arguments.length===0)return this.getVal();n=arguments[0],arguments.length>1&&(r=arguments[1]);if(!n&&n!==0){this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),r&&this.triggerChange();return}this.setVal(n);if(this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),r&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(t){var n=e(t).map(s.id);s.setVal(n),s.updateSelection(t),s.clearSearch(),r&&s.triggerChange()})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var t=[],n=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){t.push(n.opts.id(e(this).data("select2-data")))}),this.setVal(t),this.triggerChange()},data:function(t){var n=this,r;if(arguments.length===0)return this.selection.find(".select2-search-choice").map(function(){return e(this).data("select2-data")}).get();t||(t=[]),r=e.map(t,function(e){return n.opts.id(e)}),this.setVal(r),this.updateSelection(t),this.clearSearch()}}),e.fn.select2=function(){var n=Array.prototype.slice.call(arguments,0),r,o,u,a,f=["val","destroy","opened","open","close","focus","isFocused","container","onSortStart","onSortEnd","enable","disable","positionDropdown","data"];return this.each(function(){if(n.length===0||typeof n[0]=="object")r=n.length===0?{}:e.extend({},n[0]),r.element=e(this),r.element.get(0).tagName.toLowerCase()==="select"?a=r.element.attr("multiple"):(a=r.multiple||!1,"tags"in r&&(r.multiple=a=!0)),o=a?new s:new i,o.init(r);else{if(typeof n[0]!="string")throw"Invalid arguments to select2 plugin: "+n;if(l(n[0],f)<0)throw"Unknown method: "+n[0];u=t,o=e(this).data("select2");if(o===t)return;n[0]==="container"?u=o.container:u=o[n[0]].apply(o,n.slice(1));if(u!==t)return!1}}),u===t?this:u},e.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(e,t,n,r){var i=[];return T(e.text,n.term,i,r),i.join("")},formatSelection:function(e,n){return e?e.text:t},sortResults:function(e,t,n){return e},formatResultCssClass:function(e){return t},formatNoMatches:function(){return"No matches found"},formatInputTooShort:function(e,t){var n=t-e.length;return"Please enter "+n+" more character"+(n==1?"":"s")},formatInputTooLong:function(e,t){var n=e.length-t;return"Please enter "+n+" less character"+(n==1?"":"s")},formatSelectionTooBig:function(e){return"You can only select "+e+" item"+(e==1?"":"s")},formatLoadMore:function(e){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(e){return e.id},matcher:function(e,t){return t.toUpperCase().indexOf(e.toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/\\]/g,function(e){return t[e[0]]})},blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(e){return e},adaptDropdownCssClass:function(e){return null}}}(e)}),timely.define("libs/select2_multiselect_helper",["jquery_timely","external_libs/select2"],function(e){var t=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""&&(s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> '),s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},n=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""?s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> ':s+='<span class="ai1ec-color-swatch-empty"></span> ',s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},r=function(r){typeof r=="undefined"&&(r=e(document)),e(".ai1ec-select2-multiselect-selector",r).select2({allowClear:!0,formatResult:n,formatSelection:t,escapeMarkup:function(e){return e}})},i=function(t){e(".ai1ec-select2-multiselect-selector.select2-container",t).each(function(){e(this).data("select2").resizeSearch()})};return{init:r,refresh:i}}),timely.define("external_libs/jquery_history",["jquery_timely"],function(e){try{(function(t,n){var r=t.History=t.History||{};if(typeof r.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");r.Adapter={bind:function(t,n,r){e(t).bind(n,r)},trigger:function(t,n,r){e(t).trigger(n,r)},extractEventData:function(e,t,r){var i=t&&t.originalEvent&&t.originalEvent[e]||r&&r[e]||n;return i},onDomLoad:function(t){e(t)}},typeof r.init!="undefined"&&r.init()})(window),function(e,t){var n=e.document,r=e.setTimeout||r,i=e.clearTimeout||i,s=e.setInterval||s,o=e.History=e.History||{};if(typeof o.initHtml4!="undefined")throw new Error("History.js HTML4 Support has already been loaded...");o.initHtml4=function(){if(typeof o.initHtml4.initialized!="undefined")return!1;o.initHtml4.initialized=!0,o.enabled=!0,o.savedHashes=[],o.isLastHash=function(e){var t=o.getHashByIndex(),n;return n=e===t,n},o.saveHash=function(e){return o.isLastHash(e)?!1:(o.savedHashes.push(e),!0)},o.getHashByIndex=function(e){var t=null;return typeof e=="undefined"?t=o.savedHashes[o.savedHashes.length-1]:e<0?t=o.savedHashes[o.savedHashes.length+e]:t=o.savedHashes[e],t},o.discardedHashes={},o.discardedStates={},o.discardState=function(e,t,n){var r=o.getHashByState(e),i;return i={discardedState:e,backState:n,forwardState:t},o.discardedStates[r]=i,!0},o.discardHash=function(e,t,n){var r={discardedHash:e,backState:n,forwardState:t};return o.discardedHashes[e]=r,!0},o.discardedState=function(e){var t=o.getHashByState(e),n;return n=o.discardedStates[t]||!1,n},o.discardedHash=function(e){var t=o.discardedHashes[e]||!1;return t},o.recycleState=function(e){var t=o.getHashByState(e);return o.discardedState(e)&&delete o.discardedStates[t],!0},o.emulated.hashChange&&(o.hashChangeInit=function(){o.checkerFunction=null;var t="",r,i,u,a;return o.isInternetExplorer()?(r="historyjs-iframe",i=n.createElement("iframe"),i.setAttribute("id",r),i.style.display="none",n.body.appendChild(i),i.contentWindow.document.open(),i.contentWindow.document.close(),u="",a=!1,o.checkerFunction=function(){if(a)return!1;a=!0;var n=o.getHash()||"",r=o.unescapeHash(i.contentWindow.document.location.hash)||"";return n!==t?(t=n,r!==n&&(u=r=n,i.contentWindow.document.open(),i.contentWindow.document.close(),i.contentWindow.document.location.hash=o.escapeHash(n)),o.Adapter.trigger(e,"hashchange")):r!==u&&(u=r,o.setHash(r,!1)),a=!1,!0}):o.checkerFunction=function(){var n=o.getHash();return n!==t&&(t=n,o.Adapter.trigger(e,"hashchange")),!0},o.intervalList.push(s(o.checkerFunction,o.options.hashChangeInterval)),!0},o.Adapter.onDomLoad(o.hashChangeInit)),o.emulated.pushState&&(o.onHashChange=function(t){var r=t&&t.newURL||n.location.href,i=o.getHashByUrl(r),s=null,u=null,a=null,f;return o.isLastHash(i)?(o.busy(!1),!1):(o.doubleCheckComplete(),o.saveHash(i),i&&o.isTraditionalAnchor(i)?(o.Adapter.trigger(e,"anchorchange"),o.busy(!1),!1):(s=o.extractState(o.getFullUrl(i||n.location.href,!1),!0),o.isLastSavedState(s)?(o.busy(!1),!1):(u=o.getHashByState(s),f=o.discardedState(s),f?(o.getHashByIndex(-2)===o.getHashByState(f.forwardState)?o.back(!1):o.forward(!1),!1):(o.pushState(s.data,s.title,s.url,!1),!0))))},o.Adapter.bind(e,"hashchange",o.onHashChange),o.pushState=function(t,r,i,s){if(o.getHashByUrl(i))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(s!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.pushState,args:arguments,queue:s}),!1;o.busy(!0);var u=o.createStateObject(t,r,i),a=o.getHashByState(u),f=o.getState(!1),l=o.getHashByState(f),c=o.getHash();return o.storeState(u),o.expectedStateId=u.id,o.recycleState(u),o.setTitle(u),a===l?(o.busy(!1),!1):a!==c&&a!==o.getShortUrl(n.location.href)?(o.setHash(a,!1),!1):(o.saveState(u),o.Adapter.trigger(e,"statechange"),o.busy(!1),!0)},o.replaceState=function(e,t,n,r){if(o.getHashByUrl(n))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(r!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.replaceState,args:arguments,queue:r}),!1;o.busy(!0);var i=o.createStateObject(e,t,n),s=o.getState(!1),u=o.getStateByIndex(-2);return o.discardState(s,i,u),o.pushState(i.data,i.title,i.url,!1),!0}),o.emulated.pushState&&o.getHash()&&!o.emulated.hashChange&&o.Adapter.onDomLoad(function(){o.Adapter.trigger(e,"hashchange")})},typeof o.init!="undefined"&&o.init()}(window),function(e,t){var n=e.console||t,r=e.document,i=e.navigator,s=e.sessionStorage||!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!="undefined")throw new Error("History.js Core has already been loaded...");h.init=function(){return typeof h.Adapter=="undefined"?!1:(typeof h.initCore!="undefined"&&h.initCore(),typeof h.initHtml4!="undefined"&&h.initHtml4(),!0)},h.initCore=function(){if(typeof h.initCore.initialized!="undefined")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!="undefined"&&t!==null){for(e=0;e<t.length;e++)f(t[e]);h.intervalList=null}},h.debug=function(){(h.options.debug||!1)&&h.log.apply(h,arguments)},h.log=function(){var e=typeof n!="undefined"&&typeof n.log!="undefined"&&typeof n.log.apply!="undefined",t=r.getElementById("log"),i,s,o,u,a;e?(u=Array.prototype.slice.call(arguments),i=u.shift(),typeof n.debug!="undefined"?n.debug.apply(n,[i,u]):n.log.apply(n,[i,u])):i="\n"+arguments[0]+"\n";for(s=1,o=arguments.length;s<o;++s){a=arguments[s];if(typeof a=="object"&&typeof l!="undefined")try{a=l.stringify(a)}catch(f){}i+="\n"+a+"\n"}return t?(t.value+=i+"\n-----\n",t.scrollTop=t.scrollHeight-t.clientHeight):e||c(i),!0},h.getInternetExplorerMajorVersion=function(){var e=h.getInternetExplorerMajorVersion.cached=typeof h.getInternetExplorerMajorVersion.cached!="undefined"?h.getInternetExplorerMajorVersion.cached:function(){var e=3,t=r.createElement("div"),n=t.getElementsByTagName("i");while((t.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||r.location.href,n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=r.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(h.unescapeString(e.url||r.location.href)),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data);if(t.title||n)t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id;return t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r;return n=/(.*)\&_suid=([0-9]+)$/.exec(e),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getHash=function(){var e=h.unescapeHash(r.location.hash);return e},h.unescapeString=function(t){var n=t,r;for(;;){r=e.unescape(n);if(r===n)break;n=r}return n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=h.unescapeString(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i,s;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(n=h.escapeHash(e),h.busy(!0),i=h.extractState(e,!0),i&&!h.emulated.pushState?h.pushState(i.data,i.title,i.url,!1):r.location.hash!==n&&(h.bugs.setHash?(s=h.getPageUrl(),h.pushState(null,null,s+"#"+n,!1)):r.location.hash=n),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.escape(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(r.location.href),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var d=function(){};h.pushState=h.pushState||d,h.replaceState=h.replaceState||d}else h.onPopState=function(t,n){var i=!1,s=!1,o,u;return h.doubleCheckComplete(),o=h.getHash(),o?(u=h.extractState(o||r.location.href,!0),u?h.replaceState(u.data,u.title,u.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(i=h.Adapter.extractEventData("state",t,n)||!1,i?s=h.getStateById(i):h.expectedStateId?s=h.getStateById(h.expectedStateId):s=h.extractState(r.location.href),s||(s=h.createStateObject(null,null,r.location.href)),h.expectedStateId=!1,h.isLastSavedState(s)?(h.busy(!1),!1):(h.storeState(s),h.saveState(s),h.setTitle(s),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(v){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"beforeunload",h.clearAllIntervals),h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(r.location.href,!0))),s&&(h.onUnload=function(){var e,t;try{e=l.parse(s.getItem("History.store"))||{}}catch(n){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),s.setItem("History.store",l.stringify(e))},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},h.init()}(window)}catch(t){}}),timely.define("external_libs/jquery.tablescroller",["jquery_timely"],function(e){function n(){if(t)return t;var n=e('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div></div>');e("body").append(n);var r=e("div",n).innerWidth();n.css("overflow-y","auto");var i=e("div",n).innerWidth();return e(n).remove(),t=r-i,t}var t=0;e.fn.tableScroll=function(t){if(t=="undo"){var r=e(this).parent().parent();r.hasClass("tablescroll_wrapper")&&(r.find(".tablescroll_head thead").prependTo(this),r.find(".tablescroll_foot tfoot").appendTo(this),r.before(this),r.empty());return}var i=e.extend({},e.fn.tableScroll.defaults,t);return i.scrollbarWidth=n(),this.each(function(){var t=i.flush,n=e(this).addClass("tablescroll_body"),r=e('<div class="tablescroll_wrapper ai1ec-popover-boundary"></div>').insertBefore(n).append(n);r.parent("div").hasClass(i.containerClass)||e("<div></div>").addClass(i.containerClass).insertBefore(r).append(r);var s=i.width?i.width:n.outerWidth(),o=i.scroll?"auto":"hidden";r.css({width:s+"px",height:i.height+"px",overflow:o}),n.css("width",s+"px");var u=r.outerWidth(),a=u-s;r.css({width:s-a-2+"px"}),n.css("width",s-a-i.scrollbarWidth+"px"),n.outerHeight()<=i.height&&(r.css({height:"auto",width:s-a+"px"}),t=!1);var f=e("thead",n).length?!0:!1,l=e("tfoot",n).length?!0:!1,c=e("thead tr:first",n),h=e("tbody tr:first",n),p=e("tfoot tr:first",n),d=0;e("th, td",c).each(function(t){d=e(this).width(),e("th:eq("+t+"), td:eq("+t+")",c).css("width",d+"px"),e("th:eq("+t+"), td:eq("+t+")",h).css("width",d+"px"),l&&e("th:eq("+t+"), td:eq("+t+")",p).css("width",d+"px")});if(f)var v=e('<table class="tablescroll_head" cellspacing="0"></table>').insertBefore(r).prepend(e("thead",n));if(l)var m=e('<table class="tablescroll_foot" cellspacing="0"></table>').insertAfter(r).prepend(e("tfoot",n));v!=undefined&&(v.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",v).css("width",d+i.scrollbarWidth+"px"),v.css("width",r.outerWidth()+"px"))),m!=undefined&&(m.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",m).css("width",d+i.scrollbarWidth+"px"),m.css("width",r.outerWidth()+"px")))}),this},e.fn.tableScroll.defaults={flush:!0,width:null,height:100,containerClass:"tablescroll",scroll:!0}}),timely.define("external_libs/jquery.scrollTo",["jquery_timely"],function(e){function n(e){return typeof e=="object"?e:{top:e,left:e}}var t=e.scrollTo=function(t,n,r){e(window).scrollTo(t,n,r)};t.defaults={axis:"xy",duration:parseFloat(e.fn.jquery)>=1.3?0:1,limit:!0},t.window=function(t){return e(window)._scrollable()},e.fn._scrollable=function(){return this.map(function(){var t=this,n=!t.nodeName||e.inArray(t.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!n)return t;var r=(t.contentWindow||t).document||t.ownerDocument||t;return/webkit/i.test(navigator.userAgent)||r.compatMode=="BackCompat"?r.body:r.documentElement})},e.fn.scrollTo=function(r,i,s){return typeof i=="object"&&(s=i,i=0),typeof s=="function"&&(s={onAfter:s}),r=="max"&&(r=9e9),s=e.extend({},t.defaults,s),i=i||s.duration,s.queue=s.queue&&s.axis.length>1,s.queue&&(i/=2),s.offset=n(s.offset),s.over=n(s.over),this._scrollable().each(function(){function h(e){u.animate(l,i,s.easing,e&&function(){e.call(this,r,s)})}if(r==null)return;var o=this,u=e(o),a=r,f,l={},c=u.is("html,body");switch(typeof a){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(a)){a=n(a);break}a=e(a,this);if(!a.length)return;case"object":if(a.is||a.style)f=(a=e(a)).offset()}e.each(s.axis.split(""),function(e,n){var r=n=="x"?"Left":"Top",i=r.toLowerCase(),p="scroll"+r,d=o[p],v=t.max(o,n);if(f)l[p]=f[i]+(c?0:d-u.offset()[i]),s.margin&&(l[p]-=parseInt(a.css("margin"+r))||0,l[p]-=parseInt(a.css("border"+r+"Width"))||0),l[p]+=s.offset[i]||0,s.over[i]&&(l[p]+=a[n=="x"?"width":"height"]()*s.over[i]);else{var m=a[i];l[p]=m.slice&&m.slice(-1)=="%"?parseFloat(m)/100*v:m}s.limit&&/^\d+$/.test(l[p])&&(l[p]=l[p]<=0?0:Math.min(l[p],v)),!e&&s.queue&&(d!=l[p]&&h(s.onAfterFirst),delete l[p])}),h(s.onAfter)}).end()},t.max=function(t,n){var r=n=="x"?"Width":"Height",i="scroll"+r;if(!e(t).is("html,body"))return t[i]-e(t)[r.toLowerCase()]();var s="client"+r,o=t.ownerDocument.documentElement,u=t.ownerDocument.body;return Math.max(o[i],u[i])-Math.min(o[s],u[s])}}),timely.define("external_libs/locales/bootstrap-datepicker.bg",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота","Неделя"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб","Нед"],daysMin:["Н","П","В","С","Ч","П","С","Н"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.br",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.br={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.cs",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota","Neděle"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob","Ned"],daysMin:["Ne","Po","Út","St","Čt","Pá","So","Ne"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.da",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",clear:"Nulstil"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.de",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam","Son"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa","So"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.es",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb","Dom"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa","Do"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fi",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai","sunnuntai"],daysShort:["sun","maa","tii","kes","tor","per","lau","sun"],daysMin:["su","ma","ti","ke","to","pe","la","su"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",weekStart:1,format:"d.m.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Dim"],daysMin:["D","L","Ma","Me","J","V","S","D"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.id",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab","Mgu"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa","Mg"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.is",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur","Sunnudagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau","Sun"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La","Su"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.it",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato","Domenica"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab","Dom"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa","Do"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ja",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜","日曜"],daysShort:["日","月","火","水","木","金","土","日"],daysMin:["日","月","火","水","木","金","土","日"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.kr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일","일요일"],daysShort:["일","월","화","수","목","금","토","일"],daysMin:["일","월","화","수","목","금","토","일"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis","Sekmadienis"],daysShort:["S","Pr","A","T","K","Pn","Š","S"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št","Sk"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena","Svētdiena"],daysShort:["Sv","P","O","T","C","Pk","S","Sv"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se","Sv"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],today:"Šodien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ms",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu","Ahad"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab","Aha"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa","Ah"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nb",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nb={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nl={days:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag"],daysShort:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],daysMin:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],months:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Vandaag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pl={days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota","Niedziela"],daysShort:["Nie","Pn","Wt","Śr","Czw","Pt","So","Nie"],daysMin:["N","Pn","Wt","Śr","Cz","Pt","So","N"],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthsShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],today:"Dzisiaj",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt-BR",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ru",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб","Вск"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб","Вс"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota","Nedelja"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob","Ned"],daysMin:["Ne","Po","To","Sr","Če","Pe","So","Ne"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sv={days:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag","Söndag"],daysShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör","Sön"],daysMin:["Sö","Må","Ti","On","To","Fr","Lö","Sö"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",format:"yyyy-mm-dd",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.th",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.tr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi","Pazar"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts","Pz"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct","Pz"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-CN",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["周日","周一","周二","周三","周四","周五","周六","周日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今日",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-TW",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["週日","週一","週二","週三","週四","週五","週六","週日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/bootstrap_datepicker",["jquery_timely","ai1ec_config","external_libs/locales/bootstrap-datepicker.bg","external_libs/locales/bootstrap-datepicker.br","external_libs/locales/bootstrap-datepicker.cs","external_libs/locales/bootstrap-datepicker.da","external_libs/locales/bootstrap-datepicker.de","external_libs/locales/bootstrap-datepicker.es","external_libs/locales/bootstrap-datepicker.fi","external_libs/locales/bootstrap-datepicker.fr","external_libs/locales/bootstrap-datepicker.id","external_libs/locales/bootstrap-datepicker.is","external_libs/locales/bootstrap-datepicker.it","external_libs/locales/bootstrap-datepicker.ja","external_libs/locales/bootstrap-datepicker.kr","external_libs/locales/bootstrap-datepicker.lt","external_libs/locales/bootstrap-datepicker.lv","external_libs/locales/bootstrap-datepicker.ms","external_libs/locales/bootstrap-datepicker.nb","external_libs/locales/bootstrap-datepicker.nl","external_libs/locales/bootstrap-datepicker.pl","external_libs/locales/bootstrap-datepicker.pt-BR","external_libs/locales/bootstrap-datepicker.pt","external_libs/locales/bootstrap-datepicker.ru","external_libs/locales/bootstrap-datepicker.sl","external_libs/locales/bootstrap-datepicker.sv","external_libs/locales/bootstrap-datepicker.th","external_libs/locales/bootstrap-datepicker.tr","external_libs/locales/bootstrap-datepicker.zh-CN","external_libs/locales/bootstrap-datepicker.zh-TW"],function(e,t){function r(){return new Date(Date.UTC.apply(Date,arguments))}function i(){var e=new Date;return r(e.getFullYear(),e.getMonth(),e.getDate())}function s(e){return function(){return this[e].apply(this,arguments)}}function f(t,n){var r=e(t).data(),i={},s,o=new RegExp("^"+n.toLowerCase()+"([A-Z])"),n=new RegExp("^"+n.toLowerCase());for(var u in r)n.test(u)&&(s=u.replace(o,function(e,t){return t.toLowerCase()}),i[s]=r[u]);return i}function l(t){var n={};if(!d[t]){t=t.split("-")[0];if(!d[t])return}var r=d[t];return e.each(p,function(e,t){t in r&&(n[t]=r[t])}),n}var n=e(window),o=function(){var t={get:function(e){return this.slice(e)[0]},contains:function(e){var t=e&&e.valueOf();for(var n=0,r=this.length;n<r;n++)if(this[n].valueOf()===t)return n;return-1},remove:function(e){this.splice(e,1)},replace:function(t){if(!t)return;e.isArray(t)||(t=[t]),this.clear(),this.push.apply(this,t)},clear:function(){this.splice(0)},copy:function(){var e=new o;return e.replace(this),e}};return function(){var n=[];return n.push.apply(n,arguments),e.extend(n,t),n}}(),u=function(t,n){this.dates=new o,this.viewDate=i(),this.focusDate=null,this._process_options(n),this.element=e(t),this.isInline=!1,this.isInput=this.element.is("input"),this.component=this.element.is(".ai1ec-date")?this.element.find(".ai1ec-input-group, .ai1ec-input-group-addon, .ai1ec-btn"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&this.component.length===0&&(this.component=!1),this.picker=e(v.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("ai1ec-datepicker-inline").appendTo(this.element):this.picker.addClass("ai1ec-datepicker-dropdown ai1ec-dropdown-menu"),this.o.rtl&&this.picker.addClass("ai1ec-datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("tfoot th.ai1ec-today").attr("colspan",function(e,t){return parseInt(t)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};u.prototype={constructor:u,_process_options:function(n){this._o=e.extend({},this._o,n);var r=this.o=e.extend({},this._o),i=r.language;d[i]||(i=i.split("-")[0],d[i]||(i=t.language,d[i]||(i=h.language))),r.language=i;switch(r.startView){case 2:case"decade":r.startView=2;break;case 1:case"year":r.startView=1;break;default:r.startView=0}switch(r.minViewMode){case 1:case"months":r.minViewMode=1;break;case 2:case"years":r.minViewMode=2;break;default:r.minViewMode=0}r.startView=Math.max(r.startView,r.minViewMode),r.multidate!==!0&&(r.multidate=Number(r.multidate)||!1,r.multidate!==!1?r.multidate=Math.max(0,r.multidate):r.multidate=1),r.multidateSeparator=String(r.multidateSeparator),r.weekStart%=7,r.weekEnd=(r.weekStart+6)%7;var s=v.parseFormat(r.format);r.startDate!==-Infinity&&(r.startDate?r.startDate instanceof Date?r.startDate=this._local_to_utc(this._zero_time(r.startDate)):r.startDate=v.parseDate(r.startDate,s,r.language):r.startDate=-Infinity),r.endDate!==Infinity&&(r.endDate?r.endDate instanceof Date?r.endDate=this._local_to_utc(this._zero_time(r.endDate)):r.endDate=v.parseDate(r.endDate,s,r.language):r.endDate=Infinity),r.daysOfWeekDisabled=r.daysOfWeekDisabled||[],e.isArray(r.daysOfWeekDisabled)||(r.daysOfWeekDisabled=r.daysOfWeekDisabled.split(/[,\s]*/)),r.daysOfWeekDisabled=e.map(r.daysOfWeekDisabled,function(e){return parseInt(e,10)});var o=String(r.orientation).toLowerCase().split(/\s+/g),u=r.orientation.toLowerCase();o=e.grep(o,function(e){return/^auto|left|right|top|bottom$/.test(e)}),r.orientation={x:"auto",y:"auto"};if(!!u&&u!=="auto")if(o.length===1)switch(o[0]){case"top":case"bottom":r.orientation.y=o[0];break;case"left":case"right":r.orientation.x=o[0]}else u=e.grep(o,function(e){return/^left|right$/.test(e)}),r.orientation.x=u[0]||"auto",u=e.grep(o,function(e){return/^top|bottom$/.test(e)}),r.orientation.y=u[0]||"auto"},_events:[],_secondaryEvents:[],_applyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(r=undefined,i=e[t][1]):e[t].length==3&&(r=e[t][1],i=e[t][2]),n.on(i,r)},_unapplyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(i=undefined,r=e[t][1]):e[t].length==3&&(i=e[t][1],r=e[t][2]),n.off(r,i)},_buildEvents:function(){this.isInput?this._events=[[this.element,{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}]]:this.component&&this.hasInput?this._events=[[this.element.find("input"),{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}],[this.component,{click:e.proxy(this.show,this)}]]:this.element.is("div")?this.isInline=!0:this._events=[[this.element,{click:e.proxy(this.show,this)}]],this._events.push([this.element,"*",{blur:e.proxy(function(e){this._focused_from=e.target},this)}],[this.element,{blur:e.proxy(function(e){this._focused_from=e.target},this)}]),this._secondaryEvents=[[this.picker,{click:e.proxy(this.click,this)}],[e(window),{resize:e.proxy(this.place,this)}],[e(document),{"mousedown touchstart":e.proxy(function(e){this.element.is(e.target)||this.element.find(e.target).length||this.picker.is(e.target)||this.picker.find(e.target).length||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(t,n){var r=n||this.dates.get(-1),i=this._utc_to_local(r);this.element.trigger({type:t,date:i,dates:e.map(this.dates,this._utc_to_local),format:e.proxy(function(e,t){arguments.length===0?(e=this.dates.length-1,t=this.o.format):typeof e=="string"&&(t=e,e=this.dates.length-1),t=t||this.o.format;var n=this.dates.get(e);return v.formatDate(n,t,this.o.language)},this)})},show:function(e){this.isInline||this.picker.appendTo("body"),this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),this._attachSecondaryEvents(),this._trigger("show")},hide:function(){if(this.isInline)return;if(!this.picker.is(":visible"))return;this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this._trigger("hide")},remove:function(){this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date},_utc_to_local:function(e){return e&&new Date(e.getTime()+e.getTimezoneOffset()*6e4)},_local_to_utc:function(e){return e&&new Date(e.getTime()-e.getTimezoneOffset()*6e4)},_zero_time:function(e){return e&&new Date(e.getFullYear(),e.getMonth(),e.getDate())},_zero_utc_time:function(e){return e&&new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))},getDates:function(){return e.map(this.dates,this._utc_to_local)},getUTCDates:function(){return e.map(this.dates,function(e){return new Date(e)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){return new Date(this.dates.get(-1))},setDates:function(){this.update.apply(this,arguments),this._trigger("changeDate"),this.setValue()},setUTCDates:function(){this.update.apply(this,e.map(arguments,this._utc_to_local)),this._trigger("changeDate"),this.setValue()},setDate:s("setDates"),setUTCDate:s("setUTCDates"),setValue:function(){var e=this.getFormattedDate();this.isInput?this.element.val(e).change():this.component&&this.element.find("input").val(e).change()},getFormattedDate:function(t){t===undefined&&(t=this.o.format);var n=this.o.language;return e.map(this.dates,function(e){return v.formatDate(e,t,n)}).join(this.o.multidateSeparator)},setStartDate:function(e){this._process_options({startDate:e}),this.update(),this.updateNavArrows()},setEndDate:function(e){this._process_options({endDate:e}),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(e){this._process_options({daysOfWeekDisabled:e}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return;var t=this.picker.outerWidth(),r=this.picker.outerHeight(),i=10,s=n.width(),o=n.height(),u=n.scrollTop(),a=parseInt(this.element.parents().filter(function(){return e(this).css("z-index")!="auto"}).first().css("z-index"))+10,f=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),c=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),h=f.left,p=f.top;this.picker.removeClass("ai1ec-datepicker-orient-top ai1ec-datepicker-orient-bottom ai1ec-datepicker-orient-right ai1ec-datepicker-orient-left"),this.o.orientation.x!=="auto"?(this.picker.addClass("ai1ec-datepicker-orient-"+this.o.orientation.x),this.o.orientation.x==="right"&&(h-=t-c)):(this.picker.addClass("ai1ec-datepicker-orient-left"),f.left<0?h-=f.left-i:f.left+t>s&&(h=s-t-i));var d=this.o.orientation.y,v,m;d==="auto"&&(v=-u+f.top-r,m=u+o-(f.top+l+r),Math.max(v,m)===m?d="top":d="bottom"),this.picker.addClass("ai1ec-datepicker-orient-"+d),d==="top"?p+=l:p-=r+parseInt(this.picker.css("padding-top")),this.picker.css({top:p,left:h,zIndex:a})},_allow_update:!0,update:function(){if(!this._allow_update)return;var t=this.dates.copy(),n=[],r=!1;arguments.length?(e.each(arguments,e.proxy(function(e,t){t instanceof Date&&(t=this._local_to_utc(t)),n.push(t)},this)),r=!0):(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),n&&this.o.multidate?n=n.split(this.o.multidateSeparator):n=[n],delete this.element.data().date),n=e.map(n,e.proxy(function(e){return v.parseDate(e,this.o.format,this.o.language)},this)),n=e.grep(n,e.proxy(function(e){return e<this.o.startDate||e>this.o.endDate||!e},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),r?this.setValue():n.length&&String(t)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&t.length&&this._trigger("clearDate"),this.fill()},fillDow:function(){var e=this.o.weekStart,t="<tr>";if(this.o.calendarWeeks){var n='<th class="ai1ec-cw"> </th>';t+=n,this.picker.find(".ai1ec-datepicker-days thead tr:first-child").prepend(n)}while(e<this.o.weekStart+7)t+='<th class="ai1ec-dow">'+d[this.o.language].daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".ai1ec-datepicker-days thead").append(t)},fillMonths:function(){var e="",t=0;while(t<12)e+='<span class="ai1ec-month">'+d[this.o.language].monthsShort[t++]+"</span>";this.picker.find(".ai1ec-datepicker-months td").html(e)},setRange:function(t){!t||!t.length?delete this.range:this.range=e.map(t,function(e){return e.valueOf()}),this.fill()},getClassNames:function(t){var n=[],r=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),s=new Date;return t.getUTCFullYear()<r||t.getUTCFullYear()==r&&t.getUTCMonth()<i?n.push("ai1ec-old"):(t.getUTCFullYear()>r||t.getUTCFullYear()==r&&t.getUTCMonth()>i)&&n.push("ai1ec-new"),this.focusDate&&t.valueOf()===this.focusDate.valueOf()&&n.push("ai1ec-focused"),this.o.todayHighlight&&t.getUTCFullYear()==s.getFullYear()&&t.getUTCMonth()==s.getMonth()&&t.getUTCDate()==s.getDate()&&n.push("ai1ec-today"),this.dates.contains(t)!==-1&&n.push("ai1ec-active"),(t.valueOf()<this.o.startDate||t.valueOf()>this.o.endDate||e.inArray(t.getUTCDay(),this.o.daysOfWeekDisabled)!==-1)&&n.push("ai1ec-disabled"),this.range&&(t>this.range[0]&&t<this.range[this.range.length-1]&&n.push("ai1ec-range"),e.inArray(t.valueOf(),this.range)!=-1&&n.push("ai1ec-selected")),n},fill:function(){var t=new Date(this.viewDate),n=t.getUTCFullYear(),i=t.getUTCMonth(),s=this.o.startDate!==-Infinity?this.o.startDate.getUTCFullYear():-Infinity,o=this.o.startDate!==-Infinity?this.o.startDate.getUTCMonth():-Infinity,u=this.o.endDate!==Infinity?this.o.endDate.getUTCFullYear():Infinity,a=this.o.endDate!==Infinity?this.o.endDate.getUTCMonth():Infinity,f,l;this.picker.find(".ai1ec-datepicker-days thead th.ai1ec-datepicker-switch").text(d[this.o.language].months[i]+" "+n),this.picker.find("tfoot th.ai1ec-today").text(d[this.o.language].today).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot th.ai1ec-clear").text(d[this.o.language].clear).toggle(this.o.clearBtn!==!1),this.updateNavArrows(),this.fillMonths();var c=r(n,i-1,28),h=v.getDaysInMonth(c.getUTCFullYear(),c.getUTCMonth());c.setUTCDate(h),c.setUTCDate(h-(c.getUTCDay()-this.o.weekStart+7)%7);var p=new Date(c);p.setUTCDate(p.getUTCDate()+42),p=p.valueOf();var m=[],g;while(c.valueOf()<p){if(c.getUTCDay()==this.o.weekStart){m.push("<tr>");if(this.o.calendarWeeks){var y=new Date(+c+(this.o.weekStart-c.getUTCDay()-7)%7*864e5),b=new Date(+y+(11-y.getUTCDay())%7*864e5),w=new Date(+(w=r(b.getUTCFullYear(),0,1))+(11-w.getUTCDay())%7*864e5),E=(b-w)/864e5/7+1;m.push('<td class="ai1ec-cw">'+E+"</td>")}}g=this.getClassNames(c),g.push("ai1ec-day");if(this.o.beforeShowDay!==e.noop){var S=this.o.beforeShowDay(this._utc_to_local(c));S===undefined?S={}:typeof S=="boolean"?S={enabled:S}:typeof S=="string"&&(S={classes:S}),S.enabled===!1&&g.push("ai1ec-disabled"),S.classes&&(g=g.concat(S.classes.split(/\s+/))),S.tooltip&&(f=S.tooltip)}g=e.unique(g),m.push('<td class="'+g.join(" ")+'"'+(f?' title="'+f+'"':"")+">"+c.getUTCDate()+"</td>"),c.getUTCDay()==this.o.weekEnd&&m.push("</tr>"),c.setUTCDate(c.getUTCDate()+1)}this.picker.find(".ai1ec-datepicker-days tbody").empty().append(m.join(""));var x=this.picker.find(".ai1ec-datepicker-months").find("th:eq(1)").text(n).end().find("span").removeClass("ai1ec-active");e.each(this.dates,function(e,t){t.getUTCFullYear()==n&&x.eq(t.getUTCMonth()).addClass("ai1ec-active")}),(n<s||n>u)&&x.addClass("ai1ec-disabled"),n==s&&x.slice(0,o).addClass("ai1ec-disabled"),n==u&&x.slice(a+1).addClass("ai1ec-disabled"),m="",n=parseInt(n/10,10)*10;var T=this.picker.find(".ai1ec-datepicker-years").find("th:eq(1)").text(n+"-"+(n+9)).end().find("td");n-=1;var N=e.map(this.dates,function(e){return e.getUTCFullYear()}),C;for(var k=-1;k<11;k++)C=["ai1ec-year"],k===-1?C.push("ai1ec-old"):k===10&&C.push("ai1ec-new"),e.inArray(n,N)!==-1&&C.push("ai1ec-active"),(n<s||n>u)&&C.push("ai1ec-disabled"),m+='<span class="'+C.join(" ")+'">'+n+"</span>",n+=1;T.html(m)},updateNavArrows:function(){if(!this._allow_update)return;var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"})}},click:function(t){t.preventDefault();var n=e(t.target).closest("span, td, th"),i,s,o;if(n.length==1)switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"ai1ec-datepicker-switch":this.showMode(1);break;case"ai1ec-prev":case"ai1ec-next":var u=v.modes[this.viewMode].navStep*(n[0].className=="ai1ec-prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,u),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,u),this.viewMode===1&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"ai1ec-today":var a=new Date;a=r(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0),this.showMode(-2);var f=this.o.todayBtn=="linked"?null:"view";this._setDate(a,f);break;case"ai1ec-clear":var l;this.isInput?l=this.element:this.component&&(l=this.element.find("input")),l&&l.val("").change(),this.update(),this._trigger("changeDate"),this.o.autoclose&&this.hide()}break;case"span":n.is(".ai1ec-disabled")||(this.viewDate.setUTCDate(1),n.is(".ai1ec-month")?(o=1,s=n.parent().find("span").index(n),i=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(s),this._trigger("changeMonth",this.viewDate),this.o.minViewMode===1&&this._setDate(r(i,s,o))):(o=1,s=0,i=parseInt(n.text(),10)||0,this.viewDate.setUTCFullYear(i),this._trigger("changeYear",this.viewDate),this.o.minViewMode===2&&this._setDate(r(i,s,o))),this.showMode(-1),this.fill());break;case"td":n.is(".ai1ec-day")&&!n.is(".ai1ec-disabled")&&(o=parseInt(n.text(),10)||1,i=this.viewDate.getUTCFullYear(),s=this.viewDate.getUTCMonth(),n.is(".ai1ec-old")?s===0?(s=11,i-=1):s-=1:n.is(".ai1ec-new")&&(s==11?(s=0,i+=1):s+=1),this._setDate(r(i,s,o)))}this.picker.is(":visible")&&this._focused_from&&e(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(e){var t=this.dates.contains(e);e?t!==-1?this.dates.remove(t):this.dates.push(e):this.dates.clear();if(typeof this.o.multidate=="number")while(this.dates.length>this.o.multidate)this.dates.remove(0)},_setDate:function(e,t){(!t||t=="date")&&this._toggle_multidate(e&&new Date(e));if(!t||t=="view")this.viewDate=e&&new Date(e);this.fill(),this.setValue(),this._trigger("changeDate");var n;this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),this.o.autoclose&&(!t||t=="date")&&this.hide()},moveMonth:function(e,t){if(!e)return undefined;if(!t)return e;var n=new Date(e.valueOf()),r=n.getUTCDate(),i=n.getUTCMonth(),s=Math.abs(t),o,u;t=t>0?1:-1;if(s==1){u=t==-1?function(){return n.getUTCMonth()==i}:function(){return n.getUTCMonth()!=o},o=i+t,n.setUTCMonth(o);if(o<0||o>11)o=(o+12)%12}else{for(var a=0;a<s;a++)n=this.moveMonth(n,t);o=n.getUTCMonth(),n.setUTCDate(r),u=function(){return o!=n.getUTCMonth()}}while(u())n.setUTCDate(--r),n.setUTCMonth(o);return n},moveYear:function(e,t){return this.moveMonth(e,t*12)},dateWithinRange:function(e){return e>=this.o.startDate&&e<=this.o.endDate},keydown:function(e){if(this.picker.is(":not(:visible)")){e.keyCode==27&&this.show();return}var t=!1,n,r,s,o=this.focusDate||this.viewDate;switch(e.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),e.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;n=e.keyCode==37?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n),s=new Date(o),s.setUTCDate(o.getUTCDate()+n)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;n=e.keyCode==38?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n*7),s=new Date(o),s.setUTCDate(o.getUTCDate()+n*7)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 32:break;case 13:o=this.focusDate||this.dates.get(-1)||this.viewDate,this._toggle_multidate(o),t=!0,this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(e.preventDefault(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(t){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var u;this.isInput?u=this.element:this.component&&(u=this.element.find("input")),u&&u.change()}},showMode:function(e){e&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(">div").hide().filter(".ai1ec-datepicker-"+v.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var a=function(t,n){this.element=e(t),this.inputs=e.map(n.inputs,function(e){return e.jquery?e[0]:e}),delete n.inputs,e(this.inputs).datepicker(n).bind("changeDate",e.proxy(this.dateUpdated,this)),this.pickers=e.map(this.inputs,function(t){return e(t).data("datepicker")}),this.updateDates()};a.prototype={updateDates:function(){this.dates=e.map(this.pickers,function(e){return e.getUTCDate()}),this.updateRanges()},updateRanges:function(){var t=e.map(this.dates,function(e){return e.valueOf()});e.each(this.pickers,function(e,n){n.setRange(t)})},dateUpdated:function(t){if(this.updating)return;this.updating=!0;var n=e(t.target).data("datepicker"),r=n.getUTCDate(),i=e.inArray(t.target,this.inputs),s=this.inputs.length;if(i==-1)return;e.each(this.pickers,function(e,t){t.getUTCDate()||t.setUTCDate(r)});if(r<this.dates[i])while(i>=0&&r<this.dates[i])this.pickers[i--].setUTCDate(r);else if(r>this.dates[i])while(i<s&&r>this.dates[i])this.pickers[i++].setUTCDate(r);this.updateDates(),delete this.updating},remove:function(){e.map(this.pickers,function(e){e.remove()}),delete this.element.data().datepicker}};var c=e.fn.datepicker;e.fn.datepicker=function(t){var n=Array.apply(null,arguments);n.shift();var r;return this.each(function(){var i=e(this),s=i.data("datepicker"),o=typeof t=="object"&&t;if(!s){var c=f(this,"date"),p=e.extend({},h,c,o),d=l(p.language),v=e.extend({},h,d,c,o);if(i.is(".ai1ec-input-daterange")||v.inputs){var m={inputs:v.inputs||i.find("input").toArray()};i.data("datepicker",s=new a(this,e.extend(v,m)))}else i.data("datepicker",s=new u(this,v))}if(typeof t=="string"&&typeof s[t]=="function"){r=s[t].apply(s,n);if(r!==undefined)return!1}}),r!==undefined?r:this};var h=e.fn.datepicker.defaults={autoclose:!1,beforeShowDay:e.noop,calendarWeeks:!1,clearBtn:!1,daysOfWeekDisabled:[],endDate:Infinity,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-Infinity,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0},p=e.fn.datepicker.locale_opts=["format","rtl","weekStart"];e.fn.datepicker.Constructor=u;var d=e.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"}},v={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},getDaysInMonth:function(e,t){return[31,v.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(e){var t=e.replace(this.validParts,"\0").split("\0"),n=e.match(this.validParts);if(!t||!t.length||!n||n.length===0)throw new Error("Invalid date format.");return{separators:t,parts:n}},parseDate:function(t,n,i){if(!t)return undefined;if(t instanceof Date)return t;typeof n=="string"&&(n=v.parseFormat(n));if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(t)){var s=/([\-+]\d+)([dmwy])/,o=t.match(/([\-+]\d+)([dmwy])/g),a,f;t=new Date;for(var l=0;l<o.length;l++){a=s.exec(o[l]),f=parseInt(a[1]);switch(a[2]){case"d":t.setUTCDate(t.getUTCDate()+f);break;case"m":t=u.prototype.moveMonth.call(u.prototype,t,f);break;case"w":t.setUTCDate(t.getUTCDate()+f*7);break;case"y":t=u.prototype.moveYear.call(u.prototype,t,f)}}return r(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,0)}var o=t&&t.match(this.nonpunctuation)||[],t=new Date,c={},h=["yyyy","yy","M","MM","m","mm","d","dd"],p={yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){if(isNaN(e))return e;t-=1;while(t<0)t+=12;t%=12,e.setUTCMonth(t);while(e.getUTCMonth()!=t)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}},m,g,a;p.M=p.MM=p.mm=p.m,p.dd=p.d,t=r(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0);var y=n.parts.slice();o.length!=y.length&&(y=e(y).filter(function(t,n){return e.inArray(n,h)!==-1}).toArray());if(o.length==y.length){for(var l=0,b=y.length;l<b;l++){m=parseInt(o[l],10),a=y[l];if(isNaN(m))switch(a){case"MM":g=e(d[i].months).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].months)+1;break;case"M":g=e(d[i].monthsShort).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].monthsShort)+1}c[a]=m}for(var l=0,w,E;l<h.length;l++)E=h[l],E in c&&!isNaN(c[E])&&(w=new Date(t),p[E](w,c[E]),isNaN(w)||(t=w))}return t},formatDate:function(t,n,r){if(!t)return"";typeof n=="string"&&(n=v.parseFormat(n));var i={d:t.getUTCDate(),D:d[r].daysShort[t.getUTCDay()],DD:d[r].days[t.getUTCDay()],m:t.getUTCMonth()+1,M:d[r].monthsShort[t.getUTCMonth()],MM:d[r].months[t.getUTCMonth()],yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear()};i.dd=(i.d<10?"0":"")+i.d,i.mm=(i.m<10?"0":"")+i.m;var t=[],s=e.extend([],n.separators);for(var o=0,u=n.parts.length;o<=u;o++)s.length&&t.push(s.shift()),t.push(i[n.parts[o]]);return t.join("")},headTemplate:'<thead><tr><th class="ai1ec-prev"><i class="ai1ec-fa ai1ec-fa-arrow-left"></i></th><th colspan="5" class="ai1ec-datepicker-switch"></th><th class="ai1ec-next"><i class="ai1ec-fa ai1ec-fa-arrow-right"></i></th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="ai1ec-today"></th></tr><tr><th colspan="7" class="ai1ec-clear"></th></tr></tfoot>'};v.template='<div class="ai1ec-datepicker"><div class="ai1ec-datepicker-days"><table class=" ai1ec-table-condensed">'+v.headTemplate+"<tbody></tbody>"+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-months">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-years">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+"</div>",e.fn.datepicker.DPGlobal=v,e.fn.datepicker.noConflict=function(){return e.fn.datepicker=c,this},e(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(t){var n=e(this);if(n.data("datepicker"))return;t.preventDefault(),n.datepicker("show")}),e(function(){e('[data-provide="datepicker-inline"]').datepicker()});for(var m=2,g=arguments.length;m<g;m++)arguments[m].localize()}),timely.define("external_libs/bootstrap/alert",["jquery_timely"],function(e){var t='[data-dismiss="ai1ec-alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("ai1ec-alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("ai1ec-in"),e.support.transition&&i.hasClass("ai1ec-fade")?i.one(e.support.transition.end,s).emulateTransitionEnd(150):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}),timely.define("external_libs/jquery_cookie",["jquery_timely"],function(e){function n(e){return u.raw?e:encodeURIComponent(e)}function r(e){return u.raw?e:decodeURIComponent(e)}function i(e){return n(u.json?JSON.stringify(e):String(e))}function s(e){e.indexOf('"')===0&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return e=decodeURIComponent(e.replace(t," ")),u.json?JSON.parse(e):e}catch(n){}}function o(t,n){var r=u.raw?t:s(t);return e.isFunction(n)?n(r):r}var t=/\+/g,u=e.cookie=function(t,s,a){if(s!==undefined&&!e.isFunction(s)){a=e.extend({},u.defaults,a);if(typeof a.expires=="number"){var f=a.expires,l=a.expires=new Date;l.setTime(+l+f*864e5)}return document.cookie=[n(t),"=",i(s),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}var c=t?undefined:{},h=document.cookie?document.cookie.split("; "):[];for(var p=0,d=h.length;p<d;p++){var v=h[p].split("="),m=r(v.shift()),g=v.join("=");if(t&&t===m){c=o(g,s);break}!t&&(g=o(g))!==undefined&&(c[m]=g)}return c};u.defaults={},e.removeCookie=function(t,n){return e.cookie(t)===undefined?!1:(e.cookie(t,"",e.extend({},n,{expires:-1})),!e.cookie(t))}}),timely.define("scripts/calendar/load_views",["jquery_timely","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","libs/frontend_utils","libs/utils","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/select2_multiselect_helper","external_libs/jquery_history","external_libs/jquery.tablescroller","external_libs/jquery.scrollTo","external_libs/bootstrap_datepicker","external_libs/bootstrap/alert","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){e.cookie.json=!0;var l="ai1ec_saved_filter",c=!e("#save_filtered_views").hasClass("ai1ec-hide"),h=function(){var t=e("#ai1ec-view-dropdown .ai1ec-dropdown-menu .ai1ec-active a"),n=u.week_view_ends_at-u.week_view_starts_at,i=n*60;e("table.ai1ec-week-view-original").tableScroll({height:i,containerClass:"ai1ec-week-view ai1ec-popover-boundary",scroll:!1}),e("table.ai1ec-oneday-view-original").tableScroll({height:i,containerClass:"ai1ec-oneday-view ai1ec-popover-boundary",scroll:!1});if(e(".ai1ec-week-view").length||e(".ai1ec-oneday-view").length)e(".ai1ec-oneday-view .tablescroll_wrapper, .ai1ec-week-view .tablescroll_wrapper").scrollTo(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")"),e(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")").addClass("ai1ec-first-visible");e(".ai1ec-month-view .ai1ec-multiday").length&&r.extend_multiday_events(),e("#ai1ec-calendar-view-container").trigger("initialize_view.ai1ec")},p=function(){e("#ai1ec-calendar-view-container").trigger("destroy_view.ai1ec");var t=e(".ai1ec-minical-trigger").data("datepicker");typeof t!="undefined"&&(t.picker.remove(),e(document).off("changeDate",".ai1ec-minical-trigger")),e(".ai1ec-tooltip.ai1ec-in, .ai1ec-popup").remove()},d=function(){var t=[],n=[],r=[],i;e(".ai1ec-category-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){t.push(e(this).data("term"))}),e(".ai1ec-tag-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){n.push(e(this).data("term"))}),e(".ai1ec-author-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){r.push(e(this).data("term"))});var s={};return s.cat_ids=t,s.tag_ids=n,s.auth_ids=r,i=e(".ai1ec-views-dropdown .ai1ec-dropdown-menu .ai1ec-active").data("action"),s.action=i,s},v=function(){var t=History.getState(),n=e.cookie(l);if(null===n||undefined===n)n={};var r=d();u.is_calendar_page?n.calendar_page=r:n[t.url]=r,e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").addClass("ai1ec-active").attr("data-original-title",u.clear_saved_filter_text);var i=s.make_alert(u.save_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},m=function(t){t.stopImmediatePropagation();var n=e.cookie(l);if(u.is_calendar_page)delete n.calendar_page;else{var r=History.getState();delete n[r.url]}e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").removeClass("ai1ec-active").attr("data-original-title",u.reset_saved_filter_text),c||e("#save_filtered_views").addClass("ai1ec-hide");var i=s.make_alert(u.remove_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},g=function(t,n){e("#ai1ec-calendar-view-loading").fadeIn("fast"),e("#ai1ec-calendar-view").fadeTo("fast",.3,function(){var r={request_type:n,ai1ec_doing_ajax:!0};e.ajax({url:t,dataType:n,data:r,method:"get",success:function(t){p(),typeof t.views_dropdown=="string"&&e(".ai1ec-views-dropdown").replaceWith(t.views_dropdown),typeof t.categories=="string"&&(e(".ai1ec-category-filter").replaceWith(t.categories),u.use_select2&&f.init(e(".ai1ec-category-filter"))),typeof t.authors=="string"&&(e(".ai1ec-author-filter").replaceWith(t.authors),u.use_select2&&f.init(e(".ai1ec-author-filter"))),typeof t.tags=="string"&&(e(".ai1ec-tag-filter").replaceWith(t.tags),u.use_select2&&f.init(e(".ai1ec-tag-filter"))),typeof t.subscribe_buttons=="string"&&e(".ai1ec-subscribe-container").replaceWith(t.subscribe_buttons),typeof t.save_view_btngroup=="string"&&e("#save_filtered_views").closest(".ai1ec-btn-group").replaceWith(t.save_view_btngroup),c=t.are_filters_set;var n=e("#ai1ec-calendar-view-container");n.height(n.height());var r=e("#ai1ec-calendar-view").html(t.html).height();n.animate({height:r},{complete:function(){n.height("auto")}}),e("#ai1ec-calendar-view-loading").fadeOut("fast"),e("#ai1ec-calendar-view").fadeTo("fast",1),h()}})})},y=!1,b=function(e){var t=History.getState();if(t.data.ai1ec!==undefined&&!0===t.data.ai1ec||!0===y)y=!0,g(t.url,"json")},w=function(e,t){if(e==="json"){var n={ai1ec:!0};History.pushState(n,document.title,decodeURI(t))}else g(t,"jsonp")},E=function(t){var n=e(this);t.preventDefault(),w(n.data("type"),n.attr("href"))},S=function(t){var n=e(this);t.preventDefault();if(typeof n.data("datepicker")=="undefined"){n.datepicker({todayBtn:"linked",todayHighlight:!0});var r=n.data("datepicker");r.picker.addClass("ai1ec-right-aligned");var i=r.place;r.place=function(){i.call(this);var t=this.component?this.component:this.element,n=t.offset();this.picker.css({left:"auto",right:e(document).width()-n.left-t.outerWidth()})},e(document).on("changeDate",".ai1ec-minical-trigger",x)}n.datepicker("show")},x=function(t){var n,r=e(this),i;r.datepicker("hide"),n=r.data("href"),i=t.format(),i=i.replace(/\//g,"-"),n=n.replace("__DATE__",i),w(r.data("type"),n)},T=function(t){var n;typeof t.added!="undefined"?n=e(t.added.element).data("href"):n=e("option[value="+t.removed.id+"]",t.target).data("href"),data={ai1ec:!0},History.pushState(data,null,n)},N=function(){w(e(this).data("type"),e(this).data("href"))};return{initialize_view:h,handle_click_on_link_to_load_view:E,handle_minical_trigger:S,handle_minical_change_date:x,clear_filters:N,handle_state_change:b,load_view:g,save_current_filter:v,remove_current_filter:m,load_view_from_select2_filter:T,load_view_according_to_datatype:w}}),timely.define("external_libs/bootstrap/transition",["jquery_timely"],function(e){function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(e.support.transition.end,function(){n=!0});var i=function(){n||e(r).trigger(e.support.transition.end)};return setTimeout(i,t),this},e(function(){e.support.transition=t()})}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("scripts/calendar",["jquery_timely","scripts/calendar/load_views","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/utils","libs/select2_multiselect_helper","external_libs/bootstrap/transition","external_libs/bootstrap/modal","external_libs/jquery.scrollTo","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){var l=function(){if(s.selector!==undefined&&s.selector!==""&&e(s.selector).length===1){var t=e(":header:contains("+s.title+"):first");t.length||(t=e('<h1 class="page-title"></h1>'),t.text(s.title));var n=e("#ai1ec-container").detach().before(t);e(s.selector).empty().append(n).hide().css("visibility","visible").fadeIn("fast")}},c=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).addClass("ai1ec-hover")},h=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).removeClass("ai1ec-hover")},p=function(){var t=e(this),n=t.data("instanceId");t.delay(500).queue(function(){e(".ai1ec-event-instance-id-"+n).addClass("ai1ec-raised")})},d=function(t){var n=e(this),r=n.data("instanceId"),i=e(t.toElement||t.relatedTarget);if(i.is(".ai1ec-event-instance-id-"+r)||i.parent().is(".ai1ec-event-instance-id-"+r))return;e(".ai1ec-event-instance-id-"+r).clearQueue().removeClass("ai1ec-raised")},v=function(){l()},m=function(){e(document).on({mouseenter:c,mouseleave:h},".ai1ec-event-container.ai1ec-multiday"),e(document).on({mouseenter:p,mouseleave:d},".ai1ec-oneday-view .ai1ec-oneday .ai1ec-event-container, .ai1ec-week-view .ai1ec-week .ai1ec-event-container"),e(document).on("click",".ai1ec-agenda-view .ai1ec-event-header",r.toggle_event),e(document).on("click","#ai1ec-agenda-expand-all",r.expand_all),e(document).on("click","#ai1ec-agenda-collapse-all",r.collapse_all),e(document).on("click","a.ai1ec-load-view",t.handle_click_on_link_to_load_view),e(document).on("click",".ai1ec-minical-trigger",t.handle_minical_trigger),e(document).on("click",".ai1ec-clear-filter",t.clear_filters),e(document).on("click","#ai1ec-print-button",n.handle_click_on_print_button),e(document).on("click",".ai1ec-reveal-full-day button",function(){e(this).fadeOut();var t=e(".ai1ec-oneday-view-original"),n=e(".ai1ec-week-view-original");n.length===0&&(n=t);var r=e(".tablescroll_wrapper").offset().top-n.offset().top;e(window).scrollTo("+="+r+"px",400);var i=1440;e(".tablescroll_wrapper").animate({height:i+"px"})}),History.Adapter.bind(window,"statechange",t.handle_state_change),e(document).on("click","#ai1ec-calendar-view .ai1ec-load-event",function(t){t.preventDefault(),e.cookie.raw=!1,e.cookie("ai1ec_calendar_url",document.URL),window.location.href=this.href})},g=function(){f.init(e(".ai1ec-select2-filters")),e(document).on("change",".ai1ec-select2-multiselect-selector",t.load_view_from_select2_filter)},y=function(){e(document).on("page_ready.ai1ec",function(){v(),o.use_select2&&g(),m(),t.initialize_view()})};return{start:y}}),timely.require(["scripts/calendar"],function(e){e.start()}),timely.define("pages/calendar",function(){});
|
public/js/pages/common_backend.js
CHANGED
|
@@ -90,4 +90,4 @@
|
|
| 90 |
* limitations under the License.
|
| 91 |
* ======================================================================== */
|
| 92 |
|
| 93 |
-
timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/backend/common_ajax_handlers",["jquery_timely"],function(e){var t=function(t){t&&(typeof t.message!="undefined"?window.alert(t.message):e(".ai1ec-facebook-cron-dismiss-notification").closest(".message").fadeOut())},n=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-notification").closest(".message").fadeOut()},r=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-intro-video").closest(".message").fadeOut()},i=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-license-warning").closest(".message").fadeOut()};return{handle_dismiss_plugins:t,handle_dismiss_notification:n,handle_dismiss_intro_video:r,handle_dismiss_license_warning:i}}),timely.define("scripts/common_scripts/backend/common_event_handlers",["jquery_timely","scripts/common_scripts/backend/common_ajax_handlers"],function(e,t){var n=function(n){var r={action:"ai1ec_facebook_cron_dismiss"};e.post(ajaxurl,r,t.handle_dismiss_plugins,"json")},r=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_disable_notification",note:!1};e.post(ajaxurl,i,t.handle_dismiss_notification)},i=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_disable_intro_video",note:!1};e.post(ajaxurl,i,t.handle_dismiss_intro_video)},s=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_set_license_warning",value:"dismissed"};e.post(ajaxurl,i,t.handle_dismiss_license_warning)},o=function(t){e(this).parent().next(".ai1ec-limit-by-options-container").toggle().find("option").removeAttr("selected")};return{dismiss_plugins_messages_handler:n,dismiss_notification_handler:r,dismiss_intro_video_handler:i,dismiss_license_warning_handler:s,handle_multiselect_containers_widget_page:o}}),timely.define("external_libs/Placeholders",[],function(){function e(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent)return e.attachEvent("on"+t,n)}function t(e,t){var n,r;for(n=0,r=e.length;n<r;n++)if(e[n]===t)return!0;return!1}function n(e,t){var n;e.createTextRange?(n=e.createTextRange(),n.move("character",t),n.select()):e.selectionStart&&(e.focus(),e.setSelectionRange(t,t))}function r(e,t){try{return e.type=t,!0}catch(n){return!1}}function P(e){var t;return e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"?(e.setAttribute(p,"false"),e.value="",e.className=e.className.replace(f,""),t=e.getAttribute(d),t&&(e.type=t),!0):!1}function H(e){var t;return e.value===""?(e.setAttribute(p,"true"),e.value=e.getAttribute(h),e.className+=" "+a,t=e.getAttribute(d),t?e.type="text":e.type==="password"&&S.changeType(e,"text")&&e.setAttribute(d,"password"),!0):!1}function B(e,t){var n,r,i,s,o;if(e&&e.getAttribute(h))t(e);else{n=e?e.getElementsByTagName("input"):n,r=e?e.getElementsByTagName("textarea"):r;for(o=0,s=n.length+r.length;o<s;o++)i=o<n.length?n[o]:r[o-n.length],t(i)}}function j(e){B(e,P)}function F(e){B(e,H)}function I(e){return function(){x&&e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"?S.moveCaret(e,0):P(e)}}function q(e){return function(){H(e)}}function R(e){return function(t){N=e.value;if(e.getAttribute(p)==="true")return N!==e.getAttribute(h)||!S.inArray(o,t.keyCode)}}function U(e){return function(){var t;e.getAttribute(p)==="true"&&e.value!==N&&(e.className=e.className.replace(f,""),e.value=e.value.replace(e.getAttribute(h),""),e.setAttribute(p,!1),t=e.getAttribute(d),t&&(e.type=t)),e.value===""&&(e.blur(),S.moveCaret(e,0))}}function z(e){return function(){e===document.activeElement&&e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"&&S.moveCaret(e,0)}}function W(e){return function(){j(e)}}function X(e){e.form&&(O=e.form,O.getAttribute(v)||(S.addEventListener(O,"submit",W(O)),O.setAttribute(v,"true"))),S.addEventListener(e,"focus",I(e)),S.addEventListener(e,"blur",q(e)),x&&(S.addEventListener(e,"keydown",R(e)),S.addEventListener(e,"keyup",U(e)),S.addEventListener(e,"click",z(e))),e.setAttribute(m,"true"),e.setAttribute(h,L),H(e)}var i={Utils:{addEventListener:e,inArray:t,moveCaret:n,changeType:r}},s=["text","search","url","tel","email","password","number","textarea"],o=[27,33,34,35,36,37,38,39,40,8,46],u="#ccc",a="placeholdersjs",f=new RegExp("\\b"+a+"\\b"),l,c,h="data-placeholder-value",p="data-placeholder-active",d="data-placeholder-type",v="data-placeholder-submit",m="data-placeholder-bound",g="data-placeholder-focus",y="data-placeholder-live",b=document.createElement("input"),w=document.getElementsByTagName("head")[0],E=document.documentElement,S=i.Utils,x,T,N,C,k,L,A,O,M,_,D;if(b.placeholder===void 0){l=document.getElementsByTagName("input"),c=document.getElementsByTagName("textarea"),x=E.getAttribute(g)==="false",T=E.getAttribute(y)!=="false",C=document.createElement("style"),C.type="text/css",k=document.createTextNode("."+a+" { color:"+u+"; }"),C.styleSheet?C.styleSheet.cssText=k.nodeValue:C.appendChild(k),w.insertBefore(C,w.firstChild);for(D=0,_=l.length+c.length;D<_;D++)M=D<l.length?l[D]:c[D-l.length],L=M.getAttribute("placeholder"),L&&S.inArray(s,M.type)&&X(M);A=setInterval(function(){for(D=0,_=l.length+c.length;D<_;D++){M=D<l.length?l[D]:c[D-l.length],L=M.getAttribute("placeholder");if(L&&S.inArray(s,M.type)){M.getAttribute(m)||X(M);if(L!==M.getAttribute(h)||M.type==="password"&&!M.getAttribute(d))M.type==="password"&&!M.getAttribute(d)&&S.changeType(M,"text")&&M.setAttribute(d,"password"),M.value===M.getAttribute(h)&&(M.value=L),M.setAttribute(h,L)}}T||clearInterval(A)},100)}return i.disable=j,i.enable=F,i}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("scripts/common_scripts/backend/common_backend",["jquery_timely","domReady","ai1ec_config","scripts/common_scripts/backend/common_event_handlers","external_libs/Placeholders","external_libs/bootstrap/tooltip","external_libs/bootstrap/popover","external_libs/bootstrap/modal"],function(e,t,n,r){var i=function(){e("#ai1ec-facebook-filter option[value=exportable]:selected").length>0&&e("table.wp-list-table tr.no-items").length===0&&n.facebook_logged_in==="1"&&(e("<option>").val("export-facebook").text("Export to facebook").appendTo("select[name='action']"),e("<option>").val("export-facebook").text("Export to facebook").appendTo("select[name='action2']"))},s=function(){if(n.platform_active==="1"){e("#menu-posts-ai1ec_event li").each(function(){var t=e(this);if(t.has('a[href$="all-in-one-event-calendar-themes"], a[href$="all-in-one-event-calendar-edit-css"], a[href$="all-in-one-event-calendar-settings"]').length){if(t.is(".current")){var n=e("a",t).attr("href");e('#adminmenu a:not(.current)[href="'+n+'"]').parent().andSelf().addClass("current").end().closest("li.menu-top").find("> a.menu-top").andSelf().addClass("wp-has-current-submenu wp-menu-open").removeClass("wp-not-current-submenu"),t.closest("li.menu-top").find("> a.menu-top").andSelf().removeClass("wp-has-current-submenu wp-menu-open").addClass("wp-not-current-submenu")}t.hide()}});if(e("body.options-reading-php").length){var t=function(){e("#page_on_front").attr("disabled","disabled")};t(),e("#front-static-pages input:radio").change(t),e("#page_on_front").after('<span class="description">'+n.page_on_front_description+"</span>")}n.strict_mode==="1"&&(e("#dashboard-widgets .postbox").not("#ai1ec-calendar-tasks, #dashboard_right_now").remove(),e("#adminmenu > li").not(".wp-menu-separator, #menu-dashboard, #menu-posts-ai1ec_event, #menu-media, #menu-appearance, #menu-users, #menu-settings").remove(),e("#menu-appearance > .wp-submenu li, #menu-settings > .wp-submenu li").not(':has(a[href*="all-in-one-event-calendar"])').remove())}},o=function(){e("#ai1ec-video").length&&(e.ajax({cache:!0,async:!0,dataType:"script",url:"//www.youtube.com/iframe_api"}),window.onYouTubeIframeAPIReady=function(){var t=new YT.Player("ai1ec-video",{height:"368",width:"600",videoId:window.ai1ecVideo.youtubeId});e("#ai1ec-video").css("display","block"),e("#ai1ec-video-modal").on("hide",function(){t.stopVideo()})})},u=function(){e(document).on("click",".ai1ec-facebook-cron-dismiss-notification",r.dismiss_plugins_messages_handler).on("click",".ai1ec-dismiss-notification",r.dismiss_notification_handler).on("click",".ai1ec-dismiss-intro-video",r.dismiss_intro_video_handler).on("click",".ai1ec-dismiss-license-warning",r.dismiss_license_warning_handler).on("click",".ai1ec-limit-by-cat, .ai1ec-limit-by-tag, .ai1ec-limit-by-event",r.handle_multiselect_containers_widget_page)},a=function(){e("#ai1ec-support .ai1ec-download a[title]").popover({placement:"left"}),e(".ai1ec-tooltip-toggle").tooltip({container:"body"})};n.page!==""&&(e(".if-js-closed").removeClass("if-js-closed").addClass("closed"),postboxes.add_postbox_toggles(n.page));var f=function(t){var n={tracking:t,action:"ai1ec_tracking"};e.post(ajaxurl,n)},l=function(){var t={content:"<h3>Help improve All In One Event Calendar</h3><p>Help us by sending some data</p>",position:{edge:"top",align:"center"},buttons:function(t,n){var r=e('<a id="pointer-close" style="margin-left:5px;" class="button-secondary">Do not allow tracking</a>');return r.bind("click.pointer",function(){n.element.pointer("close")}),r},close:function(){}};jQuery("#wpadminbar").pointer(t).pointer("open"),jQuery("#pointer-close").after('<a id="pointer-primary" class="button-primary">Allow tracking</a>'),jQuery("#pointer-primary").click(function(){f(!0),e(this).closest(".wp-pointer").remove()}),jQuery("#pointer-close").click(function(){f(!1)})},c=function(){t(function(){i(),o(),u(),s(),a(),n.show_tracking_popup&&l()})};return{start:c}}),timely.require(["scripts/common_scripts/backend/common_backend"],function(e){e.start()}),timely.define("pages/common_backend",function(){});
|
| 90 |
* limitations under the License.
|
| 91 |
* ======================================================================== */
|
| 92 |
|
| 93 |
+
timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/backend/common_ajax_handlers",["jquery_timely"],function(e){var t=function(t){t&&(typeof t.message!="undefined"?window.alert(t.message):e(".ai1ec-facebook-cron-dismiss-notification").closest(".message").fadeOut())},n=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-notification").closest(".message").fadeOut()},r=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-intro-video").closest(".message").fadeOut()},i=function(t){t.error?window.alert(t.message):e(".ai1ec-dismiss-license-warning").closest(".message").fadeOut()};return{handle_dismiss_plugins:t,handle_dismiss_notification:n,handle_dismiss_intro_video:r,handle_dismiss_license_warning:i}}),timely.define("scripts/common_scripts/backend/common_event_handlers",["jquery_timely","scripts/common_scripts/backend/common_ajax_handlers"],function(e,t){var n=function(n){var r={action:"ai1ec_facebook_cron_dismiss"};e.post(ajaxurl,r,t.handle_dismiss_plugins,"json")},r=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_disable_notification",note:!1};e.post(ajaxurl,i,t.handle_dismiss_notification)},i=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_disable_intro_video",note:!1};e.post(ajaxurl,i,t.handle_dismiss_intro_video)},s=function(n){var r=e(this);r.attr("disabled",!0);var i={action:"ai1ec_set_license_warning",value:"dismissed"};e.post(ajaxurl,i,t.handle_dismiss_license_warning)},o=function(t){e(this).parent().next(".ai1ec-limit-by-options-container").toggle().find("option").removeAttr("selected")};return{dismiss_plugins_messages_handler:n,dismiss_notification_handler:r,dismiss_intro_video_handler:i,dismiss_license_warning_handler:s,handle_multiselect_containers_widget_page:o}}),timely.define("external_libs/Placeholders",[],function(){function e(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent)return e.attachEvent("on"+t,n)}function t(e,t){var n,r;for(n=0,r=e.length;n<r;n++)if(e[n]===t)return!0;return!1}function n(e,t){var n;e.createTextRange?(n=e.createTextRange(),n.move("character",t),n.select()):e.selectionStart&&(e.focus(),e.setSelectionRange(t,t))}function r(e,t){try{return e.type=t,!0}catch(n){return!1}}function P(e){var t;return e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"?(e.setAttribute(p,"false"),e.value="",e.className=e.className.replace(f,""),t=e.getAttribute(d),t&&(e.type=t),!0):!1}function H(e){var t;return e.value===""?(e.setAttribute(p,"true"),e.value=e.getAttribute(h),e.className+=" "+a,t=e.getAttribute(d),t?e.type="text":e.type==="password"&&S.changeType(e,"text")&&e.setAttribute(d,"password"),!0):!1}function B(e,t){var n,r,i,s,o;if(e&&e.getAttribute(h))t(e);else{n=e?e.getElementsByTagName("input"):n,r=e?e.getElementsByTagName("textarea"):r;for(o=0,s=n.length+r.length;o<s;o++)i=o<n.length?n[o]:r[o-n.length],t(i)}}function j(e){B(e,P)}function F(e){B(e,H)}function I(e){return function(){x&&e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"?S.moveCaret(e,0):P(e)}}function q(e){return function(){H(e)}}function R(e){return function(t){N=e.value;if(e.getAttribute(p)==="true")return N!==e.getAttribute(h)||!S.inArray(o,t.keyCode)}}function U(e){return function(){var t;e.getAttribute(p)==="true"&&e.value!==N&&(e.className=e.className.replace(f,""),e.value=e.value.replace(e.getAttribute(h),""),e.setAttribute(p,!1),t=e.getAttribute(d),t&&(e.type=t)),e.value===""&&(e.blur(),S.moveCaret(e,0))}}function z(e){return function(){e===document.activeElement&&e.value===e.getAttribute(h)&&e.getAttribute(p)==="true"&&S.moveCaret(e,0)}}function W(e){return function(){j(e)}}function X(e){e.form&&(O=e.form,O.getAttribute(v)||(S.addEventListener(O,"submit",W(O)),O.setAttribute(v,"true"))),S.addEventListener(e,"focus",I(e)),S.addEventListener(e,"blur",q(e)),x&&(S.addEventListener(e,"keydown",R(e)),S.addEventListener(e,"keyup",U(e)),S.addEventListener(e,"click",z(e))),e.setAttribute(m,"true"),e.setAttribute(h,L),H(e)}var i={Utils:{addEventListener:e,inArray:t,moveCaret:n,changeType:r}},s=["text","search","url","tel","email","password","number","textarea"],o=[27,33,34,35,36,37,38,39,40,8,46],u="#ccc",a="placeholdersjs",f=new RegExp("\\b"+a+"\\b"),l,c,h="data-placeholder-value",p="data-placeholder-active",d="data-placeholder-type",v="data-placeholder-submit",m="data-placeholder-bound",g="data-placeholder-focus",y="data-placeholder-live",b=document.createElement("input"),w=document.getElementsByTagName("head")[0],E=document.documentElement,S=i.Utils,x,T,N,C,k,L,A,O,M,_,D;if(b.placeholder===void 0){l=document.getElementsByTagName("input"),c=document.getElementsByTagName("textarea"),x=E.getAttribute(g)==="false",T=E.getAttribute(y)!=="false",C=document.createElement("style"),C.type="text/css",k=document.createTextNode("."+a+" { color:"+u+"; }"),C.styleSheet?C.styleSheet.cssText=k.nodeValue:C.appendChild(k),w.insertBefore(C,w.firstChild);for(D=0,_=l.length+c.length;D<_;D++)M=D<l.length?l[D]:c[D-l.length],L=M.getAttribute("placeholder"),L&&S.inArray(s,M.type)&&X(M);A=setInterval(function(){for(D=0,_=l.length+c.length;D<_;D++){M=D<l.length?l[D]:c[D-l.length],L=M.getAttribute("placeholder");if(L&&S.inArray(s,M.type)){M.getAttribute(m)||X(M);if(L!==M.getAttribute(h)||M.type==="password"&&!M.getAttribute(d))M.type==="password"&&!M.getAttribute(d)&&S.changeType(M,"text")&&M.setAttribute(d,"password"),M.value===M.getAttribute(h)&&(M.value=L),M.setAttribute(h,L)}}T||clearInterval(A)},100)}return i.disable=j,i.enable=F,i}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("scripts/common_scripts/backend/common_backend",["jquery_timely","domReady","ai1ec_config","scripts/common_scripts/backend/common_event_handlers","external_libs/Placeholders","external_libs/bootstrap/tooltip","external_libs/bootstrap/popover","external_libs/bootstrap/modal"],function(e,t,n,r){var i=function(){e("#ai1ec-facebook-filter option[value=exportable]:selected").length>0&&e("table.wp-list-table tr.no-items").length===0&&n.facebook_logged_in==="1"&&(e("<option>").val("export-facebook").text("Export to facebook").appendTo("select[name='action']"),e("<option>").val("export-facebook").text("Export to facebook").appendTo("select[name='action2']"))},s=function(){if(n.platform_active==="1"){e("#menu-posts-ai1ec_event li").each(function(){var t=e(this);if(t.has('a[href$="all-in-one-event-calendar-themes"], a[href$="all-in-one-event-calendar-edit-css"], a[href$="all-in-one-event-calendar-settings"]').length){if(t.is(".current")){var n=e("a",t).attr("href");e('#adminmenu a:not(.current)[href="'+n+'"]').parent().andSelf().addClass("current").end().closest("li.menu-top").find("> a.menu-top").andSelf().addClass("wp-has-current-submenu wp-menu-open").removeClass("wp-not-current-submenu"),t.closest("li.menu-top").find("> a.menu-top").andSelf().removeClass("wp-has-current-submenu wp-menu-open").addClass("wp-not-current-submenu")}t.hide()}});if(e("body.options-reading-php").length){var t=function(){e("#page_on_front").attr("disabled","disabled")};t(),e("#front-static-pages input:radio").change(t),e("#page_on_front").after('<span class="description">'+n.page_on_front_description+"</span>")}n.strict_mode==="1"&&(e("#dashboard-widgets .postbox").not("#ai1ec-calendar-tasks, #dashboard_right_now").remove(),e("#adminmenu > li").not(".wp-menu-separator, #menu-dashboard, #menu-posts-ai1ec_event, #menu-media, #menu-appearance, #menu-users, #menu-settings").remove(),e("#menu-appearance > .wp-submenu li, #menu-settings > .wp-submenu li").not(':has(a[href*="all-in-one-event-calendar"])').remove())}},o=function(){e("#ai1ec-video").length&&(e.ajax({cache:!0,async:!0,dataType:"script",url:"//www.youtube.com/iframe_api"}),window.onYouTubeIframeAPIReady=function(){var t=new YT.Player("ai1ec-video",{height:"368",width:"600",videoId:window.ai1ecVideo.youtubeId});e("#ai1ec-video").css("display","block"),e("#ai1ec-video-modal").on("hide",function(){t.stopVideo()})})},u=function(){e(document).on("click",".ai1ec-facebook-cron-dismiss-notification",r.dismiss_plugins_messages_handler).on("click",".ai1ec-dismiss-notification",r.dismiss_notification_handler).on("click",".ai1ec-dismiss-intro-video",r.dismiss_intro_video_handler).on("click",".ai1ec-dismiss-license-warning",r.dismiss_license_warning_handler).on("click",".ai1ec-limit-by-cat, .ai1ec-limit-by-tag, .ai1ec-limit-by-event",r.handle_multiselect_containers_widget_page)},a=function(){e("#ai1ec-support .ai1ec-download a[title]").popover({placement:"left"}),e(".ai1ec-tooltip-toggle").tooltip({container:"body"})},f=function(t){var n={tracking:t,action:"ai1ec_tracking"};e.post(ajaxurl,n)},l=function(){var t={content:"<h3>Help improve All In One Event Calendar</h3><p>Help us by sending some data</p>",position:{edge:"top",align:"center"},buttons:function(t,n){var r=e('<a id="pointer-close" style="margin-left:5px;" class="button-secondary">Do not allow tracking</a>');return r.bind("click.pointer",function(){n.element.pointer("close")}),r},close:function(){}};jQuery("#wpadminbar").pointer(t).pointer("open"),jQuery("#pointer-close").after('<a id="pointer-primary" class="button-primary">Allow tracking</a>'),jQuery("#pointer-primary").click(function(){f(!0),e(this).closest(".wp-pointer").remove()}),jQuery("#pointer-close").click(function(){f(!1)})},c=function(){t(function(){i(),o(),u(),s(),a(),n.show_tracking_popup&&l()})};return{start:c}}),timely.require(["scripts/common_scripts/backend/common_backend"],function(e){e.start()}),timely.define("pages/common_backend",function(){});
|
public/js/scripts/add_new_event.js
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
timely.define(["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/gmaps_helper","scripts/add_new_event/event_location/input_coordinates_event_handlers","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_date_time/date_time_event_handlers","scripts/add_new_event/event_cost_helper","external_libs/jquery.calendrical_timespan","external_libs/jquery.inputdate","external_libs/jquery.tools","external_libs/ai1ec_datepicker","external_libs/bootstrap/transition","external_libs/bootstrap/collapse","external_libs/bootstrap/modal","external_libs/bootstrap/alert","external_libs/bootstrap/tab"],function(e,t,n,r,i,s,o,u,a){var f=function(){var t=new Date(n.now*1e3),r={allday:"#ai1ec_all_day_event",start_date_input:"#ai1ec_start-date-input",start_time_input:"#ai1ec_start-time-input",start_time:"#ai1ec_start-time",end_date_input:"#ai1ec_end-date-input",end_time_input:"#ai1ec_end-time-input",end_time:"#ai1ec_end-time",date_format:n.date_format,month_names:n.month_names,day_names:n.day_names,week_start_day:n.week_start_day,twentyfour_hour:n.twentyfour_hour,now:t};e.timespan(r);var i=e("#ai1ec_exdate").val(),s=null,o=!1,u;if(i.length>=8){s=[];var f=[];e.each(i.split(","),function(e,t){var r=t.slice(0,8),i=r.substr(0,4),o=r.substr(4,2);u=r.substr(6,2),o=o.charAt(0)==="0"?"0"+(parseInt(o.charAt(1),10)-1):parseInt(o,10)-1,s.push(new Date(i,o,u)),f.push(a.formatDate(new Date(i,o,u),n.date_format,!0))}),e("#widgetField span:first").html(f.join(", "))}else s=new Date(n.now*1e3),o=!0;e("#widgetCalendar").DatePicker({flat:!0,calendars:3,mode:"multiple",start:1,date:s,onChange:function(t){t=t.toString();if(t.length>=8){var r="",i=[];e.each(t.split(","),function(e,t){i.push(a.formatDate(new Date(t),n.date_format)),r+=t.replace(/-/g,"")+"T000000Z,"}),e("#widgetField span").html(i.join(", ")),r=r.slice(0,r.length-1),e("#ai1ec_exdate").val(r)}else e("#ai1ec_exdate").val("")}}),o&&e("#widgetCalendar").DatePickerClear(),e("#widgetCalendar div.datepicker").css("position","absolute")},l=function(){e(".ai1ec-panel-collapse").on("hide",function(){e(this).parent().removeClass("ai1ec-overflow-visible")}),e(".ai1ec-panel-collapse").on("shown",function(){var t=e(this);window.setTimeout(function(){t.parent().addClass("ai1ec-overflow-visible")},350)})},c=function(){f(),timely.require(["libs/gmaps"],function(e){e(r.init_gmaps)})},h=function(t,n){window.alert(n),t.preventDefault(),e("#publish, #ai1ec_bottom_publish").removeClass("button-primary-disabled"),e("#publish, #ai1ec_bottom_publish").siblings("#ajax-loading, .spinner").css("visibility","hidden")},p=function(t){s.ai1ec_check_lat_long_fields_filled_when_publishing_event(t)===!0&&(s.ai1ec_convert_commas_to_dots_for_coordinates(),s.ai1ec_check_lat_long_ok_for_search(t)),e("#ai1ec_ticket_url, #ai1ec_contact_url").each(function(){var e=this.value;if(""!==e){var r=/(http|https):\/\//;r.test(e)||h(t,n.url_not_valid)}})},d=function(){e("#ai1ec_google_map").click(i.toggle_visibility_of_google_map_on_click),e("#ai1ec_input_coordinates").change(i.toggle_visibility_of_coordinate_fields_on_click),e("#post").submit(p),e("input.coordinates").blur(i.update_map_from_coordinates_on_blur),e("#ai1ec_bottom_publish").on("click",o.trigger_publish),e(document).on("change","#ai1ec_end",o.show_end_fields).on("click","#ai1ec_repeat_apply",o.handle_click_on_apply_button).on("click","#ai1ec_repeat_cancel",o.handle_click_on_cancel_modal).on("click","#ai1ec_monthly_type_bymonthday, #ai1ec_monthly_type_byday",o.handle_checkbox_monthly_tab_modal).on("click",".ai1ec-btn-group-grid a",o.handle_click_on_toggle_buttons),e("#ai1ec_repeat_box").on("hidden.bs.modal",o.handle_modal_hide),o.execute_pseudo_handlers(),e("#widgetField > a, #widgetField > span, #ai1ec_exclude_date_label").on("click",o.handle_animation_of_calendar_widget),e("#ai1ec_is_free").on("change",u.handle_change_is_free)},v=function(){e("#ai1ec_event").insertAfter("#titlediv")
|
| 1 |
+
timely.define(["jquery_timely","domReady","ai1ec_config","scripts/add_new_event/event_location/gmaps_helper","scripts/add_new_event/event_location/input_coordinates_event_handlers","scripts/add_new_event/event_location/input_coordinates_utility_functions","scripts/add_new_event/event_date_time/date_time_event_handlers","scripts/add_new_event/event_cost_helper","external_libs/jquery.calendrical_timespan","external_libs/jquery.inputdate","external_libs/jquery.tools","external_libs/ai1ec_datepicker","external_libs/bootstrap/transition","external_libs/bootstrap/collapse","external_libs/bootstrap/modal","external_libs/bootstrap/alert","external_libs/bootstrap/tab"],function(e,t,n,r,i,s,o,u,a){var f=function(){var t=new Date(n.now*1e3),r={allday:"#ai1ec_all_day_event",start_date_input:"#ai1ec_start-date-input",start_time_input:"#ai1ec_start-time-input",start_time:"#ai1ec_start-time",end_date_input:"#ai1ec_end-date-input",end_time_input:"#ai1ec_end-time-input",end_time:"#ai1ec_end-time",date_format:n.date_format,month_names:n.month_names,day_names:n.day_names,week_start_day:n.week_start_day,twentyfour_hour:n.twentyfour_hour,now:t};e.timespan(r);var i=e("#ai1ec_exdate").val(),s=null,o=!1,u;if(i.length>=8){s=[];var f=[];e.each(i.split(","),function(e,t){var r=t.slice(0,8),i=r.substr(0,4),o=r.substr(4,2);u=r.substr(6,2),o=o.charAt(0)==="0"?"0"+(parseInt(o.charAt(1),10)-1):parseInt(o,10)-1,s.push(new Date(i,o,u)),f.push(a.formatDate(new Date(i,o,u),n.date_format,!0))}),e("#widgetField span:first").html(f.join(", "))}else s=new Date(n.now*1e3),o=!0;e("#widgetCalendar").DatePicker({flat:!0,calendars:3,mode:"multiple",start:1,date:s,onChange:function(t){t=t.toString();if(t.length>=8){var r="",i=[];e.each(t.split(","),function(e,t){i.push(a.formatDate(new Date(t),n.date_format)),r+=t.replace(/-/g,"")+"T000000Z,"}),e("#widgetField span").html(i.join(", ")),r=r.slice(0,r.length-1),e("#ai1ec_exdate").val(r)}else e("#ai1ec_exdate").val("")}}),o&&e("#widgetCalendar").DatePickerClear(),e("#widgetCalendar div.datepicker").css("position","absolute")},l=function(){e(".ai1ec-panel-collapse").on("hide",function(){e(this).parent().removeClass("ai1ec-overflow-visible")}),e(".ai1ec-panel-collapse").on("shown",function(){var t=e(this);window.setTimeout(function(){t.parent().addClass("ai1ec-overflow-visible")},350)})},c=function(){f(),timely.require(["libs/gmaps"],function(e){e(r.init_gmaps)})},h=function(t,n){window.alert(n),t.preventDefault(),e("#publish, #ai1ec_bottom_publish").removeClass("button-primary-disabled"),e("#publish, #ai1ec_bottom_publish").siblings("#ajax-loading, .spinner").css("visibility","hidden")},p=function(t){s.ai1ec_check_lat_long_fields_filled_when_publishing_event(t)===!0&&(s.ai1ec_convert_commas_to_dots_for_coordinates(),s.ai1ec_check_lat_long_ok_for_search(t)),e("#ai1ec_ticket_url, #ai1ec_contact_url").each(function(){var e=this.value;if(""!==e){var r=/(http|https):\/\//;r.test(e)||h(t,n.url_not_valid)}})},d=function(){e("#ai1ec_google_map").click(i.toggle_visibility_of_google_map_on_click),e("#ai1ec_input_coordinates").change(i.toggle_visibility_of_coordinate_fields_on_click),e("#post").submit(p),e("input.coordinates").blur(i.update_map_from_coordinates_on_blur),e("#ai1ec_bottom_publish").on("click",o.trigger_publish),e(document).on("change","#ai1ec_end",o.show_end_fields).on("click","#ai1ec_repeat_apply",o.handle_click_on_apply_button).on("click","#ai1ec_repeat_cancel",o.handle_click_on_cancel_modal).on("click","#ai1ec_monthly_type_bymonthday, #ai1ec_monthly_type_byday",o.handle_checkbox_monthly_tab_modal).on("click",".ai1ec-btn-group-grid a",o.handle_click_on_toggle_buttons),e("#ai1ec_repeat_box").on("hidden.bs.modal",o.handle_modal_hide),o.execute_pseudo_handlers(),e("#widgetField > a, #widgetField > span, #ai1ec_exclude_date_label").on("click",o.handle_animation_of_calendar_widget),e("#ai1ec_is_free").on("change",u.handle_change_is_free)},v=function(){e("#ai1ec_event").insertAfter("#titlediv")},m=function(){c(),t(function(){l(),v(),d()})};return{start:m}});
|
public/js/scripts/add_new_event/event_date_time/date_time_event_handlers.js
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
timely.define(["jquery_timely","ai1ec_config","scripts/add_new_event/event_date_time/date_time_utility_functions","external_libs/jquery.calendrical_timespan","libs/utils","external_libs/bootstrap/button"],function(e,t,n,r,i){var s=i.get_ajax_url(),o=function(){var t=e("#ai1ec_end option:selected").val();switch(t){case"0":e("#ai1ec_until_holder, #ai1ec_count_holder").collapse("hide");break;case"1":e("#ai1ec_until_holder").collapse("hide"),e("#ai1ec_count_holder").collapse("show");break;case"2":e("#ai1ec_count_holder").collapse("hide"),e("#ai1ec_until_holder").collapse("show")}},u=function(){e("#publish").trigger("click")},a=function(){var i=e(this),o="",u=e("#ai1ec_repeat_box .ai1ec-tab-pane.ai1ec-active"),a=u.data("freq");switch(a){case"daily":o+="FREQ=DAILY;";var f=e("#ai1ec_daily_count").val();f>1&&(o+="INTERVAL="+f+";");break;case"weekly":o+="FREQ=WEEKLY;";var l=e("#ai1ec_weekly_count").val();l>1&&(o+="INTERVAL="+l+";");var c=e('input[name="ai1ec_weekly_date_select"]:first').val(),h=e('#ai1ec_weekly_date_select >
|
| 1 |
+
timely.define(["jquery_timely","ai1ec_config","scripts/add_new_event/event_date_time/date_time_utility_functions","external_libs/jquery.calendrical_timespan","libs/utils","external_libs/bootstrap/button"],function(e,t,n,r,i){var s=i.get_ajax_url(),o=function(){var t=e("#ai1ec_end option:selected").val();switch(t){case"0":e("#ai1ec_until_holder, #ai1ec_count_holder").collapse("hide");break;case"1":e("#ai1ec_until_holder").collapse("hide"),e("#ai1ec_count_holder").collapse("show");break;case"2":e("#ai1ec_count_holder").collapse("hide"),e("#ai1ec_until_holder").collapse("show")}},u=function(){e("#publish").trigger("click")},a=function(){var i=e(this),o="",u=e("#ai1ec_repeat_box .ai1ec-tab-pane.ai1ec-active"),a=u.data("freq");switch(a){case"daily":o+="FREQ=DAILY;";var f=e("#ai1ec_daily_count").val();f>1&&(o+="INTERVAL="+f+";");break;case"weekly":o+="FREQ=WEEKLY;";var l=e("#ai1ec_weekly_count").val();l>1&&(o+="INTERVAL="+l+";");var c=e('input[name="ai1ec_weekly_date_select"]:first').val(),h=e('#ai1ec_weekly_date_select > div:first > input[type="hidden"]:first').val();c.length>0&&(o+="WKST="+h+";BYday="+c+";");break;case"monthly":o+="FREQ=MONTHLY;";var p=e("#ai1ec_monthly_count").val(),d=e('input[name="ai1ec_monthly_type"]:checked').val();p>1&&(o+="INTERVAL="+p+";");var v=e('input[name="ai1ec_montly_date_select"]:first').val();if(v.length>0&&d==="bymonthday")o+="BYMONTHDAY="+v+";";else if(d==="byday"){var m=e("#ai1ec_monthly_byday_num").val(),g=e("#ai1ec_monthly_byday_weekday").val();o+="BYday="+m+g+";"}break;case"yearly":o+="FREQ=YEARLY;";var y=e("#ai1ec_yearly_count").val();y>1&&(o+="INTERVAL="+y+";");var b=e('input[name="ai1ec_yearly_date_select"]:first').val();b.length>0&&(o+="BYMONTH="+b+";")}var w=e("#ai1ec_end").val();if(w==="1")o+="COUNT="+e("#ai1ec_count").val()+";";else if(w==="2"){var E=e("#ai1ec_until-date-input").val();E=r.parseDate(E,t.date_format);var S=e("#ai1ec_start-time").val();S=r.parseDate(S,t.date_format),S=new Date(S);var x=E.getUTCDate(),T=E.getUTCMonth()+1,N=S.getUTCHours(),C=S.getUTCMinutes();T=T<10?"0"+T:T,x=x<10?"0"+x:x,N=N<10?"0"+N:N,C=C<10?"0"+C:C,E=E.getUTCFullYear()+""+T+x+"T235959Z",o+="UNTIL="+E+";"}var k={action:"ai1ec_rrule_to_text",rrule:o};i.button("loading").next().addClass("ai1ec-disabled"),e.post(s,k,function(t){t.error?(i.button("reset").next().removeClass("ai1ec-disabled"),"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_error("#ai1ec_rrule","#ai1ec_repeat_label",t,i):n.repeat_form_error("#ai1ec_exrule","#ai1ec_exclude_label",t,i)):"1"===e("#ai1ec_is_box_repeat").val()?n.repeat_form_success("#ai1ec_rrule","#ai1ec_repeat_label","#ai1ec_repeat_text > a",o,i,t):n.repeat_form_success("#ai1ec_exrule","#ai1ec_exclude_label","#ai1ec_exclude_text > a",o,i,t)},"json")},f=function(){return e("#ai1ec_is_box_repeat").val()==="1"?n.click_on_modal_cancel("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label"):n.click_on_modal_cancel("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label"),e("#ai1ec_repeat_box").modal("hide"),!1},l=function(){e(this).is("#ai1ec_monthly_type_bymonthday")?(e("#ai1ec_repeat_monthly_byday").collapse("hide"),e("#ai1ec_repeat_monthly_bymonthday").collapse("show")):(e("#ai1ec_repeat_monthly_bymonthday").collapse("hide"),e("#ai1ec_repeat_monthly_byday").collapse("show"))},c=function(){var t=e(this),n=[],r=t.closest(".ai1ec-btn-group-grid"),i;t.toggleClass("ai1ec-active"),e("a",r).each(function(){var t=e(this);t.is(".ai1ec-active")&&(i=t.next().val(),n.push(i))}),r.next().val(n.join())},h=function(){n.click_on_ics_rule_text("#ai1ec_repeat_text > a","#ai1ec_repeat","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_ics_rule_text("#ai1ec_exclude_text > a","#ai1ec_exclude","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_repeat","#ai1ec_repeat_text > a","#ai1ec_repeat_label",{action:"ai1ec_get_repeat_box",repeat:1,post_id:e("#post_ID").val()},n.init_modal_widgets),n.click_on_checkbox("#ai1ec_exclude","#ai1ec_exclude_text > a","#ai1ec_exclude_label",{action:"ai1ec_get_repeat_box",repeat:0,post_id:e("#post_ID").val()},n.init_modal_widgets)},p=function(t){var n=e(this).data("state")===undefined?!1:e(this).data("state");return e("#widgetCalendar").stop().animate({height:n?0:e("#widgetCalendar div.datepicker").get(0).offsetHeight},500),e(this).data("state",!n),!1},d=function(){e(".ai1ec-modal-content",this).not(".ai1ec-loading ").remove().end().removeClass("ai1ec-hide")};return{show_end_fields:o,trigger_publish:u,handle_click_on_apply_button:a,handle_click_on_cancel_modal:f,handle_checkbox_monthly_tab_modal:l,execute_pseudo_handlers:h,handle_animation_of_calendar_widget:p,handle_click_on_toggle_buttons:c,handle_modal_hide:d}});
|
public/js/scripts/calendar.js
CHANGED
|
@@ -304,4 +304,4 @@ OTHER DEALINGS IN THE SOFTWARE.
|
|
| 304 |
* limitations under the License.
|
| 305 |
* ======================================================================== */
|
| 306 |
|
| 307 |
-
timely.define("scripts/calendar/print",["jquery_timely"],function(e){var t=function(t){t.preventDefault();var n=e("body"),r=e("html"),i=e("#ai1ec-container").html(),s=n.html();s=s.replace(/<script.*?>([\s\S]*?)<\/script>/gmi,""),n.empty(),n.addClass("timely"),r.addClass("ai1ec-print"),n.html(i),e("span").click(function(){return!1}),window.print(),n.removeClass("timely"),r.removeClass("ai1ec-print"),n.html(s)};return{handle_click_on_print_button:t}}),timely.define("scripts/calendar/agenda_view",["jquery_timely"],function(e){var t=function(){e(this).closest(".ai1ec-event").toggleClass("ai1ec-expanded").find(".ai1ec-event-summary").slideToggle(300)},n=function(){e(".ai1ec-expanded .ai1ec-event-toggle").click()},r=function(){e(".ai1ec-event:not(.ai1ec-expanded) .ai1ec-event-toggle").click()};return{toggle_event:t,collapse_all:n,expand_all:r}}),timely.define("external_libs/modernizr",[],function(){var e=function(e,t,n){function S(e){f.cssText=e}function x(e,t){return S(h.join(e+";")+(t||""))}function T(e,t){return typeof e===t}function N(e,t){return!!~(""+e).indexOf(t)}function C(e,t,r){for(var i in e){var s=t[e[i]];if(s!==n)return r===!1?e[i]:T(s,"function")?s.bind(r||t):s}return!1}var r="2.5.3",i={},s=!0,o=t.documentElement,u="modernizr",a=t.createElement(u),f=a.style,l,c={}.toString,h=" -webkit- -moz- -o- -ms- ".split(" "),p={},d={},v={},m=[],g=m.slice,y,b=function(e,n,r,i){var s,a,f,l=t.createElement("div"),c=t.body,h=c?c:t.createElement("body");if(parseInt(r,10))while(r--)f=t.createElement("div"),f.id=i?i[r]:u+(r+1),l.appendChild(f);return s=["­","<style>",e,"</style>"].join(""),l.id=u,(c?l:h).innerHTML+=s,h.appendChild(l),c||(h.style.background="",o.appendChild(h)),a=n(l,e),c?l.parentNode.removeChild(l):h.parentNode.removeChild(h),!!a},w={}.hasOwnProperty,E;!T(w,"undefined")&&!T(w.call,"undefined")?E=function(e,t){return w.call(e,t)}:E=function(e,t){return t in e&&T(e.constructor.prototype[t],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=g.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,o=n.apply(s,r.concat(g.call(arguments)));return Object(o)===o?o:s}return n.apply(t,r.concat(g.call(arguments)))};return i});var k=function(n,r){var s=n.join(""),o=r.length;b(s,function(n,r){var s=t.styleSheets[t.styleSheets.length-1],u=s?s.cssRules&&s.cssRules[0]?s.cssRules[0].cssText:s.cssText||"":"",a=n.childNodes,f={};while(o--)f[a[o].id]=a[o];i.touch="ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch||(f.touch&&f.touch.offsetTop)===9},o,r)}([,["@media (",h.join("touch-enabled),("),u,")","{#touch{top:9px;position:absolute}}"].join("")],[,"touch"]);p.touch=function(){return i.touch};for(var L in p)E(p,L)&&(y=L.toLowerCase(),i[y]=p[L](),m.push((i[y]?"":"no-")+y));return S(""),a=l=null,i._version=r,i._prefixes=h,i.testStyles=b,o.className=o.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(s?" js "+m.join(" "):""),i}(window,window.document);return e}),timely.define("scripts/calendar/month_view",["jquery_timely","external_libs/modernizr"],function(e,t){var n=navigator.userAgent.match(/opera/i),r=navigator.userAgent.match(/webkit/i),i=function(){var t=e(".ai1ec-day"),n=e(".ai1ec-week:first .ai1ec-day").length;e(".ai1ec-month-view .ai1ec-multiday").each(function(){var n=this.parentNode,r=e(this).outerHeight(!0),i=parseInt(e(this).data("endDay"),10),u=e(".ai1ec-date",n),a=parseInt(u.text(),10),f=e(this).data("endTruncated");f&&(i=parseInt(e(t[t.length-1]).text(),10));var l=e(this),c=e(".ai1ec-event",l)[0].style.backgroundColor,h=0,p=i-a+1,d=p,v,m=0;t.each(function(t){var n=e(".ai1ec-date",this),r=e(this.parentNode),u=r.index(),f=parseInt(n.text(),10);if(f>=a&&f<=i){f===a&&(v=parseInt(n.css("marginBottom"),10)+16),h===0&&m++;if(u===0&&f>a&&d!==0){var p=l.next(".ai1ec-popup").andSelf().clone(!1);n.parent().append(p);var g=p.first();g.addClass("ai1ec-multiday-bar ai1ec-multiday-clone"),g.css({position:"absolute",left:"1px",top:parseInt(n.css("marginBottom"),10)+13,backgroundColor:c});var y=d>7?7:d;g.css("width",s(y)),d>7&&g.append(o(1,c)),g.append(o(2,c))}h===0?n.css({marginBottom:v+"px"}):n.css({marginBottom:"+=16px"}),d--,d>0&&u===6&&h++}});if(f){var g=e("."+l[0].className.replace(/\s+/igm,".")).last();g.append(o(1,c))}e(this).css({position:"absolute",top:u.outerHeight(!0)-r-1+"px",left:"1px",width:s(m)}),h>0&&e(this).append(o(1,c)),e(this).data("startTruncated")&&e(this).append(o(2,c)).addClass("ai1ec-multiday-bar")})},s=function(e){var t;switch(e){case 1:t=97.5;break;case 2:t=198.7;break;case 3:t=300;break;case 4:t=401;break;case 5:r||n?t=507:t=503.4;break;case 6:r||n?t=608:t=603.5;break;case 7:r||n?t=709:t=705}return t+"%"},o=function(t,n){var r=e('<div class="ai1ec-multiday-arrow'+t+'"></div>');return t===1?r.css({borderLeftColor:n}):r.css({borderTopColor:n,borderRightColor:n,borderBottomColor:n}),r};return{extend_multiday_events:i}}),timely.define("libs/frontend_utils",[],function(){var e=function(e){var t,n;t=function(e){if(/&[^;]+;/.test(e)){var t=document.createElement("div");return t.innerHTML=e,t.firstChild?t.firstChild.nodeValue:e}return e};if(typeof e=="string")return t(e);if(typeof e=="object")for(n in e)typeof e[n]=="string"&&(e[n]=t(e[n]));return e},t=function(e,t,n){var r,i,s,o,u;if("#"===e.charAt(0)||"?"===e.charAt(0))e=e.substring(1);r={},e=e.split(t);for(i=0;i<e.length;i++)o=e[i].trim(),-1!==(u=o.indexOf(n))?(s=o.substring(0,u).trim(),o=o.substring(u+1).trim()):(s=o,o=!0),r[s]=o;return r},n=function(e){var n,r,i,s,o;e=t(e,"&","="),i=Object.keys(e),n={ai1ec:{},action:"month"};for(r=0;r<i.length;r++)if("ai1ec"===i[r]){var u=t(e[i[r]],"|",":");for(s in u)if(""!==u[s]){if("action"===s||"view"===s)n.action=u[s];n.ai1ec[s]=u[s]}}else"ai1ec_"===i[r].substring(0,6)?n.ai1ec[i[r].substring(6)]=e[i[r]]:n[i[r]]=e[i[r]];"ai1ec_"!==n.action.substring(0,6)&&(n.action="ai1ec_"+n.action),o="action="+n.action+"&ai1ec=";for(s in n.ai1ec)n.ai1ec.hasOwnProperty(s)&&(o+=escape(s)+":"+escape(n.ai1ec[s])+"|");o=o.substring(0,o.length-1);for(s in n)"ai1ec"!==s&&"action"!==s&&(o+="&"+s+"="+escape(n[s]));return o};return{ai1ec_convert_entities:e,ai1ec_map_internal_query:n,ai1ec_tokenize_uri:t}}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/frontend/common_event_handlers",["jquery_timely"],function(e){var t=function(t){var n=e(this),r=n.next(".ai1ec-popup"),i,s,o;if(r.length===0)return;i=r.html(),s=r.attr("class");var u=n.closest("#ai1ec-calendar-view");u.length===0&&(u=e("body")),n.offset().left-u.offset().left>182?o="left":o="right",n.constrained_popover({content:i,title:"",placement:o,trigger:"manual",html:!0,template:'<div class="timely ai1ec-popover '+s+'">'+'<div class="ai1ec-arrow"></div>'+'<div class="ai1ec-popover-inner">'+'<div class="ai1ec-popover-content"><div></div></div>'+"</div>"+"</div>",container:"body"}).constrained_popover("show")},n=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-popup").length===0&&e(this).constrained_popover("hide")},r=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&(e(this).remove(),e("body > .ai1ec-tooltip").remove())},i=function(t){var n=e(this),r={template:'<div class="timely ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"manual",container:"body"};if(n.is(".ai1ec-category .ai1ec-color-swatch"))return;n.tooltip(r),n.tooltip("show")},s=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&e(this).data("bs.tooltip")&&e(this).tooltip("hide")},o=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip-trigger").length===0&&e(this).remove(),n.closest(".ai1ec-popup").length===0&&e("body > .ai1ec-popup").remove()};return{handle_popover_over:t,handle_popover_out:n,handle_popover_self_out:r,handle_tooltip_over:i,handle_tooltip_out:s,handle_tooltip_self_out:o}}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/constrained_popover",["jquery_timely","external_libs/bootstrap/popover"],function(e){var t=function(e,t){this.init("constrained_popover",e,t)};t.DEFAULTS=e.extend({},e.fn.popover.Constructor.DEFAULTS,{container:"",content:this.options}),t.prototype=e.extend({},e.fn.popover.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.applyPlacement=function(t,n){e.fn.popover.Constructor.prototype.applyPlacement.call(this,t,n);var r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=this.getPosition(),u={};switch(n){case"left":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left-i:u.left=newPos.left-i,r.offset(u);break;case"right":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left+o.width:u.left=newPos.left+o.width,r.offset(u)}},t.prototype.defineBounds=function(t){var n,r,i,s,o,u={},a=e(this.options.container);return a.length?(n=a.offset(),r=n.top,i=n.left,s=r+a.height(),o=i+a.width(),t.top+t.height/2<r&&(u.top=r),t.top+t.height/2>s&&(u.top=s),t.left-t.width/2<i&&(u.left=i),t.left-t.width/2>o&&(u.left=o),u):!1};var n=e.fn.popover;e.fn.constrained_popover=function(n){return this.each(function(){var r=e(this),i=r.data("ai1ec.constrained_popover"),s=typeof n=="object"&&n;i||r.data("ai1ec.constrained_popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.constrained_popover.Constructor=t,e.fn.constrained_popover.noConflict=function(){return e.fn.constrained_popover=n,this}}),timely.define("external_libs/bootstrap/dropdown",["jquery_timely"],function(e){function i(){e(t).remove(),e(n).each(function(t){var n=s(e(this));if(!n.hasClass("ai1ec-open"))return;n.trigger(t=e.Event("hide.bs.dropdown"));if(t.isDefaultPrevented())return;n.removeClass("ai1ec-open").trigger("hidden.bs.dropdown")})}function s(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&e(n);return r&&r.length?r:t.parent()}var t=".ai1ec-dropdown-backdrop",n="[data-toggle=ai1ec-dropdown]",r=function(t){e(t).on("click.bs.dropdown",this.toggle)};r.prototype.toggle=function(t){var n=e(this);if(n.is(".ai1ec-disabled, :disabled"))return;var r=s(n),o=r.hasClass("ai1ec-open");i();if(!o){"ontouchstart"in document.documentElement&&!r.closest(".ai1ec-navbar-nav").length&&e('<div class="ai1ec-dropdown-backdrop"/>').insertAfter(e(this)).on("click",i),r.trigger(t=e.Event("show.bs.dropdown"));if(t.isDefaultPrevented())return;r.toggleClass("ai1ec-open").trigger("shown.bs.dropdown"),n.focus()}return!1},r.prototype.keydown=function(t){if(!/(38|40|27)/.test(t.keyCode))return;var r=e(this);t.preventDefault(),t.stopPropagation();if(r.is(".ai1ec-disabled, :disabled"))return;var i=s(r),o=i.hasClass("ai1ec-open");if(!o||o&&t.keyCode==27)return t.which==27&&i.find(n).focus(),r.click();var u=e("[role=menu] li:not(.ai1ec-divider):visible a",i);if(!u.length)return;var a=u.index(u.filter(":focus"));t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<u.length-1&&a++,~a||(a=0),u.eq(a).focus()};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),typeof t=="string"&&i[t].call(n)})},e.fn.dropdown.Constructor=r,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".ai1ec-dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,r.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",r.prototype.keydown)}),timely.define("scripts/common_scripts/frontend/common_frontend",["jquery_timely","domReady","scripts/common_scripts/frontend/common_event_handlers","ai1ec_calendar","external_libs/modernizr","external_libs/bootstrap/tooltip","external_libs/constrained_popover","external_libs/bootstrap/dropdown"],function(e,t,n,r,i){var s=!1,o=function(){s=!0,e(document).on("mouseenter",".ai1ec-popup-trigger",n.handle_popover_over),e(document).on("mouseleave",".ai1ec-popup-trigger",n.handle_popover_out),e(document).on("mouseleave",".ai1ec-popup",n.handle_popover_self_out),e(document).on("mouseenter",".ai1ec-tooltip-trigger",n.handle_tooltip_over),e(document).on("mouseleave",".ai1ec-tooltip-trigger",n.handle_tooltip_out),e(document).on("mouseleave",".ai1ec-tooltip",n.handle_tooltip_self_out)},u=function(){t(function(){o()})},a=function(){return s};return{start:u,are_event_listeners_attached:a}}),timely.define("external_libs/select2",["jquery_timely"],function(e){(function(e){typeof e.fn.each2=="undefined"&&e.fn.extend({each2:function(t){var n=e([0]),r=-1,i=this.length;while(++r<i&&(n.context=n[0]=this[r])&&t.call(n[0],r,n)!==!1);return this}})})(e),function(e,t){function l(e,t){var n=0,r=t.length;for(;n<r;n+=1)if(c(e,t[n]))return n;return-1}function c(e,n){return e===n?!0:e===t||n===t?!1:e===null||n===null?!1:e.constructor===String?e===n+"":n.constructor===String?n===e+"":!1}function h(t,n){var r,i,s;if(t===null||t.length<1)return[];r=t.split(n);for(i=0,s=r.length;i<s;i+=1)r[i]=e.trim(r[i]);return r}function p(e){return e.outerWidth(!1)-e.width()}function d(n){var r="keyup-change-value";n.bind("keydown",function(){e.data(n,r)===t&&e.data(n,r,n.val())}),n.bind("keyup",function(){var i=e.data(n,r);i!==t&&n.val()!==i&&(e.removeData(n,r),n.trigger("keyup-change"))})}function v(n){n.bind("mousemove",function(n){var r=a;(r===t||r.x!==n.pageX||r.y!==n.pageY)&&e(n.target).trigger("mousemove-filtered",n)})}function m(e,n,r){r=r||t;var i;return function(){var t=arguments;window.clearTimeout(i),i=window.setTimeout(function(){n.apply(r,t)},e)}}function g(e){var t=!1,n;return function(){return t===!1&&(n=e(),t=!0),n}}function y(e,t){var n=m(e,function(e){t.trigger("scroll-debounced",e)});t.bind("scroll",function(e){l(e.target,t.get())>=0&&n(e)})}function b(e){if(e[0]===document.activeElement)return;window.setTimeout(function(){var t=e[0],n=e.val().length,r;e.focus(),t.setSelectionRange?t.setSelectionRange(n,n):t.createTextRange&&(r=t.createTextRange(),r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",n),r.select())},0)}function w(e){e.preventDefault(),e.stopPropagation()}function E(e){e.preventDefault(),e.stopImmediatePropagation()}function S(t){if(!u){var n=t[0].currentStyle||window.getComputedStyle(t[0],null);u=e(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:n.fontSize,fontFamily:n.fontFamily,fontStyle:n.fontStyle,fontWeight:n.fontWeight,letterSpacing:n.letterSpacing,textTransform:n.textTransform,whiteSpace:"nowrap"}),u.attr("class","select2-sizer"),e("body").append(u)}return u.text(t.val()),u.width()}function x(t,n,r){var i,s=[],o;i=t.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")===0&&s.push(this)}),i=n.attr("class"),typeof i=="string"&&e(i.split(" ")).each2(function(){this.indexOf("select2-")!==0&&(o=r(this),typeof o=="string"&&o.length>0&&s.push(this))}),t.attr("class",s.join(" "))}function T(e,t,n,r){var i=e.toUpperCase().indexOf(t.toUpperCase()),s=t.length;if(i<0){n.push(r(e));return}n.push(r(e.substring(0,i))),n.push("<span class='select2-match'>"),n.push(r(e.substring(i,i+s))),n.push("</span>"),n.push(r(e.substring(i+s,e.length)))}function N(t){var n,r=0,i=null,s=t.quietMillis||100,o=t.url,u=this;return function(a){window.clearTimeout(n),n=window.setTimeout(function(){r+=1;var n=r,s=t.data,f=o,l=t.transport||e.ajax,c=t.type||"GET",h={};s=s?s.call(u,a.term,a.page,a.context):null,f=typeof f=="function"?f.call(u,a.term,a.page,a.context):f,null!==i&&i.abort(),t.params&&(e.isFunction(t.params)?e.extend(h,t.params.call(u)):e.extend(h,t.params)),e.extend(h,{url:f,dataType:t.dataType,data:s,type:c,cache:!1,success:function(e){if(n<r)return;var i=t.results(e,a.page);a.callback(i)}}),i=l.call(u,h)},s)}}function C(t){var n=t,r,i,s=function(e){return""+e.text};e.isArray(n)&&(i=n,n={results:i}),e.isFunction(n)===!1&&(i=n,n=function(){return i});var o=n();return o.text&&(s=o.text,e.isFunction(s)||(r=n.text,s=function(e){return e[r]})),function(t){var r=t.term,i={results:[]},o;if(r===""){t.callback(n());return}o=function(n,i){var u,a;n=n[0];if(n.children){u={};for(a in n)n.hasOwnProperty(a)&&(u[a]=n[a]);u.children=[],e(n.children).each2(function(e,t){o(t,u.children)}),(u.children.length||t.matcher(r,s(u),n))&&i.push(u)}else t.matcher(r,s(n),n)&&i.push(n)},e(n().results).each2(function(e,t){o(t,i.results)}),t.callback(i)}}function k(n){var r=e.isFunction(n);return function(i){var s=i.term,o={results:[]};e(r?n():n).each(function(){var e=this.text!==t,n=e?this.text:this;(s===""||i.matcher(s,n))&&o.results.push(e?this:{id:this,text:this})}),i.callback(o)}}function L(t,n){if(e.isFunction(t))return!0;if(!t)return!1;throw new Error("formatterName must be a function or a falsy value")}function A(t){return e.isFunction(t)?t():t}function O(t){var n=0;return e.each(t,function(e,t){t.children?n+=O(t.children):n++}),n}function M(e,n,r,i){var s=e,o=!1,u,a,f,l,h;if(!i.createSearchChoice||!i.tokenSeparators||i.tokenSeparators.length<1)return t;for(;;){a=-1;for(f=0,l=i.tokenSeparators.length;f<l;f++){h=i.tokenSeparators[f],a=e.indexOf(h);if(a>=0)break}if(a<0)break;u=e.substring(0,a),e=e.substring(a+h.length);if(u.length>0){u=i.createSearchChoice(u,n);if(u!==t&&u!==null&&i.id(u)!==t&&i.id(u)!==null){o=!1;for(f=0,l=n.length;f<l;f++)if(c(i.id(u),i.id(n[f]))){o=!0;break}o||r(u)}}}if(s!==e)return e}function _(t,n){var r=function(){};return r.prototype=new t,r.prototype.constructor=r,r.prototype.parent=t.prototype,r.prototype=e.extend(r.prototype,n),r}var n,r,i,s,o,u,a,f;n={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(e){e=e.which?e.which:e;switch(e){case n.LEFT:case n.RIGHT:case n.UP:case n.DOWN:return!0}return!1},isControl:function(e){var t=e.which;switch(t){case n.SHIFT:case n.CTRL:case n.ALT:return!0}return e.metaKey?!0:!1},isFunctionKey:function(e){return e=e.which?e.which:e,e>=112&&e<=123}},f=e(document),o=function(){var e=1;return function(){return e++}}(),f.bind("mousemove",function(e){a={x:e.pageX,y:e.pageY}}),r=_(Object,{bind:function(e){var t=this;return function(){e.apply(t,arguments)}},init:function(n){var r,i,s=".select2-results",u;this.opts=n=this.prepareOpts(n),this.id=n.id,n.element.data("select2")!==t&&n.element.data("select2")!==null&&this.destroy(),this.enabled=!0,this.container=this.createContainer(),this.containerId="s2id_"+(n.element.attr("id")||"autogen"+o()),this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.body=g(function(){return n.element.closest("body")}),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.css(A(n.containerCss)),this.container.addClass(A(n.containerCssClass)),this.elementTabIndex=this.opts.element.attr("tabIndex"),this.opts.element.data("select2",this).addClass("select2-offscreen").bind("focus.select2",function(){e(this).select2("focus")}).attr("tabIndex","-1").before(this.container),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),this.dropdown.addClass(A(n.dropdownCssClass)),this.dropdown.data("select2",this),this.results=r=this.container.find(s),this.search=i=this.container.find("input.select2-input"),i.attr("tabIndex",this.elementTabIndex),this.resultsPage=0,this.context=null,this.initContainer(),v(this.results),this.dropdown.delegate(s,"mousemove-filtered touchstart touchmove touchend",this.bind(this.highlightUnderEvent)),y(80,this.results),this.dropdown.delegate(s,"scroll-debounced",this.bind(this.loadMoreIfNeeded)),e.fn.mousewheel&&r.mousewheel(function(e,t,n,i){var s=r.scrollTop(),o;i>0&&s-i<=0?(r.scrollTop(0),w(e)):i<0&&r.get(0).scrollHeight-r.scrollTop()+i<=r.height()&&(r.scrollTop(r.get(0).scrollHeight-r.height()),w(e))}),d(i),i.bind("keyup-change input paste",this.bind(this.updateResults)),i.bind("focus",function(){i.addClass("select2-focused")}),i.bind("blur",function(){i.removeClass("select2-focused")}),this.dropdown.delegate(s,"mouseup",this.bind(function(t){e(t.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(t),this.selectHighlighted(t))})),this.dropdown.bind("click mouseup mousedown",function(e){e.stopPropagation()}),e.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),(n.element.is(":disabled")||n.element.is("[readonly='readonly']"))&&this.disable()},destroy:function(){var e=this.opts.element.data("select2");this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),e!==t&&(e.container.remove(),e.dropdown.remove(),e.opts.element.removeClass("select2-offscreen").removeData("select2").unbind(".select2").attr({tabIndex:this.elementTabIndex}).show())},prepareOpts:function(n){var r,i,s,o;r=n.element,r.get(0).tagName.toLowerCase()==="select"&&(this.select=i=n.element),i&&e.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in n)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),n=e.extend({},{populateResults:function(r,i,s){var o,u,a,f,l=this.opts.id,c=this;o=function(r,i,u){var a,f,h,p,d,v,m,g,y,b;r=n.sortResults(r,i,s);for(a=0,f=r.length;a<f;a+=1)h=r[a],d=h.disabled===!0,p=!d&&l(h)!==t,v=h.children&&h.children.length>0,m=e("<li></li>"),m.addClass("select2-results-dept-"+u),m.addClass("select2-result"),m.addClass(p?"select2-result-selectable":"select2-result-unselectable"),d&&m.addClass("select2-disabled"),v&&m.addClass("select2-result-with-children"),m.addClass(c.opts.formatResultCssClass(h)),g=e(document.createElement("div")),g.addClass("select2-result-label"),b=n.formatResult(h,g,s,c.opts.escapeMarkup),b!==t&&g.html(b),m.append(g),v&&(y=e("<ul></ul>"),y.addClass("select2-result-sub"),o(h.children,y,u+1),m.append(y)),m.data("select2-data",h),i.append(m)},o(i,r,0)}},e.fn.select2.defaults,n),typeof n.id!="function"&&(s=n.id,n.id=function(e){return e[s]});if(e.isArray(n.element.data("select2Tags"))){if("tags"in n)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+n.element.attr("id");n.tags=n.element.attr("data-select2-tags")}i?(n.query=this.bind(function(n){var i={results:[],more:!1},s=n.term,o,u,a;a=function(e,t){var r;e.is("option")?n.matcher(s,e.text(),e)&&t.push({id:e.attr("value"),text:e.text(),element:e.get(),css:e.attr("class"),disabled:c(e.attr("disabled"),"disabled")}):e.is("optgroup")&&(r={text:e.attr("label"),children:[],element:e.get(),css:e.attr("class")},e.children().each2(function(e,t){a(t,r.children)}),r.children.length>0&&t.push(r))},o=r.children(),this.getPlaceholder()!==t&&o.length>0&&(u=o[0],e(u).text()===""&&(o=o.not(u))),o.each2(function(e,t){a(t,i.results)}),n.callback(i)}),n.id=function(e){return e.id},n.formatResultCssClass=function(e){return e.css}):"query"in n||("ajax"in n?(o=n.element.data("ajax-url"),o&&o.length>0&&(n.ajax.url=o),n.query=N.call(n.element,n.ajax)):"data"in n?n.query=C(n.data):"tags"in n&&(n.query=k(n.tags),n.createSearchChoice===t&&(n.createSearchChoice=function(e){return{id:e,text:e}}),n.initSelection===t&&(n.initSelection=function(t,r){var i=[];e(h(t.val(),n.separator)).each(function(){var t=this,r=this,s=n.tags;e.isFunction(s)&&(s=s()),e(s).each(function(){if(c(this.id,t))return r=this.text,!1}),i.push({id:t,text:r})}),r(i)})));if(typeof n.query!="function")throw"query function not defined for Select2 "+n.element.attr("id");return n},monitorSource:function(){var e=this.opts.element,t;e.bind("change.select2",this.bind(function(e){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),t=this.bind(function(){var e,t,n=this;e=this.opts.element.attr("disabled")!=="disabled",t=this.opts.element.attr("readonly")==="readonly",e=e&&!t,this.enabled!==e&&(e?this.enable():this.disable()),x(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(A(this.opts.containerCssClass)),x(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(A(this.opts.dropdownCssClass))}),e.bind("propertychange.select2 DOMAttrModified.select2",t),typeof WebKitMutationObserver!="undefined"&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new WebKitMutationObserver(function(e){e.forEach(t)}),this.propertyObserver.observe(e.get(0),{attributes:!0,subtree:!1}))},triggerChange:function(t){t=t||{},t=e.extend({},t,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(t),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},enable:function(){if(this.enabled)return;this.enabled=!0,this.container.removeClass("select2-container-disabled"),this.opts.element.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.close(),this.enabled=!1,this.container.addClass("select2-container-disabled"),this.opts.element.attr("disabled","disabled")},opened:function(){return this.container.hasClass("select2-dropdown-open")},positionDropdown:function(){var t=this.container.offset(),n=this.container.outerHeight(!1),r=this.container.outerWidth(!1),i=this.dropdown.outerHeight(!1),s=e(window).scrollLeft()+e(window).width(),o=e(window).scrollTop()+e(window).height(),u=t.top+n,a=t.left,f=u+i<=o,l=t.top-i>=this.body().scrollTop(),c=this.dropdown.outerWidth(!1),h=a+c<=s,p=this.dropdown.hasClass("select2-drop-above"),d,v,m;this.body().css("position")!=="static"&&(d=this.body().offset(),u-=d.top,a-=d.left),p?(v=!0,!l&&f&&(v=!1)):(v=!1,!f&&l&&(v=!0)),h||(a=t.left+r-c),v?(u=t.top-i,this.container.addClass("select2-drop-above"),this.dropdown.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")),m=e.extend({top:u,left:a,width:r},A(this.opts.dropdownCss)),this.dropdown.css(m)},shouldOpen:function(){var t;return this.opened()?!1:(t=e.Event("opening"),this.opts.element.trigger(t),!t.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(window.setTimeout(this.bind(this.opening),1),!0):!1},opening:function(){var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t,s;this.clearDropdownAlignmentPreference(),this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body()),this.updateResults(!0),s=e("#select2-drop-mask"),s.length==0&&(s=e(document.createElement("div")),s.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),s.hide(),s.appendTo(this.body()),s.bind("mousedown touchstart",function(t){var n=e("#select2-drop"),r;n.length>0&&(r=n.data("select2"),r.opts.selectOnBlur&&r.selectHighlighted({noFocus:!0}),r.close())})),this.dropdown.prev()[0]!==s[0]&&this.dropdown.before(s),e("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),s.css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),s.show(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active"),this.ensureHighlightVisible();var o=this;this.container.parents().add(window).each(function(){e(this).bind(r+" "+n+" "+i,function(t){e("#select2-drop-mask").css({width:document.documentElement.scrollWidth,height:document.documentElement.scrollHeight}),o.positionDropdown()})}),this.focusSearch()},close:function(){if(!this.opened())return;var t=this.containerId,n="scroll."+t,r="resize."+t,i="orientationchange."+t;this.container.parents().add(window).each(function(){e(this).unbind(n).unbind(r).unbind(i)}),this.clearDropdownAlignmentPreference(),e("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open"),this.results.empty(),this.clearSearch(),this.opts.element.trigger(e.Event("close"))},clearSearch:function(){},getMaximumSelectionSize:function(){return A(this.opts.maximumSelectionSize)},ensureHighlightVisible:function(){var t=this.results,n,r,i,s,o,u,a;r=this.highlight();if(r<0)return;if(r==0){t.scrollTop(0);return}n=this.findHighlightableChoices(),i=e(n[r]),s=i.offset().top+i.outerHeight(!0),r===n.length-1&&(a=t.find("li.select2-more-results"),a.length>0&&(s=a.offset().top+a.outerHeight(!0))),o=t.offset().top+t.outerHeight(!0),s>o&&t.scrollTop(t.scrollTop()+(s-o)),u=i.offset().top-t.offset().top,u<0&&i.css("display")!="none"&&t.scrollTop(t.scrollTop()+u)},findHighlightableChoices:function(){var e=this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)");return this.results.find(".select2-result-selectable:not(.select2-selected):not(.select2-disabled)")},moveHighlight:function(t){var n=this.findHighlightableChoices(),r=this.highlight();while(r>-1&&r<n.length){r+=t;var i=e(n[r]);if(i.hasClass("select2-result-selectable")&&!i.hasClass("select2-disabled")&&!i.hasClass("select2-selected")){this.highlight(r);break}}},highlight:function(t){var n=this.findHighlightableChoices(),r,i;if(arguments.length===0)return l(n.filter(".select2-highlighted")[0],n.get());t>=n.length&&(t=n.length-1),t<0&&(t=0),this.results.find(".select2-highlighted").removeClass("select2-highlighted"),r=e(n[t]),r.addClass("select2-highlighted"),this.ensureHighlightVisible(),i=r.data("select2-data"),i&&this.opts.element.trigger({type:"highlight",val:this.id(i),choice:i})},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(t){var n=e(t.target).closest(".select2-result-selectable");if(n.length>0&&!n.is(".select2-highlighted")){var r=this.findHighlightableChoices();this.highlight(r.index(n))}else n.length==0&&this.results.find(".select2-highlighted").removeClass("select2-highlighted")},loadMoreIfNeeded:function(){var e=this.results,t=e.find("li.select2-more-results"),n,r=-1,i=this.resultsPage+1,s=this,o=this.search.val(),u=this.context;if(t.length===0)return;n=t.offset().top-e.offset().top-e.height(),n<=this.opts.loadMorePadding&&(t.addClass("select2-active"),this.opts.query({element:this.opts.element,term:o,page:i,context:u,matcher:this.opts.matcher,callback:this.bind(function(n){if(!s.opened())return;s.opts.populateResults.call(this,e,n.results,{term:o,page:i,context:u}),n.more===!0?(t.detach().appendTo(e).text(s.opts.formatLoadMore(i+1)),window.setTimeout(function(){s.loadMoreIfNeeded()},10)):t.remove(),s.positionDropdown(),s.resultsPage=i,s.context=n.context})}))},tokenize:function(){},updateResults:function(n){function f(){i.scrollTop(0),r.removeClass("select2-active"),u.positionDropdown()}function l(e){i.html(e),f()}var r=this.search,i=this.results,s=this.opts,o,u=this,a;if(n!==!0&&(this.showSearchInput===!1||!this.opened()))return;r.addClass("select2-active");var h=this.getMaximumSelectionSize();if(h>=1){o=this.data();if(e.isArray(o)&&o.length>=h&&L(s.formatSelectionTooBig,"formatSelectionTooBig")){l("<li class='select2-selection-limit'>"+s.formatSelectionTooBig(h)+"</li>");return}}if(r.val().length<s.minimumInputLength){L(s.formatInputTooShort,"formatInputTooShort")?l("<li class='select2-no-results'>"+s.formatInputTooShort(r.val(),s.minimumInputLength)+"</li>"):l("");return}s.formatSearching()&&n===!0&&l("<li class='select2-searching'>"+s.formatSearching()+"</li>");if(s.maximumInputLength&&r.val().length>s.maximumInputLength){L(s.formatInputTooLong,"formatInputTooLong")?l("<li class='select2-no-results'>"+s.formatInputTooLong(r.val(),s.maximumInputLength)+"</li>"):l("");return}a=this.tokenize(),a!=t&&a!=null&&r.val(a),this.resultsPage=1,s.query({element:s.element,term:r.val(),page:this.resultsPage,context:null,matcher:s.matcher,callback:this.bind(function(o){var a;if(!this.opened())return;this.context=o.context===t?null:o.context,this.opts.createSearchChoice&&r.val()!==""&&(a=this.opts.createSearchChoice.call(null,r.val(),o.results),a!==t&&a!==null&&u.id(a)!==t&&u.id(a)!==null&&e(o.results).filter(function(){return c(u.id(this),u.id(a))}).length===0&&o.results.unshift(a));if(o.results.length===0&&L(s.formatNoMatches,"formatNoMatches")){l("<li class='select2-no-results'>"+s.formatNoMatches(r.val())+"</li>");return}i.empty(),u.opts.populateResults.call(this,i,o.results,{term:r.val(),page:this.resultsPage,context:null}),o.more===!0&&L(s.formatLoadMore,"formatLoadMore")&&(i.append("<li class='select2-more-results'>"+u.opts.escapeMarkup(s.formatLoadMore(this.resultsPage))+"</li>"),window.setTimeout(function(){u.loadMoreIfNeeded()},10)),this.postprocessResults(o,n),f()})})},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){b(this.search)},selectHighlighted:function(e){var t=this.highlight(),n=this.results.find(".select2-highlighted"),r=n.closest(".select2-result").data("select2-data");r&&(this.highlight(t),this.onSelect(r,e))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder},initContainerWidth:function(){function n(){var n,r,i,s,o;if(this.opts.width==="off")return null;if(this.opts.width==="element")return this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px";if(this.opts.width==="copy"||this.opts.width==="resolve"){n=this.opts.element.attr("style");if(n!==t){r=n.split(";");for(s=0,o=r.length;s<o;s+=1){i=r[s].replace(/\s/g,"").match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/);if(i!==null&&i.length>=1)return i[1]}}return this.opts.width==="resolve"?(n=this.opts.element.css("width"),n.indexOf("%")>0?n:this.opts.element.outerWidth(!1)===0?"auto":this.opts.element.outerWidth(!1)+"px"):null}return e.isFunction(this.opts.width)?this.opts.width():this.opts.width}var r=n.call(this);r!==null&&this.container.css("width",r)}}),i=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' onclick='return false;' class='select2-choice' tabindex='-1'>"," <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>"," <div><b></b></div>","</a>","<input class='select2-focusser select2-offscreen' type='text'/>","<div class='select2-drop' style='display:none'>"," <div class='select2-search'>"," <input type='text' autocomplete='off' class='select2-input'/>"," </div>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.focusser.attr("disabled","disabled")},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.focusser.removeAttr("disabled")},opening:function(){this.parent.opening.apply(this,arguments),this.focusser.attr("disabled","disabled"),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments),this.focusser.removeAttr("disabled"),b(this.focusser)},focus:function(){this.opened()?this.close():(this.focusser.removeAttr("disabled"),this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.removeAttr("disabled"),this.focusser.focus()},initContainer:function(){var e,t=this.container,r=this.dropdown,i=!1;this.showSearch(this.opts.minimumResultsForSearch>=0),this.selection=e=t.find(".select2-choice"),this.focusser=t.find(".select2-focusser"),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN){w(e);return}switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.TAB:case n.ENTER:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}})),this.focusser.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.ESC)return;if(this.opts.openOnEnter===!1&&e.which===n.ENTER){w(e);return}if(e.which==n.DOWN||e.which==n.UP||e.which==n.ENTER&&this.opts.openOnEnter){this.open(),w(e);return}if(e.which==n.DELETE||e.which==n.BACKSPACE){this.opts.allowClear&&this.clear(),w(e);return}})),d(this.focusser),this.focusser.bind("keyup-change input",this.bind(function(e){if(this.opened())return;this.open(),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.focusser.val(""),w(e)})),e.delegate("abbr","mousedown",this.bind(function(e){if(!this.enabled)return;this.clear(),E(e),this.close(),this.selection.focus()})),e.bind("mousedown",this.bind(function(e){i=!0,this.opened()?this.close():this.enabled&&this.open(),w(e),i=!1})),r.bind("mousedown",this.bind(function(){this.search.focus()})),e.bind("focus",this.bind(function(e){w(e)})),this.focusser.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})).bind("blur",this.bind(function(){this.opened()||this.container.removeClass("select2-container-active")})),this.search.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.setPlaceholder()},clear:function(){var e=this.selection.data("select2-data");this.opts.element.val(""),this.selection.find("span").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),this.opts.element.trigger({type:"removed",val:this.id(e),choice:e}),this.triggerChange({removed:e})},initSelection:function(){var e;if(this.opts.element.val()===""&&this.opts.element.text()==="")this.close(),this.setPlaceholder();else{var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.setPlaceholder())})}},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(t,n){var r=t.find(":selected");e.isFunction(n)&&n({id:r.attr("value"),text:r.text(),element:r})}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=n.val();t.query({matcher:function(e,n,r){return c(i,t.id(r))},callback:e.isFunction(r)?function(e){r(e.results.length?e.results[0]:null)}:e.noop})}),t},getPlaceholder:function(){return this.select&&this.select.find("option").first().text()!==""?t:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var e=this.getPlaceholder();if(this.opts.element.val()===""&&e!==t){if(this.select&&this.select.find("option:first").text()!=="")return;this.selection.find("span").html(this.opts.escapeMarkup(e)),this.selection.addClass("select2-default"),this.selection.find("abbr").hide()}},postprocessResults:function(e,t){var n=0,r=this,i=!0;this.findHighlightableChoices().each2(function(e,t){if(c(r.id(t.data("select2-data")),r.opts.element.val()))return n=e,!1}),this.highlight(n);if(t===!0){var s=this.opts.minimumResultsForSearch;i=s<0?!1:O(e.results)>=s,this.showSearch(i)}},showSearch:function(t){this.showSearchInput=t,this.dropdown.find(".select2-search")[t?"removeClass":"addClass"]("select2-search-hidden"),e(this.dropdown,this.container)[t?"addClass":"removeClass"]("select2-with-searchbox")},onSelect:function(e,t){var n=this.opts.element.val();this.opts.element.val(this.id(e)),this.updateSelection(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),this.close(),(!t||!t.noFocus)&&this.selection.focus(),c(n,this.id(e))||this.triggerChange()},updateSelection:function(e){var n=this.selection.find("span"),r;this.selection.data("select2-data",e),n.empty(),r=this.opts.formatSelection(e,n),r!==t&&n.append(this.opts.escapeMarkup(r)),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==t&&this.selection.find("abbr").show()},val:function(){var e,n=!1,r=null,i=this;if(arguments.length===0)return this.opts.element.val();e=arguments[0],arguments.length>1&&(n=arguments[1]);if(this.select)this.select.val(e).find(":selected").each2(function(e,t){return r={id:t.attr("value"),text:t.text()},!1}),this.updateSelection(r),this.setPlaceholder(),n&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("cannot call val() if initSelection() is not defined");if(!e&&e!==0){this.clear(),n&&this.triggerChange();return}this.opts.element.val(e),this.opts.initSelection(this.opts.element,function(e){i.opts.element.val(e?i.id(e):""),i.updateSelection(e),i.setPlaceholder(),n&&i.triggerChange()})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(e){var n;if(arguments.length===0)return n=this.selection.data("select2-data"),n==t&&(n=null),n;!e||e===""?this.clear():(this.opts.element.val(e?this.id(e):""),this.updateSelection(e))}}),s=_(r,{createContainer:function(){var t=e(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html([" <ul class='select2-choices'>"," <li class='select2-search-field'>"," <input type='text' autocomplete='off' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi' style='display:none;'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return t},prepareOpts:function(){var t=this.parent.prepareOpts.apply(this,arguments);return t.element.get(0).tagName.toLowerCase()==="select"?t.initSelection=function(e,t){var n=[];e.find(":selected").each2(function(e,t){n.push({id:t.attr("value"),text:t.text(),element:t[0]})}),t(n)}:"data"in t&&(t.initSelection=t.initSelection||function(n,r){var i=h(n.val(),t.separator);t.query({matcher:function(n,r,s){return e.grep(i,function(e){return c(e,t.id(s))}).length},callback:e.isFunction(r)?function(e){r(e.results)}:e.noop})}),t},initContainer:function(){var t=".select2-choices",r;this.searchContainer=this.container.find(".select2-search-field"),this.selection=r=this.container.find(t),this.search.bind("input paste",this.bind(function(){if(!this.enabled)return;this.opened()||this.open()})),this.search.bind("keydown",this.bind(function(e){if(!this.enabled)return;if(e.which===n.BACKSPACE&&this.search.val()===""){this.close();var t,i=r.find(".select2-search-choice-focus");if(i.length>0){this.unselect(i.first()),this.search.width(10),w(e);return}t=r.find(".select2-search-choice:not(.select2-locked)"),t.length>0&&t.last().addClass("select2-search-choice-focus")}else r.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");if(this.opened())switch(e.which){case n.UP:case n.DOWN:this.moveHighlight(e.which===n.UP?-1:1),w(e);return;case n.ENTER:case n.TAB:this.selectHighlighted(),w(e);return;case n.ESC:this.cancel(e),w(e);return}if(e.which===n.TAB||n.isControl(e)||n.isFunctionKey(e)||e.which===n.BACKSPACE||e.which===n.ESC)return;if(e.which===n.ENTER){if(this.opts.openOnEnter===!1)return;if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey)return}this.open(),(e.which===n.PAGE_UP||e.which===n.PAGE_DOWN)&&w(e)})),this.search.bind("keyup",this.bind(this.resizeSearch)),this.search.bind("blur",this.bind(function(e){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.opened()||this.clearSearch(),e.stopImmediatePropagation()})),this.container.delegate(t,"mousedown",this.bind(function(t){if(!this.enabled)return;if(e(t.target).closest(".select2-search-choice").length>0)return;this.clearPlaceholder(),this.open(),this.focusSearch(),t.preventDefault()})),this.container.delegate(t,"focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder()})),this.initContainerWidth(),this.clearSearch()},enable:function(){if(this.enabled)return;this.parent.enable.apply(this,arguments),this.search.removeAttr("disabled")},disable:function(){if(!this.enabled)return;this.parent.disable.apply(this,arguments),this.search.attr("disabled",!0)},initSelection:function(){var e;this.opts.element.val()===""&&this.opts.element.text()===""&&(this.updateSelection([]),this.close(),this.clearSearch());if(this.select||this.opts.element.val()!==""){var n=this;this.opts.initSelection.call(null,this.opts.element,function(e){e!==t&&e!==null&&(n.updateSelection(e),n.close(),n.clearSearch())})}},clearSearch:function(){var e=this.getPlaceholder();e!==t&&this.getVal().length===0&&this.search.hasClass("select2-focused")===!1?(this.search.val(e).addClass("select2-default"),this.resizeSearch()):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.parent.opening.apply(this,arguments),this.clearPlaceholder(),this.resizeSearch(),this.focusSearch(),this.opts.element.trigger(e.Event("open"))},close:function(){if(!this.opened())return;this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus(),this.opts.element.triggerHandler("focus")},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(t){var n=[],r=[],i=this;e(t).each(function(){l(i.id(this),n)<0&&(n.push(i.id(this)),r.push(this))}),t=r,this.selection.find(".select2-search-choice").remove(),e(t).each(function(){i.addSelectedChoice(this)}),i.postprocessResults()},tokenize:function(){var e=this.search.val();e=this.opts.tokenizer(e,this.data(),this.bind(this.onSelect),this.opts),e!=null&&e!=t&&(this.search.val(e),e.length>0&&this.open())},onSelect:function(e,t){this.addSelectedChoice(e),this.opts.element.trigger({type:"selected",val:this.id(e),choice:e}),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.val().length>=this.getMaximumSelectionSize()&&this.updateResults(!0),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:e}),(!t||!t.noFocus)&&this.focusSearch()},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(n){var r=!n.locked,i=e("<li class='select2-search-choice'> <div></div> <a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'></a></li>"),s=e("<li class='select2-search-choice select2-locked'><div></div></li>"),o=r?i:s,u=this.id(n),a=this.getVal(),f;f=this.opts.formatSelection(n,o.find("div")),f!=t&&o.find("div").replaceWith("<div>"+this.opts.escapeMarkup(f)+"</div>"),r&&o.find(".select2-search-choice-close").bind("mousedown",w).bind("click dblclick",this.bind(function(t){if(!this.enabled)return;e(t.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(e(t.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),this.close(),this.focusSearch()})).dequeue(),w(t)})).bind("focus",this.bind(function(){if(!this.enabled)return;this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active")})),o.data("select2-data",n),o.insertBefore(this.searchContainer),a.push(u),this.setVal(a)},unselect:function(e){var t=this.getVal(),n,r;e=e.closest(".select2-search-choice");if(e.length===0)throw"Invalid argument: "+e+". Must be .select2-search-choice";n=e.data("select2-data");if(!n)return;r=l(this.id(n),t),r>=0&&(t.splice(r,1),this.setVal(t),this.select&&this.postprocessResults()),e.remove(),this.opts.element.trigger({type:"removed",val:this.id(n),choice:n}),this.triggerChange({removed:n})},postprocessResults:function(){var e=this.getVal(),t=this.results.find(".select2-result"),n=this.results.find(".select2-result-with-children"),r=this;t.each2(function(t,n){var i=r.id(n.data("select2-data"));l(i,e)>=0&&(n.addClass("select2-selected"),n.find(".select2-result-selectable").addClass("select2-selected"))}),n.each2(function(e,t){!t.is(".select2-result-selectable")&&t.find(".select2-result-selectable:not(.select2-selected)").length===0&&t.addClass("select2-selected")}),this.highlight()==-1&&r.highlight(0)},resizeSearch:function(){var e,t,n,r,i,s=p(this.search);e=S(this.search)+10,t=this.search.offset().left,n=this.selection.width(),r=this.selection.offset().left,i=n-(t-r)-s,i<e&&(i=n-s),i<40&&(i=n-s),i<=0&&(i=e),this.search.width(i)},getVal:function(){var e;return this.select?(e=this.select.val(),e===null?[]:e):(e=this.opts.element.val(),h(e,this.opts.separator))},setVal:function(t){var n;this.select?this.select.val(t):(n=[],e(t).each(function(){l(this,n)<0&&n.push(this)}),this.opts.element.val(n.length===0?"":n.join(this.opts.separator)))},val:function(){var n,r=!1,i=[],s=this;if(arguments.length===0)return this.getVal();n=arguments[0],arguments.length>1&&(r=arguments[1]);if(!n&&n!==0){this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),r&&this.triggerChange();return}this.setVal(n);if(this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),r&&this.triggerChange();else{if(this.opts.initSelection===t)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(t){var n=e(t).map(s.id);s.setVal(n),s.updateSelection(t),s.clearSearch(),r&&s.triggerChange()})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var t=[],n=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){t.push(n.opts.id(e(this).data("select2-data")))}),this.setVal(t),this.triggerChange()},data:function(t){var n=this,r;if(arguments.length===0)return this.selection.find(".select2-search-choice").map(function(){return e(this).data("select2-data")}).get();t||(t=[]),r=e.map(t,function(e){return n.opts.id(e)}),this.setVal(r),this.updateSelection(t),this.clearSearch()}}),e.fn.select2=function(){var n=Array.prototype.slice.call(arguments,0),r,o,u,a,f=["val","destroy","opened","open","close","focus","isFocused","container","onSortStart","onSortEnd","enable","disable","positionDropdown","data"];return this.each(function(){if(n.length===0||typeof n[0]=="object")r=n.length===0?{}:e.extend({},n[0]),r.element=e(this),r.element.get(0).tagName.toLowerCase()==="select"?a=r.element.attr("multiple"):(a=r.multiple||!1,"tags"in r&&(r.multiple=a=!0)),o=a?new s:new i,o.init(r);else{if(typeof n[0]!="string")throw"Invalid arguments to select2 plugin: "+n;if(l(n[0],f)<0)throw"Unknown method: "+n[0];u=t,o=e(this).data("select2");if(o===t)return;n[0]==="container"?u=o.container:u=o[n[0]].apply(o,n.slice(1));if(u!==t)return!1}}),u===t?this:u},e.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(e,t,n,r){var i=[];return T(e.text,n.term,i,r),i.join("")},formatSelection:function(e,n){return e?e.text:t},sortResults:function(e,t,n){return e},formatResultCssClass:function(e){return t},formatNoMatches:function(){return"No matches found"},formatInputTooShort:function(e,t){var n=t-e.length;return"Please enter "+n+" more character"+(n==1?"":"s")},formatInputTooLong:function(e,t){var n=e.length-t;return"Please enter "+n+" less character"+(n==1?"":"s")},formatSelectionTooBig:function(e){return"You can only select "+e+" item"+(e==1?"":"s")},formatLoadMore:function(e){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(e){return e.id},matcher:function(e,t){return t.toUpperCase().indexOf(e.toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/\\]/g,function(e){return t[e[0]]})},blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(e){return e},adaptDropdownCssClass:function(e){return null}}}(e)}),timely.define("libs/select2_multiselect_helper",["jquery_timely","external_libs/select2"],function(e){var t=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""&&(s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> '),s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},n=function(t){var n=e(t.element),r=n.data("color"),i=n.data("description"),s="";return typeof r!="undefined"&&r!==""?s+='<span class="ai1ec-color-swatch" style="background: '+n.data("color")+'"></span> ':s+='<span class="ai1ec-color-swatch-empty"></span> ',s+=t.text,s='<span title="'+i+'">'+s+"</span>",s},r=function(r){typeof r=="undefined"&&(r=e(document)),e(".ai1ec-select2-multiselect-selector",r).select2({allowClear:!0,formatResult:n,formatSelection:t,escapeMarkup:function(e){return e}})},i=function(t){e(".ai1ec-select2-multiselect-selector.select2-container",t).each(function(){e(this).data("select2").resizeSearch()})};return{init:r,refresh:i}}),timely.define("external_libs/jquery_history",["jquery_timely"],function(e){try{(function(t,n){var r=t.History=t.History||{};if(typeof r.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");r.Adapter={bind:function(t,n,r){e(t).bind(n,r)},trigger:function(t,n,r){e(t).trigger(n,r)},extractEventData:function(e,t,r){var i=t&&t.originalEvent&&t.originalEvent[e]||r&&r[e]||n;return i},onDomLoad:function(t){e(t)}},typeof r.init!="undefined"&&r.init()})(window),function(e,t){var n=e.document,r=e.setTimeout||r,i=e.clearTimeout||i,s=e.setInterval||s,o=e.History=e.History||{};if(typeof o.initHtml4!="undefined")throw new Error("History.js HTML4 Support has already been loaded...");o.initHtml4=function(){if(typeof o.initHtml4.initialized!="undefined")return!1;o.initHtml4.initialized=!0,o.enabled=!0,o.savedHashes=[],o.isLastHash=function(e){var t=o.getHashByIndex(),n;return n=e===t,n},o.saveHash=function(e){return o.isLastHash(e)?!1:(o.savedHashes.push(e),!0)},o.getHashByIndex=function(e){var t=null;return typeof e=="undefined"?t=o.savedHashes[o.savedHashes.length-1]:e<0?t=o.savedHashes[o.savedHashes.length+e]:t=o.savedHashes[e],t},o.discardedHashes={},o.discardedStates={},o.discardState=function(e,t,n){var r=o.getHashByState(e),i;return i={discardedState:e,backState:n,forwardState:t},o.discardedStates[r]=i,!0},o.discardHash=function(e,t,n){var r={discardedHash:e,backState:n,forwardState:t};return o.discardedHashes[e]=r,!0},o.discardedState=function(e){var t=o.getHashByState(e),n;return n=o.discardedStates[t]||!1,n},o.discardedHash=function(e){var t=o.discardedHashes[e]||!1;return t},o.recycleState=function(e){var t=o.getHashByState(e);return o.discardedState(e)&&delete o.discardedStates[t],!0},o.emulated.hashChange&&(o.hashChangeInit=function(){o.checkerFunction=null;var t="",r,i,u,a;return o.isInternetExplorer()?(r="historyjs-iframe",i=n.createElement("iframe"),i.setAttribute("id",r),i.style.display="none",n.body.appendChild(i),i.contentWindow.document.open(),i.contentWindow.document.close(),u="",a=!1,o.checkerFunction=function(){if(a)return!1;a=!0;var n=o.getHash()||"",r=o.unescapeHash(i.contentWindow.document.location.hash)||"";return n!==t?(t=n,r!==n&&(u=r=n,i.contentWindow.document.open(),i.contentWindow.document.close(),i.contentWindow.document.location.hash=o.escapeHash(n)),o.Adapter.trigger(e,"hashchange")):r!==u&&(u=r,o.setHash(r,!1)),a=!1,!0}):o.checkerFunction=function(){var n=o.getHash();return n!==t&&(t=n,o.Adapter.trigger(e,"hashchange")),!0},o.intervalList.push(s(o.checkerFunction,o.options.hashChangeInterval)),!0},o.Adapter.onDomLoad(o.hashChangeInit)),o.emulated.pushState&&(o.onHashChange=function(t){var r=t&&t.newURL||n.location.href,i=o.getHashByUrl(r),s=null,u=null,a=null,f;return o.isLastHash(i)?(o.busy(!1),!1):(o.doubleCheckComplete(),o.saveHash(i),i&&o.isTraditionalAnchor(i)?(o.Adapter.trigger(e,"anchorchange"),o.busy(!1),!1):(s=o.extractState(o.getFullUrl(i||n.location.href,!1),!0),o.isLastSavedState(s)?(o.busy(!1),!1):(u=o.getHashByState(s),f=o.discardedState(s),f?(o.getHashByIndex(-2)===o.getHashByState(f.forwardState)?o.back(!1):o.forward(!1),!1):(o.pushState(s.data,s.title,s.url,!1),!0))))},o.Adapter.bind(e,"hashchange",o.onHashChange),o.pushState=function(t,r,i,s){if(o.getHashByUrl(i))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(s!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.pushState,args:arguments,queue:s}),!1;o.busy(!0);var u=o.createStateObject(t,r,i),a=o.getHashByState(u),f=o.getState(!1),l=o.getHashByState(f),c=o.getHash();return o.storeState(u),o.expectedStateId=u.id,o.recycleState(u),o.setTitle(u),a===l?(o.busy(!1),!1):a!==c&&a!==o.getShortUrl(n.location.href)?(o.setHash(a,!1),!1):(o.saveState(u),o.Adapter.trigger(e,"statechange"),o.busy(!1),!0)},o.replaceState=function(e,t,n,r){if(o.getHashByUrl(n))throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(r!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.replaceState,args:arguments,queue:r}),!1;o.busy(!0);var i=o.createStateObject(e,t,n),s=o.getState(!1),u=o.getStateByIndex(-2);return o.discardState(s,i,u),o.pushState(i.data,i.title,i.url,!1),!0}),o.emulated.pushState&&o.getHash()&&!o.emulated.hashChange&&o.Adapter.onDomLoad(function(){o.Adapter.trigger(e,"hashchange")})},typeof o.init!="undefined"&&o.init()}(window),function(e,t){var n=e.console||t,r=e.document,i=e.navigator,s=e.sessionStorage||!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!="undefined")throw new Error("History.js Core has already been loaded...");h.init=function(){return typeof h.Adapter=="undefined"?!1:(typeof h.initCore!="undefined"&&h.initCore(),typeof h.initHtml4!="undefined"&&h.initHtml4(),!0)},h.initCore=function(){if(typeof h.initCore.initialized!="undefined")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!="undefined"&&t!==null){for(e=0;e<t.length;e++)f(t[e]);h.intervalList=null}},h.debug=function(){(h.options.debug||!1)&&h.log.apply(h,arguments)},h.log=function(){var e=typeof n!="undefined"&&typeof n.log!="undefined"&&typeof n.log.apply!="undefined",t=r.getElementById("log"),i,s,o,u,a;e?(u=Array.prototype.slice.call(arguments),i=u.shift(),typeof n.debug!="undefined"?n.debug.apply(n,[i,u]):n.log.apply(n,[i,u])):i="\n"+arguments[0]+"\n";for(s=1,o=arguments.length;s<o;++s){a=arguments[s];if(typeof a=="object"&&typeof l!="undefined")try{a=l.stringify(a)}catch(f){}i+="\n"+a+"\n"}return t?(t.value+=i+"\n-----\n",t.scrollTop=t.scrollHeight-t.clientHeight):e||c(i),!0},h.getInternetExplorerMajorVersion=function(){var e=h.getInternetExplorerMajorVersion.cached=typeof h.getInternetExplorerMajorVersion.cached!="undefined"?h.getInternetExplorerMajorVersion.cached:function(){var e=3,t=r.createElement("div"),n=t.getElementsByTagName("i");while((t.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||r.location.href,n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=r.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(h.unescapeString(e.url||r.location.href)),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data);if(t.title||n)t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id;return t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r;return n=/(.*)\&_suid=([0-9]+)$/.exec(e),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getHash=function(){var e=h.unescapeHash(r.location.hash);return e},h.unescapeString=function(t){var n=t,r;for(;;){r=e.unescape(n);if(r===n)break;n=r}return n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=h.unescapeString(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i,s;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(n=h.escapeHash(e),h.busy(!0),i=h.extractState(e,!0),i&&!h.emulated.pushState?h.pushState(i.data,i.title,i.url,!1):r.location.hash!==n&&(h.bugs.setHash?(s=h.getPageUrl(),h.pushState(null,null,s+"#"+n,!1)):r.location.hash=n),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.escape(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(r.location.href),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var d=function(){};h.pushState=h.pushState||d,h.replaceState=h.replaceState||d}else h.onPopState=function(t,n){var i=!1,s=!1,o,u;return h.doubleCheckComplete(),o=h.getHash(),o?(u=h.extractState(o||r.location.href,!0),u?h.replaceState(u.data,u.title,u.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(i=h.Adapter.extractEventData("state",t,n)||!1,i?s=h.getStateById(i):h.expectedStateId?s=h.getStateById(h.expectedStateId):s=h.extractState(r.location.href),s||(s=h.createStateObject(null,null,r.location.href)),h.expectedStateId=!1,h.isLastSavedState(s)?(h.busy(!1),!1):(h.storeState(s),h.saveState(s),h.setTitle(s),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(v){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"beforeunload",h.clearAllIntervals),h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(r.location.href,!0))),s&&(h.onUnload=function(){var e,t;try{e=l.parse(s.getItem("History.store"))||{}}catch(n){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),s.setItem("History.store",l.stringify(e))},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},h.init()}(window)}catch(t){}}),timely.define("external_libs/jquery.tablescroller",["jquery_timely"],function(e){function n(){if(t)return t;var n=e('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div></div>');e("body").append(n);var r=e("div",n).innerWidth();n.css("overflow-y","auto");var i=e("div",n).innerWidth();return e(n).remove(),t=r-i,t}var t=0;e.fn.tableScroll=function(t){if(t=="undo"){var r=e(this).parent().parent();r.hasClass("tablescroll_wrapper")&&(r.find(".tablescroll_head thead").prependTo(this),r.find(".tablescroll_foot tfoot").appendTo(this),r.before(this),r.empty());return}var i=e.extend({},e.fn.tableScroll.defaults,t);return i.scrollbarWidth=n(),this.each(function(){var t=i.flush,n=e(this).addClass("tablescroll_body"),r=e('<div class="tablescroll_wrapper ai1ec-popover-boundary"></div>').insertBefore(n).append(n);r.parent("div").hasClass(i.containerClass)||e("<div></div>").addClass(i.containerClass).insertBefore(r).append(r);var s=i.width?i.width:n.outerWidth(),o=i.scroll?"auto":"hidden";r.css({width:s+"px",height:i.height+"px",overflow:o}),n.css("width",s+"px");var u=r.outerWidth(),a=u-s;r.css({width:s-a-2+"px"}),n.css("width",s-a-i.scrollbarWidth+"px"),n.outerHeight()<=i.height&&(r.css({height:"auto",width:s-a+"px"}),t=!1);var f=e("thead",n).length?!0:!1,l=e("tfoot",n).length?!0:!1,c=e("thead tr:first",n),h=e("tbody tr:first",n),p=e("tfoot tr:first",n),d=0;e("th, td",c).each(function(t){d=e(this).width(),e("th:eq("+t+"), td:eq("+t+")",c).css("width",d+"px"),e("th:eq("+t+"), td:eq("+t+")",h).css("width",d+"px"),l&&e("th:eq("+t+"), td:eq("+t+")",p).css("width",d+"px")});if(f)var v=e('<table class="tablescroll_head" cellspacing="0"></table>').insertBefore(r).prepend(e("thead",n));if(l)var m=e('<table class="tablescroll_foot" cellspacing="0"></table>').insertAfter(r).prepend(e("tfoot",n));v!=undefined&&(v.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",v).css("width",d+i.scrollbarWidth+"px"),v.css("width",r.outerWidth()+"px"))),m!=undefined&&(m.css("width",s+"px"),t&&(e("tr:first th:last, tr:first td:last",m).css("width",d+i.scrollbarWidth+"px"),m.css("width",r.outerWidth()+"px")))}),this},e.fn.tableScroll.defaults={flush:!0,width:null,height:100,containerClass:"tablescroll",scroll:!0}}),timely.define("external_libs/jquery.scrollTo",["jquery_timely"],function(e){function n(e){return typeof e=="object"?e:{top:e,left:e}}var t=e.scrollTo=function(t,n,r){e(window).scrollTo(t,n,r)};t.defaults={axis:"xy",duration:parseFloat(e.fn.jquery)>=1.3?0:1,limit:!0},t.window=function(t){return e(window)._scrollable()},e.fn._scrollable=function(){return this.map(function(){var t=this,n=!t.nodeName||e.inArray(t.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!n)return t;var r=(t.contentWindow||t).document||t.ownerDocument||t;return/webkit/i.test(navigator.userAgent)||r.compatMode=="BackCompat"?r.body:r.documentElement})},e.fn.scrollTo=function(r,i,s){return typeof i=="object"&&(s=i,i=0),typeof s=="function"&&(s={onAfter:s}),r=="max"&&(r=9e9),s=e.extend({},t.defaults,s),i=i||s.duration,s.queue=s.queue&&s.axis.length>1,s.queue&&(i/=2),s.offset=n(s.offset),s.over=n(s.over),this._scrollable().each(function(){function h(e){u.animate(l,i,s.easing,e&&function(){e.call(this,r,s)})}if(r==null)return;var o=this,u=e(o),a=r,f,l={},c=u.is("html,body");switch(typeof a){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(a)){a=n(a);break}a=e(a,this);if(!a.length)return;case"object":if(a.is||a.style)f=(a=e(a)).offset()}e.each(s.axis.split(""),function(e,n){var r=n=="x"?"Left":"Top",i=r.toLowerCase(),p="scroll"+r,d=o[p],v=t.max(o,n);if(f)l[p]=f[i]+(c?0:d-u.offset()[i]),s.margin&&(l[p]-=parseInt(a.css("margin"+r))||0,l[p]-=parseInt(a.css("border"+r+"Width"))||0),l[p]+=s.offset[i]||0,s.over[i]&&(l[p]+=a[n=="x"?"width":"height"]()*s.over[i]);else{var m=a[i];l[p]=m.slice&&m.slice(-1)=="%"?parseFloat(m)/100*v:m}s.limit&&/^\d+$/.test(l[p])&&(l[p]=l[p]<=0?0:Math.min(l[p],v)),!e&&s.queue&&(d!=l[p]&&h(s.onAfterFirst),delete l[p])}),h(s.onAfter)}).end()},t.max=function(t,n){var r=n=="x"?"Width":"Height",i="scroll"+r;if(!e(t).is("html,body"))return t[i]-e(t)[r.toLowerCase()]();var s="client"+r,o=t.ownerDocument.documentElement,u=t.ownerDocument.body;return Math.max(o[i],u[i])-Math.min(o[s],u[s])}}),timely.define("external_libs/locales/bootstrap-datepicker.bg",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота","Неделя"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб","Нед"],daysMin:["Н","П","В","С","Ч","П","С","Н"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.br",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.br={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.cs",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota","Neděle"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob","Ned"],daysMin:["Ne","Po","Út","St","Čt","Pá","So","Ne"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.da",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",clear:"Nulstil"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.de",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam","Son"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa","So"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.es",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb","Dom"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa","Do"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fi",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai","sunnuntai"],daysShort:["sun","maa","tii","kes","tor","per","lau","sun"],daysMin:["su","ma","ti","ke","to","pe","la","su"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",weekStart:1,format:"d.m.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.fr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Dim"],daysMin:["D","L","Ma","Me","J","V","S","D"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.id",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab","Mgu"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa","Mg"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.is",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur","Sunnudagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau","Sun"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La","Su"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.it",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato","Domenica"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab","Dom"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa","Do"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ja",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜","日曜"],daysShort:["日","月","火","水","木","金","土","日"],daysMin:["日","月","火","水","木","金","土","日"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.kr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일","일요일"],daysShort:["일","월","화","수","목","금","토","일"],daysMin:["일","월","화","수","목","금","토","일"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis","Sekmadienis"],daysShort:["S","Pr","A","T","K","Pn","Š","S"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št","Sk"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.lv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena","Svētdiena"],daysShort:["Sv","P","O","T","C","Pk","S","Sv"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se","Sv"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],today:"Šodien",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ms",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu","Ahad"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab","Aha"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa","Ah"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nb",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nb={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I Dag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.nl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.nl={days:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag"],daysShort:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],daysMin:["Zo","Ma","Di","Wo","Do","Vr","Za","Zo"],months:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Vandaag"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pl={days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota","Niedziela"],daysShort:["Nie","Pn","Wt","Śr","Czw","Pt","So","Nie"],daysMin:["N","Pn","Wt","Śr","Cz","Pt","So","N"],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthsShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],today:"Dzisiaj",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt-BR",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.pt",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.ru",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб","Вск"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб","Вс"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sl",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota","Nedelja"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob","Ned"],daysMin:["Ne","Po","To","Sr","Če","Pe","So","Ne"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.sv",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.sv={days:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag","Söndag"],daysShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör","Sön"],daysMin:["Sö","Må","Ti","On","To","Fr","Lö","Sö"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",format:"yyyy-mm-dd",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.th",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.tr",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi","Pazar"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts","Pz"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct","Pz"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",format:"dd.mm.yyyy"}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-CN",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["周日","周一","周二","周三","周四","周五","周六","周日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今日",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/locales/bootstrap-datepicker.zh-TW",["jquery_timely"],function(e){return{localize:function(){e.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"],daysShort:["週日","週一","週二","週三","週四","週五","週六","週日"],daysMin:["日","一","二","三","四","五","六","日"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1}}}}),timely.define("external_libs/bootstrap_datepicker",["jquery_timely","ai1ec_config","external_libs/locales/bootstrap-datepicker.bg","external_libs/locales/bootstrap-datepicker.br","external_libs/locales/bootstrap-datepicker.cs","external_libs/locales/bootstrap-datepicker.da","external_libs/locales/bootstrap-datepicker.de","external_libs/locales/bootstrap-datepicker.es","external_libs/locales/bootstrap-datepicker.fi","external_libs/locales/bootstrap-datepicker.fr","external_libs/locales/bootstrap-datepicker.id","external_libs/locales/bootstrap-datepicker.is","external_libs/locales/bootstrap-datepicker.it","external_libs/locales/bootstrap-datepicker.ja","external_libs/locales/bootstrap-datepicker.kr","external_libs/locales/bootstrap-datepicker.lt","external_libs/locales/bootstrap-datepicker.lv","external_libs/locales/bootstrap-datepicker.ms","external_libs/locales/bootstrap-datepicker.nb","external_libs/locales/bootstrap-datepicker.nl","external_libs/locales/bootstrap-datepicker.pl","external_libs/locales/bootstrap-datepicker.pt-BR","external_libs/locales/bootstrap-datepicker.pt","external_libs/locales/bootstrap-datepicker.ru","external_libs/locales/bootstrap-datepicker.sl","external_libs/locales/bootstrap-datepicker.sv","external_libs/locales/bootstrap-datepicker.th","external_libs/locales/bootstrap-datepicker.tr","external_libs/locales/bootstrap-datepicker.zh-CN","external_libs/locales/bootstrap-datepicker.zh-TW"],function(e,t){function r(){return new Date(Date.UTC.apply(Date,arguments))}function i(){var e=new Date;return r(e.getFullYear(),e.getMonth(),e.getDate())}function s(e){return function(){return this[e].apply(this,arguments)}}function f(t,n){var r=e(t).data(),i={},s,o=new RegExp("^"+n.toLowerCase()+"([A-Z])"),n=new RegExp("^"+n.toLowerCase());for(var u in r)n.test(u)&&(s=u.replace(o,function(e,t){return t.toLowerCase()}),i[s]=r[u]);return i}function l(t){var n={};if(!d[t]){t=t.split("-")[0];if(!d[t])return}var r=d[t];return e.each(p,function(e,t){t in r&&(n[t]=r[t])}),n}var n=e(window),o=function(){var t={get:function(e){return this.slice(e)[0]},contains:function(e){var t=e&&e.valueOf();for(var n=0,r=this.length;n<r;n++)if(this[n].valueOf()===t)return n;return-1},remove:function(e){this.splice(e,1)},replace:function(t){if(!t)return;e.isArray(t)||(t=[t]),this.clear(),this.push.apply(this,t)},clear:function(){this.splice(0)},copy:function(){var e=new o;return e.replace(this),e}};return function(){var n=[];return n.push.apply(n,arguments),e.extend(n,t),n}}(),u=function(t,n){this.dates=new o,this.viewDate=i(),this.focusDate=null,this._process_options(n),this.element=e(t),this.isInline=!1,this.isInput=this.element.is("input"),this.component=this.element.is(".ai1ec-date")?this.element.find(".ai1ec-input-group, .ai1ec-input-group-addon, .ai1ec-btn"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&this.component.length===0&&(this.component=!1),this.picker=e(v.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("ai1ec-datepicker-inline").appendTo(this.element):this.picker.addClass("ai1ec-datepicker-dropdown ai1ec-dropdown-menu"),this.o.rtl&&this.picker.addClass("ai1ec-datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("tfoot th.ai1ec-today").attr("colspan",function(e,t){return parseInt(t)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};u.prototype={constructor:u,_process_options:function(n){this._o=e.extend({},this._o,n);var r=this.o=e.extend({},this._o),i=r.language;d[i]||(i=i.split("-")[0],d[i]||(i=t.language,d[i]||(i=h.language))),r.language=i;switch(r.startView){case 2:case"decade":r.startView=2;break;case 1:case"year":r.startView=1;break;default:r.startView=0}switch(r.minViewMode){case 1:case"months":r.minViewMode=1;break;case 2:case"years":r.minViewMode=2;break;default:r.minViewMode=0}r.startView=Math.max(r.startView,r.minViewMode),r.multidate!==!0&&(r.multidate=Number(r.multidate)||!1,r.multidate!==!1?r.multidate=Math.max(0,r.multidate):r.multidate=1),r.multidateSeparator=String(r.multidateSeparator),r.weekStart%=7,r.weekEnd=(r.weekStart+6)%7;var s=v.parseFormat(r.format);r.startDate!==-Infinity&&(r.startDate?r.startDate instanceof Date?r.startDate=this._local_to_utc(this._zero_time(r.startDate)):r.startDate=v.parseDate(r.startDate,s,r.language):r.startDate=-Infinity),r.endDate!==Infinity&&(r.endDate?r.endDate instanceof Date?r.endDate=this._local_to_utc(this._zero_time(r.endDate)):r.endDate=v.parseDate(r.endDate,s,r.language):r.endDate=Infinity),r.daysOfWeekDisabled=r.daysOfWeekDisabled||[],e.isArray(r.daysOfWeekDisabled)||(r.daysOfWeekDisabled=r.daysOfWeekDisabled.split(/[,\s]*/)),r.daysOfWeekDisabled=e.map(r.daysOfWeekDisabled,function(e){return parseInt(e,10)});var o=String(r.orientation).toLowerCase().split(/\s+/g),u=r.orientation.toLowerCase();o=e.grep(o,function(e){return/^auto|left|right|top|bottom$/.test(e)}),r.orientation={x:"auto",y:"auto"};if(!!u&&u!=="auto")if(o.length===1)switch(o[0]){case"top":case"bottom":r.orientation.y=o[0];break;case"left":case"right":r.orientation.x=o[0]}else u=e.grep(o,function(e){return/^left|right$/.test(e)}),r.orientation.x=u[0]||"auto",u=e.grep(o,function(e){return/^top|bottom$/.test(e)}),r.orientation.y=u[0]||"auto"},_events:[],_secondaryEvents:[],_applyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(r=undefined,i=e[t][1]):e[t].length==3&&(r=e[t][1],i=e[t][2]),n.on(i,r)},_unapplyEvents:function(e){for(var t=0,n,r,i;t<e.length;t++)n=e[t][0],e[t].length==2?(i=undefined,r=e[t][1]):e[t].length==3&&(i=e[t][1],r=e[t][2]),n.off(r,i)},_buildEvents:function(){this.isInput?this._events=[[this.element,{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}]]:this.component&&this.hasInput?this._events=[[this.element.find("input"),{focus:e.proxy(this.show,this),keyup:e.proxy(function(t){e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])===-1&&this.update()},this),keydown:e.proxy(this.keydown,this)}],[this.component,{click:e.proxy(this.show,this)}]]:this.element.is("div")?this.isInline=!0:this._events=[[this.element,{click:e.proxy(this.show,this)}]],this._events.push([this.element,"*",{blur:e.proxy(function(e){this._focused_from=e.target},this)}],[this.element,{blur:e.proxy(function(e){this._focused_from=e.target},this)}]),this._secondaryEvents=[[this.picker,{click:e.proxy(this.click,this)}],[e(window),{resize:e.proxy(this.place,this)}],[e(document),{"mousedown touchstart":e.proxy(function(e){this.element.is(e.target)||this.element.find(e.target).length||this.picker.is(e.target)||this.picker.find(e.target).length||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(t,n){var r=n||this.dates.get(-1),i=this._utc_to_local(r);this.element.trigger({type:t,date:i,dates:e.map(this.dates,this._utc_to_local),format:e.proxy(function(e,t){arguments.length===0?(e=this.dates.length-1,t=this.o.format):typeof e=="string"&&(t=e,e=this.dates.length-1),t=t||this.o.format;var n=this.dates.get(e);return v.formatDate(n,t,this.o.language)},this)})},show:function(e){this.isInline||this.picker.appendTo("body"),this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),this._attachSecondaryEvents(),this._trigger("show")},hide:function(){if(this.isInline)return;if(!this.picker.is(":visible"))return;this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this._trigger("hide")},remove:function(){this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date},_utc_to_local:function(e){return e&&new Date(e.getTime()+e.getTimezoneOffset()*6e4)},_local_to_utc:function(e){return e&&new Date(e.getTime()-e.getTimezoneOffset()*6e4)},_zero_time:function(e){return e&&new Date(e.getFullYear(),e.getMonth(),e.getDate())},_zero_utc_time:function(e){return e&&new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))},getDates:function(){return e.map(this.dates,this._utc_to_local)},getUTCDates:function(){return e.map(this.dates,function(e){return new Date(e)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){return new Date(this.dates.get(-1))},setDates:function(){this.update.apply(this,arguments),this._trigger("changeDate"),this.setValue()},setUTCDates:function(){this.update.apply(this,e.map(arguments,this._utc_to_local)),this._trigger("changeDate"),this.setValue()},setDate:s("setDates"),setUTCDate:s("setUTCDates"),setValue:function(){var e=this.getFormattedDate();this.isInput?this.element.val(e).change():this.component&&this.element.find("input").val(e).change()},getFormattedDate:function(t){t===undefined&&(t=this.o.format);var n=this.o.language;return e.map(this.dates,function(e){return v.formatDate(e,t,n)}).join(this.o.multidateSeparator)},setStartDate:function(e){this._process_options({startDate:e}),this.update(),this.updateNavArrows()},setEndDate:function(e){this._process_options({endDate:e}),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(e){this._process_options({daysOfWeekDisabled:e}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return;var t=this.picker.outerWidth(),r=this.picker.outerHeight(),i=10,s=n.width(),o=n.height(),u=n.scrollTop(),a=parseInt(this.element.parents().filter(function(){return e(this).css("z-index")!="auto"}).first().css("z-index"))+10,f=this.component?this.component.parent().offset():this.element.offset(),l=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),c=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),h=f.left,p=f.top;this.picker.removeClass("ai1ec-datepicker-orient-top ai1ec-datepicker-orient-bottom ai1ec-datepicker-orient-right ai1ec-datepicker-orient-left"),this.o.orientation.x!=="auto"?(this.picker.addClass("ai1ec-datepicker-orient-"+this.o.orientation.x),this.o.orientation.x==="right"&&(h-=t-c)):(this.picker.addClass("ai1ec-datepicker-orient-left"),f.left<0?h-=f.left-i:f.left+t>s&&(h=s-t-i));var d=this.o.orientation.y,v,m;d==="auto"&&(v=-u+f.top-r,m=u+o-(f.top+l+r),Math.max(v,m)===m?d="top":d="bottom"),this.picker.addClass("ai1ec-datepicker-orient-"+d),d==="top"?p+=l:p-=r+parseInt(this.picker.css("padding-top")),this.picker.css({top:p,left:h,zIndex:a})},_allow_update:!0,update:function(){if(!this._allow_update)return;var t=this.dates.copy(),n=[],r=!1;arguments.length?(e.each(arguments,e.proxy(function(e,t){t instanceof Date&&(t=this._local_to_utc(t)),n.push(t)},this)),r=!0):(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),n&&this.o.multidate?n=n.split(this.o.multidateSeparator):n=[n],delete this.element.data().date),n=e.map(n,e.proxy(function(e){return v.parseDate(e,this.o.format,this.o.language)},this)),n=e.grep(n,e.proxy(function(e){return e<this.o.startDate||e>this.o.endDate||!e},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),r?this.setValue():n.length&&String(t)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&t.length&&this._trigger("clearDate"),this.fill()},fillDow:function(){var e=this.o.weekStart,t="<tr>";if(this.o.calendarWeeks){var n='<th class="ai1ec-cw"> </th>';t+=n,this.picker.find(".ai1ec-datepicker-days thead tr:first-child").prepend(n)}while(e<this.o.weekStart+7)t+='<th class="ai1ec-dow">'+d[this.o.language].daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".ai1ec-datepicker-days thead").append(t)},fillMonths:function(){var e="",t=0;while(t<12)e+='<span class="ai1ec-month">'+d[this.o.language].monthsShort[t++]+"</span>";this.picker.find(".ai1ec-datepicker-months td").html(e)},setRange:function(t){!t||!t.length?delete this.range:this.range=e.map(t,function(e){return e.valueOf()}),this.fill()},getClassNames:function(t){var n=[],r=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),s=new Date;return t.getUTCFullYear()<r||t.getUTCFullYear()==r&&t.getUTCMonth()<i?n.push("ai1ec-old"):(t.getUTCFullYear()>r||t.getUTCFullYear()==r&&t.getUTCMonth()>i)&&n.push("ai1ec-new"),this.focusDate&&t.valueOf()===this.focusDate.valueOf()&&n.push("ai1ec-focused"),this.o.todayHighlight&&t.getUTCFullYear()==s.getFullYear()&&t.getUTCMonth()==s.getMonth()&&t.getUTCDate()==s.getDate()&&n.push("ai1ec-today"),this.dates.contains(t)!==-1&&n.push("ai1ec-active"),(t.valueOf()<this.o.startDate||t.valueOf()>this.o.endDate||e.inArray(t.getUTCDay(),this.o.daysOfWeekDisabled)!==-1)&&n.push("ai1ec-disabled"),this.range&&(t>this.range[0]&&t<this.range[this.range.length-1]&&n.push("ai1ec-range"),e.inArray(t.valueOf(),this.range)!=-1&&n.push("ai1ec-selected")),n},fill:function(){var t=new Date(this.viewDate),n=t.getUTCFullYear(),i=t.getUTCMonth(),s=this.o.startDate!==-Infinity?this.o.startDate.getUTCFullYear():-Infinity,o=this.o.startDate!==-Infinity?this.o.startDate.getUTCMonth():-Infinity,u=this.o.endDate!==Infinity?this.o.endDate.getUTCFullYear():Infinity,a=this.o.endDate!==Infinity?this.o.endDate.getUTCMonth():Infinity,f,l;this.picker.find(".ai1ec-datepicker-days thead th.ai1ec-datepicker-switch").text(d[this.o.language].months[i]+" "+n),this.picker.find("tfoot th.ai1ec-today").text(d[this.o.language].today).toggle(this.o.todayBtn!==!1),this.picker.find("tfoot th.ai1ec-clear").text(d[this.o.language].clear).toggle(this.o.clearBtn!==!1),this.updateNavArrows(),this.fillMonths();var c=r(n,i-1,28),h=v.getDaysInMonth(c.getUTCFullYear(),c.getUTCMonth());c.setUTCDate(h),c.setUTCDate(h-(c.getUTCDay()-this.o.weekStart+7)%7);var p=new Date(c);p.setUTCDate(p.getUTCDate()+42),p=p.valueOf();var m=[],g;while(c.valueOf()<p){if(c.getUTCDay()==this.o.weekStart){m.push("<tr>");if(this.o.calendarWeeks){var y=new Date(+c+(this.o.weekStart-c.getUTCDay()-7)%7*864e5),b=new Date(+y+(11-y.getUTCDay())%7*864e5),w=new Date(+(w=r(b.getUTCFullYear(),0,1))+(11-w.getUTCDay())%7*864e5),E=(b-w)/864e5/7+1;m.push('<td class="ai1ec-cw">'+E+"</td>")}}g=this.getClassNames(c),g.push("ai1ec-day");if(this.o.beforeShowDay!==e.noop){var S=this.o.beforeShowDay(this._utc_to_local(c));S===undefined?S={}:typeof S=="boolean"?S={enabled:S}:typeof S=="string"&&(S={classes:S}),S.enabled===!1&&g.push("ai1ec-disabled"),S.classes&&(g=g.concat(S.classes.split(/\s+/))),S.tooltip&&(f=S.tooltip)}g=e.unique(g),m.push('<td class="'+g.join(" ")+'"'+(f?' title="'+f+'"':"")+">"+c.getUTCDate()+"</td>"),c.getUTCDay()==this.o.weekEnd&&m.push("</tr>"),c.setUTCDate(c.getUTCDate()+1)}this.picker.find(".ai1ec-datepicker-days tbody").empty().append(m.join(""));var x=this.picker.find(".ai1ec-datepicker-months").find("th:eq(1)").text(n).end().find("span").removeClass("ai1ec-active");e.each(this.dates,function(e,t){t.getUTCFullYear()==n&&x.eq(t.getUTCMonth()).addClass("ai1ec-active")}),(n<s||n>u)&&x.addClass("ai1ec-disabled"),n==s&&x.slice(0,o).addClass("ai1ec-disabled"),n==u&&x.slice(a+1).addClass("ai1ec-disabled"),m="",n=parseInt(n/10,10)*10;var T=this.picker.find(".ai1ec-datepicker-years").find("th:eq(1)").text(n+"-"+(n+9)).end().find("td");n-=1;var N=e.map(this.dates,function(e){return e.getUTCFullYear()}),C;for(var k=-1;k<11;k++)C=["ai1ec-year"],k===-1?C.push("ai1ec-old"):k===10&&C.push("ai1ec-new"),e.inArray(n,N)!==-1&&C.push("ai1ec-active"),(n<s||n>u)&&C.push("ai1ec-disabled"),m+='<span class="'+C.join(" ")+'">'+n+"</span>",n+=1;T.html(m)},updateNavArrows:function(){if(!this._allow_update)return;var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-Infinity&&t<=this.o.startDate.getUTCFullYear()?this.picker.find(".ai1ec-prev").css({visibility:"hidden"}):this.picker.find(".ai1ec-prev").css({visibility:"visible"}),this.o.endDate!==Infinity&&t>=this.o.endDate.getUTCFullYear()?this.picker.find(".ai1ec-next").css({visibility:"hidden"}):this.picker.find(".ai1ec-next").css({visibility:"visible"})}},click:function(t){t.preventDefault();var n=e(t.target).closest("span, td, th"),i,s,o;if(n.length==1)switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"ai1ec-datepicker-switch":this.showMode(1);break;case"ai1ec-prev":case"ai1ec-next":var u=v.modes[this.viewMode].navStep*(n[0].className=="ai1ec-prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,u),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,u),this.viewMode===1&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"ai1ec-today":var a=new Date;a=r(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0),this.showMode(-2);var f=this.o.todayBtn=="linked"?null:"view";this._setDate(a,f);break;case"ai1ec-clear":var l;this.isInput?l=this.element:this.component&&(l=this.element.find("input")),l&&l.val("").change(),this.update(),this._trigger("changeDate"),this.o.autoclose&&this.hide()}break;case"span":n.is(".ai1ec-disabled")||(this.viewDate.setUTCDate(1),n.is(".ai1ec-month")?(o=1,s=n.parent().find("span").index(n),i=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(s),this._trigger("changeMonth",this.viewDate),this.o.minViewMode===1&&this._setDate(r(i,s,o))):(o=1,s=0,i=parseInt(n.text(),10)||0,this.viewDate.setUTCFullYear(i),this._trigger("changeYear",this.viewDate),this.o.minViewMode===2&&this._setDate(r(i,s,o))),this.showMode(-1),this.fill());break;case"td":n.is(".ai1ec-day")&&!n.is(".ai1ec-disabled")&&(o=parseInt(n.text(),10)||1,i=this.viewDate.getUTCFullYear(),s=this.viewDate.getUTCMonth(),n.is(".ai1ec-old")?s===0?(s=11,i-=1):s-=1:n.is(".ai1ec-new")&&(s==11?(s=0,i+=1):s+=1),this._setDate(r(i,s,o)))}this.picker.is(":visible")&&this._focused_from&&e(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(e){var t=this.dates.contains(e);e?t!==-1?this.dates.remove(t):this.dates.push(e):this.dates.clear();if(typeof this.o.multidate=="number")while(this.dates.length>this.o.multidate)this.dates.remove(0)},_setDate:function(e,t){(!t||t=="date")&&this._toggle_multidate(e&&new Date(e));if(!t||t=="view")this.viewDate=e&&new Date(e);this.fill(),this.setValue(),this._trigger("changeDate");var n;this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),this.o.autoclose&&(!t||t=="date")&&this.hide()},moveMonth:function(e,t){if(!e)return undefined;if(!t)return e;var n=new Date(e.valueOf()),r=n.getUTCDate(),i=n.getUTCMonth(),s=Math.abs(t),o,u;t=t>0?1:-1;if(s==1){u=t==-1?function(){return n.getUTCMonth()==i}:function(){return n.getUTCMonth()!=o},o=i+t,n.setUTCMonth(o);if(o<0||o>11)o=(o+12)%12}else{for(var a=0;a<s;a++)n=this.moveMonth(n,t);o=n.getUTCMonth(),n.setUTCDate(r),u=function(){return o!=n.getUTCMonth()}}while(u())n.setUTCDate(--r),n.setUTCMonth(o);return n},moveYear:function(e,t){return this.moveMonth(e,t*12)},dateWithinRange:function(e){return e>=this.o.startDate&&e<=this.o.endDate},keydown:function(e){if(this.picker.is(":not(:visible)")){e.keyCode==27&&this.show();return}var t=!1,n,r,s,o=this.focusDate||this.viewDate;switch(e.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),e.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;n=e.keyCode==37?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n),s=new Date(o),s.setUTCDate(o.getUTCDate()+n)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;n=e.keyCode==38?-1:1,e.ctrlKey?(r=this.moveYear(this.dates.get(-1)||i(),n),s=this.moveYear(o,n),this._trigger("changeYear",this.viewDate)):e.shiftKey?(r=this.moveMonth(this.dates.get(-1)||i(),n),s=this.moveMonth(o,n),this._trigger("changeMonth",this.viewDate)):(r=new Date(this.dates.get(-1)||i()),r.setUTCDate(r.getUTCDate()+n*7),s=new Date(o),s.setUTCDate(o.getUTCDate()+n*7)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=s,this.setValue(),this.fill(),e.preventDefault());break;case 32:break;case 13:o=this.focusDate||this.dates.get(-1)||this.viewDate,this._toggle_multidate(o),t=!0,this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(e.preventDefault(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(t){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var u;this.isInput?u=this.element:this.component&&(u=this.element.find("input")),u&&u.change()}},showMode:function(e){e&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(">div").hide().filter(".ai1ec-datepicker-"+v.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var a=function(t,n){this.element=e(t),this.inputs=e.map(n.inputs,function(e){return e.jquery?e[0]:e}),delete n.inputs,e(this.inputs).datepicker(n).bind("changeDate",e.proxy(this.dateUpdated,this)),this.pickers=e.map(this.inputs,function(t){return e(t).data("datepicker")}),this.updateDates()};a.prototype={updateDates:function(){this.dates=e.map(this.pickers,function(e){return e.getUTCDate()}),this.updateRanges()},updateRanges:function(){var t=e.map(this.dates,function(e){return e.valueOf()});e.each(this.pickers,function(e,n){n.setRange(t)})},dateUpdated:function(t){if(this.updating)return;this.updating=!0;var n=e(t.target).data("datepicker"),r=n.getUTCDate(),i=e.inArray(t.target,this.inputs),s=this.inputs.length;if(i==-1)return;e.each(this.pickers,function(e,t){t.getUTCDate()||t.setUTCDate(r)});if(r<this.dates[i])while(i>=0&&r<this.dates[i])this.pickers[i--].setUTCDate(r);else if(r>this.dates[i])while(i<s&&r>this.dates[i])this.pickers[i++].setUTCDate(r);this.updateDates(),delete this.updating},remove:function(){e.map(this.pickers,function(e){e.remove()}),delete this.element.data().datepicker}};var c=e.fn.datepicker;e.fn.datepicker=function(t){var n=Array.apply(null,arguments);n.shift();var r;return this.each(function(){var i=e(this),s=i.data("datepicker"),o=typeof t=="object"&&t;if(!s){var c=f(this,"date"),p=e.extend({},h,c,o),d=l(p.language),v=e.extend({},h,d,c,o);if(i.is(".ai1ec-input-daterange")||v.inputs){var m={inputs:v.inputs||i.find("input").toArray()};i.data("datepicker",s=new a(this,e.extend(v,m)))}else i.data("datepicker",s=new u(this,v))}if(typeof t=="string"&&typeof s[t]=="function"){r=s[t].apply(s,n);if(r!==undefined)return!1}}),r!==undefined?r:this};var h=e.fn.datepicker.defaults={autoclose:!1,beforeShowDay:e.noop,calendarWeeks:!1,clearBtn:!1,daysOfWeekDisabled:[],endDate:Infinity,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-Infinity,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0},p=e.fn.datepicker.locale_opts=["format","rtl","weekStart"];e.fn.datepicker.Constructor=u;var d=e.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"}},v={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},getDaysInMonth:function(e,t){return[31,v.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(e){var t=e.replace(this.validParts,"\0").split("\0"),n=e.match(this.validParts);if(!t||!t.length||!n||n.length===0)throw new Error("Invalid date format.");return{separators:t,parts:n}},parseDate:function(t,n,i){if(!t)return undefined;if(t instanceof Date)return t;typeof n=="string"&&(n=v.parseFormat(n));if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(t)){var s=/([\-+]\d+)([dmwy])/,o=t.match(/([\-+]\d+)([dmwy])/g),a,f;t=new Date;for(var l=0;l<o.length;l++){a=s.exec(o[l]),f=parseInt(a[1]);switch(a[2]){case"d":t.setUTCDate(t.getUTCDate()+f);break;case"m":t=u.prototype.moveMonth.call(u.prototype,t,f);break;case"w":t.setUTCDate(t.getUTCDate()+f*7);break;case"y":t=u.prototype.moveYear.call(u.prototype,t,f)}}return r(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,0)}var o=t&&t.match(this.nonpunctuation)||[],t=new Date,c={},h=["yyyy","yy","M","MM","m","mm","d","dd"],p={yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){if(isNaN(e))return e;t-=1;while(t<0)t+=12;t%=12,e.setUTCMonth(t);while(e.getUTCMonth()!=t)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}},m,g,a;p.M=p.MM=p.mm=p.m,p.dd=p.d,t=r(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0);var y=n.parts.slice();o.length!=y.length&&(y=e(y).filter(function(t,n){return e.inArray(n,h)!==-1}).toArray());if(o.length==y.length){for(var l=0,b=y.length;l<b;l++){m=parseInt(o[l],10),a=y[l];if(isNaN(m))switch(a){case"MM":g=e(d[i].months).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].months)+1;break;case"M":g=e(d[i].monthsShort).filter(function(){var e=this.slice(0,o[l].length),t=o[l].slice(0,e.length);return e==t}),m=e.inArray(g[0],d[i].monthsShort)+1}c[a]=m}for(var l=0,w,E;l<h.length;l++)E=h[l],E in c&&!isNaN(c[E])&&(w=new Date(t),p[E](w,c[E]),isNaN(w)||(t=w))}return t},formatDate:function(t,n,r){if(!t)return"";typeof n=="string"&&(n=v.parseFormat(n));var i={d:t.getUTCDate(),D:d[r].daysShort[t.getUTCDay()],DD:d[r].days[t.getUTCDay()],m:t.getUTCMonth()+1,M:d[r].monthsShort[t.getUTCMonth()],MM:d[r].months[t.getUTCMonth()],yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear()};i.dd=(i.d<10?"0":"")+i.d,i.mm=(i.m<10?"0":"")+i.m;var t=[],s=e.extend([],n.separators);for(var o=0,u=n.parts.length;o<=u;o++)s.length&&t.push(s.shift()),t.push(i[n.parts[o]]);return t.join("")},headTemplate:'<thead><tr><th class="ai1ec-prev"><i class="ai1ec-fa ai1ec-fa-arrow-left"></i></th><th colspan="5" class="ai1ec-datepicker-switch"></th><th class="ai1ec-next"><i class="ai1ec-fa ai1ec-fa-arrow-right"></i></th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="ai1ec-today"></th></tr><tr><th colspan="7" class="ai1ec-clear"></th></tr></tfoot>'};v.template='<div class="ai1ec-datepicker"><div class="ai1ec-datepicker-days"><table class=" ai1ec-table-condensed">'+v.headTemplate+"<tbody></tbody>"+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-months">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+'<div class="ai1ec-datepicker-years">'+'<table class="ai1ec-table-condensed">'+v.headTemplate+v.contTemplate+v.footTemplate+"</table>"+"</div>"+"</div>",e.fn.datepicker.DPGlobal=v,e.fn.datepicker.noConflict=function(){return e.fn.datepicker=c,this},e(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(t){var n=e(this);if(n.data("datepicker"))return;t.preventDefault(),n.datepicker("show")}),e(function(){e('[data-provide="datepicker-inline"]').datepicker()});for(var m=2,g=arguments.length;m<g;m++)arguments[m].localize()}),timely.define("external_libs/bootstrap/alert",["jquery_timely"],function(e){var t='[data-dismiss="ai1ec-alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("ai1ec-alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("ai1ec-in"),e.support.transition&&i.hasClass("ai1ec-fade")?i.one(e.support.transition.end,s).emulateTransitionEnd(150):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}),timely.define("external_libs/jquery_cookie",["jquery_timely"],function(e){function n(e){return u.raw?e:encodeURIComponent(e)}function r(e){return u.raw?e:decodeURIComponent(e)}function i(e){return n(u.json?JSON.stringify(e):String(e))}function s(e){e.indexOf('"')===0&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return e=decodeURIComponent(e.replace(t," ")),u.json?JSON.parse(e):e}catch(n){}}function o(t,n){var r=u.raw?t:s(t);return e.isFunction(n)?n(r):r}var t=/\+/g,u=e.cookie=function(t,s,a){if(s!==undefined&&!e.isFunction(s)){a=e.extend({},u.defaults,a);if(typeof a.expires=="number"){var f=a.expires,l=a.expires=new Date;l.setTime(+l+f*864e5)}return document.cookie=[n(t),"=",i(s),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}var c=t?undefined:{},h=document.cookie?document.cookie.split("; "):[];for(var p=0,d=h.length;p<d;p++){var v=h[p].split("="),m=r(v.shift()),g=v.join("=");if(t&&t===m){c=o(g,s);break}!t&&(g=o(g))!==undefined&&(c[m]=g)}return c};u.defaults={},e.removeCookie=function(t,n){return e.cookie(t)===undefined?!1:(e.cookie(t,"",e.extend({},n,{expires:-1})),!e.cookie(t))}}),timely.define("scripts/calendar/load_views",["jquery_timely","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","libs/frontend_utils","libs/utils","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/select2_multiselect_helper","external_libs/jquery_history","external_libs/jquery.tablescroller","external_libs/jquery.scrollTo","external_libs/bootstrap_datepicker","external_libs/bootstrap/alert","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){e.cookie.json=!0;var l="ai1ec_saved_filter",c=!e("#save_filtered_views").hasClass("ai1ec-hide"),h=function(){var t=e("#ai1ec-view-dropdown .ai1ec-dropdown-menu .ai1ec-active a"),n=u.week_view_ends_at-u.week_view_starts_at,i=n*60;e("table.ai1ec-week-view-original").tableScroll({height:i,containerClass:"ai1ec-week-view ai1ec-popover-boundary",scroll:!1}),e("table.ai1ec-oneday-view-original").tableScroll({height:i,containerClass:"ai1ec-oneday-view ai1ec-popover-boundary",scroll:!1});if(e(".ai1ec-week-view").length||e(".ai1ec-oneday-view").length)e(".ai1ec-oneday-view .tablescroll_wrapper, .ai1ec-week-view .tablescroll_wrapper").scrollTo(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")"),e(".ai1ec-hour-marker:eq("+u.week_view_starts_at+")").addClass("ai1ec-first-visible");e(".ai1ec-month-view .ai1ec-multiday").length&&r.extend_multiday_events(),e("#ai1ec-calendar-view-container").trigger("initialize_view.ai1ec")},p=function(){e("#ai1ec-calendar-view-container").trigger("destroy_view.ai1ec");var t=e(".ai1ec-minical-trigger").data("datepicker");typeof t!="undefined"&&(t.picker.remove(),e(document).off("changeDate",".ai1ec-minical-trigger")),e(".ai1ec-tooltip.ai1ec-in, .ai1ec-popup").remove()},d=function(){var t=[],n=[],r=[],i;e(".ai1ec-category-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){t.push(e(this).data("term"))}),e(".ai1ec-tag-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){n.push(e(this).data("term"))}),e(".ai1ec-author-filter .ai1ec-dropdown-menu .ai1ec-active").each(function(){r.push(e(this).data("term"))});var s={};return s.cat_ids=t,s.tag_ids=n,s.auth_ids=r,i=e(".ai1ec-views-dropdown .ai1ec-dropdown-menu .ai1ec-active").data("action"),s.action=i,s},v=function(){var t=History.getState(),n=e.cookie(l);if(null===n||undefined===n)n={};var r=d();u.is_calendar_page?n.calendar_page=r:n[t.url]=r,e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").addClass("ai1ec-active").attr("data-original-title",u.clear_saved_filter_text);var i=s.make_alert(u.save_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},m=function(t){t.stopImmediatePropagation();var n=e.cookie(l);if(u.is_calendar_page)delete n.calendar_page;else{var r=History.getState();delete n[r.url]}e.cookie(l,n,{path:"/",expires:365}),e("#save_filtered_views").removeClass("ai1ec-active").attr("data-original-title",u.reset_saved_filter_text),c||e("#save_filtered_views").addClass("ai1ec-hide");var i=s.make_alert(u.remove_filter_text_ok,"success");e("#ai1ec-calendar").prepend(i)},g=function(t,n){e("#ai1ec-calendar-view-loading").fadeIn("fast"),e("#ai1ec-calendar-view").fadeTo("fast",.3,function(){var r={request_type:n,ai1ec_doing_ajax:!0};e.ajax({url:t,dataType:n,data:r,method:"get",success:function(t){p(),typeof t.views_dropdown=="string"&&e(".ai1ec-views-dropdown").replaceWith(t.views_dropdown),typeof t.categories=="string"&&(e(".ai1ec-category-filter").replaceWith(t.categories),u.use_select2&&f.init(e(".ai1ec-category-filter"))),typeof t.authors=="string"&&(e(".ai1ec-author-filter").replaceWith(t.authors),u.use_select2&&f.init(e(".ai1ec-author-filter"))),typeof t.tags=="string"&&(e(".ai1ec-tag-filter").replaceWith(t.tags),u.use_select2&&f.init(e(".ai1ec-tag-filter"))),typeof t.subscribe_buttons=="string"&&e(".ai1ec-subscribe-container").replaceWith(t.subscribe_buttons),typeof t.save_view_btngroup=="string"&&e("#save_filtered_views").closest(".ai1ec-btn-group").replaceWith(t.save_view_btngroup),c=t.are_filters_set;var n=e("#ai1ec-calendar-view-container");n.height(n.height());var r=e("#ai1ec-calendar-view").html(t.html).height();n.animate({height:r},{complete:function(){n.height("auto")}}),e("#ai1ec-calendar-view-loading").fadeOut("fast"),e("#ai1ec-calendar-view").fadeTo("fast",1),h()}})})},y=!1,b=function(e){var t=History.getState();if(t.data.ai1ec!==undefined&&!0===t.data.ai1ec||!0===y)y=!0,g(t.url,"json")},w=function(e,t){if(e==="json"){var n={ai1ec:!0};History.pushState(n,document.title,t)}else g(t,"jsonp")},E=function(t){var n=e(this);t.preventDefault(),w(n.data("type"),n.attr("href"))},S=function(t){var n=e(this);t.preventDefault();if(typeof n.data("datepicker")=="undefined"){n.datepicker({todayBtn:"linked",todayHighlight:!0});var r=n.data("datepicker");r.picker.addClass("ai1ec-right-aligned");var i=r.place;r.place=function(){i.call(this);var t=this.component?this.component:this.element,n=t.offset();this.picker.css({left:"auto",right:e(document).width()-n.left-t.outerWidth()})},e(document).on("changeDate",".ai1ec-minical-trigger",x)}n.datepicker("show")},x=function(t){var n,r=e(this),i;r.datepicker("hide"),n=r.data("href"),i=t.format(),i=i.replace(/\//g,"-"),n=n.replace("__DATE__",i),w(r.data("type"),n)},T=function(t){var n;typeof t.added!="undefined"?n=e(t.added.element).data("href"):n=e("option[value="+t.removed.id+"]",t.target).data("href"),data={ai1ec:!0},History.pushState(data,null,n)},N=function(){w(e(this).data("type"),e(this).data("href"))};return{initialize_view:h,handle_click_on_link_to_load_view:E,handle_minical_trigger:S,handle_minical_change_date:x,clear_filters:N,handle_state_change:b,load_view:g,save_current_filter:v,remove_current_filter:m,load_view_from_select2_filter:T,load_view_according_to_datatype:w}}),timely.define("external_libs/bootstrap/transition",["jquery_timely"],function(e){function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(e.support.transition.end,function(){n=!0});var i=function(){n||e(r).trigger(e.support.transition.end)};return setTimeout(i,t),this},e(function(){e.support.transition=t()})}),timely.define("external_libs/bootstrap/modal",["jquery_timely"],function(e){var t=function(t,n){this.options=n,this.$element=e(t),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this[this.isShown?"hide":"show"](e)},t.prototype.show=function(t){var n=this,r=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(r);if(this.isShown||r.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="ai1ec-modal"]',e.proxy(this.hide,this)),this.backdrop(function(){var r=e.support.transition&&n.$element.hasClass("ai1ec-fade");n.$element.parent().length||n.$element.appendTo(document.body),n.$element.show(),r&&n.$element[0].offsetWidth,n.$element.addClass("ai1ec-in").attr("aria-hidden",!1),n.enforceFocus();var i=e.Event("shown.bs.modal",{relatedTarget:t});r?n.$element.find(".ai1ec-modal-dialog").one(e.support.transition.end,function(){n.$element.focus().trigger(i)}).emulateTransitionEnd(300):n.$element.focus().trigger(i)})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("ai1ec-in").attr("aria-hidden",!0).off("click.dismiss.modal"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$element.one(e.support.transition.end,e.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("ai1ec-fade")?"ai1ec-fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="ai1ec-modal-backdrop '+r+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",e.proxy(function(e){if(e.target!==e.currentTarget)return;this.options.backdrop=="static"?this.$element[0].focus.call(this.$element[0]):this.hide.call(this)},this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("ai1ec-in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("ai1ec-in"),e.support.transition&&this.$element.hasClass("ai1ec-fade")?this.$backdrop.one(e.support.transition.end,t).emulateTransitionEnd(150):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n,r){return this.each(function(){var i=e(this),s=i.data("bs.modal"),o=e.extend({},t.DEFAULTS,i.data(),typeof n=="object"&&n);s||i.data("bs.modal",s=new t(this,o)),typeof n=="string"?s[n](r):o.show&&s.show(r)})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="ai1ec-modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s,this).one("hide",function(){n.is(":visible")&&n.focus()})}),e(document).on("show.bs.modal",".ai1ec-modal",function(){e(document.body).addClass("ai1ec-modal-open")}).on("hidden.bs.modal",".ai1ec-modal",function(){e(document.body).removeClass("ai1ec-modal-open")})}),timely.define("scripts/calendar",["jquery_timely","scripts/calendar/load_views","scripts/calendar/print","scripts/calendar/agenda_view","scripts/calendar/month_view","ai1ec_calendar","ai1ec_config","scripts/common_scripts/frontend/common_frontend","libs/utils","libs/select2_multiselect_helper","external_libs/bootstrap/transition","external_libs/bootstrap/modal","external_libs/jquery.scrollTo","external_libs/jquery_cookie"],function(e,t,n,r,i,s,o,u,a,f){var l=function(){if(s.selector!==undefined&&s.selector!==""&&e(s.selector).length===1){var t=e(":header:contains("+s.title+"):first");t.length||(t=e('<h1 class="page-title"></h1>'),t.text(s.title));var n=e("#ai1ec-container").detach().before(t);e(s.selector).empty().append(n).hide().css("visibility","visible").fadeIn("fast")}},c=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).addClass("ai1ec-hover")},h=function(){var t=e(this).data("instanceId");e(".ai1ec-event-instance-id-"+t).removeClass("ai1ec-hover")},p=function(){var t=e(this),n=t.data("instanceId");t.delay(500).queue(function(){e(".ai1ec-event-instance-id-"+n).addClass("ai1ec-raised")})},d=function(t){var n=e(this),r=n.data("instanceId"),i=e(t.toElement||t.relatedTarget);if(i.is(".ai1ec-event-instance-id-"+r)||i.parent().is(".ai1ec-event-instance-id-"+r))return;e(".ai1ec-event-instance-id-"+r).clearQueue().removeClass("ai1ec-raised")},v=function(){l()},m=function(){e(document).on({mouseenter:c,mouseleave:h},".ai1ec-event-container.ai1ec-multiday"),e(document).on({mouseenter:p,mouseleave:d},".ai1ec-oneday-view .ai1ec-oneday .ai1ec-event-container, .ai1ec-week-view .ai1ec-week .ai1ec-event-container"),e(document).on("click",".ai1ec-agenda-view .ai1ec-event-header",r.toggle_event),e(document).on("click","#ai1ec-agenda-expand-all",r.expand_all),e(document).on("click","#ai1ec-agenda-collapse-all",r.collapse_all),e(document).on("click","a.ai1ec-load-view",t.handle_click_on_link_to_load_view),e(document).on("click",".ai1ec-minical-trigger",t.handle_minical_trigger),e(document).on("click",".ai1ec-clear-filter",t.clear_filters),e(document).on("click","#ai1ec-print-button",n.handle_click_on_print_button),e(document).on("click",".ai1ec-reveal-full-day button",function(){e(this).fadeOut();var t=e(".ai1ec-oneday-view-original"),n=e(".ai1ec-week-view-original");n.length===0&&(n=t);var r=e(".tablescroll_wrapper").offset().top-n.offset().top;e(window).scrollTo("+="+r+"px",400);var i=1440;e(".tablescroll_wrapper").animate({height:i+"px"})}),History.Adapter.bind(window,"statechange",t.handle_state_change),e(document).on("click","#ai1ec-calendar-view .ai1ec-load-event",function(t){t.preventDefault(),e.cookie.raw=!1,e.cookie("ai1ec_calendar_url",document.URL),window.location.href=this.href})},g=function(){f.init(e(".ai1ec-select2-filters")),e(document).on("change",".ai1ec-select2-multiselect-selector",t.load_view_from_select2_filter)},y=function(){e(document).on("page_ready.ai1ec",function(){v(),o.use_select2&&g(),m(),t.initialize_view()})};return{start:y}});
|
| 304 |
* limitations under the License.
|
| 305 |
* ======================================================================== */
|
| 306 |
|
| 307 |
+
timely.define("scripts/calendar/print",["jquery_timely"],function(e){var t=function(t){t.preventDefault();var n=e("body"),r=e("html"),i=e("#ai1ec-container").html(),s=n.html();s=s.replace(/<script.*?>([\s\S]*?)<\/script>/gmi,""),n.empty(),n.addClass("timely"),r.addClass("ai1ec-print"),n.html(i),e("span").click(function(){return!1}),window.print(),n.removeClass("timely"),r.removeClass("ai1ec-print"),n.html(s)};return{handle_click_on_print_button:t}}),timely.define("scripts/calendar/agenda_view",["jquery_timely"],function(e){var t=function(){e(this).closest(".ai1ec-event").toggleClass("ai1ec-expanded").find(".ai1ec-event-summary").slideToggle(300)},n=function(){e(".ai1ec-expanded .ai1ec-event-toggle").click()},r=function(){e(".ai1ec-event:not(.ai1ec-expanded) .ai1ec-event-toggle").click()};return{toggle_event:t,collapse_all:n,expand_all:r}}),timely.define("external_libs/modernizr",[],function(){var e=function(e,t,n){function S(e){f.cssText=e}function x(e,t){return S(h.join(e+";")+(t||""))}function T(e,t){return typeof e===t}function N(e,t){return!!~(""+e).indexOf(t)}function C(e,t,r){for(var i in e){var s=t[e[i]];if(s!==n)return r===!1?e[i]:T(s,"function")?s.bind(r||t):s}return!1}var r="2.5.3",i={},s=!0,o=t.documentElement,u="modernizr",a=t.createElement(u),f=a.style,l,c={}.toString,h=" -webkit- -moz- -o- -ms- ".split(" "),p={},d={},v={},m=[],g=m.slice,y,b=function(e,n,r,i){var s,a,f,l=t.createElement("div"),c=t.body,h=c?c:t.createElement("body");if(parseInt(r,10))while(r--)f=t.createElement("div"),f.id=i?i[r]:u+(r+1),l.appendChild(f);return s=["­","<style>",e,"</style>"].join(""),l.id=u,(c?l:h).innerHTML+=s,h.appendChild(l),c||(h.style.background="",o.appendChild(h)),a=n(l,e),c?l.parentNode.removeChild(l):h.parentNode.removeChild(h),!!a},w={}.hasOwnProperty,E;!T(w,"undefined")&&!T(w.call,"undefined")?E=function(e,t){return w.call(e,t)}:E=function(e,t){return t in e&&T(e.constructor.prototype[t],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError;var r=g.call(arguments,1),i=function(){if(this instanceof i){var e=function(){};e.prototype=n.prototype;var s=new e,o=n.apply(s,r.concat(g.call(arguments)));return Object(o)===o?o:s}return n.apply(t,r.concat(g.call(arguments)))};return i});var k=function(n,r){var s=n.join(""),o=r.length;b(s,function(n,r){var s=t.styleSheets[t.styleSheets.length-1],u=s?s.cssRules&&s.cssRules[0]?s.cssRules[0].cssText:s.cssText||"":"",a=n.childNodes,f={};while(o--)f[a[o].id]=a[o];i.touch="ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch||(f.touch&&f.touch.offsetTop)===9},o,r)}([,["@media (",h.join("touch-enabled),("),u,")","{#touch{top:9px;position:absolute}}"].join("")],[,"touch"]);p.touch=function(){return i.touch};for(var L in p)E(p,L)&&(y=L.toLowerCase(),i[y]=p[L](),m.push((i[y]?"":"no-")+y));return S(""),a=l=null,i._version=r,i._prefixes=h,i.testStyles=b,o.className=o.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(s?" js "+m.join(" "):""),i}(window,window.document);return e}),timely.define("scripts/calendar/month_view",["jquery_timely","external_libs/modernizr"],function(e,t){var n=navigator.userAgent.match(/opera/i),r=navigator.userAgent.match(/webkit/i),i=function(){var t=e(".ai1ec-day"),n=e(".ai1ec-week:first .ai1ec-day").length;e(".ai1ec-month-view .ai1ec-multiday").each(function(){var n=this.parentNode,r=e(this).outerHeight(!0),i=parseInt(e(this).data("endDay"),10),u=e(".ai1ec-date",n),a=parseInt(u.text(),10),f=e(this).data("endTruncated");f&&(i=parseInt(e(t[t.length-1]).text(),10));var l=e(this),c=e(".ai1ec-event",l)[0].style.backgroundColor,h=0,p=i-a+1,d=p,v,m=0;t.each(function(t){var n=e(".ai1ec-date",this),r=e(this.parentNode),u=r.index(),f=parseInt(n.text(),10);if(f>=a&&f<=i){f===a&&(v=parseInt(n.css("marginBottom"),10)+16),h===0&&m++;if(u===0&&f>a&&d!==0){var p=l.next(".ai1ec-popup").andSelf().clone(!1);n.parent().append(p);var g=p.first();g.addClass("ai1ec-multiday-bar ai1ec-multiday-clone"),g.css({position:"absolute",left:"1px",top:parseInt(n.css("marginBottom"),10)+13,backgroundColor:c});var y=d>7?7:d;g.css("width",s(y)),d>7&&g.append(o(1,c)),g.append(o(2,c))}h===0?n.css({marginBottom:v+"px"}):n.css({marginBottom:"+=16px"}),d--,d>0&&u===6&&h++}});if(f){var g=e("."+l[0].className.replace(/\s+/igm,".")).last();g.append(o(1,c))}e(this).css({position:"absolute",top:u.outerHeight(!0)-r-1+"px",left:"1px",width:s(m)}),h>0&&e(this).append(o(1,c)),e(this).data("startTruncated")&&e(this).append(o(2,c)).addClass("ai1ec-multiday-bar")})},s=function(e){var t;switch(e){case 1:t=97.5;break;case 2:t=198.7;break;case 3:t=300;break;case 4:t=401;break;case 5:r||n?t=507:t=503.4;break;case 6:r||n?t=608:t=603.5;break;case 7:r||n?t=709:t=705}return t+"%"},o=function(t,n){var r=e('<div class="ai1ec-multiday-arrow'+t+'"></div>');return t===1?r.css({borderLeftColor:n}):r.css({borderTopColor:n,borderRightColor:n,borderBottomColor:n}),r};return{extend_multiday_events:i}}),timely.define("libs/frontend_utils",[],function(){var e=function(e){var t,n;t=function(e){if(/&[^;]+;/.test(e)){var t=document.createElement("div");return t.innerHTML=e,t.firstChild?t.firstChild.nodeValue:e}return e};if(typeof e=="string")return t(e);if(typeof e=="object")for(n in e)typeof e[n]=="string"&&(e[n]=t(e[n]));return e},t=function(e,t,n){var r,i,s,o,u;if("#"===e.charAt(0)||"?"===e.charAt(0))e=e.substring(1);r={},e=e.split(t);for(i=0;i<e.length;i++)o=e[i].trim(),-1!==(u=o.indexOf(n))?(s=o.substring(0,u).trim(),o=o.substring(u+1).trim()):(s=o,o=!0),r[s]=o;return r},n=function(e){var n,r,i,s,o;e=t(e,"&","="),i=Object.keys(e),n={ai1ec:{},action:"month"};for(r=0;r<i.length;r++)if("ai1ec"===i[r]){var u=t(e[i[r]],"|",":");for(s in u)if(""!==u[s]){if("action"===s||"view"===s)n.action=u[s];n.ai1ec[s]=u[s]}}else"ai1ec_"===i[r].substring(0,6)?n.ai1ec[i[r].substring(6)]=e[i[r]]:n[i[r]]=e[i[r]];"ai1ec_"!==n.action.substring(0,6)&&(n.action="ai1ec_"+n.action),o="action="+n.action+"&ai1ec=";for(s in n.ai1ec)n.ai1ec.hasOwnProperty(s)&&(o+=escape(s)+":"+escape(n.ai1ec[s])+"|");o=o.substring(0,o.length-1);for(s in n)"ai1ec"!==s&&"action"!==s&&(o+="&"+s+"="+escape(n[s]));return o};return{ai1ec_convert_entities:e,ai1ec_map_internal_query:n,ai1ec_tokenize_uri:t}}),timely.define("external_libs/bootstrap/tab",["jquery_timely"],function(e){var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.ai1ec-dropdown-menu)"),r=t.data("target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("ai1ec-active"))return;var i=n.find(".ai1ec-active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("ai1ec-active").find("> .ai1ec-dropdown-menu > .ai1ec-active").removeClass("ai1ec-active"),t.addClass("ai1ec-active"),s?(t[0].offsetWidth,t.addClass("ai1ec-in")):t.removeClass("ai1ec-fade"),t.parent(".ai1ec-dropdown-menu")&&t.closest("li.ai1ec-dropdown").addClass("ai1ec-active"),r&&r()}var i=n.find("> .ai1ec-active"),s=r&&e.support.transition&&i.hasClass("ai1ec-fade");s?i.one(e.support.transition.end,o).emulateTransitionEnd(150):o(),i.removeClass("ai1ec-in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="ai1ec-tab"], [data-toggle="ai1ec-pill"]',function(t){t.preventDefault(),e(this).tab("show")})}),timely.define("libs/utils",["jquery_timely","external_libs/bootstrap/tab"],function(e){var t=function(){return{is_float:function(e){return!isNaN(parseFloat(e))},is_valid_coordinate:function(e,t){var n=t?90:180;return this.is_float(e)&&Math.abs(e)<n},convert_comma_to_dot:function(e){return e.replace(",",".")},field_has_value:function(t){var n="#"+t,r=e(n),i=!1;return r.length===1&&(i=e.trim(r.val())!==""),i},make_alert:function(t,n,r){var i="";switch(n){case"error":i="ai1ec-alert ai1ec-alert-danger";break;case"success":i="ai1ec-alert ai1ec-alert-success";break;default:i="ai1ec-alert"}var s=e("<div />",{"class":i,html:t});if(!r){var o=e("<button>",{type:"button","class":"ai1ec-close","data-dismiss":"ai1ec-alert",text:"×"});s.prepend(o)}return s},get_ajax_url:function(){return typeof window.ajaxurl=="undefined"?"http://localhost/wordpress/wp-admin/admin-ajax.php":window.ajaxurl},isUrl:function(e){var t=/(http|https|webcal):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)},isValidEmail:function(e){var t=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t.test(e)},activate_saved_tab_on_page_load:function(t){null===t||undefined===t?e("ul.ai1ec-nav a:first").tab("show"):e("ul.ai1ec-nav a[href="+t+"]").tab("show")}}}();return t}),timely.define("domReady",[],function(){function u(e){var t;for(t=0;t<e.length;t++)e[t](n)}function a(){var e=r;t&&e.length&&(r=[],u(e))}function f(){t||(t=!0,o&&clearInterval(o),a())}function c(e){return t?e(n):r.push(e),c}var e=typeof window!="undefined"&&window.document,t=!e,n=e?document:null,r=[],i,s,o;if(e){if(document.addEventListener)document.addEventListener("DOMContentLoaded",f,!1),window.addEventListener("load",f,!1);else if(window.attachEvent){window.attachEvent("onload",f),s=document.createElement("div");try{i=window.frameElement===null}catch(l){}s.doScroll&&i&&window.external&&(o=setInterval(function(){try{s.doScroll(),f()}catch(e){}},30))}(document.readyState==="complete"||document.readyState==="interactive")&&f()}return c.version="2.0.0",c.load=function(e,t,n,r){r.isBuild?n(null):c(n)},c}),timely.define("scripts/common_scripts/frontend/common_event_handlers",["jquery_timely"],function(e){var t=function(t){var n=e(this),r=n.next(".ai1ec-popup"),i,s,o;if(r.length===0)return;i=r.html(),s=r.attr("class");var u=n.closest("#ai1ec-calendar-view");u.length===0&&(u=e("body")),n.offset().left-u.offset().left>182?o="left":o="right",n.constrained_popover({content:i,title:"",placement:o,trigger:"manual",html:!0,template:'<div class="timely ai1ec-popover '+s+'">'+'<div class="ai1ec-arrow"></div>'+'<div class="ai1ec-popover-inner">'+'<div class="ai1ec-popover-content"><div></div></div>'+"</div>"+"</div>",container:"body"}).constrained_popover("show")},n=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-popup").length===0&&e(this).constrained_popover("hide")},r=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&(e(this).remove(),e("body > .ai1ec-tooltip").remove())},i=function(t){var n=e(this),r={template:'<div class="timely ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"manual",container:"body"};if(n.is(".ai1ec-category .ai1ec-color-swatch"))return;n.tooltip(r),n.tooltip("show")},s=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip").length===0&&e(this).data("bs.tooltip")&&e(this).tooltip("hide")},o=function(t){var n=e(t.toElement||t.relatedTarget);n.closest(".ai1ec-tooltip-trigger").length===0&&e(this).remove(),n.closest(".ai1ec-popup").length===0&&e("body > .ai1ec-popup").remove()};return{handle_popover_over:t,handle_popover_out:n,handle_popover_self_out:r,handle_tooltip_over:i,handle_tooltip_out:s,handle_tooltip_self_out:o}}),timely.define("external_libs/bootstrap/tooltip",["jquery_timely"],function(e){var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="ai1ec-tooltip"><div class="ai1ec-tooltip-arrow"></div><div class="ai1ec-tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,r){n[e]!=r&&(t[e]=r)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);clearTimeout(n.timeout),n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("ai1ec-fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,s=i.test(r);s&&(r=r.replace(i,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass("ai1ec-"+r),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var o=this.getPosition(),u=n[0].offsetWidth,a=n[0].offsetHeight;if(s){var f=this.$element.parent(),l=r,c=document.documentElement.scrollTop||document.body.scrollTop,h=this.options.container=="body"?window.innerWidth:f.outerWidth(),p=this.options.container=="body"?window.innerHeight:f.outerHeight(),d=this.options.container=="body"?0:f.offset().left;r=r=="bottom"&&o.top+o.height+a-c>p?"top":r=="top"&&o.top-c-a<0?"bottom":r=="right"&&o.right+u>h?"left":r=="left"&&o.left-u<d?"right":r,n.removeClass("ai1ec-"+l).addClass("ai1ec-"+r)}var v=this.getCalculatedOffset(r,o,u,a);this.applyPlacement(v,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=parseInt(r.css("margin-top"),10),u=parseInt(r.css("margin-left"),10);isNaN(o)&&(o=0),isNaN(u)&&(u=0),e.top=e.top+o,e.left=e.left+u,r.offset(e).addClass("ai1ec-in");var a=r[0].offsetWidth,f=r[0].offsetHeight;t=="top"&&f!=s&&(n=!0,e.top=e.top+s-f);if(/bottom|top/.test(t)){var l=0;e.left<0&&(l=e.left*-2,e.left=0,r.offset(e),a=r[0].offsetWidth,f=r[0].offsetHeight),this.replaceArrow(l-i+a,a,"left")}else this.replaceArrow(f-s,f,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".ai1ec-tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("ai1ec-fade ai1ec-in ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right")},t.prototype.hide=function(){function i(){t.hoverState!="in"&&n.detach()}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("ai1ec-in"),e.support.transition&&this.$tip.hasClass("ai1ec-fade")?n.one(e.support.transition.end,i).emulateTransitionEnd(150):i(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;n.tip().hasClass("ai1ec-in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}),timely.define("external_libs/bootstrap/popover",["jquery_timely","external_libs/bootstrap/tooltip"],function(e){var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="ai1ec-popover"><div class="ai1ec-arrow"></div><h3 class="ai1ec-popover-title"></h3><div class="ai1ec-popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".ai1ec-popover-title")[this.options.html?"html":"text"](t),e.find(".ai1ec-popover-content")[this.options.html?"html":"text"](n),e.removeClass("ai1ec-fade ai1ec-top ai1ec-bottom ai1ec-left ai1ec-right ai1ec-in"),e.find(".ai1ec-popover-title").html()||e.find(".ai1ec-popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".ai1ec-arrow")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}),timely.define("external_libs/constrained_popover",["jquery_timely","external_libs/bootstrap/popover"],function(e){var t=function(e,t){this.init("constrained_popover",e,t)};t.DEFAULTS=e.extend({},e.fn.popover.Constructor.DEFAULTS,{container:"",content:this.options}),t.prototype=e.extend({},e.fn.popover.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.applyPlacement=function(t,n){e.fn.popover.Constructor.prototype.applyPlacement.call(this,t,n);var r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight,o=this.getPosition(),u={};switch(n){case"left":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left-i:u.left=newPos.left-i,r.offset(u);break;case"right":newPos=this.defineBounds(o),typeof newPos.top=="undefined"?u.top=o.top+o.height/2-s/2:u.top=newPos.top-s/2,typeof newPos.left=="undefined"?u.left=o.left+o.width:u.left=newPos.left+o.width,r.offset(u)}},t.prototype.defineBounds=function(t){var n,r,i,s,o,u={},a=e(this.options.container);return a.length?(n=a.offset(),r=n.top,i=n.left,s=r+a.height(),o=i+a.width(),t.top+t.height/2<r&&(u.top=r),t.top+t.height/2>s&&(u.top=s),t.left-t.width/2<i&&(u.left=i),t.left-t.width/2>o&&(u.left=o),u):!1};var n=e.fn.popover;e.fn.constrained_popover=function(n){return this.each(function(){var r=e(this),i=r.data("ai1ec.constrained_popover"),s=typeof n=="object"&&n;i||r.data("ai1ec.constrained_popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.constrained_popover.Constructor=t,e.fn.constrained_popover.noConflict=function(){return e.fn.constrained_popover=n,this}}),timely.define("external_libs/bootstrap/dropdown",["jquery_timely"],function(e){function i(){e(t).remove(),e(n).each(function(t){var n=s(e(this));if(!n.hasClass("ai1ec-open"))return;n.trigger(t=e.Event("hide.bs.dropdown"));if(t.isDefaultPrevented())return;n.removeClass("ai1ec-open").trigger("hidden.bs.dropdown")})}function s(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&e(n);return r&&r.length?r:t.parent()}var t=".ai1ec-dropdown-backdrop",n="[data-toggle=ai1ec-dropdown]",r=function(t){e(t).on("click.bs.dropdown",this.toggle)};r.prototype.toggle=function(t){var n=e(this);if(n.is(".ai1ec-disabled, :disabled"))return;var r=s(n),o=r.hasClass("ai1ec-open");i();if(!o){"ontouchstart"in document.documentElement&&!r.closest(".ai1ec-navbar-nav").length&&e('<div class="ai1ec-dropdown-backdrop"/>').insertAfter(e(this)).on("click",i),r.trigger(t=e.Event("show.bs.dropdown"));if(t.isDefaultPrevented())return;r.toggleClass("ai1ec-open").trigger("shown.bs.dropdown"),n.focus()}return!1},r.prototype.keydown=function(t){if(!/(38|40|27)/.test(t.keyCode))return;var r=e(this);t.preventDefault(),t.stopPropagation();if(r.is(".ai1ec-disabled, :disabled"))return;var i=s(r),o=i.hasClass("ai1ec-open");if(!o||o&&t.keyCode==27)return t.which==27&&i.find(n).focus(),r.click();var u=e("[role=menu] li:not(.ai1ec-divider):visible a",i);if(!u.length)return;var a=u.index(u.filter(":focus"));t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<u.length-1&&a++,~a||(a=0),u.eq(a).focus()};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new r(this)),typeof t=="string"&&i[t].call(n)})},e.fn.dropdown.Constructor=r,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".ai1ec-dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,r.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",r.prototype.keydown)}),timely.define("scripts/common_scripts/frontend/common_frontend",["jquery_timely","domReady","scripts/common_scripts/frontend/common_event_handlers","ai1ec_calendar","external_libs/modernizr","external_libs/bootstrap/tooltip","external_libs/constrained_popover","external_libs/bootstrap/dropdown"],function(e,t,n,r,i){var s=!1,o=function(){s=!0,e(document).on("mouseenter",".ai1ec-popup-trigger",n.handle_popover_over),e(document).on("mouseleave",".ai1ec-popup-trigger",n.handle_popover_out),e(document).on("mouseleave",".ai1ec-popup",n.handle_popover_self_out),e(document).on("mouseenter",".ai1ec-tooltip-trigger",n.handle_tooltip_over),e(document).on("mouseleave",".ai1ec-tooltip-trigger",n.handle_tooltip_out),e(document).on("mouseleave",".ai1ec-tooltip",n.handle_tooltip_self_out)},u=function(){t(function(){o()})},a=function(){return s};return{start:u,are_event_listeners_attached:a}}),timely.define("external_libs/select2",["jquery_timely"],function(e){(function(e){typeof e.fn.each2=="undefined"&&e.fn.extend({each2:function(t){var n=e([0]),r=-1,i=this.length;while(++r<i&&(n.context=n[0]=this[r])&&t.call(n[0],r,n)!==!1);return this}})})(e),function(e,t){function l(e,t){var n=0,r=t.length;for(;n<r;n+=1)if(c(e,t[n]))return n;return-1}function c(e,n){return e===n?!0:e===t||n===t?!1:e===null||n===null?!1:e.
|
