// JavaScript Document

function iif(cond, val1, val2 ){
	if ( cond )
		return val1
	return val2
}



Form.Element.getValue2 = function(element, form){
	if ( form )
		element = typeof(form) == 'string'
			? document.forms[form][element]
			: form[element]
			
	var type = Form.Element.getType(element)
	if ( Form.Element.getType(element) == 'radio' ){
		for(var i=0; i<element.length; i++)
			if ( element[i].checked )
				return element[i].value
		return ''
	} 
	return Form.Element.getValue(element)	
}

function $F2(element, form){
	return Form.Element.getValue2(element, form)
}

Form.Element.getType = function(element){
	if ( element.form == undefined ){
		return element[0].type	
	}
	return element.type
}

Form.Element.setValue = function(element, value) {
	var id = element.id ? element.id : element.name
	var type = element.type

	switch ( type ){
		case 'password':
		case 'file':
		case 'hidden':
		case 'reset':
		case 'submit':
		case 'text':
			element.value = value
			break;
		case 'checkbox':
			if ( value == element.value )
				element.checked = true
			break;
		case 'radio':
			if ( typeof(value) == 'boolean' )
				element.checked = value
			else {
				var arr = element.form[id]
				for( var i=0; i<arr.length; i++ )
					if ( arr[i].value == value ) 
						arr[i].checked = true
			}		
			break;
			
		case 'select-one':
			var opt = element.options
			for( var i=0; i<opt.length; i++ ){
				if ( val == opt[i].value || val == opt[i].text ){				
					opt[i].selected = true
					break
				}
			}

			if ( i == opt.length && opt[opt.length-1].value.toLowerCase() == 'other' ){
				opt[opt.length-1].selected = true
				var key = id + '_other'
				//alert(key + ' ' + value)
				if ( element.form[key] ){
					element.form[key].value = value
				}
			}			
			break
			
		case 'select-multiple':
			opt = element.options
			for(i=opt.length-1; i>=0; i--)
				if ( val.indexOf(opt[i].value) >= 0 )
					opt[i].selected = true
			break
		
		case 'textarea':
			element.value = val
			break
	}
}

Form.Element.getId = function(element){
	if ( element.form ){
		return element.id 
			? element.id 
			: element.name		
	}
	return element[0].id 
		? element[0].id 
		: element[0].name 
}


function Vesper(){}


Vesper.Form = new Object()
Vesper.Form.create = function(form_name){
	Vesper.Form[form_name] = {
		html: new Array(),
		values: new Array(),
		push: function(key, val){
			this.values[key] = val
			this.values.push(key)
		}
	}
}

Vesper.Form.fill = function(form_name){
	var arr = Vesper.Form[form_name].values
	form = document.forms[form_name]
	elements = form.elements
	for(var i=0; i<elements.length; i++){
		element = elements[i]
		val = arr[element.name.replace('[]', '')]

		if ( typeof(val) == 'function' )
			val = undefined
		//debug.println(element.name + ' ' + val)
		if ( val != undefined ) 
			Form.Element.setValue(element, val)
	}
}

Vesper.Form.setMode = function(form_name, mode){
	var arr = Vesper.Form[form_name].values
	form = document.forms[form_name]
	elements = form.elements
	arrHtml = Vesper.Form[form_name].html
	for(i=0; i<arr.length; i++){
		id = arr[i]
		if ( element = elements[id] ) {
			if ( element.type != 'hidden' && element.name != 'debug' ){
				//alert(Form.Element.getValue(element))
				
				//arr[element.name] =  element.parentNode.innerHTML
				var type = Form.Element.getType(element)
				//debug.println(id + ' ' + type)
				//debug.println(id + ' ' + Form.Element.getValue2(element))
				if (! element.form )
					element = element[0]

				arrHtml[element.name] = { 
					parent: element.parentNode,
					html: element.parentNode.innerHTML
				}
				arrHtml.push(element.name)
				element.parentNode.innerHTML = Form.Element.getValue2(element)
				//alert('s')
				//alert(element.parentNode.innerHTML)
				//return
			}			
		}
	}
}


Vesper.Form.setEditable = function(form_name){
	var arr = Vesper.Form[form_name].html
	for(i=0; i<arr.length; i++){
		id = arr[i]
		debug.println(id)
		obj = arr[id]
		obj.parent.innerHTML = obj.html
		//alert(arr[id].parent)
		//container = arr[id]
		//container.innerHTML = arr[arr[i]].html
	}
}
