// CM.Custom
CM.Custom = function(symbolName) {
    // call CM.Core's constructor.
    CM.Core.call(this, symbolName);
    // initiarize property.
    var setting = CM.Setting || {};
    this.ctxtUrl      = setting.ctxtUrl;
    this.ctxtKeywords = setting.ctxtKeywords;
    this.ctxtId       = setting.ctxtId;
    this.adsMaxA      = setting.adsMaxA;
    this.adsMaxB      = setting.adsMaxB;
    this.adsMaxC      = setting.adsMaxC;
    this.typeA        = setting.typeA;
    this.typeB        = setting.typeB;
    this.typeC        = setting.typeC;
    this.srcCodec     = {'utf8'      : 'UTF-8',
                         'euc-jp'    : 'EUC-JP',
                         'shiftjis'  : 'Shift_JIS'}[this.codec];
    this.maxAdCount   = 0;
    if (this.typeA) {this.maxAdCount += this.adsMaxA;}
    if (this.typeB) {this.maxAdCount += this.adsMaxB;}
    if (this.typeC) {this.maxAdCount += this.adsMaxC;}
};
// inherit CM.Core
CM.Custom.prototype = new CM.Core();
CM.Custom.prototype.constructor = CM.Custom;
CM.Custom.prototype.getAdMaxCount = function() {
    return this.maxAdCount;
};
CM.Custom.prototype.parse_xml = function(xml){
	var adDatas = ['','','','','',''];
	if (xml != null && xml.length > 0) {
        var count = 6;
        if (window.ActiveXObject) {
            var tmp = new ActiveXObject("Microsoft.XMLDOM"); 
            tmp.async = false; 
            tmp.loadXML(xml);
            xml = tmp;
        }
        j$(xml).find("Listing").each(
        	function(){
			  adDatas[count++] = j$(this).attr("description");
			  adDatas[count++] = '';
			  adDatas[count++] = j$(this).find("ClickUrl").text();
			  adDatas[count++] = j$(this).attr("title");
			  adDatas[count++] = j$(this).attr("siteHost");
			  adDatas[count++] = '';
			  });
		CM.Yaplog.showAds(adDatas);
    }else{
    	CM.Yaplog.loadAdDataTimeOut();
    }
};
CM.Custom.prototype.showAds = function(adData) {
    // skip dummy data.
    adData = adData.slice(6)
    // concat filler data.
    adDataWithFiller = adData.concat(CM.Setting.filler);
    this.showAdsCustom(adDataWithFiller);
};
CM.Custom.prototype.loadAdDataTimeOut = function() {
    this.loadAdDataTimeOutCustom();
};
// custom methods
CM.Custom.prototype.showAdsCustom = function(adData) {
    // show ads TypeA.
    var showAdsTypeA = function(adDataA){
        var endIndex = adDataA.length;
        if (endIndex == 0) {return}
        var i = 0, ads = [];
        while (i < endIndex) {
            var descr = adDataA[i++];
            var unused1 = adDataA[i++];
            var clickURL = adDataA[i++];
            var title = adDataA[i++];
            var sitehost = adDataA[i++];
            var unused2  = adDataA[i++];
            ads.push("<p class='mid_ad_box2' style='background:#FDFDE0;line-height:1.6;margin:0;padding:0;'><a href='"+clickURL+"' target='_blank' style='display:block;padding:3px 12px 9px 12px;text-decoration:none;'><span class='mid_ad_ttl2' style='color:#3366FF;font-size:14px;font-weight:bold;'>"+title+"</span>&nbsp;&nbsp;<span class='mid_ad_url2' style='color:#FF3D8B;font-size:10px;font-weight:normal;'>"+sitehost+"</span><br>" +
					 "<span class='mid_ad_txt2' style='color:#666666;font-size:12px;font-weight:normal;'>"+descr+"</span></a></p>");
        }
        if (ads.length > 0) {
            var containerA = document.getElementById('grokAdContainerA');
            if (containerA) {
                //containerA.style.backgroundColor = '#ffffff';
                containerA.innerHTML = "<div class='mid_ad_boxaid2' style='overflow:hidden;'><div class='mid_ad_pr2' style='background:#FDFDE0;color:#666666;font-size:10px;letter-spacing:1.2em;padding-top:9px;text-indent:12px;'>[スポンサーサイト]</div>" + ads.join('')+"</div>";
                containerA.style.display = 'block';
                containerA.style.textAlign = 'left';
            }
        }
    };
    // show ads TypeB.
    var showAdsTypeB = function(adDataB){
        var endIndex = adDataB.length;
        if (endIndex == 0) {return}
        var i = 0, ads = [];
        while (i < endIndex) {
            var descr = adDataB[i++];
            var unused1 = adDataB[i++];
            var clickURL = adDataB[i++];
            var title = adDataB[i++];
            var sitehost = adDataB[i++];
            var unused2  = adDataB[i++];
            
			ads.push("<p class='mid_ad_box' style='background:#FDFDE0;line-height:1.6;margin:0;padding:0;'><a href='"+pointUrl+encodeURL(clickURL)+"' target='_blank' style='display:block;padding:3px 12px 9px 12px;text-decoration:none;'><span class='mid_ad_ttl' style='color:#3366FF;font-size:14px;font-weight:bold;'>"+title+"</span>&nbsp;&nbsp;<span class='mid_ad_url' style='color:#FF3D8B;font-size:10px;font-weight:normal;'>"+sitehost+"</span><br>"+
					 "<span class='mid_ad_txt' style='color:#666666;font-size:12px;font-weight:normal;'>"+descr+"</span></a></p>");
        }
        if (ads.length > 0) {
            var containerB = document.getElementById('grokAdContainerB');
            if (containerB) {
                //containerB.style.backgroundColor = '#ffffff';
                containerB.innerHTML = "<form id='adSubmit' action='' method='post' target='_blank'>"+
								"<input type='hidden' id='id' name='id' value=''/>" +
								"<input type='hidden' id='url' name='url' value=''/>" +
								"</form>" +
								"<div class='mid_ad_boxaid' style='overflow:hidden;'><div class='mid_ad_pr' style='background:#FDFDE0;color:#666666;font-size:10px;font-weight:bold;letter-spacing:1.2em;padding-top:9px;text-indent:12px;'>[スポンサーサイト]</div>" + ads.join('') + "</div>";
                containerB.style.display = 'block';
                containerB.style.textAlign = 'left';
            }
        }
    };
    // show ads TypeC.
    var showAdsTypeC = function(adDataC){
        var endIndex = adDataC.length;
        if (endIndex == 0) {return}
        var i = 0, ads = [];
        
        var htmlStr = "";
		htmlStr += "<div class='side_text'>";

		htmlStr += "<div class='side_feed' style='line-height:1.6;margin-bottom:6px;'>";
		htmlStr += "<div class='side_feed_off' onmouseover=\"this.className='side_feed_on'\" onmouseout=\"this.className='side_feed_off'\" onclick=\"window.open('"+adDataC[2]+"');return false;\" style=\"cursor:pointer;padding:2px;\">";
		htmlStr += "	<div class='side_feed_ttl'><a href='"+adDataC[2]+"' target='_blank' style='font-size:12px;font-weight:bold;text-decoration:underline;'>"+adDataC[3]+"</a></div>";
		htmlStr += "	<div class='side_feed_txt' style='font-size:10px;font-weight:normal;text-decoration:none;'>"+adDataC[0]+"</div>";
		if(adDataC[4].length<19){
			htmlStr += "	<div class='side_feed_url' style='font-size:10px;font-weight:normal;text-align:right;text-decoration:none;'><a href='"+adDataC[2]+"' target='_blank'>"+adDataC[4]+"</a></div>";
		}
		htmlStr += "</div>";
		htmlStr += "</div>";
		htmlStr += "<div class='side_feed' style='line-height:1.6;margin-bottom:6px;'>";
		htmlStr += "<div class='side_feed_off' onmouseover=\"this.className='side_feed_on'\" onmouseout=\"this.className='side_feed_off'\" onclick=\"window.open('"+adDataC[8]+"');return false;\" style=\"cursor:pointer;padding:2px;\">";
		htmlStr += "	<div class='side_feed_ttl'><a href='"+adDataC[8]+"' target='_blank' style='font-size:12px;font-weight:bold;text-decoration:underline;'>"+adDataC[9]+"</a></div>";
		htmlStr += "	<div class='side_feed_txt' style='font-size:10px;font-weight:normal;text-decoration:none;'>"+adDataC[6]+"</div>";
		if(adDataC[10].length<19){
			htmlStr += "	<div class='side_feed_url' style='font-size:10px;font-weight:normal;text-align:right;text-decoration:none;'><a href='"+adDataC[8]+"' target='_blank'>"+adDataC[10]+"</a></div>";
		}
		htmlStr += "</div>";
		htmlStr += "</div>";

		htmlStr += "</div>";

        if (htmlStr.length > 0) {
            var containerC = document.getElementById('grokAdContainerC');
            if (containerC) {
                //containerC.style.backgroundColor = '#ffffff';
                containerC.innerHTML = htmlStr;
                containerC.style.display = 'block';
            }
        }
    };

    // divide adsData, and show ads.
    var start = 0, end = 0;
    // typeA
    if (this.typeA) {
        end = Math.min(adData.length, (start + (this.adsMaxA * 6)));
        showAdsTypeA(adData.slice(start, end));
        start = end;
    }
    // typeB
    if (this.typeB) {
	end = Math.min(adData.length, (start + (this.adsMaxB * 6)));
        showAdsTypeB(adData.slice(start, end));
        start = end;
    }
    // typeC
    if (this.typeC) {
	end = Math.min(adData.length, (start + (this.adsMaxC * 6)));
        showAdsTypeC(adData.slice(start, end));
    }
};
CM.Custom.prototype.loadAdDataTimeOutCustom = function() {
    // show filler ads.
    this.showAdsCustom(CM.Setting.filler);
};
// make instance.
CM.Yaplog = new CM.Custom("CM.Yaplog");
// add event listener, 'window on load'.
CM.Util.addListener(window, "load", function() {
  CM.Yaplog.invoke();
});