/* ld google ad */

// callback for google afc
function google_ad_request_done(google_ads){
    var place = ld_google_ad.place_afc;
    for(var i=0;i<place.length;i++) ld_google_ad.print_afc(place[i], google_ads);
}

// callback for google afc linkunits
function google_radlink_request_done(radlinks){
    var place = ld_google_ad.place_linkunits;
    for(var i=0;i<place.length;i++) ld_google_ad.print_linkunits(place[i], radlinks);
}

// core
var ld_google_ad = new function(){
    this.max_num_afc = 0;
    this.num_linkunits = 0;
    this.scanned = false;
    this.place_afc = [];
    this.place_linkunits = [];
    this.print_afc = function(place, afc){
        if(afc.length == 0) return;
        var buf = [];
        var f = this.formatter_afc[place.format];
        for(var i=0;i<place.num;i++){
            var item = afc.shift();
            if(item) buf.push(f(item));
        }
        place.element.innerHTML = buf.join("");
    }
    this.print_linkunits = function(place, linkunits){
        if(linkunits.length == 0) return;
        var buf = [];
        var f = this.formatter_linkunits[place.format];
        for(var i=0;i<place.num;i++){
            var linkunit = linkunits.shift();
            if(linkunit) buf.push(f(linkunit));
        }
        place.element.innerHTML = buf.join("");
    }
    this.scan_document = function(){
        for(var i=0; i<5; i++){
            var el = document.getElementById("google_afc_"+i);
            el && this.scan_element_afc(el);
        };
        for(var i=0; i<5; i++){
            var el = document.getElementById("google_linkunits_"+i);
            el && this.scan_element_linkunits(el);
        };
    }
    this.scan_element_afc = function(el){
        var cl = el.className;
        var m = cl.match(/\d{1,2}/);
        var num = m ? m[0] - 0 : 3;
        m = cl.match(/format_(\w*)/);
        var format = m ? m[1] : "normal";
        this.place_afc.push({
            element: el,
            num    : num,
            format : format
        });
        this.max_num_afc += num;
    }
    this.scan_element_linkunits = function(el){
        var cl = el.className;
        var m = cl.match(/\d{1,2}/);
        var num = m ? m[0] - 0 : 3;
        m = cl.match(/format_(\w*)/);
        var format = m ? m[1] : "normal";
        this.place_linkunits.push({
            element: el,
            num    : num,
            format : format
        });
        this.num_linkunits += num;
    }
    this.call = function(args){
        if (!this.scanned) {
            this.scan_document();
            this.scanned = true;
        }
        google_max_num_ads = '0';
        google_num_radlinks = '0';
        if (args) {
            if (args.afc) {
                google_max_num_ads = this.max_num_afc;
            }
            if (args.afc_linkunits) {
                google_num_radlinks = this.num_linkunits;
            }
            if (args.result_url) {
                this.result_url = args.result_url;
            }
        } else {
            google_max_num_ads = this.max_num_afc;
            google_num_radlinks = this.num_linkunits;
        }
        if (google_max_num_ads > 0 || google_num_radlinks > 0) {
            document.write(
                '<script type="text/javascript" src="',
                'http://pagead2.googlesyndication.com/pagead/show_ads.js',
                '"></scr', 'ipt>'
            );
        }
    }
    this.get_url_params = function(){
        var str = window.location.search;
        var params = new Object();
        if(typeof(str) == "undefined") return params;
        if(str.indexOf("?", 0) > -1) str = str.split("?")[1];
        var pairs = str.split("&");
        for(var i = 0; i < pairs.length; i++){
            var pair = pairs[i].split("=");
            if(pair[0] != ""){
                var val = pair[1].replace(/\+/g, " ");
                params[pair[0]] = decodeURIComponent(val);
            }
        }
        return params;
    }
};

// formatter for afc
ld_google_ad.formatter_afc = {
    normal: function(a){
        return [
            '<li class="ADBox">',
            '<a href="', a.url, '">',
            '<span class="ADTitle">',a.line1, '</span>',
            '<span class="ADURL">', a.visible_url, '</span>',
            '<span class="ADDescription">', a.line2 + a.line3, '</span>',
            '</a>',
            '</li>'
        ].join('');
    }
};

// formatter for linkunits
ld_google_ad.formatter_linkunits = {
    normal: function(a){
        return [
            '<li class="ADBox">',
            '<a href="', ld_google_ad.result_url,
            '?google_kw=', a.url_escaped_term,
            '&google_rt=', a.radlink_token,
            '&google_page_url=', encodeURIComponent(window.location),
            '">',
            '<span class="ADTitle">',a.term ,'</span>',
            '</a>',
            '</li>'
        ].join('');
    }
};

