//két tömb rendezése a paraméterként kapott első tömb alapján
function multisort(tomba, tombb){    
    for(var i=0; i<tomba.length; i++){
		for(var j=i+1; j<tomba.length; j++){
			if(Number(tomba[i]) > Number(tomba[j])){
			    //a tomb rendezése
				tempValue = tomba[j];	
				tomba[j] = tomba[i];
				tomba[i] = tempValue;
                //b tömb rendezése a tömb szerint
				tempValue = tombb[j];	
				tombb[j] = tombb[i];
				tombb[i] = tempValue;
			}//if
		}//for j
	}//for i    
    return new Array(tomba, tombb);
}//multisort

//az egymás után következő azonos értéktömb elemek szerint rendezze 
//sorba az index tömböt és mozgassa vele az értéktömböt is
function indexsort(t_ertek, t_ndx){
    for(var i=0; i<t_ertek.length; i++){
        var j=i+1;
        while(j<t_ertek.length&&t_ertek[i]==t_ertek[j]){
            if(Number(t_ndx[i])>Number(t_ndx[j])){
                tempv = t_ertek[j];
                t_ertek[j] = t_ertek[i];
                t_ertek[i] = tempv;
                tempv = t_ndx[j];
                t_ndx[j] = t_ndx[i];
                t_ndx[i] = tempv;                
            }//if
            j++;
        }//while
    }//for i
    return new Array(t_ertek, t_ndx);
}//indexsort

function indexof(ertek, tomb){
    var i=0;
    while(i<tomb.length&&tomb[i]!=ertek){
        i++;
    }//while    
    if(tomb[i]==ertek){ return i; }else{ return false; }
}

function pozicionalo(){
    dobozdarab=$('doboztarto').childElements().length;
    dobozdarab=dobozdarab;
    for(i=0;i<dobozdarab;i++){$('doboztarto').childElements()[i].setStyle({display:'none'});}

    //a 6 oszlop kialakítása
    o1=new Array(0, 0, 0, 0, 0, 0);
    o2=new Array(0, 1, 2, 3, 4, 5);
    
    //végigmegyek a dobozokon
    var dobozMeret=new Array();
    var legmelyebb=0;
    
    for(i=0;i<dobozdarab;i++){
        $('doboztarto').childElements()[i].setStyle({display:'block'});
        dobozMeret[i]=$('doboztarto').childElements()[i].getDimensions();        
        var dobozSzE=0;
        switch(dobozMeret[i].width){
            case 180:
              dobozSzE=1;
              break;
            case 380:
              dobozSzE=2;
              break;
            case 580:
              dobozSzE=3;
              break;
            case 980:
              dobozSzE=5;
              break;
            default: dobozSzE=6;
        }//switch
        var dobozM=dobozMeret[i].height+20; //margin
        
        //oszlopok rendezése aktuális magasságérétékeik alapján        
        t=new Array();
        t=multisort(o2, o1); //index szerint sorbaállítás (ha már volt méret szerinti, akkor össze vissza vannal az indexek
        o1=t[1]; o2=t[0]; 
        t=multisort(o1, o2); //érték szerinti rendezés - ez a lényeg
        o1=t[0]; o2=t[1]; 
        t=indexsort(o1, o2) //azonos értékek index alapján rendezése két tömbben
        o1=t[0]; o2=t[1];
        
//var s='';for(c=0;c<6;c++){ s=s+' '+o2[c]+':'+o1[c]+'; '; }$('doboztarto').childElements()[i].childElements()[0].insert('<div>'+i+'.) '+s+'</div>');
        
        //végigmegyünk az oszlopokon
        var ii=0;
        var stimmel=false;
        while(ii<6&&!stimmel){
            melyseg=o1[ii]; //legalacsonyabb oszlop magassága
            ndx=o2[ii]; //a legalacsonyabb oszlop indexe

            if(melyseg>legmelyebb){ legmelyebb=melyseg; }
            //szélességében a többi oszlopnál is stimmel-e a méret (nem lóg-e bele a következő oszlop)
            stimmel=true; //ha csak 1 oszlop széles a doboz, akkor mindenképpen stimmel
            if(dobozSzE>1){
                if((ndx+dobozSzE)>6){
                    stimmel=false;
//$('doboztarto').childElements()[i].childElements()[0].insert('<div>Túlnyúlik! Oszlop: '+ndx+'</div>'); 
                }else{
                  for(t=0;t<dobozSzE;t++){
                    tombndx=indexof((ndx+t),o2);//tombelemre mutató index
                    if(o1[tombndx]>melyseg){ 
                        stimmel=false; 
//$('doboztarto').childElements()[i].childElements()[0].insert('<div>Nem stimmel oszlop:'+ujndx+' tömb:'+tombndx+' érték:'+o1[tombndx]+'</div>'); 
                        break; }
                  }//for t
                }//if
            }//if szélesség>1
            ii++;
        }//while ii
        ii=ii-1;
        //alert(i+' oszlop: '+ndx+', mélysége:'+o1[ii]+', rendezett index:'+ii);
        
        //ha stimmel állítsa be a doboz koordinátáit
        //ha nem, akkor a legméyebbpontra, x=0-ra kell tenni a dobozt
        var top=0;
        var left=0;
        if(stimmel){
//var s=''; s='stimmel oszlop:'+ndx+''; $('doboztarto').childElements()[i].childElements()[0].insert('<div>'+s+'</div>');
            top=melyseg;
            left=ndx*200;
            $('doboztarto').childElements()[i].setStyle({position: 'absolute',top: ''+top+'px',left: ''+left+'px'});
            //oszlopmélységek beállítása
            for(t=ndx;t<ndx+dobozSzE;t++){
                ujndx=indexof(t,o2);
                o1[ujndx]=top+dobozM; 
                //azért a tophoz kell adni, mert ha egy 2 oszlop széles doboz kerül egy 200 pixeles és egy 100 pixeles oszlopba, 
                //akkor ha csak az oszlop méretéhez adom a doboz magasságát, rossz eredményem lesz: 
                //50 pixeles doboz esetében mindkét oszlopnak 250 pixenek kell lennie, 
                //sima oszlopméret+dobozmérettel az egyik 250 a másik 150 lesz 
            }//for t            
        }else{
            top=o1[5];//legmelyebb o1[ndx];
            left=0;
            $('doboztarto').childElements()[i].setStyle({position: 'absolute',top: ''+top+'px',left: ''+left+'px'});
            //oszlopmélységek beállítása
            //for(t=1;t<=dobozSzE;t++){            
//var s='';
            for(t=0;t<dobozSzE;t++){
                o1[t]=top+dobozM;
                o2[t]=t;//reset index
//s=s+'o'+t+':'+o1[t];
            }
            for(t=dobozSzE;t<=5;t++){
                o1[t]=top;
                o2[t]=t;//reset index
//s=s+'o'+t+':'+o1[t];
            }//for t  
//$('doboztarto').childElements()[i].childElements()[0].insert('<div>'+s+'</div>');                      
                      
        }//ha stimmel
                
    }//for i
    
    //a tartó magasságának beállítása a legmélyebb pont+40-ra
    t=multisort(o1, o2); //érték szerinti rendezés - ez a lényeg
    o1=t[0]; o2=t[1]; 
    melyseg=o1[5]+40;
    $('doboztarto').setStyle({height: ''+melyseg+'px'});
    
}

Event.observe(window, 'load', function() {
    pozicionalo();
}); 	
