History
   Show Presentation
 
 
 GARBAGE-CACHE
Home • Plugins • RWD-Plugins_Old • RWDDigitalSign • js • OLD • GARBAGE 001 • GARBAGE-CACHE
 




/*
*       Digital Signage 2.3A2  R-STRUCT VER.
*       --------------------------      
*       JQ vertical scroller script: http://buildinternet.com/project/totem/  (Totem Ticker) -MIT Lisc.
*       JSON Controller // XHR System : rob@firstclassdepot.com
*       
*       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;
                
                //Define the DOM elements
                base.el = el;
                base.$el = $(el);


                //Master Data Structure
         base.json = {};

                
                // Add a reverse reference to the DOM object
                       base.$el.data("omr.ds", base);
                
                base.init = function(){
                       //base.options = $.extend({},$.omr.ds.defaultOptions, options);


                base.json = $.extend({},base.defaultConfiguration(), options);

                console.log(base.defaultConfiguration());
                console.log(options);
                console.log(base.json);


           
            //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();
                                
                        //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
                });
                };


                function sortElements(dsElements){
                                /**********************************************
                                //SORT AREA. AD | AM | PM  BY START TIME
                                ***********************************************/
                                
                                var adEvents = [];
                                var amTop = [];
                                var amEvents = [];
                                var pmEvents = [];
                                var pmTop = [];
                                var sorted = [];
                                
                                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 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={};
                deflt.ticker={};

        /**********************************************
        // 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 TICKER
        ***********************************************/
        deflt.ticker.full_screen= false;
        deflt.ticker.items_to_show= 5;
        deflt.ticker.speed= 4000;
        deflt.ticker.intreval= 8000;
        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 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";

                return deflt;
        }














base.loadConfigurationFile=function()
{
$.get('<!--#echo var="config_parameter" -->',
function(data)
{

        /**********************************************
        // GET TICKER.ITEM
        ***********************************************/
        base.json.ticker.item = {};
        base.json.ticker.item.background_color = data.Ticker.item['background-color'];          
        base.json.ticker.item.src = data.Ticker.item['src'];    
        base.json.ticker.item.background_opacity = data.Ticker.item['background-opacity'] -1;   
        base.json.ticker.item.time_color = data.Ticker.item['time-color'];


        /**********************************************
        // GET TICKER
        ***********************************************/
        base.json.ticker.full_screen =data.Ticker['full-screen'];
        base.json.ticker.items_to_show = data.Ticker['items-to-show'];
        base.json.ticker.speed= data.Ticker['speed'];
        base.json.ticker.intreval = data.Ticker['intreval'];
        base.json.ticker.polltime = data.Ticker['polltime'];
        base.json.ticker.rowheight =data.Ticker['rowheight'];
        base.json.ticker.scroll_direction = data.Ticker['scroll-direction'];
        base.json.ticker.scroll_off = data.Ticker['scroll-off'];        
        base.json.ticker.calendar_select = data.Ticker['calendar-select'];      
        base.json.ticker.calendar_link = data.Ticker['calendar-link'];  
        base.json.ticker.show_past = data.Ticker['show-past'];
        base.json.ticker.time_diff=data.Ticker['time-diff'];
        

        /**********************************************
        // GET PAGE
        ***********************************************/
        base.json.ticker.page = {};
        base.json.ticker.page.title = data.Page['title'];
        base.json.ticker.page.fullscreen_background = data.Page['fullscreen-background'];
        base.json.ticker.page.background_color = data.Page['background-color'];         
        base.json.ticker.page.width = data.Page['width'];
        base.json.ticker.page.height = data.Page['height'];
        base.json.ticker.page.background_image = data.Page['background-image'];


        /**********************************************
        // GET PAGE.WIDGET
        ***********************************************/
        base.json.ticker.page.widget = {};
        base.json.ticker.page.widget.display_widget = data.page.widget['display-widget'];
        base.json.ticker.page.widget.src =data.page.widget['src'];
        base.json.ticker.page.widget.width = data.page.widget['width'];
        base.json.ticker.page.widget.height = data.page.widget['height'];
        base.json.ticker.page.widget.position = data.page.widget['position'];


        /**********************************************
        // GET PAGE.LOGO
        ***********************************************/
        base.json.ticker.page.logo = {};
        base.json.ticker.page.logo.src = data.page.logo['src'];
        base.json.ticker.page.logo.position = data.page.logo['position'];
        base.json.ticker.page.logo.width = data.page.logo['width'];
        base.json.ticker.page.logo.height = data.page.logo['height'];


        /**********************************************
        // GET PAGE.FOOTER
        ***********************************************/
        base.json.ticker.page.footer = {};
        base.json.ticker.page.footer.display_footer = data.page.footer['display-footer'];
        base.json.ticker.page.footer.text = data.page.footer['text'];
        base.json.ticker.page.footer.height = data.page.footer['height'];


        /**********************************************
        // GET PAGE.HEADER
        ***********************************************/
        base.json.ticker.page.header = {};
        base.json.ticker.page.header.src =data.page.header['src'];
        base.json.ticker.page.header.position = data.page.header['position'];
        base.json.ticker.page.header.display_time = data.page.header['display-time'];
        base.json.ticker.page.header.width = data.page.header['width'];
        base.json.ticker.page.header.height = data.page.header['height'];
        base.json.ticker.page.header.text = data.page.header['text'];
        base.json.ticker.page.header.color = data.page.header['color'];
        base.json.ticker.page.header.font_family= data.page.header['font-family'];      
        base.json.ticker.page.header.font_size = data.page.header['font-size'];
        base.json.ticker.page.header.text_decoration= data.page.header['text-decoration'];



}, "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.loadElements = function()
                {
        
                     if(typeof(base.json.ticker.calendar_link)!='undefined')
                      {

                        //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;                      
                        

                                alert(url);

                                $.get(url,function(data)
                                {
                        
                                        /**********************************************
                                        // FC Pull
                                        ***********************************************/
                                        //DS ELEMENTS INTO ARRAY STRUCT
                                        var dsElements = [];

                                        for( k in data.Elements)
                                         {

                                                //WE WANT PROPER ELEMENTS ONLY
                                                if(typeof data.Elements[k]['no'] !== 'undefined')
                                                {
                                                        var msg = new Object();
                                                        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);}
                                                }
                                        }

                                        tElements = sortElements(dsElements);           
                                },'json');


                        //BUG FIX 001
                        base.applyData();

                                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 = new Object();
                                                        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);}
                                                        
                                        });                     
                                        
                                }
                                tElements = sortElements(dsElements);
                                },'jsonp');


                        //BUG FIX 001
                        base.applyData();


                                break;
                        
        
                                case 2:
                                        alert("iCAL PENDING ...");
                                break;
                        

                                default:
                                        alert("Configuration Error - Bad Calendar Selector");
                                break;
                        
                        }
                      }
                };
                
                
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
                //      [][][][][][][][][][] APPLY [][][][][][][][][][]
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
                
                base.applyParameters=function()
                {
                        /**********************************************
                        // APPLY TICKER PARAMETERS
                        ***********************************************/
                        //OTF = ON THE FLY AJAX


/*
                        base.options.row_height          =       tParams.rowheight;                             //OK OTF
                        base.options.speed                       =          tParams.speed;                              //OK OTF
                        base.options.pad                         =       tParams.scrollOff;                             //OK OTF
                        base.options.calendar_link               =       tParams.calendar_link;                 //OK OTF
                        base.options.calendar_select             =       tParams.calendar_select;                       //OK OTF
                        base.options.show_past           =       tParams.show_past;                             //OK OTF
                        //base.options.max_items                 =       tParams.show;                          //NOT OTF       
                        //base.options.interval                  =       tParams.interval;                              //SET IN INTREVAL, CANNOT MODIFY
                        //base.options.direction                 =       tParams.direction;                             //SET IN INTREVAL, CANNOT MODIFY
                        //base.options.polltime                  =       tParams.polltime;                              //SET IN INTREVAL, CANNOT MODIFY
                        base.options.time_diff                  =       tParams.time_diff;
                        base.options.full_screen                =       tParams.full_screen;
*/


                        
                        /**********************************************
                        // APPLY HEIGHT TRANSFORMS
                        ***********************************************/
                        var h = (base.json.ticker.full_screen === true)?'auto' : ((base.json.ticker.full_screen===false)?(base.json.ticker.items_to_show * base.json.ticker.rowheight.replace(/px/i, '')):('') );
$('#wrapper').css({"height" :h});
$('#vertical-ticker').css({"height" : h});      
$('#footer').css({"height" :fContent.height});


                        /**********************************************
                        // APPLY PAGE ATTRIBUTES
                        ***********************************************/        
$('#vertical-ticker').css({"background-color" : pParams.backgroundcolor});      
$('#pagewidth').css({"background-color" : pParams.backgroundcolor});    

                       document.title = pParams.title;

$(!pParams.fullscreenbg?'#pagewidth' : '#vertical-ticker').css({
"background-image" : "none",
"background-repeat": "repeat",
"background-position": "",
"margin" : "",
"padding" : ""
});     

$(pParams.fullscreenbg?'#pagewidth' : '#vertical-ticker').css({
"background-image" : "url('"+pParams.backgroundimage+"')",
"background-repeat": "repeat",
"background-position": pParams.backgroundposition,
"margin" : pParams.margin,
"padding" : pParams.padding

});     

                };
                
                
                base.applyContent=function()
                {

                        /**********************************************
                        //APPLY HEADER
                        ***********************************************/
                        var d = hContent.textdecoration=="Italic"?"font-style":( hContent.textdecoration == "bold" ?"font-weight":"text-decoration");
                        var j = (typeof(hContent.text)=="undefined"?"":hContent.text) ;
                        
                        //HF1


var builtHeader = "";

if(hContent.position == "top")
{
builtHeader = "<img src=\""+hContent.src+"\"    style=\"display:"+((hContent.src=="")?'none':'block')+"; width:"+hContent.width+";   height:"+hContent.height+";  \" />";
builtHeader+= "<span class=\"none\" style=\"text-align:left; color:"+hContent.color+"; font-size:"+hContent.fontsize+"; font-family:"+hContent.fontfamily+";"+d+":"+hContent.textdecoration+"; \">"+ j + "</span>";
}
else if (hContent.position == "bottom")
{
builtHeader = "<span style=\"text-align:left; color:"+hContent.color+"; font-size:"+hContent.fontsize+"; font-family:"+hContent.fontfamily+";"+d+":"+hContent.textdecoration+"; \">"+ j + "</span>";
builtHeader += "<img src=\""+hContent.src+"\"    style=\"display:"+((hContent.src=="")?'none':'block')+"; width:"+hContent.width+";   height:"+hContent.height+";  \" />";
}
else if (hContent.position == "left" || hContent.position == "right")
{
builtHeader ="<img src=\""+hContent.src+"\"    style=\"float:"+hContent.position+";  display:"+((hContent.src=="")?'none':'block')+"; width:"+hContent.width+";   height:"+hContent.height+";  \" /><p style=\" padding:0px; margin:0px;  text-align:left; color:"+hContent.color+"; font-size:"+hContent.fontsize+"; font-family:"+hContent.fontfamily+";        "+d+":"+hContent.textdecoration+";  \">"+ j + "</p>";
}


                        (hContent.src == "")?$('#top > img').hide():$('#top > img').show();

                        if(document.getElementById('header').innerHTML != builtHeader)
                                {document.getElementById('header').innerHTML = builtHeader;}


                        /**********************************************
                        //APPLY LOGO
                        ***********************************************/
                        var builtLogo ="<img src=\""+lContent.src+"\"    style=\"width:"+lContent.width+";   height:"+lContent.height+";\" />";
                var sp = "logo_bottom"; 


                if(lContent.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";
                }

                        (lContent.src == "")?$('#'+sp).hide():$('#'+sp).show();

                        if(document.getElementById(sp).innerHTML != builtLogo)
                                {document.getElementById(sp).innerHTML = builtLogo;}
                        



                        /**********************************************
                        //APPLY FOOTER
                        ***********************************************/
                        if(fContent.displayfooter==1)
                        {
                                //$('#footer').show();
        $('#footer').css({"display" :"block"});

                                var builtFooter ="<p>"+fContent.text+"</p>";
                                if(document.getElementById('footer').innerHTML != builtFooter)
                                        {document.getElementById('footer').innerHTML = builtFooter;}
                        }
                        else
                        {
                                //$('#footer').hide();
        $('#footer').css({"display" :"none"});
                        }
                        




                        /**********************************************
                        //APPLY WIDGET
                        ***********************************************/
                        if(wContent.displaywidget ==1)
                        {

                                //Frame Size
                        var h = wContent.height;
                        var w = wContent.width;

                                //Frame Source
                        var x = "/plugins/RWDDigitalSign/PreDefined_Widgets/" +(  (wContent.src=== "")?( "?plugin=RWDDigitalSign&Templates=WidgetLists&panel_height="+h+"&panel_width="+w) :(wContent.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);}

                                        //alert("W: " + wContent.width + ",H: " +wContent.height );
                //alert("CW: " +$($($('#frame'))).contents().width() + ",CH: "+ $($($('#frame'))).contents().height() );

                $('#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'))).contents().find("iframe").attr({"scrolling":"no"});
}



                        //Frame Loader
                        if(x != $($('#frame')).attr('src') && typeof(wContent.src) != "undefined")
                {
                        $($('#frame')).attr('src',x);

                        //When Loaded,
                                        $('iframe#frame').load(function()
                                       Â  {
                stripGoogle();
                                        sizeFrame(h,w);
                cleanWidget();
                                       Â  });

                }
                
                sizeFrame(h,w);
                        //$('#widget').show();
        $('#widget').css({"display" :"block"});



}
else
                {       //$('#widget').hide();  
        $('#widget').css({"display" :"none"});
                }

                };
                






base.buildTickerElement = function(args)
{
//TO BE CODED.

};





                base.applyElements=function()
                {       
                        //Apply the structure to the HTML doc
                        var tickerHTML = "";


for (i in tElements)
{

alert("Building tickerHTML");

tickerHTML+= "<li class=\"content\">";

tickerHTML+="<div class=\"tickeritem\"    style=\"height:"+base.json.ticker.rowheight+";\"        >";

                        
tickerHTML+="<div class=\"bg\" style=\"background-image: url('"+iParams.src+"'); background-color:"+ iParams.backgroundcolor+";   opacity:"+(iParams.backgroundopacity/100)+";   filter: alpha(opacity="+(iParams.backgroundopacity)+");\"></div>";
tickerHTML+="<div class=\"content\">";


tickerHTML+="<div class=\"left\">";
tickerHTML+="<div id=\"top\"> "+tElements[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:"+iParams.timecolor+"; \" > "+tElements[i].title+" </div>";
tickerHTML+="<div id=\"bot\"> "+tElements[i].start+" to "+tElements[i].end+" -  ("+tElements[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 = "";
                                for (var i=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;
                        }


        
//BUG HERE!! ERROR!! CANNOT USE innerHTML to check because margin-top will be added everywhere !! and it will always say not the same!!


alert("Load Ticker");

alert(tickerHTML);
$("#vertical-ticker").html(tickerHTML);


//document.getElementById('vertical-ticker').innerHTML = tickerHTML;    




                //Detect Change && Pad Elements
                //if(document.getElementById('vertical-ticker').innerHTML != tickerHTML)
                //{
                                
                        
                        
                //}                     

                /*
                if (base.json.ticker.direction == 'down')
                {full = $("li").length;}
                else
                {full = 2* $("li").length;}
                */

                //alert(full);


                        
                };
                                        

                
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
                //  [][][][][][][][][][] COMBINED FUNC [][][][][][][][][][]
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo. 

                base.applyData = function()
                {
                        alert("APPLY");
                        base.applyParameters();
                        base.applyContent();
                        base.applyElements();
                };
                

                                        
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
                // [][][][][][][][][][] DS CLOCK INTREVAL [][][][][][][][][][]
                //.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.                 
                
                base.updateClock = function(){  
                        if (hContent.displaytime==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");
                                
                                document.getElementById('theTime').innerHTML=time;
                                document.getElementById('theDate').innerHTML="<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
                        {
                                document.getElementById('theTime').innerHTML="";
                                document.getElementById('theDate').innerHTML="";
                        }
                };
                                
                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.direction == 'down') {
                                //If the direction has been set to up
                                base.ticker = setInterval(function() {
                                


/*GARBAGE */
/**********************************************
//COUNTER BASED CONTENT RELOAD CONTENT SCRL UP
***********************************************
//BUG HERE !!!!!!!!!!
        
/* ****** ACTIVE *********  */
//alert(counter + ',' + full);
/*
if (counter == full-1 || (full<=base.options.max_items))
{
counter=0;      
base.applyData();
}
else
{
counter++;      
}                                                                               
*/

                        
                                        //ok.
                                        if(full>base.json.ticker.items_to_show)
                                        {
                                                base.$el.find('li:last-child').detach().prependTo(base.$el).css('marginTop', '-' + base.json.ticker.rowheight);
                                                base.$el.find('li:first-child').animate({
                                                        marginTop: '0px'
                                                }, base.json.ticker.speed, function () {
                                                        //Callback functions go here
                                                });
                                
                                        }
                                
                                        
                                }, base.json.ticker.intreval);
                        }else if(base.json.ticker.direction=='up'){
                                //Otherwise, run the default of down
                                base.ticker = setInterval(function() {



/*GARBAGE */
/**********************************************
//COUNTER BASED CONTENT RELOAD CONTENT SCRL DOWN
***********************************************/                                                

//BUG HERE !!!!!!!!!!

                        
/* ****** ACTIVE *********  */
//alert(counter + ',' + full);
/*
if (counter > full-2)
{
counter=0;      
//document.getElementById('vertical-ticker').innerHTML = ticker_buffer; 

base.applyData();                                                                       


//base.applyParameters();
//base.applyContent();
//base.applyElements();
}
else
{
counter++;      
}
*/                                      

                                        //ok.
                                        if(full >2*base.json.ticker.items_to_show)
                                        {
                                                base.$el.find('li:first-child').animate({
                                                        marginTop: '-' + base.json.ticker.rowheight
                                                }, base.json.ticker.speed, function() {
                                                        $(this).detach().css('marginTop', '0').appendTo(base.$el);                                                                                                                       
                                                });
                                        }
                                        
                                }, base.json.ticker.interval);
                        }
                };
                
                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 );