//var featureList=[ "ajax2", "grid", "json" , "dialog" ];		

// d = new LineInputs( { el: 'lineItems', form: 'Prints', addclicker: 'add', rmclicker: 'rm' editclicker: 'edit', tagName: 'LineInput', litype: 'ShipTo' } );
//

function getElementInput( element ){
		var elval = '';
		switch ( element.type) { 
			case "text": case "hidden": case "password": 
				elval = element.value;
				break; 
			case "textarea":
				elval = element.value.replace( /\n/g, "~_" );
				break;
			case "checkbox": 
				element.checked ? elval = 'Yes' : elval = 'No';
				break;
			case "radio":
				element.checked ? elval = element.value : elval ='';
				break;
			case "select": case "select-one":  
				elval = element.options[element.selectedIndex].text; 
				break; 
		} 
	
		return( elval );
	}

function LineInputs( optObj ){
	var self = this;
	
	self.options = {
			el:false,
			form: false,
			addclicker: false,
			rmclicker: false,
			editclicker: false,
			moddiv: false,
			tagName: 'LineInput',
			litype: 'UnSet',
			inputsdlog: false
			};
	
	for (var p in optObj) { self.options[p] = optObj[p]; }
	
	this.form = $( self.options.inputsform );
	this.edit = false;

	this.hostform = $( self.options.hostform );
	this.hostform.LineInputs = this;
	
	//allocate dialog
	if( self.options.inputsdlog ){
		this.dlog = new OAT.Dialog(  self.options.hostform , self.options.inputsdlog, { modal:0, 
										buttons: 1, 
										width:OAT.Dom.getWH( self.options.inputsdlog )[0] + 20,
										okval: 'Add',
										cancelval: 'Close' } );
		this.dlog.ok = function(){ if( self.edit == true ){ self.dlog.hide(); } self.toGrid(); self.form.reset(); }
		this.dlog.cancel = this.dlog.hide;
		var frms = document.getElementsByName( self.form.name );
		if( frms.length > 1 ){ //ie 
			self.form = frms[ frms.length - 1 ];
			}
		}

	//create clickers
	this.mkclickers = function(){
		var clickerleft = OAT.Dom.create( 'span', false, "LImodleft" );
		self.addclicker = OAT.Dom.image( '/_sd/images/oat/MacWin_maximize_hover.gif', false, false, false );
	
		self.clickermod = OAT.Dom.create( 'span' );
		self.rmclicker = OAT.Dom.image( '/_sd/images/oat/MacWin_close_hover.gif', false, false, false );
		
		self.editclicker = OAT.Dom.image( '/_sd/images/oat/MacWin_minimize_hover.gif', false, false, false );
		
		OAT.Dom.append( [ self.clickermod, self.rmclicker, OAT.Dom.text( ' Remove ' ), self.editclicker, OAT.Dom.text( ' Edit ' ) ] );
		OAT.Dom.hide( self.clickermod );
			
		var clickerend = OAT.Dom.create( 'span', false, "LImodright" );
		
		OAT.Dom.append( [ clickerleft, self.addclicker, OAT.Dom.text( ' Add ' ), self.clickermod, clickerend ] ); 
		OAT.Dom.append( [ self.options.el, clickerleft ] );
	};
	this.mkclickers();
	
	 
	//allocate grid
	this.grid = new OAT.Grid( self.options.el, { allowColumnHiding : false } );
	this.rows = function(){ return this.grid.rows.length; }
	
	this.headers = new Array();
	var fels = self.form.elements;
	for( var i = 0; i < fels.length; ++i ){
		if( fels[i].name ){
			this.headers.push( fels[i].name );
			}
		}
	this.grid.createHeader( this.headers );
	
	this.getInputs = function(){
		var fels = self.form.elements;
		var rds = new Array();
		for( var i = 0; i < fels.length; ++i ){
		if( fels[i].name ){
			rds.push( getElementInput( fels[i] ) );
			}
		}
		return( rds );
	};
	
	this.setInput = function( el, v ){
		
		switch ( el.type ) { 
			case "text": case "hidden": case "password": 
				el.value = v;
				break;
			case "textarea":
				el.value = v.replace( /~_/g, "\n" );
				break;
			case "checkbox": 
				el.checked = bool.test( v );
				break; 
			case "radio":
				var elist = document.getElementsByName( el.name );
				for( var i = 0; i < elist.length; ++ i ){
					if( elist[ i ].type == 'radio' && elist[ i ].form.name == el.form.name && elist[ i ]. name == el.name ){
						elist[i].checked = elist[ i ].value == v ? true : false; 
						}
					}
				break;
			case "SELECT": case "select-one":  
				for( var octr=0; octr < el.options.length; ++octr ){
					if( el.options[octr].text == v ){ 
						el.options[octr].selectedIndex = octr; 
						el.options[octr].selected = true;
						}
					}	
				break; 
			} 
	};
	
	this.setInputs = function( obj ){ for (var p in obj) { this.setInput( self.form.elements[ p ], obj[p] ? obj[p] : '' ); } };
	
	this.toGrid = function(){ 
		var newrow = false;
		self.edit ? self.updateSelected() : newrow = self.grid.createRow( self.getInputs() );
		if( newrow ){ OAT.Event.attach( newrow, "click", function(){ 
										var sgr = self.grid.rows;
										for( var i = 0; i < sgr.length; ++i ){
											if( sgr[i].selected ){ OAT.Browser.isIE ? OAT.Dom.hide( self.clickermod ) : OAT.Dom.show( self.clickermod ); return; }
											}
										OAT.Browser.isIE ? OAT.Dom.show( self.clickermod ) : OAT.Dom.hide( self.clickermod );
										} ) } 
		self.edit = false;
	};
	
	this.updateSelected = function(){
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			if( rows[i].selected ){
				var rc = rows[i].cells;
				var inps = self.getInputs();
				for( var c = 0; c < rc.length; ++c ){
					OAT.Browser.isIE ? rc[c].value.innerText = inps[c] : rc[c].value.textContent = inps[c];
					}
				}
			}
		OAT.Dom.hide( this.clickermod );
	};
	
	this.removeSelected = function(){
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			if( rows[i].selected ){
				rows[i].clear();
				}
			}
		OAT.Dom.hide( self.clickermod );
		self.edit = false;
	};
	
	this.deselectSelected = function(){
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			if( rows[i].selected ){
				rows[i].deselect();
				}
			}
	};
	
	this.editSelected = function(){ self.edit = self.fromGrid(); if( self.dlog ){ self.dlog.okBtn.value = 'Update'; self.dlog.show() } };
	
	this.fromGrid = function(){
	
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			if( rows[i].selected ){ 
				var rc = rows[i].cells;
				var obj = {};
				for( var c = 0; c < rc.length; ++c ){
					var v = rc[c].value.textContent ? rc[c].value.textContent : rc[c].value.innerText;
					obj[ self.headers[ c ] ] = v ? v : '';
				}
				self.setInputs( obj );
				return( true );
			}
		
		}
		return( false );
	};
	
	this.asXML = function(){
	
		var XMLStr = ''; 
		
		function mkatt( n, v ){ return( "\n\t" + n + '="' + OAT.Dom.toSafeXML( v ) + '" ' ); }
		function mkchld( n, v ){ return( '\n\t<' + n + '>' + OAT.Dom.toSafeXML( v ) + '</' + n + '>' ); }
		
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			var rc = rows[i].cells;
			if( rc.length > 0 ){ 
				XMLStr += "<" + self.options.tagName; XMLStr += mkatt( 'type', self.options.litype ); 
				for( var c = 0; c < rc.length; ++c ){
					var v = rc[c].value.textContent ? rc[c].value.textContent : rc[c].value.innerText;
					XMLStr += mkatt( self.headers[c], v ? v : '' );
				}
			XMLStr += "/>\n";
			}
		}
		
		return( XMLStr );
	};
	
	this.isEmpty = function(){
		var rows = self.grid.rows;
		for( var i = 0; i < rows.length; ++i ){
			var rc = rows[i].cells;
			if( rc.length > 0 ){  return( false ) }
			}
		return( true );
	};
	
	this.fillFromXML = function( ){
		
		
	};
	
	
	if( ! self.options.inputsdlog ){
		OAT.Event.attach( self.addclicker, 'click', self.toGrid );
	}else{
		OAT.Event.attach( self.addclicker, 'click', function(){ self.deselectSelected(); self.dlog.okBtn.value = 'Add'; self.dlog.show(); } );
	}
	OAT.Event.attach( self.rmclicker, 'click', self.removeSelected );
	OAT.Event.attach( self.editclicker, 'click', self.editSelected );
	
}
