var TS_AdService = { flags : { "keywords" : [], "interests" : [], "geographics" : [], "coordinates" : [], "genders" : [], "ageranges" : [], "incomeranges" : [], "ethnicities" : [], "relationships" : [], "qualifications" : [], "jobs" : [], "industries" : [], "religions" : [], "politics" : [], "languages" : [], "advertisers" : [], "excludes" : [], "interval" : 0 }, placements : {}, ads : {}, useIframes : 1, targetFrame : "", title : "", placementCounter : 0, CreateZone : function (placementHandle, medium, parentID, title, targetFrame) { var parts = placementHandle.split(","); placementHandle = ""; for (var i = 0; i < Math.min(parts.length, 4); i++) { placementHandle += parts[i] + (i < parts.length - 1 ? "_" : ""); } var randId = "rand_" + Math.round(Math.random()*2147483647); if (!TS_AdService.placements[placementHandle]) { TS_AdService.placements[placementHandle] = []; } if (!TS_AdService.placements[placementHandle][randId]) { TS_AdService.placements[placementHandle][randId] = {}; } TS_AdService.placements[placementHandle][randId].status = 0; TS_AdService.placements[placementHandle][randId].medium = medium ? medium : 'all'; TS_AdService.placements[placementHandle][randId].title = title ? title : null; TS_AdService.placements[placementHandle][randId].targetFrame = targetFrame ? targetFrame : null; var parentElement; var placementDiv; if (parentID && (parentElement = document.getElementById(parentID))) { placementDiv = document.createElement("div"); placementDiv.setAttribute("id", (placementHandle + "_" + randId)); parentElement.appendChild(placementDiv); } else { document.write("
"); placementDiv = document.getElementById(placementHandle + '_' + randId); } TS_AdService.placements[placementHandle][randId].placementDiv = placementDiv; }, CreateTextZone : function (placementHandle, parentID, showImage) { TS_AdService.CreateZone(placementHandle, showImage || showImage == undefined ? 'text' : 'textonly', parentID); }, CreateShortTextZone : function (placementHandle, parentID, showImage) { TS_AdService.CreateZone(placementHandle, showImage || showImage == undefined ? 'shorttext' : 'shorttextonly', parentID); }, CreateBannerZone : function (placementHandle, parentID) { TS_AdService.CreateZone(placementHandle, 'banner', parentID); }, DisplayZone : function (placementHandle, medium, parentID) { if (placementHandle) { TS_AdService.CreateZone(placementHandle, medium, parentID); TS_AdService.FetchAds(null, null, placementHandle); } }, DisplayTextZone : function (placementHandle, parentID, showImage) { TS_AdService.DisplayZone(placementHandle, showImage || showImage == undefined ? 'text' : 'textonly', parentID); }, DisplayShortTextZone : function (placementHandle, parentID, showImage) { TS_AdService.DisplayZone(placementHandle, showImage || showImage == undefined ? 'shorttext' : 'shorttextonly', parentID); }, DisplayBannerZone : function (placementHandle, parentID) { TS_AdService.DisplayZone(placementHandle, 'banner', parentID); }, RealTypeOf : function (v) { var type = v == undefined ? "null" : typeof(v); if (type == "object") { if (v === null) { type = "null"; } else if (v.constructor == (new Array).constructor) { type = "array"; } else if (v.constructor == (new Date).constructor) { type = "date"; } else if (v.constructor == (new RegExp).constructor) { type = "regex"; } } return type; }, FormatJSON : function (oData, sIndent, canCollapse) { var canCollapse = false; if (arguments.length < 2) { sIndent = ""; } else if (sIndent == "") { canCollapse = true; } var sIndentStyle = canCollapse ? "" : " "; var sDataType = TS_AdService.RealTypeOf(oData); if (sDataType == "array") { if (oData.length == 0) { return "[]"; } var sHTML = "["; } else { var iCount = 0; for (var sKey in oData) { iCount++; }; if (iCount == 0) { return "{}"; } var sHTML = "{"; } var iCount = 0; for (var sKey in oData) { var vValue = oData[sKey]; if (iCount > 0) { sHTML += ","; } if (sDataType == "array") { sHTML += ("\n" + sIndent + sIndentStyle); } else { sHTML += ("\n" + sIndent + sIndentStyle + "\"" + sKey + "\"" + ": "); } tValue = TS_AdService.RealTypeOf(vValue); if (tValue == "array" || tValue == "object") { sHTML += TS_AdService.FormatJSON(vValue, (sIndent + sIndentStyle)); } else if (tValue == "boolean" || tValue == "number") { sHTML += vValue.toString(); } else if (tValue == "null") { sHTML += "null"; } else if (tValue == "string") { sHTML += ("\"" + vValue + "\""); } else { /*sHTML += ("\"TYPEOF\": \"" + typeof(vValue) + "\""); */ sHTML += "null"; } iCount++; } if (sDataType == "array") { sHTML += ("\n" + sIndent + "]"); } else { sHTML += ("\n" + sIndent + "}"); } return sHTML; }, FetchXMLAds : function (requestData, callback) { TS_AdService.FetchAds(requestData, callback, null, "xml", true); }, FetchJSONAds : function (requestData, callback) { TS_AdService.FetchAds(requestData, callback, null, "json", true); }, FetchAds : function (requestData, callback, fetchZoneId, type, forceFetch) { var matches = callback ? callback.toString().match(/^function\s(\w+)/) : null; var callbackName = matches ? matches[1] : null; if (document.TS_AdService.fetchAdsCount) { document.TS_AdService.fetchAdsCount = 0; } if (!requestData) { requestData = {"placements":[], "flags": {}, "medium": TS_AdService.medium, "useiframe" : TS_AdService.useIframes, "frame": TS_AdService.targetFrame, "title": TS_AdService.tooltip}; for (var placementHandle in TS_AdService.placements) { if (fetchZoneId && placementHandle != fetchZoneId) { continue; } if (!TS_AdService.placements[placementHandle] instanceof Array) { continue; } for (var randId in TS_AdService.placements[placementHandle]) { if (!TS_AdService.placements[placementHandle].hasOwnProperty(randId)) { continue; } if (TS_AdService.placements[placementHandle][randId].status != 0 && !forceFetch) { continue; } TS_AdService.placements[placementHandle][randId].status = 1; var exists = false; var placementMedium = TS_AdService.placements[placementHandle][randId].medium; var placementTitle = TS_AdService.placements[placementHandle][randId].title; var placementTargetFrame = TS_AdService.placements[placementHandle][randId].targetFrame; for (var i = 0; i < requestData.placements.length; i++) { var pl = requestData.placements[i]; if (pl.handle == placementHandle && pl.medium == placementMedium && pl.title == placementTitle && pl.frame == placementTargetFrame) { pl.count++; exists = true; break; }} if (!exists) { requestData.placements.push({"handle" : placementHandle, "medium": placementMedium, "title": placementTitle, "frame": placementTargetFrame, "count":1}); } } } for (var flag in TS_AdService.flags) { var targets = TS_AdService.flags[flag]; if (TS_AdService.RealTypeOf(targets) == "array" && targets.length > 0) { requestData.flags[flag] = targets;} } var metaTags = document.getElementsByTagName("meta"); for (var i = 0; i < metaTags.length; i++) { if (metaTags[i].getAttribute("name") == "keywords") { var keywords = metaTags[i].getAttribute("content"); if (keywords) { var metaKeywords = keywords.split(","); if (TS_AdService.RealTypeOf(requestData.flags["keywords"]) != "array") { requestData.flags["keywords"] = []; } for (var j = 0; j < metaKeywords.length && requestData.flags["keywords"].length < 64; j++) { if (metaKeywords[j].length > 16) { requestData.flags["keywords"].push(metaKeywords[j].replace(/\s+$/gi, "").replace(/^\s*/gi, "")); } } } } } } var params = ""; var enc = encodeURIComponent||escape; var flag; params += 'request=' + enc(typeof(requestData) == "string" ? requestData : TS_AdService.FormatJSON(requestData, "")) + '&'; params += 'callback=' + enc(typeof(callback) == "function" && callbackName ? callbackName : "TS_AdService.WriteAds") + '&'; params += '_rand=' + new Date().getTime(); var ext = (type == "xml" || type == "json") ? ("." + type) : ".js"; var head = document.getElementsByTagName("head")[0]; var scrId = "ts_scr_placements_" + (fetchZoneId ? fetchZoneId : "all"); var scr = document.getElementById(scrId); if (scr) { try { head.removeChild(scr); } catch(e) {} }; scr = document.createElement('script'); scr.id = scrId; scr.type = "text/javascript"; scr.src="http://ads.trafficspaces.net/resources/placements" + ext + "?" + params; head.appendChild(scr); document.TS_AdService.fetchAdsCount++; }, LogStats : function (placementHandle) { var enc = encodeURIComponent||escape; var aArr = [placementHandle]; document.write(''); }, WriteAds : function (adContent) { var z = document.TS_AdService.placements; for (var i = 0; i < adContent.length; i++) { if (adContent[i] == undefined) { continue; } var placementHandle = adContent[i]["handle"]; var placementAds = adContent[i]["ads"]; var j = 0; for (var randId in z[placementHandle]) { if (z[placementHandle][randId].status == 1 && placementAds[j]) { var placementDiv = z[placementHandle][randId].placementDiv; if (placementDiv && j < placementAds.length) { new function(){ placementAds[j++].apply(placementDiv); }(); z[placementHandle][randId].status = 2; } } } } if (document.TS_AdService.reloadAdsHandle) { clearTimeout(document.TS_AdService.reloadAdsHandle); } if (document.TS_AdService.flags.interval && document.TS_AdService.flags.interval > 0 && Math.max(0, document.TS_AdService.fetchAdsCount) < 10) { document.TS_AdService.reloadAdsHandle = setTimeout("eval(function(){ document.TS_AdService.FetchAds(null, null, null, null, true); }.call(this));", Math.max(document.TS_AdService.flags.interval * 1000, 60000)); } }, TrackConversion : function (campaignId, amount) { var params = ""; var enc = encodeURIComponent||escape; var flag; params += 'utm_cpgnid=' + enc(campaignId) + '&'; params += 'utm_amount=' + enc(amount) + '&'; params += '_cb=' + new Date().getTime(); document.write(''); } } TS_AdService = (document.TS_AdService) ? (document.TS_AdService) : TS_AdService; document.TS_AdService = TS_AdService; /* Credits: TS_AdService.FormatJSON and TS_AdService.RealTypeOf are based on the excellent examples at http://joncom.be/code/javascript-json-formatter/ */