
var FormHelper = {
	szHintClass : 'hint',
	genConfirm : function(forms, btnbacks, callback){
		if(typeof btnbacks == 'string'){
			btnbacks = document.getElementById(btnbacks);
		}
		if(!btnbacks) return;
		if(btnbacks.tagName)
			btnbacks = [btnbacks];
		var nBtnBacks = btnbacks.length;

		if(typeof forms == 'string'){
			forms = document.getElementById(forms);
		}
		if(!forms) return;
		if(forms.tagName)
			forms = [forms];
		var nForms = forms.length;
		for(var f=0; f<nForms; ++f){
			var form = forms[f];
			var collInputs = form.getElementsByTagName('input');
			var collSels = form.getElementsByTagName('select');
			var collTextareas = form.getElementsByTagName('textarea');
			var collFormElements = new Array();
			collFormElements.merge(collInputs, collSels, collTextareas);
			var nElem = collFormElements.length;

			for(var i=0; i<nElem; ++i){
				var elem = collFormElements[i];
				if(!elem || typeof elem != 'object') continue;

				var elemSpan = document.createElement('span');
				DOMHelper.addClass(elemSpan, 'confirm_elment_span');

				switch((elem.tagName + (elem.type?'.'+elem.type:'')).toLowerCase()){
					case 'input.button':
					case 'input.reset':
					case 'input.submit':
					case 'input.hidden':
						continue;
					case 'input.text':
					case 'input.file':
						elemSpan.innerHTML = (elem.value==''?'&nbsp;':elem.value.htmlConvert());
						break;
					case 'input.password':
						elemSpan.innerHTML = ''.padLeft(elem.value.length, '*');
						break;
					case 'select.select-one':
					case 'select.select-multiple':
						var collOptions = elem.getElementsByTagName('option');
						var nOptions = collOptions.length;
						for(var j=0; j<nOptions; ++j){
							if(collOptions[j].selected)
								elemSpan.innerHTML += collOptions[j].innerHTML;
						}
						break;
					case 'textarea.textarea':
						elemSpan.innerHTML = (elem.value==''?'&nbsp;':elem.value.htmlConvert().nl2br());
						break;
					case 'input.checkbox':
					case 'input.radio':
						var elemDesc = elem.nextSibling;
						if(elemDesc.nodeType == 1){
							if(elem.checked)
								elemSpan.innerHTML = elemDesc.innerHTML;
							DOMHelper.addClass(elemDesc, 'confirm_form_elments');
							elemDesc.style.display = 'none';
						}else{
							var elemAlterLabel = document.createElement('label');
							elemAlterLabel.innerHTML = elemDesc.nodeValue;
							elemAlterLabel.htmlFor = elem.id;
							elemDesc.parentNode.replaceChild(elemAlterLabel, elemDesc);
							DOMHelper.addClass(elemAlterLabel, 'confirm_form_elments');
							elemAlterLabel.style.display = 'none';
							if(elem.checked)
								elemSpan.innerHTML = elemAlterLabel.innerHTML;
						}
						break;
				}
				elem.parentNode.insertBefore(elemSpan, elem);
				DOMHelper.addClass(elem, 'confirm_form_elments');
				elem.style.display = 'none';
			}
			var collLabels = form.getElementsByTagName('label');
			var nLabels = collLabels.length;
			for(var i=0; i<nLabels; ++i){
				if(DOMHelper.hasClass(collLabels[i], this.szHintClass)){
					DOMHelper.addClass(collLabels[i], 'confirm_form_l_' + this.szHintClass);
					collLabels[i].style.display = 'none';
				}
			}
			var collHints = (new Array()).merge(form.getElementsByTagName('tosho:hint'), form.getElementsByTagName('hint'));
			var nHints = collHints.length;
			for(i=0; i<nHints; ++i){
				collHints[i].style.display = 'none';
			}
		}
		for(f=0; f<nBtnBacks; ++f){
			var btnback = btnbacks[f];
			DOMHelper.addEventListener(btnback, 'click', function(e){
				var tmpNode = btnback;
				while(tmpNode){
					if(tmpNode.tagName.toLowerCase()=='form'){
						var form = tmpNode;
						break;
					}
					tmpNode = tmpNode.parentNode;
				}
				if(!form) return;
				var stackElems = new Array();
				stackElems.push(form);
				var elem;
				while(elem = stackElems.pop()){
					if(elem.nodeType != 1) continue;
					if(DOMHelper.hasClass(elem, 'confirm_form_elments')){
						DOMHelper.removeClass(elem, 'confirm_form_elments');
						elem.style.display = '';
						var elemSpan = elem.previousSibling;
						if(elemSpan.tagName.toLowerCase()=='span' && DOMHelper.hasClass(elemSpan, 'confirm_elment_span'))
							elemSpan.parentNode.removeChild(elemSpan);
					}else if(DOMHelper.hasClass(elem, 'confirm_form_l_' + this.szHintClass)){
						DOMHelper.removeClass(elem, 'confirm_form_l_' + this.szHintClass);
						elem.style.display = '';
					}
					var nChildren = elem.childNodes.length;
					for(var i=0; i<nChildren; ++i){
						stackElems.push(elem.childNodes[i]);
					}
				}
				var collHints = (new Array()).merge(form.getElementsByTagName('tosho:hint'), form.getElementsByTagName('hint'));
				var nHints = collHints.length;
				for(i=0; i<nHints; ++i){
					collHints[i].style.display = '';
				}
				if(callback instanceof Function)
					callback();
			});
		}
	}
};
