/**
 * define SITEAD namespace
 */
if (typeof SD == 'undefined' || !SD) {
    var SD = {};
}
var getValue = function(name, url) {
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
    var regEx = new RegExp('[\\?&]' + name + '=([^&#]*)');
    return (!regEx.exec(url))?'':regEx.exec(url)[1];
}
var dScripts = document.getElementsByTagName('script');
var dThisScript = dScripts[dScripts.length - 1]; //  找出自己是哪一隻script
var sUrl = dThisScript.src.toString(); 
var charset = getValue('charset', sUrl);
var sCharset   = (charset != '') ? (charset) : 'utf-8';

/*
 * setup 共用變數
 */
SD.config = {
    pmhost: 'http://xml.tw.overture.com/d/search/p/standard/js/flat/tw/rlb/',
    cmhost: 'http://cmh.tw.yahoo.overture.com/js_flat_1_0/',
    pm: {partner: 'tw_syndication_sitetag_truemovie_pm', charset: sCharset},
    cm: {config: '20618435762', ctxtid: 'tw_syndication_sitetag_leisure', partner: 'tw_syndication_sitetag_truemovie_cm'},
    dr: {source: 'truemovie', pixel: '1208804'},
    hosthash: 'ddcfe690245f',
    stop: false,
    statichost: 'http://ad.sitemaji.com/',
    sitename: 'truemovie'
};

/**
 * provide some util for ad
 */
(function () {
    SD.util = SD.util || {};
    /**
      * Dom的存取方式
    */
    S = SD.util;
    SD.util.Dom = {
        _reClassNameCache: {},
        _getClassRegEx: function(className) {
            var re = S.Dom._reClassNameCache[className];
            if (!re) {
                re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
                S.Dom._reClassNameCache[className] = re;
            }
            return re;
        },
        getElementsByClassName: function(className, tag, root, apply) {
            tag = tag || '*';
            root = root || document;
            var nodes = [],
                elements = root.getElementsByTagName(tag),
                re = S.Dom._getClassRegEx(className);
            for (var i = 0, len = elements.length; i < len; i++) {
                if (re.test(elements[i].className)) {
                    nodes[nodes.length] = elements[i];
                    if (apply) {
                        apply.call(elements[i], elements[i]);
                    }
                }
            }
            return nodes;
        },
        getAncestorByTagName: function(node, sTag) {
            while (node = node.parentNode) {
                if (node.tagName.toLowerCase() == sTag) {
                    return node;
                }
            }
            return null;
        }
    };

    /**
      * Event的簡單方法
      */
    SD.util.Event = {
        getTarget: function(ev, resolveTextNode) {
            var t = ev.target || ev.srcElement;
            return this.resolveTextNode(t);
        },
        resolveTextNode: function(n) {
            try {
                if (n && 3 == n.nodeType) {
                    return n.parentNode;
                }
            } catch(e) {}
            return n;
        },
        preventDefault: function(ev) {
            if (ev.preventDefault) {
                ev.preventDefault();
            } else {
                ev.returnValue = false;
            }
        }
    };
}());
(function() {
    var $D = SD.util.Dom;
    /*
     * createEl class
     */
    SD.util.createEl = {
        dom: function(sTag, oAttr, sHtml) {
            var el = document.createElement(sTag);
            for (var i in oAttr) {
                el[i] = oAttr[i];
            }
            if (sHtml) {
                el.innerHTML = sHtml;
            }
            return el;
        },
        get: function(sTag, oAttr, sHtml) {
            var el = document.createElement(sTag);
            for (var i in oAttr) {
                el[i] = oAttr[i];
            }
            if (sHtml) {
                el.innerHTML = sHtml;
            }
            this.append(el);
            return el;
        },
        append: function(dNode) {
            var dHead = document.getElementsByTagName('head')[0] || document.body;
            dHead.appendChild(dNode);
        },
        remove: function(dNode) {
            setTimeout(function() {
                dNode.parentNode.removeChild(dNode);
                dNode = null;
            }, 0)
        },
        js: function(sUrl, sCharset) {
                var dNode = this.get('script', {
                                src: sUrl,
                                type: 'text/javascript'
                            }, null);
            if (sCharset) {
                dNode.setAttribute('charset', sCharset);
            }
            return dNode;
        },
        css: function(sUrl, sMedia) {
            if (!sMedia) {
                sMedia = 'all';
            }
            return this.get('link',{
                                    'href':sUrl,
                                    'rel':'stylesheet',
                                    'type':'text/css',
                                    'media':sMedia
                                    },
                            null, 'head');
        }
    };
}());

(function() {
    SD.tool = {
        getUrlArgument: function(name, url) {
            name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
            var regEx = new RegExp('[\\?&]' + name + '=([^&#]*)');
            return (!regEx.exec(url)) ? '' : regEx.exec(url)[1];
        },
        log: function(sUrl, aPool) {
            if (document.images) {
                (new Image()).src = sUrl + [
                ].join('&');
            }
        },
        debug: function(s) {
            if (window.console && window.console.firebug) {
                console.log(s);
            }
        }
    }
}());

(function() {
    SD.params = {
        initPm: function(max, sKw) {
            return [
                '?Partner=' + encodeURIComponent(SD.config.pm.partner),
                'Keywords=' + encodeURIComponent(sKw),
                'mkt=tw',
                'maxCount=' + max,
                'outputCharEnc=' + SD.config.pm.charset
            ].join('&');
        },
        initCm: function(max, ctxtCat) {
            return [
                '?config=' + SD.config.cm.config,
                'mkt=tw',
                'source=' + encodeURIComponent(SD.config.cm.partner),
                'maxCount=' + parseInt(max),
                'outputCharEnc=utf-8',
                'ctxtId=' + encodeURIComponent(ctxtCat),
                'ctxtUrl=' + encodeURIComponent(document.location)
            ].join('&')
        }
    };
}());

(function() {
    SD.manage = {
        queue : [],
        feed : null,
        stop: function() {
            SD.config.stop = true;
            SD.manage.execute();
        },
        execute : function(){
            if ((this.feed && SD.config.stop) || !this.feed ){
                if ((this.queue.length ) == 0) {
                    SD.ysm.genHtml();
                }
                if(!this.queue.length){
                    this.feed = null;
                    return false;
                }
                this.feed = this.queue.shift();
            } else {
                return;
            }
            var thisfeed = this.feed;
            setTimeout(function(){
                SD.ysm.overture(thisfeed);
            },5);
        }
    }
}());

(function() {
    var $D = SD.util.Dom,
        $E = SD.util.Event,
        dYsmJs,
        adlength = 0;
    var trim = function(s) {
        try {
            return s.replace(/^\s+|\s+$/g, "");
        } catch(e) {
            return s;
        }
    }
    var rtrim = function(str, chars) {
        chars = chars || "\\s";
        return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
    }
    var dAds = $D.getElementsByClassName('sitemajiad');
    var dDrs = $D.getElementsByClassName('sitemajidr');
    SD.ysm = {
        adHTML: [],
        arrange: function(zSr) {
            var aNew = [];
            for (var i = 6,j = zSr.length;i<j;i=i+6) {
                var aCol = {'desc' : zSr[i], 'tmp' : zSr[i+1], 'link' : zSr[i+2], 'title' : zSr[i+3], 'url' : zSr[i+4]};
                aNew.push(aCol);
            }
            return aNew;
        },
        structure: function(zSr) {
            var oResult = SD.ysm.arrange(zSr);
            if (sKw != '') {
                var saveReg = function(s) {
                    s=s.replace(/\\/g, '\\\\');
                    s=s.replace(/\//g, '\\\/');
                    s=s.replace(/\[/g, '\\\[');
                    s=s.replace(/\]/g, '\\\]');
                    s=s.replace(/\(/g, '\\\(');
                    s=s.replace(/\)/g, '\\\)');
                    s=s.replace(/\{/g, '\\\{');
                    s=s.replace(/\}/g, '\\\}');
                    s=s.replace(/\</g, '\\\<');
                    s=s.replace(/\>/g, '\\\>');
                    s=s.replace(/\|/g, '\\\|');
                    s=s.replace(/\*/g, '\\\*');
                    s=s.replace(/\?/g, '\\\?');
                    s=s.replace(/\+/g, '\\\+');
                    s=s.replace(/\^/g, '\\\^');
                    s=s.replace(/\$/g, '\\\$');
                    return s;
                };
                var oReg = new RegExp(saveReg(sKw),'ig');
                var replace = function(s){
                    s = s.replace(oReg,function(sReturn){return '<strong>'+sReturn+'</strong>';});
                    return s;
                };
            } else {
                var replace = function(s){
                    return s;
                };
            }
            if (oResult.length > 0) {
                for (i = 0, j = oResult.length; i < j; i++) {
                    if (!sKw) {
                        oResult[i].title = oResult[i].title.replace('遊戲', '<strong>遊戲</strong>'); 
                        oResult[i].title = oResult[i].title.replace('電玩', '<strong>電玩</strong>'); 
                        oResult[i].title = oResult[i].title.replace('交易', '<strong>交易</strong>'); 
                        oResult[i].title = oResult[i].title.replace('免費', '<strong>免費</strong>');
                        oResult[i].title = oResult[i].title.replace('線上', '<strong>線上</strong>');
                        oResult[i].title = oResult[i].title.replace('好玩', '<strong>好玩</strong>');
                        oResult[i].title = oResult[i].title.replace('麻將', '<strong>麻將</strong>');
                    }
                    SD.ysm.adHTML[adlength] = '<dl><dt><a target="_blank" href="'+ oResult[i].link  + '">' + replace(oResult[i].title) + '</a></dt><dd>' + oResult[i].desc + '</dd><address>' + oResult[i].url + '</address></dl>';
                    adlength++;
                }
            }
        }, 
        genHtml: function() {
            if (dAds[0]) {
                for (var i = 0, j = dAds.length; i < j; i++) {
                    var dAd = dAds[i];
                    var iValue = dAd.getAttribute('model');
                    var sHTML = '';
                    for (var x = 0, y = parseInt(iValue); x < y; x++) {
                        if (x == 0) {
                            sHTML = '<div class="bd">' + sHTML;
                        }
                        if (SD.ysm.adHTML.length > 0) {
                            sHTML = sHTML + SD.ysm.adHTML.shift();
                        }
                        if (x == iValue -1) {
                            sHTML = sHTML + '</div><div class="ft"><cite>Ads by Yahoo!</cite></div>';
                        }
                    }
                    dAd.innerHTML = sHTML;
                    var dDls = dAd.getElementsByTagName('dl');
                    for (var x = 0, y = dDls.length; x < y; x++) {
                        dDls[x].onclick = function(oEvent) {
                            oEvent = oEvent || window.event;
                            $E.preventDefault(oEvent);
                            var dLink = this.getElementsByTagName('a')[0];
                            window.open(dLink.href);
                        };
                    }
                }
            }
        },
        getData: function() {
            if (typeof(zSr) !== 'undefined') {
                SD.ysm.structure(zSr);
                SD.manage.stop();
                SD.util.createEl.remove(dYsmJs);
            } else {
                setTimeout(arguments.callee, 30);
            }
        },
        overture: function(feedUrl) {
            zSr = undefined;
            dYsmJs = SD.util.createEl.js(feedUrl);
            SD.ysm.getData();
        },
        drHTML: function(sourceid, width, height) {
            var sHTML = '<IFRAME FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=' + width + ' HEIGHT=' + height +' SRC="http://ad.yieldmanager.com/st?ad_type=iframe&ad_size=' + width + 'x' + height + '&entity=376336&site_code=' + sourceid +'&section_code=' + sourceid + '&ytwpartcode=' + sourceid + '"></IFRAME><IFRAME STYLE="border:0px;width:0px;height:0px;" SRC="http://ad.yieldmanager.com/pixel?id=' + SD.config.dr.pixel + '&t=2"></IFRAME>';
            return sHTML;
        },
        swfHTML: function(sAdUrl, width, height) {
            sHtml = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="' + width + '" height="' + height + '" id="sitemajisystem"><param name="movie" value="' + decodeURIComponent(sAdUrl) + '"><param name="allowScriptAccess" value="always"><embed src="' + decodeURIComponent(sAdUrl) + '" width="' + width + '" height="' + height + '" allowscriptaccess="always"></embed></object>';
            return sHtml;
        },
        getSitemajiad: function(oData) {
            for (var x = 0, y = dDrs.length; x < y; x++) {
                var adType = '',
                    sHtml = '';  
                var dDr = dDrs[x];
                var iValue = dDr.getAttribute('model') ? dDr.getAttribute('model') : '300x250';
                sSize = 's' + iValue;
                var aSize = iValue.split('x');
                var sWidth = aSize[0] ? aSize[0] : '300';
                var sHeight = aSize[1] ? aSize[1] : '250';
                if (trim(dDr.innerHTML) == '') {
                    if (oData[sSize].ad_size == iValue) {
                        if (oData[sSize].ad_list[0].ad_type !== '') {
                            adType = oData[sSize].ad_list[0].ad_type;
                            if (adType == 'img') {
                                sHtml = '<a href="' + decodeURIComponent(oData[sSize].ad_list[0].ad_url) + '" target="_blank"><img style="margin:0 auto;display:block;width:' + sWidth + 'px;height:' + sHeight + 'px;" src="' + decodeURIComponent(oData[sSize].ad_list[0].ad_img) + '"></a>';
                            } else {
                                sHtml = SD.ysm.swfHTML(decodeURIComponent(oData[sSize].ad_list[0].ad_img), sWidth, sHeight);
                            }
                            dDr.innerHTML = sHtml;
                            oData[sSize].ad_list.shift();
                        } else {
                            dDr.innerHTML = SD.ysm.drHTML(SD.config.dr.source, sWidth, sHeight);
                        }
                    }
                }
            }
        },
        percent: function(percentage) {
            var iRandom = Math.floor(Math.random()*101);
            var aAdArea = [];
            var aAdMap = {};
            aAdMap['300x250'] = 1;
            aAdMap['728x90'] = 2;
            aAdMap['300x100'] = 3;
            aAdMap['240x400'] = 4;
            aAdMap['120x120'] = 5;
            aAdMap['160x600'] = 6;
            aAdMap['425x300'] = 7;
            aAdMap['425x600'] = 8;
            aAdMap['234x60'] = 9;
            aAdMap['120x600'] = 10;
            var sHtml = '';
            var oTmp = {};
            if (iRandom < percentage) { 
                var aAdArea = [];
                var sQuery = '';
                for (var x = 0, y = dDrs.length; x < y; x++) {
                    var dDr = dDrs[x];
                    var iValue = dDr.getAttribute('model') ? dDr.getAttribute('model') : '300x250';
                    oTmp[aAdMap[iValue]] = (oTmp[aAdMap[iValue]] == undefined) ? 1 : oTmp[aAdMap[iValue]] + 1;
                }
                for (var key in oTmp) {
                    sQuery = sQuery + key + 'x' + oTmp[key] + ',';
                }
                sQuery = rtrim(sQuery, ',');
                var sUrl = 'http://rd.sitemaji.com/ask.php?size=' + sQuery + '&hosthash=' + SD.config.hosthash + '&callback=SD.ysm.getSitemajiad';
                SD.util.createEl.js(sUrl);
            } else {
                for (var x = 0, y = dDrs.length; x < y; x++) {
                    var dDr = dDrs[x];
                    if (trim(dDr.innerHTML) == '') {
                        var iValue = dDr.getAttribute('model') ? dDr.getAttribute('model') : '300x250';
                        var aSize = iValue.split('x');
                        var sWidth = aSize[0] ? aSize[0] : '300';
                        var sHeight = aSize[1] ? aSize[1] : '250';
                        /*
                        if (sWidth == '728') {
                            if (iRandom < percentage) {
                                sHtml = SD.ysm.getSitemajiad(); 
                            } else {
                                sHtml = SD.ysm.drHTML(SD.config.dr.source, sWidth, sHeight)
                            }
                        } else {
                            sHtml = SD.ysm.drHTML(SD.config.dr.source, sWidth, sHeight)
                        }
                        */
                        dDr.innerHTML = SD.ysm.drHTML(SD.config.dr.source, sWidth, sHeight);
                    }
                }
            }
        },
        drgen: function() {
            if (dDrs[0]) {
                var sUrl = 'http://ad.sitemaji.com/adpercent/sitemajipercent';  
                SD.util.createEl.js(sUrl);
            } 
        }
    }
}());

(function() {
    var $D = SD.util.Dom,
        $E = SD.util.Event;
    var dAds = $D.getElementsByClassName('sitemajiad');
    var dDrs = $D.getElementsByClassName('sitemajidr');
    var adTotal = 1;
    if (dAds[0]) { 
        for (var i = 0, j = dAds.length; i < j; i++) {
            var dAd = dAds[i];
            var iValue = parseInt(dAd.getAttribute('model'));
            adTotal = adTotal + iValue;
        }
        sKw = '';
        sKw = SD.tool.getUrlArgument('p', document.referrer);
        if (!sKw.length) {
            sKw = SD.tool.getUrlArgument('q', document.referrer);
        }
        sKw = decodeURIComponent(sKw);
        if (sKw != '') {
            SD.manage.queue = [SD.config.pmhost + SD.params.initPm(adTotal, sKw), SD.config.cmhost + SD.params.initCm(adTotal, SD.config.cm.ctxtid)];
        } else {
            SD.manage.queue = [SD.config.cmhost + SD.params.initCm(adTotal, SD.config.cm.ctxtid)];
        }
        SD.manage.execute();
        SD.util.createEl.css(SD.config.statichost + SD.config.sitename + '.css', 'screen');
    }
    if (dDrs[0]) {
        SD.ysm.drgen();
    }
})();

