/*
* Digital Signage 2.55A3 R-STRUCT VER.
* --------------------------
*
* Grabs JSON file and uses it to set up Digital Signage.
* Check JSON file, as of now, everything EXCEPT Ticker{} will be reloaded after all the content has scrolled.
*
*/
(function( $ ){
if(!$.omr){
$.omr = {};
}
//12HR -> 24Hr CONVERSION LOOKUP
var ac = {"12": "00", "01": "01", "02": "02", "03": "03", "04": "04", "05": "05", "06": "06", "07": "07", "08": "08", "09": "09", "10": "10", "11": "11"};
var pc = {"12": "12", "01": "13", "02": "14", "03": "15", "04": "16", "05": "17", "06": "18", "07": "19", "08": "20", "09": "21", "10": "22", "11": "23"};
var cv12 = {"AM": ac, "PM": pc};
//24HR -> 12Hr CONVERSION LOOKUP
var cv24 = {"00": "12", "01": "01", "02": "02", "03": "03", "04": "04", "05": "05", "06": "06", "07": "07", "08": "08", "09": "09", "10": "10", "11": "11", "12": "12", "13": "01", "14": "02", "15": "03", "16": "04", "17": "05", "18": "06", "19": "07", "20": "08", "21": "09", "22": "10", "23": "11"};
$.omr.ds = function(el, options ) {
var base = this;
//Master Data Structure
base.json = {};
//Define the DOM elements
base.el = el;
base.$el = $(el);
//Add a reverse reference to the DOM object
base.$el.data("omr.ds", base);
base.init = function()
{
base.json = $.extend({},base.defaultConfiguration(), options);
//Define the ticker object
base.ticker;
//Disable Caching
base.setAJAX();
//Adjust the height of ticker if specified
base.format_ticker();
//Start Data Poll Intreval
base.start_dataPollIntreval();
base.applyPage();
//Start the ticker
//base.start_ticker();
//Debugging info in console
//base.debug_info();
};
base.setAJAX = function(){
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false,
timeout: 20000
});
};
base.sortElements = function(dsElements){
/**********************************************
//SORT AREA. AD | AM | PM BY START TIME
***********************************************/
var adEvents = [];
var amTop = [];
var amEvents = [];
var pmEvents = [];
var pmTop = [];
var sorted = [];
var k;
for (k in dsElements)
{
var current = dsElements[k];
if(current.alldayevent === true)
{adEvents.push(current);}
else
{
//WORKS WITH LPAD OR NO LPAD.
//var start = ''+current.start+'';
var start = current.start;
var ampm = start.substring(start.length-2,start.length);
if(parseFloat(start.substring(0,2)).toFixed(0) == 12 && ampm == "AM")
{amTop.push(current);}
else if (parseFloat(start.substring(0,2)).toFixed(0) == 12 && ampm=="PM")
{pmTop.push(current);}
else if(ampm == "AM")
{amEvents.push(current);}
else
{pmEvents.push(current);}
}
}
// SORT COMPARATOR
function compare(a,b)
{
/* DEBUG ALERT */
//alert(" .. ST:" + a.start.substring(0,2).toString().replace(":",'') + "AS : "+ parseInt(parseFloat(a.start.substring(0,2)).toFixed(0).toString().replace(":",''),10) + " || ST:" + b.start.substring(0,2).toString().replace(":",'') + "AS : " + parseInt(parseFloat(b.start.substring(0,2)).toFixed(0).toString().replace(":",''),10));
if (parseInt(parseFloat(a.start.substring(0,2)).toFixed(0).toString().replace(":",''),10) < parseInt(parseFloat(b.start.substring(0,2)).toFixed(0).toString().replace(":",''),10))
{ return -1;}
if (parseInt(parseFloat(a.start.substring(0,2)).toFixed(0).toString().replace(":",''),10) > parseInt(parseFloat(b.start.substring(0,2)).toFixed(0).toString().replace(":",''),10))
{ return 1;}
return 0;
}
amTop.sort(compare);
amEvents.sort(compare);
pmEvents.sort(compare);
pmTop.sort(compare);
sorted = adEvents.concat(amTop).concat(amEvents).concat(pmTop).concat(pmEvents);
return sorted;
};
base.defaultConfiguration=function()
{
var deflt={};
/**********************************************
// DEFAULT TICKER
***********************************************/
deflt.ticker = {};
deflt.ticker.full_screen= false;
deflt.ticker.items_to_show= 5;
deflt.ticker.speed= 4000;
deflt.ticker.intreval= 15000;
deflt.ticker.polltime= 3600000;
deflt.ticker.rowheight= "80px";
deflt.ticker.scroll_direction= "down";
deflt.ticker.scroll_off= false;
deflt.ticker.calendar_select= "";
deflt.ticker.calendar_link= "";
deflt.ticker.show_past= true;
deflt.ticker.time_diff= -4;
/**********************************************
// DEFAULT TICKER.ITEM
***********************************************/
deflt.ticker.item = {};
deflt.ticker.item.background_color= "#FFFFFF";
deflt.ticker.item.src= "img/event_bg.jpg";
deflt.ticker.item.background_opacity= 95;
deflt.ticker.item.time_color= "#969696";
/**********************************************
// DEFAULT PAGE
***********************************************/
deflt.ticker.page = {};
deflt.ticker.page.title= "Default Title";
deflt.ticker.page.fullscreen_background= 1;
deflt.ticker.page.background_color= "#FFFFFF";
deflt.ticker.page.width= "auto";
deflt.ticker.page.height= "auto";
deflt.ticker.page.background_image= "img/stockholm.jpg";
/**********************************************
// DEFAULT PAGE.WIDGET
***********************************************/
deflt.ticker.page.widget = {};
deflt.ticker.page.widget.display_widget= 1;
deflt.ticker.page.widget.src= "tetris.html";
deflt.ticker.page.widget.width= "430px";
deflt.ticker.page.widget.height= "auto";
deflt.ticker.page.widget.position= "top";
/**********************************************
// DEFAULT PAGE.LOGO
***********************************************/
deflt.ticker.page.logo = {};
deflt.ticker.page.logo.src= "img/welcome_swedish.png";
deflt.ticker.page.logo.position= "top";
deflt.ticker.page.logo.width= "auto";
deflt.ticker.page.logo.height= "auto";
/**********************************************
// DEFAULT PAGE.FOOTER
***********************************************/
deflt.ticker.page.footer = {};
deflt.ticker.page.footer.display_footer= 1;
deflt.ticker.page.footer.text= "Firstclass Depot (c) 2012";
deflt.ticker.page.footer.height = "18px";
/**********************************************
//DEFAULT PAGE.HEADER
***********************************************/
deflt.ticker.page.header = {};
deflt.ticker.page.header.src= "img/fc_logo_sm.png";
deflt.ticker.page.header.position= "top";
deflt.ticker.page.header.display_time = 1;
deflt.ticker.page.header.width= "auto";
deflt.ticker.page.header.height= "auto";
deflt.ticker.page.header.text= "Header Text";
deflt.ticker.page.header.color= "#FFFFFF";
deflt.ticker.page.header.font_family= "Tahoma";
deflt.ticker.page.header.font_size= "36px";
deflt.ticker.page.header.text_decoration= "bold";
deflt.elements={};
return deflt;
};
base.loadConfigurationFile=function()
{
var temp = {};
$.get('<!--#echo var="config_parameter" -->',
function(data)
{
/**********************************************
// GET TICKER
***********************************************/
temp.ticker = {};
temp.ticker.full_screen =data.Ticker['full-screen'];
temp.ticker.items_to_show = data.Ticker['items-to-show'];
temp.ticker.speed= data.Ticker['speed'];
temp.ticker.intreval = data.Ticker['intreval'];
temp.ticker.polltime = 8000;
//temp.ticker.polltime = data.Ticker['polltime'];
temp.ticker.rowheight =data.Ticker['rowheight'];
temp.ticker.scroll_direction = data.Ticker['scroll-direction'];
temp.ticker.scroll_off = data.Ticker['scroll-off'];
temp.ticker.calendar_select = data.Ticker['calendar-select'];
temp.ticker.calendar_link = data.Ticker['calendar-link'];
temp.ticker.show_past = data.Ticker['show-past'];
temp.ticker.time_diff=data.Ticker['time-diff'];
/**********************************************
// GET TICKER.ITEM
***********************************************/
temp.ticker.item = {};
temp.ticker.item.background_color = data.Ticker.item['background-color'];
temp.ticker.item.src = data.Ticker.item['src'];
temp.ticker.item.background_opacity = data.Ticker.item['background-opacity'] -1;
temp.ticker.item.time_color = data.Ticker.item['time-color'];
/**********************************************
// GET PAGE
***********************************************/
temp.ticker.page = {};
temp.ticker.page.title = data.Page['title'];
temp.ticker.page.fullscreen_background = data.Page['fullscreen-background'];
temp.ticker.page.background_color = data.Page['background-color'];
temp.ticker.page.width = data.Page['width'];
temp.ticker.page.height = data.Page['height'];
temp.ticker.page.background_image = data.Page['background-image'];
/**********************************************
// GET PAGE.WIDGET
***********************************************/
temp.ticker.page.widget = {};
temp.ticker.page.widget.display_widget = data.Page.widget['display-widget'];
temp.ticker.page.widget.src =data.Page.widget['src'];
temp.ticker.page.widget.width = data.Page.widget['width'];
temp.ticker.page.widget.height = data.Page.widget['height'];
temp.ticker.page.widget.position = data.Page.widget['position'];
/**********************************************
// GET PAGE.LOGO
***********************************************/
temp.ticker.page.logo = {};
temp.ticker.page.logo.src = data.Page.logo['src'];
temp.ticker.page.logo.position = data.Page.logo['position'];
temp.ticker.page.logo.width = data.Page.logo['width'];
temp.ticker.page.logo.height = data.Page.logo['height'];
/**********************************************
// GET PAGE.FOOTER
***********************************************/
temp.ticker.page.footer = {};
temp.ticker.page.footer.display_footer = data.Page.footer['display-footer'];
temp.ticker.page.footer.text = data.Page.footer['text'];
temp.ticker.page.footer.height = data.Page.footer['height'];
/**********************************************
// GET PAGE.HEADER
***********************************************/
temp.ticker.page.header = {};
temp.ticker.page.header.src =data.Page.header['src'];
temp.ticker.page.header.position = data.Page.header['position'];
temp.ticker.page.header.display_time = data.Page.header['display-time'];
temp.ticker.page.header.width = data.Page.header['width'];
temp.ticker.page.header.height = data.Page.header['height'];
temp.ticker.page.header.text = data.Page.header['text'];
temp.ticker.page.header.color = data.Page.header['color'];
temp.ticker.page.header.font_family= data.Page.header['font-family'];
temp.ticker.page.header.font_size = data.Page.header['font-size'];
temp.ticker.page.header.text_decoration= data.Page.header['text-decoration'];
console.log("(1)... loading configuration file ...");
if ($.param(temp.ticker,null,2) !=$.param(base.json.ticker,null,2) )
{
console.log("<!> Configuration File Change Detected - re-applying page styles and reloading ticker");
base.json.ticker = temp.ticker;
base.applyPage();
base.applyCalendarEvents();
}
base.loadCalendarEvents();
}, "json")
.error(function(jqXHR, textStatus, errorThrown){
alert("An error occured while loading the congifuration file. \n\n" + textStatus + "\n\n"+jqXHR.responseText );
console.log("Config Load Error :" + textStatus + "\n\n Incoming Text :" + jqXHR.responseText);
});
};
base.loadCalendarEvents = function()
{
if(typeof base.json.ticker.calendar_link != "undefined" )
{
console.log("(2)... loading calendar events ...");
function changeDetection(nw)
{
if($.param(nw,null,2) !=$.param(base.json.elements,null,2) )
{
console.log(" <!> Event List Change Detected - reloading ticker");
base.json.elements = nw;
base.applyCalendarEvents();
}
}
//Sel=0 :: FC
//Sel=1 :: GCAL
//Sel=2 :: CONFIG
var sel = (base.json.ticker.calendar_link.indexOf("google")<0)?0:1;
//CURRENT DATE-TIME VARS
var now = new Date();
var ch = now.getHours();
var cm = now.getMinutes();
var mm = (((now.getMonth()+1)).length==2)?(now.getMonth()+1):('0'+(now.getMonth()+1));
var dd = (((now.getDate()+2)).length==2)?(now.getDate()):('0'+(now.getDate()));
dd = dd.substring(dd.length-2,dd.length);
//CAL URL PARAMS INIT (XHR ENTRY)
//Note: If params is null, then eparams starts with '?'
var calURL = "";
var params = "";
var eparams = "";
var url = "";
/**********************************************
//MASTER SWITCH
***********************************************/
switch(sel)
{
case 0:
/**********************************************
// [FC] First Class Calendar Elements
***********************************************/
//calURL = 'http://'+location.hostname + base.json.ticker.calendar_link;
calURL = base.json.ticker.calendar_link;
params = "";
eparams = "";
url = calURL + params + eparams;
$.get(url,function(data)
{
/**********************************************
// FC Pull
***********************************************/
//DS ELEMENTS INTO ARRAY STRUCT
var dsElements = [];
var k;
for( k in data.Elements)
{
//WE WANT PROPER ELEMENTS ONLY
if(typeof data.Elements[k]['no'] !== 'undefined')
{
var msg = {};
var current = data.Elements[k];
msg.no = current['no'];
//PARSE VARS FOR TIME
var tmin = "All Day";
var st = current['start_time'];
var p = st.indexOf(":");
var now = false;
if(p<0)
{
msg.alldayevent=true;
msg.start = "";
msg.end = "";
msg.duration = "All Day";
}
else
{
/**********************************************
//PARSE THE TIME (12H)
***********************************************/
//START TIME EXPLODED (0L PADDED) LEN:8
st = current['start_time'];
p = st.indexOf(":");
var s0 = (st.substring(0,p).length==1)?'0'+st.substring(0,p):st.substring(0,p);
var s1 = st.substring(st.length-5,st.length-3);
var s2 = st.substring(st.length-2,st.length);
//END TIME EXPLODED (0L PADDED) LEN:8
var en = current['end_time'];
var d = en.indexOf(":");
var e0 = (en.substring(0,d).length==1)?'0'+en.substring(0,d):en.substring(0,d);
var e1 = en.substring(en.length-5,en.length-3);
var e2 = en.substring(en.length-2,en.length);
/**********************************************
//CURRENT EVENT INDICATORS (BOOL1 && BOOL2)=OUT
***********************************************/
var bool1 = (ch==parseInt(cv12[s2][s0],10))? ((cm>=parseInt(s1,10))?true:false):((ch>parseInt(cv12[s2][s0],10))?true:false);
var bool2 = (ch==parseInt(cv12[e2][e0],10))? ((cm<=parseInt(e1,10))?true:false):((ch<parseInt(cv12[e2][e0],10))?true:false);
msg.indicator = (bool1 && bool2);
/**********************************************
//CONVERT THE TIME TO 24Hr (For Duration)
***********************************************/
//alert(s0 + ":" + s1 + s2 + " to " + e0 + ":" + e1 + e2);
var s0i = parseInt(parseFloat(cv12[s2][s0],10).toFixed(0),10);
var e0i = parseInt(parseFloat(cv12[e2][e0],10).toFixed(0),10);
var hrs = 0;
if(s0i >=13 && e0i <=11)
{hrs = parseInt(24-s0i,10) + parseInt(e0i,10);}
else
{hrs = parseInt(e0i,10) - parseInt(s0i,10);}
tmin = ((60*hrs) + (parseInt(e1,10) - parseInt(s1,10)));
msg.alldayevent = false;
msg.duration = Math.floor(tmin/60) + "Hr " + (tmin%60) + "Min";
msg.start = (s0) + ":" + s1 + ((parseInt(s0i,10)<12)?" AM":"
PM");
msg.end = (e0) + ":" + e1 + ((parseInt(e0i,10)<12)?" AM":" PM");
}
//msg.backgroundcolor = current['background-color'];
msg.title = "<!--<img src= \"img/fc.png\" style=\"width:30px; height:30px; padding-top:4px; padding-right:4px; \"/>--> " + current['title'];
msg.subject = current['subject'];
msg.href = current['href'];
/**********************************************
//PAST EVENT CHECK
***********************************************/
var past = (typeof(base.json.ticker.show_past) == "undefined")? true : base.json.ticker.show_past;
var bool3 = (ch==e0i)?((cm>parseInt(e1,10))?false:true):((ch>e0i)?false:true);
if((!past && bool3) || past || msg.alldayevent)
{dsElements.push(msg);}
}
}
changeDetection(base.sortElements(dsElements));
},'json');
break;
case 1:
/**********************************************
// [GCAL] Google Calendar Elements [CROSS DOMAIN/CROSS SITE SCRIPTING; TRANSPORT: JSONP (ALT)]
***********************************************/
//TimeZone Issue (Non Persistent)
var o = base.json.ticker.time_diff;
o = (parseInt(o,10)>0)?("+"+o):(o);
o = o.length>2?o: o.substring(0,1) +'0' + o.substring(1,2);
o = o + ":00";
o = o.replace('+', '%2B');
//o = "%2D00:00";
//GCAL XHR PARAMS
var startmin = now.getFullYear() +"-" +mm+"-"+dd+"T00:01:00"+o;
var startmax = now.getFullYear() +"-" +mm+"-"+dd+"T23:59:59"+o;
//alert(startmin + "\n" + startmax);
var singleevents = "true";
var sortorder = "ascending";
var alt = "json";
//BUILD XHR URL
//params = "?alt="+alt+"&start-min="+startmin+"&start-max="+startmax+"&sortorder="+sortorder;
params = "?alt="+alt+"&start-min="+startmin+"&start-max="+startmax;
eparams = "";
calURL = base.json.ticker.calendar_link;
url = calURL + params + eparams;
$.get(url,function(data)
{
/* Note: No JSON Data Type, Responce is Text(?) And we use eval to get the JSON inside the callback function.
(This is only relevant if using callback function (2.eparams) */
//var data = eval(data);
/* Note :: If there exists a event the night before at (XX:XX -> 00:00), it will display for one cycle and then get deleted. */
//WE WANT PROPER ELEMENTS ONLY
if(typeof(data.feed.entry) != 'undefined')
{
/**********************************************
//GOOGLE CALENDAR DEV
***********************************************/
var dsElements = [];
var calFullTitle = data.feed.title.$t;
var calSubTitle = data.feed.subtitle.$t;
var author = data.feed.author[0].name.$t;
$.each(data.feed.entry,function(i,entry)
{
var msg = {};
msg.no = entry.id.$t;
var startTime;
var endTime;
var p =-2;
var n =0;
try
{
//PARSE VARS FOR TIME
startTime = entry.gd$when[0].startTime;
endTime = entry.gd$when[0].endTime;
p = startTime.indexOf("T");
n = startTime.indexOf(":",p);
}catch(err){}
//GOOGLE CALENDAR BUG FIX (FEED PARAM. BUG (start-min/max) All Day)
var fail = false;
if(p==-1)
{
if(startTime.substring(startTime.length-2)==dd)
{
msg.alldayevent=true;
msg.start = "";
msg.end = "";
msg.duration = "All Day";
}
else
{
fail=true;
}
}
else
{
/**********************************************
//PARSE THE TIME (24H)
***********************************************/
//INDC 001
//START TIME EXPLODED (0L PADDED) LEN:5 (s0)
var s0 = startTime.substring(p+1,p+3);
var s1 = startTime.substring(n+1,n+3);
p = endTime.indexOf("T");
n = endTime.indexOf(":",p);
//END TIME EXPLODED (0L PADDED) LEN:5 (e0)
var e0 = endTime.substring(p+1,p+3);
var e1 = endTime.substring(n+1,n+3);
/**********************************************
//CURRENT EVENT INDICATORS (BOOL1 && BOOL2)=OUT
***********************************************/
var bool1 = (ch==parseInt(s0,10))? ((cm>=parseInt(s1,10))?true:false):((ch>parseInt(s0,10))?true:false);
var bool2 = (ch==parseInt(e0,10))? ((cm<=parseInt(e1,10))?true:false):((ch<parseInt(e0,10))?true:false);
msg.indicator = (bool1 && bool2);
/**********************************************
//DURATION COMPUTE
***********************************************/
var s0i = parseInt(parseFloat(s0.substring(0,2)).toFixed(0),10);
var e0i = parseInt(parseFloat(e0.substring(0,2)).toFixed(0),10);
var hrs = 0;
if(s0i >=13 && e0i <=11)
{hrs = parseInt(24-s0i,10) + parseInt(e0i,10);}
else
{hrs = parseInt(e0i,10) - parseInt(s0i,10);}
var tmin = ((60*hrs) + (parseInt(e1,10) - parseInt(s1,10)));
msg.alldayevent = false;
msg.duration = Math.floor(tmin/60) + "Hr " + (tmin%60) + "Min";
msg.start = (cv24[s0]) + ":" + s1 + ((parseInt(s0i,10)<12)?" AM":" PM");
msg.end = (cv24[e0]) + ":" + e1 + ((parseInt(e0i,10)<12)?" AM":" PM");
}
//msg.backgroundcolor = "#0064ce";
msg.title = "<!--<img src=\"img/gcal.jpg\" style=\"width:30px; height:30px; padding-top:4px; padding-right:4px; \"/>--> <a href="+entry.id.$t+">"+ entry.title.$t + "</a>";
msg.subject = entry.content.$t ;
msg.href = entry.id.$t;
/**********************************************
//PAST EVENT CHECK
***********************************************/
var past = (typeof(base.json.ticker.show_past) == "undefined")? true : base.json.ticker.show_past;
var bool3 = (ch==e0i)?((cm>parseInt(e1,10))?false:true):((ch>e0i)?false:true);
if(((!past && bool3) || past || msg.alldayevent)&& !fail)
{dsElements.push(msg);}
});
}
changeDetection(base.sortElements(dsElements));
},'jsonp');
break;
case 2:
alert("iCAL PENDING ...");
break;
default:
alert("Configuration Error - Bad Calendar Selector");
break;
}
}
};
base.applyPage = function()
{
document.title = base.json.ticker.page.title;
/**********************************************
// APPLY HEIGHTS
***********************************************/
var hi = (base.json.ticker.full_screen == true)?'auto' :(base.json.ticker.items_to_show * base.json.ticker.rowheight.replace(/px/i, ''));
$('#wrapper').css({"height" :hi});
$('#vertical-ticker').css({"height" : hi});
$('#footer').css({"height" :base.json.ticker.page.footer.height });
/**********************************************
// APPLY COLORS
***********************************************/
$('#vertical-ticker').css({"background-color" : base.json.ticker.page.background_color});
$('#pagewidth').css({"background-color" : base.json.ticker.page.background_color});
/**********************************************
// APPLY BACKGROUND IMAGES
***********************************************/
$(!base.json.ticker.page.fullscreen_background?'#pagewidth' : '#vertical-ticker').css({
"background-image" : "none",
"background-repeat": "repeat",
"background-position": "",
"margin" : "",
"padding" : ""
});
$(base.json.ticker.page.fullscreen_background?'#pagewidth' : '#vertical-ticker').css({
"background-image" : "url('"+base.json.ticker.page.background_image+"')",
"background-repeat": "repeat"
});
/**********************************************
//APPLY HEADER
***********************************************/
var d = base.json.ticker.page.header.text_decoration=="Italic"?"font-style":( base.json.ticker.page.header.text_decoration == "bold" ?"font-weight":"text-decoration");
var j = (typeof(base.json.ticker.page.header.text)=="undefined"?"":base.json.ticker.page.header.text) ;
var builtHeader = "";
if(base.json.ticker.page.header.position == "top")
{
builtHeader = "<img src=\""+base.json.ticker.page.header.src+"\" style=\"display:"+((base.json.ticker.page.header.src=="")?'none':'block')+"; width:"+base.json.ticker.page.header.width+"; height:"+base.json.ticker.page.header.height+"; \" />";
builtHeader+= "<span class=\"none\" style=\"text-align:left; color:"+base.json.ticker.page.header.color+"; font-size:"+base.json.ticker.page.header.font_size+"; font-family:"+base.json.ticker.page.header.font_family+";"+d+":"+base.json.ticker.page.header.text_decoration+"; \">"+ j + "</span>";
}
else if (base.json.ticker.page.header.position == "bottom")
{
builtHeader = "<span style=\"text-align:left; color:"+base.json.ticker.page.header.color+"; font-size:"+base.json.ticker.page.header.font_size+"; font-family:"+base.json.ticker.page.header.font_family+";"+d+":"+base.json.ticker.page.header.text_decoration+"; \">"+ j + "</span>";
builtHeader += "<img src=\""+base.json.ticker.page.header.src+"\"
style=\"display:"+((base.json.ticker.page.header.src=="")?'none':'block')+"; width:"+base.json.ticker.page.header.width+"; height:"+base.json.ticker.page.header.height+"; \" />";
}
else if (base.json.ticker.page.header.position == "left" || base.json.ticker.page.header.position == "right")
{
builtHeader ="<img src=\""+base.json.ticker.page.header.src+"\" style=\"float:"+base.json.ticker.page.header.position+"; display:"+((base.json.ticker.page.header.src=="")?'none':'block')+"; width:"+base.json.ticker.page.header.width+"; height:"+base.json.ticker.page.header.height+"; \" /><p style=\"
padding:0px; margin:0px; text-align:left; color:"+base.json.ticker.page.header.color+"; font-size:"+base.json.ticker.page.header.font_size+"; font-family:"+base.json.ticker.page.header.font_family+"; "+d+":"+base.json.ticker.page.header.text_decoration+"; \">"+ j + "</p>";
}
(base.json.ticker.page.header.src == "")?$('#top > img').hide():$('#top > img').show();
$('#header').html() != builtHeader?$('#header').html(builtHeader):'';
/**********************************************
//APPLY LOGO
***********************************************/
var builtLogo ="<img src=\""+base.json.ticker.page.logo.src+"\" style=\"width:"+base.json.ticker.page.logo.width+"; height:"+base.json.ticker.page.logo.height+";\" />";
var sp = "logo_bottom";
if(base.json.ticker.page.logo.position == 'top')
{
$('#logo_top').css({"display" :"block"});
$('#logo_bottom').css({"display" :"none"});
sp = "logo_top";
}
else
{
$('#logo_top').css({"display" :"none"});
$('#logo_bottom').css({"display" :"block"});
sp = "logo_bottom";
}
(base.json.ticker.page.logo.src == "")?$('#'+sp).hide():$('#'+sp).show();
$('#'+sp).html() != builtLogo?$('#'+sp).html(builtLogo):'';
/**********************************************
//APPLY FOOTER
***********************************************/
if(base.json.ticker.page.footer.display_footer==1)
{
$('#footer').css({"display" :"block"});
var builtFooter ="<p>"+base.json.ticker.page.footer.text+"</p>";
$('#footer').html() != builtFooter?$('#footer').html(builtFooter):'';
}
else
{
$('#footer').css({"display" :"none"});
}
/**********************************************
//APPLY WIDGET
***********************************************/
if(base.json.ticker.page.widget.display_widget ==1)
{
//Frame Size
var h = base.json.ticker.page.widget.height;
var w = base.json.ticker.page.widget.width;
//Frame Source
var x = "/plugins/RWDDigitalSign/PreDefined_Widgets/" +( (base.json.ticker.page.widget.src=== "")?( "?plugin=RWDDigitalSign&Templates=WidgetLists&panel_height="+h+"&panel_width="+w) :(base.json.ticker.page.widget.src) );
//Strip Google Branding
function stripGoogle()
{
    if ($($('#frame')).contents().find('tr:last-child').text() == "Gadgets powered by Google")
{
try
{
$($('#frame')).contents().find('tr:first-child').remove();
$($('#frame')).contents().find('tr:last-child').remove();
}
catch(err){}
}
}
//Frame Sizing Function
function sizeFrame(h,w)
{
//Frame Sizing width
if(w=="auto"){$('#frame').width($($($('#frame'))).contents().width());}
else {$('#frame').width(w);}
//Frame Sizing height
if(h=="auto") {$('#frame').height($($($('#frame'))).contents().height());}
else{$('#frame').height(h);}
$('#widget').height($($($('#frame'))).contents().height());
$('#widget').width($($($('#frame'))).contents().width());
}
//IE BG-Color Fix, ETC.
function cleanWidget()
{
$($($('#frame'))).contents().find("body").css({"margin-left":"0px"});
$($($('#frame'))).contents().find("body").css({"background-color":"transparent"});
}
//Frame Loader
if(x != $($('#frame')).attr('src') && typeof(base.json.ticker.page.widget.src) != "undefined")
{
$($('#frame')).attr('src',x);
//When Loaded,
$('iframe#frame').load(function()
{
stripGoogle();
sizeFrame(h,w);
cleanWidget();
});
}
sizeFrame(h,w);
$('#widget').css({"display" :"block"});
}
else
{
$('#widget').css({"display" :"none"});
}
};
base.applyCalendarEvents=function()
{
//Apply the structure to the HTML doc
var tickerHTML = "";
var i;
for (i in base.json.elements)
{
tickerHTML+= "<li class=\"content\">";
tickerHTML+="<div class=\"tickeritem\" style=\"height:"+base.json.ticker.rowheight+";\" >";
tickerHTML+="<div class=\"bg\" style=\"background-image: url('"+base.json.ticker.item.src+"'); background-color:"+ base.json.ticker.item.background_color+";
opacity:"+(base.json.ticker.item.background_opacity/100)+"; filter: alpha(opacity="+(base.json.ticker.item.background_opacity)+");\"></div>";
tickerHTML+="<div class=\"content\">";
tickerHTML+="<div class=\"left\">";
tickerHTML+="<div id=\"top\"> "+base.json.elements[i].start+" </div>";
tickerHTML+="<div id=\"bot\" style=\"background-color:navy;\"> <p>..</p></div>";
tickerHTML+="</div>";
tickerHTML+="<div class=\"right\">";
tickerHTML+="<div id=\"top\" style=\"background-color:red;\"> <p> .. </p> </div>";
tickerHTML+="<div id=\"bot\" style=\"background-color:white;\"> <p>.. </p> </div>";
tickerHTML+="</div>";
tickerHTML+="<div class=\"middle\" align=\"center\">";
tickerHTML+="<div id=\"top\"> <!--top-area--!></div>";
tickerHTML+="<div id=\"mid\" style=\" background-color:"+base.json.ticker.item.time_color+"; \" > "+base.json.elements[i].title+" </div>";
tickerHTML+="<div id=\"bot\"> "+base.json.elements[i].start+" to "+base.json.elements[i].end+" - ("+base.json.elements[i].duration+") </div>";
tickerHTML+="</div>";
tickerHTML+="</div>";
tickerHTML+="<br clear=\"all\">";
tickerHTML+="</div>";
tickerHTML+="</li>";
}
if(base.json.ticker.scroll_off)
{
var mi = (base.json.ticker.full_screen===true)?( Math.floor( parseInt(((typeof(window.innerHeight)=='undefined'?document.documentElement.clientHeight:window.innerHeight)-$('#header').height()-$('#footer').height()) ,10) / parseInt(base.json.ticker.rowheight.replace(/px/i, '') ,10))):(base.json.ticker.items_to_show);
var output = "";
var s;
for (s=0; i<mi; i++)
{
/**********************************************
//BLANK STYLE, STYLE AS NOTHING
***********************************************/
output+= "<li class=\"padding\">";
output+="<div class=\"none\" style=\"height:"+base.json.ticker.rowheight+";\">";
output+="<div class=\"bg\"></div>";
output+="<div class=\"content\">";
output+="<div class=\"left\">";
output+="<div id=\"top\"> </div>";
output+="<div id=\"bot\"> </div>";
output+="</div>";
output+="<div class=\"right\">";
output+="<div id=\"top\"> </div>";
output+="<div id=\"bot\"> </div>";
output+="</div>";
output+="<div class=\"middle\" align=\"center\">";
output+="<div id=\"top\"> </div>";
output+="<div id=\"mid\"> </div>";
output+="<div id=\"bot\"> </div>";
output+="</div>";
output+="</div>";
output+="<br clear=\"all\">";
output+="</div>";
output+="</li>";
}
tickerHTML += output;
}
$("#vertical-ticker").html(tickerHTML);
base.reset_interval();
};
base.updateClock = function(){
if (base.json.ticker.page.header.display_time==1)
{
var mydate=new Date();
var year=mydate.getYear();
if (year < 1000)
{year+=1900;}
var day=mydate.getDay();
var month=mydate.getMonth();
var daym=mydate.getDate();
if (daym<10)
{daym="0"+daym;}
var hour = mydate.getHours();
var min = mydate.getMinutes();
var sec = mydate.getSeconds();
var time;
if(min<=9){min="0"+min;}
if(sec<=9){sec ="0"+sec;}
if(hour>12){hour=hour-12;add=" <span class='ampm'>pm</span>";}
else{add=" <span class='ampm'>am</span>";}
//else{hour=hour;add=" <span class='ampm'>am</span>";}
if(hour==12){add="<span class='ampm'>pm</span>";}
if(hour==0){hour="12";} time=((hour<=9)?"0"+hour:hour)+":"+min+add;
var dayarray=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var montharray=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
$('#theTime').html(time);
$('#theDate').html("<small><font color='white' face='Arial'><b>"+dayarray[day]+", "+montharray[month]+" "+daym+", "+year+"</b></font></small>");
var mc = ($('#top').css('height').replace(/px/i,'')/2) - ($('.dateTime').css('height').replace(/px/i,'')/2);
$('.dateTime').css({"top" : (mc<0)?'0px':mc + 'px' });
}
else
{
$('#theTime').html('');
$('#theDate').html('');
}
};
base.start_dataPollIntreval = function ()
{
base.loadConfigurationFile();
$('#pagewidth').show();
setInterval(base.updateClock, 1000);
setInterval(base.loadConfigurationFile, base.json.ticker.polltime);
};
base.start_ticker = function()
{
//Clear out any existing interval
clearInterval(base.ticker);
if (base.json.ticker.scroll_direction == "down")
{
//If the direction has been set to up
base.ticker = setInterval(function()
{
base.$el.find('li:last').detach().prependTo(base.$el).css('marginTop', '-' + base.json.ticker.rowheight);
base.$el.find('li:first').animate({marginTop: '0px'}, base.json.ticker.speed, function () { /*Callback functions go here*/ });
}, base.json.ticker.intreval);
}
else if (base.json.ticker.scroll_direction == "up")
{
base.ticker = setInterval(function() {
base.$el.find('li:first').animate({marginTop: '-' + base.json.ticker.rowheight }, base.json.ticker.speed, function() { $(this).detach().css('marginTop', '0').appendTo(base.$el); });
}, base.json.ticker.intreval);
}
};
base.reset_interval = function(){
clearInterval(base.ticker);
base.start_ticker();
};
base.stop_interval = function(){
clearInterval(base.ticker);
};
base.format_ticker = function(){
if(typeof(base.json.ticker.items_to_show) != "undefined" && base.json.ticker.items_to_show !== null)
{
var mi = (base.json.ticker.items_to_show.full_screen===true)?('auto'): ((base.json.ticker.items_to_show *base.json.ticker.rowheight.replace(/px/i, '')) + 'px');
base.$el.css({
height : mi,
overflow : 'hidden'
});
}
else
{
//No heights were specified, so just doublecheck overflow = hidden
base.$el.css({
overflow : 'hidden'
});
}
};
//Make it go!
base.init();
};
$.fn.ds = function( options )
{
return this.each(
function()
{
(new $.omr.ds(this, options));
});
};
})( jQuery );
|