/***************************************************************************
// constractor
***************************************************************************/
function formView(form) {

    this.form = form;
    this.formElements = this.getElements();
}

/***************************************************************************
// private method
***************************************************************************/


// フォームのエレメントを出力する（"Firebug Console に出力"）
formView.prototype.trace = function() {
	
   	var elems = this.formElements;
	
//	console.info(this.form)
//	console.info(elems)
	
//	console.log("***** form" +" : "+  this.form.name + " all elements *****");
	for(var i=0; i<elems.length; i++) {
//		console.log(elems[i].name +" : "+ elems[i].value);
	}
   
}


// フォームのエレメントの中身を出力する（"Firebug Console に出力"）
formView.prototype.traceFormElements = function() {
	
   	var elems = this.formElements;
	
//	console.log("***** form" +" : "+  this.form.name + " submit value *****");
	for(var i=0; i<elems.length; i++) {
		if(elems[i].type == "radio" && !elems[i].checked) continue;
//		console.log(elems[i].type +" : "+ elems[i].name +" : '"+ elems[i].value + "'");
	}
}


// フォームのエレメントを返す
formView.prototype.getElements = function() {
	
	var newElem = new Array();
	
   	var elems = this.form.elements;
	
	for(var i=0; i<elems.length; i++){
		
		newElem.push(elems[i]);
	}
	
	
	return newElem;
}


// 次のエレメントがあるかを返す
formView.prototype.hasNext = function(index) {
	
	return (this.formElements.length - 1 > index) ? true: false;
}


// 前のエレメントがあるかを返す
formView.prototype.hasPrevious = function(index) {
	
	return (0 < index) ? true: false;
}

/***************************************************************************
// public method
***************************************************************************/


// ショートカットアクセスに対しエレメントを返す（param => string, object, number）
formView.prototype.checkParamType = function(param) {
	
	if(typeof(param)  == "object") return param;
	return (typeof(param) == "number") ? this.getNumberAccess(param): this.getNameAccess(param);
}


// ナンバーアクセスに対しエレメントを返す
formView.prototype.getNumberAccess = function(num) {
	
	return this.formElements[num];
}


// ストリングアクセスに対しエレメントを返す
formView.prototype.getNameAccess = function(str) {
	
   	var elems = this.formElements;
	for(var i=0; i<elems.length; i++){
		if(elems[i].name == str) {
			return elems[i];
		}
	}	
	
	return false;
}


// 次のエレメントを返す
formView.prototype.nextElement = function(param) {
	
	var elem = this.checkParamType(param);
   	var elems = this.formElements;
	for(var i=0; i<elems.length; i++){
		if(elems[i].name == elem.name  && this.hasNext(i)) {
			return elems[i + 1];
		}
	}	
	
	return false;
}


// 前のエレメントを返す
formView.prototype.previousElement = function(param) {
	
	var elem = this.checkParamType(param);
   	var elems = this.formElements;
	for(var i=0; i<elems.length; i++){
		if(elems[i].name == elem.name  && this.hasPrevious(i)) {
			return elems[i - 1];
		}
	}	
	
	return false;
}


// プルダウンに関するもの //////////////////////////////////////////////////////


// データリストよりプルダウンを生成する
formView.prototype.createPulldown = function(pulldown, db) {
	
	var elem = this.checkParamType(pulldown);
	
    var newElem;
    var br = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
	
    while (elem.options.length) {
        elem.remove(0);
    }	

	for (var i = 0; i < db.length; i++) {
		newElem = document.createElement("option");
		newElem.text = db[i].text;
		newElem.value = db[i].value;
		elem.add(newElem, br);
	}
}


// プルダウンの選択をvalueでセットする
formView.prototype.setPulldown = function(pulldown, val) {
	
	var elem = this.checkParamType(pulldown);
    for(var i = 0; i < elem.options.length; i++) {
		
        if(elem.options[i].value == val) {
            elem.options.selectedIndex = i;
            return true;
        }
    }
	return false;
}


// プルダウンの選択をselectedIndexでセットする
formView.prototype.setSelectedIndex = function(pulldown, index) {
	
	var elem = this.checkParamType(pulldown);
	elem.options.selectedIndex = index;
}


// selectedIndexを取得する
formView.prototype.getSelectedIndex = function(pulldown) {	
	
	var elem = this.checkParamType(pulldown);
	return elem.options.selectedIndex;
}


// プルダウンを有効化,無効化する（true => 有効、false => 無効）
formView.prototype.enablePulldown = function(pulldown, flg) {
	
	var elem = this.checkParamType(pulldown);
    elem.disabled = !flg;
}


// プルダウンを消去（空のオプションにする）
formView.prototype.clearPulldown = function(pulldown, flg) {
	
	var elem = this.checkParamType(pulldown);
	this.createPulldown(elem, [{value:"", text:""}]);
    if(typeof flg != "undefined") elem.disabled = !flg;
}


// 2つの同一要素プルダウンの値入れ替え
formView.prototype.reversePulldown = function(pulldown1, pulldown2) {	
	
	var elem1 = this.checkParamType(pulldown1);
	var elem2 = this.checkParamType(pulldown2);
	
	var temp1 = elem1.options.selectedIndex;
	var temp2 = elem2.options.selectedIndex;
	
	elem1.options.selectedIndex = temp2;
	elem2.options.selectedIndex = temp1;
}



// その他 //////////////////////////////////////////////////////


// valueの取得
formView.prototype.getValue = function(target) {

	var elem = this.checkParamType(target);
	return (elem.type == "select-one") ? elem.options[elem.options.selectedIndex].value: elem.value;
}


// 可変パラメータのセット
formView.prototype.setDynamicParam = function(hidden, val) {

	var elem = this.checkParamType(hidden);
    elem.value = val;

}


// ラジオボタンの選択セット
formView.prototype.setRadioChecked = function(radio, val) {

	var elem = this.form[radio];
	
    for(var i = 0; i < elem.length; i++) {
        if(elem[i].value == val) {
            elem[i].checked = true;
        }
    }
}


// 空港3レターを書き込む
formView.prototype.setCodeApo = function(box, Airport) {	
	
	var tBox = this.checkParamType(box);
    if (Airport.match(/^SEP/)||Airport.match(/^IDX$/)) {
        Airport = "";
    } 
	
    tBox.value = Airport;
}
