var ie=document.all;
var nn6=document.getElementById&&!document.all;

function THuecos(numHuecos, idEjercicio)
{
    // LA PRIMERA OPCION VA CON LA CON EL SEGUNDO HUECO		
    
    this.numHuecos = numHuecos;
    this.idEjercicio = idEjercicio;
    this.isdrag=false;
    this.x=0;
    this.y=0;
    this.dobj="";
    this.idObjeto="";
    this.tx=0;
    this.ty=0;
    this.encimaDeAlguno = false;
    this.encimaDeAnterior = false;
    this.xIni=null;
    this.yIni=null;    
    this.innerInicial=document.getElementById("contenedorOpciones_ej_"+idEjercicio).innerHTML;
    
    this.resultado = new Array(this.numHuecos);
    for(var i=0; i < this.numHuecos ;i++)
            this.resultado[i] = false;	

    this.huecoOcupado = new Array(this.numHuecos);
    for(var i=0; i<this.numHuecos;i++)
            this.huecoOcupado[i] = -1;

    this.xyIni = new Array(this.numHuecos);
    for(var i=0; i<this.numHuecos;i++)
        {
            this.xyIni[i] = new Array(2);
            this.xyIni[i][0]=null;  //x
            this.xyIni[i][1]=null;  //y
        }
    
    for(var i=1;i<=this.numHuecos;i++)
    {
        document.getElementById("cart_"+i+"_ej_"+this.idEjercicio).style.paddingRight = "0px";
        document.getElementById("cart_"+i+"_ej_"+this.idEjercicio).style.paddingLeft = document.getElementById("palabra_"+i+"_ej_"+this.idEjercicio).clientWidth-3 + "px";
    }   
    
    /*document.onmousedown=this.selectmouse;
    document.onmouseup=this.comprobarFin;*/


    this.getElementsByClassName = function(oElm, strTagName, strClassName)
    {
            var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
            var arrReturnElements = new Array();
            strClassName = strClassName.replace(/-/g, "\-");
            
            var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
            var oElement;
            for(var i=0; i<arrElements.length; i++){
                    oElement = arrElements[i];
                    if( oRegExp.test(oElement.className) && oElement.id.split("ej_")[1] == this.idEjercicio )
                    {
                            arrReturnElements.push(oElement);
                    }
            }
            return (arrReturnElements)
    }


    this.movemouse = function(e)
    {

        //alert(this.isdrag);
        
      if (this.isdrag==true)
      {
         // alert("drag");
            var dentroDeAlguno = false;
            var xxx,yyy;

            if (self.pageYOffset) // all except Explorer
            {
                    xxx = self.pageXOffset;
                    yyy = self.pageYOffset;
            }
            else if (document.documentElement && document.documentElement.scrollTop)
                    // Explorer 6 Strict
            {
                    xxx = document.documentElement.scrollLeft;
                    yyy = document.documentElement.scrollTop;
            }
            else if (document.body) // all other Explorers
            {
                    xxx = document.body.scrollLeft;
                    yyy = document.body.scrollTop;
            }
            
            window.status = pepe1 + " * " + pepe2 + " ** " + this.dobj.style.left + " * " + this.dobj.style.top + " ... " + xxx + " * " + yyy;

            var pepe1 = nn6 ? e.clientX : event.clientX;
            var pepe2 = nn6 ? e.clientY : event.clientY;


            var posX = nn6 ? e.clientX : event.clientX;
            var posY = nn6 ? e.clientY : event.clientY;

            this.dobj.style.left = nn6 ? (e.clientX-this.dobj.offsetWidth/2+xxx)+"px" : (event.clientX-this.dobj.offsetWidth/2+xxx)+"px";
            this.dobj.style.top  = nn6 ? (e.clientY-this.dobj.offsetHeight/2+yyy)+"px" : (event.clientY-this.dobj.offsetHeight/2+yyy)+"px";

            
            // COMPROBAMOS SI ESTAMOS ENCIMA DE ALGUN DIV
            var objetosArrastrables = this.getElementsByClassName(document, "*", "dragme");

            for(var i=1; i <= objetosArrastrables.length; i++)
            {
                var hueco = document.getElementById("cart_" + i + "_ej_"+this.idEjercicio);
                var pepe = this.findPos(hueco);
                var xx = pepe[0];
                var yy = pepe[1];
                var tamX = this.dobj.offsetWidth + xx;
                var tamY = this.dobj.offsetHeight + yy;

                // COMPROBAMOS SI HA CAIDO EN EL HUECO I
                if(posX >= (xx-xxx) && posX <= (tamX-xxx))
                {
                        //alert("posX es " + posX + " y tamX es " + tamX);
                        //alert("esta dentro de la posicion X"); 
                        if(posY >= (yy-yyy) && posY <= (tamY-yyy))
                        {
                                window.status = "estamos encima del hueco " + i;
                                //alert("Estamos encima del HUECO " + i);
                                dentroDeAlguno = true;
                                hueco.style.background = "#003399";
                                this.encimaDeAlguno = i;
                                
                                if(this.huecoOcupado[i-1]==-1) 
                                       window.status+=" El hueco estaba vacio";
                                else 
                                    window.status+="El hueco NO estaba vacio, ocupado por "+this.huecoOcupado[i-1];
                                
                                // DESHABILITAMOS LOS DEMAS
                                for(var j=1; j < objetosArrastrables.length+1; j++){
                                        if(j!=i){
                                                document.getElementById("cart_"+j+"_ej_"+this.idEjercicio).style.background = "#E8EFFF";
                                        }
                                }
                        }
                }
        }


                    if(dentroDeAlguno == false){
                            var aux = document.getElementById("cart_"+this.encimaDeAlguno+"_ej_"+this.idEjercicio);
                            if(aux!=null)
                                    aux.style.background = "#E8EFFF";
                    }



        return false;
      }

      return false;
    }
    
    
    this.selectmouse = function(e) 
    {

    /*for(var i=0; i < this.numHuecos ;i++)
            this.resultado[i] = false;	*/        
        
      var fobj       = nn6 ? e.target : event.srcElement;
      var topelement = nn6 ? "HTML" : "BODY";

      
      
      
            if(fobj != undefined) 
            {

                    //alert(fobj + " * " + fobj.className + " * " + fobj.tagName);

              while (fobj.className != "" && fobj.className != "dragme" && fobj.tagName != topelement )
              {
                fobj = nn6 ? fobj.parentNode : fobj.parentElement;
              }

              if (fobj.className=="dragme")
              {
  
                fobj.style.position = "absolute";	
                //alert("dragme");
                this.idObjeto = fobj.getAttribute("id");
                this.isdrag = true;
                this.dobj = fobj;
                
                this.dobj.style.zIndex=100;
                
                document.getElementById(this.idObjeto).style.background = "#E8EFFF";
                document.getElementById(this.idObjeto).style.border = "1px solid #003399";
                //document.getElementById("cart_" + i + "_ej_"+this.idEjercicio).style.background = "#E8EFFF";
                
                var posicion = this.idObjeto.split("_")[1] -1;

                //alert(posicion);
                if( this.xyIni[posicion][0] == null )
                {
                    this.xyIni[posicion][0] = this.dobj.offsetLeft;
                    this.xyIni[posicion][1] = this.dobj.offsetTop;                    
                }
                
                window.status = this.xyIni[posicion][0] + " " + this.xyIni[posicion][1];
                this.tx = parseInt(this.dobj.style.left+0);
                this.ty = parseInt(this.dobj.style.top+0);
                this.x = nn6 ? e.clientX : event.clientX;
                this.y = nn6 ? e.clientY : event.clientY;
                //dobj.style.zIndex ++ ;
                
                //document.onmousemove=movemouse;
                //fobj.movemouse(e);
                
                //evento=e;
                
                //document.onmousemove=eval("huecos_"+idEjercicio+".movemouse");
           
                //document.onmousemove = this.movemouse(window.event);
                document.onmousemove=function (event) 
                {
                         eval("huecos_"+idEjercicio+".movemouse(event)");
                };
                            
                //this.movemouse(e);
                
                return false;
              }

            }


      return false;

    }
    
    
    this.comprobarFin = function(e)
    {

            if(this.isdrag == false)
                    return false;

            this.isdrag = false;
            this.dobj.style.zIndex=1;
            
            var posX = nn6 ? e.clientX : event.clientX;
            var posY = nn6 ? e.clientY : event.clientY;

            var dentroDeAlguno = false;

            var objetosArrastrables = this.getElementsByClassName(document, "*", "dragme");

            var posicion;
            
            for(var i=1; i <= objetosArrastrables.length; i++)
            {	
                    posicion = this.idObjeto.split("_")[1] - 1;
                    
                    var hueco = document.getElementById("cart_" + i + "_ej_"+this.idEjercicio);
                    var pepe = this.findPos(hueco);
                    var x = pepe[0];
                    var y = pepe[1];
                    var tamX = hueco.offsetWidth + x;
                    var tamY = hueco.offsetHeight + y;

                    // COMPROBAMOS SI HA CAIDO EN EL HUECO I

                    var xxx,yyy;
                    if (self.pageYOffset) // all except Explorer
                    {
                            xxx = self.pageXOffset;
                            yyy = self.pageYOffset;
                    }
                    else if (document.documentElement && document.documentElement.scrollTop)
                            // Explorer 6 Strict
                    {
                            xxx = document.documentElement.scrollLeft;
                            yyy = document.documentElement.scrollTop;
                    }
                    else if (document.body) // all other Explorers
                    {
                            xxx = document.body.scrollLeft;
                            yyy = document.body.scrollTop;
                    }

                    if(posX >= (x-xxx) && posX <= (tamX-xxx))
                    {			
                            if(posY >= (y-yyy) && posY <= (tamY-yyy))
                            {

                                    
                                    //Si el hueco está ocupado hacemos un intercambio
                                    /*if( this.huecoOcupado[i-1] != -1 )
                                    {
                                        window.status = "DEJAMOS EN LA OPCION " + i;
                                        dentroDeAlguno = true;
                                        
                                        document.getElementById(this.huecoOcupado[i-1]).style.top = document.getElementById(this.idObjeto).style.top+"px";
                                        document.getElementById(this.huecoOcupado[i-1]).style.left = document.getElementById(this.idObjeto).style.left+"px";
                                        
                                        document.getElementById(this.idObjeto).style.top = y + "px";
                                        document.getElementById(this.idObjeto).style.left = x + "px";   
                                        
                                        var opcion = parseInt(this.idObjeto.substring(this.idObjeto.indexOf('_')+1, this.idObjeto.length));
                                        
                                        window.status = "dejamos en hueco " + i + " la opcion " + opcion;

                                        if(i == opcion) {
                                                this.resultado[opcion] = "true";
                                        }
                                        else {
                                                this.resultado[opcion] = "false";
                                        }  
                                        
                                        var opcion2 = parseInt(this.huecoOcupado[i-1].substring(this.huecoOcupado[i-1].indexOf('_')+1, this.huecoOcupado[i-1].length));
                                        
                                        window.status = "dejamos en hueco " + i + " la opcion " + opcion2;

                                        if(i == opcion2) {
                                                this.resultado[opcion2] = "true";
                                        }
                                        else {
                                                this.resultado[opcion2] = "false";
                                        }                                          
                                    }
                                     else
                                     */
                                
                                    //FALTA POR HACER EL SWAP ANTES DEL IF
                                
                                    if(this.huecoOcupado[i-1] == -1 || this.huecoOcupado[i-1]==this.idObjeto)
                                    {
                                        window.status = "DEJAMOS EN LA OPCION " + i;
                                        dentroDeAlguno = true;

                                        // CENTRAMOS EL DRAGME
                                        document.getElementById(this.idObjeto).style.top = y + "px";
                                        document.getElementById(this.idObjeto).style.left = x + "px";

                                        var opcion = parseInt(this.idObjeto.substring(this.idObjeto.indexOf('_')+1, this.idObjeto.length));

                                        window.status += this.huecoOcupado[i-1];                                        
                                        
                                        
                                        for(var j=0;j<this.numHuecos;j++)
                                        {
                                            if( this.huecoOcupado[j] == this.idObjeto )
                                            {
                                                this.huecoOcupado[j]=-1;
                                                this.resultado[j]="false";
                                            }
                                        }                                        
                                        
                                        
                                        this.huecoOcupado[i-1] = this.idObjeto;
                                        
                                        window.status = "dejamos en hueco " + i + " la opcion " + opcion;
                                        
                                        document.getElementById(this.idObjeto).style.background = "none";
                                        document.getElementById(this.idObjeto).style.border = "none";
                                        document.getElementById("cart_" + i + "_ej_"+this.idEjercicio).style.background = "#E8EFFF";
                                        
                                        if(i == opcion) {
                                                this.resultado[opcion-1] = "true";
                                        }
                                        else {
                                                this.resultado[opcion-1] = "false";
                                        } 
                                        
                                    }
                            }
                    }

            }


            if(dentroDeAlguno == false)
            {
                    if(this.idObjeto != undefined)
                    {
                                    var pepe = this.findPos(this.idObjeto);
                                    var x = pepe[0];
                                    var y = pepe[1];
                                    window.status = "Su pos inicial era " + x + " " + y;
                                    
                                    posicion = this.idObjeto.split("_")[1] - 1;
                                    
                                    for(var i=0;i<this.numHuecos;i++)
                                    {
                                        if( this.huecoOcupado[i]==this.idObjeto )
                                        {
                                            this.huecoOcupado[i]=-1;
                                            this.resultado[i]="false";
                                        }
                                    }
                                        

                                    document.getElementById(this.idObjeto).style.left = this.xyIni[posicion][0] + "px";
                                    document.getElementById(this.idObjeto).style.top = this.xyIni[posicion][1] + "px";
                    }
            }


            this.idObjeto = undefined;

            return false;

    }

    this.cambiaTipoCorrecion = function(tipoCorrec)
    {
            tipoCorreccion = tipoCorrec;
    }

    this.muestraPuntuacion = function()
    {
            for(var i=1 ; i <= this.numHuecos; i++)
            {
                    var opcion = document.getElementById("hueco"+i);
                    if(this.resultado[i-1] == "true")
                    {
                            //new Effect.Highlight("palabra_"+i+"_ej_"+this.idEjercicio, {startcolor:'#00FF7F', endcolor:'#E8EFFF'});
                            new Effect.Highlight("cart_"+i+"_ej_"+this.idEjercicio, {startcolor:'#00FF7F', endcolor:'#E8EFFF'});                            
                    }	
                    else
                    {
                            //new Effect.Highlight("palabra_"+i+"_ej_"+this.idEjercicio, {startcolor:'#FF7700', endcolor:'#E8EFFF'});
                            new Effect.Highlight("cart_"+i+"_ej_"+this.idEjercicio, {startcolor:'#FF7700', endcolor:'#E8EFFF'}); 
                    }
            }
    }
    
    
    
    this.findPos = function(obj) 
    {
            var curleft = curtop = 0;
            if (obj.offsetParent) {
                    curleft = obj.offsetLeft
                    curtop = obj.offsetTop
                    while (obj = obj.offsetParent) {
                            curleft += obj.offsetLeft;
                            curtop += obj.offsetTop;
                    }
            }

            return [curleft,curtop];
    }

    this.reset = function() 
    {
        document.getElementById("contenedorOpciones_ej_"+idEjercicio).innerHTML = this.innerInicial;
        
        this.isdrag=false;
        this.x=0;
        this.y=0;
        this.dobj="";
        this.idObjeto="";
        this.tx=0;
        this.ty=0;
        this.encimaDeAlguno = false;
        this.encimaDeAnterior = false;
        this.xIni=null;
        this.yIni=null;    

        this.resultado = new Array(this.numHuecos);
        for(var i=0; i < this.numHuecos ;i++)
                this.resultado[i] = false;	

        this.huecoOcupado = new Array(this.numHuecos);
        for(var i=0; i<this.numHuecos;i++)
                this.huecoOcupado[i] = -1;

        this.xyIni = new Array(this.numHuecos);
        for(var i=0; i<this.numHuecos;i++)
            {
                this.xyIni[i] = new Array(2);
                this.xyIni[i][0]=null;  //x
                this.xyIni[i][1]=null;  //y
            }

        for(var i=1;i<=this.numHuecos;i++)
        {
            document.getElementById("cart_"+i+"_ej_"+this.idEjercicio).style.paddingRight = "0px";
            document.getElementById("cart_"+i+"_ej_"+this.idEjercicio).style.paddingLeft = document.getElementById("palabra_"+i+"_ej_"+this.idEjercicio).clientWidth-3 + "px";
        }         
        
        
        
    }    
    
}






