/* 
   Definicion de la clase BannerManager.Constructor
   @param             urlservidor  direccion del servidor de banners
 */ 
function BannerManager(urlservidor) {
    BannerManager.prototype.urlservidor = urlservidor;    
}

/*
   Devuelve el codigo de llamada a una determinada zona en openads
   @param zonaid identificador de la zona en openads
 */
BannerManager.prototype.getUrl = 
function (zonaid) {
    if (!document.phpAds_used) document.phpAds_used = ',';
    phpAds_random = new String(Math.random()); phpAds_random = phpAds_random.substring(2,11);
    var   url = ""+BannerManager.prototype.urlservidor+"/adjs.php?n=" + phpAds_random ;
    url +="&what=zone:"+zonaid;
    url +="&exclude="+document.phpAds_used;
    
    if (document.referrer)
        url +="&referer=" + document.referrer;
    return url;
}

/*
    Devuelve el script generado por openads para imprimirlo y realizar la llamada de manera
    bloqueante
   @param zonaid identificador de la zona en openads
 */
BannerManager.prototype.getBannerCode = 
function (zonaid) {
    if (!document.phpAds_used) document.phpAds_used = ',';
    phpAds_random = new String(Math.random()); phpAds_random = phpAds_random.substring(2,11);
    var code = "<" + "script language='JavaScript' type='text/javascript' src='";
    code +=""+BannerManager.prototype.urlservidor+"/adjs.php?n=" + phpAds_random;
    code +="&amp;what=zone:"+zonaid;
    code +="&amp;exclude=" + document.phpAds_used;
    if (document.referrer)
        code +="&amp;referer=" + escape(document.referrer);
    code +="'><" + "/script>";
    return code;
}

BannerManager.prototype.getBanner 
= function(zonaid,elementoid,asyncronous,refreshtime,enableajaxeffect,ajaxeffect){
    //alert(""+zonaid+","+elementoid+","+asyncronous+","+refreshtime+","+enableajaxeffect+","+ajaxeffect);
    
    if(asyncronous) {
        // Obtenemos el codigo por AJAX. Llamada NO bloqueante
        
        // ocultamos el banner antiguo
        if (enableajaxeffect) {
            if (ajaxeffect == 'ocultar') {
                Element.hide(elementoid); 
            } else if (ajaxeffect == 'replegar') {
                new Effect.Fold(document.getElementById(elementoid),{duration:0.4});
            } else if (ajaxeffect == 'iluminar') {
                // No ocultamos
            } else {
                // Efecto por defecto
                Element.hide(elementoid); 
            }
        }
        
        var sUrl       = "bridge?url="+escape(BannerManager.prototype.getUrl(zonaid));
        var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, {success:BannerManager.prototype.handleSuccessGroups,
        argument: 
        {url:sUrl,                                  // url para obtener el banner
         zonaid:zonaid,                     //  identificador de la zona de openads
         elementoid:elementoid,      // identificador del elemento donde vamos a insertar el banner
         asyncronous:asyncronous, // flag que determina si el banner va a ser obtenido sincrona o asincronamente
         refreshtime:refreshtime,       // tiempo en milisegundos hasta la siguiente recarga 
         enableajaxeffect:enableajaxeffect, // habilita efecto ajax
         ajaxeffect:ajaxeffect // tipos de efectos. Debe estar enableajaxeffect a true. [ocultar,replegar,iluminar]
        }
        });
    }else{
        // Simplemente imprimimos el codigo de llamada del banner. La llamada sera bloqueante
        document.write(this.getBannerCode(zonaid));
    }
}

/*
    Manejador de la llamada cuando se recibe la respuesta
 */            
BannerManager.prototype.handleSuccessGroups 
= function(o){
    
    var zonaid                   = o.argument['zonaid'];
    var elementoid           = o.argument['elementoid'];
    var asyncronous        = o.argument['asyncronous'];
    var enableajaxeffect =  o.argument['enableajaxeffect'];
    var ajaxeffect             =  o.argument['ajaxeffect'];
    var refreshtime          = -1;
    
    // respuesta ok  (HTTP-CODE=200)
    
    if(o.responseText !== undefined){
        // obtenemos el elemento donde se va a empotrar el banner
        var div=document.getElementById(elementoid);
        // obtenemos la respuesta
        var aux = o.responseText;
        // buscamos en la respuesta la orden document.write a eliminar ya que de otra manera
        // se elimina el contenido anterior de la pagina
        var index = aux.lastIndexOf("document.write");
        
        // se ha encontrado coincidencia
        if((index)&&(index>0)) {
            // eliminamos esa parte de la respuesta
            aux = aux.substring(0,index)
            // hacemos pasar al evaluador de javascript para que interprete la respuesta, ya que openads
            // declara primero una variable y luego le asigna  el codigo html del banner
            aux = eval(unescape(aux));
            // insertamos el html puro en el elemento de respuesta (elementoid)
            if(aux !== undefined){
                // Existe un banner linkado a esa zona
                div.innerHTML = aux;
            }
        }
        
        if(o.argument['refreshtime']){
            refreshtime = o.argument['refreshtime'];
        }
        
        
        if (enableajaxeffect) {
            if(ajaxeffect == 'ocultar') {
                new Effect.Appear(elementoid);    
            } else if (ajaxeffect == 'replegar') {
                setTimeout("Effect.Appear('"+elementoid+"', {duration:.3})",2500);
            } else if (ajaxeffect == 'iluminar') {
                new Effect.Highlight(elementoid,{duration:1.0}); 
            } else {
                // Default
                new Effect.Appear(elementoid);    
            }
        }
        
        // buena
        //var call = "BannerManager.prototype.getBanner(2,'banner1','http://openads.masterd.es',true)";
        //var call = "BannerManager.prototype.getBanner("+zonaid+",'"+elementoid+"','"+urlservidor+"',"+asyncronous+")";
        
        var call = "BannerManager.prototype.getBanner("+zonaid+",'"+elementoid+"',"+asyncronous+","+refreshtime+","+enableajaxeffect+",'"+ajaxeffect+"')";
        if(refreshtime != -1) {
            setTimeout(call,refreshtime);
        }
    }
}
