You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/scripts/webcontrol/main.js

253 lines
5.6 KiB

function push() {
var sub = this.length;
for (var i = 0; i < push.arguments.length; ++i) {
this[sub] = push.arguments[i];
sub++;
}
}
function pop() {
var lastElement = null;
if (this.length > 0) {
lastElement = this[this.length - 1];
this.length--;
}
return lastElement;
}
Array.prototype.push = push;
Array.prototype.pop = pop;
function getById(id) {
if (document.layers){
//Netscape 4 specific code
pre = 'document.';
post = '';
}
if (document.getElementById){
//Netscape 6 specific code
pre = 'document.getElementById("';
post = '")';
} else
if (document.all){
//IE4+ specific code
pre = 'document.all.';
post = '';
}
return eval(pre + id + post);
}
// All this stuff because we want it to be reentrant
var animScriptArr = new Object();
var nextAnimId = 0;
var animate_speed = 90;
function animScriptsHelper(index, delay)
{
if (animScriptArr[index] == null) {
return;
}
script = animScriptArr[index].pop();
if (script != null) {
eval(script);
}
if (animScriptArr[index].length > 1) {
setTimeout("animScriptsHelper(" + index + ", " + delay + ");", delay);
} else {
if (animScriptArr[index].length == 1) {
script = animScriptArr[index].pop();
delete animScriptArr[index];
if (script != null) {
eval(script);
}
} else {
delete animScriptArr[index];
}
}
}
function setBackgroundColor(r,g,b,rowid)
{
getById(rowid).style.background = "rgb(" + r + "," + g + "," + b + ")";
}
function setColor(r,g,b, myid)
{
var i, td_n_elems, td_elems = getById(myid).getElementsByTagName("a");
td_n_elems = td_elems.length;
for (i = 0; i < td_n_elems; i++) {
td_elems[i].style.color = "rgb(" + r + "," + g + "," + b + ")";
}
}
function anim(direction)
{
// build color fade
var ci;
var count = 20;
var mult = Math.floor(256 / count);
var colorAnimScripts = new Array();
var cid = 0;
var cid2 = 0;
var animid = "nowplaying";
if (direction == 1) {
colorAnimScripts[0] = "anim(0);";
} else {
colorAnimScripts[0] = "anim(1);";
}
for (ci = 1; ci < count+1; ci++) {
if (direction) {
cid = count - (ci-1);
cid2 = (ci-1);
} else {
cid = (ci-1);
cid2 = count - (ci-1);
}
colorAnimScripts[ci] =
"setBackgroundColor(" + Math.floor(13.0 * (cid*mult/100.0) + 100.0) + ","
+ Math.floor(13.0 * (cid*mult/100.0) + 100.0) + ","
+ Math.floor(13.0 * (cid*mult/100.0) + 140.0) + ", '" + animid + "');";
}
setColor(255,255,0, "nowplaying");
animScriptArr[0] = colorAnimScripts;
animScriptsHelper(0, animate_speed+0);
// animScriptArr[nextAnimId++] = colorAnimScripts;
// animScriptsHelper(nextAnimId-1, animate_speed+0);
}
var dateobj = -1;
var dhours = 0;
var dmins = 0;
var dsecs = 0;
function countdown(value) {
// all this is done because setTimeout 1000, isn't really a second in js
if (dateobj == -1) {
dateobj = new Date();
dhours = dateobj.getUTCHours();
dmins = dateobj.getUTCMinutes();
dsecs = dateobj.getUTCSeconds();
// refresh automatically every 20 secs.
setTimeout("dateobj=-1;refreshPage();", 20000);
}
dateobj2 = new Date();
var hours_now = dateobj2.getUTCHours();
var mins_now = dateobj2.getUTCMinutes();
var secs_now = dateobj2.getUTCSeconds();
// difference (assume no number is more that an hour :)
msecs = ((hours_now == dhours ? 0 : 1) * 60 * 60 +
(mins_now - dmins) * 60 +
(secs_now - dsecs)) * 1000;
diff = value * 1000 - msecs;
tdo = new Date(diff);
rhours = tdo.getUTCHours();
rmins = tdo.getUTCMinutes();
rsecs = tdo.getUTCSeconds();
var hours_str = (rhours == 0 ? "" : (rhours < 10 ? "0" + rhours : rhours) + ":");
var mins_str = rmins < 10 ? "0" + rmins : rmins;
var secs_str = rsecs < 10 ? "0" + rsecs : rsecs;
getById("countdown").innerHTML = hours_str + mins_str + ":" + secs_str;
setHeaders();
if (diff > 0) {
setTimeout("countdown(" + value + ");", 500);
} else {
getById("countdown").innerHTML = "00:00";
// go refresh this page
refreshPage();
}
}
function getPageScroll()
{
var x,y;
if (self.pageYOffset) // all except Explorer
{
x = self.pageXOffset;
y = self.pageYOffset;
}
else if (document.documentElement && document.documentElement.scrollTop)
// Explorer 6 Strict
{
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
else if (document.body) // all other Explorers
{
x = document.body.scrollLeft;
y = document.body.scrollTop;
}
return y;
}
function setPageScroll(pxs)
{
window.scrollTo(0, pxs);
}
function setScrollInUrl(newUrl)
{
if (newUrl.match(/scroll=\d*/)) {
return newUrl.replace(/scroll=\d*/g, "scroll=" + getPageScroll());
} else {
if (newUrl.match(/\?/)) {
return newUrl + "&scroll=" + getPageScroll();
} else {
return newUrl + "?scroll=" + getPageScroll();
}
}
}
function refreshPage()
{
document.location = setScrollInUrl("" + document.location);
}
function rescroll()
{
regex = new RegExp("scroll=[^\\&]+");
var match = regex.exec(document.URL);
scrollPos = parseInt((match+"").substring(7));
if (match) {
setPageScroll(scrollPos);
}
}
function dolink(qstr)
{
document.location = setScrollInUrl("?" + qstr);
}
function setHeaders()
{
var i, td_n_elems_dest, td_elems_dest = getById("trackheader").getElementsByTagName("th");
td_n_elems = td_elems_dest.length;
var td_n_elems, td_elems;
if (getById("trackone")) {
td_n_elems, td_elems = getById("trackone").getElementsByTagName("td");
} else {
td_n_elems, td_elems = getById("nowplaying").getElementsByTagName("td");
}
for (i = 0; i < td_n_elems; i++) {
td_elems_dest[i].style.width = td_elems[i].offsetWidth;
}
}