//   constants

var  kads_server    = 'http://www.kanopyads.com/';
var  NL             = '\n';

var  kads_top       =   0;
var  kads_left      =   0;
var  kads_width     = 750;
var  kads_height    = 355;
var  kads_event_from=  '';
var  kads_link_url  =  '';

var  kads_browser   =
     { IE : navigator.userAgent.indexOf( 'MSIE'    ) > 0
     , FF : navigator.userAgent.indexOf( 'Firefox' ) > 0
     , CH : navigator.userAgent.indexOf( 'Chrome'  ) > 0
     , SF : navigator.userAgent.indexOf( 'Safari'  ) > 0
     }

var  kads_ad_swf    = kads_server + 'swf/kanopy.swf'
var  kads_ads       = new Array();

var  kads_ad_id     = '';
var  kads_ad_zone   = '';
var  kads_ad_var    = '';
var  kads_ad_url    = '';

var  kads_ad_ids    = [];
var  kads_ad_zones  = [];
var  kads_ad_vars   = [];
var  kads_ad_urls   = [];

//   get whole document body and force to lowercase

var  kads_body      = document.body.innerHTML.toLowerCase();
var  kads_returns   = kads_body.split( 'return ' );

for( var  i=1, z=0; i<kads_returns.length; i++ ) {     
     var  kads_return = kads_returns[ i ];
     kads_return = kads_replace_all( kads_return, '(', ' ' );
     kads_return = kads_replace_all( kads_return, ')', ' ' );
     kads_return = kads_replace_all( kads_return, ',', ' ' );

     var  kads_tokens  = kads_return.split( ' ' );
     var  kads_command = [];

     for( var  j=0, k=0; j<kads_tokens.length; j++ ) {
          var  kads_token = kads_tokens[ j ];
          if(  kads_token != '' ) { 
               kads_command[ k ] = kads_token;
               k++;
          }
     }

     if(  kads_command[ 0 ] == 'kads_run_ad'
     &&   kads_command[ 1 ] == 'this'
     &&   kads_command[ 2 ] ) {
          kads_ad_zones[ z ] = kads_command[ 2 ];
          z++;
     }
}
kads_body    = '';
kads_returns = '';

//   calculate the flv from server for each ad zone   

kads_pre_load( kads_ad_swf );
var  kads_list = kads_ad_zones.join( '|' );
document.write( '<scr' + 'ipt src="' + kads_server + 'ajax/getads?href=' + location.href + '&list=' + kads_list + '"></scr' + 'ipt>' );


//   called from this script on load

function kads_pre_load( kads_ad_swf ) {

     var  kads_ad_var  = '';

//   create flash div

     var  flash_div = document.body;

//   create flash object

     var flash_obj = document.createElement( 'object' );
     flash_obj.setAttribute( 'id'        , 'flash_object' );
     flash_obj.setAttribute( 'classid'   , 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' );
     flash_obj.setAttribute( 'codebase'  , 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' );
     flash_obj.setAttribute( 'width'     , '1' );
     flash_obj.setAttribute( 'height'    , '1' );
     
//   set flash param

     kads_set_param( flash_obj, 'flash_object'    ,  kads_ad_swf );   //   set movie source
     kads_set_param( flash_obj, 'FlashVars'       ,  kads_ad_var );   //   set flash vars

//   set flash embed

     var flash_embed = document.createElement( 'embed' );
     flash_embed.setAttribute( 'src'              ,  kads_ad_swf );
     flash_embed.setAttribute( 'width'            , '1'          );
     flash_embed.setAttribute( 'height'           , '1'          );
     flash_embed.setAttribute( 'application'      , 'application/x-shockwave-flash' );
     flash_embed.setAttribute( 'pluginspage'      , 'http://www.macromedia.com/go/getflashplayer' );
     flash_embed.setAttribute( 'FlashVars'        ,  kads_ad_var );

//   attach embed to object, object to div

     if(( kads_browser.IE ) || (( kads_browser.FF ) && ( kads_event_from == 'form' ))) {
          flash_div.appendChild( flash_embed   );
     } else {
          flash_obj.appendChild( flash_embed   );
          flash_div.appendChild( flash_obj     );
     }
}


//   called from publisher page

function kads_run_ad( ad_url, ad_zone ) {

//   to prevent additional ad unit (only one ad unit per time)

     var  container = document.getElementById( 'kads_container' );
     if(  container )
          return false;

//   to prevent repeat views (controlled by time of cookie )

     if(  document.cookie.indexOf( 'kads' + ad_zone + '=' ) > -1 )
          return true;

//   to load specific ad from pre-load zones

     kads_ad_zone = ad_zone;
     for( var i=0; i<kads_ads.length; i++ ) {
          if(  kads_ad_zone == kads_ads[ i ].zone ) {
               kads_ad_id    = kads_ads[ i ].id;
               kads_ad_flv   = kads_ads[ i ].flv;
               kads_ad_url   = kads_ads[ i ].url;
               kads_ad_play  = kads_ads[ i ].play;
               kads_ad_skip  = kads_ads[ i ].skip;
               kads_ad_var   = 'flv=' + kads_ad_flv + '&duration=' + kads_ad_play + '000' + '&url=' + escape(kads_ad_url);
               break;
          }
     }
     if(  '' == kads_ad_id )
          return true;

//   calculate expire time and store cookie

     var  expired_at = new Date();
     expired_at.setTime( expired_at.getTime() + kads_ad_skip * 1000 );
     document.cookie = 'kads' + ad_zone + '=' + ad_zone + ';expires=' + expired_at.toGMTString();

//   calculate event_from & link_url

     kads_event_from = '';
     kads_link_url   = '';
     if(  ad_url.href ) {
          kads_event_from = 'link';                         //   event from link
          kads_link_url   = ad_url.href;
     } else {
          for( i=0; i<document.forms.length; i++ ) {        //   event from form
               if(  document.forms[ i ] == ad_url ) {
                    kads_event_from = 'form';
                    kads_link_url   = 'javascript:document.forms[' + i + '].submit();';
                    break;
               }
          }
     }

     if( !kads_ad_swf ) {
          if(  kads_link_url )
               window.location = kads_link_url;
          return false;
     }
 
//   calculate top & left position

     var  kads_win_width  = 0;
     var  kads_win_height = 0;

     var  is_CSS1   = ( document.compatMode == 'CSS1Compat' );
     var  is_IE     = ( navigator.appName == 'Microsoft Internet Explorer' );
     var  is_FF     = ( navigator.userAgent.indexOf( 'Firefox/') > -1 );

          if(  typeof( window.innerWidth ) == 'number' )    { kads_win_width = window.innerWidth                    ; kads_win_height = window.innerHeight                   ; }
     else if(  document.compatMode == 'CSS1Compat'     )    { kads_win_width = document.documentElement.clientWidth ; kads_win_height = document.documentElement.clientHeight; }
     else                                                   { kads_win_width = document.body.clientWidth            ; kads_win_height = document.body.clientHeight           ; }

     if(  is_CSS1 && ( is_IE || is_FF )) {
          kads_top  = (document.documentElement.scrollTop    + (kads_win_height - kads_height) / 2) + 'px';
          kads_left = (document.documentElement.scrollLeft   + (kads_win_width  - kads_width ) / 2) + 'px';
     } else {
          kads_top  = (document.body.scrollTop               + (kads_win_height - kads_height) / 2) + 'px';
          kads_left = (document.body.scrollLeft              + (kads_win_width  - kads_width ) / 2) + 'px';
     }

//   define mask div

     var  opacity = 0;        //   set opacity (1-10)
     var  mask = document.createElement( 'div' );
     mask.setAttribute( 'id', 'kads_masker' );
     mask.style.position           = 'absolute';
     mask.style.zindex             = '10000';
     mask.style.width              =  kads_width  + 'px';
     mask.style.height             =  kads_height + 'px';
     mask.style.top                =  kads_top;
     mask.style.left               =  kads_left;
     mask.style.backgroundColor    = '#ffffff';
     mask.style.opacity            =  opacity / 10;
     mask.style.filter             = 'alpha( opacity=' + opacity * 10 + ' )';
     document.body.appendChild( mask );

//   define key handler

     document.onkeydown            = kads_key_handler;

//   define ad unit div

     var  container = document.createElement( 'div' );
     container.setAttribute( 'id', 'kads_container' );
     container.style.position      = 'absolute';
     container.style.top           =  kads_top ;
     container.style.left          =  kads_left;

     container.style.zindex        = '10002';
     document.body.appendChild( container );

//   define flash div

     var  flash_width              =  kads_width  + 'px';
     var  flash_padding            = '0px 0px 0px 0px';
     var  flash_height             =  kads_height + 'px';
     var  flash_wmode              = 'transparent';

//   create flash div

     var  flash_div = document.createElement( 'div' );
     flash_div.setAttribute( 'id', 'kads_flash' );
     flash_div.style.position      = 'relative';
     flash_div.style.overflow      = 'hidden';
     flash_div.style.padding       =  flash_padding;
     flash_div.style.height        =  flash_height;
     flash_div.style.width         =  flash_width;

//   create flash object

     var  flash_obj = document.createElement( 'object' );
     flash_obj.setAttribute( 'id'        , 'kads_object' );
     flash_obj.setAttribute( 'classid'   , 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' );
     flash_obj.setAttribute( 'codebase'  , 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' );
     flash_obj.setAttribute( 'width'     , '100%' );
     flash_obj.setAttribute( 'height'    , '100%' );

//   set flash param

     kads_set_param( flash_obj, 'movie'                ,  kads_ad_swf );   //   set movie source
     kads_set_param( flash_obj, 'quality'              , 'best'       );   //   set movie quality
     kads_set_param( flash_obj, 'bgcolor'              , '#ffffff'    );   //   set background color
     kads_set_param( flash_obj, 'wmode'                ,  flash_wmode );   //   set window mode
     kads_set_param( flash_obj, 'allowScriptAccess'    , 'always'     );   //   set script access
     kads_set_param( flash_obj, 'allowFullScreen'      , 'false'      );   //   set full screen
     kads_set_param( flash_obj, 'align'                , 'middle'     );   //   set align position
     kads_set_param( flash_obj, 'name'                 , 'ad-unit'    );   //   set object name
     kads_set_param( flash_obj, 'FlashVars'            ,  kads_ad_var );   //   set flash vars

//   set flash embed

     var  flash_embed = document.createElement( 'embed' );
     flash_embed.setAttribute( 'id'                    , 'ad-unit-embed' );
     flash_embed.setAttribute( 'src'                   ,  kads_ad_swf );
     flash_embed.setAttribute( 'quality'               , 'best'       );
     flash_embed.setAttribute( 'bgcolor'               , '#ffffff'    );
     flash_embed.setAttribute( 'wmode'                 ,  flash_wmode );
     flash_embed.setAttribute( 'width'                 , '100%'       );
     flash_embed.setAttribute( 'height'                , '100%'       );
     flash_embed.setAttribute( 'align'                 , 'middle'     );
     flash_embed.setAttribute( 'allowScriptAccess'     , 'always'     );
     flash_embed.setAttribute( 'allowFullScreen'       , 'false'      );
     flash_embed.setAttribute( 'name'                  , 'ad-unit'    );
     flash_embed.setAttribute( 'FlashVars'             ,  kads_ad_var );
     flash_embed.setAttribute( 'application'           , 'application/x-shockwave-flash' );
     flash_embed.setAttribute( 'pluginspage'           , 'http://www.macromedia.com/go/getflashplayer' );

//   attach embed to object, object to div

     if(( kads_browser.IE ) || (( kads_browser.FF ) && ( kads_event_from == 'form' ))) {
          flash_div.appendChild( flash_embed   );
     } else {
          flash_obj.appendChild( flash_embed   );
          flash_div.appendChild( flash_obj     );
     }

//   take it live...

     var  container = document.getElementById( 'kads_container' );
     container.appendChild( flash_div );
     return false;
}


//   replace all character from to

function kads_replace_all( pString, pFrom, pTo ) {

     var  myString = pString;
     while( true ) {
          if(  myString.indexOf( pFrom ) < 0 )
               break;
          myString = myString.replace( pFrom, pTo );
     }
     return myString;
}


//   set flash param

function kads_set_param( flash_obj, name, value ) {

     var  flash_param = document.createElement( 'param' );
     flash_param.setAttribute(  'name', name  );
     flash_param.setAttribute( 'value', value );
     flash_obj.appendChild( flash_param );
}


//   calculate viewport top position

function kads_view_top() {

     return typeof window.pageYOffset != 'undefined'                       ? window.pageYOffset
          : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop
          : document.body.scrollTop                                        ? document.body.scrollTop
          : 0
          ;
}


//   process key handler

function kads_key_handler( e ) {

     var  kC = ( window.event ) ? event.keyCode : e.keyCode;    //   MSIE or Firefox?
     if(  kC == 27 && kads_link_url != '' )
          window.location = kads_link_url;
//     return false;
}


//   remove and close ad unit

function kads_close_ad() {

     var  container = document.getElementById( 'kads_container' );
     var  masker    = document.getElementById( 'kads_masker'    );

     container.parentNode.removeChild( container );
     masker.parentNode.removeChild( masker );

     if(  kads_link_url )
          if(  kads_link_url.substr( 0, 11 ) == 'javascript:' ) {
               var code = kads_link_url.substr( 11 );
               eval( code );
          } else {
               window.location = kads_link_url;
          }
     return false;
}

/*

//   create a new window
function kads_new_window( url ) {

     var  kads_window = window.open( url, '_blank' );
     if( !kads_window.opener )
          kads_window.opener = self;
     kads_window.focus();
}
*/

//   process event from swf

function kads_swf2js( event ) {

     var  imgObj = new Image();
     imgObj.src  = kads_server + 'ajax/addevent?ad=' + kads_ad_id + '&zone=' + kads_ad_zone + '&event=' + event + '&time=' + Date();

     my_timeout_id = setTimeout( function() {          //   this is needed for FireFox
          switch( event ) {
               case 'click'        : //kads_new_window( kads_ad_url );
                                     kads_close_ad(); 
                                     break;
               case 'end'          : kads_close_ad();
                                     break;
               case 'close'        : kads_link_url = null;
                                     kads_close_ad();
                                     break;
               case 'gotokanopy'   : //kads_new_window( 'http://www.kanopymedia.com' );
                                     break;
          }
     }, 100 );      
}