/* This script and many more are available free online at
The JavaScript Source!! http://javascript.internet.com
Created by: Bobby van der Sluis | http://www.bobbyvandersluis.com/ */
// Details can be found at:
// http://www.bobbyvandersluis.com/articles/unobtrusivedynamicselect.php

function dynamicSelect(id1, ids, id0) {
	/*
	Váltózók értelmezése:
		id1 - ez tartalmazza annak a selectnek az azonosítóját ami alapján a többit változtatni akarjuk
		ids - ez egy tömbben tartalmazza azoknak a selecteknek az id-jeit ami változni fog ennek a selectnek a hatására, szóval a select után található.
		id0 - ez egy tömbben tartalmazza azoknak a selecteknek az azonosítóit amik az adott select előtt helyezkednek el, mert a változások ezektől a selectektől is függenek
	*/
 	if (document.getElementById && document.getElementsByTagName) {		
  		var sel1 = document.getElementById(id1);
		var sz=0;
		var sel=new Array();
		var clone=new Array();
		var clonedOptions=new Array();
		while(ids[sz]){						
            
            //1 Ciklussal végigmegyünk az összes olyan selecten aminek változnia kell ennek a selectnek a hatására.
			sel[sz] = document.getElementById(ids[sz]);
			clone[sz] = sel[sz].cloneNode(true);
			clonedOptions[sz] = clone[sz].getElementsByTagName("option");
			
            //Ez a function frissíti az adott selecteket
			refreshDynamicSelectOptions(sel1, sel[sz], clonedOptions[sz], id0,ids.length);
            			
			sz++;
		}
		
  		sel1.onchange = function() {
			sz=0;
			id=id1;
			id0=id0;
            
			while(ids[sz]){			//Ugyaazt csináljuk mint már az előbb is csak ezt akkor ha a select-ben ki lett választva 1 új elem
				sel1 = document.getElementById(id);
				refreshDynamicSelectOptions(sel1, sel[sz], clonedOptions[sz], id0, ids.length);
				id=ids[sz];
				sz++;	
			}		
			if(sz==0){			//Ha nincs a select után másik select amit változtatni kellene akkor 0-ra állítjuk ennek az értékét és úgy futtatjuk, hogy az árváltoztató rész lefusson.
				clone = sel1.cloneNode(true);
				clonedOptions = clone.getElementsByTagName("option");
				refreshDynamicSelectOptions(sel1, 0,clonedOptions, id0, ids.length);
			}
  		};
 	}
}

function refreshDynamicSelectOptions(sel1, sel2, clonedOptions, sel0, u) {
 	// Delete all options of the dynamic select box
	
 	if(sel2){
	while (sel2.options.length) {
	    //Töröljük annak a selectnek az elemeit amit most változtatni akrunk, mert majd később azok lesznek engedélyezve amik megfelelnek a feltétteleknek
  		sel2.remove(0);
 	}
	}
	
 
	var b = sel1.options[sel1.selectedIndex].className;
    //Elmentjük annak az aktuálisan kiválasztott select mezőnek a class értékét, és szétbontjuk 1 tömbben mert általában több class értéke is van.
	var temp = new Array();
	temp = b.split(' ');
	
	var sz;
    //A temp0 tömmben letároljuk a temp0 változóban felsorolt selectek kiválasztott elemeinek class részeit
	if(sel0){
		sz=0;
		var b0 = new Array();
		var temp0 = new Array();
		while(sel0[sz]){
			b0[sz] = document.getElementById(sel0[sz]).options[document.getElementById(sel0[sz]).selectedIndex].className;
			temp0[sz] = b0[sz].split(' ');
			
		sz++;
		}
		temp0[sz]=temp;
	}
	
 	
	var sz1;
	var szt;
	var sz0;
	var sz2;
	var sz3=0;
	var EnabledS;
	var E;
	var PriceId='';
 	for (var i = 0; i < clonedOptions.length; i++) {
 	  //Végigmegyünk a  clonedOptions változón, mert ő tartalmazza a változtatni kívánt select mezőit, és megnézzük, hogy ezek közül melyiket kell engedélyezni.
		
  		if(sel0 || !sel2){	
		EnabledS=0;
		PriceId='';
		szt=0;
		sz1=0;
		sz0=0;
		sz=0;
		E=1;
		
			var b1 = clonedOptions[i].className;
            //a temp1 változóban a változtatni kívánt select class elemeit tároljuk.
			var temp1 = new Array();
			temp1 = b1.split(' ');
			
			while(temp1[sz1]){
			 //Ez egy elég összetett ciklus ami kiválasztja, hogy melyik selectek legyenek engedélyezva. Figyelembe veszi az előtte lévő selectek kiválasztott elemeinek class mezőit is.
				if(EnabledS==0){
				EnabledS=1;
				szt=0;

				while(temp0[szt]){
					
					if(EnabledS==1){
					
					sz0=0;
					EnabledS=0;
					while(temp0[szt][sz0]){
						
						if(temp1[sz1]==temp0[szt][sz0]){
							
							EnabledS=1;
							sz2=0;
							
							if(!sel2){
							while(temp[sz2]){
								if(temp[sz2]==temp1[sz1]){
									PriceId=temp1[sz1];
                                    //Ha nincs sel2 változó akkor itt választjuk ki a megfelelő árat (itt az ár class értékét határozzuk meg)
								}
								sz2++
							}
							}else if(sz3==0){
								
								PriceId=temp1[sz1];	//Ha van akkor itt választjuk ki az árat.
								
							}
							
						}
						sz0++;
					}
					}
					szt++;
				}
				}
				sz1++;
			}
			
			
			if(PriceId!=''){
			 //Ha van megadva az árnak 1 class akkor eltüntetjük az összes ár boxot, majd megjeleníttetjük azt ami ki lett választva
					$('.price').css("display","none");
					$('#'+PriceId).css("display","block");
					
			}
				//alert(EnabledS);
				if(sel2){
				if(EnabledS){
				    //Ha engedélyezve van egy mező akkor azt itt engedélyezzük.
				    sz3++;
				    sel2.appendChild(clonedOptions[i].cloneNode(true));
							
				}
				}
				
				
			
		}else{
		  //Ez az ág akkr futna le ha nincs sel0			
			sz=0;
			while(temp[sz]){
				pattern2 = new RegExp("( |^)(" + temp[sz] + ")( |$)");
				if (clonedOptions[i].className.match(pattern2)) {
					 // Clone the option from the hidden option pool and append it to the dynamic select box
					sel2.appendChild(clonedOptions[i].cloneNode(true));
				}
				sz++;
			}
		}
	}
}

// Multiple onload function created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

