/*
 * multi domain で google analytics を使えるようにするための function
 * 利用方法: document の下のほうで
 * multiDomainAnalytics( [ "this.com", "that.com" ] );
 * と呼び出しをすればよい。引数はトラッキングを共有するドメインリスト
 * 色々なサイトで使われることが予想されるので jQuery や prototype には依存しない
 */
var mutliDomainAnalytics = (function(){
    var domains = [];
    function attachToA(){
        var atags = document.getElementsByTagName("a");
        for( var i = 0; i < atags.length; i++ ){
            var a = atags[i];
            var domain = parseDomain(a.href);
            if( isCrossDomain(domain)){
                var newOnclick = null;
                if( hasGaq() ) {
                    newOnclick = function(){ _gaq.push(['_link', this.href]); return false;}
                }else if( hasPageTracker() ){
                    newOnclick = function(){ pageTracker._link(this.href); return false;}
                }else{
                    return;
                }
                a.onclick = newOnclick;
            }
        }
    }
    
    function parseDomain(url){
        if( url.indexOf("http://") != 0 && url.indexOf("https://") != 0)
            return document.location.host;
        return url.split("/")[2];
    }

    function attachToForm(){
        var formTags = document.getElementsByTagName("form");
        for( var i = 0; i < formTags.length; i++ ){
            var form = formTags[i];
            var domain = parseDomain(form.action);
            if( isCrossDomain(domain)){
                if( hasGaq() ){
                    form.onsubmit = "_gaq.push(['_linkByPost', this]);";
                }else if( hasPageTracker() ){
                    form.onsubmit = "pageTracker._linkByPost(this);";
                }
            }
        }
    }

    function isCrossDomain( domain ){
        if( domain == document.location.host )
            return false;
        
        for( var i = 0; i < domains.length; i++ ){
            if(domain == domains[i]){
                return true;
            }
        }
        return false;
    }


    function attachEvent( _domains ){
        domains = _domains;
        attachToA();
        attachToForm();
    }
    
    function hasGaq(){
        return typeof _gaq != "undefined";
    }

    function hasPageTracker(){
        return typeof pageTracker != "undefined";
    }
    
    return attachEvent;
})();

