/****************************************************************************************

AskApache.info

This work is licensed under the Creative Commons Attribution 3.0 United States License.
To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/ 
or send a letter to Creative Commons, 171 Second Street, Suite 300, 
San Francisco, California, 94105, USA.

*****************************************************************************************/



addLoadListener(init_postload);
addLoadListener(AlexaSiteStatsWidget);








//------------------------------------
// gi
function gi(eleName){
    if(document.getElementById&&document.getElementById(eleName)) return document.getElementById(eleName); 
    else if(document.all&&document.all(eleName)) return document.all(eleName);
    else if(document.layers&&document.layers[eleName])return document.layers[eleName];
    else return false;
}//====================


//------------------------------------
// addLoadListener
function addLoadListener(fn){
    if(typeof window.addEventListener !='undefined')    window.addEventListener('load',fn,false);
    else if(typeof document.addEventListener !='undefined')    document.addEventListener('load',fn,false);
    else if(typeof window.attachEvent !='undefined')    window.attachEvent('onload',fn);
    else{
        var oldfn=window.onload
        if(typeof window.onload !='function')    window.onload=fn;
        else    window.onload=function(){oldfn();fn();}
    }
}//====================



//------------------------------------
// addEvent
function addEvent(obj,type,fn){
    try{
        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]);
        }
    } catch(e){/*alert(e+'\naddevent problem\nobj:'+fn)*/}
}//====================


//------------------------------------
// removeEvent
function removeEvent(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;
    }
}//====================













function AlexaSiteStatsWidget(){
    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var jsUrlRegex = /http:\/\/xslt.alexa.com\/site_stats\/js\/(.)\/(.).*(?:[\?&]|&amp;)url=([^\?&]*)/i;
    var jsAmznIdRegex = /http:\/\/xslt.alexa.com\/site_stats\/js\/.*[\?&]amzn_id=([^\?&]*)/i;
    var imageSrcPrefix = "http://xsltcache.alexa.com/site_stats/gif/";
    var detailURLPrefix = "http://www.alexa.com/data/details/main";

        var thisScript = gi('alexR');
        var scriptSource = 'http://xslt.alexa.com/site_stats/js/s/a?url=www.askapache.com';
            var urlMatched = scriptSource.match(jsUrlRegex);
            if(urlMatched != null){
                var associatedMatched = scriptSource.match(jsAmznIdRegex);
                var base64EncodedURL = encode64(urlMatched[3]);
                var imageURL = imageSrcPrefix + urlMatched[1] + "/" + urlMatched[2] + "/" +
                           base64EncodedURL + "/s.gif";
                var img = new Image();
                var fullURL = getFullURL(urlMatched[3]);
                img.src = imageURL;
                img.setAttribute('border', '0');
                if(urlMatched[1] == "s")
                    img.alt = "Alexa Certified Traffic Ranking for " + urlMatched[3];
                else
                    img.alt = "Alexa Certified Site Stats for " + urlMatched[3];
                var newLink=document.createElement('a');
                var detailURL = detailURLPrefix;
                if(associatedMatched != null)
                    detailURL = detailURL + "?amzn_id=" + associatedMatched[1] + "&url=" + fullURL;
                else
                    detailURL = detailURL + "?url=" + fullURL;
                newLink.setAttribute('href', detailURL);
                newLink.className='AlexaSiteStatsWidget';
                newLink.appendChild(img);
                thisScript.parentNode.insertBefore(newLink,thisScript);
            }
   
    function getFullURL(inputURL){
        if(inputURL.substring(0,5).toLowerCase() != "http:")
            return "http://" + inputURL;
        else return inputURL; 
    }

    function encode64(input) {
       var output = "";
       var chr1, chr2, chr3;
       var enc1, enc2, enc3, enc4;
       var i = 0;

       do {
          chr1 = input.charCodeAt(i++);
          chr2 = input.charCodeAt(i++);
          chr3 = input.charCodeAt(i++);

          enc1 = chr1 >> 2;
          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
          enc4 = chr3 & 63;

          if (isNaN(chr2)) {
             enc3 = enc4 = 64;
          } else if (isNaN(chr3)) {
             enc4 = 64;
          }

          output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
          keyStr.charAt(enc3) + keyStr.charAt(enc4);
       } while (i < input.length);
       
       return output;
    }
}