//Global Site and Zone definitions...	
var _site = ''; //global Dart Site for this page.	
var _zone = ''; //global Dart Zone for this page.	


//Setup...
var pageURL = document.location.toString();
var siteHost = document.location.host;

var ord = Math.random() * 10000000000000000;
var dcopt = 'dcopt=ist;';
Array.prototype.addItem = p_addNewItem;
Array.prototype.setPageSiteZone = p_setPageSiteAndZone;
var lookup = new Array();
var dartAds = new Array();
var adCnt = 0;
var __site;
var __zone;

//Utilities...
function PageQuery(q) {
    q = q.toLowerCase();
    if (q.length > 1) this.q = q.substring(1, q.length);
    else this.q = null;
    this.keyValuePairs = new Array();
    if (this.q) {
        if (this.q != null) {
            for (var i = 0; i < this.q.split("&").length; i++) { this.keyValuePairs[i] = this.q.split("&")[i]; }
        }
    }
    this.getKeyValuePairs = function() { return this.keyValuePairs; }
    this.getValue = function(s) {
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            s = s.replace(/ /gi, "%20");
            x = this.keyValuePairs[j].split("=")[0];
            x = x.replace(/ /gi, "%20");
            if (x == s)
                return this.keyValuePairs[j].split("=")[1];
        }
        return false;
    }
    this.getParameters = function() {
        var a = new Array(this.getLength());
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            a[j] = this.keyValuePairs[j].split("=")[0];
        }
        return a;
    }
    this.getLength = function() { return this.keyValuePairs.length; }
}
function queryString(key) {
    key = key.toLowerCase();
    var page = new PageQuery(window.location.search);
    return unescape(page.getValue(key));
}


//Used to retrieve and format values from the QueryString and return in format expected for DART KeyValues.	
function QS(QueryStringParams) {
    var keyValues = '';
    var kv = '';
    var arr = new Array();
    arr = QueryStringParams.split(",");
    for (var i = 0; i < arr.length; i++) {
        arrNames = arr[i].split("|");
        kv = queryString(arrNames[0]);
        if (kv.length > 0 && kv != "false") {
            if (arrNames.length > 1) {
                keyValues += checkK(arrNames[1]) + '=' + checkV(kv) + ';';
            } else {
                keyValues += checkK(arrNames[0]) + '=' + checkV(kv) + ';';
            }
        }
    }
    return keyValues;
} //QS		

function JQS(Params) {  //Javascript QueryString -- used for ODB
    var keyValues = '';
    var kv = '';
    var arr = new Array();
    arr = Params.split(",");
    if (ActualURL) {
        for (var i = 0; i < arr.length; i++) {
            arrNames = arr[i].split("|");
            kv = JSqueryString(arrNames[0]);
            if (kv.length > 0 && kv != "false") {
                if (arrNames.length > 1) {
                    keyValues += checkK(arrNames[1]) + '=' + checkV(kv) + ';';
                } else {
                    keyValues += checkK(arrNames[0]) + '=' + checkV(kv) + ';';
                }
            }
        }
    } //ActualURL
    return keyValues;
} //JQS

function JSqueryString(key) {
    key = key.toLowerCase();
    if (ActualURL) {
        var page = new PageQuery(ActualURL);
    }
    return unescape(page.getValue(key));
}

function checkK(x) {
    if (x.length > 5) {
        x = x.substr(0, 5);
    }
    return x;
}

function checkV(x) {
    if (x == 'and' || x == 'or') {
        x = '';
    } else {
        x = x.replace(/ /gi, "_");
        x = x.replace(/#/gi, "");
        x = x.replace(/\"/gi, "");
        x = x.replace(/,/gi, "");
        x = x.replace(/\*/gi, "");
        x = x.replace(/\./gi, "");
        x = x.replace(/\(/gi, "");
        x = x.replace(/\)/gi, "");
        x = x.replace(/=/gi, "");
        x = x.replace(/\+/gi, "");
        x = x.replace(/</gi, "");
        x = x.replace(/>/gi, "");
        x = x.replace(/\[/gi, "");
        x = x.replace(/\]/gi, "");
        x = x.replace(/!/gi, "");
        x = x.replace(/'/gi, "");
    }
    if (x.length > 55) {
        x = x.substr(0, 55);
    }
    return x;
}

function getSite(site) {
    var _defaultSite = 'ki.tk.planning';
    if (pageURL.search("thenest.com") > -1) { _defaultSite = 'ki.ne.planning'; }
    if (pageURL.search("thebump.com") > -1) { _defaultSite = 'ki.tb.planning'; }
    if (site == undefined || site == '') {
        if (__site == undefined || __site == '') {
            site = _site;
        } else {
            site = __site;
        }
    }
    if (site == undefined || site == '') { site = _defaultSite; }
    //_ref=search, page came from site search
    if (queryString("_ref") == "search") { site = 'ki.tk.index'; }
    return site;
}

function getZone(zone) {
    var _defaultZone = 'default';
    if (zone == undefined || zone == '') {
        if (__zone == undefined || __zone == '') {
            zone = _zone;
        } else {
            zone = __zone;
        }
    }
    if (zone == undefined || zone == '') { zone = _defaultZone; }
    //_ref=search, page came from site search
    if (queryString("_ref") == "search") { zone = 'results'; }
    return zone;
}

function InvalidPositions(position) {
    if (position.search("barnacle") > -1) {
        return true;
    } else {
        return false;
    }
}

function dartAdObject(w, h, s, z, t, p, k, tag) {
    this.width = w.replace(";", "");
    this.height = h.replace(";", "");
    this.site = s.replace(";", "");
    this.zone = z.replace(";", "");
    this.tile = t.replace(";", "");
    this.position = p.replace(";", "");
    this.keyValues = k;
    this.adTag = tag;
}

function DART(width, height, position, tileNumber, site, zone, keyvalues, keywords) {


    site = getSite(site);
    zone = getZone(zone);
    if (width == undefined || width == '') { alert('Error: You must specify the ad width.'); return }
    if (height == undefined || height == '') { alert('Error: You must specify the ad height.'); return }
    if (keyvalues == undefined) { keyvalues = ''; }
    if (keywords == undefined) { keywords = ''; }
    if (tileNumber == undefined) { tileNumber = ''; }
    if (tileNumber != '') { tileNumber = 'tile=' + tileNumber + ';'; }
    if (position == undefined) { position = ''; }
    if (position != '') { position = 'pos=' + position + ';'; }
    var prtcl = document.location.protocol;
    if (prtcl != "https:") { prctl = "http:"; }
    if (InvalidPositions(position) == false) {
        var size = width + 'x' + height;
        if (adCnt == 0 && size == "300x250") {
            size = "300x250,300x251";
        }

        var adrequest = prtcl + '//ad.doubleclick.net/adj/' + site + '/' + zone + ';' + position + tileNumber + keyvalues + keywords + dcopt + 'sz=' + size + ';ord=' + ord + '?';
        var tag = '<script language="JavaScript" src="' + adrequest + '" type="text/javascript"></scr' + 'ipt>';
        adObject = new dartAdObject(width, height, site, zone, tileNumber, position, keyvalues, adrequest);
        dartAds.push(adObject);
        adCnt++;
        document.write(tag);
        if (queryString("_debug") == "true") { alert(adrequest); }
    }
    if (dcopt != '') { dcopt = ''; }
} //DART


function p_addNewItem(SiteZone, Pattern) {
    var SiteZoneExists = false;
    if (Pattern == undefined) { Pattern = SiteZone; } //default the pattern if not specified
    for (var n = 0; n < this.length; n++) {
        if (this[n][0] == SiteZone) {
            SiteZoneExists = true;
            for (var p = 0; p < this[n][1].length; p++) {
                PatternExists = false;
                if (this[n][1][p] == Pattern) { PatternExists = true; }
            }
            if (PatternExists == false) {
                this[n][1].push(Pattern);
            }
        }
    }
    if (SiteZoneExists == false) {
        var item = new Array();
        item.push(SiteZone);
        item.push(Array(Pattern));
        this.push(item);
    }
} //p_addNewItem		

function p_setPageSiteAndZone(sURL) {
    sURL = sURL.toString();
    sURL = sURL.replace("http://", "").replace("https://", "").split('?')[0];
    sURL = sURL.replace("//", "/");
    for (var a = 0; a < lookup.length; a++) {
        for (var b = 0; b < lookup[a][1].length; b++) {
            if (sURL.search(lookup[a][1][b]) > -1) {
                var _sitezone = lookup[a][0].split("/");
                __site = _sitezone[0];
                __zone = _sitezone[1];
            }
        }
    }
} //p_setPageSiteAndZone


//Community Specific...
if ((siteHost == "ideas.thenest.com") || (siteHost == "community.theknot.com") || (siteHost == "community.thenest.com") || (siteHost == "community.thebump.com") || (siteHost == "community.thenestbaby.com")) {

    //Community.TheKnot.com...
    if (siteHost == "community.theknot.com") {
        lookup.addItem('ki.tk.community/photos_main', 'community.theknot.com/cs/ks/photos(/default.aspx|/nestgallery.aspx|/gettogether.aspx|/)?$');
        lookup.addItem('ki.tk.community/photos_detail', 'community.theknot.com/cs/ks/photos/weddingdetails/');
        lookup.addItem('ki.tk.myknot/photos', 'community.theknot.com/cs/ks/photos/((?!weddingdetails/)([^/]+))/');
        lookup.addItem('ki.tk.myknot/groups', 'community.theknot.com/cs/ks/groups');
        lookup.addItem('ki.tk.community/blogs', 'community.theknot.com/cs/ks/blogs(/default.aspx|/)?$');
        lookup.addItem('ki.tk.myknot/blogs', 'community.theknot.com/cs/ks/blogs/[^/]+/');
        lookup.addItem('ki.tk.myknot/friends', 'community.theknot.com/cs/ks/friends');
        lookup.addItem('ki.tk.community/main', 'community.theknot.com/cs/ks/community');
        lookup.addItem('ki.tk.myknot/profile', 'community.theknot.com/cs/ks/(user|controlpanel)');
        lookup.addItem('ki.tk.community/default', 'community.theknot.com/cs/ks/photos');
        lookup.addItem('ki.tk.myknot/default', 'community.theknot.com/cs/ks/photos');
    }

    //Community.TheNest.com...
    if (siteHost == "community.thenest.com") {
        lookup.addItem('ki.ne.community/photos_main', 'community.thenest.com/cs/ks/photos(/default.aspx|/nestgallery.aspx|/babygallery.aspx|/gettogether.aspx|/)?$');
        lookup.addItem('ki.ne.community/photos_detail', 'community.thenest.com/cs/ks/photos/nest/');
        lookup.addItem('ki.ne.mynest/photos', 'community.thenest.com/cs/ks/photos/((?!nest/)([^/]+))/');
        lookup.addItem('ki.ne.mynest/groups', 'community.thenest.com/cs/ks/groups');
        lookup.addItem('ki.ne.community/blogs', 'community.thenest.com/cs/ks/blogs(/default.aspx|/home.aspx|/)?$');
        lookup.addItem('ki.ne.mynest/blogs', 'community.thenest.com/cs/ks/blogs/[^/]+/');
        lookup.addItem('ki.ne.mynest/friends', 'community.thenest.com/cs/ks/friends');
        lookup.addItem('ki.ne.community/main', 'community.thenest.com/cs/ks/community');
        lookup.addItem('ki.ne.mynest/profile', 'community.thenest.com/cs/ks/(user|controlpanel)');
        lookup.addItem('ki.ne.community/forums', 'community.thenest.com/cs/ks/forums');
        lookup.addItem('ki.ne.community/default', 'community.thenest.com/cs/(ks/Msgs|Msgs)');
        lookup.addItem('ki.ne.community/default', 'boards.thenest.com/Boards');
    }

    //Community.TheBump.com or Community.TheNestBaby.com...	
    if ((siteHost == "community.thenestbaby.com") || (siteHost == "community.thebump.com")) {
        lookup.addItem('ki.tb.community/photos_main', 'community.(thenestbaby.com|thebump.com)/cs/ks/photos(/babygallery.aspx|/nestgallery.aspx|/default.aspx|/)?$');
        lookup.addItem('ki.tb.community/photos_detail', 'community.(thenestbaby.com|thebump.com)/cs/ks/photos/(baby/|nest/)');
        lookup.addItem('ki.tb.mynest/photos', 'community.(thenestbaby.com|thebump.com)/cs/ks/photos/((?!baby/|nest/)([^/]+))/');
        lookup.addItem('ki.tb.mynest/profile', 'community.(thenestbaby.com|thebump.com)/cs/ks/(user|controlpanel)');
        lookup.addItem('ki.tb.mynest/blogs', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/(?!new_arrivals/|ttc/|nb_experts/|nb_checklists/|1sttrimester/|2ndtrimester/|3rdtrimester/)([^/]+)/');
        lookup.addItem('ki.tb.community/blogs', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/(new_arrivals/|ttc/|nb_experts/|nb_checklists/|1sttrimester/|2ndtrimester/|3rdtrimester/)');
        lookup.addItem('ki.tb.community/blogs', 'community.(thenestbaby.com|thebump.com)/cs/ks/(blogs/|blogs/default.aspx)$');
        lookup.addItem('ki.tb.mynest/friends', 'community.(thenestbaby.com|thebump.com)/cs/ks/friends');
        lookup.addItem('ki.tb.community/main', 'community.(thenestbaby.com|thebump.com)/cs/ks/community/(default.aspx)?$');
        lookup.addItem('ki.tb.community/boards', 'community.(thenestbaby.com|thebump.com)/cs/ks/forums');

        //Specific Blogs... Must come after the general blog patterns...
        lookup.addItem('ki.tb.giveaways/main', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/new_arrivals/archive/tags/contest/(default.aspx)?$');
        lookup.addItem('ki.tb.local/main', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/new_arrivals/archive/2007/03/07/meet-our-local-moms.aspx');
        lookup.addItem('ki.tb.ttc/article', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/ttc/archive/2007/12/13/q-ttc-to-do.aspx');
        lookup.addItem('ki.tb.ttc/qa', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/ttc/archive/2007/07/05/q-ttc-to-do.aspx');
        lookup.addItem('ki.tb.tools/fertility', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_experts/archive/2007/03/30/dr-joseph-hill.aspx');
        lookup.addItem('ki.tb.tools/kickcount', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/tool-kick-count-tracker.aspx');
        lookup.addItem('ki.tb.tools/birthplan', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/archive/2007/03/26/checklist-birth-plan.aspx');
        lookup.addItem('ki.tb.tools/babynamers', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/3rdtrimester/pages/baby-namers-on-the-web.aspx');
        lookup.addItem('ki.tb.tools/productblog', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/new_arrivals/archive/2007/05/17/what-baby-product-can-t-you-live-without.aspx');
        lookup.addItem('ki.tb.tools/activitylog', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/baby-input-output-tracker-tool.aspx');
        lookup.addItem('ki.tb.tools/pooptracker', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/tool-input-output-tracker.aspx');
        lookup.addItem('ki.tb.tri1/article', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/1sttrimester/(default.aspx)?$');
        lookup.addItem('ki.tb.tri2/article', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/2ndtrimester/(default.aspx)?$');
        lookup.addItem('ki.tb.tri3/article', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/3rdtrimester/(default.aspx)?$');
        lookup.addItem('ki.tb.tools/teething', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/tool-teething-chart.aspx');
        lookup.addItem('ki.tb.tools/pregnacytimeline', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/archive/2007/07/05/checklist-pregnancy-timeline.aspx');
        lookup.addItem('ki.tb.tools/sleeptracker', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/tool-sleep-tracker.aspx');
        lookup.addItem('ki.tb.tools/emergency', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/tool-emergency-info.aspx');
        lookup.addItem('ki.tb.tools/babysize', 'community.(thenestbaby.com|thebump.com)/cs/ks/blogs/nb_checklists/pages/how-big-is-baby.aspx');
    }

    //SiteCore Specific Settings...	
    if (siteHost == "ideas.thenest.com") {
        //Big Purchase Mattress article
        lookup.addItem('ki.ne.guides.mattress/article', 'big-purchase-mattress');
        lookup.addItem('ki.ne.guides.mattress/article', 'buying-a-mattress');
        lookup.addItem('ki.ne.decor/default', 'ideas.thenest.com/Sites/TheNest/Quizzes/DecorTricks');
    }

    //Set Site and Zone...
    lookup.setPageSiteZone(pageURL);

} //Community Specific
