Ext.namespace('MyApp');

var myGrid;
var myStore;   

var _group_id=0;

var _grid_title;
var _url_get_setting;
var _url_get_data;
var _render_to_div;
var _toolbar;
var _grid_height;
var _auto_height;
var _frame;
var _collapsible;
var _observable;

Ext.QuickTips.init();





function createStore(fields, command) 
{		
    if (!myStore) 
	{        	
        myStore = new Ext.data.Store({
            proxy: new Ext.data.HttpProxy({	url: _url_get_data +'&mt='+new Date().getTime()}),            
			reader: new Ext.data.JsonReader({
                root: 'rows',
                totalProperty: 'rCnt',
                id: 'id',
                fields: fields
            })
        });
       	myStore.on('load',function(){Ext.MessageBox.hide();});
    }       
	
    return myStore;
}

/*
	get grid setting
*/
function getGridSettings() {	
    // Here we ask the server to send us the columns for the grid and the fields for setting up the store.
	
	Ext.Ajax.request({
	    url : _url_get_setting+'&mt='+new Date().getTime(),
		method: 'GET',
		success: onGetGridSettingsSuccess,
		failure: onGetGridSettingsFailure
	});
}

/*
	initialize grid
*/
function initGrid(grid_title, url_get_setting,url_get_data, render_to_div,toolbar,auto_height,grid_height, frame, collapsible,observable)
{	
	_grid_title=grid_title;
	_url_get_setting=url_get_setting;
	_url_get_data=url_get_data;
	_render_to_div=render_to_div;
	_toolbar=toolbar;
	_grid_height=grid_height;	
	_auto_height=auto_height;
	_frame=frame;
	_collapsible=collapsible;
	_observable=observable;
	_observable=observable;
	getGridSettings();
}

function getGrid()
{	
	return myGrid;
}

/*
	Function on get grid setting success
*/
function onGetGridSettingsSuccess(result,request) 
{	
	//alert(result.responseText);
	var gridSettings = Ext.util.JSON.decode(result.responseText);
	
	// The settings are an array. First element is the grid name - In case you have more than one grid, 
	// you can adapt this code so it handles them. Second element contains the column definitions. The third 
	// element contains the fields for the data store.
	var gridName = gridSettings[0];
    var columns = gridSettings[1];
    var fields = gridSettings[2];  
	myStore=null;
	myStore = createStore(fields,'data');
	
	if(myGrid)
	{
		myGrid.hide();
		myGrid=null;
		
		
	}

	if (!myGrid) 
	{		
		
		
		myGrid = new Ext.grid.GridPanel({			
			title:_grid_title,
			renderTo: _render_to_div,  
			stripeRows: true,			
			height:_grid_height,
			autoHeight: _auto_height,
			border:true,
			frame:_frame,
			store: myStore,
			columns: columns,
			collapsible:_collapsible,			
			tbar:_toolbar//,
			//width: 1195
		});		
		
	}
		
	showProgress('Downloading grid data...');
	myStore.load();	
		
	
	myGrid.on('rowdblclick',on_rowdblclick);
	myGrid.on('mouseover',on_mouseover);
	
}


//Function notify observable
function on_rowdblclick(grid,rowIndex)
{	
	var ds=grid.getStore();
	var rec = ds.getAt(rowIndex);	
	var user_id=rec.get("USER_ID");
	var group_id=rec.get("GROUP_ID");
	var package_id=rec.get("PACKAGE_ID");
	var speed_id=rec.get("SPEED_ID");
	var timeband_id=rec.get("TIMEBAND_ID");
	var rule_id=rec.get("RULE_ID");
	var billing_item_id=rec.get("BILLING_ITEM_ID");
	var sp_id=rec.get("SP_ID");
	var service_id=rec.get("SERVICE_ID"); 
	var network_service_id=rec.get("NETWORK_SERVICE_ID"); 
	var attribute_type_id=rec.get("ATTRIBUTE_TYPE_ID"); 
	var ven_id=rec.get("VEN_ID");
	var pro_id=rec.get("PRO_ID");
	var detail_id=rec.get("DETAIL_ID");
	var pro_ven_id=rec.get("PRO_VEN_ID");
	var pro_ven_det_id=rec.get("PRO_VEN_DET_ID");
	var sto_his_id=rec.get("STO_HIS_ID");
	var agent_id=rec.get("AGENT_ID");
	var commission_id=rec.get("C_ID");
	var installation_id=rec.get("INSTALL_ID");
	var assign_id=rec.get("ASSIGN_ID");
	var message_id=rec.get("MESSAGE_ID");
	var credit_control_id=rec.get("CREDIT_CONTROL_ID");
	var rating_rule_id=rec.get("RATING_RULE_ID");
	var cust_type_id=rec.get("CUST_TYPE_ID");
	var charge_block_detail_id=rec.get("CHARGE_BLOCK_DETAIL_ID");
	var tariff_group_id=rec.get("TARIFF_GROUP_ID");
	var context_id=rec.get("CONTEXT_ID");
	var target_id=rec.get("TARGET_ID");
	var deal_id=rec.get("DEAL_ID");
	//alert(deal_id);
	if(deal_id)
		_observable.fireEvent('rowdblclick',deal_id);		
	if(target_id)
		_observable.fireEvent('rowdblclick',target_id);	
	
	if(tariff_group_id)
		_observable.fireEvent('rowdblclick',tariff_group_id);	

	var area_code_id=rec.get("AREA_CODE_ID");
	var voip_tariff_id=rec.get("TARIFF_ID");
	var tariff_group_id=rec.get("TARIFF_GROUP_ID");
	var charge_block_id=rec.get("CHARGE_BLOCK_ID");
	
	var dslam_id=rec.get("ID");
	if(dslam_id) 
		_observable.fireEvent('rowdblclick',dslam_id);
		
	var disc_id=rec.get("DISC_ID");
	if(disc_id)
		_observable.fireEvent('rowdblclick',disc_id);

	if(charge_block_detail_id)
		_observable.fireEvent('rowdblclick',charge_block_detail_id);
	if(tariff_group_id)
		_observable.fireEvent('rowdblclick',tariff_group_id);

	if(assign_id)
		_observable.fireEvent('rowdblclick',assign_id);
	if(installation_id)
		_observable.fireEvent('rowdblclick',installation_id);
	if(commission_id)
		_observable.fireEvent('rowdblclick',commission_id);
	if(agent_id)
		_observable.fireEvent('rowdblclick',agent_id);
	if(sto_his_id)
		_observable.fireEvent('rowdblclick',sto_his_id);
	if(pro_ven_det_id)
		_observable.fireEvent('rowdblclick',pro_ven_det_id);
	if(pro_ven_id)
		_observable.fireEvent('rowdblclick',pro_ven_id);
	if(user_id)
		_observable.fireEvent('rowdblclick',user_id);
	if(group_id)
		_observable.fireEvent('rowdblclick',group_id);
	if(package_id)
		_observable.fireEvent('rowdblclick',package_id);
	if(speed_id)
		_observable.fireEvent('rowdblclick',speed_id);
	if(timeband_id)
		_observable.fireEvent('rowdblclick',timeband_id);
	if(rule_id)
		_observable.fireEvent('rowdblclick',rule_id);
	if(billing_item_id)
		_observable.fireEvent('rowdblclick',billing_item_id);
	if(sp_id)
		_observable.fireEvent('rowdblclick',sp_id);	
	if(service_id)
		_observable.fireEvent('rowdblclick',service_id);
	if(network_service_id)
		_observable.fireEvent('rowdblclick',network_service_id);	
	if(attribute_type_id)
		_observable.fireEvent('rowdblclick',attribute_type_id);	
	if(ven_id)
		_observable.fireEvent('rowdblclick',ven_id);
	if(pro_id)
		_observable.fireEvent('rowdblclick',pro_id);
	if(detail_id)
		_observable.fireEvent('rowdblclick',detail_id);
	if(message_id)
		_observable.fireEvent('rowdblclick',message_id);
	if(credit_control_id)
		_observable.fireEvent('rowdblclick',credit_control_id);
	if(rating_rule_id)
		_observable.fireEvent('rowdblclick',rating_rule_id);
	if(cust_type_id)
		_observable.fireEvent('rowdblclick',cust_type_id);
	if(area_code_id)
		_observable.fireEvent('rowdblclick',area_code_id);
	if(voip_tariff_id)
		_observable.fireEvent('rowdblclick',voip_tariff_id);
	if(charge_block_id)
		_observable.fireEvent('rowdblclick',charge_block_id);
	if(context_id)
		_observable.fireEvent('rowdblclick',context_id);
}

function on_mouseover()
{	
	//Block Tool Tips
	new Ext.ToolTip({		
		title: 'Note Info',
		width:200,
		html: 'Double click to edit this record.',
		autoHide: false,
		trackMouse:true
	});
	//_grid_tip.show();
}

/*
	Load Modal Form
*/
function LoadModalForm(url,iwidth,iheight,ititle)
{	
	var win = new Ext.Window({
			y:20,
			width: iwidth,
			id: 'winModal',                                  
			height: iheight,
			title: ititle, 
			modal: true,
			html: '<div id="wind-div"><iframe id="center-iframe-1" width="100%" height="100%" frameborder="0" scrolling="auto" style="border:0px none;"></iframe></div>'		    
			});			
		win.show();
		Ext.get('center-iframe-1').dom.src = url;
	
		win.on('close',function(){
		window.location.reload(true);
	});
}

/*
	Function on get grid setting failure
*/
function onGetGridSettingsFailure( result, request) 
{
    Ext.MessageBox.alert('Failed', 'GetColumns failed: '+result.date); 
} 

/*
	Function Show Progress bar
*/
function showProgress(msg) 
{
	
    Ext.MessageBox.show({
       msg: msg,
       width:250,
       wait:true,
       waitConfig: {interval:200}
   });
}
