Информер: прогноз погоды через флэш с использованием php и Ajax

Руслан

Новичок
Информер: прогноз погоды через флэш с использованием php и Ajax

Всем привет. Мне показался интересным один вопрос.
Всем известный ресурс Gismeteo предоставляет возможность установки своих информеров (погода на завтра) на сторонних ресурсах, в том числе и в виде xml (с обязательным размещением ссылки на gismeteo). Как это происходит можно взгялнуть здесь http://informer.gismeteo.ru/getcode/xml.php?id=27612 .
На странице gismeteo мы выбираем страну, область, город и страница выдаёт нам ссылку на xml файл. Вот примерно такую:http://informer.gismeteo.ru/xml/27612_1.xml .

Меняем город на этой странице - меняется имя xml файла.
Делаем флэш-информер с обращением к xml файлу - всё работает на ура.

Но, в этом случае флэш-информер показывает погоду только по одному городу, имя xml-файла которого мы "вшили" в AS нашего флэша. Для того, чтобы изменить город надо переписывать AS в нашем флэш-файле вручную выбрав город и получив ссылку xml уже для этого города.

Вопрос: Как это автоматизировать? Как сделать чтобы в информере была возможность выбирать страну, область, город?

То есть в флэш-файле делаем форму - страна-область-город, в зависимости от выбора, флэш обращается к странице гисметео, получает соответствующее имя xml, обращается к нему и выводит погоду на завтра для выбранного города.

Для меня процесс осложняется тем, что выбор страны, области, города на этой странице осуществляется скриптом js_country.js с использованием AJAX. А в Аяксе я к сожалению не секу. Если бы не Аякс, то я бы из флэша обащался к своему php-скрипту, который обращался бы к странице гисметео, запрашивал бы данные формы (либо они были бы сохранены в базе) и отправлял выбраные во флэше позиции на страницу gis, в итоге получал бы имя xml файла и подставлял в переменную во флэш.
Но как это сделать с учётом использования Ajax я не знаю.

Поэтому, парни, кто сечёт в Ajax подскажите, возможно ли это сделать и если да, то методология, тыкание в мануалы, советы и т.д приветствуются.

ниже приведу код js_country.js для тех кто заинтересовался.


PHP:
//selector by mv28jam
function selector(){
  this.sel1=document.getElementById('sd_country');
  this.sel2=document.getElementById('sd_distr');
  this.sel3=document.getElementById('sd_city');
  this.c_i=0;
  this.c_n=0;
  this.c_o=0;
  this.mar_a=document.getElementsByName('gl_reg');
  this.list_5 = new Array();
  this.callfunc=false;
  this.def_par= new Array(3);
  //---
  this.getXmlHttp = function(){
	var xmlhttp;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
		return xmlhttp;
  }
  //---
  this.ajax_go_xml = function (flag , where, post_send) {
  var xml;
  var xmlhttp = this.getXmlHttp();
	xmlhttp.open('POST', where, true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	var obj = this;
	xmlhttp.onreadystatechange = function(){
	  if (xmlhttp.readyState == 4){
		if (xmlhttp.status == 200){
		  if(xmlhttp.responseXML.documentElement == null){
            try{
              xmlhttp.responseXML.loadXML(xmlhttp.responseText);
			  if(xmlhttp.responseXML.documentElement == null){
			    alert("Can't load");
			    return;
			  }
            }catch (e) {
              alert("Can't load");
			  return;
            }
          }
		  xmld=xmlhttp.responseXML;
		  obj.send_res(flag, xmld);
		}
	  }
	}
	xmlhttp.send(post_send);	
  }
  //-------------------------------------------------------------------------------------------------
  this.send_res = function (flag,ajax_res){
    if(flag=='step0') this.create_list0(ajax_res);
    if(flag=='step1') this.create_list1(ajax_res);
    if(flag=='step2') this.create_list2(ajax_res);
	if(flag=='step0d') this.create_list0(ajax_res,true);
    if(flag=='step2d') this.create_list2(ajax_res,true);
  }
  //---
  this.sel_countyr = function (invar,num){
    this.sel2.disabled=false;
	for(i=0;i<this.mar_a.length;i++){
      this.mar_a[i].style.color='#4a6900';
	  this.mar_a[i].style.fontSize='12px';
    }
    this.mar_a[num].style.color='red';
    this.mar_a[num].style.fontSize='14px';
    this.from_r(invar);
  }
  this.from_r = function (invar){
    this.sel1.options.length = 0;
    this.sel1.options[this.sel1.options.length]=new Option('-Идёт загрузка-', '', false, false);
    this.sel1.disabled=false;
	this.sel2.options.length = 0;
    this.sel3.options.length = 0;
    this.ajax_go_xml('step0', 'index.php','a0='+invar);
  }
  this.from_c = function (){
	this.sel2.disabled=false;
    this.ajax_go_xml('step1', 'index.php','a1='+this.sel1.value);
    this.sel2.options.length = 0;
    this.sel2.options[this.sel2.options.length]=new Option('-Идёт загрузка-', '', false, false);
    this.sel2.disabled=true;
	this.sel3.options.length = 0;
	this.ajax_go_xml('step2', 'index.php','a2n='+this.sel1.value);
    this.sel3.options.length = 0;
    this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
	this.sel2.disabled=true;
  }
  this.from_d = function (){
    for(var i=0; i<this.sel2.length; i++)
      if(this.sel2.options[i].selected){ 
	    var id2=this.sel2.options[i].value;
      }
	if (id2=='all'){
	  this.from_d2(true);
	  return true;
	}
	this.ajax_go_xml('step2', 'index.php','a2='+id2);
    this.sel3.options.length = 0;
    this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
	this.sel3.disabled=true;
  }
  this.from_d2 = function (where){
    if(where==undefined){
	  for(var i=0; i<this.sel1.length; i++)
        if(this.sel1.options[i].selected){ 
	      var id3=this.sel1.options[i].value;
        }
	}else{
	  id3=this.sel1.value;
	}
	this.ajax_go_xml('step2', 'index.php','a2n='+id3);
    this.sel3.options.length = 0;
    this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
	this.sel3.disabled=true;
  }
  this.create_list0 = function (xmld, is_def){
    this.sel1.disabled=false;
	var items = xmld.getElementsByTagName("country");
    var list = new Array(items.length);
    var list_0 = new Array(items.length);
	this.sel1.options.length = 0;
	for (i=0; i < items.length; i++){
	  list_0[i]=items[i].getAttribute("value");
	  list[i]=items[i].firstChild.nodeValue;
	  this.sel1.options[this.sel1.options.length]=new Option(list[i], list_0[i], false, false);
    }
	if(is_def){
	  for(var i=0; i<this.sel1.length; i++)
      if(this.sel1.options[i].value==this.def_par[1]){ 
	    this.sel1.options[i].selected=true;
      }
	}
  }
  this.create_list1 = function (xmld){
    this.sel2.disabled=false;
	var items = xmld.getElementsByTagName("region");
    if(items.length!=0){
      var list_1 = new Array(items.length);
      var list_2 = new Array(items.length);
      this.sel2.options.length = 0;
      this.sel2.options[this.sel2.options.length]=new Option('Все области', 'all', false, false);
	  this.sel2.options[0].selected=true;
	  for (i=0; i < items.length; i++){
	    list_2[i]=items[i].getAttribute("value");
	    list_1[i]=items[i].firstChild.nodeValue;
	    this.sel2.options[this.sel2.options.length]=new Option(list_1[i], list_2[i], false, false);
      }
    }else{
      this.from_d2();
	  this.sel2.options.length = 0;
      this.sel2.options[this.sel2.options.length]=new Option('-Все области-', '', false, false);
	  this.sel2.disabled=true;
    }
  }
  this.create_list2 = function (xmld, is_def){
    this.sel3.disabled=false;
	var items = xmld.getElementsByTagName("city");
    var list_3 = new Array(items.length);
    var list_4 = new Array(items.length);
    this.sel3.options.length = 0;
    for (i=0; i < items.length; i++){
	  this.list_5[i]=items[i].getAttribute("old_id");
	  list_4[i]=items[i].getAttribute("value");
	  list_3[i]=items[i].firstChild.nodeValue;
	  this.sel3.options[this.sel3.options.length]=new Option(list_3[i], list_4[i], false, false);
    }
	if(is_def){
	  for(var i=0; i<this.sel3.length; i++)
      if(this.sel3.options[i].value==this.def_par[2]){ 
		this.sel3.options[i].selected=true;
      }
	}
  }
  this.set_c_i = function (){
    for(var i=0; i<this.sel3.length; i++)
      if(this.sel3.options[i].selected){ 
	    this.c_i=this.sel3.options[i].value;
	    this.c_n=this.sel3.options[i].text;
        this.c_o=this.list_5[i];
		if(this.callfunc!=false) eval(this.callfunc(this.c_i,this.c_n,this.c_o));
	  }
  }
  this.set_callback = function (name){
	this.callfunc=name;
  }
  this.set_default = function (reg_id,count_id,town_id){
    this.def_par[0]=reg_id;
    this.def_par[1]=count_id;
	this.def_par[2]=town_id;
    this.sel1.options.length = 0;
    this.sel2.options.length = 0;
	this.sel3.options.length = 0;
	this.sel1.options[this.sel1.options.length]=new Option('-Идёт загрузка-', '', false, false);
	this.sel2.options[this.sel2.options.length]=new Option('-Идёт загрузка-', '', false, false);
    this.sel3.options[this.sel3.options.length]=new Option('-Идёт загрузка-', '', false, false);
    this.sel1.disabled=true;
	this.sel2.disabled=true;
	this.sel3.disabled=true;
	this.ajax_go_xml('step0d', 'index.php','a0='+this.def_par[0]);
	this.ajax_go_xml('step1', 'index.php','a1='+this.def_par[1]);
	this.ajax_go_xml('step2d', 'index.php','a2n='+this.def_par[1]);
  }
}
//---
 
Сверху