Ext.namespace("dlr.cmp.queue");
dlr.cmp.queue.queueGrid = function(cfg){
	// ------------------------------------------------
	// private properties
	// ------------------------------------------------
	var that = this;
	//var selModel = new Ext.grid.CheckboxSelectionModel();
	var queueStore = layout.getQueueItemStore();
	var gridCfg = {
        dirty: false,
		store: queueStore,
        cm: new Ext.grid.ColumnModel([
           // selModel,
			{id:'queueItemId',header: "queueItemId", dataIndex: 'queueItemId', hidden: true},
			{header: "queueId", dataIndex: 'queueId', hidden: true},
			{header: "id", dataIndex: 'id', hidden: true},
            {header: "owner", dataIndex: 'owner', hidden: true},
            {header: "secret", dataIndex: 'secret', hidden: true},
            {header: "server", dataIndex: 'server', hidden: true},
            {header: "farm", dataIndex: 'farm', hidden: true},
            {header: "Title", dataIndex: 'title', width: 115, renderer: titleRenderer, sortable: true},
            {header: "ispublic", dataIndex: 'ispublic', hidden: true},
            {header: "isfriend", dataIndex: 'isfriend', hidden: true},
            {header: "isfamily", dataIndex: 'isfamily', hidden: true},
            {header: "Status", dataIndex: 'progress', width: 60, renderer: progressRenderer, align: "right", sortable: true},
            {header: "", dataIndex: 'remove', width: 25, renderer: removeRenderer, sortable: false},
            {header: "createdDate", dataIndex: 'createdDate', hidden: true}
        ]),
		//sm: selModel,
		anchor: "100% 0",
        collapsible: true,
        animCollapse: false,
        iconCls: 'icon-grid',
		enableColumnHide: false,
		enableHdMenu: false,
		frame: false,
		border: false,
		bbar:[{
				iconCls: "new-tab",
				icon: "assets/icons/pictures.png",
				text: "Items: "
			},{
				text: (!queueStore.getCount()) ? 0 : queueStore.getCount() + " "
		}]
    };
    var callbacks = {};
    var dropTarget = null;
	// ------------------------------------------------
	// private functions
	// ------------------------------------------------
	function getCmps(){
		return {
			count: that.getBottomToolbar().items.get(1)
		};
	}; // end getCmps
	function titleRenderer(value, cell, record){
		var iconBlob = "<a href='javascript:;'><img id='queueZoom-"+record.data.id+"' src='assets/icons/magnifier_zoom_in_sm.png' align='left' /></a>";
		return iconBlob + "&nbsp;" + value;
	}; // end titleRenderer
	function progressRenderer(value, cell, record){
		var progress = "";
		var value = parseInt(value, 10);

		switch(value){
			case 0 : progress = "Saved"; break;
			case 1 : progress = "<img src='assets/icons/accept.png' />"; break;
			case 2 : progress = "<img src='assets/icons/4-1.gif' />"; break;
			
			case 3 : progress = "<div ext:qtip='All Rights Reserved.' style='font-size:1.5em;'>&reg;</div>"; break;
			default : progress = "";
				break; // undefined
		};
		return progress;
	}; // end titleRenderer
	function removeRenderer(value, cell, record){
		var iconBlob = "<a href='javascript:;'><img id='queueItemDelete-"+record.data.id+"' src='assets/icons/delete.png' /></a>";
		return iconBlob;
	}; // end removeRenderer
	function cellAction(grid, row, col, evt){
		if (evt.getTarget().tagName.toLowerCase() != "img") {return;}
		var record = that.getStore().getAt(row);
		if (evt.getTarget().id.split("-")[0] == "queueZoom"){
			var id = "zoomWin-" + record.data.id;
			var flickrPhotoWindow = Ext.getCmp(id) || new dlr.cmp.flickr.flickrPhotoWindow({
				id: id,
				ownnerCmp: that
			});
			flickrPhotoWindow.loadPhoto(record);
		}
		else{
			that.getStore().remove(record);
		}
	}; // end renderEvts
	function onSave(){
		that.dirty = false;
	}; // end onSave
	function onAdd(){
		that.dirty = true;
		getCmps().count.getEl().dom.innerHTML = queueStore.getCount();
	}; // end onAdd
	function onRemove(){
		getCmps().count.getEl().dom.innerHTML = queueStore.getCount();
	}; // end onAdd
	function regCallback(id, fn){
		if (!callbacks[id]){
			callbacks[id] = {
				fn: fn
			};
			dropTarget.addToGroup(id);
		}
	}; // end regCallback
	// ------------------------------------------------
	// public properties
	// ------------------------------------------------
	// ------------------------------------------------
	// public methods
	// ------------------------------------------------
	that.isDirty = function(){
		return that.dirty;
	}; // end isDirty
	that.initDD = function(id, addFn){
		if (!dropTarget){
			dropTarget = new Ext.dd.DropTarget(that.getView().scroller, {
				copy       : false,
				notifyDrop : function(ddSource, e, data){
					callbacks[ddSource.ddGroup].fn(ddSource.dragData.nodes);
					return(true);
				}
			});
		}
		regCallback(id, addFn);
	};
	// ------------------------------------------------
	// constructor code
	// ------------------------------------------------
	Ext.apply(this, cfg);
	// apply private cfgs
	Ext.apply(this, gridCfg);
	dlr.cmp.queue.queueGrid.superclass.constructor.call(this, cfg);
	// events
	that.on("cellclick", cellAction);
	that.getStore().on("add", onAdd);
	that.getStore().on("remove", onRemove);
	that.getStore().on("clear", onRemove);
	that.on({
		"save": {
			fn: onSave,
			scope: this
		}
	});
};
Ext.extend(dlr.cmp.queue.queueGrid, Ext.grid.GridPanel);
Ext.reg("queueGrid", dlr.cmp.queue.queueGrid);

