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

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

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


// フォームのエレメントを返す
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;
}


/***************************************************************************
// 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.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;
}


// プルダウンを有効化,無効化する（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;
}


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


// 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;

}


