var map;
var markers = new Array();
var infoWindows = new Array();

// Creates a marker at the given point with the given number label
function createMarker(point, id){
	var marker = new google.maps.Marker(point);
	markers[id] = marker;
	var info = document.getElementById('info' + id);
	infoWindows[id] = info;
	google.maps.Event.addListener(marker, "click", function(){
		marker.openInfoWindow(info);
		info.style.display = "block";
	});
	return marker;
}

function unload(){
	GUnload();
}

function mapHomeGroup(id){
	if (map != null) {
		var info = infoWindows[id];
		markers[id].openInfoWindow(info);
		info.style.display = "block";
	}
}

/*
 * Edit stuff
 */

function onDeleteBtnClick(groupId, userId, roleId){
	if(confirm('Are you sure you want to remove this role for the user?')) {
		// delete via AJAX
		jQuery.getJSON('/connect/homegroup/removemembership', 
				{ id: groupId, user: userId, role: roleId },
				refreshUsersTable);
	}
}

function onCancelBtnClick() {
	window.location = '/connect/homegroup/info/id/' + groupId;
}

var columns = [{
    key: 'id',
    label: '',
	formatter: 'controls'
}, {
    key: 'first_name',
    label: 'First Name',
    sortable: true
}, {
    key: 'last_name',
    label: 'Last Name',
    sortable: true
}, {
    key: 'email',
    label: 'Email',
	formatter: 'email',
    sortable: true
}, {
    key: 'role',
    label: 'Role',
    sortable: true
}];

var userAddDataSource, usersAutoComplete, usersListDataSource, usersDataTable, usersPaginator;

function yuiLoaded(){
	YAHOO.widget.DataTable.Formatter.controls = function(el, oRecord, oColumn, oData) {
		var deleteLink = jQuery('<a></a>'); 
		deleteLink.attr('href', 'javascript:void(0)');
		deleteLink.attr('onclick', 'onDeleteBtnClick(' + groupId + ',' + oData + ',' + oRecord.getData().role_id + ')');
		deleteLink.append('<img alt="Delete" src="/images/delete.gif"/>');
		
		var container = jQuery('<div></div>');
		container.append(deleteLink);
		
		el.innerHTML = container.html(); 
	};
    
	/*
	 * data sources
	 */
	
	// users autocomplete
	userAddDataSource = new YAHOO.util.XHRDataSource('/connect/homegroup/usersearch/', {
		responseType: YAHOO.util.DataSource.TYPE_JSON,
		responseSchema : {
            resultsList: 'data',
			fields: ['label', 'id']
		}
	});
	
	// users table
    usersListDataSource = new YAHOO.util.XHRDataSource('/connect/homegroup/listusers/id/' + groupId + '?', {
        responseType: YAHOO.util.DataSource.TYPE_JSON,
        responseSchema: {
            resultsList: 'data',
            fields: ['id', 'first_name', 'last_name', 'email', 'role', 'role_id'],
			metaFields: { 
				totalRecords: 'total' // Access to value in the server response 
			} 
        }, 
    });
	
	/*
	 * user suggest
	 */
	
	// autocomplete
	usersAutoComplete = new YAHOO.widget.AutoComplete("userInput", "userSuggest", userAddDataSource);
	usersAutoComplete.forceSelection = true;
	usersAutoComplete.generateRequest = function(query) {
		return "value/" + query;
	};
	usersAutoComplete.formatResult = function(oResultData, sQuery, sResultMatch) {
		var sMarkup = (sResultMatch) ? sResultMatch : "";
		return jQuery('<div/>').text(sMarkup).html();;
	};

	// event listener	
	var selectHandler = function(sType, aArgs) {
		var myAC = aArgs[0]; // reference back to the AC instance
		var elLI = aArgs[1]; // reference to the selected LI element
		var oData = aArgs[2]; // object literal of selected item's result data

		jQuery('#userHidden').val(oData[1]);  // update hidden field
	};
	usersAutoComplete.itemSelectEvent.subscribe(selectHandler);

	/*
	 * table stuff
	 */
	
	// paginator
	usersPaginator = new YAHOO.widget.Paginator({ 
		rowsPerPage : 15,
		containers : 'usersPaging'
	});
	
	// datatable
    usersDataTable = new YAHOO.widget.DataTable('usersTable', columns, usersListDataSource, {
		initialRequest: "sort=last_name&dir=asc&start=0&count=15",
		paginator: usersPaginator,
		sortedBy: { key: 'last_name', dir: YAHOO.widget.DataTable.CLASS_ASC },
		generateRequest : usersRequestBuilder,
        dynamicData: true,
		width : '670px'
    });
	usersDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
		oPayload.totalRecords = oResponse.meta.totalRecords;
		return oPayload;
	}
}

/**
 * Create the request URL for users table.
 * 
 * @param {Object} oState
 * @param {Object} oSelf
 */
function usersRequestBuilder(oState, oSelf) {
	// Get states or use defaults
	oState = oState || {pagination:null, sortedBy:null};
	var sort = (oState.sortedBy) ? oState.sortedBy.key : "last_name";
	var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "DESC" : "ASC";
	var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
	var results = (oState.pagination) ? oState.pagination.rowsPerPage : 15;
    
    // Build custom request
    return  "sort=" + sort +
            "&dir=" + dir +
            "&start=" + startIndex +
            "&count=" + (startIndex + results - 1);
}

/**
 * Register click event for adding a new user/role
 */
jQuery(function() {
	jQuery('#userAddBtn').bind('click', function() {
		// get values
		var userLabel = jQuery('#userInput').val();
		var userId = jQuery('#userHidden').val();
		var roleId = jQuery('#roleSelect').val();

		// make sure we have a current selection
		if (userLabel == '' || userId == '') {
			return;
		}
		
		// add via AJAX
		jQuery.getJSON('/connect/homegroup/adduser', 
				{ id: groupId, user: userId, role: roleId },
				refreshUsersTable);
	});
});

function refreshUsersTable() {
	var request = usersRequestBuilder(usersDataTable.getState());
	var callback = {
		success : usersDataTable.onDataReturnInitializeTable,
		scope : usersDataTable,
		argument : usersDataTable.getState()
	}; 
	usersListDataSource.sendRequest(request, callback);
}
