/* 
   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
            var divZona = document.getElementById(zonaid);
            if(divZona != null) {
                divZona.innerHTML = 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);
            }
        }
    }
