function Grup(IdGrup,Ample,Altura)
{
        this.IdGrup=IdGrup;
        this.CelesAmple=Ample;
        this.CelesAltura=Altura;        
        this.ColMin =-1;
        this.FilaMin =-1;
        return this;
}

function GrupTemporal()
{
        this.IdGrup = -1;
        this.Tractat = false;
        this.FilaMin = -1;
        this.FilaMax = -1;
        this.ColumnaMin = -1;
        this.ColumnaMax = -1;
        return this;
}

function Cela(IdGrup,Fila,Columna)
{
        this.IdGrup=IdGrup;
        this.Fila=Fila;
        this.Columna=Columna;
        return this;
}

var Grups = new Array();
var Celes = new Array();
var GrupsTractats = new Array();
var Continguts = new Array();
var MatriuGrups;
var index = 0;

function InicialitzaGraella()
{
Grups = new Array();
Celes = new Array();
GrupsTractats = new Array();
Continguts = new Array();
index = 0;
}

// Omplo les dades a ma per fer proves, aixo ho fara la pagina jsp
//////////////////////////////////////////////////////////////////////////////////////////////
/*
index=0;

// Grup 5
Cel = new Cela(5,0,0);
Celes[index] = Cel;
index++;
Cel = new Cela(5,0,1);
Celes[index] = Cel;
index++;

// Grup 3
Cel = new Cela(3,0,2);
Celes[index] = Cel;
index++;

// Grup 8
Cel = new Cela(8,0,3);
Celes[index] = Cel;
index++;

// Grup 2
Cel = new Cela(2,1,0);
Celes[index] = Cel;
index++;
Cel = new Cela(2,1,1);
Celes[index] = Cel;
index++;

// Grup 0
Cel = new Cela(0,1,2);
Celes[index] = Cel;
index++;

// Grup 1
Cel = new Cela(1,1,3);
Celes[index] = Cel;
index++;

// Grup 6
Cel = new Cela(6,2,0);
Celes[index] = Cel;
index++;
Cel = new Cela(6,3,0);
Celes[index] = Cel;
index++;

// Grup 4
Cel = new Cela(4,2,1);
Celes[index] = Cel;
index++;
Cel = new Cela(4,3,1);
Celes[index] = Cel;
index++;

// Grup 7
Cel = new Cela(7,2,2);
Celes[index] = Cel;
index++;
Cel = new Cela(7,2,3);
Celes[index] = Cel;
index++;
Cel = new Cela(7,3,2);
Celes[index] = Cel;
index++;
Cel = new Cela(7,3,3);
Celes[index] = Cel;
index++;
*/
//////////////////////////////////////////////////////////////////////////////////////////////
// Fi Omplir Dades


function InsertarCela(IdGrup, Fila, Columna)
{
        Cel = new Cela(IdGrup,Fila,Columna);
        Celes[index] = Cel;
        index++;
}

function InsertarContingut(IdGrup, Contingut)
{
        Continguts[IdGrup] = Contingut;
}

function CrearMatriuGrups(Files,Columnes)
{
        MatriuGrups = new Array(Files);
        for (i=0;i<Files;i++)
        {
                MatriuGrups[i] = new Array(Columnes);
                //for (j=0;j<Columnes;j++)
                //{
                //      MatriuGrups[i][j] = new GrupTemporal();
                //}
        }
}

function CrearGrupsTractats(NumGrups)
{
        for (i=0;i<NumGrups;i++)
        {
                GrupsTractats[i] = new GrupTemporal();
        }
}

function OmplirMatriuGrups()
{
        for (i=0;i<Celes.length;i++)
        {
                Fila = Celes[i].Fila;
                Columna = Celes[i].Columna;
                IdGrup = Celes[i].IdGrup;
                
                MatriuGrups[Fila][Columna] = IdGrup;
                
                if ( (GrupsTractats[IdGrup].FilaMin == -1) || (Fila < GrupsTractats[IdGrup].FilaMin) )
                        GrupsTractats[IdGrup].FilaMin = Fila;
                if ( (GrupsTractats[IdGrup].FilaMax == -1) || (Fila > GrupsTractats[IdGrup].FilaMax) )
                        GrupsTractats[IdGrup].FilaMax = Fila;

                if ( (GrupsTractats[IdGrup].ColumnaMin == -1) || (Columna < GrupsTractats[IdGrup].ColumnaMin) )
                        GrupsTractats[IdGrup].ColumnaMin = Columna;
                if ( (GrupsTractats[IdGrup].ColumnaMax == -1) || (Columna > GrupsTractats[IdGrup].ColumnaMax) )
                        GrupsTractats[IdGrup].ColumnaMax = Columna;
//alert("MatriuGrups[" + Fila + "][" + Columna + "] : Idgrup=" + MatriuGrups[Fila][Columna] + " FilaMin=" + GrupsTractats[IdGrup].FilaMin + " FilaMax=" + GrupsTractats[IdGrup].FilaMax + " ColumnaMin=" + GrupsTractats[IdGrup].ColumnaMin + " ColumnaMax=" + GrupsTractats[IdGrup].ColumnaMax);
        }
}

function OmplirGrups(Files,Columnes)
{
        IndexGrup = 0;
        for (i=0;i<Files;i++)
        {
                for (j=0;j<Columnes;j++)
                {
                        IdGrup = MatriuGrups[i][j];
//alert(IdGrup);
                        if ( !GrupsTractats[IdGrup].Tractat )
                        {
                                Amplada = GrupsTractats[IdGrup].ColumnaMax - GrupsTractats[IdGrup].ColumnaMin + 1;
//alert(GrupsTractats[IdGrup].ColumnaMax + " " + GrupsTractats[IdGrup].ColumnaMin);
                                Altura = GrupsTractats[IdGrup].FilaMax - GrupsTractats[IdGrup].FilaMin + 1;
                                GrupAux = new Grup(IdGrup,Amplada,Altura);
                                GrupAux.ColMin = GrupsTractats[IdGrup].ColumnaMin;
                                GrupAux.FilaMin = GrupsTractats[IdGrup].FilaMin ;
                                Grups[IndexGrup] = GrupAux;                             
                                GrupsTractats[IdGrup].Tractat = true;
                                IndexGrup++;                            
                        }
                }
        }
}

/*
function CrearGraella(Files,Columnes, AmpleCela, AlturaCela)
{
        NumGrup = 0;
        NumGrups = Grups.length;
        Amplada = Columnes * AmpleCela;
        Altura = Files * AlturaCela;
        taula = "<table align=\"center\" cellspacing=\"1\" cellpadding=\"0\">";
        i=0;
        j=0;
        while ( NumGrup<NumGrups )      
        {
                GrupTemp = Grups[NumGrup];
                CelesAmple = GrupTemp.CelesAmple;
                CelesAltura = GrupTemp.CelesAltura;
                if ( j==0 )
                {       
                        taula = taula + "<tr>";
                        AlturaMinima = -1;
                }
                //rowspan = CelesAltura;
                //colspan = CelesAmple;
                Amplada = (AmpleCela * CelesAmple) + (CelesAmple - 1);
                Altura = (AlturaCela * CelesAltura) + (CelesAltura - 1);
                taula = taula + "<td align=\"center\" valign=\"middle\" width=\"" + Amplada + "\" height=\"" + Altura + "\" bgcolor=\"#EEEEFF\" colspan=\"" + CelesAmple + "\" rowspan=\"" + CelesAltura + "\">";

                // Codi html que volem posar dins la cel-la
                //taula = taula + NumGrup;
                taula = taula + Continguts[GrupTemp.IdGrup];
                // Fi codi html
                
                taula = taula + "</td>";
                j=j+CelesAmple;
                if ( (AlturaMinima==-1) || (CelesAltura < AlturaMinima) )
                {
                        AlturaMinima = CelesAltura;
                }
                if ( j >= Columnes )
                {
                        taula = taula + "</tr>";
                        if (AlturaMinima > 1)
                        {
                                for(m=1;m<AlturaMinima;m++)
                                {
                                        taula = taula + "<tr></tr>";
                                }
                        }
                        j=0;
                }
                NumGrup++;
        }
        taula = taula + "</table>";
        
        return(taula);
}
*/

function CrearGraella(Files,Columnes, AmpleCela, AlturaCela)
{
        NumGrup = 0;
        NumGrups = Grups.length;
        Amplada = Columnes * AmpleCela;
        Altura = Files * AlturaCela;
        taula = "<table align=\"center\" cellspacing=\"1\" cellpadding=\"0\" border=\"0\" margin=\"0\">";
        
        for(i=0;i<Files;i++)
        {
                taula = taula + "<tr>";
                //if (bw.ie)
                        taula = taula + "<td width=\"0\" height=\"" + AlturaCela + "\" border=\"0\" colspan=\"1\" rowspan=\"1\"></td>";
                for(j=0;j<Columnes;j++)
                {
                        // Reutilitzem MatriuGrups per saber si ja hem tractat cada casella
                        if (MatriuGrups[i][j] != -1)
                        {
                                GrupTemp = Grups[NumGrup];
                                CelesAmple = GrupTemp.CelesAmple;
                                CelesAltura = GrupTemp.CelesAltura;
                                Amplada = (AmpleCela * CelesAmple) + (CelesAmple - 1);
                                Altura = (AlturaCela * CelesAltura) + (CelesAltura - 1);
                                taula = taula + "<td align=\"center\" valign=\"middle\" width=\"" + Amplada + "\" height=\"" + Altura + "\" bgcolor=\"#EEEEFF\" colspan=\"" + CelesAmple + "\" rowspan=\"" + CelesAltura + "\">";
                                //taula = taula + "<td align=\"center\" valign=\"middle\" width=\"" + Amplada + "\" height=\"" + Altura + "\" bgcolor=\"#00FF00\" colspan=\"" + CelesAmple + "\" rowspan=\"" + CelesAltura + "\">";

                                // Codi html que volem posar dins la cel-la
                                //taula = taula + NumGrup;
                                taula = taula + Continguts[GrupTemp.IdGrup];
                                // Fi codi html
                                taula = taula + "</td>";
                                NumGrup++;
                                // Marquem totes les celes del grup per no tractar-les
                                for(k=0;k<CelesAltura;k++)
                                {
                                        for(l=0;l<CelesAmple;l++)
                                        {
                                                MatriuGrups[i+k][j+l] = -1;
                                        }
                                }
                        }
                }
                taula = taula + "</tr>";
        }

        //if (bw.ie)
        //{
        
                taula = taula + "<tr>";
                for(j=0;j<Columnes+1;j++)
                {
                                if (j==0)
                                        taula = taula + "<td width=\"0\" height=\"0\" border=\"0\" colspan=\"1\" rowspan=\"1\"></td>";
                                else
                                        taula = taula + "<td width=\"" + AmpleCela + "\" height=\"0\" border=\"0\" colspan=\"1\" rowspan=\"1\"></td>";
                }
                taula = taula + "</tr>";

        //}

        taula = taula + "</table>";
        taula = taula + "<center></center>"; // Xapussa perque es vegin be les taules posades dinamicament en capes en l'explorer del MAC
        
        return(taula);
}

function ConstruirGraella(Files,Columnes, AmpleCela, AlturaCela,NumGrups)
{
        // Quan es crida aquesta funcio, la pagina jsp ja ha d'haver omplert l'array Celes
        CrearMatriuGrups(Files,Columnes);
        CrearGrupsTractats(NumGrups);
        OmplirMatriuGrups();
        OmplirGrups(Files,Columnes);
        
        taula = CrearGraella(Files,Columnes, AmpleCela, AlturaCela);
        return(taula);
}
