﻿/**
 * Originalmente escrito por DGmike
 * http://code.google.com/p/cidades-estados-js/
 */

/* Dom Ready */
window.onDomReady = function dgDomReady(fn){
	if(document.addEventListener)	//W3C
		document.addEventListener("DOMContentLoaded", fn, false);
	else //IE
		document.onreadystatechange = function(){dgReadyState(fn);}
}

function dgReadyState(fn){ //dom is ready for interaction (IE)
	if(document.readyState == "interactive") fn();
}

/* Objeto */
var dgOcupantes = function(data) {
  var defaultData = {
    adulto: false,
    adultoVal: '01',
    crianca: false,
    criancaVal: '00',
    change: false
  }
  for (name in defaultData) {
    if (!data[name]) {
      data[name] = defaultData[name];
    }
  }
  var keys = ['adulto', 'crianca'];
  if (data['change']) { //caso change: true, não se trata de um select a ser povoado
    var nome, length = keys.length;
    for (var a=0; a<length; a++ ) {
      nome = keys[a];
      if (data[nome].tagName) {
        var opt = document.createElement('select');
        opt.disabled = null
        for (var i = 0; i < data[nome].attributes.length ; i++) {
          var attr = data[nome].attributes[i];
          if (attr.name != 'type') {
            opt.setAttribute(attr.name, attr.value);
          }
        }
        opt.size=1;
        opt.disabled=false;
        data[nome].parentNode.replaceChild(opt, data[nome]);
        data[nome] = opt;
      }
    }
  }
  this.set(data['adulto'], data['crianca']);
  this.start();

  var nome, length = keys.length;
  for (var i=0; i<length; i++) {
    nome = keys[i]; //estado e cidade
	
    if (this[nome].getAttribute('value')) {
      data[nome+'Val'] = this[nome].getAttribute('value');
    }
	
    if (data[nome+'Val']) { //preenche estadoVal e cidadeVal se fornecidos na criação do dgCidadesEstados.
		var options = this[nome].options;
		if (nome=='adulto') this.adulto.onchange(); //se tiver preenchido o estado, dá run() pra preencher as cidades
		for (var j = 0; j<options.length; j++) { //olha cada linha e vê se é a que quer... aí coloca como selected.
			if (options[j].tagName == 'OPTION') {
				if (options[j].value == data[nome+'Val']) {
					options[j].setAttribute('selected',true);
					if (nome=='adulto'){ //esses dois passos são necessários pro IE6!
						this.adulto.selectedIndex=j;
						this.adulto.onchange();
					}
				}
			}
		}
	}
	
  }
  
}

dgOcupantes.prototype = {
  adulto: document.createElement('select'),
  crianca: document.createElement('select'),
  set: function(adulto, crianca) { //define os elementos DOM a serem preenchidos
    this.adulto=adulto;
    this.adulto.dgOcupantes=this;
    this.crianca=crianca;
    this.adulto.onchange=function(){this.dgOcupantes.run()};
  },
  start: function () { //preenche os estados
    var adulto = this.adulto;
    while (adulto.childNodes.length) adulto.removeChild(adulto.firstChild);
    for (var i=0;i<this.adultos.length;i++) this.addOption(adulto, this.adultos[i][0], this.adultos[i][1]);
  },
  run: function () { //preenche as cidades de acordo com o estado escolhido
	var sel = this.adulto.selectedIndex; // estado escolhido
    var itens = this.criancas[sel]; // pega as cidades correspondentes
    var itens_total = itens.length;
	
    var opts = this.crianca;
    while (opts.childNodes.length) opts.removeChild(opts.firstChild); // limpa a lista atual
	
    this.addOption(opts, '0', '00');
    for (var i=0;i<itens_total;i++) this.addOption(opts, itens[i], itens[i]); // vai adicionando as cidades correspondentes
  },
  addOption: function (elm, val, text) {
    var opt = document.createElement('option');
    opt.appendChild(document.createTextNode(text));
    opt.value = val;
    elm.appendChild(opt);
  },
  adultos : [
    ['1','01'],['2','02'],['3','03']
  ],
  criancas : [
	['01','02','03'],
	['01','02'],
	['00'],
  ]
};
