financialReport_regTable.prototype.admin = function(saveRegEntryURL, insertTextURL, updateTextURL, saveSectionCallback)
{
	this.translateOverlay = YAHOO.util.Dom.get("translateOverlay_"+this.sectionId);
	this.bundleTranslateOverlay = YAHOO.util.Dom.get("bundleTranslateOverlay_"+this.sectionId);
	this.numberOverlay = YAHOO.util.Dom.get("numberOverlay_"+this.sectionId);
	this.saveRegEntryURL = saveRegEntryURL;
	this.insertTextURL = insertTextURL;
	this.updateTextURL = updateTextURL;
	this.saveSectionCallback = saveSectionCallback;
	this.currentOverlay = null;
	this.callInProgress = false;
	
	
    this.editorSaveCell = function(data){
    	this.regTable.saveRecord( data.editor.getRecord() );
    };
    
    
    this.highlightCell = function(oArgs) {
    	this.onEventUnhighlightRow(oArgs);
        var elCell = oArgs.target;
        this.highlightCell(elCell);
    };
    
    
    this.showTranslation = function(args)
    {
    	var record = this.getRecord( args.target );
    	
    	var elCell = args.target;
    	elCell = this.getTdEl(elCell);
    	var col = this.getColumn( elCell );
    	
    	if ( col.id.indexOf("post-") == 0 ) // startsWith
    	{
    		var translation = new YAHOO.widget.Overlay("translateOverlay_"+this.regTable.sectionId, 
    			{ context:[elCell, "tl", "bl", ["beforeShow", "windowResize"]],
    			  visible:false, 
    			  width:"200px",
				  constraintoviewport:true}  );
    		
    		var inputs = YAHOO.util.Selector.query("input[type=text]", "translateOverlay_"+this.regTable.sectionId);
	    	for ( var i=0; i<inputs.length; i++ )
	    	{
	    		var input = inputs[i];
	    		var name = input.getAttribute("name");
	    		input.value = record.getData( name );
	    	}

    		var boldChk = YAHOO.util.Selector.query("input.rowBoldChk", "translateOverlay_"+this.regTable.sectionId, true);
    		boldChk.checked = record.getData("bold")=="x";
    		
    		var toplineChk = YAHOO.util.Selector.query("input.rowToplineChk", "translateOverlay_"+this.regTable.sectionId, true);
    		toplineChk.checked = record.getData("topline")=="x";
    		
    		var underlineChk = YAHOO.util.Selector.query("input.rowUnderlineChk", "translateOverlay_"+this.regTable.sectionId, true);
    		underlineChk.checked = record.getData("underline")=="x";

    		var headerChk = YAHOO.util.Selector.query("input.rowHeaderChk", "translateOverlay_"+this.regTable.sectionId, true);
    		headerChk.checked = record.getData("header")=="x";
    		
    		var italicChk = YAHOO.util.Selector.query("input.rowItalicChk", "translateOverlay_"+this.regTable.sectionId, true);
    		italicChk.checked = record.getData("italic")=="x";

    		translation.render();
    		this.regTable.translateOverlay.record = record;
    		this.regTable.translateOverlay.dataTable = this;
    		this.regTable.translateOverlay.translation = translation;
		 	this.cancelCellEditor();
		 	this.regTable.currentOverlay = translation;  
		 	translation.show();
    	} else {
			var number = new YAHOO.widget.Overlay("numberOverlay_"+this.regTable.sectionId, 
    			{ context:[elCell, "tl", "bl", ["beforeShow", "windowResize"]],
    			  visible:false, 
    			  width:"125px",
				  constraintoviewport:true}  );
			
    		var inputs = YAHOO.util.Selector.query("input[type=text]", "numberOverlay_"+this.regTable.sectionId);
			inputs[0].value = record.getData(col.key);
			
			var labels = YAHOO.util.Selector.query("label", "numberOverlay_"+this.regTable.sectionId);
			labels[0].innerHTML = col.label + ":";

    		number.render();
    		this.regTable.numberOverlay.record = record;
    		this.regTable.numberOverlay.dataTable = this;
    		this.regTable.numberOverlay.number = number;
    		this.regTable.numberOverlay.col = col;
		 	this.regTable.currentOverlay = number;  
		 	number.show();
		}
    }
    
    this.showBundleTranslation = function(args)
    {
    	if ( args.event.altKey )
    		return;
    		
		var elCell = args.target;
    	elCell = this.getThEl(elCell);
    	
    	var col = this.getColumn( elCell );
    	var colId = col.id;
    	
    	if ( colId.indexOf("post-") == 0 )
    		return;
    	if ( colId.indexOf("0") == colId.length-1 )
    		colId = colId.substr(0, colId.length-1);
    	
		var translation = new YAHOO.widget.Overlay("bundleTranslateOverlay_"+this.regTable.sectionId, 
			{ context:[elCell, "tl", "bl", ["beforeShow", "windowResize"]],
			  visible:false, 
			  width:"200px",
		 	  constraintoviewport:true } );
		
		var inputs = YAHOO.util.Selector.query("input[type=text]", "bundleTranslateOverlay_"+this.regTable.sectionId);
    	for ( var i=0; i<inputs.length; i++ )
    	{
    		var input = inputs[i];
    		var name = input.getAttribute("name");
    		
    		if ( col.labels[name] == "" )
    		{
    			input.value = colId;
    		} else {
	    		input.value = col.labels[name];
	    	}
    	}
		
		translation.render();
		this.regTable.bundleTranslateOverlay.column = col;
		this.regTable.bundleTranslateOverlay.columnId = colId;
		this.regTable.bundleTranslateOverlay.dataTable = this;
		this.regTable.bundleTranslateOverlay.translation = translation;
		this.cancelCellEditor();
		this.regTable.currentOverlay = translation;
		translation.show();
    }
    
    this.hideAllOverlays = function(args)
    {
    	if ( this.regTable.currentOverlay != null )
	    	this.regTable.currentOverlay.hide();
    }
    
    this.toggleColumn = function(args)
    {
    	if ( this.regTable.callInProgress )
    		return;
    	
    	var elCell = args.target;
    	if ( args.event.altKey )
    	{
    		var col = this.getColumn( elCell );
    		var th = col.getThEl();
    		
    		if ( !this.regTable.isSelectedColumn(col) )
    		{
    			this.regTable.selectColumn(col);
	    		this.regTable.sectionProps[ "col_"+col.id ] = "selected";
    		} else {
    			this.regTable.unselectColumn(col);
    			this.regTable.sectionProps[ "col_"+col.id ] = "";
    		}
    		
    		this.refreshView();
    		
    		this.regTable.saveSectionProps();
    	}
    	
    }
    
    this.saveSectionProps = function()
    {
    	var props = "";
    	for ( key in this.sectionProps )
    	{
    		props += key+"="+this.sectionProps[key]+"\n";
    	}
    	this.saveSectionCallback( props ); 
    }
    
    var regTable = this;
    
	new YAHOO.util.Element("numberSave_"+this.sectionId).on("click", function(){
    	
    	var record = regTable.numberOverlay.record;
    	var dataTable = regTable.numberOverlay.dataTable;
    	var number = regTable.numberOverlay.number;
    	var col = regTable.numberOverlay.col;
    	
    	var data = record.getData();
    	var inputs = YAHOO.util.Selector.query("input", "numberOverlay_"+regTable.sectionId);
    	
		data[col.key] = inputs[0].value;
		
    	regTable.saveRecord(record);
    	dataTable.updateRow(record, data);
    	
    	number.hide();
    	this.regTable.currentOverlay = null;
    });
	
    new YAHOO.util.Element("translateSave_"+this.sectionId).on("click", function(){
    	
    	var record = regTable.translateOverlay.record;
    	var dataTable = regTable.translateOverlay.dataTable;
    	var translation = regTable.translateOverlay.translation;
    	
    	var data = record.getData();
    	var inputs = YAHOO.util.Selector.query("input[type=text]", "translateOverlay_"+regTable.sectionId);
    	for ( var i=0; i<inputs.length; i++ )
    	{
    		var input = inputs[i]; 
    		var name = input.getAttribute("name");
    		var value = input.value;
    		
    		data[name] = value;
    	}
    	
    	var boldChk = YAHOO.util.Selector.query("input.rowBoldChk", "translateOverlay_"+regTable.sectionId, true);
		data['bold'] = ( boldChk.checked?"x":"" );
	
		var toplineChk = YAHOO.util.Selector.query("input.rowToplineChk", "translateOverlay_"+regTable.sectionId, true);
		data['topline'] = ( toplineChk.checked?"x":"" );
	
		var underlineChk = YAHOO.util.Selector.query("input.rowUnderlineChk", "translateOverlay_"+regTable.sectionId, true);
		data['underline'] = ( underlineChk.checked?"x":"" );
	
		var headerChk = YAHOO.util.Selector.query("input.rowHeaderChk", "translateOverlay_"+regTable.sectionId, true);
		data['header'] = ( headerChk.checked?"x":"" );
	
		var italicChk = YAHOO.util.Selector.query("input.rowItalicChk", "translateOverlay_"+regTable.sectionId, true);
		data['italic'] = ( italicChk.checked?"x":"" );
	
    	regTable.saveRecord(record);
    	dataTable.updateRow(record, data);
    	
    	translation.hide();
    	this.regTable.currentOverlay = null;
    });
    
    new YAHOO.util.Element("bundleTranslateSave_"+this.sectionId).on("click", function(){
    	var column = regTable.bundleTranslateOverlay.column;
    	var columnId = regTable.bundleTranslateOverlay.columnId;
    	var dataTable = regTable.bundleTranslateOverlay.dataTable;
    	var translation = regTable.bundleTranslateOverlay.translation;
    	
    	var label = YAHOO.util.Selector.query( "span", column.getThEl() )[0];
    	
    	var url = updateTextURL;
    	if ( label.innerHTML.indexOf("?") == 0 ) // startsWith
    	{
    		url = insertTextURL;
    	} 
    	
    	var queryString = "siteId="+regTable.siteId+"&id="+column.bundle_id+"&keyName=" + columnId;
    	
    	var inputs = YAHOO.util.Selector.query("input[type=text]", regTable.bundleTranslateOverlay);
    	for ( var i=0; i<inputs.length; i++ )
    	{
    		var input = inputs[i];
    		var name = input.getAttribute("name");
    		var value = input.value;
    		
    		if ( name == regTable.locale )
    		{
    			label.innerHTML = value;
    		}
    		
    		column.labels[name] = value;
    		
    		queryString += "&locale="+name+"&text="+encodeURIComponent(value);
    	}
    	
    	var handleResponse = function(o){
    		if ( o.status == 401 )
    		{
    			alert("Not authorized, please log in to the administration again.");
    		}
    	}
    	var callback = {
		  success: handleResponse,
		  failure: handleResponse
		};
		
    	YAHOO.util.Connect.asyncRequest('POST', url, callback, queryString); 
    	
    	translation.hide();
    	this.regTable.currentOverlay = null;
    });
    
	new YAHOO.util.Element("translateCancel_"+this.sectionId).on("click", function(){
    	var translation = regTable.translateOverlay.translation;
    	translation.hide();
	});
	new YAHOO.util.Element("bundleTranslateCancel_"+this.sectionId).on("click", function(){
    	var translation = regTable.bundleTranslateOverlay.translation;
    	translation.hide();
	});
	new YAHOO.util.Element("numberCancel_"+this.sectionId).on("click", function(){
    	var number = regTable.numberOverlay.number;
    	number.hide();
	});
	
    
    this.dataTable.subscribe("cellMouseoverEvent", this.highlightCell);
    this.dataTable.subscribe("cellMouseoutEvent", this.dataTable.onEventUnhighlightCell);
    //this.dataTable.subscribe("cellClickEvent", this.dataTable.onEventShowCellEditor);
    this.dataTable.subscribe("cellClickEvent", this.hideAllOverlays);
    this.dataTable.subscribe("cellClickEvent", this.showTranslation);
    this.dataTable.subscribe("theadCellClickEvent", this.hideAllOverlays);
    this.dataTable.subscribe("theadCellClickEvent", this.showBundleTranslation);
    this.dataTable.subscribe("theadCellClickEvent", this.toggleColumn);
    this.dataTable.subscribe("editorSaveEvent", this.editorSaveCell);
}

financialReport_regTable.prototype.saveRecord = function(record)
{
	var row = record.getData();
	var id = row.id;
	
	var props = "";
	for ( d in row )
	{
		if ( d != "id" )
	    		props += d+"="+row[d]+"\n";
	}
	
	var postData = "siteId="+this.siteId+"&id="+id+"&registryId="+this.regId+"&locale="+this.locale+"&properties="+encodeURIComponent(props);
	
	var url = this.saveRegEntryURL;
	
	var handleResponse = function(o){
		if ( o.status == 401 )
		{
			alert("Not authorized, please log in to the administration again.");
		}
	}
	
	var callback = {
	  success: handleResponse,
	  failure: handleResponse
	};
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback, postData); 
}


/* A formatter for notes, for when layoutMode=admin. Does not generate links like notFormatter
 */
var adminNotFormatter = function(elCell, oRecord, oColumn, oData)                 
{
	elCell.setAttribute("align", "center");
	elCell.style.textAlign = "center";
	
	var not = oRecord.getData("not");
	var notes = not.replace(/,/g,".").replace(".0",'').split(".");
	
	if ( notes.length == 1 && notes[0] == " " )
		notes = [];
	var content = "";
	for ( var i=0; i<notes.length; i++ )
	{
		content += notes[i]+ ( i==notes.length-1 ? "":", " );
	}
	
	generalCellFormatter(elCell, oRecord, oColumn, oData);
	
	elCell.innerHTML = content;
};  
