/*!
 * Camping.js
 * http://the-cocktail.com
 *
 * Copyright 2011, The Cocktail 
 * Date: 31/05/2011
 */
 

 /* 
  Uso:
    
    - Cargar camping.min.js
      <script src="/javascripts/camping/camping.min.js" type="text/javascript" charset="utf-8"></script>
      
    - Despues, cargar el gas para el camping; Los js de datos que se quieran usar (gas.tag_identificador.js);
      <script src="/javascripts/camping/gas.mayo2011.js" type="text/javascript" charset="utf-8"></script>
 */
 


//Global variables stablished for Google Adwords
var google_conversion_id = null, google_conversion_language = "es", google_conversion_format = null, google_conversion_color = "ffffff", google_conversion_label = null, google_conversion_value = 0;

var camping = {
  
  // STATICS
  initialized : false,
  host : (document.location.protocol+'//'+document.location.host + document.location.pathname ),
  utm : {},
  data : [],
  cookies : document.cookie,
  pixels : [],
  
  
  // PRIVATED
  _codePixelFor : {
    
    mediacom : function( pixel ){
      var ebRand = Math.random()+''*1000000;
      return 'HTTP://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&amp;ActivityID='+pixel[ camping.utm.ccn ][ camping.utm.cmd ].activity_id+'&amp;rnd=' + ebRand;
    },
    make : function( pixel ){
      var aid = camping._param('aid') || camping._cookie('aid');
      google_conversion_id = pixel[aid].conversion_id;
      google_conversion_label = pixel[aid].conversion_label;
      google_conversion_format = pixel[aid].conversion_format;
      
      return 'http://www.googleadservices.com/pagead/conversion.js';
    }
    
  },
  
  _buildPixelFor : {
    mediacom : function( pixel_data ){
      var exists = pixel_data[ camping.utm.ccn ] && pixel_data[ camping.utm.ccn ][ camping.utm.cmd ];
      return exists ? true : false;
      
    },
    
    make : function( pixel_data ){
      var aid = camping._param('aid') || camping._cookie('aid');
      return pixel_data[aid] ? true : false;
    }
  },
  
  _suckData : function( data ){
    camping.data[ camping.data.length ] = data ;
  },
  
  _param : function( name ){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    
    return ( results  == null ) ? false : results[1];
    
  },
  
  _cookie : function( name ){
     //var original_name = name;
     //name += '=';
     //var parts = document.cookie.split(/;\s*/);
     //for (var i = 0; i < parts.length; i++){
     //  var part = parts[i];
     //  if (part.indexOf(name) == 0)
     //    return part.substring(name.length)
     //}
     
     var regex = new RegExp(name+"=(.*?)[|;]")
     regex = regex.exec(document.cookie);
      
     return (regex != null ) ? regex[1] : false;
  },
  
  _campaignGroupDataIteration : function( callback ){
    for (var i=0; i < camping.data.length; i++) {
      if (callback && typeof callback == 'function') {
        callback( camping.data[i] );
      };
    };
  },
  
  _checkIfUrlHasCampaign : function( data ){
     // alert('_checkIfUrlHasCampaign: camping.host' +camping.host);
    if (data[ camping.host ]) {
      // alert('_checkIfUrlHasCampaign: hasCampaign');
      for (var provider in data[ camping.host ]) {
        camping._buildPixel( provider,  data[ camping.host ][ provider ]);
      };
    };
  },
  
  _buildPixel : function(provider, pixel_data){
     // alert('buildPixel for '+ provider);
    if ( camping._buildPixelFor[ provider ]( pixel_data ) ) {
      camping.pixels.push( camping._codePixelFor[ provider ]( pixel_data ) );
       // alert('buildPixel for provider : OK'  );
    };
    
  },
  
  _appendPixel : function(src){

    var s = document.getElementsByTagName('script')[document.getElementsByTagName('script').length-1];
    var ns = document.createElement('script'); 
    ns.src = src;
    s.parentNode.insertBefore(ns, s);
  },
  
  
  // PUBLIC
  init : function(){
    camping.initialized = true;
    
    camping.utm.ccn = this._param('utm_campaign') || camping._cookie('utmccn');
    camping.utm.cmd = this._param('utm_medium') || camping._cookie('utmcmd');
    
    camping._campaignGroupDataIteration( camping._checkIfUrlHasCampaign );
    
    for (var i = camping.pixels.length - 1; i >= 0; i--){
      camping._appendPixel( camping.pixels[i] );
    };
    
  }
 
}

