/*
 *  Syndication load script
 *  Created: 17/05/2010
 *  Modified: 23/11/2010
 *  Version:  1.05
 *  Author:   Anson
 *
 *  Document load handler copied from jQuery: http://code.jquery.com/jquery-1.4.2.js
 *
 */
ClashMedia = {
  Path : {
    syndicate : function( parameters ){
      RoadrunnerSyn.Path.syndicate( parameters );
    }
  }
};


if( typeof( RoadrunnerSyn ) == "undefined" ){
  
RoadrunnerSyn = {
  
  debug : false,
  readyBound : false,
  readyList : [],
  isReady : false,
  Handlers : {},
  bannerData : {},
  hosted : false,

  Path : {
  
    domain : "http://path.clash-media.fr",
    
    syndicate : function( parameters ){

      if( !RoadrunnerSyn.isReady ){
        RoadrunnerSyn.readyList.push(  parameters );
      }
      else {
        RoadrunnerSyn.load(parameters);
      }
      
  }
      
    },
    
    load : function( parameters ){
    
     
    
      RoadrunnerSyn.log("load called");
      
      if(typeof(parameters) == "undefined"){
        parameters = RoadrunnerSyn.Path;
      }
      
        var params = "";
        var w, h = false;
        for(var name in parameters){
           if(name != "load" && name != "domain" && name != "click_handler" && name != "key" && name != "code" && name != "jsonp" && typeof( parameters[name]) != "function" && typeof( parameters[name] ) != "undefined"  ){
              params += (name + "=" + encodeURIComponent(parameters[name]) + "&");
            }
            
        }
        parameters.params = params;
        RoadrunnerSyn.bannerData[parameters.code] = parameters
        
        if(parameters.hosted){
          RoadrunnerSyn.hosted = parameters.hosted;         
        }
        
         if( parameters.jsonp && parameters.w && parameters.h && parameters.code ){
         // this.makeRequest( parameters.key, params );
         
            var bscript_tag = document.createElement("script");
            bscript_tag.setAttribute("type", "text/javascript");
            bscript_tag.setAttribute("src", RoadrunnerSyn.Path.domain + '/banner/' + parameters.key + '.js?w=' + parameters.w + '&h=' + parameters.h + '&code=' + parameters.code );
            
            script_tag = this.findScriptTag( parameters.code);
             script_tag.parentNode.insertBefore( bscript_tag, script_tag );
         
          return;
         }
        
         var styleNode = document.createElement('style');
          styleNode.type = "text/css";
          // browser detection (based on prototype.js)
          if(!!(window.attachEvent && !window.opera)) {
            styleNode.styleSheet.cssText = 'iframe.roadrunner { border: 0; outline: none; }';
          } else {
            var styleText = document.createTextNode('iframe.roadrunner { border: 0; } ');
            styleNode.appendChild(styleText);
          }
          document.getElementsByTagName('head')[0].appendChild(styleNode);
          
          RoadrunnerSyn.log("found script tag, building iframe object");
        
          var iframe_src;
          if(RoadrunnerSyn.hosted){
            iframe_src = RoadrunnerSyn.Path.domain + "/load/"  + parameters.key + '/?' + params;
          } else {
            iframe_src = RoadrunnerSyn.Path.domain + "/banner/" + parameters.key + '/?w=' + parameters.w + '&h=' + parameters.h;
          }
          
          var iframe = document.createElement("iframe");
          iframe.src = iframe_src;
          iframe.setAttribute("class", "roadrunner");
          iframe.setAttribute("width", parameters.w ? parameters.w : ( parameters.frame_width ? parameters.frame_width : "100%") );
          iframe.setAttribute("height" , parameters.h ? parameters.h : ( parameters.frame_height ? parameters.frame_height : "200" ) );
          iframe.setAttribute("frameBorder", "0");
          iframe.setAttribute("scrolling", "no");
          iframe.setAttribute("allowtransparency", "true");
          
          script_tag = this.findScriptTag( parameters["code"] );
          
          if( script_tag ){
            script_tag.parentNode.insertBefore( iframe, script_tag );
          }
          
          iframe.contentWindow.name = params;   
          
          script_tag.parentNode.removeChild( script_tag );
             
  },
  
  insertBanner : function( content, name ){
    var obj = document.createElement( "span" );
    obj.innerHTML = content;
    var script_tag = this.findScriptTag(name);
    
    if( script_tag ){
      script_tag.parentNode.insertBefore( obj, script_tag );

      
      var atag;
      for( var i = 0; i < obj.childNodes.length; i++){
        if( obj.childNodes[i].href != null ){ aTag = obj.childNodes[i]; }
      }
      
      var href = aTag.href;
      href += ( href.indexOf("?") > 0 ? "&" : "?" );
      href += RoadrunnerSyn.bannerData[ name ].params;
      aTag.href = href;
      
      if( typeof(RoadrunnerSyn.bannerData[ name ].click_handler) == "function" ){        
        aTag.onclick = function() { RoadrunnerSyn.bannerData[ name ].click_handler(this); }
      }
    }
  },
  
  findScriptTag : function(name) {
  
    var script_tags = document.getElementsByTagName( "script" );
    RoadrunnerSyn.log("looking for correct script tag with name= ", name);
    
    for( var i = 0; i < script_tags.length; i++) {

        if(  script_tags[i].getAttribute("name") == name )  {
          return script_tags[i];
        }
          
    }
    return null;
  },
  
  ready : function (){
    
    // Make sure that the DOM is not already loaded
		if ( !this.isReady ) {
			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
			if ( !document.body ) {
				return setTimeout( ready, 13 );
			}

			// Remember that the DOM is ready
			this.isReady = true;

			// If there are functions bound, to execute
			if ( this.readyList ) {
				// Execute all of them
				var params, i = 0;
				
				RoadrunnerSyn.log("ready functions: " +RoadrunnerSyn.readyList );
				
				while ( ( params = RoadrunnerSyn.readyList[ i++ ]) ) {
				  RoadrunnerSyn.log("ready calling function: " + params );
					RoadrunnerSyn.load( params );
				}
				
				//backwards compability - we do want this to be called
				if( RoadrunnerSyn.readyList.length === 0 ){
				  RoadrunnerSyn.Path.load();
				}

				// Reset the list of functions
				readyList = null;
			}

		}
  
  },
  
  bindReady: function() {
		if ( RoadrunnerSyn.readyBound ) {
			return;
		}

		RoadrunnerSyn.readyBound = true;

		// Catch cases where $(document).ready() is called after the
		// browser event has already occurred.
		if ( document.readyState === "complete" ) {
		  RoadrunnerSyn.log("readyBound called after document.readyState is completed. Calling RoadrunnerSyn.ready");
			return RoadrunnerSyn.ready();
		}

		// Mozilla, Opera and webkit nightlies currently support this event
		if ( document.addEventListener ) {
			// Use the handy event callback
			document.addEventListener( "DOMContentLoaded", RoadrunnerSyn.Handlers.DOMContentLoaded, false );
			
			// A fallback to window.onload, that will always work
			window.addEventListener( "load", RoadrunnerSyn.ready, false );

		// If IE event model is used
		} else if ( document.attachEvent ) {
			// ensure firing before onload,
			// maybe late but safe also for iframes
			document.attachEvent("onreadystatechange", RoadrunnerSyn.Handlers.DOMContentLoaded);
			
			// A fallback to window.onload, that will always work
			window.attachEvent( "onload", RoadrunnerSyn.ready );

			// If IE and not a frame
			// continually check to see if the document is ready
			var toplevel = false;

			try {
				toplevel = window.frameElement === null;
			} catch(e) {}

			if ( document.documentElement.doScroll && toplevel ) {
				RoadrunnerSyn.doScrollCheck();
			}
		}
	},
	
	
	
	doScrollCheck : function () {
    if ( RoadrunnerSyn.isReady ) {
      return;
    }
  
    try {
      // If IE is used, use the trick by Diego Perini
      // http://javascript.nwbox.com/IEContentLoaded/
      document.documentElement.doScroll("left");
    } catch( error ) {
      setTimeout( RoadrunnerSyn.doScrollCheck, 1 );
      return;
    }
  
    // and execute any waiting functions
    RoadrunnerSyn.ready();
  },
  
  log : function(params){
    
    if( typeof( console ) != "undefined" && RoadrunnerSyn.debug) { 
      var str = "";
      for( var i = 0; i < arguments.length; i++){
        console.info( params );
	  }
    }
  
  }
  
};

}

// Cleanup functions for the document ready method
if ( document.addEventListener ) {
  RoadrunnerSyn.Handlers.DOMContentLoaded = function() {
    document.removeEventListener( "DOMContentLoaded", RoadrunnerSyn.Handlers.DOMContentLoaded, false );
    RoadrunnerSyn.ready();
  };
} 
else if ( document.attachEvent ) {
  RoadrunnerSyn.Handlers.DOMContentLoaded = function() {
    // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
    if ( document.readyState === "complete" ) {
      document.detachEvent( "onreadystatechange", RoadrunnerSyn.Handlers.DOMContentLoaded );
      RoadrunnerSyn.ready();
    }
  };
}

RoadrunnerSyn.bindReady();


