Added special delivery-configuration-options
[openx] / jquery.openx.js
index 98c56ec..f5f2253 100644 (file)
@@ -25,7 +25,7 @@
 
   var
 
-  settings, _zones, _options, domain, id, node,
+  settings, _options, domain, id, node,
 
   count = 0,
   slots = {},
   output = [];
 
 
-  $.openx = function( zones, options ) {
+  /*
+   * Configuration-Options for jQuery.openx
+   *
+   * Since the domain-name of the ad-server is the only required parameter,
+   * jQuery.openx for convenience can be configured with only that one
+   * parameter. For example: "jQuery.openx('openx.example.org');". If more
+   * configuration-options are needed, they must be specified as an object.
+   * For example: "jQuery.openx({'server': 'openx.example.org', ... });".
+   *
+   *
+   * Server-Settings:
+   *
+   * server:        string  Name of the server, without protocol or port. For
+   *                        example "openx.example.org". This option is
+   *                        REQUIRED.
+   * protocol:              Optional parameter.
+   *                http:   All connections to the ad-server are made via HTTP.
+   *                https:  All connections to the ad-server are made via HTTPS.
+   *                        If empty, document.location.protocol will be used.
+   * http_port:     number  Port-Number for HTTP-connections to the ad-server
+   *                        (only needed, when it is not the default-value 80).
+   * https_port:            Port-Number for HTTPS-connections to the ad-server
+   *                        (only needed, when it is not the default-value 443).
+   *
+   *
+   * Seldom needed special Server-Settings (these parameters are only needed,
+   * if the default delivery-configration of the OpenX-Server was changed):
+   *
+   * path:          string  Path to delivery-scripts. DEFAULT: "/www/delivery".
+   * fl:            string  Flash-Include-Script. DEFAULT: "fl.js".
+   *
+   *
+   * Delivery-Options (for details and explanations see the see:
+   * http://www.openx.com/docs/2.8/userguide/single%20page%20call):
+   *
+   * block:         1       Don't show the banner again on the same page.
+   *                0       A Banner might be shown multiple times on the same
+   *                        page (DEFAULT).
+   * blockcampaign: 1       Don't show a banner from the same campaign again on
+   *                        the same page.
+   *                0       A Banner from the same campaign might be shown
+   *                        muliple times on the same page (DEFAULT).
+   * target:        string  The value is addes as the HTML TARGET attribute in
+   *                        the ad code. Examples for sensible values: "_blank",
+   *                        "_top".
+   * withtext:      1       Show text below banner. Enter this text in the
+   *                       Banner properties page.
+   *                0       Ignore the text-field from the banner-properties
+                            (DEFAULT).
+   * charset:       string  Charset used, when delivering the banner-codes.
+   *                        If empty, the charset is guessed by OpenX. Examples
+   *                        for sensible values: "UTF-8", "ISO-8859-1".
+   */
+  $.openx = function( options ) {
+
+    var name, src, errors = [], i;
 
     if (domain) {
       if (console.error) {
         console.error('jQuery.openx was already initialized!');
-        console.log('Configured zones: ', _zones);
         console.log('Configured options: ', _options);
       }
       return;
     }
 
-    _zones = zones;
+    /** Enable convenient-configuration */
+    if (typeof(options) == 'string')
+      options = { 'server': options };
+
     _options = options;
 
+    if (!options.server)
+      errors.push('Required option "server" is missing!');
+    if (errors.length > 0) {
+      if (console.error) {
+        for (i=0; i<errors.length; i++)
+          console.error('Required option "server" is missing!');
+        console.log('options: ', options);
+      }
+      return;
+    }
+
     settings = $.extend(
       {
         'protocol': document.location.protocol,
-        'server': 'localhost'
+        'delivery': '/www/delivery',
+        'fl': 'fl.js',
+        'cache': true
       },
       options
       );
     if (settings.protocol === 'https:' && settings.https_port)
       domain += ':' + settings.https_port;
 
-    var
-    name,
-    src = domain;
-
     /**
      * Without this option, jQuery appends an timestamp to every URL, that
      * is fetched via $.getScript(). This can mess up badly written
      * third-party-ad-scripts, that assume that the called URL's are not
      * altered.
      */
-    $.ajaxSetup({ cache: true });
+    $.ajaxSetup({ 'cache': true });
+
 
-    src += "/www/delivery/spc.php?zones=";
+    src = domain + settings.delivery + '/spc.php';
 
-    /** Only fetch banners, that are really included in this page */
-    for(name in zones) {
+    /**
+     * jQuery.openx only works with "named zones", because it does not know,
+     * which zones belong to which website. For mor informations about
+     * "named zones" see:
+     * http://www.openx.com/docs/2.8/userguide/single%20page%20call
+     *
+     * For convenience, jQuery.openx only fetches banners, that are really
+     * included in the actual page. This way, you can configure jQuery.openx
+     * with all zones available for your website - for example in a central
+     * template - and does not have to worry about performance penalties due
+     * to unnecessarily fetched banners.
+     */
+    src += '?zones=';
+    for(name in OA_zones) {
       $('.oa').each(function() {
         var
         node = $(this),
           id = 'oa_' + ++count;
           slots[id] = node;
           queue.push(id);
-          src += escape(id + '=' + zones[name] + "|");
+          src += escape(id + '=' + OA_zones[name] + "|");
         }
       });
     }
+    src += '&nz=1'; // << We want to fetch named zones!
 
-    if (typeof OA_source !== 'undefined')
-      src += "&source=" + escape(OA_source);
-    src += "&nz=1&r=" + Math.floor(Math.random()*99999999);
-    src += "&block=1&charset=UTF-8";
-
+    /**
+     * These are some additions to the URL of spc.php, that are originally
+     * made in spcjs.php
+     */
+    src += '&r=' + Math.floor(Math.random()*99999999);
     if (window.location)   src += "&loc=" + escape(window.location);
     if (document.referrer) src += "&referer=" + escape(document.referrer);
 
+    /** Add the configured options */
+    if (settings.block === 1)
+      src += '&block=1';
+    if (settings.blockcampaign === 1)
+      src += '&blockcampaign=1';
+    if (settings.target)
+      src += '&target=' + settings.target;
+    if (settings.withtext === 1)
+      src += '&withtext=1';
+    if (settings.charset)
+      src += '&charset=' + settings.charset;
+
+    /** Add the source-code - if present */
+    if (typeof OA_source !== 'undefined')
+      src += "&source=" + escape(OA_source);
+
+    /** Chain-load the scripts (next script to load is fl.js */
     $.getScript(src, load_flash);
 
   }
 
   function load_flash() {
 
-    $.getScript(domain + '/www/delivery/fl.js', init_ads);
+    $.getScript(domain + settings.delivery + '/' + settings.fl, init_ads);
 
   }