﻿var IsIe = (window.navigator.appName.indexOf("Explorer") != -1);
function GetE(name){return (IsIe)?document.all[name]:document.getElementById(name);}

function ObjKeyValue(i,n){this.Name = n;this.Id = i;}

function FillList(lst,values)
{
  lst.innerHTML = "";
  if(!IsIe){var My = "";for(var t = 0 ; t < values.length ; t++)My = My + '<option value="' + values[t].Id + '">' + values[t].Name + '</option>';lst.innerHTML = My;  }
  else{for(var t = 0 ; t < values.length ; t++){var oOption = document.createElement("OPTION");oOption.text=values[t].Name;oOption.value=values[t].Id;lst.add(oOption);}}
}

function LoaderElement(s,d,u,v){this.Src=s;this.Url=u;this.Des=d;this.Value=v;}
function ReqInf(id,src,e){this.Id = id; this.Src = src; this.E=e;}
var Id = 0;
var ReList = new Array();
function MakeRequest(url,lman){var e = document.createElement("script");var MyId = ++Id;e.type = "text/javascript";e.src = url + "&reqid=" + MyId;ReList.push(new ReqInf(MyId,lman,e));document.body.appendChild(e);return MyId;}

var InUse=false;
function RequestCallBack(id,list)
{
	var c;
	id = parseInt(id);
	if(isNaN(id))return;
	while(true)
	{
		if(InUse)continue;
		else
		{
			InUse = true;
			var cc=null;
			for(var index = 0 ; index < ReList.length ; index++)
			{
				c = ReList[index];
				if(c.Id == id){ReList.splice(index,1); cc=c; break;}
			}
			InUse = false;
			if(!cc)return;
			cc.Src.Response(id,list);
			document.body.removeChild(c.E);					
			return;
		}
	}
}

function MyLoader(we)
{
	this._Waiting = GetE(we);
	this._Waiting.style.display = "none";
	this._Element = new Array();
	this._LoaderE = null;
	this._CurrentReqId=-1;
}

MyLoader.prototype = {
	AddElement : function(srcE,desE,urlLoad,valueE){
		var e = GetE(srcE);
		var Id = this._Element.length;
		this._Element.push(new LoaderElement(e,(desE)?GetE(desE):null,urlLoad,valueE));
		if(Id == 0)e.disabled="";
		else e.disabled="disabled";
		e.value='';			
		e.Manager = this;
		e.ManagerId = Id;
		e.onchange = function(){this.Manager.OnChange(this.ManagerId);}
	},
	OnChange : function(srcId){
		if(srcId >= this._Element.length)return;
		this._LoaderE = this._Element[srcId];
		if(!this._LoaderE.Des)return;
		var v;
		if(typeof(this._LoaderE.Value) == typeof(1))v=this._LoaderE.Value;
		else
		{
			var Mye = GetE(this._LoaderE.Value);
			if(!Mye)return;
			var v = Mye.value;
		}		
		if(v!='')this.Request(this._LoaderE.Url + v);
		for(var i = srcId + 1; i < this._Element.length ; i++)
			this._Element[i].Src.disabled="disabled";
	},
	Request : function(url){		
		if(this._Waiting)this._Waiting.style.display = "";
		this._CurrentReqId = MakeRequest(url,this);
	},
	Response : function(rid,obj){
		if(rid != this._CurrentReqId)return;
		obj.push(new ObjKeyValue('',"لطفا انتخاب کنید ."));
		FillList(this._LoaderE.Des,obj);
		this._LoaderE.Des.value = '';
		this._LoaderE.Des.disabled="";
		this._LoaderE = null;
		if(this._Waiting)this._Waiting.style.display = "none";
	}
}

