
/*
	чистим все начиная с  уровня level
	если уровень 0 чистит федеральные округа
*/
function clearForLevel(level){
	
	if(level==0){
		var elSel = document.getElementById('federal');
		clearLevel(elSel,'000');
		level++;
	}
	
	while(level<=5){
		var elSel = document.getElementById('code'+(level));
		clearLevel(elSel,'000');
		level++;
	}
}


/*
	code - "f" + federalCode + okatoCode
	если нет ф значит просто окато и ф-я найдет федеральный код и вызовется заново
	
	level - сколько уровней пройдено
	level=-1 не загружены даже федеральные округа
	level=0 не загружены субьекты федерального округа
	
	если пройдено меньше уровней чем в коде окато то она выполнится и вызовется с level+1

	все что ниже этого уровня ф-я стирает а уровень level+1 заполняет 
	
*/
function loadSelectItems1(code,level){
	var okatoBase="/publish/00/00/okato/";
	// если только код окато без федерально региона то его надо узнать и работать дальше
	if(code.charAt(0)!='f'){
		var federal;
		var myAjax = new Ajax(okatoBase + "content.xml", {method: 'get'});		
		myAjax.addEvent('onComplete', 				
			function(doc1){
				var doc = getXMLDOM(doc1);
				var items = doc.documentElement.getElementsByTagName('item');
				var i=0;	
				for (i=0; i<= items.length-1 ;i++){				
					var rItems = items.item(i).getElementsByTagName('child');
					for (j=0; j<= rItems.length-1 ;j++){
						var tcode = rItems.item(j).getAttribute("okato").substring(0,2);
						if(tcode==code.substring(0,2)){
							federal = items.item(i).getAttribute("code0") ;
						}
					}	
				}
				loadSelectItems1("f"+federal + code ,level);
			}
		);
		myAjax.request();
		return;
	}
			
			
	// чистим все уровни выше	
	clearForLevel(level+1);
		
		
	//level  - сколько уровней пройдено
	//code = "f" + federalcode +  okato
	var federalCode = code.substring(1,2);
	var okatoCode = code.substring(2,13);
	
	//document.getElementById('code').value= "f" + federalCode + okatoCode;	
		
	document.getElementById('code').value= okatoCode;
	
	if(level==-1){
		
		var myAjax = new Ajax("/publish/00/00/okato/content.xml", {method: 'get'});		
		myAjax.addEvent('onComplete', 
		
			function(doc1){
				var doc = getXMLDOM(doc1);
				var items = doc.documentElement.getElementsByTagName('item');
				var i=0;	
				var elSel = document.getElementById('federal');
							
				for (i=0; i<= items.length-1 ;i++){				
					elOptNew = document.createElement('option');
					elOptNew.text = items.item(i).getAttribute("name") ;
					elOptNew.value = items.item(i).getAttribute("code0") ;
					var rItems = items.item(i).getElementsByTagName('child');
					if(elOptNew.value == federalCode){
						elOptNew.selected=true;
					}
	
					try{
						   elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
					}				    
					catch(ex) {
						   elSel.add(elOptNew); // IE only
					}
				}
				if(okatoCode!=00000000000){
					loadSelectItems1(code,level+1);
				}
			}
		);
		myAjax.request();
	
	}
	// определен только федеральный округ
	else if(level==0){
		
		var myAjax = new Ajax(okatoBase+ federalCode+ "/content.xml", {method: 'get'});       
		
		myAjax.addEvent('onComplete', 	
			
			function(doc1){
				var doc = getXMLDOM(doc1);
				var items = doc.documentElement.getElementsByTagName('item');	
				var i=0;
		    	var elSel = document.getElementById('code'+(level + 1));						
		    	clearLevel( document.getElementById('code'+(level + 1)),'000');
				
		
				for (i=0; i<= items.length-1 ;i++){
					elOptNew = document.createElement('option');
					elOptNew.text = items.item(i).getAttribute("name") ;
					elOptNew.value = spliteOkatoCode(items.item(i));
					
					//выбираем
					if(elOptNew.value == okatoCode.substring(0,2)+"000000000" ){
						//alert("a");
						elOptNew.selected=true;
					}
					
					try {
						elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
				    }
				    catch(ex) {
						elSel.add(elOptNew); // IE only
				    }	
				}
				if(okatoCode!=00000000000){
					loadSelectItems1(code,level+1);
				}
			}
		);
		myAjax.request();
	}
	// определена часть окато
	else{
		var currLevel =0;
		var parent;
		var child = okatoCode;
		var path= child +"/" ;
		//построим всю цепочку
		while(parent !="00000000000"){
			currLevel++;
			parent = getParentCode(child);
			if(parent !="00000000000"){
				path = parent+ "/" +path;
			}
			child = parent;		
		}
		//alert(currLevel);
		//alert(path);
		//example path = 03000000000/03201000000/03201501000/
		// надо выделить ту часть которая пройдена
		var fullPath = path;
		path = path.substring(0,12*level);
		//alert(path);
		//var currOkato
		
		var myAjax = new Ajax(okatoBase+ federalCode+"/"+ path +"content.xml", {method: 'get'});       
		myAjax.addEvent('onComplete', 		
			function(doc1){
				var doc = getXMLDOM(doc1);
				var items = doc.documentElement.getElementsByTagName('item');	
				var i=0;
		    	var elSel = document.getElementById('code'+(level + 1));						
		    	clearLevel( document.getElementById('code'+(level + 1)),'000');
				for (i=0; i<= items.length-1 ;i++){
					elOptNew = document.createElement('option');
					elOptNew.text = items.item(i).getAttribute("name") ;
					elOptNew.value = spliteOkatoCode(items.item(i));
					// выбираем
					if(fullPath.indexOf(elOptNew.value+"/")>0){
						elOptNew.selected=true;
					}
					
					try {
						elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
				    }
				    catch(ex) {
						elSel.add(elOptNew); // IE only
				    }	
				}
				//alert(path);
				if(currLevel>level){
					loadSelectItems1(code,level+1);
				}
			}
		);
		myAjax.request();
	}

}


function clearLevel(codeSel,code){
	
		var level  = codeSel.name;		
			
	
		var elSel = codeSel;
		while (elSel.length > 0) { elSel.remove(0);}

		var elOptNew = document.createElement('option');
			
					
		if(level=='federal'){
			elOptNew.text = 'Федеральный округ' ;
		}
		else if(level=='code1'){
			elOptNew.text = 'Субъект РФ' ;
		}
		else if(level=='code2'){
			elOptNew.text = 'Административная единица' ;
		}		
		else{
			elOptNew.text = '--------------------------------------' ;
		}
		elOptNew.text = "--"+elOptNew.text+"--";
		elOptNew.value = code ;
		try {
			   elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
		    }
			   catch(ex) {
			   elSel.add(elOptNew); // IE only
		}
		
		
		
}
	
	
function spliteOkatoCode(item){
		var s = item.getAttribute("code");
		return s;
}

function getCodeLevel(code) {
		var res = 4;
		if(code.substring(8,11)=="000"){
			res = 3;
			if(code.substring(5,8) == "000"){
				res = 2;
				if(code.substring(2,5) == "000"){
					res = 1;
					if (code.substring(0, 2)=="00") {
						res = 0;
					}
				}
			}
		}
		
		return res;
}

function getParentCode(code){
	var res;
	if (code.charAt(2) == '1') {
			// автономный округ в составе субъекта
			var level = getCodeLevel(code);
			switch (level) {
			case 2:
				if (code.substring(0, 2)=="04") {
					// Красноярский край
					var code2 = code.substring(3, 5);
					if ((10 <= code2) && (code2 <= 29)) {
						res = "04100000000";
					} else if ((40 <= code2) && (code2 <= 49)) {
						res = "04130000000";
					} else {
						res = "04000000000";
					}
				} else if (code.substring(0, 2)=="71") {
					// Тюменская область
					var code2 = code.substring(3, 5);
					if ((10 <= code2) && (code2 <= 39)) {
						res = "71100000000";
					} else if ((80 <= code2) && (code2 <= 89)) {
						res = "71100000000";
					} else if ((50 <= code2) && (code2 <= 79)) {
						res = "71140000000";
					} else {
						res = "71000000000";
					}
				} else if (code.substring(2, 5)=="100") {
					res = code.substring(0, 2) + "000000000";
				} else {
					res = code.substring(0, 2) + "100000000";
				}
				break;
			case 3:
				res = code.substring(0, 5) + "000000";
				break;
			case 4:
				res = code.substring(0, 8) + "000";
			}
		} else {
			var level = getCodeLevel(code);
			switch (level) {
			case 1:
				res = "00000000000";
				break;
			case 2:
				res = code.substring(0, 2) + "000000000";
				break;
			case 3:
				res = code.substring(0, 5) + "000000";
				break;
			case 4:
				res = code.substring(0, 8) + "000";
			}
		}
		return res;
}
	
	
