/*
<fieldset>
<legend>Ülke-Şehir-İlçe-Semt</legend>
<select SelectTree="true" Session="asd" URL="ajax/get_places2.php" Level="1" DefaultValue="211"></select><br />
<select SelectTree="true" Session="asd" URL="ajax/get_places2.php" Level="2" DefaultValue="2" /></select><br />
<select SelectTree="true" Session="asd" URL="ajax/get_places2.php" Level="3" DefaultValue="2" /></select><br />
<select SelectTree="true" Session="asd" URL="ajax/get_places2.php" Level="4" DefaultValue="2" /></select><br />
</fieldset>

<fieldset>
<legend>Aynı Sayfada İkinci Ülke-Şehir</legend>
	<select SelectTree="true" Session="sa" URL="ajax/get_places2.php" Level="1" DefaultValue="211"></select><br />
	<select SelectTree="true" Session="sa" URL="ajax/get_places2.php" Level="2" DefaultValue="2" /></select><br />
</fieldset>
*/

var SelectTreeSessionElements = new Class({
	initialize: function(){
		this.Elements = new Array();
	},

	addElement: function(SelectTreeElement){
		this.Elements.push(SelectTreeElement);
	},

	getElements:function(){
		return this.Elements;
	}
});

var SelectTreeElement = new Class({
	initialize: function(SELECT){
		this.SELECT = SELECT;

		var DefaultValue = this.SELECT.getAttribute('DefaultValue');
		this.DefaultValue = (DefaultValue == null) ? 0 : DefaultValue ;

		this.Parent = false;
		this.Child = false;
		this.Disabled = false;

		var THIS = this;
		this.SELECT.onchange = function(){
			THIS.onchange();
		}
	},

	onchange: function(){
		this.DefaultValue = this.SELECT.value;
		Child = this.Child;
		while (Child) {
			Child.disable();
			Child = Child.Child;
		}

		if (this.Child) {
			this.Child.fillElements();
		}
	},

	setParent: function(STE){
		this.Parent = STE;
	},

	setChild: function(STE){
		this.Child = STE;
	},

	getParentValue: function(){
		return (this.Parent) ? this.Parent.DefaultValue : 0 ;
	},

	insertAfter: function (newElement) {
		var parent = this.SELECT.parentNode;
		if(parent.lastchild == this.SELECT) {
			parent.appendChild(newElement);
		} else {
			parent.insertBefore(newElement, this.SELECT.nextSibling);
		}
	},

	getURL: function(){
		var URL = this.SELECT.getAttribute('URL');
		if (URL == null) {
			alert('URL Belirtilmemiş.');
			return false;
		}
		return URL;
	},

	getDefaultValue: function(){
		DefaultValue = this.DefaultValue;
		DefaultValue = (this.SELECT.disabled==true) ? 0 : DefaultValue ;
		return DefaultValue;
	},

	getLevel: function(){
		var Level = this.SELECT.getAttribute('Level');
		if (Level == null) {
			alert('Level Belirtilmemiş.');
			return false;
		}
		return Level;
	},

	disable: function(){
		this.SELECT.disabled=true;
		this.SELECT.length=0;
		this.SELECT.DefaultValue = 0;
		this.Disabled = true;
	},

	fillElements: function() {
		var objSelectedIndexValue = this.DefaultValue;
		var THIS = this;
		var jSonRequest = new Json.Remote(this.getURL(), {
			method: 'post',
			async: true,
			onComplete: function(elements){
				//alert(1);
				if(elements && (!THIS.Parent || THIS.Parent.Disabled==false)){
					THIS.SELECT.options.length = 0;
					THIS.SELECT.options[0] = new Option('Select', '0');

					selected_index = 0;

					for(var i = 0; i < elements.length; i++){
						THIS.SELECT.options[i + 1] = new Option(elements[i].name, elements[i].id);
						if (objSelectedIndexValue == elements[i].id){
							selected_index = i + 1;
						}
					}
					THIS.SELECT.options[selected_index].selected = true;
					THIS.SELECT.disabled = false;
					THIS.Disabled = false;
				} else {
					THIS.disable();
					return false;
				}
			}
		}).send({'type': this.getLevel(), 'id': this.getParentValue()});
		
		
		
		
		
	}
});


var SelectTreeInitializer = new Class({
	initialize: function(){
		this.SelectTrees = new Array();
		this.Sessions 	 = new Array();
		STobjects = document.getElementsByTagName("select");
		for (var i=0; i<STobjects.length; i++){
			var SelectTree = STobjects[i].getAttribute('SelectTree');
			
			if (SelectTree != 'true') {
				continue;
			}
			
			var SelectSession = STobjects[i].getAttribute('Session');
			if (SelectSession == null) {
				alert('Session Belirtilmemiş.');
				return false;
			}
			
			var SelectLevel = STobjects[i].getAttribute('Level');

			if (SelectLevel == null){
				alert('Level Belirtilmemiş.');
				return false;
			}

			var SelectURL = STobjects[i].getAttribute('URL');

			if (SelectURL && SelectURL == null){
				alert('URL Belirtilmemiş.');
				return false;
			}

			if (!this.SelectTrees[SelectSession]){
				this.SelectTrees[SelectSession] = new SelectTreeSessionElements();
				this.Sessions.push(SelectSession);
			}
			
			var STE = new SelectTreeElement(STobjects[i]);
			this.SelectTrees[SelectSession].addElement(STE);
		}

		for (var i in this.SelectTrees){
			if (typeof(this.SelectTrees[i])!='object') {
				continue;
			}
			var STE = this.SelectTrees[i].getElements();

			for (var r in STE){
				if (typeof(STE[r])!='object'){
					continue;
				}
				STE[r].setParent((typeof(Prev)!='undefined' && STE[Prev]) ? STE[Prev] : false );
				if (typeof(Prev)!='undefined' && STE[Prev]) {
					STE[Prev].setChild(STE[r]);
				}

				STE[r].fillElements();
				var Prev = r;
			}
		}
	}
});

var SelectIni;
window.addEvent('domready', function(){
	SelectIni = new SelectTreeInitializer();
});