if (typeof MktSocial == 'undefined') {
  MktSocial = {};
}

MktSocial.Renderer;
MktSocial.doRendering;
  
(function(){
  //Below function is copied from msdn
  function getInternetExplorerVersion()
  // Returns the version of Internet Explorer or a -1
  // (indicating the use of another browser).
  {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
      var ua = navigator.userAgent;
      var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
      if (re.exec(ua) != null)
        rv = parseFloat( RegExp.$1 );
    }
    return rv;
  }

  // Retrieving-css-styles-via-javascript/
  function rzCC(s){
    for(var exp=/-([a-z])/; 
         exp.test(s); 
         s=s.replace(exp,RegExp.$1.toUpperCase()));
     return s;
   }

  function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
  }
  //Function to apply style to ie 7 and ie 6 .
   function _setStyle(element, declaration) {
     declaration = trim(declaration);
     if (declaration.charAt(declaration.length-1)==';')
       declaration = declaration.slice(0, -1);
     var k, v;
     var splitted = declaration.split(';');
     for (var i=0, len=splitted.length; i<len; i++) {
        k = rzCC(splitted[i].split(':')[0]);
        v = splitted[i].split(':')[1];
        eval("element.style."+k+"='"+v+"'");
     }
   }
 
  function loadJSFiles( source, callback,head){
    if(typeof head=='undefined' || !head){
      head= document.getElementsByTagName('head')[0];
    }
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.src= source;

    if(callback){
      //calling a function after the js is loaded (IE)  
      var loadFunction = function()  
      {  
        if (this.readyState == 'complete' || this.readyState == 'loaded')  
        {  
          callback();   
        }  
      };  
      script.onreadystatechange = loadFunction;  
      //calling a function after the js is loaded (firefox || chrome)  
      script.onload = callback;  
    }
    head.appendChild(script);
  }
  
  function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  }
  
  MktSocial.Renderer = function(encodedJson, loadScript, parent, tokenPassed){
    var ver = getInternetExplorerVersion();
    //EXTRA LOGIC TO SET STYLES IN IE7 AND IE6
    var setStyle = function(element, style){
      if ( ver == -1 || ver >= 8.0)
      {
        element.setAttribute('style',style);
      }
      else{
         _setStyle(element, style);
      }
    };
    
    //EXTRA LOGIC TO SET CLASS IN IE7 AND IE6
    var setClass = function(element, cssClass){
      var ver = getInternetExplorerVersion();
      if ( ver == -1 || ver >= 8.0)
      {
        element.setAttribute('class',cssClass);
      }
      else{
         eval("element.className='"+cssClass+"'");
      }
    };
    
     function prepareDataUrl(urlKeyVal, token){
       if(!pageUrl || typeof urlKeyVal=='undefined'){
         return '';
       }
      var url = unescape(pageUrl);
      for(var i=0; i<urlKeyVal.length; i++){
        var key = urlKeyVal[i].parameter;
        var val = urlKeyVal[i].value;
        if(url.indexOf('?') == -1){
          url = url + '?';
        }
        else{ 
          url = url + '&';
        }
        url = url +encodeURIComponent(key) + '=' + encodeURIComponent(val);
      }

      if(token===undefined || !token || token==''){
        return url;
      }
      url = url + '&'+ 'ltok=' +token;
      return url;
    }
  
    var createSocialIframe = function(){
      var iframe = document.createElement("iframe");
      setClass(iframe, 'socialIframe');
      iframe.setAttribute('frameborder',0);
      iframe.setAttribute('allowtransparency',true);
      return iframe;
    };
    
    var getIframeDoc = function(iframe){
      if (iframe.contentDocument) {
        return  iframe.contentDocument;
      }
      if (iframe.contentWindow) {
        return  iframe.contentWindow.document;
      }
      if (iframe.document) {
        return  iframe.document;
      }
      return null;
    };
    
    var fillTwitterIframe = function(twitterIframe){
      var iframeDoc = getIframeDoc(twitterIframe);
      if (iframeDoc) {
        iframeDoc.open();
        iframeDoc.close(); 
        setStyle(iframeDoc.body, 'margin:0px; background-color:transparent');
        var dataUrl = prepareDataUrl(twitterConfig.urlKeyVal, token);
        var twitterLink = document.createElement('a'); 
        twitterLink.setAttribute('href', 'http://twitter.com/share');
        twitterLink.setAttribute('class', "twitter-share-button" );
        twitterLink.setAttribute('data-counturl',twitterConfig.dataurl); 
        twitterLink.setAttribute('data-url',dataUrl); 
        twitterLink.setAttribute('data-count', twitterConfig.datacount);
        twitterLink.setAttribute('data-via', twitterConfig.datavia);  
        twitterLink.setAttribute('data-text', twitterConfig.datatext);  
        twitterLink.setAttribute('data-related', twitterConfig.datarelated);  
        twitterLink.innerHTML = 'Tweet'; 
        iframeDoc.body.appendChild(twitterLink);
        var iHead= iframeDoc.getElementsByTagName('head')[0];
        loadJSFiles("http://platform.twitter.com/widgets.js", null,iHead);
      }
    };
    
    var fillLinkedinIframe = function(liIframe){
      var iframeDoc = getIframeDoc(liIframe);
      if (iframeDoc) {
        iframeDoc.open();
        iframeDoc.close(); 
        setStyle(iframeDoc.body, 'margin:0px; background-color:transparent');
        var liDataUrl = prepareDataUrl(liConfig.urlKeyVal, token);
        var linkedinScript = document.createElement('script'); 
        linkedinScript.setAttribute('data-url',liDataUrl); 
        linkedinScript.setAttribute('type','in/share');
        iframeDoc.body.appendChild(linkedinScript);
        var iHead= iframeDoc.getElementsByTagName('head')[0];
        loadJSFiles("http://platform.linkedin.com/in.js", null,iHead);
      }
    };
    
    var token='';
    if(tokenPassed && tokenPassed!=null){
      token=tokenPassed;
    } 
    
    var config = unescape(encodedJson);
    var jsonObj = eval('(' + config + ')');
     
     var pageUrl = jsonObj.pageUrl;
    //--------TWITTER--------
    var twitterConfig = jsonObj.twitter;
    if(typeof(twitterConfig)!=typeof(undefined) &&twitterConfig&&twitterConfig.datacount!='nobutton'){
      var twitterClass = 'twitter-' + twitterConfig.datacount;
       var twitter = document.createElement("div");
      setClass(twitter, twitterClass);
      if(twitterConfig.style){
        twitterConfig.style = twitterConfig.style + 'overflow:hidden';
      } 
      else{
        twitterConfig.style='overflow:hidden';
      }
      setStyle(twitter, twitterConfig.style);
            
      var twitterIframe = createSocialIframe();
      twitter.appendChild(twitterIframe);
    }
    //    
    //    //--------FACEBOOK--------
    var fbConfig = jsonObj.facebook;
    if(typeof(fbConfig)!=typeof(undefined) &&fbConfig&&fbConfig.datacount!='none'){
      
      var fbClass = 'facebook-' + fbConfig.cssClass;
      var facebook = document.createElement('div'); 
      setClass(facebook, fbClass);
      var fbCustomStyle = '';
      if(fbConfig.layout=='standard'){
        fbCustomStyle = fbCustomStyle + 'width: 450px;';
      }
      if(fbConfig.style){
        fbCustomStyle = fbCustomStyle + fbConfig.style;
      } 
      setStyle(facebook, fbCustomStyle);
      
      var dataUrl = prepareDataUrl(fbConfig.urlKeyVal, token);
      var fbRoot = document.createElement('div'); 
      fbRoot.setAttribute('id', 'fb-root');
      facebook.appendChild(fbRoot);
      var fbLike = document.createElement('fb:like')
      fbLike.setAttribute('href', dataUrl);
      fbLike.setAttribute('send',fbConfig.send); 
      fbLike.setAttribute('layout', fbConfig.layout);
      fbLike.setAttribute('show_faces',fbConfig.faces); 
      fbLike.setAttribute('colorscheme',fbConfig.color); 
      fbLike.setAttribute('action',fbConfig.verb); 
      facebook.appendChild(fbLike);
      if(loadScript) loadJSFiles("http://connect.facebook.net/en_US/all.js#xfbml=1");      
    }
    
    //--------LINKEDIN----------
    var liConfig = jsonObj.linkedin;
    if(typeof(liConfig)!=typeof(undefined) &&liConfig&&liConfig.datacount!='none'){
      var linkedin = document.createElement('div');
      setClass(linkedin, 'liNoCount');
      if(liConfig.style){
        liConfig.style = liConfig.style+'overflow:hidden';
      }  
      else{
        liConfig.style = 'overflow:hidden';
      }      
      setStyle(linkedin, liConfig.style);
      var linkedinIframe = createSocialIframe();
      linkedin.appendChild(linkedinIframe);
    }
    //    
    //--------PLUSONE--------

    var poConfig = jsonObj.plusone;
    if(typeof(poConfig)!=typeof(undefined) &&poConfig&&poConfig.datacount!='none'){
      var rand = new Date().getTime().toString();
      var plusone = document.createElement("div");
      if(poConfig.style){
        setStyle(plusone, poConfig.style);
      } 
      setClass(plusone, poConfig.cssClass);
      var plusoneDiv = document.createElement("div");
      plusoneDiv.setAttribute('id', rand);
      plusone.appendChild(plusoneDiv);
       var an='none';
       if(poConfig.count=='true' || poConfig.layout=='tall'){
         an='bubble';
       }
       var poDataUrl = prepareDataUrl(poConfig.urlKeyVal, token);
        var poParams = {
            href: poDataUrl,
            size: poConfig.layout,
            annotation:an
        };
    }
    
    var socialDiv='';
    if(twitter || facebook || plusone || linkedin){
      socialDiv = document.createElement('div'); 
        //IFRAME HAVE TO BE IN DOM FOR ITS DOCUMENT PROPERTY.
        parent.appendChild(socialDiv);
    }
    
    if(twitter){
      socialDiv.appendChild(twitter);
    }
    if(plusone){
      socialDiv.appendChild(plusone);
    }
    if(linkedin){
      socialDiv.appendChild(linkedin);
    } 
    if(facebook){
      socialDiv.appendChild(facebook);
    }
    if(twitter) fillTwitterIframe(twitterIframe);
    if(linkedin) fillLinkedinIframe(linkedinIframe);
    if(plusone){
      if(loadScript){
       if(typeof gapi == 'undefined' || gapi==null || !gapi.plusone){
          loadJSFiles("https://apis.google.com/js/plusone.js",function(){
             gapi.plusone.render(rand, poParams);
          });
        }
        else{
          gapi.plusone.render(rand, poParams);
        } 
      }
      else{
        return {id:rand, poParams:poParams};
      }
    }
    return '';
 };

  MktSocial.renderWidget = function(containerId) {
    if (!containerId) {
      return false;
    }
    
    var containerEl = document.getElementById(containerId);
    if (!containerEl || !containerEl.childNodes[0] || !containerEl.childNodes[0].childNodes[0] || !containerEl.childNodes[0].childNodes[0].value) {
      // Cannot find the element
      return false;
    }
    
    // munchkin id and lead context cookie
    var mktCookie = readCookie('_mkto_trk');
    var token = typeof mktVisitorToken != 'undefined' ? mktVisitorToken : '';
    if(mktCookie!=null && mktCookie.indexOf('token')!=-1){
      token = mktCookie.split('token')[1].substring(1);
    }
    try{
      var encodedJson = containerEl.childNodes[0].childNodes[0].value;
      MktSocial.Renderer(encodedJson, true, containerEl.childNodes[0], token);
    }
    catch(exception) {
      if(console){
        console.error(exception);
        return false;
      }
    }
    return true;
  };
  
  MktSocial.doRendering  = function(){
    var hiddenSocialTags = document.getElementsByName('socialbutton');
    // munchkin id and lead context cookie
    var mktCookie = readCookie('_mkto_trk');
    var token = typeof mktVisitorToken != 'undefined' ? mktVisitorToken : '';
    if(mktCookie!=null && mktCookie.indexOf('token')!=-1){
      token = mktCookie.split('token')[1].substring(1);
    }
    try{
      var poIDParams=[];
       for(var i=0; i<hiddenSocialTags.length; i++){
        var hiddenSocialTag = hiddenSocialTags[i];
        var encodedJson = hiddenSocialTag.value;
        var parent = hiddenSocialTag.parentNode;
        var r = MktSocial.Renderer(encodedJson, false,parent, token);
        if(r!=''){
          poIDParams.push(r);
        }
      }
      if(hiddenSocialTags.length>0){
        loadJSFiles("http://connect.facebook.net/en_US/all.js#xfbml=1");       
        if(poIDParams.length>0){
          loadJSFiles("https://apis.google.com/js/plusone.js",function(){
            for(var j=0; j<poIDParams.length; j++){
              gapi.plusone.render(poIDParams[j].id, poIDParams[j].poParams);
            }
          });
        }
     }
    }
    catch(exception){
      if(console){
        console.log(exception);
      }
    }
  }
})();

var f = window.onload;
window.onload = function(e){
  if(typeof f === 'function') f(e);
  MktSocial.doRendering();
}


