/*
 Original Author: Robert Birkline
 COPR 1985-2009 Hearst Newspapers Partnership, L.P. All rights reserved.
 */
var adwiz_errors = ''; //this is a container to hold errors
function CHRON_get_param(){
    var CHRON_gp = window.location.href;
    var CHRON_gp_list = CHRON_gp.split(/\?/);
    if (CHRON_gp_list.length > 1) {
        CHRON_gp_list[1] = CHRON_gp_list[1].replace(/\&/g, ',');
        CHRON_gp_list[1] = CHRON_gp_list[1].replace(/\=/g, '~');
        return CHRON_gp_list[1];
    }
    return '';
}

function CHRON_get_param_array(){
    var CHRON_gpa = window.location.href;
    var CHRON_gpa_list = CHRON_gpa.split(/\?/);
    var CHRON_gpa_list_final = Array();
    if (CHRON_gpa_list[1]) {
        var CHRON_gpa_list_sp = CHRON_gpa_list[1].split(/\&/);
        for (i = 0; i < CHRON_gpa_list_sp.length; i++) {
            try {
                if (CHRON_gpa_list_sp[i].search(/=/) !== -1) {
                    CHRON_tmp = CHRON_gpa_list_sp[i].split(/=/);
                    CHRON_gpa_list_final[CHRON_tmp[0]] = CHRON_tmp[1];
                }
                else {
                    CHRON_gpa_list_final[CHRON_gpa_list_sp[i]] = true;
                }
            } 
            catch (e) {
                alert(e);
            }
        }
    }
    return CHRON_gpa_list_final;
}

function CHRON_tag_normal(x){
    x = x.replace(/\s+/g, '+');
    x = x.replace(/\/\//g, '/');
    x = x.replace(/\/$/, '');
    return x;
}

function CHRON_reset_query_string(){
    CHRON_query = '';
    adwiz.query = '';
    return true;
}

function CHRON_add_to_query_string(x){
    CHRON_query += x + '&';
    adwiz.query += x + '&';
    return true;
}

function CHRON_add_adwiz_tag(atype, avalue, aname){
    var adwiztag = document.createElement('adwiz');
    adwiztag.setAttribute('name', aname);
    adwiztag.setAttribute('value', avalue);
    adwiztag.setAttribute('type', atype);
    document.getElementsByTagName('head')[0].appendChild(adwiztag);
}

/* Need to use the XPATH instead of this broken-down GEBTN thing
 * this way we can do something like:
 * <meta name="adwiz" content="whatever=whatever" />
 * metas = document.evaluate( "//meta[@name='adwiz']",
 document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
 * for(var i=0;i<metas.snapshotLength;i++){meta=metas.snapshotItem(i);}
 */
function CHRON_get_adwiz_tags(){
    //get the tags information
    var CHRON_gat = document.getElementsByTagName('adwiz');
    var CHRON_gat_length = CHRON_gat.length;
    //set the sitepage array up, this allows ordering of content.
    var CHRON_sitepage_array = Array();
    CHRON_sitepage ? CHRON_sitepage_array[0] = CHRON_sitepage : CHRON_sitepage_array[0] = '';
    CHRON_sitepage = '';
    for (i = 0; i < CHRON_gat_length; i++) {
        var tag_name = CHRON_gat[i].getAttribute('name');
        var tag_type = CHRON_gat[i].getAttribute('type');
        var tag_value = CHRON_gat[i].getAttribute('value');
        var tag_order = CHRON_gat[i].getAttribute('order');
        
        switch (tag_type) {
            case 'keyname':
                if (tag_name && tag_value) {
                    adwiz.keyname[tag_name] = tag_value;
                    CHRON_add_to_query_string(tag_name + '=' + tag_value);
                }
                break;
            case 'keyword':
                if (tag_value) {
                    adwiz.keyword.push(tag_value);
                    CHRON_add_to_query_string(tag_value);
                }
                break;
            case 'rkeyname':
                if (tag_name && tag_value) {
                    adwiz.keyname[tag_value] = tag_name;
                    CHRON_add_to_query_string(tag_value + '=' + tag_name);
                }
                break;
            case 'sitepage':
                if (tag_value && tag_order) {
                    CHRON_sitepage_array[tag_order] = tag_value;
                }
                break;
            case 'listpos':
                if (tag_value) {
                    adwiz.listpos = tag_value;
                    CHRON_listpos = tag_value;
                }
                break;
            default:
                break;
        }
    }
    //clean up the query tag
    CHRON_clean_query_string();
    
    CHRON_sitepage_append = '';
    var CHRON_lp = 1;
    //CHRON_sitepage == set order to sitepage variable
    for (i = 0; i < CHRON_sitepage_array.length; i++) {
        try {
            if (i < CHRON_lp && CHRON_sitepage_array[i] != '') {
                CHRON_lp = i;
            }
            if (CHRON_sitepage_array[i]) {
                CHRON_sitepage_append += CHRON_sitepage_array[i] + '/';
                
            }
            
        } 
        catch (e) {
        }
    }
    
    if (CHRON_lp == 0) {
        CHRON_sitepage = CHRON_tag_normal(CHRON_sitepage_append);
        adwiz.sitepage = CHRON_sitepage;
        CHRON_sitepage_append = ''; //destroy it
    }
    else {
        CHRON_sitepage_append = '/' + CHRON_sitepage_append;
        CHRON_sitepage_append = CHRON_tag_normal(CHRON_sitepage_append);
    }
    
}


function CHRON_clean_query_string(){
    CHRON_query = CHRON_query.replace(/\&$/, '');
    adwiz.query = adwiz.query.replace(/\&$/, '');
    
    CHRON_query = CHRON_tag_normal(CHRON_query);
    adwiz.query = CHRON_tag_normal(adwiz.query);
}

function CHRON_set_type_adwiz_tags(xvalue, xname){
    //get the tags information
    //xname is an option value and used to set tags with specific name
    var tagname;
    xname ? tagname = xname : tagname = '';
    var CHRON_stat = document.getElementsByTagName('adwiz');
    var CHRON_stat_length = CHRON_stat.length;
    if (tagname == '') {
        //set all the tags the same
        for (i = 0; i < CHRON_stat_length; i++) {
            CHRON_stat[i].setAttribute('type', xvalue);
        }
    }
    else {
        for (i = 0; i < CHRON_stat_length; i++) {
            if (CHRON_stat[i].getAttribute('name') == tagname) {
                CHRON_stat[i].setAttribute('type', xvalue);
            }
        }
        
    }
}

function CHRON_adwiz_tag_name_change(tag2change, newname){
    //find the tag and change the name of the tag
    var CHRON_stat = document.getElementsByTagName('adwiz');
    var CHRON_stat_length = CHRON_stat.length;
    for (i = 0; i < CHRON_stat_length; i++) {
        if (tag2change == CHRON_stat[i].getAttribute('name')) {
            CHRON_stat[i].setAttribute('name', newname);
        }
    }
}

function CHRON_clone_adwiz_tags(tagtype, tagname){
    try {
        //get the tags information
        //xname is an option value and used to set tags with specific name
        var xname;
        var adwiz_errors;
        tagname ? xname = tagname : xname = '';
        var CHRON_clone = document.getElementsByTagName('adwiz');
        var CHRON_clone_length = CHRON_clone.length;
        var CHRON_max = 1000;
        if (xname == '') {
            //clone set all the tags the same
            for (i = 0; (i < CHRON_clone_length || i > CHRON_max); i++) {
                try {
                    var CHRON_cloned_node = CHRON_clone[i].cloneNode(true);
                    CHRON_cloned_node.setAttribute('type', tagtype);
                    CHRON_clone[i].parentNode.appendChild(CHRON_cloned_node);
                    delete (CHRON_cloned_node);
                } 
                catch (e) {
                    adwiz_errors += 'CHRON_clone_adwiz_tags --> ' + e + '\n';
                }
                
            }
        }
        else {
            for (i = 0; i < CHRON_clone_length; i++) {
                if (CHRON_clone[i].getAttribute('name') == tagname) {
                    var CHRON_cloned_node = CHRON_clone[i].cloneNode(true);
                    CHRON_cloned_node.setAttribute('type', tagtype);
                    CHRON_clone[i].parentNode.appendChild(CHRON_cloned_node);
                    delete (CHRON_cloned_node);
                }
            }
        }
        delete (CHRON_clone);
        delete (CHRON_clone_length); // clean up a little
    } 
    catch (e) {
    }
}

function CHRON_make_adwiz_tags_readable(){
    //go thru the tags and set the name or value to something readable
    var CHRON_stat = document.getElementsByTagName('adwiz');
    var CHRON_stat_length = CHRON_stat.length;
    for (i = 0; i < CHRON_stat_length; i++) {
        try {
            CHRON_tmp = CHRON_stat[i].getAttribute('name');
            CHRON_stat[i].setAttribute('name', CHRON_adwiz_lookup[CHRON_tmp].name);
        } 
        catch (e) {
        }
        try {
            CHRON_tmp = CHRON_stat[i].getAttribute('value');
            CHRON_stat[i].setAttribute('value', CHRON_adwiz_lookup[CHRON_tmp].name);
        } 
        catch (e) {
        }
    }
}

function CHRON_adCode(x){
    return document.getElementById('CHRON_ADPLACEMENT_' + x).innerHTML;
}

function CHRON_json(x){
    try {
        var c = document.getElementById('CHRON_ADPLACEMENT_' + x);
        //check for json div
        var check1 = c.getElementsByTagName('div');
        var json_data = '';
        for (var i in check1) {
            try {
                if (check1[i].getAttribute('type') == 'json') {
                    json_data = check1[i].innerHTML;
                }
            } 
            catch (e) {
            }
        }
        //deliver the data
        if (json_data != '') {
            return eval('(' + json_data + ')');
        }
        return {};
    } 
    catch (e) {
    }
}

function CHRON_MJX_TAG(){
    adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}

function CHRON_adwiz_add_history(x){
    //ad history information to the call
    try {
        var chron_history_url = document.referrer;
        chron_history_url = chron_history_url.replace(/http:\/\//, '');
        var chron_history = chron_history_url.split(/\//);
        adwiz.referrer = chron_history_url;
        adwiz.referrer_domain = chron_history[0];
        CHRON_query += 'referrer_domain=' + chron_history[0] + '&referrer=' + chron_history_url + '&';
    } 
    catch (e) {
        adwiz_errors += 'history error\n';
    }
}


/* ADWIZ SERVING SECTION */
function CHRON_serve_adwiz(){
    // adWiz call to adwiz.mpl
    try {
        var CHRON_adwiz_url = CHRON_adwiz_src + '?url=' + CHRON_page + '&param=' + CHRON_param + '&mode=' + CHRON_adwiz_mode + '&version=' + OAS_version;
        document.write('<script id="ADWIZ_TAG" language="javascript" src="' + CHRON_adwiz_url + '"></script>');
    } 
    catch (e) {
        adwiz_errors += 'adwiz serve error\n';
    }
    adwiz.adwiz = document.getElementById('ADWIZ_TAG');
    
}

function CHRON_serve_reporter(sitepage, listpos, chron_url){
    // adWiz call to error reporting script
    try {
        document.write('<script id="CHRON_REPORTER" language="javascript" src="http://www.chron.com/apps/adWiz/adWizRecorder.mpl?sitepage=' + sitepage + '&listpos=' + listpos + '&url=' + chron_url + '"></script>');
    } 
    catch (e) {
        adwiz_errors += 'reporter error\n';
    }
}

function CHRON_serve_OAS_MJX(sitepage, listpos, query){
    // adWiz call to Call the MJX code
    try {
        var rn = CHRON_random_number();
        var OAS_MJX_CALL = OAS_url + 'adstream_mjx.ads/' + sitepage + '/1' + rn + '@' + listpos + '?' + query;
        document.write('<SCR' + 'IPT LANGUAGE="JavaScript1.1" ID="OAS_MJX_CALL" SRC="' + OAS_MJX_CALL + '"><\/SCRIPT>');
    } 
    catch (e) {
        adwiz_errors += 'MJX error\n';
    }
    adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}

function CHRON_serve_OAS_NX(sitepage, listpos, pos, query){
    //adWiz call to Call the OAS normal function for nx tags
    try {
        var OAS_target = '_top';
        document.write('<a href="' + OAS_url + 'click_nx.ads/' + sitepage + '/1' + rn + '@' + listpos + '!' + pos + '?' + query + '" target=' + OAS_target + '>');
        document.write('<img src="' + url + 'adstream_nx.ads/' + sitepage + '/1' + rn + '@' + listpos + '!' + pos + '?' + query + '" /></a>');
    } 
    catch (e) {
        adwiz_errors += 'NX error\n';
    }
}

/*  END ADWIZ SERVING SECTION */
function CHRON_random_number(){
    var rns = '1234567890';
    var rn = new String(Math.random());
    return (rn.substring(2, 11));
}


function detectAdwizSubDomain(){
    //this function will look at the detect the chron subdomain used
    var CHRON_detecthostname = window.location.hostname.split(/\./);
    var CHRON_subdomain = CHRON_detecthostname[0];
    var CHRON_domain = CHRON_detecthostname[1];
    var CHRON_toplevel = CHRON_detecthostname[2];
    
    if (CHRON_domain == 'chron') {
        switch (CHRON_subdomain) {
            case 'www':
            case 'images':
                return 'www.chron.com';
                break;
            case 'apps':
            case 'testakamai':
            case 'origin':
            case 'origin-www':
                return CHRON_subdomain + '.chron.com';
                break;
            default:
                return 'www.chron.com';
                break;
        }
    }
    else {
        return 'apps.chron.com';
    }
}

function CHRON_adwiz_sync_prototype(){
    var x = adwiz;
    x.sitepage = OAS_sitepage;
    x.listpos = OAS_listpos;
    x.query = OAS_query;
}



function CHRON_showad(x){
    try {
        var curdiv = document.getElementById('CHRON_ADPLACEMENT_' + x);
        curdiv.style.border = "2px solid red";
        var addiv = document.createElement('div');
        addiv.style.background = 'pink';
        addiv.style.zIndex = '9999';
        addiv.style.border = '2px solid black';
        addiv.onClick = "alert(adwiz.pos(" + x + "))";
        if (adwiz.pos(x).search(/iframe|\-flash/)) {
            //alert('flash/iframe detected');
            addiv.style.position = "absolute";
            addiv.style.inherit = 'no';
        }
        else {
            addiv.style.position = "relative";
        }
        
        addiv.innerHTML = 'Position: ' + x;
        curdiv.insertBefore(addiv, curdiv.firstChild);
        window.curdiv.focus();
    } 
    catch (e) {
    }
}

/* RELOAD AD FEATURE */
function CHRON_reload(){
    CHRON_destroy_OAS();
    /* recall OAS */
    CHRON_add_OAS_MJX();
    var the_list = adwiz.listpos.split(',');
    for (var i in the_list) {
        CHRON_reload_selected('Top');
    }
}

function CHRON_reload_selected(pos){
    var temp_write = document.write;
    var temp_container = '';
    document.write = function(x){
        temp_container += x;
    };
    OAS_AD(pos, 'no_tag');
    document.write = temp_write;
    var c_ad = document.getElementById('CHRON_ADPLACEMENT_' + pos);
    c_ad.style.display = 'none';
    c_ad.innerHTML = 'reloaded' + temp_container;
    c_ad.style.display = 'block';
    
}

function CHRON_destroy_OAS(){
    var OAS_CALL = document.getElementById('OAS_MJX_CALL');
    OAS_CALL.parentNode.removeChild(OAS_CALL);
}

function CHRON_update_sitepage(x){
    adwiz.sitepage = x;
    OAS_sitepage = x;
}

function CHRON_update_listpos(x){
    adwiz.listpos = x;
    OAS_listpos = x;
}

function CHRON_add_OAS_MJX(){
    // adWiz call to Call the MJX code
    var rn = CHRON_random_number();
    var OAS_MJX_CALL = OAS_url + 'adstream_mjx.ads/' + adwiz.sitepage + '/1' + rn + '@' + adwiz.listpos + '?' + adwiz.query;
    var ns = document.createElement('script');
    ns.id = 'OAS_MJX_CALL';
    ns.src = OAS_MJX_CALL;
    ns.type = 'text/javascript';
    
    /* append to the head */
    document.getElementsByTagName('head')[0].appendChild(ns);
    adwiz.MJX = document.getElementById('OAS_MJX_CALL');
}


/* END RELOAD AD FEATURE */

function CHRON_meta_info(){
    var m = document.getElementsByTagName('meta');
    
    for (var i in m) {
        var x = m[i]
        x.name ? x.name = x.name.toLowerCase() : x.name = 'noname';
        try {
            this[x.name] = x.content;
        } 
        catch (e) {
            alert(e)
        }
    }
    return this;
}

/* Ad tracking information */
function CHRON_increment_rm_tracker(){
    //increment the tracking cookie
    pageinfo.chron.richmedia.counter++;
    var awd = new Date();
    var awe = awd.toGMTString();
    awe = awe.replace(/\d{1,2}\:\d{1,2}\:\d{1,2}/, '23:59:59');
    document.cookie = 'rmt=' + pageinfo.chron.richmedia.counter + '; expires=' + awe + '; path=/';
    //set expire to end of day
}

function CHRON_get_rm_tracker(){
    //check the cookie for the tracking cookie
    var awc = document.cookie;
    var awa = awc.split(/;\s/);
    for (i = 0; i < awa.length; i++) {
        if (!awa[i].search(/rmt/)) {
            var rt = awa[i].replace(/rmt=/, '');
            pageinfo.chron.richmedia.counter = rt;
            return rt;
        }
    }
    return 0;
}

function CHRON_validate_tracker(){
    CHRON_get_rm_tracker();
    if (pageinfo.chron.richmedia.counter >= 3 || adwiz.param['NORM']) {
        CHRON_add_to_query_string('&NORM');
        CHRON_clean_query_string();
    }
}

/*------*/

//audit functions
window.onbeforeunload = chron_audit_ads;

function chron_audit_pos(pos){
    if (CHRON_audit_list == '') {
        CHRON_audit_list = OAS_listpos
    }
    var reg = new RegExp("\\b" + pos + "\\b");
    CHRON_audit_list = CHRON_audit_list.replace(reg, '');
}

function chron_audit_ads(){
    try {
        //  if (window.OAS_RICH) {
        if (CHRON_audit_list.match(/\w/)) {
            var loc = window.location.toString();
            chron_deadDrop('images/ads.gif?sitepage=' + OAS_sitepage + ';listpos=' + OAS_listpos + ';noref=' + CHRON_audit_list + ';loc=' + encodeURI(loc));
        }
        //  }
    } 
    catch (e) {
    }
}

function chron_deadDrop(src){
    try {
        var ifr = document.createElement('img');
        ifr.src = src;
        document.body.appendChild(ifr);
        ifr.style.visibility = 'hidden';
    } 
    catch (e) {
    }
    return null;
}

/* bright cove functions*/
function playAd(adXML, callback){
    var callarray = callback.split('|');
    callFlashInstance(callarray[0], "playAd", pageinfo.json('x90'));
}

/* special functions */
function CHRON_commons(){
    try {
        var filename = pageinfo.url.match(/.*\/(\w+\.\w+).*/);
        switch (filename[1]) {
            case 'persona.html':
                pageinfo.url = pageinfo.url + '/' + pageinfo.param.newspaperUserId;
                CHRON_page = pageinfo.url;
                break;
            default:
        }
    } 
    catch (e) {
    }
}

// chronicle control variables need by adWiz.mpl
/* Scoped globally */
var CHRON_page = window.location.hostname + window.location.pathname;

var CHRON_param = CHRON_get_param();
var CHRON_hostname = detectAdwizSubDomain();
CHRON_hostname = CHRON_hostname;
var CHRON_adwiz_src = 'http://' + CHRON_hostname + '/apps/adWiz/adWiz.mpl';
//special variables used by the adwiz html tags and other processing
var CHRON_query = '';
var CHRON_listpos = '';
var CHRON_sitepage = '';
var CHRON_sitepage_append = '';
var CHRON_audit_list = '';
try {
    var CHRON_adwiz_mode = adwiz_mode;
} 
catch (e) {
    var CHRON_adwiz_mode = 'production';
}
try {
    var CHRON_adwiz_serve = adwiz_serve;
} 
catch (e) {
    var CHRON_adwiz_serve = true;
}


/* Protype of the adwiz tag structure*/
var adwiz = {
    url: CHRON_page,
    keyname: new Array(), /* keyvalue pair */
    keyword: new Array(), /* arary of keywords */
    sitepage: '',
    listpos: '',
    query: '',
    pos: CHRON_adCode,
    json: CHRON_json,
    param: CHRON_get_param_array(),
    rn: CHRON_random_number,
    referrer: '',
    referrer_domain: '',
    reload: CHRON_reload,
    MJX: '',
    adwiz: '',
    show: CHRON_showad,
    readtags: CHRON_get_adwiz_tags,
    addtag: CHRON_add_adwiz_tag,
    meta: CHRON_meta_info(),
    position: function(pos){
        var temp_write = document.write;
        var temp_container = '';
        document.write = function(x){
            temp_container += x;
        };
        OAS_AD(pos, 'no_tag');
        document.write = temp_write;
        return temp_container;
    },
    exists: function(pos){
        var ad_code = this.position(pos);
        if (ad_code === '' || ad_code.search('/empty\.gif/') > -1) {
            return false;
        }
        else {
            return true;
        }
    },
    chron: {
        richmedia: {
            counter: 0,
            increment: CHRON_increment_rm_tracker
        },
        rx: {
            src: function(sitepage, listpos, query){
                return OAS_url + 'adstream_jx.ads/' + adwiz.sitepage + '/1' + adwiz.rn() + '@' + adwiz.listpos
            },
            serve: function(){
            }
        }
    },
    update: {
        listpos: CHRON_update_listpos,
        sitepage: CHRON_update_sitepage
    },
    yahoo: {
        context: {
            tier: '',
            tag: '',
            category: ''
        }
    }
};
/* prototype alias */
var pageinfo = adwiz;

// rbx: get and process all of the adwiz custom tags
CHRON_adwiz_add_history();
CHRON_get_adwiz_tags();
// rbx: added this function to serve commons pages differently
CHRON_commons();
// rbx: validate that the richmedia quota is not meet
CHRON_validate_tracker();
if (CHRON_adwiz_serve) {
    CHRON_serve_adwiz(); /* actually make the adwiz call */
}

