/**
 * PopRule Action Engine UI
 * Copyright 2009-2010 PopRule, LLC
 * All Rights Reserved
 */
( function() {
   var trueName = '';
   for (var i = 0; i < 16; i++) {
      trueName += String.fromCharCode(Math.floor(Math.random() * 26) + 97);
   }
   window[trueName] = {};
   var $ = window[trueName];
   $.f = function() {
      return {
         runFunction : [],
         baseUrl : 'http://poprule.com/',
         cdnUrl : 'http://static.poprule.com/',
         pageCache : {},
         cacheOrder : [],
         cachePos : -1,
         interactTime: 0,
         startTime: 0,
         clickCount: 0,
         actionIds: [],
         curAction: 0,
         windowHeight: 0,
         partnerId: false,
         init : function(target) {
            var theScripts = document.getElementsByTagName('SCRIPT');
            for (var i = 0; i < theScripts.length; i++) {
               if (theScripts[i].src.match(target)) {
                  if (theScripts[i].innerHTML) {
                    // Replace CDATA and HTML in the arguments
                    
                    var toeval = theScripts[i].innerHTML;
                    
                    toeval = toeval.replace(/<!--|\/?\/?.*-->/g, "");
                    toeval = toeval.replace(/\/\/.*<!\[CDATA\[/g, "");
                    toeval = toeval.replace(/\/\/.*\]\]>/gi, "");
                    toeval = toeval.replace(/<(?:.|\s)*?>/gi,"");

                    if (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]+$/.test(toeval.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) {
                      try {
                        $.a = eval( '(' + toeval + ')' );
                      }
                      catch(err) { }
                    }
                  }
                  if (typeof $.a !== 'object') {
                     $.a = {};
                  }
                  
                  $.a.client = 'imc';
                  
                  // Determine what server to use
                  if($.a.server == 'test') {
                    $.f.baseUrl = 'http://test.poprule.com/';
                    $.f.cdnUrl = 'http://test-static.poprule.com/';
                  }
                  else if($.a.server == 'dev') {
                    $.f.baseUrl = 'http://dev.poprule.com/';
                    $.f.cdnUrl = 'http://static.poprule.com/';
                  }
                  
                  if($.a.brand == 'thin') {
                    $.f.requestStylesheet('imc-thin.css');
                  }
                  else {
                    $.f.requestStylesheet('imc-v2.css');
                  }
  
                  $.f.buildStructure();
                  
                  theScripts[i].parentNode.insertBefore($.c, theScripts[i]);
                  theScripts[i].parentNode.removeChild(theScripts[i]);
                  break;
               }
            }
         },
         leave : function() {
           if($.f.startTime != 0) {
             var d = new Date();
             $.f.interactTime += (d.getTime() - $.f.startTime);
           }
         
           $.f.loadContent('report_engage', '&source=widget&time=' + ($.f.interactTime / 1000) + '&clicks=' + $.f.clickCount, false);
           
           return true;
         },
         requestStylesheet: function(sheet) {
            stylesheet = document.createElement("link");
            stylesheet.rel = "stylesheet";
            stylesheet.type = "text/css";
            stylesheet.href = $.f.cdnUrl + 'css/' + sheet;
            stylesheet.media = "all";
            document.lastChild.firstChild.appendChild(stylesheet);
         },
         buildStructure : function() {         
           $.c = document.createElement('div');
        
           $.w = document.createElement('div');
           $.w.className = 'pr-wdgt';
           $.w.id = trueName;
           $.w.onmouseover = function() { $.f.logTime('enter'); };
           $.w.onmouseout = function() { $.f.logTime('exit'); };
                        
           $.w.p = document.createElement('div');
           $.w.p.className = 'pr-act';
           
           if($.a.brand == 'cnn') {
             $.w.p.style.backgroundImage = 'url("' + $.f.cdnUrl + 'img/imc/cnn-haiti-bg.png")';
           }
           else if($.a.brand == 'starbucks') {
             $.w.p.style.backgroundImage = 'url("' + $.f.cdnUrl + 'img/imc/sbux-imc-bg.png")';
           }

           if($.a.brand == 'thin') { $.a.width = 160; } else { $.a.width = 300; }
           if($.a.brand == 'thin') { $.a.height = 400; } else { $.a.height = 250; }
 
           $.w.p.style.width = $.a.width + 'px'; 
           $.w.style.width = $.a.width + 'px';
           $.w.p.style.height = $.a.height + 'px';
           
           $.w.p.loading = document.createElement('div');
           $.w.p.loading.className = 'pr-load';
           $.w.p.loading.innerHTML = '<img src="' + $.f.cdnUrl + 'img/loader.gif" />';
           $.w.p.appendChild($.w.p.loading);
           
           // Create Masthead
           $.w.p.m = document.createElement('a');
           
           $.w.p.m.className = 'pr-mst';
           $.w.p.m.innerHTML = '&nbsp;';
           $.w.p.m.target = '_blank';
           $.w.p.appendChild($.w.p.m);
           
           // Create content area
           $.w.p.dyn = document.createElement('div');
           $.w.p.dyn.className = 'pr-content';
           //$.w.p.dyn.style.width = ($.a.width - 10) + 'px';
            
           $.w.p.appendChild($.w.p.dyn);
            
           $.w.style.position = 'static';
           
           // Issue or content-reading?
           args = '';
           
           if($.a.issue) {
             args += '&issue=' + escape($.a.issue);
           }
       
           $.f.loadContent('api/imc_action', args, true);
           
           var tabs = {
             "pr-medb" : { "cb" : "api/get_imc_media", "title" : "Media"},
             "pr-alrb" : { "cb" : "api/get_imc_alerts", "title" : "Map"},
             "pr-flwb" : { "cb" : "api/get_imc_follow", "title" : "Follow"},
             "pr-dntb" : { "cb" : "api/imc_action", "title" : "Donate"},
             "pr-grbb" : { "cb" : "api/get_imc_embed", "title" : "Grab"}
           };
           
           for(cl in tabs) {
             var nextTab = document.createElement('a');
             nextTab.className = 'pr-tab ' + cl;
             nextTab.href = '#';
             nextTab.rel = tabs[cl].cb;
             nextTab.onclick = function() { $.f.loadContent(this.rel, '', true); return false; };
             nextTab.innerHTML = tabs[cl].title;
             $.w.p.appendChild(nextTab); 
           }
            
           $.w.appendChild($.w.p);
            
           // Create footer
           $.w.p.foot = document.createElement('div');
           $.w.p.foot.className = 'pr-ftr';
           
           // Powered by PopRule
           $.w.p.ia = document.createElement('a');
           $.w.p.ia.href = 'http://poprule.com/';
           $.w.p.ia.innerHTML = 'Powered by PopRule';
           $.w.p.ia.target = "_blank";
           $.w.p.ia.className = 'pr-logo';
           $.w.p.foot.appendChild($.w.p.ia);
           
           // Create back button
           $.w.p.back = document.createElement('a');
           $.w.p.back.className = 'pr-back';
           $.w.p.back.href = '#';
           $.w.p.back.onclick = function() {
             $.w.p.loading.style.display = 'none';
             $.f.goBack();
             return false;
           };
           $.w.p.back.innerHTML = 'Back';
           $.w.p.foot.appendChild($.w.p.back);
           
           $.w.p.appendChild($.w.p.foot);
           
           $.c.appendChild($.w);
         },
         goBack : function(home) {
           if($.f.cachePos != 0) {
             if(home) {
               $.f.cachePos = 0;
             }
             else {
               $.f.cachePos--;
             }
             
             $.f.renderResult($.f.pageCache[$.f.cacheOrder[$.f.cachePos]]);
           }
         },
         goFwd : function() {
           if($.f.pageCache[$.f.cacheOrder[$.f.cachePos+1]]) {
               $.f.cachePos++;
             
             $.f.renderResult($.f.pageCache[$.f.cacheOrder[$.f.cachePos]]);
           }
         },
         loadContent : function(src, args, refresh) {     
           var url = $.f.baseUrl + src + '?key=' + $.a.client + args;
           
           if($.f.partnerId) { 
             url += '&ref=' + $.f.partnerId;
             
             // Log the click
             $.f.clickCount++;
           }
           else { 
             url += '&t=' + escape(document.title) + '&ref=' + escape(location.href.replace(/\?.*|#/,'')); 
           }
           
           $.f.cachePos++;
           $.f.cacheOrder[$.f.cachePos] = url;
           
           if($.f.pageCache[url]) {
             $.f.renderResult($.f.pageCache[url]);
           }
           else {
             if(refresh) {
               $.w.p.loading.style.display = 'block';
             }
         
             var n = $.f.runFunction.length;
             var id = trueName + '.f.runFunction[' + n + ']';
             
             var preCB = url;
             
             $.f.runFunction[n] = function(r) {
               $.f.pageCache[preCB] = r;
             
               delete($.f.runFunction[n]);
               $.f.removeScript(id);
               $.f.renderResult(r);

               $.w.p.loading.style.display = 'none';   
             };
             
             if($.a.brand == 'thin') {
               url += '&thin=1';
             }
             
             url += '&callback=' + id;
             
             $.f.runScript(url, id);
           }
         },
         formatLink: function(o, front) {
           l = document.createElement('a');
           l.className = 'pr-lnk';

           if(o['type'] != false) {
             ls = document.createElement('span');
             ls.className = 'pr-' + o['type'];
             ls.innerHTML = o['type'].toUpperCase();
             
             l.appendChild(ls);
           }
           
           l.innerHTML += ' ' + o['title'];
           
           if(!o['html']) {
             if(o['url']) {
               l.href = o['url'];
               l.target = '_blank';
             }
             else {
               if(!o['callback_args']) { o['callback_args'] = ''; }
           
               l.href = '#';
               l.onclick = function() {
                 $.f.loadContent(o['callback'], o['callback_args'], true);
                 return false;
               };
             }
           }
           
           return l;
         },
         logTime: function(dir) {
           var d = new Date();
           if(dir == 'enter') {
             $.f.startTime = d.getTime();
           }
           else if(dir == 'exit') {
             $.f.interactTime += (d.getTime() - $.f.startTime);
             $.f.startTime = 0;
           }
         },
         renderResult: function(r) {
           if(!r.req) {
            if(!$.f.partnerId) {
              $.f.partnerId = r.pid;
            }
            
            if(r.masthead) {
              $.w.p.m.href = r.masthead;
            }
           
            var a;
            n = document.createElement('div');
            
            if(r.type == 'html') {
              n.innerHTML = r.html_content;
              
              if(r.follow_page) {
                var sharetw = document.createElement('a');
                sharetw.className = 'pr-icbtn pr-ictwt';
                sharetw.href='#';
                sharetw.onclick = function() { $.f.loadContent('api/get_imc_follow', '&twitter=1', true); return false; };
                sharetw.innerHTML = 'Follow Us on Twitter';
                
                n.appendChild(sharetw);
                
                var sharefb = document.createElement('a');
                sharefb.className = 'pr-icbtn pr-icfb';
                sharefb.href='#';
                if($.a.brand == 'thin') {
                  sharefb.onclick = function() { $.f.loadContent('api/get_imc_follow', '&fb=2', true); return false; };
                }
                else {
                  sharefb.onclick = function() { $.f.loadContent('api/get_imc_follow', '&fb=1', true); return false; };
                }
                sharefb.innerHTML = 'Become a Fan on Facebook';
                  
                n.appendChild(sharefb);
              }
              
              if(r.share_page) {
                var shembed = document.createElement('a');
                shembed.className = 'pr-icbtn pr-icemb';
                shembed.href='#';
                shembed.onclick = function() { $.f.loadContent('api/get_imc_embed', '', true); return false; };
                shembed.innerHTML = 'Put this Action Widget on your website or blog';
                  
                n.appendChild(shembed);
              }
              
              if(r.alerts_page) {
                var ldiv = document.createElement('div');
                ldiv.style.textAlign = 'center';
                ldiv.style.marginTop = '3px';
                
                var vmap = document.createElement('a');
                vmap.href = 'http://poprule.com/action/any/0?u=http://haiti.ushahidi.com/&t=Haiti&ref=' + $.f.partnerId + '&key=imc';
                vmap.innerHTML = 'View Larger Map';
                vmap.style.paddingRight = '1em';
                
                ldiv.appendChild(vmap);
              
                var viewrss = document.createElement('a');
                viewrss.href = '#';
                viewrss.onclick = function() { $.f.loadContent('api/get_feed/view/13', '', true); return false; };
                viewrss.innerHTML = 'View Latest Alerts &raquo;';
                
                ldiv.appendChild(viewrss);

                n.appendChild(ldiv);
              }
            }
            else if(r.type == 'links') {
              if(!r.error) {
                hone = document.createElement('h1');
                hone.innerHTML = 'Haiti Earthquake Media';
                if($.a.brand == 'thin') {
                  hone.style.fontSize = '13px';
                }
                else {
                  hone.style.fontSize = '15px';
                }
                hone.style.margin = '0 0 2px 0';
                n.appendChild(hone);

                for(i=0;i<r.results.length;i++) {
                  n.appendChild($.f.formatLink(r.results[i], true));
                }
              
                if(!r.front) {
                  n.c = document.createElement('div');
                  n.c.className = 'pr-srch-nav';
                
                  n.p = document.createElement('a');
                  n.p.className = 'pr-srch-prev';
                  n.p.href = '#';
                  
                  n.p.onclick = function() {
                    $.f.goBack();
                    return false;
                  };
                
                  if(r.start != 0) {
                    n.p.innerHTML = '&lt; Prev';
                  }
                  else {
                    n.p.innerHTML = '&lt; Back';
                  }
                  
                  n.c.appendChild(n.p);
              
                  if(!r.end) {
                    n.nxt = document.createElement('a');
                    n.nxt.className = 'pr-srch-next';
                    n.nxt.href = '#';
                    n.nxt.innerHTML = 'Next &gt;';
                    qString = '&start=' + (r.start * 1 + 3) + '&max=' + r.max;
                    if(r.query) { qString += '&query=' + escape(r.query); }
                    if(r.ntype) { qString += '&type=' + r.ntype; }
                    
                    n.nxt.onclick = function() {
                      $.f.loadContent(r.nexturl, qString, true);
                      return false;
                    };
                    n.c.appendChild(n.nxt);
                  }
                  
                  cnn = document.createElement('a');
                  cnn.className = 'pr-cnn';
                  if($.a.brand == 'thin') {
                    cnn.innerHTML = '<img src="' + $.f.cdnUrl + 'img/imc/cnn-impact-thin.png" border="0" />';
                  }
                  else {
                    cnn.innerHTML = '<img src="' + $.f.cdnUrl + 'img/imc/cnn-impact.png" border="0" />';
                  }
                  cnn.href = 'http://poprule.com/action/any/0?u=' + escape('http://www.cnn.com/SPECIALS/2007/impact/') + '&t=CNN+Impact+Your+World&key=imc&ref=' + $.f.partnerId;
                  cnn.target = "_blank";
                  n.appendChild(cnn);
                
                  n.appendChild(n.c);
                }
              }
              else {
                err = document.createElement('p');
                err.innerHTML = 'Your search returned no results.';
                n.appendChild(err);
              }
            }
            else if(r.type == 'youtube') {
              n.style.textAlign = 'center';
           
              nW = $.a.width - 30;
              nH = Math.round(nW * 0.65);
              
              var vidurl = 'http://www.youtube.com/v/' + r.video_id + '?autoplay=1';
           
              n.innerHTML = '<object width="' + nW + '" height="' + nH + '"><param name="movie" value="' + vidurl + '"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="' + vidurl + '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + nW + '" height="' + nH + '"></embed></object>';
            
              n.innerHTML += '<br /><a style="text-decoration: none;" href="http://poprule.com/share/any/twitter/0/widget?ref=' + $.f.partnerId + '&key=imc&t=International+Medical+Corps+video+from+Haiti&u=http://www.youtube.com%3Fv=' + r.video_id + '" target="_blank"><img src="' + $.f.cdnUrl + 'img/twitter.png" style="vertical-align: bottom;" /> Tweet This</a>&nbsp;&nbsp;' +
                             '<a style="text-decoration: none;" href="http://poprule.com/share/any/facebook/0/widget?ref=' + $.f.partnerId + '&key=imc&u=http://www.youtube.com?v=' + r.video_id + '" target="_blank"><img src="' + $.f.cdnUrl + 'img/facebook.png" style="vertical-align: bottom;" /> Share on Facebook</a>';
            
            }
            else if(r.type == 'action') {
              if(r.front) {
                $.f.actionIds = r.action_nids;
              }
            
              n.ttl = document.createElement('h1');
              
              // Determine proper font size
              if(r.action.title.length >= 70) {
                var fnt = 14;
              }
              else if(r.action.title.length >= 47) {
                var fnt = 16;
              }
              else if(r.action.title.length >= 33) {
                var fnt = 18;
              }
              else {
                var fnt = 20;
              }
              
              n.ttl.style.fontSize = fnt + 'px';
              n.ttl.style.lineHeight = (fnt+3) + 'px';
              n.ttl.innerHTML = r.action.title + ' ';
              
              n.more = document.createElement('a');
              n.more.innerHTML = 'learn more &raquo;';
              n.more.href = '#';
              n.more.onclick = function() { 
                if(n.tsr.style.display == 'block') {
                  n.bdy.style.display = 'block';
                  n.tsr.style.display = 'none';
                  n.more.innerHTML = 'learn more &raquo;';
                }
                else {
                  n.bdy.style.display = 'none';
                  n.tsr.style.display = 'block';
                  n.more.innerHTML = '&laquo; close';
                }
                return false;
              };
              
              n.ttl.appendChild(n.more);
              
              n.appendChild(n.ttl);
              
              // Create invisible teaser
              n.tsr = document.createElement('div');
              n.tsr.className = 'pr-act-tsr';
              n.tsr.innerHTML = r.action.teaser;
              n.appendChild(n.tsr);
              
              n.bdy = document.createElement('div');
              n.bdy.className = 'pr-act-bdy';
              
              if(r.action.picture) {
                n.pic = document.createElement('img');
                n.pic.src = r.action.picture;
                n.pic.className = 'pr-aimg';
                n.bdy.appendChild(n.pic);
              }
              
              n.bdy.rt = document.createElement('div');
              n.bdy.rt.className = 'pr-act-rt';
              
              n.bt = document.createElement('a');
              n.bt.className = 'pr-btnl';
              
              if(r.action.button['callback']) {
                n.bt.href = '#';
                n.bt.onclick = function() { $.f.loadContent(r.action.button['callback'], '', true); return false; };
              }
              else {
                n.bt.href = r.action.button['url'];
              }
              
              n.bt.innerHTML = r.action.button['title'];
              n.bdy.rt.appendChild(n.bt); 
              
              if(r.action.metadata) {
                n.hr = document.createElement('hr');
                n.hr.className = 'pr-ln';
                n.bdy.rt.appendChild(n.hr);
                
                n.twt = document.createElement('div');
                n.twt.className = 'pr-twt';
                
                n.twta = document.createElement('a');
                n.twta.innerHTML = '<img src="' + $.f.cdnUrl + 'img/twitter.png" style="vertical-align: bottom;" /> Tweet this';
                if(r.action.metadata.tweet_link) {
                  n.twta.href = r.action.metadata.tweet_link;
                }
                else {
                  n.twta.href = $.f.baseUrl + 'share/node/twitter/' + r.nid + '?ref=' + $.f.partnerId + '&source=widget&key=' + $.a.client;
                }
                n.twta.target = '_blank';
                n.twt.appendChild(n.twta);
                
                if(r.action.metadata.tweets > 0) {
                  n.twt.innerHTML += ' (' + r.action.metadata.tweets + ')';
                }
                
                n.bdy.rt.appendChild(n.twt);
                
                n.fb = document.createElement('div');
                n.fb.className = 'pr-fb';
                
                n.fba = document.createElement('a');
                n.fba.innerHTML = '<img src="' + $.f.cdnUrl + 'img/facebook.png" style="vertical-align: bottom;" /> Share this';
                if(r.action.metadata.tweet_link) {
                  n.fba.href = r.action.metadata.facebook_link;
                }
                else {
                  n.fba.href = $.f.baseUrl + 'share/node/facebook/' + r.nid + '?ref=' + $.f.partnerId + '&source=widget&key=' + $.a.client;
                }
                n.fba.target = '_blank';
                n.fb.appendChild(n.fba);
                
                if(r.action.metadata.shares > 0) {
                  n.fb.innerHTML += ' (' + r.action.metadata.shares + ')';
                }
                
                n.bdy.rt.appendChild(n.fb);
                
                if($.a.brand == 'thin') {
                  n.gb = document.createElement('div');
                  n.gb.className = 'pr-gb';
                
                  n.gba = document.createElement('a');
                  n.gba.innerHTML = '<img src="' + $.f.cdnUrl + 'img/grab.png" style="vertical-align: bottom;" /> Get Widget';
                  
                  n.gba.href = '#';
                  n.gba.onclick = function() { $.f.loadContent('api/get_imc_embed', '', true); return false; };
                  
                  n.gb.appendChild(n.gba);
                
                  n.bdy.rt.appendChild(n.gb);
                }
              }
                
              n.bdy.appendChild(n.bdy.rt);
              n.appendChild(n.bdy);
              
              if($.a.brand != 'thin') {
                n.blnk = document.createElement('div');
                n.blnk.className = 'pr-blnk';

                n.twt = document.createElement('a');
                n.twt.href = '#';
                n.twt.onclick = function() { $.f.loadContent('api/get_imc_follow', '&twitter=1', true); return false; };
                n.twt.innerHTML = 'Latest Updates on Twitter';
                n.blnk.appendChild(n.twt);
                
                n.appendChild(n.blnk);
              }
              
              n.mr = document.createElement('a');
              n.mr.className = 'pr-more';
              n.mr.href = '#';
              n.mr.onclick = function() { $.f.loadContent('api/get_imc_help', '', true); return false; };
              n.mr.innerHTML = 'How Else Can I Help?';
              
              if($.a.brand == 'thin') {
                n.bt.parentNode.insertBefore( n.mr, n.bt.nextSibling );
              }
              else {
                n.blnk.appendChild(n.mr);
              }
            }
            
            if(r.type != 'rate') {
              if(!r.front && r.type == 'action') {
                $.w.p.back.style.display = 'block';
                $.w.p.dyn.style.left = '22px';
              }
              else {
                $.w.p.back.style.display = 'none';
                $.w.p.dyn.style.left = '6px';
              }
            
              $.w.p.dyn.innerHTML = '';
              $.w.p.dyn.appendChild(n);
            }
           }
         },
         runScript : function(url, id) {
           var s = document.createElement('script');
           s.id = id;
           s.type ='text/javascript';
           s.src = url;
           document.getElementsByTagName('body')[0].appendChild(s);
         },
         removeScript : function(id) {
            var s = '';
            if (s = document.getElementById(id)) {
               s.parentNode.removeChild(s);
            }
         }
      };
   }();
   var thisScript = /^https?:\/\/[^\/]*poprule.com\/js\/imc.js$/;
   if(typeof window.addEventListener !== 'undefined') {
      window.addEventListener('load', function() { $.f.init(thisScript); }, false);
      window.addEventListener('unload', function() { $.f.leave(); }, false);
   } else if(typeof window.attachEvent !== 'undefined') {
      window.attachEvent('onload', function() { $.f.init(thisScript); });
      window.attachEvent('onbeforeunload', function() { $.f.leave(); });
   }
} )();