/* -----Global items--------------------------------------------------------------------------------------------------------------------------------------------*/ 

var settings = {
	'viewFilters':true,    // view filters when open
	'positionWidthMin':220, // position width when filters open
	'positionWidthMax':300, // position width when filters close
	'onSiteLocationMin':120, // Location width when filters open
	'onSiteLocationMax':140, // Location width when filters close
	'gridWidthMin':618,     // grid width when filters open
	'gridWidthMax':740,      // grid width when filters close
	'recordSearchTermTimeout':2000 // Timeout on keyup to record search term in miliseconds.
};

var columns = [
        {id:'postingID', header:'postingID', width:60, sortable: false,  dataIndex: 'postingID', hidden:true, hideable:false},
		{id:'onSiteLocationRadius', header:'onSiteLocationRadius', width:60, sortable: false,  dataIndex: 'onSiteLocationRadius', hidden:true, hideable:false},
		{id:'url', header:'url', width:60, sortable: false,  dataIndex: 'url', hidden:true, hideable:false},
        {id:'title', header:'position', width:(settings['viewFilters']?settings['positionWidthMin']:settings['positionWidthMax']), sortable: false,  dataIndex: 'title', css: 'white-space:normal;'},  
        {id:'onSiteLocation', header:'location', width:(settings['viewFilters']?settings['onSiteLocationMin']:settings['onSiteLocationMax']), sortable: false,  dataIndex: 'onSiteLocation'}, 
        {id:'createdOn', header:'active since', width:120, sortable: false,  dataIndex: 'createdOn'},
        {id:'company', header:'company', width:120, sortable: false,  dataIndex: 'company'}
];

var dataStore = null;
var dataFilters = null;

// getElementById
function getById(id) {
	return document.getElementById(id);
}

function trim(string) {
   var re = /^\s+|\s+$/g;
   return string.replace(re, "");
}

Ext.onReady(function() {
	// active since filter calendar
	
	Ext.state.Manager.setProvider(new Ext.state.Provider());
	
	var ds = new Ext.data.Store({
		proxy: new Ext.data.HttpProxy({
			url:'JobPostingGrid.php'
		}),
		reader: new Ext.data.JsonReader({
			totalProperty: 'data.total',
			root: 'data.results'
		}, Ext.data.Record.create([
			{name: 'title'},
			{name: 'onSiteLocation'},
			{name: 'createdOn'},
			{name: 'company'},
			{name: 'url'}])),
		sortInfo: {field: 'createdOn', direction: 'DESC'},
		remoteSort: true
	});
			
	var filters = new Ext.ux.grid.GridFilters({filters:[
			{type: 'string',  dataIndex: 'onSiteLocation'},
			{type: 'string', dataIndex: 'onSiteLocationRadius'}
	]});
	
	filters.addFilter({type:'string', dataIndex:'onSiteLocationRadius', value: '5'});
	filters.addFilter({type:'string', dataIndex:'onSiteLocation', value:getById('location').value});
	
	var cm = new Ext.grid.ColumnModel(columns);
	cm.defaultSortable = true;
	
	// paging bar
	var paging = new Ext.PagingToolbar({
		  pageSize: 20,
		  store: ds,
		  displayInfo: true,
		  displayMsg: '{2} job postings | {0}-{1} displayed ',
		  emptyMsg: "No jobs to display",
		  prependButtons: true
	});
	// paging 2
	var paging2 = new Ext.PagingToolbar({
		  pageSize: 20,
		  store: ds,
		  displayInfo: true,
		  displayMsg: '{2} job postings | {0}-{1} displayed ',
		  emptyMsg: "No jobs to display",
		  prependButtons: true
	});
	
	 var grid = new Ext.grid.GridPanel({
	 	id: 'jobs',
	 	el: 'searchResultsGrid',
		ds: ds,
	    store: ds,
	    cm: cm,
		plugins: filters,
	    height:750,
	    width:(settings['viewFilters']?settings['gridWidthMin']:settings['gridWidthMax']),
	    autoExpandMax:true,
	    stripeRows: true,
	    disableSelection:true,
	    tbar:paging,
	    bbar:paging2
	});
	
	//click row open win
	grid.on('rowclick', function(grid, rowIndex, e){
		var rec = grid.store.getAt(rowIndex);
		rec.set('status', !rec.get('status'));
		var pageTitle = rec.get('title');
		var jobId = rec.json['postingID'];
		var jobUrl = rec.json['url'];
		window.open(jobUrl);
	});
	
	grid.render();
	paging.add(' <a id="btn-filter" href="#"><b>open filter menu</b></a>');
	grid.doLayout();
	
	// btn to open filters
	if (settings['viewFilters'])
		document.getElementById('btn-filter').style.display='none';
	else
		document.getElementById('table-filter').style.display='none';
	
	// filters
	Ext.EventManager.on('close-filter', 'click',  function() {
		document.getElementById('table-filter').style.display='none';
		document.getElementById('btn-filter').style.display='';
		grid.setWidth(settings['gridWidthMax']);
		grid.getColumnModel().setColumnWidth(0, settings['positionWidthMax']);
		grid.getColumnModel().setColumnWidth(3, 100);
		return false;
	});
	
	// filters
	Ext.EventManager.on('btn-filter', 'click',  function() {
		document.getElementById('btn-filter').style.display='none';
		document.getElementById('table-filter').style.display='';
		grid.setWidth(settings['gridWidthMin']);
		grid.getColumnModel().setColumnWidth(0, settings['positionWidthMin']);
		grid.getColumnModel().setColumnWidth(3, 80);
		return false;
	});
	
	ds.load({params:{start: 0, search: 'Programmer', limit: 20, empty: false}});
	dataStore = ds;
	dataFilters = filters;
});

function loadGrid()
{
	var s = getById('desc').value;
	if (dataStore)
	{
		var filterParams = dataFilters.buildQuery(dataFilters.getFilterData());
		//console.log(dataFilters);
		dataStore.load({params:Ext.apply(filterParams, {search:s, empty: ((s.length > 0)?'false':'true'), start: 0, limit: 20})});
	}
}

function logSearch() {
	var e = dataStore;
	var s = getById('desc').value;
	var t = getById('requestToken').value;
//	if (s != '' && e.data.items.length > 0) {
		jQuery.ajax({
			url			:	'recordedSearches.php',
			type		:	'POST',
			data		:	({ requestToken : t, searchTerm : s}),
			dataType	:	'json'
		});
//	}
}

function intval (mixed_var, base) 
{
    var tmp;
    var type = typeof( mixed_var );
 
    if (type === 'boolean') {
        return (mixed_var) ? 1 : 0;
    } else if (type === 'string') {
        tmp = parseInt(mixed_var, base || 10);
        return (isNaN(tmp) || !isFinite(tmp)) ? 0 : tmp;
    } else if (type === 'number' && isFinite(mixed_var) ) {
        return Math.floor(mixed_var);
    } else {
        return 0;
    }
}

function setFilter(id) {
	switch(id) {
		case 'location':
			var location = getById('location').value;					
	    	dataFilters.addFilter({type:'string', dataIndex:'onSiteLocation', "value":location});
	    	dataStore.reload({params:{start: 0, limit: 20}});			
			break;
		case 'location-radius':
			var radius = getById('location-radius').value;
			dataFilters.addFilter({type:'string', dataIndex:'onSiteLocationRadius', "value":radius});
	    	dataStore.reload({params:{start: 0, limit: 20}});
			break;
		case 'active-since':
			if (getById('active-since').value == "") {
				dataFilters.getFilter('createdOn').setActive(false);
				//dataStore.reload({params:{start: 0, limit: 20}});
			} else {
				dataFilters.addFilter({type:'date', dataIndex:'createdOn', value:{'after':new Date(getById('active-since').value)}});
				dataStore.reload({params:{start: 0, limit: 20}});
			}
			break;
	}
	
}

function clearFiler(id) {
	switch(id) {
		case 'active-since':
			getById('active-since').value = '';
			dataFilters.getFilter('createdOn').setActive(false);
			break;
	}
}

var pressTime = 0;
var timer = null;
function setFilterDelay(type) {
	var elapsed = new Date().getTime() - pressTime;
	if (elapsed < 1000 && timer) {
		clearTimeout(t);
		var t=setTimeout(function(){setFilter(type)},1000);
		return;
	}
	pressTime = new Date().getTime();
}

function isDate(sDate) {
   var re = /^\d{2}\/\d{2}\/\d{4}$/
   if (re.test(sDate)) {
      var dArr = sDate.split("/");
      var d = new Date(sDate);
      return d.getMonth() + 1 == dArr[0] && d.getDate() == dArr[1] && d.getFullYear() == dArr[2];
   } else {
      return false;
   }
}

var winJob = null;
var jobid = 0;

function showJob(postingID, pageTitle, e) {
	  winJob = new Ext.Window({
            autoLoad:{url:'applyjobwin.php?id='+postingID,scripts:true},
            title: pageTitle,
            width:800,
            height:600,
            draggable:false,
            closable:true,            
            plain:true,
            modal:true,
            autoScroll:true,
            border:false
        });
		jobid = postingID;
        winJob.show();
        if (!e) var e = window.event;e.cancelBubble = true;if (e.stopPropagation) e.stopPropagation();
}
/*
function shareThis(sTitle, sUrl) {
	//if (SHARETHIS)
	{
		SHARETHIS.addEntry({title:sTitle,url:sUrl},{button:false,popup:true}).attachButton(document.getElementById("share"));
	}
}
*/
function showNotifyWin(keywords) {
  if(trim(keywords)) {
    window.open("emailnotification.php?keyword="+keywords,"emailnotification","menubar=no,width=450,height=300,toolbar=no");
  } else {
    window.open("emailnotification.php?keyword="+'all_jobs',"emailnotification","menubar=no,width=450,height=300,toolbar=no");
    //Ext.MessageBox.show({title:'Error', msg: 'Please enter some keyword into search field.', icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, animEl: 'email-notification-btn'});
  }
  
	return;
	var win = new Ext.Window({
            autoLoad:'',
            width:450,
            height:300,
            draggable:false,
            closable:true,            
            plain:true,
            modal:true,
           // resizable:false,
            autoScroll:true,
            border:false
        }).show();

}

// facebook share
function fbs_click() {
	u=location.href;
	t=document.title;
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}
