Sport5 video

By Yehuda B. Last update Jul 6, 2008 — Installed 2,743 times. Daily Installs: 2, 0, 5, 5, 5, 4, 4, 1, 3, 9, 1, 2, 7, 1, 3, 1, 4, 2, 0, 3, 0, 1, 5, 5, 5, 8, 7, 5, 8, 5, 2, 8
// sport5 video for mac user script
// version 0.4
// 2008-07-06
// Copyright (c) 2008, Yehuda B.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// http://www.gnu.org/licenses/gpl.html
// ==UserScript==
// @name          Sport5 video for mac
// @namespace     http://yehudab.com
// @description   Fix video playback and broadcast scedule for Sport5 (Israel cable sport channel). Version 0.4
// @include       http://*.castup.net/PlayerSupport.inc.asp*
// @include       http://www.sport5.co.il/*broadcastsheet*
// ==/UserScript==
function getPlayerHtml(url, width, height)
{
	return "<object type=\"video/x-ms-wmv\" data=\"" + url + "\" width=\"" + width + "\" height=\"" + height + "\">" +
	  "<param name=\"autostart\" value=\"true\" />" + 
	  "<param name=\"controller\" value=\"true\" />" + 
	"</object>";
}

function fixVideo()
{
	try 
	{
		var search = location.href.split("?")[1];
		var params = search.split("&");
		var clipURL = "";
		var width = "100%";
		var height = "100%";
		for (var i = 0; i < params.length; i++)
		{
			var p = params[i].toLowerCase();
			if (p.indexOf("clipurl=") == 0)
			{
				clipURL = unescape(params[i].split("=")[1]);
			}
			if (p.indexOf("videowidth=") == 0)
			{
				width = params[i].split("=")[1];
			}
			if (p.indexOf("videoheight=") == 0)
			{
				height = params[i].split("=")[1];
			}
		}
		GM_log(clipURL);
		window.setTimeout(function() {
	 		GM_xmlhttpRequest({
			  method:"GET",
			  url:clipURL,
			  onload:function(details) {
				if (details.status != 200)
				{
					GM_log("Unable to load video: " + clipURL, 2);
				}
				else
				{
					var videoUrl = clipURL;
					var allTags = details.responseText.match(/<[^>]+>/g);
					var i, l = allTags.length;
					var inEntry = false;
					var canSkip = true;
					var tagName;
					var haveVideoURL = false;
					for (i = 0; i < l; i++)
					{
						tagName = allTags[i].match(/[a-zA-Z]+/);
						if (tagName != null)
						{
							tagName = tagName[0].toLowerCase();
							switch (tagName)
							{
							case "entry":
								if (!inEntry)
								{
									inEntry = true;
									canSkip = true;
									haveVideoURL = false;
								}
								else
								{
									inEntry = false;
									if (canSkip && haveVideoURL)
									{
										GM_log(videoUrl);
										document.body.innerHTML = getPlayerHtml(videoUrl, width, height);
										return;
									}
								}
								break;
							case "param":
								paramName = allTags[i].match(/name[ ]*=[ ]*"[^"]+"/i);
								paramValue = allTags[i].match(/value[ ]*=[ ]*"[^"]+"/i);
								if (paramValue != null && paramName != null)
								{
									paramName = paramName[0].replace(/^.*"([^"]+)".*$/, "$1").toLowerCase();
									paramValue = paramValue[0].replace(/^.*"([^"]+)".*$/, "$1").toLowerCase();
									if (paramName == "canseek" && paramValue == "no")
										canSkip = false;
								}
								break;
							case "ref":
								if (canSkip) 
								{
									var href = allTags[i].match(/href[ ]*=[ ]*"[^"]+"/i);
									if (href != null)
									{
										videoUrl = href[0].replace(/^.*"([^"]+)".*$/, "$1");
										haveVideoURL = true;
									}
								}
								break;
									
							}
						}
						
					}	
					document.body.innerHTML = getPlayerHtml(videoUrl, width, height);
				}
			  }
			});
		}, 0);
	}
	catch (ex)
	{
		GM_log(ex);
	}
}

function fixCalendar()
{
    if (document.getElementById("div_asDate") == null)
		return;
	unsafeWindow.ShowCalendar = function(day, month, year, returnFunc, bKeepPrevCalender) {
	    var objDiv = document.getElementById("div_asDate");
	    var objTbl = document.getElementById("tbl_asDate");
	    if (bKeepPrevCalender.toUpperCase() == "TRUE") {
	        objDiv = document.all.div_asDate[1];
	        objTbl = document.all.tbl_asDate[1];
	    }
	    var arrDays;
	    var arrMonthes;
	    var clear;
	    var closeAlt;
		var CAL = unsafeWindow.CAL;
		var today = null;
	    arrDays = new Array(CAL.DAY_1, CAL.DAY_2, CAL.DAY_3, CAL.DAY_4, CAL.DAY_5, CAL.DAY_6, CAL.DAY_7);
	    arrMonthes = new Array(CAL.MONTH_1, CAL.MONTH_2, CAL.MONTH_3, CAL.MONTH_4, CAL.MONTH_5, CAL.MONTH_6, CAL.MONTH_7, CAL.MONTH_8, CAL.MONTH_9, CAL.MONTH_10, CAL.MONTH_11, CAL.MONTH_12);
	    clear = "";
	    closeAlt = "";
	    var linenumber = 0;
	    if (today == null) {
	        today = new Date(year, month, day, 0, 0, 0, 0);
	        today.setDate(day);
	        today.setYear(year);
	        today.setMonth(month);
	    }
	    var date1 = new Date(year, month, day, 0, 0, 0, 0);
	    date1.setDate(1);
	    date1.setYear(year);
	    date1.setMonth(month);
	    var date2 = new Date(year, month, day, 23, 59, 59, 999);
	    date2.setDate(1);
	    date2.setYear(year);
	    date2.setMonth(month);
	    date2.setMonth(date2.getMonth() * 1 + 1);
	    date2.setDate(date2.getDate() - 1);
	    var dayInMonth = (date2 - date1 + 1) / 86400000;
	    while (objTbl.rows.length > 0) {
	        objTbl.deleteRow(0);
	    }
	    var vRow = objTbl.insertRow(linenumber++);
	    vRow.className = "cal-rows";
	    var imgPrev = new Image;
	    imgPrev.src = "../../images/calendar/prev.gif";
	    var imgNext = new Image;
	    imgNext.src = "../../images/calendar/next.gif";
	    var vCell = vRow.insertCell(-1);
	    vCell.align = "center";
	    vCell.className = "cal-cell-arrows-prev";
	    vCell.innerHTML = "<a class=cal-link-arrow-prev href=\"#\" onclick=\"ShowCalendar('" + day + "','" + (month * 1 - 1) + "','" + year + "','" + returnFunc + "','" + bKeepPrevCalender + "');return false;\"><img src='" + imgPrev.src + "' class='cal-prev'></a>";
	    var vCell = vRow.insertCell(-1);
	    vCell.colSpan = 5;
	    vCell.align = "center";
	    vCell.className = "cal-cell-arrows-month";
	    vCell.innerHTML = arrMonthes[date1.getMonth()];
	    var vCell = vRow.insertCell(-1);
	    vCell.align = "center";
	    vCell.className = "cal-cell-close";
	    vCell.innerHTML = "<a class=cal-link-arrow-next href=\"#\" onclick=\"ShowCalendar('" + day + "','" + (month * 1 + 1) + "','" + year + "','" + returnFunc + "','" + bKeepPrevCalender + "');return false;\"><img src='" + imgNext.src + "' class='cal-next'></a>";
	    vRow.className = "cal-rows";
	    var vRow = objTbl.insertRow(linenumber++);
	    for (var i = 1; i <= 7; i++) {
	        var vCell = vRow.insertCell(-1);
	        vCell.className = "cal-cell-weekday";
	        vCell.innerHTML = eval("CAL.DAY_" + i);
	    }
	    var vRow = null;
	    var currDayInWeek = date1.getDay();
	    rowsNumber = 0;
	    if (currDayInWeek > 0) {
	        rowsNumber++;
	        var vRow = objTbl.insertRow(linenumber++);
	        vRow.className = "cal-rows";
	        for (var i = 0; i < currDayInWeek; i++) {
	            var vCell = vRow.insertCell(-1);
	            vCell.className = "cal-cell-empty";
	            vCell.innerHTML = "&nbsp;";
	        }
	    }
	    for (; date1 <= date2; date1.setDate(date1.getDate() * 1 + 1)) {
	        var cellClass = "cal-cell-day-number";
	        var linkClass = "cal-link-number";
	        currDayInWeek = date1.getDay();
	        if (currDayInWeek == 0) {
	            rowsNumber++;
	            vRow = objTbl.insertRow(linenumber++);
	            vRow.className = "cal-rows";
	        }
	        if (today.toDateString() == date1.toDateString()) {
	            cellClass = "cal-cell-today";
	            linkClass = "cal-link-today";
	        }
	        var dateFormat = date1.getDate() + "/" + (date1.getMonth() * 1 + 1) + "/" + (date1.getYear() % 100);
	        var vCell = vRow.insertCell(-1);
	        vCell.className = cellClass;
	        vCell.innerHTML = "<a class=" + linkClass + " href=\"#\" onclick=\"" + returnFunc + "('" + dateFormat + "');return false;\">" + date1.getDate() + "</a>";
	    }
	    if (currDayInWeek < 6) {
	        for (var i = currDayInWeek; i < 6; i++) {
	            var vCell = vRow.insertCell(-1);
	            vCell.className = "cal-cell-empty";
	            vCell.innerHTML = "&nbsp;";
	        }
	    }
	    if (rowsNumber < 5) {
	        vRow = objTbl.insertRow(linenumber++);
	        vRow.className = "cal-rows";
	        for (var i = 0; i < 6; i++) {
	            var vCell = vRow.insertCell(-1);
	            vCell.className = "cal-cell-empty";
	            vCell.innerHTML = "&nbsp;";
	        }
	    }
	    objDiv.style.display = "block";
	}
	var dateToShow = new Date();
	var dateParam = (window.location.href.match(/toDate=[0-9]+\/[0-9]+\/[0-9]+/))
	if (dateParam != null)
	{
		var dateArr = dateParam[0].split("=")[1].split("/");
		dateToShow.setDate(parseInt(dateArr[0], 10));
		dateToShow.setMonth(parseInt(dateArr[1], 10)-1);
		dateToShow.setFullYear(parseInt(dateArr[2], 10) + 2000);
	}
	unsafeWindow.ShowCalendar(dateToShow.getDate(),dateToShow.getMonth(),dateToShow.getFullYear(),'ShowBroadcastsInSpecificDate','False');
}

if (window.location.href.match(/\/broadcastsheet/i))
{
	fixCalendar();
}
else if (window.location.href.match(/castup.net\/PlayerSupport/i))
{
	fixVideo();
}