function YConfigTable(){
  
  //datatable labels and caption
  this.dataColumnLabels = new Array();
  dataTableCaption = '';    
  
  //datatable selectionoptions
  dataTableCell = 0;
  dataTableRow = 0;

  //datatable onclickcellevent function
  this.onClickCellFunc ='';
  
  //additional columns
  this.dataAddColumns = '';
  this.dataAddFields = '';
  
  this.dataAddColumnFirst = '';
  this.dataAddFieldsFirst = '';
  
  //div which is used to put the list at
  this.listDiv = '';
  
  //element id's used to populate the list
  this.res_id = '';
  this.res_name = '';
  this.res_description = '';  
  
  //element id's used to connect button
  this.addBtnId = '';
  this.removeBtnId = '';
    
  //XML-data source
  this.conXMLURL = '';
  
  this.conAddURL = '';
  this.conDeleteURL = '';    
}


function Resource(conf){			
  function Calendar(){
    this.createCalendar = function(){
      
      var navConfig = {   
	strings : {   
	  month: "Månad",
	  year: "År",
	  submit: "Godkänn",   
	  cancel: "Avbryt",   
	  invalidYear: "Skriv in ett verkligt datum"
	},   
	monthFormat: YAHOO.widget.Calendar.SHORT,
	initialFocus: "year"  
      };  
      
      
      
      cal = new YAHOO.widget.Calendar("cal1",
				      "calContainer",
				      {									      
				      SHOW_WEEKDAYS: true,
					  SHOW_WEEK_FOOTER: true,
					  HIDE_BLANK_WEEKS: false,
					  PAGEDATE:"12/2009" }
				      );
      
      //skinning
      
      //cal.addRenderer("12/29", cal.renderBodyCellRestricted);
      selected = [];
            
      selected[selected.length] = '12/2/2009';
      selected[selected.length] = '12/3/2009';
      selected[selected.length] = '12/7/2009'; 
      
      //cal.addRenderer(selected[0] + ',' + selected[1] + ',' + selected[2], cal.renderCellStyleHighlight1);
      
      var myCustomRenderer = function(workingDate, cell) {
	
	YAHOO.util.Dom.addClass(cell, "sunday");
	//return YAHOO.widget.Calendar.STOP_RENDER;
	
      }
      
      cal.addRenderer('12/7/2009-12/20/2009', myCustomRenderer);
      

      // cal.addWeekdayRenderer(1, myCustomRenderer);
      
      cal.cfg.setProperty("start_weekday", "1");
      
      // Date labels for German locale 
      cal.cfg.setProperty("MONTHS_SHORT",   ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"]); 
      cal.cfg.setProperty("MONTHS_LONG",    ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"]); 
      cal.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "T", "O", "T", "F", "L"]); 
      cal.cfg.setProperty("WEEKDAYS_SHORT", ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö"]); 
      cal.cfg.setProperty("WEEKDAYS_MEDIUM",["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"]); 
      cal.cfg.setProperty("WEEKDAYS_LONG",  ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]); 
            
      
      // cal.cfg.setProperty('MINDATE', selected[0]); 
      // cal.cfg.setProperty('MAXDATE', selected[2]); 
      
      cal.render();     
    }
  }
  
  function List(){    
    var dataTable;
    var myDataSource;
    
    this.getDataTable = function(){
	return dataTable;
    }
      
    this.addToList = function(){
      id = document.getElementById(config.res_id).value;
      name = document.getElementById(config.res_name).value;
      description = document.getElementById(config.res_description).value;
      
      data = {id:id, name:name, description:description};
      dataTable.addRow(data,0);      
      
    }
    
    this.removeFromList = function(){
      
	var myArray = dataTable.getSelectedRows();
	recordSet = dataTable.getRecordSet();
	
	for(i=0; i<myArray.length; i++) {            
	  var rec = recordSet.getRecord(myArray[i]);
	  var index = recordSet.getRecordIndex(rec);
	  
	  if(confirm('Vill du tabort registrering med id: ' + rec.getData('id')) == true){
	    DBdeleteResource(rec.getData('id'), index);	      
	  }	    	    
	} 
    }
    
    var DBaddResource = function(id, name, description){
	var added = function(){
	    alert('added resource');
	}
	
	AjaxObject.startRequest(config.conAddURL,
				added, '', this);      
    }
        
    var DBdeleteResource = function(id, index){
      
      var removed = function(){
	alert('xml: removed resource:' + id + "with index:" + index);	
	dataTable.deleteRow(index);                
      }
      
      AjaxObject.startRequest(config.conDeleteURL,
       			      removed, '', this);      
    }
        
    this.filterListCheckbox = function(id){
      if(Dom.get(id).checked)
	this.sendReq("q", "roll");
      else
	this.sendReq('','');
    }
    
    this.sendReq = function(arglist){ 
      args = config.conXMLURL + "&" + arglist;
            
      myDataSource.sendRequest(args,
			       { success: dataTable.onDataReturnInitializeTable, scope: dataTable});
      
    }
    
    this.createList = function(){	    					                      
      
      var myColumnDefs = [
      	{key:"id", label:"Id", sortable:false, resizeable:false},
      	{key:"name", label:"Name", sortable:false, resizeable:false},
      	{key:"description", label:"description", sortable:false, resizeable:false}	
	];
      
      
      for(i=0;i<config.dataColumnLabels.length;i++){
      	myColumnDefs[i]["label"] = config.dataColumnLabels[i];	
      }                        
            
      //add additional columns      
      if(config.dataAddColumns.length){      	
      	myColumnDefs  = myColumnDefs.concat(config.dataAddColumns);
      }
      
      if(config.dataAddColumnsFirst.length){
	myColumnDefs  = config.dataAddColumnsFirst.concat(myColumnDefs);
      }
      
      
      if(config.nWeek == 2)      
 	myDataSource = new YAHOO.util.DataSource(config.conXMLURL + "&week=" + config.nWeek);      
      else if(config.nWeek == 3){
	myDataSource = new YAHOO.util.DataSource(config.conXMLURL + "&week=" + config.nWeek);      
      }
      else if(config.nWeek == 4) {
	myDataSource = new YAHOO.util.DataSource(config.conXMLURL + "&week=" + config.nWeek);             
      }
      else
	//if(config.nWeek == 1)      
 	myDataSource = new YAHOO.util.DataSource(config.conXMLURL);      
      
      //myDataSource = new YAHOO.util.DataSource(config.conXMLURL);      

      myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML; 
      myDataSource.connXhrMode = "queueRequests";
      
      
      myColumnSchema = ["id","name","description"];
      
      // if(config.dataAddColumns.length){	
      // 	myColumnSchema  = myColumnSchema.concat(config.dataAddColumns);	
      //       }
      
      if(config.dataAddFields.length){	
       	myColumnSchema  = myColumnSchema.concat(config.dataAddFields);	
      }

      if(config.dataAddFieldsFirst.length){	
	myColumnSchema  = config.dataAddFieldsFirst.concat(myColumnSchema);	
      }

      
      myDataSource.responseSchema = { 
	resultNode: "Result", 
	fields: myColumnSchema
      }; 
          
      
					     
      //alert(config.listDiv);
      dataTable = new YAHOO.widget.DataTable(config.listDiv, 
					     myColumnDefs, 
					     myDataSource, 
					     {
					     caption:config.dataTableCaption,
						 selectionMode:"single",
						 MSG_EMPTY:config.dt_msg_empty,
						 MSG_LOADING:config.dt_msg_loading,
						 MSG_ERROR:config.dt_msg_error						 
						 }
					     );                             
      

      if(config.dataTableRow){
	dataTable.subscribe("rowMouseoverEvent", dataTable.onEventHighlightRow); 
	dataTable.subscribe("rowMouseoutEvent", dataTable.onEventUnhighlightRow); 
	dataTable.subscribe("rowClickEvent", dataTable.onEventSelectRow); 
	var dt = dataTable;
	var clickRow = function(ev) {
	  config.onClickRowFunc(dt,ev);
	}
	
	dataTable.subscribe("rowClickEvent", dataTable.subscribe('rowClickEvent',
								 clickRow));
	
	dataTable.subscribe("rowSelectEvent", dataTable.clearTextSelection); 	
	
	
      }
      else if(config.dataTableCell){
	dataTable.subscribe("cellMouseoverEvent", dataTable.onEventHighlightCell); 
	dataTable.subscribe("cellMouseoutEvent", dataTable.onEventUnhighlightCell); 
	
	var dt = dataTable;
	var clickCell = function(ev) {
	  config.onClickCellFunc(dt,ev);
	  // if (column.key == 'delete') {
	  // 	    if (confirm('Are you sure?')) {
	  // 	      dataTable.deleteRow(target);
	  // 	    }
	  // 	  } else {
	  // 	    dataTable.onEventShowCellEditor(ev);
	  // 	  }
	}
	
	dataTable.subscribe("cellClickEvent", dataTable.subscribe('cellClickEvent',
								  clickCell));
	
	dataTable.subscribe("cellSelectEvent", dataTable.clearTextSelection); 	
			      
      }            
    }
    
    var AjaxObject = {
      handleFailure:function(o){
	// Fail gracefully
      },
      
      startRequest:function(postAction, callBackSuccess, postData, obj){
	var callback = {
	  success:callBackSuccess,
	  failure:this.handleFailure,
	  scope:obj
	}
	
	YAHOO.util.Connect.asyncRequest('GET', postAction, callback, postData);   
      }
      
    };
    
    
    
    /*
      AjaxObject.startRequest(config.conXMLURL,
      this.createList, '', this);
    */

    //variables in List-class
    var XMLData = '';
    var dataTable = '';    
  }
  
  var config = conf;
  this.config = conf;
  this.list = new List();
  this.cal = new Calendar();
  var Dom = YAHOO.util.Dom;
  
  //YAHOO.util.Event.addListener(this.config.addBtnId, "click", this.list.addToList, true);
  //YAHOO.util.Event.addListener(this.config.removeBtnId, "click", this.list.removeFromList, true);
  
  
  //init the list
  Event = YAHOO.util.Event;
  Event.onDOMReady(this.list.createList);
  Event.onDOMReady(this.cal.createCalendar);
}

