/*
	This note must stay intact.
	
	Author:
		Mattias Rundqvist, Webparts (www.webparts.se)
	License:
		Creative Commons Attribution-Share Alike 3.0 License
		http://creativecommons.org/licenses/by-sa/3.0/
*/

var wp_Form = function( mcfg ) {

	var self = this;
	
	var cfg = {
		id : mcfg.id ? mcfg.id : ""
	};
	
	var placeholder = new Array();
	
	// -- debug
	try{var debug = new wp_Log();}catch(e){var debug = new Object();debug.log = function(){};};
	this._function = "wp_Form";
	this.debug = debug;
	// --
	
	if( !cfg.id ) {
		debug.log(self,"FATAL! id is missing");
	}
	
	this.init = function() {
	
		var obj = self.form();
	
		for( var count = 0; count < placeholder.length; count++ ) {
			if( obj[placeholder[count].name] ) {
				obj[placeholder[count].name].value = placeholder[count].text;
				
				obj[placeholder[count].name].onfocus = Function("if( this.value == '"+placeholder[count].text+"' ) {this.value = '';}");
				obj[placeholder[count].name].onblur = Function("if( this.value == '' ) {this.value = '"+placeholder[count].text+"';}");
			}
		}
	}
	
	if( document.addEventListener ) {
		window.addEventListener("load",self.init,true);
	} else if( document.attachEvent ) {
		window.attachEvent("onload",self.init);
	} else {
		window.onload = this.init;
	}
	
	this.addPlaceHolder = function(ph) {
		var tmp = {
			name : (ph.name || ph.field),
			text : (ph.text || ph.value )
		};
		placeholder.push_back(tmp);
	}
	
	// -- returnerar värdet av ett fält eller det kombinerade värdet av en en fältserie
	this.get = function( name ) {
	
		var field = self.form()[name];
		var type;
		var value = null;
		
		if( field && field.length && field.length > 1 ) {
			// -- multipla input's (vanligen radio, checkbox etc..)
			
			var count = 0;
			type = field.type ? field.type : field[0].type;
			value = new Array();
			
			switch( type ) {
			
				case "checkbox" :
				case "radio" :
					for( count = 0; count < field.length; count++ ) {

						if( field[count].checked && field[count].value.length ) {
							value.push_back( field[count].value );
						}
					}
					break;
				
				case "hidden" :
				case "text" :
				case "textarea" :
					for( count = 0; count < field.length; count++ ) {
						if( field[count].value.length ) {
							value.push_back( field[count].value );
						}
					}
					break;
				
				case "select" :
				case "select-one" :
					value.push_back( field.options[field.selectedIndex].value );
					break;
					
				case "select-multiple" :
					for( count = 0; count < field.length; count++ ) {
						if( field.options[count].selected && field.options[count].value.length ) {
							value.push_back( field.options[count].value );
						}
					}
					break;
			}
			
		} else if( field ) {
			// -- enkla inputs (vanligen text, textarea)
			type = field.type;
			
			switch( type ) {
			
				case "checkbox" :
				case "radio" :
					value = (field.checked) ? field.value : "";
					break;
				
				case "hidden" :
				case "text" :
				case "textarea" :
					value = field.value;
					break;
				
				case "select" :
				case "select-one" :
					value = field.options[field.selectedIndex].value;
					break;
					
				case "select-multiple" :
					value = field.options[0].selected ? field.options[0].value : "";
			}		
		}
		
		debug.log(self,"value of '"+(field.name?field.name:field[0].name)+"': "+value);
	
		return value;
	}
	
	this.set = function( name, value ) {		
	
		var field = self.form()[name];
		var type;
		
		if( typeof value == "string" ) {
			value = new Array(value);
		}
		
		if( field ) {
			// -- enkla inputs (vanligen text, textarea)
			type = field.type ? field.type : field[0].type;
			
			switch( type ) {
			
				case "checkbox" :
				case "radio" :
					if( !field.length ) {
						field.checked = (value.find( field.value ) != -1) ? true : false;
					} else {
						for( var count = 0; count < field.length; count++ ) {
							field[count].checked = (value.find( field[count].value ) != -1) ? true : false;
						}
					}
					break;
				
				case "text" :
				case "textarea" :
					if( !field.length ) {
						field.value = value[0];
					} else {
						for( var count = 0; count < field.length; count++ ) {
							field[count].value = value[0];
						}
					}
					break;
				
				case "select" :
				case "select-one" :
				case "select-multiple" :					
					for( var count = 0; count < field.options.length; count++ ) {
						field.options[count].selected = (value.find( field.options[count].value ) != -1) ? true : false;
						debug.log(self,"value: " + field.options[count].value + " " +value.find( field.options[count].value ) );
					}
					break
			}		
		}
	}
	// --
	
	this.disable = function( name ) {
	
		var elements = self.form().elements;
		
		if( typeof name != "undefined" ) {
			name = name.split(",");
			var tmp = new Array();
			for( var count = 0; count < elements.length; count++ ) {
				if( name.find(elements[count].name) != -1 ) {
					tmp.push_back(elements[count]);
				}
			}
			elements = tmp;
		}
		var length = elements.length;
		
		for( var count = 0; count < length; count++ ) {
			elements[count].disabled=true;
		}
	}
	
	this.enable = function( name ) {
	
		var elements = self.form().elements;
		
		if( typeof name != "undefined" ) {
			name = name.split(",");
			var tmp = new Array();
			for( var count = 0; count < elements.length; count++ ) {
				if( name.find(elements[count].name) != -1 ) {
					tmp.push_back(elements[count]);
				}
			}
			elements = tmp;
		}
		var length = elements.length;
		
		for( var count = 0; count < length; count++ ) {
			elements[count].disabled=false;
		}
	}
	
	this.submit = function() {
		self.form().submit();
	}
	this.reset = function() {
		self.form().reset();
	}
	
	this.form = function() {
		
		if( cfg.id ) {
			var forms = document.getElementsByTagName("form");
			var count = 0;
			while( count < forms.length ) {
				if( forms[count] == document.getElementById(cfg.id) ) {
					return forms[count];
				}
				count++;
			}
		}
		return document[cfg.name];
	}
	
	this.collect = function( field ) {
	
		if( !document[cfg.id] ) {
			debug.log(self,"FATAL! form is missing");
		}
		
		var fields = self.form();
		
		// -- Är fields "undefined", prova id...
		
		
		var length = fields.length;
		var name = "";
		var value = {};
		var datafields = ["input","textarea","select"];
		
		debug.log(self,"form length: " +length);
		
		for( var count = 0; count < length; count++ ) {
			if( datafields.find( fields[count].tagName.toLowerCase() ) != -1 ) {
				name = fields[count].name ? fields[count].name : fields[count][0].name;
				if( !field || field == name )
					value[name] = self.get(name);
				debug.log(self,"name: " +name +", value: "+value[name]);
			}
		}
		return value;
	}
}
// --

