diff --git a/airtime_mvc/application/configs/ACL.php b/airtime_mvc/application/configs/ACL.php
index 883656fd7..c58986f1e 100644
--- a/airtime_mvc/application/configs/ACL.php
+++ b/airtime_mvc/application/configs/ACL.php
@@ -37,7 +37,8 @@ $ccAcl->add(new Zend_Acl_Resource('library'))
->add(new Zend_Acl_Resource('rest:show-image'))
->add(new Zend_Acl_Resource('billing'))
->add(new Zend_Acl_Resource('thank-you'))
- ->add(new Zend_Acl_Resource('provisioning'));
+ ->add(new Zend_Acl_Resource('provisioning'))
+ ->add(new Zend_Acl_Resource('player'));
/** Creating permissions */
$ccAcl->allow('G', 'index')
@@ -70,6 +71,7 @@ $ccAcl->allow('G', 'index')
->allow('A', 'user')
->allow('A', 'systemstatus')
->allow('A', 'preference')
+ ->allow('A', 'player')
->allow('S', 'thank-you')
->allow('S', 'billing');
diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php
index 14438bdfe..1aeab45d5 100644
--- a/airtime_mvc/application/configs/navigation.php
+++ b/airtime_mvc/application/configs/navigation.php
@@ -85,6 +85,12 @@ $pages = array(
'controller' => 'listenerstat',
'action' => 'index',
'resource' => 'listenerstat'
+ ),
+ array(
+ 'label' => _('Player'),
+ 'module' => 'default',
+ 'controller' => 'player',
+ 'action' => 'customize'
)
)
),
diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php
index a233a0089..11f6f7889 100644
--- a/airtime_mvc/application/controllers/ApiController.php
+++ b/airtime_mvc/application/controllers/ApiController.php
@@ -523,6 +523,7 @@ class ApiController extends Zend_Controller_Action
$result["description"] = Application_Model_Preference::GetStationDescription();
$result["timezone"] = Application_Model_Preference::GetDefaultTimezone();
$result["locale"] = Application_Model_Preference::GetDefaultLocale();
+ $result["stream_data"] = Application_Model_StreamSetting::getEnabledStreamData();
// used by caller to determine if the airtime they are running or widgets in use is out of date.
$result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION;
@@ -1310,7 +1311,7 @@ class ApiController extends Zend_Controller_Action
}
public function getStreamParametersAction() {
- $streams = array("s1", "s2", "s3");
+ $streams = array("s1", "s2", "s3", "s4");
$stream_params = array();
foreach ($streams as $s) {
$stream_params[$s] =
diff --git a/airtime_mvc/application/controllers/EmbedController.php b/airtime_mvc/application/controllers/EmbedController.php
new file mode 100644
index 000000000..3212c8e5d
--- /dev/null
+++ b/airtime_mvc/application/controllers/EmbedController.php
@@ -0,0 +1,57 @@
+view->layout()->disableLayout();
+
+ $CC_CONFIG = Config::getConfig();
+
+ $request = $this->getRequest();
+
+ $this->view->css = Application_Common_HTTPHelper::getStationUrl() . "css/player.css?".$CC_CONFIG['airtime_version'];
+ $this->view->mrp_js = Application_Common_HTTPHelper::getStationUrl() . "js/airtime/player/mrp.js?".$CC_CONFIG['airtime_version'];
+ $this->view->jquery = Application_Common_HTTPHelper::getStationUrl() . "js/libs/jquery-1.10.2.js";
+ $this->view->muses_swf = Application_Common_HTTPHelper::getStationUrl() . "js/airtime/player/muses.swf";
+ $this->view->metadata_api_url = Application_Common_HTTPHelper::getStationUrl() . "api/live-info";
+ $this->view->player_title = json_encode($request->getParam('title'));
+
+ $stream = $request->getParam('stream');
+ $streamData = Application_Model_StreamSetting::getEnabledStreamData();
+ $availableMobileStreams = array();
+ $availableDesktopStreams = array();
+
+ if ($stream == "auto") {
+ $this->view->playerMode = "auto";
+ $this->view->streamURL = json_encode("");
+ foreach ($streamData as $s) {
+ if ($s["mobile"]) {
+ array_push($availableMobileStreams, $s);
+ } else if (!$s["mobile"]) {
+ array_push($availableDesktopStreams, $s);
+ }
+ }
+ } elseif (!empty($stream)) {
+ $this->view->playerMode = "manual";
+ $selectedStreamData = $streamData[$stream];
+ $this->view->streamURL = json_encode($selectedStreamData["url"]);
+ $this->view->codec = $selectedStreamData["codec"];
+ }
+ $this->view->availableMobileStreams = json_encode($availableMobileStreams);
+ $this->view->availableDesktopStreams = json_encode($availableDesktopStreams);
+ }
+}
diff --git a/airtime_mvc/application/controllers/PlayerController.php b/airtime_mvc/application/controllers/PlayerController.php
new file mode 100644
index 000000000..bb3fbc2d3
--- /dev/null
+++ b/airtime_mvc/application/controllers/PlayerController.php
@@ -0,0 +1,31 @@
+view->headLink()->appendStylesheet($baseUrl.'css/player-form.css?'.$CC_CONFIG['airtime_version']);
+ $this->view->headScript()->appendFile($baseUrl.'js/airtime/player/player.js?'.$CC_CONFIG['airtime_version']);
+
+ $form = new Application_Form_Player();
+
+ $apiEnabled = Application_Model_Preference::GetAllow3rdPartyApi();
+ $numEnabledStreams = $form->getElement('player_stream_url')->getAttrib('numberOfEnabledStreams');
+
+ if ($numEnabledStreams > 0 && $apiEnabled) {
+ $this->view->form = $form;
+ } else {
+ $this->view->errorMsg = "To configure and use the embeddable player you must:
+ 1. Enable at least one MP3, AAC, or OGG stream under System -> Streams
+ 2. Enable the Public Airtime API under System -> Preferences";
+ }
+
+ }
+}
diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php
index 219e35e01..b06a9e1ed 100644
--- a/airtime_mvc/application/controllers/PreferenceController.php
+++ b/airtime_mvc/application/controllers/PreferenceController.php
@@ -141,11 +141,7 @@ class PreferenceController extends Zend_Controller_Action
$this->view->headScript()->appendFile($baseUrl.'js/airtime/preferences/streamsetting.js?'.$CC_CONFIG['airtime_version'],'text/javascript');
// get current settings
- $temp = Application_Model_StreamSetting::getStreamSetting();
- $setting = array();
- foreach ($temp as $t) {
- $setting[$t['keyname']] = $t['value'];
- }
+ $setting = Application_Model_StreamSetting::getStreamSetting();
$name_map = array(
'ogg' => 'Ogg Vorbis',
@@ -208,6 +204,7 @@ class PreferenceController extends Zend_Controller_Action
$s1_data = array();
$s2_data = array();
$s3_data = array();
+ $s4_data = array();
$values = array();
foreach($postData as $k=>$v) {
$v = explode('=', urldecode($v));
@@ -223,6 +220,9 @@ class PreferenceController extends Zend_Controller_Action
} elseif (strpos($v[0], "s3_data") !== false) {
preg_match('/\[(.*)\]/', $v[0], $matches);
$s3_data[$matches[1]] = $v[1];
+ } elseif (strpos($v[0], "s4_data") !== false) {
+ preg_match('/\[(.*)\]/', $v[0], $matches);
+ $s4_data[$matches[1]] = $v[1];
} else {
$values[$v[0]] = $v[1];
}
@@ -230,6 +230,7 @@ class PreferenceController extends Zend_Controller_Action
$values["s1_data"] = $s1_data;
$values["s2_data"] = $s2_data;
$values["s3_data"] = $s3_data;
+ $values["s4_data"] = $s4_data;
$error = false;
if ($form->isValid($values)) {
@@ -245,6 +246,7 @@ class PreferenceController extends Zend_Controller_Action
$s1_set_admin_pass = !empty($values["s1_data"]["admin_pass"]);
$s2_set_admin_pass = !empty($values["s2_data"]["admin_pass"]);
$s3_set_admin_pass = !empty($values["s3_data"]["admin_pass"]);
+ $s4_set_admin_pass = !empty($values["s4_data"]["admin_pass"]);
// this goes into cc_pref table
Application_Model_Preference::SetStreamLabelFormat($values['streamFormat']);
@@ -290,6 +292,7 @@ class PreferenceController extends Zend_Controller_Action
"s1_set_admin_pass"=>$s1_set_admin_pass,
"s2_set_admin_pass"=>$s2_set_admin_pass,
"s3_set_admin_pass"=>$s3_set_admin_pass,
+ "s4_set_admin_pass"=>$s4_set_admin_pass,
));
} else {
$live_stream_subform->updateVariables();
@@ -441,7 +444,8 @@ class PreferenceController extends Zend_Controller_Action
public function getAdminPasswordStatusAction()
{
$out = array();
- for ($i=1; $i<=3; $i++) {
+ $num_of_stream = intval(Application_Model_Preference::GetNumOfStreams());
+ for ($i=1; $i<=$num_of_stream; $i++) {
if (Application_Model_StreamSetting::getAdminPass('s'.$i)=='') {
$out["s".$i] = false;
} else {
diff --git a/airtime_mvc/application/controllers/plugins/Acl_plugin.php b/airtime_mvc/application/controllers/plugins/Acl_plugin.php
index 7ea1336d0..9eef38fdb 100644
--- a/airtime_mvc/application/controllers/plugins/Acl_plugin.php
+++ b/airtime_mvc/application/controllers/plugins/Acl_plugin.php
@@ -118,7 +118,8 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract
"locale",
"upgrade",
'whmcs-login',
- "provisioning"
+ "provisioning",
+ "embed"
)))
{
$this->setRoleName("G");
diff --git a/airtime_mvc/application/forms/Player.php b/airtime_mvc/application/forms/Player.php
new file mode 100644
index 000000000..5a24397d7
--- /dev/null
+++ b/airtime_mvc/application/forms/Player.php
@@ -0,0 +1,81 @@
+setDecorators(array(
+ array('ViewScript', array('viewScript' => 'form/player.phtml'))
+ ));
+
+ $title = new Zend_Form_Element_Text('player_title');
+ $title->setValue(_('Now Playing'));
+ $title->setLabel(_('Title:'));
+ $title->setDecorators(array(
+ 'ViewHelper',
+ 'Errors',
+ 'Label'
+ ));
+ $title->addDecorator('Label', array('class' => 'player-title'));
+ $this->addElement($title);
+
+ $streamMode = new Zend_Form_Element_Radio('player_stream_mode');
+ $streamMode->setLabel(_('Select Stream:'));
+ $streamMode->setMultiOptions(
+ array(
+ "auto" => _("Auto detect the most appropriate stream to use."),
+ "manual" => _("Select a stream:")
+ )
+ );
+ $streamMode->setValue("auto");
+ $this->addElement($streamMode);
+
+ $streamURL = new Zend_Form_Element_Radio('player_stream_url');
+ $opusStreamCount = 0;
+ $urlOptions = Array();
+ foreach(Application_Model_StreamSetting::getEnabledStreamData() as $stream => $data) {
+ $urlOptions[$stream] = strtoupper($data["codec"])." - ".$data["bitrate"]."kbps";
+ if ($data["mobile"]) {
+ $urlOptions[$stream] .= _(" - Mobile friendly");
+ }
+ if ($data["codec"] == OPUS) {
+ $opusStreamCount += 1;
+ $urlOptions[$stream] .= _(" - The player does not support Opus streams.");
+ }
+ }
+ $streamURL->setMultiOptions(
+ $urlOptions
+ );
+
+ // Set default value to the first non-opus stream we find
+ foreach ($urlOptions as $o => $v) {
+ if (strpos(strtolower($v), OPUS) !== false) {
+ continue;
+ } else {
+ $streamURL->setValue($o);
+ break;
+ }
+ }
+
+ $streamURL->setAttrib('numberOfEnabledStreams', sizeof($urlOptions)-$opusStreamCount);
+ $streamURL->removeDecorator('label');
+ $this->addElement($streamURL);
+
+ $embedSrc = new Zend_Form_Element_Textarea('player_embed_src');
+ $embedSrc->setAttrib("readonly", "readonly");
+ $embedSrc->setAttrib("class", "embed-player-text-box");
+ $embedSrc->setAttrib('cols', '40')
+ ->setAttrib('rows', '4');
+ $embedSrc->setLabel(_("Embeddable code:"));
+ $embedSrc->setDescription(_("Copy this code and paste it into your website's HTML to embed the player in your site."));
+ $embedSrc->setValue('');
+ $this->addElement($embedSrc);
+
+ $previewLabel = new Zend_Form_Element_Text('player_preview_label');
+ $previewLabel->setLabel(_("Preview:"));
+ $this->addElement($previewLabel);
+
+ }
+}
diff --git a/airtime_mvc/application/forms/StreamSettingSubForm.php b/airtime_mvc/application/forms/StreamSettingSubForm.php
index 874f38dc5..8d1f96f43 100644
--- a/airtime_mvc/application/forms/StreamSettingSubForm.php
+++ b/airtime_mvc/application/forms/StreamSettingSubForm.php
@@ -53,6 +53,12 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm
}
$this->addElement($enable);
+ $mobile = new Zend_Form_Element_Checkbox('mobile');
+ $mobile->setLabel(_('Mobile:'));
+ $mobile->setValue($setting[$prefix.'_mobile']);
+ $mobile->setDecorators(array('ViewHelper'));
+ $this->addElement($mobile);
+
$type = new Zend_Form_Element_Select('type');
$type->setLabel(_("Stream Type:"))
->setMultiOptions($stream_types)
diff --git a/airtime_mvc/application/forms/helpers/CustomDecorators.php b/airtime_mvc/application/forms/helpers/CustomDecorators.php
index f9ad02f8f..43370e7d6 100644
--- a/airtime_mvc/application/forms/helpers/CustomDecorators.php
+++ b/airtime_mvc/application/forms/helpers/CustomDecorators.php
@@ -12,4 +12,18 @@ class Airtime_Decorator_SuperAdmin_Only extends Zend_Form_Decorator_Abstract
return "";
}
}
+}
+
+/** Hide a Zend_Form_Element unless you're logged in as an Admin or SuperAdmin. */
+class Airtime_Decorator_Admin_Only extends Zend_Form_Decorator_Abstract
+{
+ public function render($content)
+ {
+ $currentUser = Application_Model_User::getCurrentUser();
+ if ($currentUser->isSuperAdmin() || $currentUser->isAdmin()) {
+ return $content;
+ } else {
+ return "";
+ }
+ }
}
\ No newline at end of file
diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php
index 9a7f5633d..64263b94c 100644
--- a/airtime_mvc/application/models/Preference.php
+++ b/airtime_mvc/application/models/Preference.php
@@ -37,8 +37,6 @@ class Application_Model_Preference
if ($isUserValue && is_null($userId))
throw new Exception("User id can't be null for a user preference {$key}.");
- Application_Common_Database::prepareAndExecute("LOCK TABLE cc_pref");
-
//Check if key already exists
$sql = "SELECT COUNT(*) FROM cc_pref"
." WHERE keystr = :key";
diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php
index 4208ff5c7..edcf2da10 100644
--- a/airtime_mvc/application/models/Scheduler.php
+++ b/airtime_mvc/application/models/Scheduler.php
@@ -828,7 +828,8 @@ class Application_Model_Scheduler
"fade_in = '{$file["fadein"]}', ".
"fade_out = '{$file["fadeout"]}', ".
"clip_length = '{$file["cliplength"]}', ".
- "position = {$pos} ".
+ "position = {$pos}, ".
+ "instance_id = {$instanceId} ".
"WHERE id = {$sched["id"]}";
Application_Common_Database::prepareAndExecute(
diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php
index c34c09a2e..688ddc397 100644
--- a/airtime_mvc/application/models/StreamSetting.php
+++ b/airtime_mvc/application/models/StreamSetting.php
@@ -1,4 +1,7 @@
"http://$host:$port/$mount",
+ "codec" => $streamData[$prefix."type"],
+ "bitrate" => $streamData[$prefix."bitrate"],
+ "mobile" => $streamData[$prefix."mobile"]
+ );
+ }
+ return $streams;
}
/* Returns the id's of all streams that are enabled in an array. An
@@ -83,50 +106,63 @@ class Application_Model_StreamSetting
return $ids;
}
- /* Returns only global data as array*/
- public static function getGlobalData()
- {
- $con = Propel::getConnection();
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname IN ('output_sound_device', 'icecast_vorbis_metadata')";
-
- $rows = Application_Common_Database::prepareAndExecute($sql, array(), 'all');
-
- $data = array();
-
- foreach ($rows as $row) {
- $data[$row["keyname"]] = $row["value"];
- }
-
- return $data;
- }
-
/* Returns all information related to a specific stream. An example
* of a stream id is 's1' or 's2'. */
public static function getStreamData($p_streamId)
{
- $con = Propel::getConnection();
- $streamId = pg_escape_string($p_streamId);
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname LIKE '{$streamId}_%'";
-
- $stmt = $con->prepare($sql);
-
- if ($stmt->execute()) {
- $rows = $stmt->fetchAll();
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
+ $rows = CcStreamSettingQuery::create()
+ ->filterByDbKeyName("${p_streamId}_%")
+ ->find();
+ //This is way too much code because someone made only stupid decisions about how
+ //the layout of this table worked. The git history doesn't lie.
$data = array();
-
foreach ($rows as $row) {
- $data[$row["keyname"]] = $row["value"];
+ $key = $row->getDbKeyName();
+ $value = $row->getDbValue();
+ $type = $row->getDbType();
+ //Fix stupid defaults so we end up with proper typing in our JSON
+ if ($row->getDbType() == "boolean") {
+ if (empty($value)) {
+ //In Python, there is no way to tell the difference between ints and booleans,
+ //which we need to differentiate between for when we're generating the Liquidsoap
+ //config file. Returning booleans as a string is a workaround that lets us do that.
+ $value = "false";
+ }
+ $data[$key] = $value;
+ }
+ elseif ($row->getDbType() == "integer") {
+ if (empty($value)) {
+ $value = 0;
+ }
+ $data[$key] = intval($value);
+ }
+ else {
+ $data[$key] = $value;
+ }
}
+ //Add in defaults in case they don't exist in the database.
+ $keyPrefix = $p_streamId . '_';
+ self::ensureKeyExists($keyPrefix . 'admin_pass', $data);
+ self::ensureKeyExists($keyPrefix . 'admin_user', $data);
+ self::ensureKeyExists($keyPrefix . 'bitrate', $data, 128);
+ self::ensureKeyExists($keyPrefix . 'channels', $data, "stereo");
+ self::ensureKeyExists($keyPrefix . 'description', $data);
+ self::ensureKeyExists($keyPrefix . 'enable', $data, "false");
+ self::ensureKeyExists($keyPrefix . 'genre', $data);
+ self::ensureKeyExists($keyPrefix . 'host', $data);
+ self::ensureKeyExists($keyPrefix . 'liquidsoap_error', $data, "waiting");
+ self::ensureKeyExists($keyPrefix . 'mount', $data);
+ self::ensureKeyExists($keyPrefix . 'name', $data);
+ self::ensureKeyExists($keyPrefix . 'output', $data);
+ self::ensureKeyExists($keyPrefix . 'pass', $data);
+ self::ensureKeyExists($keyPrefix . 'port', $data, 8000);
+ self::ensureKeyExists($keyPrefix . 'type', $data);
+ self::ensureKeyExists($keyPrefix . 'url', $data);
+ self::ensureKeyExists($keyPrefix . 'user', $data);
+ self::ensureKeyExists($keyPrefix . 'mobile', $data);
+
return $data;
}
@@ -134,76 +170,41 @@ class Application_Model_StreamSetting
* make data easier to iterate over */
public static function getStreamDataNormalized($p_streamId)
{
- $con = Propel::getConnection();
- $streamId = pg_escape_string($p_streamId);
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname LIKE '{$streamId}_%'";
-
- $stmt = $con->prepare($sql);
-
- if ($stmt->execute()) {
- $rows = $stmt->fetchAll();
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
+ $settings = self::getStreamData($p_streamId);
+ foreach ($settings as $key => $value)
+ {
+ unset($settings[$key]);
+ $newKey = substr($key, strlen($p_streamId)+1); //$p_streamId is assumed to be the key prefix.
+ $settings[$newKey] = $value;
}
+ return $settings;
+ }
- $data = array();
-
- foreach ($rows as $row) {
- list($id, $key) = explode("_", $row["keyname"], 2);
- $data[$key] = $row["value"];
+ private static function ensureKeyExists($key, &$array, $default='')
+ {
+ if (!array_key_exists($key, $array)) {
+ $array[$key] = $default;
}
-
- return $data;
+ return $array;
}
public static function getStreamSetting()
{
- $con = Propel::getConnection();
- $sql = "SELECT *"
- ." FROM cc_stream_setting"
- ." WHERE keyname not like '%_error' AND keyname not like '%_admin_%'";
-
- $rows = Application_Common_Database::prepareAndExecute($sql, array(), 'all');
-
- $exists = array();
-
- foreach ($rows as $r) {
- if ($r['keyname'] == 'master_live_stream_port') {
- $exists['master_live_stream_port'] = true;
- } elseif ($r['keyname'] == 'master_live_stream_mp') {
- $exists['master_live_stream_mp'] = true;
- } elseif ($r['keyname'] == 'dj_live_stream_port') {
- $exists['dj_live_stream_port'] = true;
- } elseif ($r['keyname'] == 'dj_live_stream_mp') {
- $exists['dj_live_stream_mp'] = true;
- }
+ $settings = array();
+ $numStreams = MAX_NUM_STREAMS;
+ for ($streamIdx = 1; $streamIdx <= $numStreams; $streamIdx++)
+ {
+ $settings = array_merge($settings, self::getStreamData("s" . $streamIdx));
}
-
- if (!isset($exists["master_live_stream_port"])) {
- $rows[] = array("keyname" =>"master_live_stream_port",
- "value"=>self::getMasterLiveStreamPort(),
- "type"=>"integer");
- }
- if (!isset($exists["master_live_stream_mp"])) {
- $rows[] = array("keyname" =>"master_live_stream_mp",
- "value"=>self::getMasterLiveStreamMountPoint(),
- "type"=>"string");
- }
- if (!isset($exists["dj_live_stream_port"])) {
- $rows[] = array("keyname" =>"dj_live_stream_port",
- "value"=>self::getDjLiveStreamPort(),
- "type"=>"integer");
- }
- if (!isset($exists["dj_live_stream_mp"])) {
- $rows[] = array("keyname" =>"dj_live_stream_mp",
- "value"=>self::getDjLiveStreamMountPoint(),
- "type"=>"string");
- }
-
- return $rows;
+ $settings["master_live_stream_port"] = self::getMasterLiveStreamPort();
+ $settings["master_live_stream_mp"] = self::getMasterLiveStreamMountPoint();
+ $settings["dj_live_stream_port"] = self::getDjLiveStreamPort();
+ $settings["dj_live_stream_mp"] = self::getDjLiveStreamMountPoint();
+ $settings["off_air_meta"] = self::getOffAirMeta();
+ $settings["icecast_vorbis_metadata"] = self::getIcecastVorbisMetadata();
+ $settings["output_sound_device"] = self::getOutputSoundDevice();
+ $settings["output_sound_device_type"] = self::getOutputSoundDeviceType();
+ return $settings;
}
@@ -211,7 +212,10 @@ class Application_Model_StreamSetting
{
$stream_setting = CcStreamSettingQuery::create()->filterByDbKeyName($key)->findOne();
if (is_null($stream_setting)) {
- throw new Exception("Keyname $key does not exist!");
+ //throw new Exception("Keyname $key does not exist!");
+ $stream_setting = new CcStreamSetting();
+ $stream_setting->setDbKeyName($key);
+ $stream_setting->setDbType("");
}
$stream_setting->setDbValue($value);
@@ -411,7 +415,7 @@ class Application_Model_StreamSetting
public static function getMasterLiveStreamPort()
{
- return self::getValue("master_live_stream_port");
+ return self::getValue("master_live_stream_port", 8001);
}
public static function setMasterLiveStreamMountPoint($value)
@@ -421,7 +425,7 @@ class Application_Model_StreamSetting
public static function getMasterLiveStreamMountPoint()
{
- return self::getValue("master_live_stream_mp");
+ return self::getValue("master_live_stream_mp", "/master");
}
public static function setDjLiveStreamPort($value)
@@ -431,7 +435,7 @@ class Application_Model_StreamSetting
public static function getDjLiveStreamPort()
{
- return self::getValue("dj_live_stream_port");
+ return self::getValue("dj_live_stream_port", 8001);
}
public static function setDjLiveStreamMountPoint($value)
@@ -441,7 +445,7 @@ class Application_Model_StreamSetting
public static function getDjLiveStreamMountPoint()
{
- return self::getValue("dj_live_stream_mp");
+ return self::getValue("dj_live_stream_mp", "/show");
}
public static function getAdminUser($stream){
@@ -488,4 +492,16 @@ class Application_Model_StreamSetting
public static function SetListenerStatError($key, $v) {
self::setValue($key, $v, 'string');
}
+
+ public static function getIcecastVorbisMetadata() {
+ return self::getValue("icecast_vorbis_metadata", "");
+ }
+
+ public static function getOutputSoundDevice() {
+ return self::getValue("output_sound_device", "false");
+ }
+
+ public static function getOutputSoundDeviceType() {
+ return self::getValue("output_sound_device_type", "");
+ }
}
diff --git a/airtime_mvc/application/services/ShowFormService.php b/airtime_mvc/application/services/ShowFormService.php
index c1f164c34..fb58e7e6f 100644
--- a/airtime_mvc/application/services/ShowFormService.php
+++ b/airtime_mvc/application/services/ShowFormService.php
@@ -430,6 +430,7 @@ class Application_Service_ShowFormService
->filterByDbShowId($this->ccShow->getDbId())
->filterByDbModifiedInstance(false)
->filterByDbStarts(gmdate("Y-m-d H:i:s"), Criteria::GREATER_THAN)
+ ->orderByDbStarts()
->findOne();
$starts = new DateTime($ccShowInstance->getDbStarts(), new DateTimeZone("UTC"));
diff --git a/airtime_mvc/application/views/scripts/embed/player.phtml b/airtime_mvc/application/views/scripts/embed/player.phtml
new file mode 100644
index 000000000..01543cd0d
--- /dev/null
+++ b/airtime_mvc/application/views/scripts/embed/player.phtml
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/airtime_mvc/application/views/scripts/form/player.phtml b/airtime_mvc/application/views/scripts/form/player.phtml
new file mode 100644
index 000000000..bedd3f099
--- /dev/null
+++ b/airtime_mvc/application/views/scripts/form/player.phtml
@@ -0,0 +1,29 @@
+
+
+
+ element->getElement('player_preview_label')->renderLabel(); ?>
+
+
+
+ element->getElement('player_embed_src')->getValue(); ?>
+
+
+
+ Customize the player by configuring the options below. When you are done,
+ copy the embeddable code below and paste it into your website's HTML.
+
+
+ element->getElement('player_title')->render(); ?>
+
+ element->getElement('player_stream_mode')->render(); ?>
+
+ element->getElement('player_stream_url'); ?>
+
+ element->getElement('player_embed_src')->render(); ?>
+
+ element->getElement('player_display_track_metadata'); ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/airtime_mvc/application/views/scripts/form/stream-setting-form.phtml b/airtime_mvc/application/views/scripts/form/stream-setting-form.phtml
index 6b76ab84a..a8d61d247 100644
--- a/airtime_mvc/application/views/scripts/form/stream-setting-form.phtml
+++ b/airtime_mvc/application/views/scripts/form/stream-setting-form.phtml
@@ -14,6 +14,13 @@
element->getElement('enable')?>
+
+
+ element->getElement('mobile')->getLabel() ?>
+
+
+ element->getElement('mobile')?>
+
element->getElement('type')->getLabel()?>
diff --git a/airtime_mvc/application/views/scripts/player/customize.phtml b/airtime_mvc/application/views/scripts/player/customize.phtml
new file mode 100644
index 000000000..56c70f8a4
--- /dev/null
+++ b/airtime_mvc/application/views/scripts/player/customize.phtml
@@ -0,0 +1,12 @@
+
diff --git a/airtime_mvc/build/sql/defaultdata.sql b/airtime_mvc/build/sql/defaultdata.sql
index 3c1a60752..438dfc979 100644
--- a/airtime_mvc/build/sql/defaultdata.sql
+++ b/airtime_mvc/build/sql/defaultdata.sql
@@ -358,3 +358,21 @@ INSERT INTO cc_pref (subjid, keystr, valstr) VALUES (1, 'user_timezone', 'UTC');
INSERT INTO cc_pref (keystr, valstr) VALUES ('import_timestamp', '0');
--end added in 2.5.2
+
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_enable', 'false', 'boolean');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_output', 'icecast', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_name', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_type', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_bitrate', '', 'integer');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_host', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_port', '', 'integer');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_user', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_pass', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_admin_user', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_admin_pass', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_mount', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_url', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_description', '', 'string');
+INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s4_genre', '', 'string');
+INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s4_channels', 'stereo', 'string');
+
diff --git a/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo
index 86c47eebc..838bec92c 100644
Binary files a/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/az/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo
index 2740f9b33..332ac8e71 100644
Binary files a/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/de_AT/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo
index e2dc780f6..9be2d543a 100644
Binary files a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo
index 7b753ebc0..ee265c804 100644
Binary files a/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/hy_AM/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo
index 05594a349..10c20223a 100644
Binary files a/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/ka/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.mo
index 07a557786..3fea198d9 100644
Binary files a/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.po b/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.po
index 8d6bc8fe0..d63731946 100644
--- a/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.po
+++ b/airtime_mvc/locale/nl_NL/LC_MESSAGES/airtime.po
@@ -20,76 +20,59 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5
-#: airtime_mvc/application/controllers/LocaleController.php:30
#: airtime_mvc/application/controllers/LocaleController.php:28
msgid "Audio Player"
-msgstr ""
+msgstr "Audio Player"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:38
#: airtime_mvc/application/layouts/scripts/layout.phtml:27
msgid "Logout"
-msgstr ""
+msgstr "loguit"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:53
-#: airtime_mvc/application/layouts/scripts/layout.phtml:79
#: airtime_mvc/application/layouts/scripts/layout.phtml:42
#: airtime_mvc/application/layouts/scripts/layout.phtml:68
msgid "Play"
-msgstr ""
+msgstr "Play"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:54
-#: airtime_mvc/application/layouts/scripts/layout.phtml:80
#: airtime_mvc/application/layouts/scripts/layout.phtml:43
#: airtime_mvc/application/layouts/scripts/layout.phtml:69
msgid "Stop"
-msgstr ""
+msgstr "Stop"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:58
-#: airtime_mvc/application/forms/SmartBlockCriteria.php:55
-#: airtime_mvc/application/controllers/LocaleController.php:272
-#: airtime_mvc/application/models/Block.php:1347
#: airtime_mvc/application/layouts/scripts/layout.phtml:47
+#: airtime_mvc/application/forms/SmartBlockCriteria.php:55
#: airtime_mvc/application/controllers/LocaleController.php:270
+#: airtime_mvc/application/models/Block.php:1347
msgid "Cue In"
-msgstr ""
+msgstr "Cue In"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:60
#: airtime_mvc/application/layouts/scripts/layout.phtml:49
msgid "Set Cue In"
-msgstr ""
+msgstr "Set Cue In"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:65
-#: airtime_mvc/application/forms/SmartBlockCriteria.php:56
-#: airtime_mvc/application/controllers/LocaleController.php:273
-#: airtime_mvc/application/models/Block.php:1348
#: airtime_mvc/application/layouts/scripts/layout.phtml:54
+#: airtime_mvc/application/forms/SmartBlockCriteria.php:56
#: airtime_mvc/application/controllers/LocaleController.php:271
+#: airtime_mvc/application/models/Block.php:1348
msgid "Cue Out"
-msgstr ""
+msgstr "Cue Out"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:67
#: airtime_mvc/application/layouts/scripts/layout.phtml:56
msgid "Set Cue Out"
-msgstr ""
+msgstr "Set Cue Out"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:84
#: airtime_mvc/application/layouts/scripts/layout.phtml:73
msgid "Cursor"
-msgstr ""
+msgstr "Cursor"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:85
-#: airtime_mvc/application/controllers/LocaleController.php:274
#: airtime_mvc/application/layouts/scripts/layout.phtml:74
#: airtime_mvc/application/controllers/LocaleController.php:272
msgid "Fade In"
-msgstr ""
+msgstr "Infaden"
-#: airtime_mvc/application/layouts/scripts/layout.phtml:86
-#: airtime_mvc/application/controllers/LocaleController.php:275
#: airtime_mvc/application/layouts/scripts/layout.phtml:75
#: airtime_mvc/application/controllers/LocaleController.php:273
msgid "Fade Out"
-msgstr ""
+msgstr "uitfaden"
#: airtime_mvc/application/layouts/scripts/login.phtml:24
#, php-format
@@ -97,45 +80,46 @@ msgid ""
"%1$s copyright © %2$s All rights reserved.%3$sMaintained and "
"distributed under the %4$s by %5$s"
msgstr ""
+"%1$s copyright © %2$s Alle rechten voorbehouden. %3$s Maintained en "
+"gedistribueerd onder de %4$s door %5$s"
#: airtime_mvc/application/layouts/scripts/livestream.phtml:9
#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2
-#: airtime_mvc/application/layouts/scripts/bare.phtml:5
msgid "Live stream"
-msgstr ""
+msgstr "Live stream"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:48
msgid "Enabled:"
-msgstr ""
+msgstr "Ingeschakeld"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:57
msgid "Stream Type:"
-msgstr ""
+msgstr "Stream Type:"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:67
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15
msgid "Bit Rate:"
-msgstr ""
+msgstr "Bit Rate:"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:77
msgid "Service Type:"
-msgstr ""
+msgstr "Service Type:"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:87
msgid "Channels:"
-msgstr ""
+msgstr "kanalen:"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:88
msgid "1 - Mono"
-msgstr ""
+msgstr "1- Mono"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:88
msgid "2 - Stereo"
-msgstr ""
+msgstr "2 - Stereo"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:97
msgid "Server"
-msgstr ""
+msgstr "Server"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:100
#: airtime_mvc/application/forms/StreamSettingSubForm.php:123
@@ -149,191 +133,169 @@ msgstr ""
#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31
#: airtime_mvc/application/forms/DateRange.php:35
#: airtime_mvc/application/forms/DateRange.php:63
-#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26
#: airtime_mvc/application/forms/LiveStreamingPreferences.php:99
#: airtime_mvc/application/forms/LiveStreamingPreferences.php:118
+#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26
msgid "Invalid character entered"
-msgstr ""
+msgstr "Ongeldig teken ingevoerd"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:109
-#: airtime_mvc/application/forms/EmailServerPreferences.php:99
#: airtime_mvc/application/forms/EmailServerPreferences.php:100
msgid "Port"
-msgstr ""
+msgstr "poort"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:112
#: airtime_mvc/application/forms/LiveStreamingPreferences.php:90
#: airtime_mvc/application/forms/LiveStreamingPreferences.php:109
msgid "Only numbers are allowed."
-msgstr ""
+msgstr "Alleen cijfers zijn toegestaan."
#: airtime_mvc/application/forms/StreamSettingSubForm.php:120
#: airtime_mvc/application/forms/PasswordChange.php:17
-#: airtime_mvc/application/forms/EmailServerPreferences.php:81
#: airtime_mvc/application/forms/EmailServerPreferences.php:82
msgid "Password"
-msgstr ""
+msgstr "wachtwoord"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:132
#: airtime_mvc/application/forms/SmartBlockCriteria.php:59
-#: airtime_mvc/application/controllers/LocaleController.php:75
+#: airtime_mvc/application/controllers/LocaleController.php:73
#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10
#: airtime_mvc/application/models/Block.php:1351
#: airtime_mvc/application/services/HistoryService.php:1112
-#: airtime_mvc/application/controllers/LocaleController.php:73
-#: airtime_mvc/application/services/HistoryService.php:1109
msgid "Genre"
-msgstr ""
+msgstr "Genre"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:141
msgid "URL"
-msgstr ""
+msgstr "URL"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:153
#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:9
msgid "Name"
-msgstr ""
+msgstr "naam"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:162
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:41
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:55
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:57
msgid "Description"
-msgstr ""
+msgstr "Beschrijving"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:171
msgid "Mount Point"
-msgstr ""
+msgstr "Aankoppelpunt"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:183
#: airtime_mvc/application/forms/PasswordRestore.php:25
#: airtime_mvc/application/views/scripts/user/add-user.phtml:18
msgid "Username"
-msgstr ""
+msgstr "gebuikersnaam"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:195
msgid "Admin User"
-msgstr ""
+msgstr "admin gebuiker "
#: airtime_mvc/application/forms/StreamSettingSubForm.php:207
msgid "Admin Password"
-msgstr ""
+msgstr "admin wachtwoord "
#: airtime_mvc/application/forms/StreamSettingSubForm.php:218
-#: airtime_mvc/application/controllers/LocaleController.php:163
#: airtime_mvc/application/controllers/LocaleController.php:161
msgid "Getting information from the server..."
-msgstr ""
+msgstr "Het verkrijgen van informatie van de server ..."
#: airtime_mvc/application/forms/StreamSettingSubForm.php:232
msgid "Server cannot be empty."
-msgstr ""
+msgstr "Server kan niet leeg zijn"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:237
msgid "Port cannot be empty."
-msgstr ""
+msgstr "poort kan niet leeg zijn"
#: airtime_mvc/application/forms/StreamSettingSubForm.php:243
msgid "Mount cannot be empty with Icecast server."
-msgstr ""
+msgstr "Mount kan niet leeg zijn met Icecast server"
-#: airtime_mvc/application/forms/EditAudioMD.php:25
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9
#: airtime_mvc/application/forms/EditAudioMD.php:19
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9
msgid "Title:"
-msgstr ""
+msgstr "Titel"
-#: airtime_mvc/application/forms/EditAudioMD.php:40
+#: airtime_mvc/application/forms/EditAudioMD.php:26
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:148
-#: airtime_mvc/application/forms/EditAudioMD.php:26
msgid "Creator:"
-msgstr ""
+msgstr "Aangemaakt door"
-#: airtime_mvc/application/forms/EditAudioMD.php:50
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11
#: airtime_mvc/application/forms/EditAudioMD.php:33
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11
msgid "Album:"
-msgstr ""
+msgstr "Album"
-#: airtime_mvc/application/forms/EditAudioMD.php:68
+#: airtime_mvc/application/forms/EditAudioMD.php:47
#: airtime_mvc/application/forms/AddShowWhat.php:45
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17
-#: airtime_mvc/application/forms/EditAudioMD.php:47
msgid "Genre:"
-msgstr ""
+msgstr "genre:"
-#: airtime_mvc/application/forms/EditAudioMD.php:78
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18
#: airtime_mvc/application/forms/EditAudioMD.php:55
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18
msgid "Year:"
-msgstr ""
+msgstr "Jaar"
-#: airtime_mvc/application/forms/EditAudioMD.php:91
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19
#: airtime_mvc/application/forms/EditAudioMD.php:67
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19
msgid "Label:"
-msgstr ""
+msgstr "label"
-#: airtime_mvc/application/forms/EditAudioMD.php:101
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21
#: airtime_mvc/application/forms/EditAudioMD.php:74
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21
msgid "Composer:"
-msgstr ""
+msgstr "schrijver van een muziekwerk"
-#: airtime_mvc/application/forms/EditAudioMD.php:111
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:22
#: airtime_mvc/application/forms/EditAudioMD.php:81
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:22
msgid "Conductor:"
-msgstr ""
+msgstr "Conductor:"
-#: airtime_mvc/application/forms/EditAudioMD.php:121
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16
#: airtime_mvc/application/forms/EditAudioMD.php:88
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16
msgid "Mood:"
-msgstr ""
+msgstr "Mood:"
-#: airtime_mvc/application/forms/EditAudioMD.php:131
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20
#: airtime_mvc/application/forms/EditAudioMD.php:96
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20
msgid "BPM:"
-msgstr ""
+msgstr "BPM:"
-#: airtime_mvc/application/forms/EditAudioMD.php:141
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:23
#: airtime_mvc/application/forms/EditAudioMD.php:105
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:23
msgid "Copyright:"
-msgstr ""
+msgstr "Copyright:"
-#: airtime_mvc/application/forms/EditAudioMD.php:151
#: airtime_mvc/application/forms/EditAudioMD.php:112
msgid "ISRC Number:"
-msgstr ""
+msgstr "ISRC nummer:"
-#: airtime_mvc/application/forms/EditAudioMD.php:161
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:25
#: airtime_mvc/application/forms/EditAudioMD.php:119
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:25
msgid "Website:"
-msgstr ""
+msgstr "Website:"
-#: airtime_mvc/application/forms/EditAudioMD.php:171
+#: airtime_mvc/application/forms/EditAudioMD.php:126
#: airtime_mvc/application/forms/Login.php:52
#: airtime_mvc/application/forms/EditUser.php:118
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:26
-#: airtime_mvc/application/forms/EditAudioMD.php:126
-#: airtime_mvc/application/forms/Login.php:48
-#: airtime_mvc/application/forms/EditUser.php:114
msgid "Language:"
-msgstr ""
+msgstr "Taal:"
-#: airtime_mvc/application/forms/EditAudioMD.php:182
+#: airtime_mvc/application/forms/EditAudioMD.php:135
#: airtime_mvc/application/forms/AddUser.php:110
-#: airtime_mvc/application/forms/BillingClient.php:193
#: airtime_mvc/application/forms/EditHistory.php:131
-#: airtime_mvc/application/forms/SupportSettings.php:144
-#: airtime_mvc/application/controllers/LocaleController.php:285
-#: airtime_mvc/application/views/scripts/form/edit-user.phtml:171
+#: airtime_mvc/application/forms/SupportSettings.php:161
+#: airtime_mvc/application/controllers/LocaleController.php:283
+#: airtime_mvc/application/views/scripts/form/edit-user.phtml:163
#: airtime_mvc/application/views/scripts/playouthistorytemplate/template-contents.phtml:85
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:16
#: airtime_mvc/application/views/scripts/preference/index.phtml:6
@@ -342,150 +304,102 @@ msgstr ""
#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:116
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:27
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:24
-#: airtime_mvc/application/forms/EditAudioMD.php:135
-#: airtime_mvc/application/forms/SupportSettings.php:161
-#: airtime_mvc/application/controllers/LocaleController.php:283
-#: airtime_mvc/application/views/scripts/form/edit-user.phtml:163
-#: airtime_mvc/application/views/scripts/form/edit-user.phtml:160
-#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:115
-#: airtime_mvc/application/forms/AddUser.php:106
-#: airtime_mvc/application/forms/SupportSettings.php:158
msgid "Save"
-msgstr ""
+msgstr "opslaan"
-#: airtime_mvc/application/forms/EditAudioMD.php:192
+#: airtime_mvc/application/forms/EditAudioMD.php:145
#: airtime_mvc/application/forms/EditHistory.php:141
#: airtime_mvc/application/forms/PasswordRestore.php:46
-#: airtime_mvc/application/controllers/LocaleController.php:286
-#: airtime_mvc/application/controllers/LocaleController.php:309
-#: airtime_mvc/application/forms/EditAudioMD.php:145
#: airtime_mvc/application/controllers/LocaleController.php:284
#: airtime_mvc/application/controllers/LocaleController.php:307
msgid "Cancel"
-msgstr ""
+msgstr "anuleren"
#: airtime_mvc/application/forms/AddUser.php:29
#: airtime_mvc/application/forms/Login.php:23
#: airtime_mvc/application/forms/EditUser.php:36
-#: airtime_mvc/application/forms/Login.php:19
-#: airtime_mvc/application/forms/EditUser.php:32
-#: airtime_mvc/application/forms/AddUser.php:25
msgid "Username:"
-msgstr ""
+msgstr "gebuikersnaam"
#: airtime_mvc/application/forms/AddUser.php:38
#: airtime_mvc/application/forms/Login.php:38
-#: airtime_mvc/application/forms/BillingClient.php:172
#: airtime_mvc/application/forms/EditUser.php:47
-#: airtime_mvc/application/forms/Login.php:34
-#: airtime_mvc/application/forms/EditUser.php:43
-#: airtime_mvc/application/forms/AddUser.php:34
msgid "Password:"
-msgstr ""
+msgstr "wachtwoord"
#: airtime_mvc/application/forms/AddUser.php:46
-#: airtime_mvc/application/forms/BillingClient.php:181
#: airtime_mvc/application/forms/EditUser.php:56
-#: airtime_mvc/application/forms/EditUser.php:52
-#: airtime_mvc/application/forms/AddUser.php:42
msgid "Verify Password:"
-msgstr ""
+msgstr "Wachtwoord verifiëren:"
#: airtime_mvc/application/forms/AddUser.php:55
#: airtime_mvc/application/forms/EditUser.php:66
-#: airtime_mvc/application/forms/EditUser.php:62
-#: airtime_mvc/application/forms/AddUser.php:51
msgid "Firstname:"
-msgstr ""
+msgstr "voornaam"
#: airtime_mvc/application/forms/AddUser.php:61
#: airtime_mvc/application/forms/EditUser.php:74
-#: airtime_mvc/application/forms/EditUser.php:70
-#: airtime_mvc/application/forms/AddUser.php:57
msgid "Lastname:"
-msgstr ""
+msgstr "achternaam"
#: airtime_mvc/application/forms/AddUser.php:67
-#: airtime_mvc/application/forms/SupportSettings.php:45
+#: airtime_mvc/application/forms/SupportSettings.php:46
#: airtime_mvc/application/forms/RegisterAirtime.php:51
#: airtime_mvc/application/forms/EditUser.php:82
-#: airtime_mvc/application/forms/SupportSettings.php:46
-#: airtime_mvc/application/forms/EditUser.php:78
-#: airtime_mvc/application/forms/AddUser.php:63
msgid "Email:"
-msgstr ""
+msgstr "e-mail"
#: airtime_mvc/application/forms/AddUser.php:76
#: airtime_mvc/application/forms/EditUser.php:93
-#: airtime_mvc/application/forms/EditUser.php:89
-#: airtime_mvc/application/forms/AddUser.php:72
msgid "Mobile Phone:"
-msgstr ""
+msgstr "mobiel nummer"
#: airtime_mvc/application/forms/AddUser.php:82
#: airtime_mvc/application/forms/EditUser.php:101
-#: airtime_mvc/application/forms/EditUser.php:97
-#: airtime_mvc/application/forms/AddUser.php:78
msgid "Skype:"
-msgstr ""
+msgstr "skype"
#: airtime_mvc/application/forms/AddUser.php:88
#: airtime_mvc/application/forms/EditUser.php:109
-#: airtime_mvc/application/forms/EditUser.php:105
-#: airtime_mvc/application/forms/AddUser.php:84
msgid "Jabber:"
-msgstr ""
+msgstr "Jabber:"
#: airtime_mvc/application/forms/AddUser.php:95
-#: airtime_mvc/application/forms/AddUser.php:91
msgid "User Type:"
-msgstr ""
+msgstr "Gebruiker Type :"
#: airtime_mvc/application/forms/AddUser.php:99
-#: airtime_mvc/application/controllers/LocaleController.php:315
#: airtime_mvc/application/controllers/LocaleController.php:313
-#: airtime_mvc/application/forms/AddUser.php:95
msgid "Guest"
-msgstr ""
+msgstr "gast"
#: airtime_mvc/application/forms/AddUser.php:100
-#: airtime_mvc/application/controllers/LocaleController.php:313
#: airtime_mvc/application/controllers/LocaleController.php:311
-#: airtime_mvc/application/forms/AddUser.php:96
msgid "DJ"
-msgstr ""
+msgstr "DJ"
#: airtime_mvc/application/forms/AddUser.php:101
-#: airtime_mvc/application/controllers/LocaleController.php:314
#: airtime_mvc/application/controllers/LocaleController.php:312
-#: airtime_mvc/application/forms/AddUser.php:97
msgid "Program Manager"
-msgstr ""
+msgstr "Programmabeheer"
#: airtime_mvc/application/forms/AddUser.php:102
-#: airtime_mvc/application/controllers/LocaleController.php:312
#: airtime_mvc/application/controllers/LocaleController.php:310
-#: airtime_mvc/application/forms/AddUser.php:98
msgid "Admin"
-msgstr ""
+msgstr "Admin"
#: airtime_mvc/application/forms/AddUser.php:120
-#: airtime_mvc/application/forms/EditUser.php:151
#: airtime_mvc/application/forms/EditUser.php:139
-#: airtime_mvc/application/forms/EditUser.php:135
-#: airtime_mvc/application/forms/AddUser.php:116
msgid "Login name is not unique."
-msgstr ""
+msgstr "Login naam is niet uniek."
-#: airtime_mvc/application/forms/AddShowStyle.php:12
#: airtime_mvc/application/forms/AddShowStyle.php:10
msgid "Background Colour:"
-msgstr ""
+msgstr "achtergrond kleur"
-#: airtime_mvc/application/forms/AddShowStyle.php:31
#: airtime_mvc/application/forms/AddShowStyle.php:29
msgid "Text Colour:"
-msgstr ""
+msgstr "tekst kleur"
#: airtime_mvc/application/forms/AddShowStyle.php:49
msgid "Current Logo:"
@@ -508,104 +422,94 @@ msgstr ""
#: airtime_mvc/application/forms/ShowBuilder.php:18
#: airtime_mvc/application/forms/DateRange.php:16
msgid "Date Start:"
-msgstr ""
+msgstr "datum start"
#: airtime_mvc/application/forms/ShowBuilder.php:46
#: airtime_mvc/application/forms/DateRange.php:44
#: airtime_mvc/application/forms/AddShowRepeats.php:56
msgid "Date End:"
-msgstr ""
+msgstr "datum einde"
#: airtime_mvc/application/forms/ShowBuilder.php:72
msgid "Show:"
-msgstr ""
+msgstr "Show"
#: airtime_mvc/application/forms/ShowBuilder.php:80
msgid "All My Shows:"
-msgstr ""
+msgstr "al mij shows"
#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15
#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6
msgid "days"
-msgstr ""
+msgstr "dagen"
#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:71
#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:66
msgid "Day must be specified"
-msgstr ""
+msgstr "Dag moet worden opgegeven"
#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:76
#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:71
msgid "Time must be specified"
-msgstr ""
+msgstr "Tijd moet worden opgegeven"
#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:103
#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:94
msgid "Must wait at least 1 hour to rebroadcast"
-msgstr ""
+msgstr "Ten minste 1 uur opnieuw uitzenden moet wachten"
#: airtime_mvc/application/forms/WatchedDirPreferences.php:14
msgid "Import Folder:"
-msgstr ""
+msgstr "mappen importeren"
#: airtime_mvc/application/forms/WatchedDirPreferences.php:25
msgid "Watched Folders:"
-msgstr ""
+msgstr "Gecontroleerde mappen:"
#: airtime_mvc/application/forms/WatchedDirPreferences.php:40
msgid "Not a valid Directory"
-msgstr ""
+msgstr "Niet een geldige map"
#: airtime_mvc/application/forms/AddShowWho.php:10
msgid "Search Users:"
-msgstr ""
+msgstr "zoek gebruikers"
#: airtime_mvc/application/forms/AddShowWho.php:24
msgid "DJs:"
-msgstr ""
+msgstr "DJs:"
#: airtime_mvc/application/forms/Login.php:67
#: airtime_mvc/application/views/scripts/login/index.phtml:3
-#: airtime_mvc/application/forms/Login.php:65
msgid "Login"
-msgstr ""
+msgstr "Inloggen"
#: airtime_mvc/application/forms/Login.php:86
-#: airtime_mvc/application/forms/Login.php:83
msgid "Type the characters you see in the picture below."
-msgstr ""
+msgstr "Typ de tekens die u ziet in de afbeelding hieronder."
-#: airtime_mvc/application/forms/GeneralPreferences.php:20
-#: airtime_mvc/application/forms/SupportSettings.php:20
-#: airtime_mvc/application/forms/RegisterAirtime.php:30
#: airtime_mvc/application/forms/GeneralPreferences.php:21
#: airtime_mvc/application/forms/SupportSettings.php:21
+#: airtime_mvc/application/forms/RegisterAirtime.php:30
msgid "Station Name"
-msgstr ""
+msgstr "station naam"
-#: airtime_mvc/application/forms/GeneralPreferences.php:32
#: airtime_mvc/application/forms/GeneralPreferences.php:33
msgid "Default Crossfade Duration (s):"
-msgstr ""
+msgstr "Standaardduur Crossfade (s):"
-#: airtime_mvc/application/forms/GeneralPreferences.php:39
-#: airtime_mvc/application/forms/GeneralPreferences.php:58
-#: airtime_mvc/application/forms/GeneralPreferences.php:77
#: airtime_mvc/application/forms/GeneralPreferences.php:40
#: airtime_mvc/application/forms/GeneralPreferences.php:59
#: airtime_mvc/application/forms/GeneralPreferences.php:78
msgid "enter a time in seconds 0{.0}"
-msgstr ""
+msgstr "Voer een tijd in seconden 0 {.0}"
-#: airtime_mvc/application/forms/GeneralPreferences.php:51
#: airtime_mvc/application/forms/GeneralPreferences.php:52
msgid "Default Fade In (s):"
-msgstr ""
+msgstr "standaard fade in (s):"
-#: airtime_mvc/application/forms/GeneralPreferences.php:70
#: airtime_mvc/application/forms/GeneralPreferences.php:71
msgid "Default Fade Out (s):"
-msgstr ""
+msgstr "standaard fade uit (s):"
#: airtime_mvc/application/forms/GeneralPreferences.php:88
#: airtime_mvc/application/forms/GeneralPreferences.php:89
@@ -2650,11 +2554,10 @@ msgstr ""
msgid "Delete selected item(s)?"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:264
-#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5
#: airtime_mvc/application/controllers/LocaleController.php:262
+#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5
msgid "Start"
-msgstr ""
+msgstr "Start"
#: airtime_mvc/application/controllers/LocaleController.php:265
#: airtime_mvc/application/controllers/LocaleController.php:263
@@ -2762,25 +2665,22 @@ msgstr ""
msgid "in use"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:306
#: airtime_mvc/application/controllers/LocaleController.php:304
msgid "Disk"
-msgstr ""
+msgstr "hardeschijf"
#: airtime_mvc/application/controllers/LocaleController.php:308
#: airtime_mvc/application/controllers/LocaleController.php:306
msgid "Look in"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:310
#: airtime_mvc/application/controllers/LocaleController.php:308
msgid "Open"
-msgstr ""
+msgstr "open"
-#: airtime_mvc/application/controllers/LocaleController.php:316
#: airtime_mvc/application/controllers/LocaleController.php:314
msgid "Guests can do the following:"
-msgstr ""
+msgstr "Gasten kunnen het volgende doen:"
#: airtime_mvc/application/controllers/LocaleController.php:317
#: airtime_mvc/application/controllers/LocaleController.php:315
@@ -2802,10 +2702,9 @@ msgstr ""
msgid "Manage assigned show content"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:321
#: airtime_mvc/application/controllers/LocaleController.php:319
msgid "Import media files"
-msgstr ""
+msgstr "Mediabestanden importeren"
#: airtime_mvc/application/controllers/LocaleController.php:322
#: airtime_mvc/application/controllers/LocaleController.php:320
@@ -2857,10 +2756,9 @@ msgstr ""
msgid "Manage watched folders"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:333
#: airtime_mvc/application/controllers/LocaleController.php:331
msgid "View system status"
-msgstr ""
+msgstr "Bekijk systeem status"
#: airtime_mvc/application/controllers/LocaleController.php:334
#: airtime_mvc/application/controllers/LocaleController.php:332
@@ -2872,20 +2770,17 @@ msgstr ""
msgid "View listener stats"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:337
#: airtime_mvc/application/controllers/LocaleController.php:335
msgid "Show / hide columns"
-msgstr ""
+msgstr "Geef weer / verberg kolommen"
-#: airtime_mvc/application/controllers/LocaleController.php:339
#: airtime_mvc/application/controllers/LocaleController.php:337
msgid "From {from} to {to}"
-msgstr ""
+msgstr "Van {from} tot {to}"
-#: airtime_mvc/application/controllers/LocaleController.php:340
#: airtime_mvc/application/controllers/LocaleController.php:338
msgid "kbps"
-msgstr ""
+msgstr "kbps"
#: airtime_mvc/application/controllers/LocaleController.php:341
#: airtime_mvc/application/controllers/LocaleController.php:339
@@ -2897,110 +2792,88 @@ msgstr ""
msgid "hh:mm:ss.t"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:343
#: airtime_mvc/application/controllers/LocaleController.php:341
msgid "kHz"
-msgstr ""
+msgstr "kHz"
-#: airtime_mvc/application/controllers/LocaleController.php:346
#: airtime_mvc/application/controllers/LocaleController.php:344
msgid "Su"
-msgstr ""
+msgstr "Zo"
-#: airtime_mvc/application/controllers/LocaleController.php:347
#: airtime_mvc/application/controllers/LocaleController.php:345
msgid "Mo"
-msgstr ""
+msgstr "Ma"
-#: airtime_mvc/application/controllers/LocaleController.php:348
#: airtime_mvc/application/controllers/LocaleController.php:346
msgid "Tu"
-msgstr ""
+msgstr "Di"
-#: airtime_mvc/application/controllers/LocaleController.php:349
#: airtime_mvc/application/controllers/LocaleController.php:347
msgid "We"
-msgstr ""
+msgstr "Wo"
-#: airtime_mvc/application/controllers/LocaleController.php:350
#: airtime_mvc/application/controllers/LocaleController.php:348
msgid "Th"
-msgstr ""
+msgstr "Do"
-#: airtime_mvc/application/controllers/LocaleController.php:351
#: airtime_mvc/application/controllers/LocaleController.php:349
msgid "Fr"
-msgstr ""
+msgstr "Vr"
-#: airtime_mvc/application/controllers/LocaleController.php:352
#: airtime_mvc/application/controllers/LocaleController.php:350
msgid "Sa"
-msgstr ""
+msgstr "Za"
-#: airtime_mvc/application/controllers/LocaleController.php:353
-#: airtime_mvc/application/controllers/LocaleController.php:381
-#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3
#: airtime_mvc/application/controllers/LocaleController.php:351
#: airtime_mvc/application/controllers/LocaleController.php:379
+#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3
msgid "Close"
-msgstr ""
+msgstr "Sluiten"
-#: airtime_mvc/application/controllers/LocaleController.php:355
#: airtime_mvc/application/controllers/LocaleController.php:353
msgid "Hour"
-msgstr ""
+msgstr "Uur"
-#: airtime_mvc/application/controllers/LocaleController.php:356
#: airtime_mvc/application/controllers/LocaleController.php:354
msgid "Minute"
-msgstr ""
+msgstr "Minuut"
-#: airtime_mvc/application/controllers/LocaleController.php:357
#: airtime_mvc/application/controllers/LocaleController.php:355
msgid "Done"
-msgstr ""
+msgstr "Klaar"
-#: airtime_mvc/application/controllers/LocaleController.php:360
#: airtime_mvc/application/controllers/LocaleController.php:358
msgid "Select files"
-msgstr ""
+msgstr "Selecteer bestanden"
-#: airtime_mvc/application/controllers/LocaleController.php:361
-#: airtime_mvc/application/controllers/LocaleController.php:362
#: airtime_mvc/application/controllers/LocaleController.php:359
#: airtime_mvc/application/controllers/LocaleController.php:360
msgid "Add files to the upload queue and click the start button."
-msgstr ""
+msgstr "Voeg bestanden aan de upload wachtrij toe en klik op de begin knop"
-#: airtime_mvc/application/controllers/LocaleController.php:363
-#: airtime_mvc/application/controllers/LocaleController.php:364
+#: airtime_mvc/application/controllers/LocaleController.php:361
+#: airtime_mvc/application/controllers/LocaleController.php:362
#: airtime_mvc/application/configs/navigation.php:76
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:5
#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:8
-#: airtime_mvc/application/controllers/LocaleController.php:361
-#: airtime_mvc/application/controllers/LocaleController.php:362
msgid "Status"
-msgstr ""
+msgstr "Status"
-#: airtime_mvc/application/controllers/LocaleController.php:365
#: airtime_mvc/application/controllers/LocaleController.php:363
msgid "Add Files"
-msgstr ""
+msgstr "Bestanden toevoegen"
-#: airtime_mvc/application/controllers/LocaleController.php:366
#: airtime_mvc/application/controllers/LocaleController.php:364
msgid "Stop Upload"
-msgstr ""
+msgstr "Stop upload"
-#: airtime_mvc/application/controllers/LocaleController.php:367
#: airtime_mvc/application/controllers/LocaleController.php:365
msgid "Start upload"
-msgstr ""
+msgstr "Begin upload"
-#: airtime_mvc/application/controllers/LocaleController.php:368
#: airtime_mvc/application/controllers/LocaleController.php:366
msgid "Add files"
-msgstr ""
+msgstr "Bestanden toevoegen"
#: airtime_mvc/application/controllers/LocaleController.php:369
#: airtime_mvc/application/controllers/LocaleController.php:367
@@ -3013,20 +2886,17 @@ msgstr ""
msgid "N/A"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:371
#: airtime_mvc/application/controllers/LocaleController.php:369
msgid "Drag files here."
-msgstr ""
+msgstr "Sleep bestanden hierheen."
-#: airtime_mvc/application/controllers/LocaleController.php:372
#: airtime_mvc/application/controllers/LocaleController.php:370
msgid "File extension error."
-msgstr ""
+msgstr "Bestandsextensie fout"
-#: airtime_mvc/application/controllers/LocaleController.php:373
#: airtime_mvc/application/controllers/LocaleController.php:371
msgid "File size error."
-msgstr ""
+msgstr "Bestandsgrote fout."
#: airtime_mvc/application/controllers/LocaleController.php:374
#: airtime_mvc/application/controllers/LocaleController.php:372
@@ -3038,31 +2908,27 @@ msgstr ""
msgid "Init error."
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:376
#: airtime_mvc/application/controllers/LocaleController.php:374
msgid "HTTP Error."
-msgstr ""
+msgstr "HTTP fout."
-#: airtime_mvc/application/controllers/LocaleController.php:377
#: airtime_mvc/application/controllers/LocaleController.php:375
msgid "Security error."
-msgstr ""
+msgstr "Beveiligingsfout."
-#: airtime_mvc/application/controllers/LocaleController.php:378
#: airtime_mvc/application/controllers/LocaleController.php:376
msgid "Generic error."
-msgstr ""
+msgstr "Generieke fout."
#: airtime_mvc/application/controllers/LocaleController.php:379
#: airtime_mvc/application/controllers/LocaleController.php:377
msgid "IO error."
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:380
#: airtime_mvc/application/controllers/LocaleController.php:378
#, php-format
msgid "File: %s"
-msgstr ""
+msgstr "Bestand: %s"
#: airtime_mvc/application/controllers/LocaleController.php:382
#: airtime_mvc/application/controllers/LocaleController.php:380
@@ -3080,15 +2946,13 @@ msgstr ""
msgid "Upload URL might be wrong or doesn't exist"
msgstr ""
-#: airtime_mvc/application/controllers/LocaleController.php:385
#: airtime_mvc/application/controllers/LocaleController.php:383
msgid "Error: File too large: "
-msgstr ""
+msgstr "Fout: Bestand is te groot"
-#: airtime_mvc/application/controllers/LocaleController.php:386
#: airtime_mvc/application/controllers/LocaleController.php:384
msgid "Error: Invalid file extension: "
-msgstr ""
+msgstr "Fout: Niet toegestane bestandsextensie "
#: airtime_mvc/application/controllers/LocaleController.php:388
#: airtime_mvc/application/views/scripts/playouthistorytemplate/index.phtml:25
@@ -3464,7 +3328,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:4
msgid "Service"
-msgstr ""
+msgstr "Dienst"
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:6
msgid "Uptime"
@@ -3476,7 +3340,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:8
msgid "Memory"
-msgstr ""
+msgstr "Geheugen"
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14
#, php-format
@@ -3485,7 +3349,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30
msgid "Disk Space"
-msgstr ""
+msgstr "Hardeschijf ruimte"
#: airtime_mvc/application/views/scripts/form/preferences.phtml:5
#: airtime_mvc/application/views/scripts/form/preferences.phtml:10
@@ -3704,15 +3568,15 @@ msgstr ""
#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:39
msgid "or"
-msgstr ""
+msgstr "of"
#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:40
msgid "and"
-msgstr ""
+msgstr "en"
#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63
msgid " to "
-msgstr ""
+msgstr "tot"
#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:120
#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:133
@@ -3771,31 +3635,31 @@ msgstr ""
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:11
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:11
msgid "New"
-msgstr ""
+msgstr "Nieuw"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14
msgid "New Playlist"
-msgstr ""
+msgstr "Nieuwe Playlist"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15
msgid "New Smart Block"
-msgstr ""
+msgstr "Nieuw Slim Blok"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:10
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:16
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:16
msgid "New Webstream"
-msgstr ""
+msgstr "Nieuwe Webstream"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:39
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:53
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:55
msgid "View / edit description"
-msgstr ""
+msgstr "Bekijk / bewerk beschrijving"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:52
msgid "Stream URL:"
@@ -3803,11 +3667,11 @@ msgstr ""
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:57
msgid "Default Length:"
-msgstr ""
+msgstr "Standaard lengte:"
#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:64
msgid "No webstream"
-msgstr ""
+msgstr "Geen webstream"
#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2
msgid "Stream Settings"
@@ -3836,7 +3700,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:5
#: airtime_mvc/application/views/scripts/library/library.phtml:10
msgid "Advanced Search Options"
-msgstr ""
+msgstr "Geadvanceerde zoek opties"
#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:23
msgid "previous"
@@ -3856,12 +3720,12 @@ msgstr ""
#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:42
msgid "stop"
-msgstr ""
+msgstr "Stop"
#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:60
#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90
msgid "mute"
-msgstr ""
+msgstr "dempen"
#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:63
#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91
@@ -3883,10 +3747,10 @@ msgid ""
"version or update your %sFlash plugin%s."
msgstr ""
-#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12
#: airtime_mvc/application/forms/EditAudioMD.php:40
+#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12
msgid "Track:"
-msgstr ""
+msgstr "track"
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13
#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:36
@@ -4005,11 +3869,11 @@ msgstr ""
#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3
msgid "Share"
-msgstr ""
+msgstr "Deel"
#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64
msgid "Select stream:"
-msgstr ""
+msgstr "Selecteer stream:"
#: airtime_mvc/application/views/scripts/dashboard/about.phtml:9
#, php-format
@@ -4025,7 +3889,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/login/password-change.phtml:3
msgid "New password"
-msgstr ""
+msgstr "Nieuw wachtwoord"
#: airtime_mvc/application/views/scripts/login/password-change.phtml:6
msgid "Please enter and confirm your new password in the fields below."
@@ -4047,7 +3911,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:7
msgid "Back to login screen"
-msgstr ""
+msgstr "Terug naar het inlog scherm"
#: airtime_mvc/application/views/scripts/login/index.phtml:7
#, php-format
@@ -4058,15 +3922,15 @@ msgstr ""
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:3
msgid "Previous:"
-msgstr ""
+msgstr "Vorige:"
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:10
msgid "Next:"
-msgstr ""
+msgstr "Volgende:"
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:24
msgid "Source Streams"
-msgstr ""
+msgstr "Bron Streams"
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:29
msgid "Master Source"
@@ -4074,7 +3938,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:38
msgid "Show Source"
-msgstr ""
+msgstr "Bron weergeven"
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45
msgid "Scheduled Play"
@@ -4086,7 +3950,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:55
msgid "Listen"
-msgstr ""
+msgstr "Luister"
#: airtime_mvc/application/views/scripts/partialviews/header.phtml:59
msgid "Station time"
@@ -4103,7 +3967,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9
msgid "My Account"
-msgstr ""
+msgstr "Mijn account"
#: airtime_mvc/application/views/scripts/billing/upgrade.phtml:172
msgid "Upgrade today to get more listeners and storage space!"
@@ -4210,7 +4074,7 @@ msgstr ""
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:72
#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:19
msgid "Fade in: "
-msgstr ""
+msgstr "Fade in:"
#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:70
#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:75
@@ -4273,25 +4137,23 @@ msgstr ""
#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10
msgid "What"
-msgstr ""
+msgstr "Wat"
#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14
msgid "When"
-msgstr ""
+msgstr "Wanneer"
#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:19
msgid "Live Stream Input"
msgstr ""
-#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:23
#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:29
msgid "Who"
-msgstr ""
+msgstr "Wie"
-#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:27
#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33
msgid "Style"
-msgstr ""
+msgstr "Stijl"
#: airtime_mvc/application/models/ShowBuilder.php:212
#, php-format
@@ -4583,37 +4445,35 @@ msgid "Must wait 1 hour to rebroadcast."
msgstr ""
#: airtime_mvc/application/services/HistoryService.php:1119
-#: airtime_mvc/application/services/HistoryService.php:1116
msgid "Track"
-msgstr ""
+msgstr "track"
#: airtime_mvc/application/services/HistoryService.php:1167
-#: airtime_mvc/application/services/HistoryService.php:1164
msgid "Played"
-msgstr ""
+msgstr "Gespeeld"
#: airtime_mvc/application/common/DateHelper.php:213
#, php-format
msgid "The year %s must be within the range of 1753 - 9999"
-msgstr ""
+msgstr "Het jaar %s moet binnen het bereik van 1753-9999"
#: airtime_mvc/application/common/DateHelper.php:216
#, php-format
msgid "%s-%s-%s is not a valid date"
-msgstr ""
+msgstr "%s-%s-%s dit is geen geldige datum"
#: airtime_mvc/application/common/DateHelper.php:240
#, php-format
msgid "%s:%s:%s is not a valid time"
-msgstr ""
+msgstr "%s:%s:%s Dit is geen geldige tijd."
#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512
msgid "Please selection an option"
-msgstr ""
+msgstr "Gelieve selectie een optie"
#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531
msgid "No Records"
-msgstr ""
+msgstr "Geen records"
#: airtime_mvc/application/forms/LiveStreamingPreferences.php:87
msgid "Master Source Port"
diff --git a/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo
index 3c7a77d67..8e128f5e2 100644
Binary files a/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo and b/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo differ
diff --git a/airtime_mvc/public/css/colorpicker/embeddable-player.css b/airtime_mvc/public/css/colorpicker/embeddable-player.css
new file mode 100644
index 000000000..e69de29bb
diff --git a/airtime_mvc/public/css/embed-player-images/airtime_logo.png b/airtime_mvc/public/css/embed-player-images/airtime_logo.png
new file mode 100644
index 000000000..db8e5fb81
Binary files /dev/null and b/airtime_mvc/public/css/embed-player-images/airtime_logo.png differ
diff --git a/airtime_mvc/public/css/embed-player-images/mute.png b/airtime_mvc/public/css/embed-player-images/mute.png
new file mode 100644
index 000000000..0276df62e
Binary files /dev/null and b/airtime_mvc/public/css/embed-player-images/mute.png differ
diff --git a/airtime_mvc/public/css/embed-player-images/pause_button.png b/airtime_mvc/public/css/embed-player-images/pause_button.png
new file mode 100644
index 000000000..8719664da
Binary files /dev/null and b/airtime_mvc/public/css/embed-player-images/pause_button.png differ
diff --git a/airtime_mvc/public/css/embed-player-images/play_button.png b/airtime_mvc/public/css/embed-player-images/play_button.png
new file mode 100644
index 000000000..bff38adbc
Binary files /dev/null and b/airtime_mvc/public/css/embed-player-images/play_button.png differ
diff --git a/airtime_mvc/public/css/embed-player-images/unmute.png b/airtime_mvc/public/css/embed-player-images/unmute.png
new file mode 100644
index 000000000..839597835
Binary files /dev/null and b/airtime_mvc/public/css/embed-player-images/unmute.png differ
diff --git a/airtime_mvc/public/css/player-form.css b/airtime_mvc/public/css/player-form.css
new file mode 100644
index 000000000..69654c9f1
--- /dev/null
+++ b/airtime_mvc/public/css/player-form.css
@@ -0,0 +1,62 @@
+.embed-player-text-box {
+ padding-right: 0px !important;
+ width: 100% !important;
+}
+.embed-player-form {
+ width: 40%;
+ margin: 0 auto;
+}
+.embed-player-form dd {
+ width: 100% !important;
+ float: left;
+ margin: 0;
+ padding: 4px 0px 4px 0px;
+}
+.player-preview {
+ width: 100%;
+}
+.player-preview iframe {
+ margin: 0 auto;
+ display: block;
+}
+#player_form {
+ width: 100%;
+ margin: 0 auto;
+}
+#player_form dd {
+ margin-bottom: 10px;
+}
+#player_instructions {
+ border-bottom: 1px solid;
+ padding-bottom: 10px;
+ font-size: 14px;
+ /*font-weight: bold;*/
+ color: #333;
+ margin-bottom: 10px;
+}
+.player-title {
+ clear: left;
+ color: #5b5b5b;
+ float: left;
+ font-size: 13px;
+ font-weight: bold;
+ width: 40px;
+ padding: 4px 0;
+ text-align: left;
+ margin-top: 5px;
+ margin-bottom: 17px;
+}
+#player_title {
+ clear: left;
+}
+#player_stream_url-element {
+ margin-left:30px;
+}
+#player_embed_src-element p {
+ margin: 0px;
+ font-size: 13px;
+ color: #333;
+}
+
+
+
diff --git a/airtime_mvc/public/css/player.css b/airtime_mvc/public/css/player.css
new file mode 100644
index 000000000..f8a3102c7
--- /dev/null
+++ b/airtime_mvc/public/css/player.css
@@ -0,0 +1,215 @@
+.airtime_player {
+ width: 270px;
+ height: 191px;
+ position: relative;
+ font-family: Arial, Helvetica, sans-serif;
+ color: #fff;
+ background: rgba(53, 53, 53, 0.9);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+ -moz-box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+ box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+}
+
+.airtime_header {
+ background: rgba(53, 53, 53, 0.9);
+ -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+ -moz-box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+ box-shadow: 0 3px 5px rgba(0,0,0,0.1) inset,0 1px 0 rgba(255,255,255,0.1),0 0 1px #000 inset;
+ height: 37px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.airtime_box {
+ margin-top: 15px;
+ float: left;
+ width: 100%;
+ height: 52px;
+}
+.station_name {
+ font-size: 14px;
+ padding-top: 10px;
+ padding-left: 20px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding-right: 30px;
+}
+.airtime_pro {
+ margin: 6px 20px;
+ color: #fff;
+ font-size: 11px;
+ text-decoration: none;
+ display:inline-block;
+ float:right;
+}
+.airtime_pro_logo {
+ background: url("embed-player-images/airtime_logo.png") center no-repeat;
+ width: 16px;
+ height: 16px;
+ display:inline-block;
+}
+
+/*.airtime_pro span {
+ display: inline-block;
+ vertical-align: 2px;
+ margin-right: 5px;
+}
+.airtime_pro:hover span {
+ display: inline-block;
+ vertical-align: 2px;
+ margin-right: 5px;
+}*/
+.airtime_box .airtime_button {
+ text-indent: -9999px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ background: rgb(100,100,100);
+ background: -moz-linear-gradient(top, rgba(107, 107, 107, 1) 0%, rgba(88,88,88,1) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(100,100,100,1)), color-stop(100%,rgba(88,88,88,1)));
+ background: -webkit-linear-gradient(top, rgba(107, 107, 107, 1) 0%,rgba(88,88,88,1) 100%);
+ background: -o-linear-gradient(top, rgba(107, 107, 107, 1) 0%,rgba(88,88,88,1) 100%);
+ background: -ms-linear-gradient(top, rgba(107, 107, 107, 1) 0%,rgba(88,88,88,1) 100%);
+ background: linear-gradient(to bottom, rgba(107, 107, 107, 1) 0%,rgba(88,88,88,1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#646464', endColorstr='#585858',GradientType=0 );
+ -webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset;
+ -moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset;
+ box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset;
+ width: 47px;
+ height: 47px;
+ display: inline-block;
+ float: left;
+ cursor: pointer;
+ margin-left: 20px;
+ margin-right: 15px;
+}
+
+.airtime_box .airtime_button:hover {
+ background: rgb(147,147,147);
+ background: -moz-linear-gradient(top, rgba(147,147,147,1) 0%, rgba(117,117,117,1) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(147,147,147,1)), color-stop(100%,rgba(117,117,117,1)));
+ background: -webkit-linear-gradient(top, rgba(147,147,147,1) 0%,rgba(117,117,117,1) 100%);
+ background: -o-linear-gradient(top, rgba(147,147,147,1) 0%,rgba(117,117,117,1) 100%);
+ background: -ms-linear-gradient(top, rgba(147,147,147,1) 0%,rgba(117,117,117,1) 100%);
+ background: linear-gradient(to bottom, rgba(147,147,147,1) 0%,rgba(117,117,117,1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#939393', endColorstr='#757575',GradientType=0 );
+}
+
+.airtime_box .airtime_button .play_button {
+ display: block;
+ background: url("embed-player-images/play_button.png") center no-repeat;
+ width: 47px;
+ height: 47px;
+}
+
+.airtime_box .airtime_button .stop_button {
+ display: block;
+ background: url("embed-player-images/pause_button.png") center no-repeat;
+ width: 47px;
+ height: 47px;
+}
+
+.hide_button {
+ display:none !important;
+}
+
+.now_playing {
+ margin-top: 8px;
+ margin-left: 15px;
+ margin-right: 15px;
+ display: block;
+ font-size: 14px;
+ color: #fff;
+ width: 170px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.now_playing span {
+ display: block;
+ color: #aaaaaa;
+ width: 170px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.airtime_volume {
+ padding: 10px 0px 15px 0px;
+ clear: both;
+}
+
+.airtime_volume .volume_control {
+ margin-left: 55px;
+ float: left;
+ display: inline-block;
+}
+
+.airtime_volume .mute {
+ background: url("embed-player-images/mute.png") center no-repeat;
+ display: block;
+ margin-top: -4px;
+ width: 15px;
+ height: 15px;
+ cursor: pointer;
+}
+
+.airtime_volume_bar {
+ border-color: #262526 #262526 #5E5E5E;
+ border-style: solid;
+ border-width: 1px;
+ background-color: #393939;
+ width: auto;
+ height: 5px;
+ cursor: pointer;
+ margin-left: 80px;
+ margin-right: 40px;
+}
+
+.airtime_volume_bar_value {
+ background-color: #ff9122;
+ width: 0px;
+ height: 5px;
+}
+
+.airtime_schedule {
+ margin: 10px 20px 5px 20px;
+ padding-top: 10px;
+ font-size: 14px;
+ color: #aaaaaa;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+ padding-bottom: 0px;
+}
+
+.airtime_next {
+ float: left;
+ margin: 0px;
+ margin-top: 1px;
+}
+
+.schedule_list {
+ list-style: none;
+ padding-left: 0px;
+ padding-bottom: 10px;
+ margin-top: 0px;
+ margin-left: 60px;
+ margin-bottom: 0px;
+ line-height: 130%;
+ height: 20px;
+}
+
+.schedule_list li {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.airtime-pro-orange {
+ color: #ff5d1a;
+}
\ No newline at end of file
diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css
index 81ed09439..6c769ae2c 100644
--- a/airtime_mvc/public/css/styles.css
+++ b/airtime_mvc/public/css/styles.css
@@ -484,7 +484,7 @@ fieldset.plain {
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2) inset;
}
-input[readonly]{
+input[readonly], textarea[readonly] {
background-color:#b1b1b1
}
@@ -3226,4 +3226,4 @@ dd .stream-status {
padding: 20px;
font-size: 16px;
font-family: Helvetica, Arial, sans-serif;
-}
\ No newline at end of file
+}
diff --git a/airtime_mvc/public/js/airtime/player/mrp.js b/airtime_mvc/public/js/airtime/player/mrp.js
new file mode 100644
index 000000000..ca7140dc1
--- /dev/null
+++ b/airtime_mvc/public/js/airtime/player/mrp.js
@@ -0,0 +1,3014 @@
+(function(n) {
+ function w(a, c) {
+ function r() {}
+ r.prototype = a;
+ var b = new r,
+ f;
+ for (f in c) b[f] = c[f];
+ c.toString !== Object.prototype.toString && (b.toString = c.toString);
+ return b
+ }
+
+ function B(a) {
+ return a instanceof Array ? function() {
+ return m.iter(a)
+ } : "function" == typeof a.iterator ? p(a, a.iterator) : a.iterator
+ }
+
+ function p(a, c) {
+ if (null == c) return null;
+ null == c.__id__ && (c.__id__ = G++);
+ var b;
+ null == a.hx__closures__ ? a.hx__closures__ = {} : b = a.hx__closures__[c.__id__];
+ null == b && (b = function() {
+ return b.method.apply(b.scope, arguments)
+ },
+ b.scope = a, b.method = c, a.hx__closures__[c.__id__] = b);
+ return b
+ }
+ n.muses = n.muses || {};
+ var s = function(a, c) {
+ c = c.split("u").join("");
+ this.r = new RegExp(a, c)
+ };
+ s.__name__ = !0;
+ s.prototype = {
+ r: null,
+ match: function(a) {
+ this.r.global && (this.r.lastIndex = 0);
+ this.r.m = this.r.exec(a);
+ this.r.s = a;
+ return null != this.r.m
+ },
+ matched: function(a) {
+ if (null != this.r.m && 0 <= a && a < this.r.m.length) return this.r.m[a];
+ throw "EReg::matched";
+ },
+ __class__: s
+ };
+ var m = function() {};
+ m.__name__ = !0;
+ m.cca = function(a, c) {
+ var b = a.charCodeAt(c);
+ return b != b ? void 0 :
+ b
+ };
+ m.substr = function(a, c, b) {
+ if (null != c && 0 != c && null != b && 0 > b) return "";
+ null == b && (b = a.length);
+ 0 > c ? (c = a.length + c, 0 > c && (c = 0)) : 0 > b && (b = a.length + b - c);
+ return a.substr(c, b)
+ };
+ m.indexOf = function(a, c, b) {
+ var e = a.length;
+ 0 > b && (b += e, 0 > b && (b = 0));
+ for (; b < e;) {
+ if (a[b] === c) return b;
+ b++
+ }
+ return -1
+ };
+ m.remove = function(a, c) {
+ var b = m.indexOf(a, c, 0);
+ if (-1 == b) return !1;
+ a.splice(b, 1);
+ return !0
+ };
+ m.iter = function(a) {
+ return {
+ cur: 0,
+ arr: a,
+ hasNext: function() {
+ return this.cur < this.arr.length
+ },
+ next: function() {
+ return this.arr[this.cur++]
+ }
+ }
+ };
+ var x =
+ function() {};
+ x.__name__ = !0;
+ x.exists = function(a, c) {
+ for (var b = B(a)(); b.hasNext();) {
+ var e = b.next();
+ if (c(e)) return !0
+ }
+ return !1
+ };
+ var A = function() {
+ this.length = 0
+ };
+ A.__name__ = !0;
+ A.prototype = {
+ h: null,
+ length: null,
+ iterator: function() {
+ return {
+ h: this.h,
+ hasNext: function() {
+ return null != this.h
+ },
+ next: function() {
+ if (null == this.h) return null;
+ var a = this.h[0];
+ this.h = this.h[1];
+ return a
+ }
+ }
+ },
+ __class__: A
+ };
+ var g = n.MRP = function() {};
+ g.__name__ = !0;
+ g.setObject = function() {
+ eval("MRP.instance = document." + g.objectId + ";");
+ null == g.instance &&
+ (g.instance = document.getElementById(g.objectId))
+ };
+ g.setElementId = function(a) {
+ g.elementId = a
+ };
+ g.setObjectId = function(a) {
+ g.objectId = a;
+ g.setObject()
+ };
+ g.play = function() {
+ g.instance.playSound()
+ };
+ g.stop = function() {
+ g.instance.stopSound()
+ };
+ g.setVolume = function(a) {
+ g.instance.setVolume(a / 100)
+ };
+ g.showInfo = function(a) {
+ g.instance.showInfo(a)
+ };
+ g.setTitle = function(a) {
+ g.instance.setTitle(a)
+ };
+ g.setUrl = function(a) {
+ g.instance.setUrl(a)
+ };
+ g.setFallbackUrl = function(a) {
+ g.instance.setFallbackUrl(a)
+ };
+ g.setCallbackFunction =
+ function(a) {
+ musesCallback = a
+ };
+ g.callbackExists = function() {
+ var a = "error",
+ a = typeof musesCallback;
+ return "undefined" != a && "error" != a
+ };
+ g.getScriptBaseHREF = function() {
+ return ("https:" == window.document.location.protocol ? "https://" : "http://") + "hosted.muses.org"
+ };
+ g.getSkin = function(a, c) {
+ return -1 != a.indexOf("/") || c && ("original" == a || "tiny" == a) ? a : g.getScriptBaseHREF() + "/muses-" + a + ".xml"
+ };
+ g.insert = function(a) {
+ null == a.elementId && null != g.elementId && (a.elementId = g.elementId);
+ FlashDetect.versionAtLeast(10, 1) ? g.flashInsert(a) :
+ g.jsInsert(a)
+ };
+ g.jsInsert = function(a) {
+ a.autoplay = !1;
+ g.playerCounter++;
+ var c = "MusesRadioPlayer-HTML5-player-" + g.playerCounter,
+ b = '
';
+ null == a.elementId ? window.document.write(b) : window.document.getElementById(a.elementId).innerHTML = b;
+ a.elementId = c;
+ a.skin = g.getSkin(a.skin, !1);
+ new d.Muses(a)
+ };
+ g.flashInsert = function(a) {
+ null == a.wmode && (a.wmode = "window");
+ null == a.id && (a.id = g.objectId);
+ var c = "url=" + a.url,
+ c = c + ("&lang=" + (null != a.lang ? a.lang :
+ "auto")),
+ c = c + ("&codec=" + a.codec),
+ c = c + "&tracking=true" + ("&volume=" + (null != a.volume ? a.volume : 100));
+ null != a.introurl && (c += "&introurl=" + a.introurl);
+ null != a.autoplay && (c += "&autoplay=" + (a.autoplay ? "true" : "false"));
+ null != a.jsevents && (c += "&jsevents=" + (a.jsevents ? "true" : "false"));
+ null != a.buffering && (c += "&buffering=" + a.buffering);
+ null != a.metadataProxy && (c += "&metadataproxy=" + a.metadataProxy);
+ null != a.reconnectTime && (c += "&reconnecttime=" + a.reconnectTime);
+ null != a.fallbackUrl && (c += "&fallback=" + a.fallbackUrl);
+ var c =
+ c + ("&skin=" + g.getSkin(a.skin, !0)),
+ c = c + ("&title=" + a.title),
+ c = c + ("&welcome=" + a.welcome),
+ b = g.getScriptBaseHREF() + "/muses-hosted.swf",
+ //b = "http://localhost/js/airtime/embeddableplayer/muses.swf",
+ e = 'width="' + a.width + '" height="' + a.height + '" ';
+ null != a.bgcolor && (e += 'bgcolor="' + a.bgcolor + '" ');
+ var f = '",
+ f = f + (' ') + (' '),
+ f = f + (' '),
+ f = f + ' ',
+ f = f + ' ';
+ null != a.bgcolor && (f += ' ');
+ f += ' ';
+ f += " ";
+ null != a.callbackFunction ? g.setCallbackFunction(a.callbackFunction) : 1 != a.jsevents || g.callbackExists() || g.setCallbackFunction(function(a, c) {});
+ null == a.elementId ? window.document.write(f) : window.document.getElementById(a.elementId).innerHTML =
+ f;
+ g.setObject()
+ };
+ g.main = function() {
+ g.getScriptBaseHREF()
+ };
+ var z = function() {};
+ z.__name__ = !0;
+ z.prototype = {
+ exists: null,
+ remove: null,
+ iterator: null,
+ __class__: z
+ };
+ Math.__name__ = !0;
+ var v = function() {};
+ v.__name__ = !0;
+ v.field = function(a, c) {
+ try {
+ return a[c]
+ } catch (b) {
+ return null
+ }
+ };
+ v.setField = function(a, c, b) {
+ a[c] = b
+ };
+ v.isFunction = function(a) {
+ return "function" == typeof a && !(a.__name__ || a.__ename__)
+ };
+ var y = function() {};
+ y.__name__ = !0;
+ y.string = function(a) {
+ return u.Boot.__string_rec(a, "")
+ };
+ y.parseInt = function(a) {
+ var c = parseInt(a,
+ 10);
+ 0 != c || 120 != m.cca(a, 1) && 88 != m.cca(a, 1) || (c = parseInt(a));
+ return isNaN(c) ? null : c
+ };
+ var C = function() {
+ this.b = ""
+ };
+ C.__name__ = !0;
+ C.prototype = {
+ b: null,
+ add: function(a) {
+ this.b += y.string(a)
+ },
+ addSub: function(a, c, b) {
+ this.b = null == b ? this.b + m.substr(a, c, null) : this.b + m.substr(a, c, b)
+ },
+ __class__: C
+ };
+ var t = function() {};
+ t.__name__ = !0;
+ t.urlEncode = function(a) {
+ return encodeURIComponent(a)
+ };
+ t.isSpace = function(a, c) {
+ var b = m.cca(a, c);
+ return 8 < b && 14 > b || 32 == b
+ };
+ t.ltrim = function(a) {
+ for (var c = a.length, b = 0; b < c && t.isSpace(a, b);) b++;
+ return 0 < b ? m.substr(a, b, c - b) : a
+ };
+ t.rtrim = function(a) {
+ for (var c = a.length, b = 0; b < c && t.isSpace(a, c - b - 1);) b++;
+ return 0 < b ? m.substr(a, 0, c - b) : a
+ };
+ t.trim = function(a) {
+ return t.ltrim(t.rtrim(a))
+ };
+ t.replace = function(a, c, b) {
+ return a.split(c).join(b)
+ };
+ t.fastCodeAt = function(a, c) {
+ return a.charCodeAt(c)
+ };
+ var D = function() {};
+ D.__name__ = !0;
+ D.getInstanceFields = function(a) {
+ var c = [],
+ b;
+ for (b in a.prototype) c.push(b);
+ m.remove(c, "__class__");
+ m.remove(c, "__properties__");
+ return c
+ };
+ var h = function() {};
+ h.__name__ = !0;
+ h.parse = function(a) {
+ return q.xml.Parser.parse(a)
+ };
+ h.createElement = function(a) {
+ var c = new h;
+ c.nodeType = h.Element;
+ c._children = [];
+ c._attributes = new q.ds.StringMap;
+ c.set_nodeName(a);
+ return c
+ };
+ h.createPCData = function(a) {
+ var c = new h;
+ c.nodeType = h.PCData;
+ c.set_nodeValue(a);
+ return c
+ };
+ h.createCData = function(a) {
+ var c = new h;
+ c.nodeType = h.CData;
+ c.set_nodeValue(a);
+ return c
+ };
+ h.createComment = function(a) {
+ var c = new h;
+ c.nodeType = h.Comment;
+ c.set_nodeValue(a);
+ return c
+ };
+ h.createDocType = function(a) {
+ var c = new h;
+ c.nodeType = h.DocType;
+ c.set_nodeValue(a);
+ return c
+ };
+ h.createProcessingInstruction =
+ function(a) {
+ var c = new h;
+ c.nodeType = h.ProcessingInstruction;
+ c.set_nodeValue(a);
+ return c
+ };
+ h.createDocument = function() {
+ var a = new h;
+ a.nodeType = h.Document;
+ a._children = [];
+ return a
+ };
+ h.prototype = {
+ nodeType: null,
+ _nodeName: null,
+ _nodeValue: null,
+ _attributes: null,
+ _children: null,
+ _parent: null,
+ get_nodeName: function() {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ return this._nodeName
+ },
+ set_nodeName: function(a) {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ return this._nodeName = a
+ },
+ set_nodeValue: function(a) {
+ if (this.nodeType ==
+ h.Element || this.nodeType == h.Document) throw "bad nodeType";
+ return this._nodeValue = a
+ },
+ get: function(a) {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ return this._attributes.get(a)
+ },
+ set: function(a, c) {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ this._attributes.set(a, c)
+ },
+ exists: function(a) {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ return this._attributes.exists(a)
+ },
+ attributes: function() {
+ if (this.nodeType != h.Element) throw "bad nodeType";
+ return this._attributes.keys()
+ },
+ elements: function() {
+ if (null ==
+ this._children) throw "bad nodetype";
+ return {
+ cur: 0,
+ x: this._children,
+ hasNext: function() {
+ for (var a = this.cur, c = this.x.length; a < c && this.x[a].nodeType != h.Element;) a += 1;
+ this.cur = a;
+ return a < c
+ },
+ next: function() {
+ for (var a = this.cur, c = this.x.length; a < c;) {
+ var b = this.x[a],
+ a = a + 1;
+ if (b.nodeType == h.Element) return this.cur = a, b
+ }
+ return null
+ }
+ }
+ },
+ addChild: function(a) {
+ if (null == this._children) throw "bad nodetype";
+ null != a._parent && m.remove(a._parent._children, a);
+ a._parent = this;
+ this._children.push(a)
+ },
+ __class__: h
+ };
+ var b = {
+ Campaign: function(a) {
+ this.responseCount =
+ 0;
+ "direct" != a && "organic" != a && "referral" != a && b.Tracker._raiseError("Campaign type has to be one of the Campaign::TYPE_* constant values.", "Campaign.new");
+ this.type = a;
+ switch (a) {
+ case "direct":
+ this.source = this.name = "(direct)";
+ this.medium = "(none)";
+ break;
+ case "referral":
+ this.name = "(referral)";
+ this.medium = "referral";
+ break;
+ case "organic":
+ this.name = "(organic)", this.medium = "organic"
+ }
+ this.creationTime = new b.DateTime
+ }
+ };
+ b.Campaign.__name__ = !0;
+ b.Campaign.createFromReferrer = function(a) {
+ var c = new b.Campaign("referral");
+ a = new b.URLParser(a);
+ c.source = a.host;
+ c.content = a.path;
+ return c
+ };
+ b.Campaign.prototype = {
+ type: null,
+ creationTime: null,
+ responseCount: null,
+ id: null,
+ source: null,
+ gClickId: null,
+ dClickId: null,
+ name: null,
+ medium: null,
+ term: null,
+ content: null,
+ validate: function() {
+ null == this.source && b.Tracker._raiseError('Campaigns need to have at least the "source" attribute defined.', "Campaign.validate")
+ },
+ setType: function(a) {
+ this.type = a
+ },
+ getType: function() {
+ return this.type
+ },
+ setCreationTime: function(a) {
+ this.creationTime = a
+ },
+ getCreationTime: function() {
+ return this.creationTime
+ },
+ setResponseCount: function(a) {
+ this.responseCount = a
+ },
+ getResponseCount: function() {
+ return this.responseCount
+ },
+ increaseResponseCount: function(a) {
+ null == a && (a = 1);
+ this.responseCount += a
+ },
+ setId: function(a) {
+ this.id = a
+ },
+ getId: function() {
+ return this.id
+ },
+ setSource: function(a) {
+ this.source = a
+ },
+ getSource: function() {
+ return this.source
+ },
+ setGClickId: function(a) {
+ this.gClickId = a
+ },
+ getGClickId: function() {
+ return this.gClickId
+ },
+ setDClickId: function(a) {
+ this.dClickId = a
+ },
+ getDClickId: function() {
+ return this.dClickId
+ },
+ setName: function(a) {
+ this.name =
+ a
+ },
+ getName: function() {
+ return this.name
+ },
+ setMedium: function(a) {
+ this.medium = a
+ },
+ getMedium: function() {
+ return this.medium
+ },
+ setTerm: function(a) {
+ this.term = a
+ },
+ getTerm: function() {
+ return this.term
+ },
+ setContent: function(a) {
+ this.content = a
+ },
+ getContent: function() {
+ return this.content
+ },
+ __class__: b.Campaign
+ };
+ b.Config = function(a) {
+ null == a && (a = !1);
+ this.sitespeedSampleRate = 1;
+ this.endPointPath = "/__utm.gif";
+ this.endPointHost = "www.google-analytics.com";
+ this.urlScheme = "http";
+ this.requestTimeout = 1;
+ this.sendOnShutdown = this.fireAndForget = !1;
+ this.errorSeverity = 2;
+ this.setUrlScheme("http" + (a ? "s" : ""))
+ };
+ b.Config.__name__ = !0;
+ b.Config.prototype = {
+ errorSeverity: null,
+ sendOnShutdown: null,
+ fireAndForget: null,
+ loggingCallback: null,
+ requestTimeout: null,
+ urlScheme: null,
+ endPointHost: null,
+ endPointPath: null,
+ sitespeedSampleRate: null,
+ getErrorSeverity: function() {
+ return this.errorSeverity
+ },
+ setErrorSeverity: function(a) {
+ this.errorSeverity = a
+ },
+ getSendOnShutdown: function() {
+ return this.sendOnShutdown
+ },
+ setSendOnShutdown: function(a) {
+ this.sendOnShutdown = a
+ },
+ getFireAndForget: function() {
+ return this.fireAndForget
+ },
+ setFireAndForget: function(a) {
+ this.fireAndForget = a
+ },
+ getLoggingCallback: function() {
+ return this.loggingCallback
+ },
+ setLoggingCallback: function(a) {
+ this.loggingCallback = a
+ },
+ getRequestTimeout: function() {
+ return this.requestTimeout
+ },
+ setRequestTimeout: function(a) {
+ this.requestTimeout = a
+ },
+ getUrlScheme: function() {
+ return this.urlScheme
+ },
+ setUrlScheme: function(a) {
+ return this.urlScheme = a
+ },
+ getEndPointHost: function() {
+ return this.endPointHost
+ },
+ setEndPointHost: function(a) {
+ this.endPointHost = a
+ },
+ getEndPointPath: function() {
+ return this.endPointPath
+ },
+ setEndPointPath: function(a) {
+ this.endPointPath = a
+ },
+ getSitespeedSampleRate: function() {
+ return this.sitespeedSampleRate
+ },
+ setSitespeedSampleRate: function(a) {
+ 0 > a || 100 < a ? b.Tracker._raiseError("For consistency with ga.js, sample rates must be specified as a number between 0 and 100.", "config.setSitespeedSampleRate") : this.sitespeedSampleRate = a
+ },
+ __class__: b.Config
+ };
+ b.CustomVariable = function(a, c, b, e) {
+ null == e && (e = 0);
+ null == a && (a = 0);
+ this.scope = 3;
+ 0 != a && this.setIndex(a);
+ null != c && this.setName(c);
+ null != b && this.setValue(b);
+ 0 != e && this.setScope(e)
+ };
+ b.CustomVariable.__name__ = !0;
+ b.CustomVariable.prototype = {
+ index: null,
+ name: null,
+ value: null,
+ scope: null,
+ validate: function() {
+ 128 < (this.name + y.string(this.value)).length && b.Tracker._raiseError("Custom Variable combined name and value length must not be larger than 128 bytes.", "CustomVariable.validate")
+ },
+ getIndex: function() {
+ return this.index
+ },
+ setIndex: function(a) {
+ (1 > a || 5 < a) && b.Tracker._raiseError("Custom Variable index has to be between 1 and 5.", "CustomVariable.setIndex");
+ this.index =
+ a
+ },
+ getName: function() {
+ return this.name
+ },
+ setName: function(a) {
+ this.name = a
+ },
+ getValue: function() {
+ return this.value
+ },
+ setValue: function(a) {
+ this.value = a
+ },
+ getScope: function() {
+ return this.scope
+ },
+ setScope: function(a) {
+ 3 != a && 2 != a && 1 != a && b.Tracker._raiseError("Custom Variable scope has to be one of the CustomVariable::SCOPE_* constant values.", "CustomVariable.setScope");
+ this.scope = a
+ },
+ __class__: b.CustomVariable
+ };
+ b.DateTime = function(a) {
+ this.date = null == a ? Math.round((new Date).getTime()) + "" : a
+ };
+ b.DateTime.__name__ = !0;
+ b.DateTime.prototype = {
+ date: null,
+ toString: function() {
+ return this.date
+ },
+ __class__: b.DateTime
+ };
+ b.Event = function(a, c, b, e, f) {
+ null == f && (f = !1);
+ null == e && (e = 0);
+ this.noninteraction = !1;
+ null != a && this.setCategory(a);
+ null != c && this.setAction(c);
+ null != b && this.setLabel(b);
+ this.setValue(e);
+ this.setNoninteraction(f)
+ };
+ b.Event.__name__ = !0;
+ b.Event.prototype = {
+ category: null,
+ action: null,
+ label: null,
+ value: null,
+ noninteraction: null,
+ validate: function() {
+ null != this.category && null != this.action || b.Tracker._raiseError("Events need at least to have a category and action defined.",
+ "Event.validate")
+ },
+ getCategory: function() {
+ return this.category
+ },
+ setCategory: function(a) {
+ this.category = a
+ },
+ getAction: function() {
+ return this.action
+ },
+ setAction: function(a) {
+ this.action = a
+ },
+ getLabel: function() {
+ return this.label
+ },
+ setLabel: function(a) {
+ this.label = a
+ },
+ getValue: function() {
+ return this.value
+ },
+ setValue: function(a) {
+ this.value = a
+ },
+ getNoninteraction: function() {
+ return this.noninteraction
+ },
+ setNoninteraction: function(a) {
+ this.noninteraction = a
+ },
+ __class__: b.Event
+ };
+ b.Item = function() {
+ this.quantity = 1
+ };
+ b.Item.__name__ = !0;
+ b.Item.prototype = {
+ orderId: null,
+ sku: null,
+ name: null,
+ variation: null,
+ price: null,
+ quantity: null,
+ validate: function() {
+ null == this.sku && b.Tracker._raiseError("Items need to have a sku/product code defined.", "Item.validate")
+ },
+ getOrderId: function() {
+ return this.orderId
+ },
+ setOrderId: function(a) {
+ this.orderId = a
+ },
+ getSku: function() {
+ return this.sku
+ },
+ setSku: function(a) {
+ this.sku = a
+ },
+ getName: function() {
+ return this.name
+ },
+ setName: function(a) {
+ this.name = a
+ },
+ getVariation: function() {
+ return this.variation
+ },
+ setVariation: function(a) {
+ this.variation =
+ a
+ },
+ getPrice: function() {
+ return this.price
+ },
+ setPrice: function(a) {
+ this.price = a
+ },
+ getQuantity: function() {
+ return this.quantity
+ },
+ setQuantity: function(a) {
+ this.quantity = a
+ },
+ __class__: b.Item
+ };
+ b.Page = function(a) {
+ this.setPath(a)
+ };
+ b.Page.__name__ = !0;
+ b.Page.prototype = {
+ path: null,
+ title: null,
+ charset: null,
+ referrer: null,
+ loadTime: null,
+ setPath: function(a) {
+ null != a && "/" != a.charAt(0) && b.Tracker._raiseError('The page path should always start with a slash ("/").', "Page.setPath");
+ this.path = a
+ },
+ getPath: function() {
+ return this.path
+ },
+ setTitle: function(a) {
+ this.title = a
+ },
+ getTitle: function() {
+ return this.title
+ },
+ setCharset: function(a) {
+ this.charset = a
+ },
+ getCharset: function() {
+ return this.charset
+ },
+ setReferrer: function(a) {
+ this.referrer = a
+ },
+ getReferrer: function() {
+ return this.referrer
+ },
+ setLoadTime: function(a) {
+ this.loadTime = a
+ },
+ getLoadTime: function() {
+ return this.loadTime
+ },
+ __class__: b.Page
+ };
+ b.Session = function() {
+ this.setSessionId(this.generateSessionId());
+ this.setTrackCount(0);
+ this.setStartTime(new b.DateTime)
+ };
+ b.Session.__name__ = !0;
+ b.Session.prototype = {
+ sessionId: null,
+ trackCount: null,
+ startTime: null,
+ fromUtmb: function(a) {
+ a = a.split(".");
+ if (4 != a.length) return b.Tracker._raiseError('The given "__utmb" cookie value is invalid.', "Session.fromUtmb"), this;
+ this.setTrackCount(b.internals.Util.parseInt(a[1], 0));
+ this.setStartTime(new b.DateTime(a[3]));
+ return this
+ },
+ generateSessionId: function() {
+ return b.internals.Util.generate32bitRandom()
+ },
+ getSessionId: function() {
+ return this.sessionId
+ },
+ setSessionId: function(a) {
+ this.sessionId = a
+ },
+ getTrackCount: function() {
+ return this.trackCount
+ },
+ setTrackCount: function(a) {
+ this.trackCount = a
+ },
+ increaseTrackCount: function(a) {
+ null == a && (a = 1);
+ this.trackCount += a
+ },
+ getStartTime: function() {
+ return this.startTime
+ },
+ setStartTime: function(a) {
+ this.startTime = a
+ },
+ __class__: b.Session
+ };
+ b.SocialInteraction = function(a, c, b) {
+ null != a && this.setNetwork(a);
+ null != c && this.setAction(c);
+ null != b && this.setTarget(b)
+ };
+ b.SocialInteraction.__name__ = !0;
+ b.SocialInteraction.prototype = {
+ network: null,
+ action: null,
+ target: null,
+ validate: function() {
+ null != this.network && null != this.action || b.Tracker._raiseError('Social interactions need to have at least the "network" and "action" attributes defined.',
+ "SocialInteraction.validate")
+ },
+ setNetwork: function(a) {
+ this.network = a
+ },
+ getNetwork: function() {
+ return this.network
+ },
+ setAction: function(a) {
+ this.action = a
+ },
+ getAction: function() {
+ return this.action
+ },
+ setTarget: function(a) {
+ this.target = a
+ },
+ getTarget: function() {
+ return this.target
+ },
+ __class__: b.SocialInteraction
+ };
+ b.Stats = function() {};
+ b.Stats.__name__ = !0;
+ b.Stats.init = function(a, c) {
+ null == b.Stats.accountId && (b.Stats.accountId = a, b.Stats.domainName = c, b.Stats.tracker = new b.Tracker(a, c), b.Stats.cache = new q.ds.StringMap,
+ b.Stats.session = new b.Session, b.Stats.loadVisitor())
+ };
+ b.Stats.trackPageview = function(a, c) {
+ var r = "page:" + a;
+ if (!b.Stats.cache.exists(r)) {
+ var e = new b.Page(a);
+ null != c && e.setTitle(c);
+ e = new b._Stats.GATrackObject(e, null);
+ b.Stats.cache.set(r, e)
+ }
+ b.Stats.track(r)
+ };
+ b.Stats.trackEvent = function(a, c, r, e) {
+ null == e && (e = 0);
+ var f = "event:" + a + "/" + c + "/" + r + ":" + e;
+ b.Stats.cache.exists(f) || (a = new b._Stats.GATrackObject(null, new b.Event(a, c, r, e)), b.Stats.cache.set(f, a));
+ b.Stats.track(f)
+ };
+ b.Stats.track = function(a) {
+ b.Stats.cache.get(a).track(b.Stats.tracker,
+ b.Stats.visitor, b.Stats.session);
+ b.Stats.persistVisitor()
+ };
+ b.Stats.loadVisitor = function() {
+ b.Stats.visitor = new b.Visitor;
+ b.Stats.visitor.setUserAgent("-not-set- [haxe]");
+ b.Stats.visitor.setScreenResolution("1024x768");
+ b.Stats.visitor.setLocale("en_US");
+ b.Stats.visitor.getUniqueId();
+ b.Stats.visitor.addSession(b.Stats.session);
+ b.Stats.persistVisitor()
+ };
+ b.Stats.persistVisitor = function() {};
+ b._Stats = {};
+ b._Stats.GATrackObject = function(a, c) {
+ this.page = a;
+ this.event = c
+ };
+ b._Stats.GATrackObject.__name__ = !0;
+ b._Stats.GATrackObject.prototype = {
+ event: null,
+ page: null,
+ track: function(a, c, b) {
+ null != this.page && a.trackPageview(this.page, b, c);
+ null != this.event && a.trackEvent(this.event, b, c)
+ },
+ __class__: b._Stats.GATrackObject
+ };
+ b.Tracker = function(a, c, r) {
+ this.allowHash = !0;
+ this.customVariables = [];
+ b.Tracker.setConfig(null != r ? r : new b.Config);
+ this.setAccountId(a);
+ this.setDomainName(c)
+ };
+ b.Tracker.__name__ = !0;
+ b.Tracker.getConfig = function() {
+ return b.Tracker.config
+ };
+ b.Tracker.setConfig = function(a) {
+ b.Tracker.config = a
+ };
+ b.Tracker._raiseError = function(a, c) {
+ a = c + "(): " +
+ a;
+ switch (null != b.Tracker.config ? b.Tracker.config.getErrorSeverity() : 0) {
+ case 1:
+ console.log(a);
+ break;
+ case 2:
+ throw a;
+ }
+ };
+ b.Tracker.prototype = {
+ accountId: null,
+ domainName: null,
+ allowHash: null,
+ customVariables: null,
+ campaign: null,
+ setAccountId: function(a) {
+ (new s("^(UA|MO)-[0-9]*-[0-9]*$", "")).match(a) || b.Tracker._raiseError('"' + a + '" is not a valid Google Analytics account ID.', "Tracker.setAccountId");
+ this.accountId = a
+ },
+ getAccountId: function() {
+ return this.accountId
+ },
+ setDomainName: function(a) {
+ this.domainName = a
+ },
+ getDomainName: function() {
+ return this.domainName
+ },
+ setAllowHash: function(a) {
+ this.allowHash = a
+ },
+ getAllowHash: function() {
+ return this.allowHash
+ },
+ addCustomVariable: function(a) {
+ a.validate();
+ this.customVariables[a.getIndex()] = a
+ },
+ getCustomVariables: function() {
+ return this.customVariables
+ },
+ removeCustomVariable: function(a) {
+ m.remove(this.customVariables, this.customVariables[a])
+ },
+ setCampaign: function(a) {
+ null != a && a.validate();
+ this.campaign = a
+ },
+ getCampaign: function() {
+ return this.campaign
+ },
+ trackPageview: function(a,
+ c, r) {
+ var e = new b.internals.request.PageviewRequest(b.Tracker.config);
+ e.setPage(a);
+ e.setSession(c);
+ e.setVisitor(r);
+ e.setTracker(this);
+ e.send()
+ },
+ trackEvent: function(a, c, r) {
+ a.validate();
+ var e = new b.internals.request.EventRequest(b.Tracker.config);
+ e.setEvent(a);
+ e.setSession(c);
+ e.setVisitor(r);
+ e.setTracker(this);
+ e.send()
+ },
+ trackTransaction: function(a, c, r) {
+ a.validate();
+ var e = new b.internals.request.TransactionRequest(b.Tracker.config);
+ e.setTransaction(a);
+ e.setSession(c);
+ e.setVisitor(r);
+ e.setTracker(this);
+ e.send();
+ for (a = a.getItems().iterator(); a.hasNext();) {
+ e = a.next();
+ e.validate();
+ var f = new b.internals.request.ItemRequest(b.Tracker.config);
+ f.setItem(e);
+ f.setSession(c);
+ f.setVisitor(r);
+ f.setTracker(this);
+ f.send()
+ }
+ },
+ trackSocial: function(a, c, r, e) {
+ var f = new b.internals.request.SocialInteractionRequest(b.Tracker.config);
+ f.setSocialInteraction(a);
+ f.setPage(c);
+ f.setSession(r);
+ f.setVisitor(e);
+ f.setTracker(this);
+ f.send()
+ },
+ __class__: b.Tracker
+ };
+ b.Transaction = function() {
+ this.items = new q.ds.StringMap
+ };
+ b.Transaction.__name__ = !0;
+ b.Transaction.prototype = {
+ orderId: null,
+ affiliation: null,
+ total: null,
+ tax: null,
+ shipping: null,
+ city: null,
+ region: null,
+ country: null,
+ items: null,
+ validate: function() {
+ null == this.items && b.Tracker._raiseError("Transactions need to consist of at least one item.", "Transaction.validate")
+ },
+ addItem: function(a) {
+ a.setOrderId(this.orderId);
+ var c = a.getSku();
+ this.items.set(c, a)
+ },
+ getItems: function() {
+ return this.items
+ },
+ getOrderId: function() {
+ return this.orderId
+ },
+ setOrderId: function(a) {
+ this.orderId = a;
+ for (var c = this.items.iterator(); c.hasNext();) c.next().setOrderId(a)
+ },
+ getAffiliation: function() {
+ return this.affiliation
+ },
+ setAffiliation: function(a) {
+ this.affiliation = a
+ },
+ getTotal: function() {
+ return this.total
+ },
+ setTotal: function(a) {
+ this.total = a
+ },
+ getTax: function() {
+ return this.tax
+ },
+ setTax: function(a) {
+ this.tax = a
+ },
+ getShipping: function() {
+ return this.shipping
+ },
+ setShipping: function(a) {
+ this.shipping = a
+ },
+ getCity: function() {
+ return this.city
+ },
+ setCity: function(a) {
+ this.city = a
+ },
+ getRegion: function() {
+ return this.region
+ },
+ setRegion: function(a) {
+ this.region = a
+ },
+ getCountry: function() {
+ return this.country
+ },
+ setCountry: function(a) {
+ this.country = a
+ },
+ __class__: b.Transaction
+ };
+ b.URLParser = function(a) {
+ this.url = a;
+ var c = new s("^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:/?#]*)(?::(\\d*))?)(((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))(?:\\?([^#]*))?(?:#(.*))?)", "");
+ c.match(a);
+ a = 0;
+ for (var r = b.URLParser.parts.length; a < r;) {
+ var e = a++;
+ v.setField(this, b.URLParser.parts[e], c.matched(e))
+ }
+ };
+ b.URLParser.__name__ = !0;
+ b.URLParser.parse = function(a) {
+ return new b.URLParser(a)
+ };
+ b.URLParser.prototype = {
+ url: null,
+ source: null,
+ protocol: null,
+ authority: null,
+ userInfo: null,
+ user: null,
+ password: null,
+ host: null,
+ port: null,
+ relative: null,
+ path: null,
+ directory: null,
+ file: null,
+ query: null,
+ anchor: null,
+ toString: function() {
+ for (var a = "For Url -> " + this.url + "\n", c = 0, r = b.URLParser.parts.length; c < r;) var e = c++,
+ a = a + (b.URLParser.parts[e] + ": " + y.string(v.field(this, b.URLParser.parts[e])) + (e == b.URLParser.parts.length - 1 ? "" : "\n"));
+ return a
+ },
+ __class__: b.URLParser
+ };
+ b.Visitor = function() {
+ var a = new b.DateTime;
+ this.uniqueId =
+ 0;
+ this.setFirstVisitTime(a);
+ this.setPreviousVisitTime(a);
+ this.setCurrentVisitTime(a);
+ this.setVisitCount(1)
+ };
+ b.Visitor.__name__ = !0;
+ b.Visitor.prototype = {
+ uniqueId: null,
+ firstVisitTime: null,
+ previousVisitTime: null,
+ currentVisitTime: null,
+ visitCount: null,
+ ipAddress: null,
+ userAgent: null,
+ locale: null,
+ flashVersion: null,
+ javaEnabled: null,
+ screenColorDepth: null,
+ screenResolution: null,
+ fromUtma: function(a) {
+ a = a.split(".");
+ if (6 != a.length) return b.Tracker._raiseError('The given "__utma" cookie value is invalid.', "Visitor.fromUtma"),
+ this;
+ this.setUniqueId(b.internals.Util.parseInt(a[1], 0));
+ this.setFirstVisitTime(new b.DateTime(a[2]));
+ this.setPreviousVisitTime(new b.DateTime(a[3]));
+ this.setCurrentVisitTime(new b.DateTime(a[4]));
+ this.setVisitCount(b.internals.Util.parseInt(a[5], 0));
+ return this
+ },
+ generateHash: function() {
+ return b.internals.Util.generateHash(this.userAgent + this.screenResolution + this.screenColorDepth)
+ },
+ generateUniqueId: function() {
+ return (b.internals.Util.generate32bitRandom() ^ this.generateHash()) & 2147483647
+ },
+ setUniqueId: function(a) {
+ (0 >
+ a || 2147483647 < a) && b.Tracker._raiseError("Visitor unique ID has to be a 32-bit integer between 0 and 2147483647.", "Visitor.setUniqueId");
+ this.uniqueId = a
+ },
+ getUniqueId: function() {
+ 0 == this.uniqueId && (this.uniqueId = this.generateUniqueId());
+ return this.uniqueId
+ },
+ addSession: function(a) {
+ a = a.getStartTime();
+ a != this.currentVisitTime && (this.previousVisitTime = this.currentVisitTime, this.currentVisitTime = a, ++this.visitCount)
+ },
+ setFirstVisitTime: function(a) {
+ this.firstVisitTime = a
+ },
+ getFirstVisitTime: function() {
+ return this.firstVisitTime
+ },
+ setPreviousVisitTime: function(a) {
+ this.previousVisitTime = a
+ },
+ getPreviousVisitTime: function() {
+ return this.previousVisitTime
+ },
+ setCurrentVisitTime: function(a) {
+ this.currentVisitTime = a
+ },
+ getCurrentVisitTime: function() {
+ return this.currentVisitTime
+ },
+ setVisitCount: function(a) {
+ this.visitCount = a
+ },
+ getVisitCount: function() {
+ return this.visitCount
+ },
+ setIpAddress: function(a) {
+ this.ipAddress = a
+ },
+ getIpAddress: function() {
+ return this.ipAddress
+ },
+ setUserAgent: function(a) {
+ this.userAgent = a
+ },
+ getUserAgent: function() {
+ return this.userAgent
+ },
+ setLocale: function(a) {
+ this.locale = a
+ },
+ getLocale: function() {
+ return this.locale
+ },
+ setFlashVersion: function(a) {
+ this.flashVersion = a
+ },
+ getFlashVersion: function() {
+ return this.flashVersion
+ },
+ setJavaEnabled: function(a) {
+ this.javaEnabled = a
+ },
+ getJavaEnabled: function() {
+ return this.javaEnabled
+ },
+ setScreenColorDepth: function(a) {
+ this.screenColorDepth = a
+ },
+ getScreenColorDepth: function() {
+ return this.screenColorDepth
+ },
+ setScreenResolution: function(a) {
+ this.screenResolution = a
+ },
+ getScreenResolution: function() {
+ return this.screenResolution
+ },
+ __class__: b.Visitor
+ };
+ b.internals = {};
+ b.internals.ParameterHolder = function() {
+ this.utmwv = "5.2.5";
+ this.utmr = this.utmcs = this.utmfl = this.utmje = "0"
+ };
+ b.internals.ParameterHolder.__name__ = !0;
+ b.internals.ParameterHolder.prototype = {
+ utmwv: null,
+ utmac: null,
+ utmhn: null,
+ utmvid: null,
+ utmt: null,
+ utms: null,
+ utmn: null,
+ utmcc: null,
+ utme: null,
+ utmni: null,
+ utmu: null,
+ utmp: null,
+ utmdt: null,
+ utmcs: null,
+ utmr: null,
+ utmip: null,
+ utmul: null,
+ utmfl: null,
+ utmje: null,
+ utmsc: null,
+ utmsr: null,
+ __utma: null,
+ utmhid: null,
+ __utmb: null,
+ __utmc: null,
+ utmipc: null,
+ utmipn: null,
+ utmipr: null,
+ utmiqt: null,
+ utmiva: null,
+ utmtid: null,
+ utmtst: null,
+ utmtto: null,
+ utmttx: null,
+ utmtsp: null,
+ utmtci: null,
+ utmtrg: null,
+ utmtco: null,
+ utmcn: null,
+ utmcr: null,
+ utmcid: null,
+ utmcsr: null,
+ utmgclid: null,
+ utmdclid: null,
+ utmccn: null,
+ utmcmd: null,
+ utmctr: null,
+ utmcct: null,
+ utmcvr: null,
+ __utmz: null,
+ utmsn: null,
+ utmsa: null,
+ utmsid: null,
+ __utmx: null,
+ __utmv: null,
+ toHashTable: function() {
+ for (var a = new q.ds.StringMap, c = 0, r = D.getInstanceFields(b.internals.ParameterHolder); c < r.length;) {
+ var e = r[c];
+ ++c;
+ if ("_" != e.charAt(0) &&
+ !v.isFunction(v.field(this, e))) {
+ var f = v.field(this, e);
+ a.set(e, f)
+ }
+ }
+ return a
+ },
+ toQueryString: function() {
+ for (var a = "", c = 0, r = D.getInstanceFields(b.internals.ParameterHolder); c < r.length;) {
+ var e = r[c];
+ ++c;
+ "_" == e.charAt(0) || v.isFunction(v.field(this, e)) || null == v.field(this, e) || "null" == v.field(this, e) || (a += e + "=" + t.replace(y.string(v.field(this, e)) + "", "&", "%26") + "&")
+ }
+ return a
+ },
+ __class__: b.internals.ParameterHolder
+ };
+ b.internals.Util = function() {};
+ b.internals.Util.__name__ = !0;
+ b.internals.Util.encodeUriComponent =
+ function(a) {
+ return b.internals.Util.convertToUriComponentEncoding(t.urlEncode(a))
+ };
+ b.internals.Util.stringReplaceArray = function(a, c, b) {
+ for (var e = 0, f = c.length; e < f;) {
+ var d = e++;
+ null != c[d] && (a = t.replace(a + " ", c[d], b[d]))
+ }
+ return t.trim(a)
+ };
+ b.internals.Util.parseInt = function(a, c) {
+ return null == a ? c : y.parseInt(a)
+ };
+ b.internals.Util.convertToUriComponentEncoding = function(a) {
+ return b.internals.Util.stringReplaceArray(a, "!*'() +".split(""), "%21 %2A %27 %28 %29 %20 %20".split(" "))
+ };
+ b.internals.Util.generate32bitRandom =
+ function() {
+ return Math.round(2147483647 * Math.random())
+ };
+ b.internals.Util.generateHash = function(a) {
+ var c = 1,
+ b;
+ if (null != a && "" != a)
+ for (var c = 0, e = a.length - 1; 0 <= e;) b = m.cca(a, e), c = (c << 6 & 268435455) + b + (b << 14), b = c & 266338304, 0 != b && (c ^= b >> 21), e--;
+ return c
+ };
+ b.internals.X10 = function() {
+ this.projectData = new q.ds.StringMap;
+ this.KEY = "k";
+ this.VALUE = "v";
+ this.SET = ["k", "v"];
+ this.DELIM_BEGIN = "(";
+ this.DELIM_END = ")";
+ this.DELIM_SET = "*";
+ this.DELIM_NUM_VALUE = "!";
+ this.MINIMUM = 1;
+ this.ESCAPE_CHAR_MAP = new q.ds.StringMap;
+ this.ESCAPE_CHAR_MAP.set("'",
+ "'0");
+ this.ESCAPE_CHAR_MAP.set(")", "'1");
+ this.ESCAPE_CHAR_MAP.set("*", "'2");
+ this.ESCAPE_CHAR_MAP.set("!", "'3")
+ };
+ b.internals.X10.__name__ = !0;
+ b.internals.X10.prototype = {
+ projectData: null,
+ KEY: null,
+ VALUE: null,
+ SET: null,
+ DELIM_BEGIN: null,
+ DELIM_END: null,
+ DELIM_SET: null,
+ DELIM_NUM_VALUE: null,
+ ESCAPE_CHAR_MAP: null,
+ MINIMUM: null,
+ hasProject: function(a) {
+ return this.projectData.exists(a)
+ },
+ setKey: function(a, c, b) {
+ this.setInternal(a, this.KEY, c, b)
+ },
+ getKey: function(a, c) {
+ return this.getInternal(a, this.KEY, c)
+ },
+ clearKey: function(a) {
+ this.clearInternal(a,
+ this.KEY)
+ },
+ setValue: function(a, c, b) {
+ this.setInternal(a, this.VALUE, c, b)
+ },
+ getValue: function(a, c) {
+ return this.getInternal(a, this.VALUE, c)
+ },
+ clearValue: function(a) {
+ this.clearInternal(a, this.VALUE)
+ },
+ setInternal: function(a, c, b, e) {
+ if (!this.projectData.exists(a)) {
+ var f = new q.ds.StringMap;
+ this.projectData.set(a, f)
+ }
+ a = this.projectData.get(a);
+ a.exists(c) || a.set(c, []);
+ a.get(c)[b] = e
+ },
+ getInternal: function(a, c, b) {
+ if (!this.projectData.exists(a)) return null;
+ a = this.projectData.get(a);
+ if (!a.exists(c)) return null;
+ c = a.get(c);
+ return null == c[b] ? null : c[b]
+ },
+ clearInternal: function(a, c) {
+ var b;
+ if (b = this.projectData.exists(a)) b = this.projectData.get(a).exists(c);
+ b && this.projectData.get(a).remove(c)
+ },
+ escapeExtensibleValue: function(a) {
+ for (var c = "", b = 0, e = a.length; b < e;) var f = b++,
+ f = a.charAt(f),
+ c = this.ESCAPE_CHAR_MAP.exists(f) ? c + this.ESCAPE_CHAR_MAP.get(f) : c + f;
+ return c
+ },
+ SORT_NUMERIC: function(a, c) {
+ return a == c ? 0 : a > c ? 1 : -1
+ },
+ renderDataType: function(a) {
+ for (var c = [], b = 0, e = 0, f = a.length; e < f;) {
+ var d = e++,
+ g = a[d];
+ if (null != g) {
+ var k = "";
+ d != this.MINIMUM &&
+ d - 1 != b && (k += d, k += this.DELIM_NUM_VALUE);
+ k += this.escapeExtensibleValue(g);
+ c.push(k)
+ }
+ b = d
+ }
+ return this.DELIM_BEGIN + c.join(this.DELIM_SET) + this.DELIM_END
+ },
+ renderProject: function(a) {
+ for (var c = "", b = !1, e = 0, f = this.SET.length; e < f;) {
+ var d = e++;
+ a.exists(this.SET[d]) ? (b && (c += this.SET[d]), c += this.renderDataType(a.get(this.SET[d])), b = !1) : b = !0
+ }
+ return c
+ },
+ renderUrlString: function() {
+ for (var a = "", c = this.projectData.keys(); c.hasNext();) var b = c.next(),
+ a = a + (b + this.renderProject(this.projectData.get(b)));
+ return a
+ },
+ __class__: b.internals.X10
+ };
+ b.internals.request = {};
+ b.internals.request.Request = function(a) {
+ this.setConfig(null != a ? a : new b.Config)
+ };
+ b.internals.request.Request.__name__ = !0;
+ b.internals.request.Request.onError = function(a) {};
+ b.internals.request.Request.prototype = {
+ type: null,
+ config: null,
+ userAgent: null,
+ tracker: null,
+ visitor: null,
+ session: null,
+ getConfig: function() {
+ return this.config
+ },
+ setConfig: function(a) {
+ this.config = a
+ },
+ setUserAgent: function(a) {
+ this.userAgent = a
+ },
+ getTracker: function() {
+ return this.tracker
+ },
+ setTracker: function(a) {
+ this.tracker =
+ a
+ },
+ getVisitor: function() {
+ return this.visitor
+ },
+ setVisitor: function(a) {
+ this.visitor = a
+ },
+ getSession: function() {
+ return this.session
+ },
+ setSession: function(a) {
+ this.session = a
+ },
+ increaseTrackCount: function() {
+ this.session.increaseTrackCount();
+ 500 < this.session.getTrackCount() && b.Tracker._raiseError("Google Analytics does not guarantee to process more than 500 requests per session.", "Request.buildHttpRequest");
+ null != this.tracker.getCampaign() && this.tracker.getCampaign().increaseResponseCount()
+ },
+ send: function() {
+ if (null !=
+ this.config.getEndPointHost()) {
+ var a = this.buildParameters();
+ null != this.visitor && (this.setUserAgent(this.visitor.getUserAgent()), a.utmvid = this.visitor.getUniqueId());
+ a = b.internals.Util.convertToUriComponentEncoding(a.toQueryString());
+ a = this.config.getUrlScheme() + "://" + this.config.getEndPointHost() + this.config.getEndPointPath() + "?" + a;
+ this.increaseTrackCount();
+ (new Image).src = a
+ }
+ },
+ getType: function() {
+ return null
+ },
+ buildParameters: function() {
+ var a = new b.internals.ParameterHolder;
+ a.utmac = this.tracker.getAccountId();
+ a.utmhn = this.tracker.getDomainName();
+ a.utmt = "" + this.getType();
+ a.utmn = b.internals.Util.generate32bitRandom();
+ a.utmip = this.visitor.getIpAddress();
+ a.utmhid = this.session.getSessionId();
+ a.utms = this.session.getTrackCount();
+ a = this.buildVisitorParameters(a);
+ a = this.buildCustomVariablesParameter(a);
+ a = this.buildCampaignParameters(a);
+ return a = this.buildCookieParameters(a)
+ },
+ buildVisitorParameters: function(a) {
+ null != this.visitor.getLocale() && (a.utmul = t.replace(this.visitor.getLocale(), "_", "-").toLowerCase());
+ null !=
+ this.visitor.getFlashVersion() && (a.utmfl = this.visitor.getFlashVersion());
+ this.visitor.getJavaEnabled() ? a.utmje = "1" : a.utmje = "0";
+ null != this.visitor.getScreenColorDepth() && (a.utmsc = this.visitor.getScreenColorDepth() + "-bit");
+ a.utmsr = this.visitor.getScreenResolution();
+ return a
+ },
+ buildCustomVariablesParameter: function(a) {
+ var c = this.tracker.getCustomVariables();
+ if (null == c) return a;
+ 5 < c.length && b.Tracker._raiseError("The sum of all custom variables cannot exceed 5 in any given request.", "Request.buildCustomVariablesParameter");
+ var r = new b.internals.X10,
+ e, f;
+ r.clearKey("8");
+ r.clearKey("9");
+ r.clearKey("11");
+ for (var d = 0; d < c.length;) {
+ var g = c[d];
+ ++d;
+ e = b.internals.Util.encodeUriComponent(g.getName());
+ f = b.internals.Util.encodeUriComponent(g.getValue());
+ r.setKey("8", g.getIndex(), e);
+ r.setKey("9", g.getIndex(), f);
+ 3 != g.getScope() && r.setKey("11", g.getIndex(), g.getScope())
+ }
+ c = r.renderUrlString();
+ null != c && (a.utme = null == a.utme ? c : a.utme + c);
+ return a
+ },
+ buildCookieParameters: function(a) {
+ var c = this.generateDomainHash();
+ a.__utma = c + ".";
+ a.__utma +=
+ this.visitor.getUniqueId() + ".";
+ a.__utma += this.visitor.getFirstVisitTime().toString() + ".";
+ a.__utma += this.visitor.getPreviousVisitTime().toString() + ".";
+ a.__utma += this.visitor.getCurrentVisitTime().toString() + ".";
+ a.__utma += this.visitor.getVisitCount();
+ a.__utmb = c + ".";
+ a.__utmb += this.session.getTrackCount() + ".";
+ a.__utmb += "10.";
+ a.__utmb += this.session.getStartTime().toString();
+ a.__utmc = c;
+ c = "__utma=" + a.__utma + ";";
+ null != a.__utmz && (c += "+__utmz=" + a.__utmz + ";");
+ null != a.__utmv && (c += "+__utmv=" + a.__utmv + ";");
+ a.utmcc =
+ c;
+ return a
+ },
+ buildCampaignParameters: function(a) {
+ var c = this.tracker.getCampaign();
+ if (null == c) return a;
+ a.__utmz = this.generateDomainHash() + ".";
+ a.__utmz += c.getCreationTime().toString() + ".";
+ a.__utmz += this.visitor.getVisitCount() + ".";
+ a.__utmz += c.getResponseCount() + ".";
+ c = "utmcid=" + c.getId() + "|utmcsr=" + c.getSource() + "|utmgclid=" + c.getGClickId() + "|utmdclid=" + c.getDClickId() + "|utmccn=" + c.getName() + "|utmcmd=" + c.getMedium() + "|utmctr=" + c.getTerm() + "|utmcct=" + c.getContent();
+ a.__utmz += t.replace(t.replace(c, "+",
+ "%20"), " ", "%20");
+ return a
+ },
+ generateDomainHash: function() {
+ var a = 1;
+ this.tracker.getAllowHash() && (a = b.internals.Util.generateHash(this.tracker.getDomainName()));
+ return a
+ },
+ __class__: b.internals.request.Request
+ };
+ b.internals.request.EventRequest = function(a) {
+ b.internals.request.Request.call(this, a)
+ };
+ b.internals.request.EventRequest.__name__ = !0;
+ b.internals.request.EventRequest.__super__ = b.internals.request.Request;
+ b.internals.request.EventRequest.prototype = w(b.internals.request.Request.prototype, {
+ event: null,
+ getType: function() {
+ return "event"
+ },
+ buildParameters: function() {
+ var a = b.internals.request.Request.prototype.buildParameters.call(this),
+ c = new b.internals.X10;
+ c.clearKey("5");
+ c.clearValue("5");
+ c.setKey("5", 1, this.event.getCategory());
+ c.setKey("5", 2, this.event.getAction());
+ null != this.event.getLabel() && c.setKey("5", 3, this.event.getLabel());
+ 0 != this.event.getValue() && c.setValue("5", 1, this.event.getValue());
+ c = c.renderUrlString();
+ null != c && (a.utme = null == a.utme ? c : a.utme + c);
+ this.event.getNoninteraction() && (a.utmni =
+ 1);
+ return a
+ },
+ getEvent: function() {
+ return this.event
+ },
+ setEvent: function(a) {
+ this.event = a
+ },
+ __class__: b.internals.request.EventRequest
+ });
+ b.internals.request.ItemRequest = function(a) {
+ b.internals.request.Request.call(this, a)
+ };
+ b.internals.request.ItemRequest.__name__ = !0;
+ b.internals.request.ItemRequest.__super__ = b.internals.request.Request;
+ b.internals.request.ItemRequest.prototype = w(b.internals.request.Request.prototype, {
+ item: null,
+ getType: function() {
+ return "item"
+ },
+ buildParameters: function() {
+ var a = b.internals.request.Request.prototype.buildParameters.call(this);
+ a.utmtid = this.item.getOrderId();
+ a.utmipc = this.item.getSku();
+ a.utmipn = this.item.getName();
+ a.utmiva = this.item.getVariation();
+ a.utmipr = this.item.getPrice();
+ a.utmiqt = this.item.getQuantity();
+ return a
+ },
+ buildVisitorParameters: function(a) {
+ return a
+ },
+ buildCustomVariablesParameter: function(a) {
+ return a
+ },
+ getItem: function() {
+ return this.item
+ },
+ setItem: function(a) {
+ this.item = a
+ },
+ __class__: b.internals.request.ItemRequest
+ });
+ b.internals.request.PageviewRequest = function(a) {
+ b.internals.request.Request.call(this, a)
+ };
+ b.internals.request.PageviewRequest.__name__ = !0;
+ b.internals.request.PageviewRequest.__super__ = b.internals.request.Request;
+ b.internals.request.PageviewRequest.prototype = w(b.internals.request.Request.prototype, {
+ page: null,
+ getType: function() {
+ return null
+ },
+ buildParameters: function() {
+ var a = b.internals.request.Request.prototype.buildParameters.call(this);
+ a.utmp = this.page.getPath();
+ a.utmdt = this.page.getTitle();
+ null != this.page.getCharset() && (a.utmcs = this.page.getCharset());
+ null != this.page.getReferrer() && (a.utmr = this.page.getReferrer());
+ 0 != this.page.getLoadTime() &&
+ a.utmn % 100 < this.config.getSitespeedSampleRate() && (a.utme = null == a.utme ? "0" : a.utme + 0);
+ return a
+ },
+ getPage: function() {
+ return this.page
+ },
+ setPage: function(a) {
+ this.page = a
+ },
+ __class__: b.internals.request.PageviewRequest
+ });
+ b.internals.request.SocialInteractionRequest = function(a) {
+ b.internals.request.PageviewRequest.call(this, a)
+ };
+ b.internals.request.SocialInteractionRequest.__name__ = !0;
+ b.internals.request.SocialInteractionRequest.__super__ = b.internals.request.PageviewRequest;
+ b.internals.request.SocialInteractionRequest.prototype =
+ w(b.internals.request.PageviewRequest.prototype, {
+ socialInteraction: null,
+ getType: function() {
+ return "social"
+ },
+ buildParameters: function() {
+ var a = b.internals.request.PageviewRequest.prototype.buildParameters.call(this);
+ a.utmsn = this.socialInteraction.getNetwork();
+ a.utmsa = this.socialInteraction.getAction();
+ a.utmsid = this.socialInteraction.getTarget();
+ null == a.utmsid && (a.utmsid = this.page.getPath());
+ return a
+ },
+ getSocialInteraction: function() {
+ return this.socialInteraction
+ },
+ setSocialInteraction: function(a) {
+ this.socialInteraction =
+ a
+ },
+ __class__: b.internals.request.SocialInteractionRequest
+ });
+ b.internals.request.TransactionRequest = function(a) {
+ b.internals.request.Request.call(this, a)
+ };
+ b.internals.request.TransactionRequest.__name__ = !0;
+ b.internals.request.TransactionRequest.__super__ = b.internals.request.Request;
+ b.internals.request.TransactionRequest.prototype = w(b.internals.request.Request.prototype, {
+ transaction: null,
+ getType: function() {
+ return "tran"
+ },
+ buildParameters: function() {
+ var a = b.internals.request.Request.prototype.buildParameters.call(this);
+ a.utmtid = this.transaction.getOrderId();
+ a.utmtst = this.transaction.getAffiliation();
+ a.utmtto = this.transaction.getTotal();
+ a.utmttx = this.transaction.getTax();
+ a.utmtsp = this.transaction.getShipping();
+ a.utmtci = this.transaction.getCity();
+ a.utmtrg = this.transaction.getRegion();
+ a.utmtco = this.transaction.getCountry();
+ return a
+ },
+ buildVisitorParameters: function(a) {
+ return a
+ },
+ buildCustomVariablesParameter: function(a) {
+ return a
+ },
+ getTransaction: function() {
+ return this.transaction
+ },
+ setTransaction: function(a) {
+ this.transaction =
+ a
+ },
+ __class__: b.internals.request.TransactionRequest
+ });
+ var q = {
+ Http: function(a) {
+ this.url = a;
+ this.headers = new A;
+ this.params = new A;
+ this.async = !0
+ }
+ };
+ q.Http.__name__ = !0;
+ q.Http.requestUrl = function(a) {
+ a = new q.Http(a);
+ a.async = !1;
+ var c = null;
+ a.onData = function(a) {
+ c = a
+ };
+ a.onError = function(a) {
+ throw a;
+ };
+ a.request(!1);
+ return c
+ };
+ q.Http.prototype = {
+ url: null,
+ responseData: null,
+ async: null,
+ postData: null,
+ headers: null,
+ params: null,
+ req: null,
+ request: function(a) {
+ var c = this;
+ c.responseData = null;
+ var b = this.req = u.Browser.createXMLHttpRequest(),
+ e = function(a) {
+ if (4 == b.readyState) {
+ var e;
+ try {
+ e = b.status
+ } catch (f) {
+ e = null
+ }
+ void 0 == e && (e = null);
+ if (null != e) c.onStatus(e);
+ if (null != e && 200 <= e && 400 > e) c.req = null, c.onData(c.responseData = b.responseText);
+ else if (null == e) c.req = null, c.onError("Failed to connect or resolve host");
+ else switch (e) {
+ case 12029:
+ c.req = null;
+ c.onError("Failed to connect to host");
+ break;
+ case 12007:
+ c.req = null;
+ c.onError("Unknown host");
+ break;
+ default:
+ c.req = null, c.responseData = b.responseText, c.onError("Http Error #" + b.status)
+ }
+ }
+ };
+ this.async &&
+ (b.onreadystatechange = e);
+ var f = this.postData;
+ if (null != f) a = !0;
+ else
+ for (var d = this.params.iterator(); d.hasNext();) var g = d.next(),
+ f = null == f ? "" : f + "&",
+ f = f + (encodeURIComponent(g.param) + "=" + encodeURIComponent(g.value));
+ try {
+ if (a) b.open("POST", this.url, this.async);
+ else if (null != f) {
+ var k = 1 >= this.url.split("?").length;
+ b.open("GET", this.url + (k ? "?" : "&") + f, this.async);
+ f = null
+ } else b.open("GET", this.url, this.async)
+ } catch (h) {
+ c.req = null;
+ this.onError(h.toString());
+ return
+ }!x.exists(this.headers, function(a) {
+ return "Content-Type" ==
+ a.header
+ }) && a && null == this.postData && b.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ for (a = this.headers.iterator(); a.hasNext();) d = a.next(), b.setRequestHeader(d.header, d.value);
+ b.send(f);
+ this.async || e(null)
+ },
+ onData: function(a) {},
+ onError: function(a) {},
+ onStatus: function(a) {},
+ __class__: q.Http
+ };
+ q.Timer = function(a) {
+ var c = this;
+ this.id = setInterval(function() {
+ c.run()
+ }, a)
+ };
+ q.Timer.__name__ = !0;
+ q.Timer.delay = function(a, c) {
+ var b = new q.Timer(c);
+ b.run = function() {
+ b.stop();
+ a()
+ };
+ return b
+ };
+ q.Timer.prototype = {
+ id: null,
+ stop: function() {
+ null != this.id && (clearInterval(this.id), this.id = null)
+ },
+ run: function() {},
+ __class__: q.Timer
+ };
+ q.ds = {};
+ q.ds.StringMap = function() {
+ this.h = {}
+ };
+ q.ds.StringMap.__name__ = !0;
+ q.ds.StringMap.__interfaces__ = [z];
+ q.ds.StringMap.prototype = {
+ h: null,
+ set: function(a, c) {
+ this.h["$" + a] = c
+ },
+ get: function(a) {
+ return this.h["$" + a]
+ },
+ exists: function(a) {
+ return this.h.hasOwnProperty("$" + a)
+ },
+ remove: function(a) {
+ a = "$" + a;
+ if (!this.h.hasOwnProperty(a)) return !1;
+ delete this.h[a];
+ return !0
+ },
+ keys: function() {
+ var a = [],
+ c;
+ for (c in this.h) this.h.hasOwnProperty(c) && a.push(c.substr(1));
+ return m.iter(a)
+ },
+ iterator: function() {
+ return {
+ ref: this.h,
+ it: this.keys(),
+ hasNext: function() {
+ return this.it.hasNext()
+ },
+ next: function() {
+ var a = this.it.next();
+ return this.ref["$" + a]
+ }
+ }
+ },
+ __class__: q.ds.StringMap
+ };
+ q.io = {};
+ q.io.Eof = function() {};
+ q.io.Eof.__name__ = !0;
+ q.io.Eof.prototype = {
+ toString: function() {
+ return "Eof"
+ },
+ __class__: q.io.Eof
+ };
+ q.xml = {};
+ q.xml.Parser = function() {};
+ q.xml.Parser.__name__ = !0;
+ q.xml.Parser.parse = function(a) {
+ var c = h.createDocument();
+ q.xml.Parser.doParse(a, 0, c);
+ return c
+ };
+ q.xml.Parser.doParse = function(a, c, b) {
+ null == c && (c = 0);
+ for (var e = null, f = 1, d = 1, g = null, k = 0, p = 0, n = 0, l = a.charCodeAt(c), s = new C; l == l;) {
+ switch (f) {
+ case 0:
+ switch (l) {
+ case 10:
+ case 13:
+ case 9:
+ case 32:
+ break;
+ default:
+ f = d;
+ continue
+ }
+ break;
+ case 1:
+ switch (l) {
+ case 60:
+ f = 0;
+ d = 2;
+ break;
+ default:
+ k = c;
+ f = 13;
+ continue
+ }
+ break;
+ case 13:
+ 60 == l ? (d = h.createPCData(s.b + m.substr(a, k, c - k)), s = new C, b.addChild(d), p++, f = 0, d = 2) : 38 == l && (s.addSub(a, k, c - k), f = 18, d = 13, k = c + 1);
+ break;
+ case 17:
+ 93 == l && 93 == a.charCodeAt(c + 1) &&
+ 62 == a.charCodeAt(c + 2) && (f = h.createCData(m.substr(a, k, c - k)), b.addChild(f), p++, c += 2, f = 1);
+ break;
+ case 2:
+ switch (l) {
+ case 33:
+ if (91 == a.charCodeAt(c + 1)) {
+ c += 2;
+ if ("CDATA[" != m.substr(a, c, 6).toUpperCase()) throw "Expected = l || 65 <= l && 90 >= l || 48 <= l && 57 >= l || 58 == l || 46 == l || 95 == l || 45 == l)) {
+ if (c == k) throw "Expected node name";
+ e = h.createElement(m.substr(a, k, c - k));
+ b.addChild(e);
+ f = 0;
+ d = 4;
+ continue
+ }
+ break;
+ case 4:
+ switch (l) {
+ case 47:
+ f = 11;
+ p++;
+ break;
+ case 62:
+ f = 9;
+ p++;
+ break;
+ default:
+ f = 5;
+ k = c;
+ continue
+ }
+ break;
+ case 5:
+ if (!(97 <= l && 122 >= l || 65 <= l && 90 >= l || 48 <= l && 57 >= l || 58 == l || 46 == l || 95 == l || 45 == l)) {
+ if (k == c) throw "Expected attribute name";
+ g = m.substr(a,
+ k, c - k);
+ if (e.exists(g)) throw "Duplicate attribute";
+ f = 0;
+ d = 6;
+ continue
+ }
+ break;
+ case 6:
+ switch (l) {
+ case 61:
+ f = 0;
+ d = 7;
+ break;
+ default:
+ throw "Expected =";
+ }
+ break;
+ case 7:
+ switch (l) {
+ case 34:
+ case 39:
+ f = 8;
+ k = c;
+ break;
+ default:
+ throw 'Expected "';
+ }
+ break;
+ case 8:
+ l == a.charCodeAt(k) && (d = m.substr(a, k + 1, c - k - 1), e.set(g, d), f = 0, d = 4);
+ break;
+ case 9:
+ k = c = q.xml.Parser.doParse(a, c, e);
+ f = 1;
+ break;
+ case 11:
+ switch (l) {
+ case 62:
+ f = 1;
+ break;
+ default:
+ throw "Expected >";
+ }
+ break;
+ case 12:
+ switch (l) {
+ case 62:
+ return 0 == p && b.addChild(h.createPCData("")), c;
+ default:
+ throw "Expected >";
+ }
+ case 10:
+ if (!(97 <= l && 122 >= l || 65 <= l && 90 >= l || 48 <= l && 57 >= l || 58 == l || 46 == l || 95 == l || 45 == l)) {
+ if (k == c) throw "Expected node name";
+ if (m.substr(a, k, c - k) != b.get_nodeName()) throw "Expected " + b.get_nodeName() + ">";
+ f = 0;
+ d = 12;
+ continue
+ }
+ break;
+ case 15:
+ 45 == l && 45 == a.charCodeAt(c + 1) && 62 == a.charCodeAt(c + 2) && (b.addChild(h.createComment(m.substr(a, k, c - k))), c += 2, f = 1);
+ break;
+ case 16:
+ 91 == l ? n++ : 93 == l ? n-- : 62 == l && 0 == n && (b.addChild(h.createDocType(m.substr(a, k, c - k))), f = 1);
+ break;
+ case 14:
+ 63 == l && 62 == a.charCodeAt(c + 1) && (c++, f = m.substr(a,
+ k + 1, c - k - 2), b.addChild(h.createProcessingInstruction(f)), f = 1);
+ break;
+ case 18:
+ 59 == l && (k = m.substr(a, k, c - k), 35 == k.charCodeAt(0) ? (k = 120 == k.charCodeAt(1) ? y.parseInt("0" + m.substr(k, 1, k.length - 1)) : y.parseInt(m.substr(k, 1, k.length - 1)), s.add(String.fromCharCode(k))) : q.xml.Parser.escapes.exists(k) ? s.add(q.xml.Parser.escapes.get(k)) : s.b += y.string("&" + k + ";"), k = c + 1, f = d)
+ }
+ l = t.fastCodeAt(a, ++c)
+ }
+ 1 == f && (k = c, f = 13);
+ if (13 == f) return c == k && 0 != p || b.addChild(h.createPCData(s.b + m.substr(a, k, c - k))), c;
+ throw "Unexpected end";
+ };
+ var u = {
+ Boot: function() {}
+ };
+ u.Boot.__name__ = !0;
+ u.Boot.getClass = function(a) {
+ return a instanceof Array && null == a.__enum__ ? Array : a.__class__
+ };
+ u.Boot.__string_rec = function(a, c) {
+ if (null == a) return "null";
+ if (5 <= c.length) return "<...>";
+ var b = typeof a;
+ "function" == b && (a.__name__ || a.__ename__) && (b = "object");
+ switch (b) {
+ case "object":
+ if (a instanceof Array) {
+ if (a.__enum__) {
+ if (2 == a.length) return a[0];
+ b = a[0] + "(";
+ c += "\t";
+ for (var e = 2, d = a.length; e < d;) var g = e++,
+ b = 2 != g ? b + ("," + u.Boot.__string_rec(a[g], c)) : b + u.Boot.__string_rec(a[g],
+ c);
+ return b + ")"
+ }
+ b = a.length;
+ e = "[";
+ c += "\t";
+ for (d = 0; d < b;) g = d++, e += (0 < g ? "," : "") + u.Boot.__string_rec(a[g], c);
+ return e + "]"
+ }
+ try {
+ e = a.toString
+ } catch (h) {
+ return "???"
+ }
+ if (null != e && e != Object.toString && (b = a.toString(), "[object Object]" != b)) return b;
+ b = null;
+ e = "{\n";
+ c += "\t";
+ d = null != a.hasOwnProperty;
+ for (b in a) d && !a.hasOwnProperty(b) || "prototype" == b || "__class__" == b || "__super__" == b || "__interfaces__" == b || "__properties__" == b || (2 != e.length && (e += ", \n"), e += c + b + " : " + u.Boot.__string_rec(a[b], c));
+ c = c.substring(1);
+ return e +
+ ("\n" + c + "}");
+ case "function":
+ return "";
+ case "string":
+ return a;
+ default:
+ return String(a)
+ }
+ };
+ u.Boot.__interfLoop = function(a, c) {
+ if (null == a) return !1;
+ if (a == c) return !0;
+ var b = a.__interfaces__;
+ if (null != b)
+ for (var e = 0, d = b.length; e < d;) {
+ var g = e++,
+ g = b[g];
+ if (g == c || u.Boot.__interfLoop(g, c)) return !0
+ }
+ return u.Boot.__interfLoop(a.__super__, c)
+ };
+ u.Boot.__instanceof = function(a, c) {
+ if (null == c) return !1;
+ switch (c) {
+ case H:
+ return (a | 0) === a;
+ case E:
+ return "number" == typeof a;
+ case F:
+ return "boolean" == typeof a;
+ case String:
+ return "string" ==
+ typeof a;
+ case Array:
+ return a instanceof Array && null == a.__enum__;
+ case I:
+ return !0;
+ default:
+ if (null != a) {
+ if ("function" == typeof c && (a instanceof c || u.Boot.__interfLoop(u.Boot.getClass(a), c))) return !0
+ } else return !1;
+ return c == J && null != a.__name__ || c == K && null != a.__ename__ ? !0 : a.__enum__ == c
+ }
+ };
+ u.Browser = function() {};
+ u.Browser.__name__ = !0;
+ u.Browser.createXMLHttpRequest = function() {
+ if ("undefined" != typeof XMLHttpRequest) return new XMLHttpRequest;
+ if ("undefined" != typeof ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
+ throw "Unable to create XMLHttpRequest object.";
+ };
+ var d = {};
+ d.Muses = n.muses.Muses = function(a) {
+ this.src = this.name = this.lastMessage = null;
+ this.progress = 0;
+ this.lastAudioName = null;
+ this.playURL = "";
+ this.playTimeout = this.bufferingTimeout = 0;
+ this.desiredStatus = "stop";
+ this.audio = this.lastAudioStatus = this.lastAudioSrc = null;
+ this.src = a.url;
+ this.name = a.title;
+ this.audio = new Audio;
+ this.ui = new d.UI(this, a);
+ a.autoplay && (a = window.navigator.userAgent.toLowerCase(), -1 == a.indexOf("iphone") && -1 == a.indexOf("ipad") && -1 == a.indexOf("ipod") &&
+ this.playAudio())
+ n.MRP.html = this;
+ };
+ d.Muses.__name__ = !0;
+ d.Muses.initTimer = function(a) {
+ -1 == m.indexOf(d.Muses.instances, a, 0) && d.Muses.instances.push(a);
+ null == d.Muses.statusTimer && (d.Muses.statusTimer = new q.Timer(500), d.Muses.statusTimer.run = function() {
+ for (var a = 0, b = d.Muses.instances; a < b.length;) {
+ var e = b[a];
+ ++a;
+ try {
+ e.checkAudioStatus()
+ } catch (f) {
+ if (u.Boot.__instanceof(f, String)) console.log("Error: " + f);
+ else throw f;
+ }
+ }
+ })
+ };
+ d.Muses.prototype = {
+ audio: null,
+ lastAudioStatus: null,
+ lastAudioSrc: null,
+ desiredStatus: null,
+ playTimeout: null,
+ bufferingTimeout: null,
+ playURL: null,
+ lastAudioName: null,
+ progress: null,
+ src: null,
+ name: null,
+ lastMessage: null,
+ ui: null,
+ playAudio: function() {
+ d.Muses.initTimer(this);
+ this.stopAudio(!1);
+ this.playURL = this.src;
+ this.desiredStatus = "play";
+ this.playTimeout = 3600;
+ this.bufferingTimeout = 40;
+ this.lastAudioSrc = this.audio.src = this.src;
+ this.lastAudioName = this.name;
+ this.lastAudioStatus = null;
+ this.audio.autoplay = !0;
+ this.audio.play();
+ this.ui.setPlaying();
+ d.Tracker.track(this.src, this.name, this.ui, !0)
+ },
+ stopAudio: function(a) {
+ this.desiredStatus =
+ "stop";
+ null != this.audio && (this.audio.pause(), this.audio.src = "");
+ a && (this.lastAudioStatus = 4)
+ },
+ retryAudio: function() {
+ var a = this;
+ this.lastAudioStatus = -1;
+ q.Timer.delay(function() {
+ -1 == a.lastAudioStatus && a.playAudio()
+ }, 2E3)
+ },
+ setVolume: function(a) {
+ this.audio.volume = a;
+ null != this.ui && this.ui.setVolume(a)
+ },
+ checkAudioStatus: function() {
+ var a = "",
+ a = null;
+ if (null != this.audio) {
+ a = this.audio.networkState;
+ y.string(this.audio.error);
+ if (2 == a || 1 == a) a = 0 == this.audio.played.length ? 1 : 2;
+ if (null != this.audio.error || 4 == this.lastAudioStatus) a =
+ 3
+ }
+ 0 == a ? (a = "Error al conectar", this.lastMessage != a && this.ui.setError()) : -1 == a ? a = "retry..." : null == a ? a = "init" : 1 == a ? (this.bufferingTimeout--, 0 == this.bufferingTimeout && this.retryAudio(), a = "Buffering... " + Math.round(this.bufferingTimeout / 2), this.lastMessage != a && this.ui.setBuffering()) : 2 == a ? (this.playTimeout--, 0 == this.playTimeout && this.retryAudio(), a = "Playing... ", this.lastMessage != a && this.ui.setPlaying()) : 4 == a || 3 == a ? "play" == this.desiredStatus ? (a = "Error de red", this.retryAudio(), this.lastMessage != a && this.ui.setError()) :
+ (a = "Stopped.", this.lastMessage != a && this.ui.setStopped()) : (a = "ERROR: " + a, console.log(a));
+ this.lastMessage = a
+ },
+ __class__: d.Muses
+ };
+ d.Tracker = function() {};
+ d.Tracker.__name__ = !0;
+ d.Tracker.track = function(a, c, g, e) {
+ d.Tracker.enabled && (null == d.Tracker.tracked && (d.Tracker.tracked = new q.ds.StringMap, b.Stats.init("UA-12297597-1", "hosted.musesradioplayer.com")), e && d.Tracker.tracked.get(a) || (b.Stats.trackPageview("/tracker/track.php?version=0.2 beta&url=" + a + "&player=HTML5&skin=" + g.skin, "Muses - HTML5 Tracking [Radio: " +
+ c + "]"), d.Tracker.tracked.set(a, !0)))
+ };
+ d.UI = n.muses.UI = function(a, c) {
+ this.skinFolder = this.baseURL = this.skinDomain = "";
+ this.togglePlayStopEnabled = this.lastToggleValue = !1;
+ this.mainDiv = this.playButton = this.stopButton = this.volumeControl = this.bg = this.statusText = this.artistText = this.songTitleText = this.statusLed = null;
+ this.skin = "";
+ var b = this;
+ this.title = c.title;
+ this.skin = c.skin;
+ this.muses = a;
+ this.mainDiv = window.document.getElementById(c.elementId);
+ this.mainDiv.style.position = "relative";
+ this.statusText = new d.skin.TitleText(this);
+ this.artistText = new d.skin.TitleText(this);
+ this.songTitleText = new d.skin.TitleText(this);
+ this.statusLed = new d.skin.StatusLed(this);
+ this.volumeControl = new d.skin.VolumeControl(this, this.muses);
+ this.volumeControl.setVolume(c.volume / 100);
+ this.playButton = new d.skin.Button(this, "play");
+ this.stopButton = new d.skin.Button(this, "stop");
+ this.loadSkin(this.skin);
+ this.statusLed.configured && this.mainDiv.appendChild(this.statusLed.container);
+ this.statusText.configured && this.mainDiv.appendChild(this.statusText.container);
+ this.artistText.configured && this.mainDiv.appendChild(this.artistText.container);
+ this.songTitleText.configured && this.mainDiv.appendChild(this.songTitleText.container);
+ this.volumeControl.configured && this.mainDiv.appendChild(this.volumeControl.container);
+ this.mainDiv.appendChild(this.playButton.container);
+ this.mainDiv.appendChild(this.stopButton.container);
+ this.stopButton.container.onclick = function(a) {
+ b.muses.stopAudio(!1)
+ };
+ this.playButton.container.onclick = function(a) {
+ b.muses.playAudio()
+ };
+ this.showInfo(c.welcome)
+ };
+ d.UI.__name__ = !0;
+ d.UI.parseInt = function(a, c) {
+ return null == a ? c : y.parseInt(a)
+ };
+ d.UI.prototype = {
+ skin: null,
+ mainDiv: null,
+ playButton: null,
+ stopButton: null,
+ volumeControl: null,
+ bg: null,
+ statusText: null,
+ artistText: null,
+ songTitleText: null,
+ statusLed: null,
+ togglePlayStopEnabled: null,
+ lastToggleValue: null,
+ skinFolder: null,
+ baseURL: null,
+ skinDomain: null,
+ title: null,
+ titleTimer: null,
+ muses: null,
+ XmlToLower: function(a) {
+ for (var c = a.attributes(); c.hasNext();) {
+ var b = c.next();
+ a.set(b.toLowerCase(), a.get(b))
+ }
+ },
+ enablePlayStopToggle: function() {
+ this.togglePlayStopEnabled = !0;
+ this.togglePlayStop(this.lastToggleValue)
+ },
+ togglePlayStop: function(a) {
+ this.lastToggleValue = a;
+ this.togglePlayStopEnabled && (this.playButton.setVisible(!a), this.stopButton.setVisible(a))
+ },
+ makeAbsolute: function(a) {
+ return -1 != a.indexOf("://") ? a : "/" == a.charAt(0) ? this.skinDomain + a : this.baseURL + a
+ },
+ getDomainName: function(a) {
+ a += "/";
+ var c = a.indexOf("://");
+ if (-1 == c) return "";
+ c = a.indexOf("/", c + 3);
+ return m.substr(a, 0, c)
+ },
+ getDirName: function(a) {
+ var c = a.lastIndexOf("/");
+ return -1 == c ? "" : m.substr(a, 0, c + 1)
+ },
+ loadSkin: function(a) {
+ var c =
+ q.Http.requestUrl(a);
+ this.baseURL = this.getDirName(a);
+ this.skinDomain = this.getDomainName(a);
+ a = !1;
+ for (c = h.parse(c).elements(); c.hasNext();) {
+ var b = c.next();
+ if ("ffmp3-skin" != b.get_nodeName().toLowerCase() && "muses-skin" != b.get_nodeName().toLowerCase()) break;
+ this.XmlToLower(b);
+ null == b.get("folder") ? this.skinFolder = "" : this.skinFolder = b.get("folder");
+ (a = null == b.get("toggleplaystop") ? !1 : "true" == b.get("toggleplaystop")) && this.enablePlayStopToggle();
+ 0 < this.skinFolder.length && "/" != this.skinFolder.charAt(this.skinFolder.length -
+ 1) && (this.skinFolder += "/");
+ this.skinFolder = this.makeAbsolute(this.skinFolder);
+ for (a = b.elements(); a.hasNext();) switch (b = a.next(), this.XmlToLower(b), b.get_nodeName().toLowerCase()) {
+ case "bg":
+ this.configureBG(b);
+ break;
+ case "play":
+ this.playButton.configure(b);
+ break;
+ case "stop":
+ this.stopButton.configure(b);
+ break;
+ case "text":
+ this.statusText.configureText(b, "left");
+ break;
+ case "status":
+ this.statusLed.configure(b);
+ break;
+ case "volume":
+ this.volumeControl.configure(b);
+ break;
+ case "artist":
+ this.artistText.configureText(b,
+ "left");
+ break;
+ case "songtitle":
+ this.songTitleText.configureText(b, "left")
+ }
+ }
+ },
+ loadImage: function(a, c) {
+ a.src = this.skinFolder + c
+ },
+ configureBG: function(a) {
+ this.bg = new Image;
+ this.loadImage(this.bg, a.get("image"));
+ this.bg.style.position = "absolute";
+ this.bg.style.left = d.UI.parseInt(a.get("x"), 0) + "px";
+ this.bg.style.top = d.UI.parseInt(a.get("y"), 0) + "px";
+ this.mainDiv.appendChild(this.bg)
+ },
+ configureButton: function(a, c) {
+ a.src = this.skinFolder + c.get("image");
+ a.style.position = "absolute";
+ a.style.left = d.UI.parseInt(c.get("x"),
+ 0) + "px";
+ a.style.top = d.UI.parseInt(c.get("y"), 0) + "px"
+ },
+ setPlaying: function() {
+ this.showInfo("Play");
+ this.statusLed.on();
+ this.togglePlayStop(!0)
+ },
+ setStopped: function() {
+ this.showInfo("Stop");
+ this.statusLed.off();
+ this.togglePlayStop(!1)
+ },
+ setBuffering: function() {
+ this.showInfo("Buffering");
+ this.statusLed.on();
+ this.togglePlayStop(!0)
+ },
+ setError: function() {
+ this.showInfo("Error");
+ this.statusLed.off()
+ },
+ setVolume: function(a) {
+ this.volumeControl.setVolume(a);
+ this.showInfo("Volume: " + Math.round(100 * a) + "%")
+ },
+ showInfo: function(a,
+ c) {
+ null == c && (c = !0);
+ null == a ? this.restoreTitle() : (null != this.titleTimer && this.titleTimer.stop(), this.statusText.setText(a), c && (this.titleTimer = new q.Timer(2E3), this.titleTimer.run = p(this, this.restoreTitle)))
+ },
+ restoreTitle: function() {
+ null != this.titleTimer && this.titleTimer.stop();
+ this.statusText.setText(this.title)
+ },
+ __class__: d.UI
+ };
+ d.skin = {};
+ d.skin.UIComponent = function(a) {
+ this.ui = a;
+ this.configured = !1;
+ this.container = window.document.createElement("div");
+ this.container.style.position = "absolute"
+ };
+ d.skin.UIComponent.__name__ = !0;
+ d.skin.UIComponent.prototype = {
+ container: null,
+ configured: null,
+ ui: null,
+ setVisible: function(a) {
+ this.container.style.display = a ? "block" : "none"
+ },
+ configure: function(a) {
+ this.configured = !0;
+ this.container.style.left = d.UI.parseInt(a.get("x"), 0) + "px";
+ this.container.style.top = d.UI.parseInt(a.get("y"), 0) + "px";
+ null != a.get("width") && (this.container.style.width = d.UI.parseInt(a.get("width"), 0) + "px");
+ null != a.get("height") && (this.container.style.height = d.UI.parseInt(a.get("height"), 0) + "px")
+ },
+ appendChild: function(a,
+ c) {
+ null == c && (c = !0);
+ a.style.position = "absolute";
+ a.style.left = a.style.top = "0px";
+ a.style.display = c ? "block" : "none";
+ this.container.appendChild(a)
+ },
+ __class__: d.skin.UIComponent
+ };
+ d.skin.Button = function(a, c) {
+ var b = this;
+ d.skin.UIComponent.call(this, a);
+ this.mouseOverState = new Image;
+ this.mouseDownState = new Image;
+ this.noMouseState = new Image;
+ this.container.title = c;
+ this.mouseDownState.style.opacity = "0";
+ this.mouseOverState.style.opacity = "0";
+ this.container.onmouseup = function(a) {
+ b.mouseDownState.style.opacity = "0";
+ b.mouseOverState.style.opacity = "1"
+ };
+ this.container.onmousedown = function(a) {
+ b.mouseDownState.style.opacity = "1";
+ b.mouseOverState.style.opacity = "0"
+ };
+ this.container.onmouseover = function(a) {
+ b.mouseOverState.style.opacity = "1"
+ };
+ this.container.onmouseout = function(a) {
+ b.mouseDownState.style.opacity = "0";
+ b.mouseOverState.style.opacity = "0"
+ }
+ };
+ d.skin.Button.__name__ = !0;
+ d.skin.Button.__super__ = d.skin.UIComponent;
+ d.skin.Button.prototype = w(d.skin.UIComponent.prototype, {
+ mouseOverState: null,
+ mouseDownState: null,
+ noMouseState: null,
+ configure: function(a) {
+ d.skin.UIComponent.prototype.configure.call(this, a);
+ null != a.get("bgimage") && (this.ui.loadImage(this.noMouseState, a.get("bgimage")), this.appendChild(this.noMouseState));
+ null != a.get("clickimage") && (this.ui.loadImage(this.mouseDownState, a.get("clickimage")), this.appendChild(this.mouseDownState));
+ this.ui.loadImage(this.mouseOverState, a.get("image"));
+ this.appendChild(this.mouseOverState)
+ },
+ __class__: d.skin.Button
+ });
+ d.skin.StatusLed = function(a) {
+ d.skin.UIComponent.call(this, a);
+ this.playMC =
+ new Image;
+ this.stopMC = new Image
+ };
+ d.skin.StatusLed.__name__ = !0;
+ d.skin.StatusLed.__super__ = d.skin.UIComponent;
+ d.skin.StatusLed.prototype = w(d.skin.UIComponent.prototype, {
+ playMC: null,
+ stopMC: null,
+ configure: function(a) {
+ d.skin.UIComponent.prototype.configure.call(this, a);
+ null != a.get("imageplay") && -1 == a.get("imageplay").indexOf(".swf") && (this.ui.loadImage(this.playMC, a.get("imageplay")), this.appendChild(this.playMC, !1));
+ null != a.get("imagestop") && -1 == a.get("imagestop").indexOf(".swf") && (this.ui.loadImage(this.stopMC,
+ a.get("imagestop")), this.appendChild(this.stopMC, !0))
+ },
+ on: function() {
+ this.playMC.style.display = "block";
+ this.stopMC.style.display = "none"
+ },
+ off: function() {
+ this.playMC.style.display = "none";
+ this.stopMC.style.display = "block"
+ },
+ __class__: d.skin.StatusLed
+ });
+ d.skin.TitleText = function(a) {
+ d.skin.UIComponent.call(this, a);
+ this.container.style.fontFamily = "Silkscreen";
+ this.container.style.fontSize = "12px"
+ };
+ d.skin.TitleText.__name__ = !0;
+ d.skin.TitleText.__super__ = d.skin.UIComponent;
+ d.skin.TitleText.prototype = w(d.skin.UIComponent.prototype, {
+ configureText: function(a, b) {
+ this.configure(a);
+ switch (a.get("align")) {
+ case "center":
+ this.container.style.textAlign = "center";
+ break;
+ case "right":
+ this.container.style.textAlign = "right";
+ break;
+ default:
+ this.container.style.textAlign = b
+ }
+ this.container.style.padding = "2px";
+ this.container.style.whiteSpace = "nowrap";
+ this.container.style.fontFamily = a.get("font");
+ this.container.style.fontSize = d.UI.parseInt(a.get("size"), 12) + "px";
+ this.container.style.color = a.get("color");
+ this.container.style.overflow = "hidden"
+ },
+ setText: function(a) {
+ this.container.innerHTML =
+ a
+ },
+ __class__: d.skin.TitleText
+ });
+ d.skin.VolumeControl = function(a, b) {
+ d.skin.UIComponent.call(this, a);
+ this.muses = b;
+ this.firstDraw = !0;
+ this.bars = null;
+ this.mousePressed = !1;
+ this.volume = 1;
+ this.setMode("bars");
+ this.draw(this.container);
+ this.vertMargin = this.horizMargin = this.height = this.width = 0;
+ this.barStep = 2;
+ this.barWidth = 1;
+ this.barColors = this.bgColors = null
+ };
+ d.skin.VolumeControl.__name__ = !0;
+ d.skin.VolumeControl.__super__ = d.skin.UIComponent;
+ d.skin.VolumeControl.prototype = w(d.skin.UIComponent.prototype, {
+ volume: null,
+ width: null,
+ height: null,
+ horizMargin: null,
+ horizDesp: null,
+ vertMargin: null,
+ vertDesp: null,
+ barStep: null,
+ barWidth: null,
+ bgColors: null,
+ barColors: null,
+ bars: null,
+ cover: null,
+ spriteBar: null,
+ firstDraw: null,
+ mode: null,
+ holder: null,
+ mousePressed: null,
+ muses: null,
+ draw: function(a) {},
+ setMode: function(a) {
+ switch (a.toLowerCase()) {
+ case "bars":
+ this.draw = p(this, this.drawBars);
+ break;
+ case "holder":
+ this.draw = p(this, this.drawHolder);
+ break;
+ case "vholder":
+ this.draw = p(this, this.drawVHolder)
+ }
+ this.mode = a
+ },
+ drawHolder: function(a) {
+ this.holder.style.left =
+ this.volume * (this.width - this.holder.width) + "px"
+ },
+ drawVHolder: function(a) {
+ this.holder.style.top = (1 - this.volume) * (this.height - this.holder.height) + "px"
+ },
+ drawBars: function(a) {
+ if (null != this.barColors && 0 != this.barStep && (a = Math.round((this.width - 2 * this.horizMargin) / this.barStep), 0 != a)) {
+ var b = (this.height - 2 * this.vertMargin + 1) / a,
+ d = this.height - this.vertMargin,
+ e = this.horizMargin;
+ if (null == this.bars) {
+ this.bars = [];
+ for (var f = 0; f < a;) {
+ var g = f++,
+ h;
+ h = window.document.createElement("div");
+ this.bars.push(h);
+ this.appendChild(h);
+ h.style.left = e + g * this.barStep + "px";
+ h.style.top = d - g * b + "px";
+ h.style.width = Math.round(this.barWidth) + "px";
+ h.style.height = Math.ceil(g * b) + "px"
+ }
+ }
+ b = 0;
+ for (d = Math.round(this.volume * a); b < d;) e = b++, this.bars[e].style.backgroundColor = this.barColors[0];
+ for (b = Math.round(this.volume * a); b < a;) d = b++, this.bars[d].style.backgroundColor = this.barColors[1]
+ }
+ },
+ setVolume: function(a) {
+ this.volume != a && (this.volume = a, 1 < this.volume && (this.volume = 1), 0 > this.volume && (this.volume = 0), this.muses.setVolume(this.volume), this.draw(this.container))
+ },
+ getVolume: function() {
+ return this.volume
+ },
+ mouseDown: function(a) {
+ var b;
+ this.mousePressed = !0;
+ "vholder" != this.mode ? (a = a.layerX, b = this.width) : (a = this.height - a.layerY, b = this.height);
+ a -= .06 * b;
+ 0 > a && (a = 0);
+ a = Math.round(1.06 * a);
+ a > b && (a = b);
+ this.setVolume(a / (b - 2))
+ },
+ mouseUp: function(a) {
+ this.mousePressed = !1
+ },
+ mouseMove: function(a) {
+ this.mousePressed && this.mouseDown(a)
+ },
+ mouseWheel: function(a) {
+ 0 < a.wheelDelta ? this.setVolume(this.volume + .025) : this.setVolume(this.volume - .025)
+ },
+ configure: function(a) {
+ d.skin.UIComponent.prototype.configure.call(this,
+ a);
+ this.width = d.UI.parseInt(a.get("width"), 0);
+ this.height = d.UI.parseInt(a.get("height"), 0);
+ this.barColors = [a.get("color1"), a.get("color2")];
+ this.barStep = d.UI.parseInt(a.get("barstep"), 2);
+ this.barWidth = d.UI.parseInt(a.get("barwidth"), 1);
+ var b;
+ b = null != a.get("mode") ? a.get("mode").toLowerCase() : null;
+ this.setMode(b);
+ if ("holder" == b || "vholder" == b) this.holder = new Image, this.holder.onload = p(this, this.holderLoad), this.ui.loadImage(this.holder, a.get("holderimage")), this.appendChild(this.holder);
+ this.draw(this.container);
+ this.cover = window.document.createElement("div");
+ this.cover.onmousedown = p(this, this.mouseDown);
+ this.cover.onmousemove = p(this, this.mouseMove);
+ this.cover.onmousewheel = p(this, this.mouseWheel);
+ this.cover.onmouseup = p(this, this.mouseUp);
+ this.cover.onmouseout = p(this, this.mouseUp);
+ this.cover.style.width = this.container.style.width;
+ this.cover.style.height = this.container.style.height;
+ this.appendChild(this.cover)
+ },
+ holderLoad: function(a) {
+ this.holder.style.left = .5 * (this.width - this.holder.width) + "px";
+ this.holder.style.top =
+ .5 * (this.height - this.holder.height) + "px";
+ this.draw(this.container)
+ },
+ __class__: d.skin.VolumeControl
+ });
+ var G = 0;
+ Array.prototype.indexOf && (m.indexOf = function(a, b, d) {
+ return Array.prototype.indexOf.call(a, b, d)
+ });
+ Math.NaN = Number.NaN;
+ Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
+ Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
+ Math.isFinite = function(a) {
+ return isFinite(a)
+ };
+ Math.isNaN = function(a) {
+ return isNaN(a)
+ };
+ String.prototype.__class__ = String;
+ String.__name__ = !0;
+ Array.__name__ = !0;
+ Date.prototype.__class__ =
+ Date;
+ Date.__name__ = ["Date"];
+ var H = {
+ __name__: ["Int"]
+ },
+ I = {
+ __name__: ["Dynamic"]
+ },
+ E = Number;
+ E.__name__ = ["Float"];
+ var F = Boolean;
+ F.__ename__ = ["Bool"];
+ var J = {
+ __name__: ["Class"]
+ },
+ K = {};
+ h.Element = "element";
+ h.PCData = "pcdata";
+ h.CData = "cdata";
+ h.Comment = "comment";
+ h.DocType = "doctype";
+ h.ProcessingInstruction = "processingInstruction";
+ h.Document = "document";
+ g.objectId = "MRPObject";
+ g.playerCounter = 0;
+ g.__hostPrefix = "hosted";
+ g.__hostMidfix = "muses";
+ b.Campaign.TYPE_DIRECT = "direct";
+ b.Campaign.TYPE_ORGANIC = "organic";
+ b.Campaign.TYPE_REFERRAL =
+ "referral";
+ b.Config.ERROR_SEVERITY_SILENCE = 0;
+ b.Config.ERROR_SEVERITY_TRACE = 1;
+ b.Config.ERROR_SEVERITY_EXCEPTIONS = 2;
+ b.CustomVariable.SCOPE_VISITOR = 1;
+ b.CustomVariable.SCOPE_SESSION = 2;
+ b.CustomVariable.SCOPE_PAGE = 3;
+ b.Page.REFERRER_INTERNAL = "0";
+ b.Tracker.VERSION = "5.2.5";
+ b.URLParser.parts = "source protocol authority userInfo user password host port relative path directory file query anchor".split(" ");
+ b.internals.X10.OBJECT_KEY_NUM = 1;
+ b.internals.X10.TYPE_KEY_NUM = 2;
+ b.internals.X10.LABEL_KEY_NUM = 3;
+ b.internals.X10.VALUE_VALUE_NUM =
+ 1;
+ b.internals.request.Request.TYPE_EVENT = "event";
+ b.internals.request.Request.TYPE_TRANSACTION = "tran";
+ b.internals.request.Request.TYPE_ITEM = "item";
+ b.internals.request.Request.TYPE_SOCIAL = "social";
+ b.internals.request.Request.TYPE_CUSTOMVARIABLE = "var";
+ b.internals.request.Request.X10_CUSTOMVAR_NAME_PROJECT_ID = "8";
+ b.internals.request.Request.X10_CUSTOMVAR_VALUE_PROJECT_ID = "9";
+ b.internals.request.Request.X10_CUSTOMVAR_SCOPE_PROJECT_ID = "11";
+ b.internals.request.Request.CAMPAIGN_DELIMITER = "|";
+ b.internals.request.EventRequest.X10_EVENT_PROJECT_ID =
+ "5";
+ q.xml.Parser.escapes = function(a) {
+ a = new q.ds.StringMap;
+ a.set("lt", "<");
+ a.set("gt", ">");
+ a.set("amp", "&");
+ a.set("quot", '"');
+ a.set("apos", "'");
+ a.set("nbsp", String.fromCharCode(160));
+ return a
+ }(this);
+ d.Muses.VERSION = "0.2 beta";
+ d.Muses.instances = [];
+ d.Tracker.enabled = !0;
+ g.main()
+})("undefined" != typeof window ? window : exports);
+var FlashDetect = new function() {
+ var n = this;
+ n.installed = !1;
+ n.raw = "";
+ n.major = -1;
+ n.minor = -1;
+ n.revision = -1;
+ n.revisionStr = "";
+ var w = [{
+ name: "ShockwaveFlash.ShockwaveFlash.7",
+ version: function(p) {
+ return B(p)
+ }
+ }, {
+ name: "ShockwaveFlash.ShockwaveFlash.6",
+ version: function(p) {
+ var n = "6,0,21";
+ try {
+ p.AllowScriptAccess = "always", n = B(p)
+ } catch (m) {}
+ return n
+ }
+ }, {
+ name: "ShockwaveFlash.ShockwaveFlash",
+ version: function(p) {
+ return B(p)
+ }
+ }],
+ B = function(p) {
+ var n = -1;
+ try {
+ n = p.GetVariable("$version")
+ } catch (m) {}
+ return n
+ };
+ n.majorAtLeast = function(p) {
+ return n.major >=
+ p
+ };
+ n.minorAtLeast = function(p) {
+ return n.minor >= p
+ };
+ n.revisionAtLeast = function(p) {
+ return n.revision >= p
+ };
+ n.versionAtLeast = function(p) {
+ var s = [n.major, n.minor, n.revision],
+ m = Math.min(s.length, arguments.length);
+ for (i = 0; i < m; i++)
+ if (s[i] >= arguments[i]) {
+ if (!(i + 1 < m && s[i] == arguments[i])) return !0
+ } else return !1
+ };
+ n.FlashDetect = function() {
+ var p, s, m, x, A;
+ if (navigator.plugins && 0 < navigator.plugins.length) {
+ var g = navigator.mimeTypes;
+ if (g && g["application/x-shockwave-flash"] && g["application/x-shockwave-flash"].enabledPlugin &&
+ g["application/x-shockwave-flash"].enabledPlugin.description) {
+ p = g = g["application/x-shockwave-flash"].enabledPlugin.description;
+ var g = p.split(/ +/),
+ z = g[2].split(/\./),
+ g = g[3];
+ s = parseInt(z[0], 10);
+ m = parseInt(z[1], 10);
+ x = g;
+ A = parseInt(g.replace(/[a-zA-Z]/g, ""), 10) || n.revision;
+ n.raw = p;
+ n.major = s;
+ n.minor = m;
+ n.revisionStr = x;
+ n.revision = A;
+ n.installed = !0
+ }
+ } else if (-1 == navigator.appVersion.indexOf("Mac") && window.execScript)
+ for (g = -1, z = 0; z < w.length && -1 == g; z++) {
+ p = -1;
+ try {
+ p = new ActiveXObject(w[z].name)
+ } catch (v) {
+ p = {
+ activeXError: !0
+ }
+ }
+ p.activeXError ||
+ (n.installed = !0, g = w[z].version(p), -1 != g && (p = g, x = p.split(","), s = parseInt(x[0].split(" ")[1], 10), m = parseInt(x[1], 10), A = parseInt(x[2], 10), x = x[2], n.raw = p, n.major = s, n.minor = m, n.revision = A, n.revisionStr = x))
+ }
+ }()
+};
+FlashDetect.JS_RELEASE = "1.0.4";
\ No newline at end of file
diff --git a/airtime_mvc/public/js/airtime/player/muses.swf b/airtime_mvc/public/js/airtime/player/muses.swf
new file mode 100644
index 000000000..0a23f07cf
Binary files /dev/null and b/airtime_mvc/public/js/airtime/player/muses.swf differ
diff --git a/airtime_mvc/public/js/airtime/player/player.js b/airtime_mvc/public/js/airtime/player/player.js
new file mode 100644
index 000000000..db2fbb8bb
--- /dev/null
+++ b/airtime_mvc/public/js/airtime/player/player.js
@@ -0,0 +1,94 @@
+function updateEmbedSrcParams()
+{
+ var $embedCodeParams = "?";
+ var $streamMode = getStreamMode();
+ if ($streamMode == "manual") {
+ var $stream = $("input[name=player_stream_url]:radio:checked").val();
+ $embedCodeParams += "stream="+$stream;
+ } else if ($streamMode == "auto") {
+ $embedCodeParams += "stream=auto";
+ }
+
+ $embedCodeParams += "&title="+getPlayerTitle();
+
+ $embedCodeParams += "\"";
+
+ $("textarea[name=player_embed_src]").val(function(index, value) {
+ return value.replace(/\?.*?"/, $embedCodeParams);
+ });
+
+ updatePlayerIframeSrc($("textarea[name=player_embed_src]").val());
+}
+
+function updatePlayerIframeSrc(iframe_text) {
+ var $player_iframe = $("#player_form iframe");
+ var player_iframe_src = iframe_text.match(/http.*?"/)[0].slice(0, -1);
+ $player_iframe.attr('src', player_iframe_src);
+}
+
+function getStreamMode() {
+ return $("input[name=player_stream_mode]:radio:checked").val();
+}
+
+function getPlayerTitle() {
+ return $("input[name=player_title]").val();
+}
+
+$(document).ready(function() {
+
+ $("#player_stream_url-element").hide();
+
+ // stream mode change event
+ $("#player_stream_mode-element").change(function() {
+ var $streamMode = getStreamMode();
+
+ if ($streamMode == "auto") {
+ $("#player_stream_url-element").hide();
+
+ } else if ($streamMode == "manual") {
+ $("#player_stream_url-element").show();
+
+ $("input[name=player_stream_url]").each(function(i, obj) {
+ if ($(this).parent().text().toLowerCase().indexOf("opus") >= 0) {
+ $(this).attr("disabled", "disabled");
+ }
+ });
+ }
+
+ updateEmbedSrcParams();
+ });
+
+ // stream url change event
+ $("#player_stream_url-element").change(function() {
+ updateEmbedSrcParams();
+ });
+
+ // display title checkbox change event
+ $("#player_display_title").change(function() {
+ if ($(this).prop("checked")) {
+ $("#player_title-label").show();
+ $("#player_title-element").show();
+ } else {
+ $("#player_title-label").hide();
+ $("#player_title-element").hide();
+ }
+ updateEmbedSrcParams();
+ });
+
+ // title textbox change event
+ // setup before functions
+ var typingTimer;
+ var doneTypingInterval = 3000;
+
+ // on keyup, start the countdown
+ $("input[name=player_title]").keyup(function(){
+ clearTimeout(typingTimer);
+ typingTimer = setTimeout(updateEmbedSrcParams, doneTypingInterval);
+ });
+
+ // on keydown, clear the countdown
+ $("input[name=player_title]").keydown(function(){
+ clearTimeout(typingTimer);
+ });
+});
+
diff --git a/airtime_mvc/public/js/airtime/preferences/streamsetting.js b/airtime_mvc/public/js/airtime/preferences/streamsetting.js
index 7529783a0..0fd0cd90a 100644
--- a/airtime_mvc/public/js/airtime/preferences/streamsetting.js
+++ b/airtime_mvc/public/js/airtime/preferences/streamsetting.js
@@ -443,7 +443,7 @@ function setSliderForReplayGain(){
$( "#replayGainModifier" ).val( $( "#slider-range-max" ).slider( "value" ) );
}
-function setPseudoAdminPassword(s1, s2, s3) {
+function setPseudoAdminPassword(s1, s2, s3, s4) {
if (s1) {
$('#s1_data-admin_pass').val('xxxxxx');
}
@@ -453,11 +453,14 @@ function setPseudoAdminPassword(s1, s2, s3) {
if (s3) {
$('#s3_data-admin_pass').val('xxxxxx');
}
+ if (s4) {
+ $('#s4_data-admin_pass').val('xxxxxx');
+ }
}
function getAdminPasswordStatus() {
$.ajax({ url: baseUrl+'Preference/get-admin-password-status/format/json', dataType:"json", success:function(data){
- setPseudoAdminPassword(data.s1, data.s2, data.s3);
+ setPseudoAdminPassword(data.s1, data.s2, data.s3, data.s4);
}});
}
@@ -476,7 +479,7 @@ $(document).ready(function() {
$('#content').empty().append(json.html);
setupEventListeners();
setSliderForReplayGain();
- setPseudoAdminPassword(json.s1_set_admin_pass, json.s2_set_admin_pass, json.s3_set_admin_pass);
+ setPseudoAdminPassword(json.s1_set_admin_pass, json.s2_set_admin_pass, json.s3_set_admin_pass, json.s4_set_admin_pass);
});
}
});
diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js
index 139660dd7..3eee4d92f 100644
--- a/airtime_mvc/public/js/airtime/showbuilder/builder.js
+++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js
@@ -468,9 +468,11 @@ var AIRTIME = (function(AIRTIME){
}
a = oData.ColReorder;
- for (i = 0, length = a.length; i < length; i++) {
- if (typeof(a[i]) === "string") {
- a[i] = parseInt(a[i], 10);
+ if (a) {
+ for (i = 0, length = a.length; i < length; i++) {
+ if (typeof(a[i]) === "string") {
+ a[i] = parseInt(a[i], 10);
+ }
}
}
diff --git a/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py b/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py
index 45bdb46f4..ec5d10cc3 100644
--- a/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py
+++ b/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py
@@ -10,18 +10,23 @@ def generate_liquidsoap_config(ss):
fh.write("################################################\n")
fh.write("# THIS FILE IS AUTO GENERATED. DO NOT CHANGE!! #\n")
fh.write("################################################\n")
+ fh.write("# The ignore() lines are to squash unused variable warnings\n")
- for d in data:
- key = d['keyname']
+ for key, value in data.iteritems():
+ try:
+ str_buffer = "%s = %s\n" % (key, int(value))
+ except ValueError:
+ try: # Is it a boolean?
+ if "true" in value or "false" in value:
+ str_buffer = "%s = %s\n" % (key, value.lower())
+ else:
+ raise ValueError() # Just drop into the except below
+ except: #Everything else is a string
+ str_buffer = "%s = \"%s\"\n" % (key, value)
- str_buffer = d[u'keyname'] + " = "
- if d[u'type'] == 'string':
- val = '"%s"' % d['value']
- else:
- val = d[u'value']
- val = val if len(val) > 0 else "0"
- str_buffer = "%s = %s\n" % (key, val)
fh.write(str_buffer.encode('utf-8'))
+ # ignore squashes unused variable errors from Liquidsoap
+ fh.write(("ignore(%s)\n" % key).encode('utf-8'))
fh.write('log_file = "/var/log/airtime/pypo-liquidsoap/