/*  Sludge, version 0.1 dev
 *  (c) 2008  PraizedMedia Inc
 *
 *--------------------------------------------------------------------------*/
(function(){
/* This makes sure our widget has a very unique name
   in the javascript netherworld and thus prevents colision */
;var appName = 'PraizedShareThis';
for (var i = 0; i < 16; i++) {
  appName += String.fromCharCode( Math.floor( Math.random() * 26 ) + 97 );
};
/* Make appName an object */
window[appName] = {};
/* Assign shortcut for appName */
var $ = window[appName];
$.Version = '0.0.1';
;$.s = function(){
 return {                                                                                          
    outterDiv:    'display:none;width:505px;height:335px;background:none;position:absolute;z-index:99999990;margin:0;padding:0;border:0;left:50%;margin:auto auto auto -250px;',
    innerDiv:     'display:block;width:500px;background:#666 url(http://static.praized.com/praized-com/images/preloaders/black-and-white/praized-logo-preloader-120x120-666666.gif) center no-repeat;border:1px solid #000;height:330px;position:absolute;top:0px;left:0px;z-index:99999997;margin:0;padding:0;',
    iFrame:       'position:absolute;top:0px;z-index:99999998;margin:0;left:0px;padding:0;border:0px;frameborder:0;',
    closeButton:  'position:absolute;top:3px;right:8px;z-index:999999999;border:0;background:none;color:#fff;font-weight:bold;margin:0;padding:0;width:35px;font-size:11px;',
    shadow: [
    'position:absolute;z-index:99999991;height:334px;width:504px;background:#000;top:1px;left:1px;margin:0;padding:0;border:0;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px',
    'position:absolute;z-index:99999992;height:332px;width:502px;background:#000;top:2px;left:2px;margin:0;padding:0;border:0;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px',
    'position:absolute;z-index:99999992;height:330px;width:500px;background:#000;top:3px;left:3px;margin:0;padding:0;border:0;border-radius:1px;-moz-border-radius:1px;-webkit-border-radius:1px'
    ]
 };
}();
;$.event = function(){
   return {
      add: function(obj, type, fn,preventDefault){
         if (obj.addEventListener)
            obj.addEventListener( type, fn, false );
         else if (obj.attachEvent){
            obj["e"+type+fn] = fn;
            obj[type+fn] = function() { obj["e"+type+fn]( window.event ); };
            obj.attachEvent( "on"+type, obj[type+fn] );
         }
      },
      remove: function(obj, type, fn){
         if (obj.removeEventListener)
            obj.removeEventListener( type, fn, false );
         else if (obj.detachEvent){
            obj.detachEvent( "on"+type, obj[type+fn] );
            obj[type+fn] = null;
            obj["e"+type+fn] = null;
         };
      }
   };
}();
;$.dom = function(){
  return {
    build: function(nodename,attributes,content,evtArgs){
      if('string' == typeof nodename){
        try{
           if(arguments.length > 1){
              var node = document.createElement(nodename);
           }else{
              return document.createTextNode(nodename);
           }
        }catch(e){
           return document.createTextNode(nodename);
        };
      }else{
        var node = nodename;
      };
      if(attributes && ('string' == typeof attributes) ){
        content = [document.createTextNode(attributes)];
      }else if(attributes){
          for(var e in attributes){
               if(e == 'style'){
                  node.style.cssText = attributes[e];
               }else{
                  node.setAttribute(e,attributes[e]);  
               };
            };
      };
      if(content && ('string' == typeof content)){
        content = [document.createTextNode(content)];
      };
      if(content){
        if(content.splice){
          for(i=0;i<content.length;i++){
            try{
              node.appendChild(content[i]);
            }catch(e){
              throw("PRAIZED WIDGET ERROR"+e);
            };
          }
        }else{
          node.appendChild(content);
        };
      };
      if(evtArgs){
         for(var evt in evtArgs){
            $.event.add(node,evt,evtArgs[evt]);
         };

      };
      return node;
    },
    replaceNode: function(target,replacement){
      target.parentNode.insertBefore(replacement,target);
      $.dom.removeNode(target);
    },
    removeNode: function(node){
      node.parentNode.removeChild(node);
    },
    getElementsByClass: function(searchClass,node) {
       if(!document.getElementsByClassName){
          var classElements = new Array();
          if ( node == null ) node = document;
          var els = node.getElementsByTagName('*');
          var elsLen = els.length;
          var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
          for (i = 0, j = 0; i < elsLen; i++) {
             if ( pattern.test(els[i].className) ) {
                classElements[j] = els[i];
                j++;
             };
          };
       }else{
          // use native
          if ( node == null ) node = document;
          return node.getElementsByClassName(searchClass);
       }
       return classElements;
    },
    setOpacity: function(obj,value) {
    	obj.style.opacity = value/10;
    	obj.style.filter = 'alpha(opacity=' + value*10 + ')';
    }
  }
}();
;$.uriParams = function(){
   return {
      add: function(url, hash){
         var parts = url.split('?');
         var uri = parts[0];
         var query = {};
         if(parts[1]){
            query = $.uriParams.queryToSimpleJson(parts[1]);
         };
         for(var key in hash){
            query[key] = escape(hash[key]);
         };
         return [uri,$.uriParams.simpleJsonToQuery(query)].join('?');
      },
      queryToSimpleJson: function(qs){
         var pairs = qs.split(/\&/);
         var obj = {};
         for(i=0;i<pairs.length;i++){
            var keyValue = pairs[i].split(/\=/);
            var key = (unescape(keyValue[0]).replace(/[\[\]]/g,function(m){return (m == '[' ? '_' : '')}));
            if(key != 'callback'){
               obj[key] = keyValue[1].toString();
            };
         };
         return obj;
      },
      simpleJsonToQuery: function(json){
         var qs = [];
         for(var key in json){
            qs.push( [escape(key) , json[key]].join('=') );
         };
         return qs.join('&');
      }
   };
}();
;$.fn = function(){
   return {
      init: function(target){
         if(!window['PRZD_CURRENT_SHARE_BOX']){
            window['PRZD_CURRENT_SHARE_BOX'] = null;
         };
         var thisScriptTag = $.fn.findCurrentScriptTag(target);
         if(thisScriptTag){
            var replacementLink = $.dom.build( 'a',{href:$.fn.fetchScriptShareUrl(thisScriptTag),'class':'share-this action praized-action'},'share');
            $.dom.replaceNode(thisScriptTag,replacementLink);
            $.event.add( replacementLink, 'click', function(e){
               if(!replacementLink.box){
                  $.fn.setup(replacementLink);   
               }
               if (!e) var e = window.event
               e.cancelBubble = true;
               e.returnValue = false;
               if (e.stopPropagation) e.stopPropagation();
               if (e.preventDefault) e.preventDefault();
            });
         }else{
            return false;
         }
      },
      findCurrentScriptTag: function(target){
         /* Loop through all scripts to find the current scripts */
         var allScripts = document.getElementsByTagName('SCRIPT');
         for (var i = 0; i < allScripts.length; i++) {
            if (allScripts[i].src.match(target)) {
               /* Found! return */
               return allScripts[i];
            };
         };
         /* Bork! Bork! */
         return false;
      },
      fetchScriptShareUrl: function(scriptTag){
        var urlMatch = scriptTag.src.match(/[\?\&]shareurl\=[^\&]+/g);
        if(urlMatch){
           locale = scriptTag.src.match(/[\?\&]locale\=([^\?\&]+)/);
           locale = (locale && locale[1] ? locale[1] : 'en');
           return urlMatch[0].replace(/\?shareurl\=/,'')+'?locale='+locale;
        }else{
           throw "Bork!";
        };
      },
      setupHashVerify: function(){
         window['PRZD_SHARE_HASH_TIMEOUT'] = setTimeout(
            function(){
               var hashMatch = window.location.hash.match(/closePraizedSearchThis/);
               if(hashMatch){
                  window['PRZD_CURRENT_SHARE_BOX'].close();
                  window.location.hash = '#';
                  clearTimeout(window['PRZD_SHARE_HASH_TIMEOUT']);
                  return;
               };
               window['PRZD_SHARE_HASH_TIMEOUT'] = false;
               $.fn.setupHashVerify();
            },
         250);
      },
      setup: function(linkTag){
         var url = $.uriParams.add( linkTag.href, { nested:'1' } );
         var idHook = "praized-share-this-"+$.fn.idCounter();
         var _ = $.dom.build;
         var s1 = _('div',{'style':$.s.shadow[0]},'');
         var s2 = _('div',{'style':$.s.shadow[1]},'');
         var s3 = _('div',{'style':$.s.shadow[2]},'');
         $.dom.setOpacity(s1,1);
         $.dom.setOpacity(s2,2);
         $.dom.setOpacity(s3,3);
         linkTag.box = _( 'div', {'style':$.s.outterDiv, id:idHook},
            [
               _(
                  'div',
                  {'style':$.s.innerDiv },
                  [
                     _( 'button', { 'style':$.s.closeButton, 'type':'button' } , 'close' ,
                        {
                           'click': function(){ linkTag.box.close(); },
                           'mouseover': function(){ this.style.textDecoration = "underline"},
                           'mouseout': function(){ this.style.textDecoration = "none" }
                        } /* button event */
                     ),
                     _( 'iframe', {
                                    'style':$.s.iFrame,  width:500, height:330, border:0, frameborder:0,
                                    marginwith:0,marginheight:0,
                                     name:'frame-'+idHook, id:'frame-'+idHook, src: url,scrolling: 'no'
                                  },''
                     )/* end iframe */
                  ]
               ),
               s1,s2,s3

            ]
         );
         linkTag.box.open = function(){
            try{
               linkTag.box.style.top = (Math.max(document.body.scrollTop,document.documentElement.scrollTop)+50)+'px';
            }catch(e){
               linkTag.box.style.top = '10%';
            };
            clearTimeout(window['PRZD_SHARE_HASH_TIMEOUT']);
            $.fn.setupHashVerify();
            if(window['PRZD_CURRENT_SHARE_BOX'] != null){
               window['PRZD_CURRENT_SHARE_BOX'].close();
            };
            window['PRZD_CURRENT_SHARE_BOX'] = linkTag.box;
            linkTag.box.style.display = 'block';
         };
         linkTag.box.close = function(){
            linkTag.box.style.display = 'none';
            window['PRZD_CURRENT_SHARE_BOX'] = null;

         };
         document.body.appendChild(linkTag.box);
         $.event.add(linkTag, 'click', function(e){
               linkTag.box.open();
               if (!e) var e = window.event
               e.cancelBubble = true;
               e.returnValue = false;
               if (e.stopPropagation) e.stopPropagation();
               if (e.preventDefault) e.preventDefault();
      		   return false;
         });
         linkTag.box.open();
      },
      idCounter: function(){
         if ( !arguments.callee.count ) {
            arguments.callee.count = 0;
         };
         return arguments.callee.count++;
      }
   };
}();
;var protokol = /https/.test(window.location.href) ? 'https' : 'http'
;var scriptRE = new RegExp(protokol+"://static.praized.com/praized-com/javascripts/widgets/sludge/widget.js");
if (window.addEventListener) {
   window.addEventListener('load', function() { 
      if(window.location.hash.match(/closePraizedSearchThis/)){
         window.location.hash = '#';
      }
      $.fn.init(scriptRE); 
   }, false);
} else if (window.attachEvent) {
   window.attachEvent('onload', function() { 
      if(window.location.hash.match(/closePraizedSearchThis/)){
         window.location.hash = '#';
      }
      $.fn.init(scriptRE); 
   });
};
})();
