var callbackTable = {
        calculateTotalAssignments: function(tableId) {
                var trs = $(tableId).getElementsByTagName("tbody")[0].rows;
                var tot = 0;
                var cnt = 0;
                for (var i = 0, tr; tr = trs[i]; i++) {
                        if (tr.style.display != "none" && tr.className.search(/(^|\s)invisibleRow($|\s)/) == -1) {
                                cnt++;
                        };
                        if (tr.className.search(/(^|\s)invisibleRow($|\s)/) == -1) {
                        	tot++;
                        };
                };
                // if pages < 1
                var curPageId=tableId+'-currentPage';
                if ($(curPageId)) {
                	var curPageCount=$(curPageId).getText();
	                for (var q = 9; q < 50; q++) {
	                	if($(tableId).hasClass('paginate-'+q)) {
	                		var paginatePage = q;
                		};
	                };
					var endAssignment = (curPageCount * paginatePage);
					var startAssignment = (curPageCount * paginatePage)-paginatePage;
					if (endAssignment > tot) {
						endAssignment = tot;
					};
					if (startAssignment < 1) {
						startAssignment = 1;
					};
					if (startAssignment > (paginatePage-1)) {
						startAssignment = startAssignment+1;
					};
	                var visTot=startAssignment + "-" + endAssignment + " "+ langArray['of'] +" " + tot;
                }
                else {
                	var visTot="1-"+ tot + " "+ langArray['of'] + " " + tot;
                };
                $("visibleTotal").setText(visTot);
                $("visibleTotal2").setText(visTot);
        },

		updateTablePaginateClick: function(tableId) {
       		// simulate fire click on firstpage
       		if($(tableId+'-tablePaginater')){
       			// TODO: SEND BACK TO PAGE 1
       			//$(tableId+'-tablePaginater').getFirst().getNext().setProperty('id', tableId+'-currentPage').addClass('currentPage');
       			//tablePaginater.buttonClick($(tableId+'-tablePaginater').getFirst().getNext());
    		};
		}
};

function getActiveTagsFromCloud() {
	var activeTags = Array();
	var tags = $('mainTagCloud').getChildren();
	tags.each(function(tag) {
		if (tag.hasClass('toggle_tag')) {
			activeTags.include(tag.getText());
		};
	});
	return activeTags;
}

var updateTagSearch = {
		updateCloud: function(cloudId, jsonCloud) {
			var cloudTags = Array();
			$(cloudId).empty();
			var tagid = 0;
			jsonCloud.each(function(tag) {
				var tagClass = '';
				if(tag.size < 3) {
					tagClass = 'small';
				}
				else if (tag.size > 3 && tag.size < 5) {
					tagClass = 'medium';
				}
				else {
					tagClass = 'large';
				}
				tagid_t = 'tagid_'+tagid;
				var tmp_tag = new Element('a',{'id':tagid_t,'class': 'tag '+tagClass, 'href': 'javascript:updateTagSearch.toggleTagSearch(\''+tagid_t+'\');'}).setHTML(tag.name).injectInside(cloudId);
				tagid += 1;
			});
		},

		toggleTagSearch: function(tag) {
			var this_tag = $(tag);
			this_tag.toggleClass('toggle_tag');
			updateTagSearch.updateTableFromTagSearches();
		},

		updateTableFromTagSearches: function() {
				var tableId = "theTable";
				var trs = $(tableId).getElementsByTagName("tbody")[0].rows;
				var filteron = 1;
				var cityCol = 2;
				var key = $('idSearch').getProperty('value').toLowerCase();
				var activeClouds = getActiveTagsFromCloud();
		        for (var i = 0, tr; tr = trs[i]; i++) {
		        		/**
		        		*	Caution here, if IE, it will not accept mootools functions on object
		        		*	if this is not done.
		        		*/
		        		if (!window.ie) {
		        			var check = tr.getChildren();
		        		} else {
		        			var check = $(tr.id).getChildren();
		        		}
		        		var assignment_id = tr.getProperty('id').substr(6);
		        		var myrow = check;
		        		var cityName = myrow[cityCol].getText().toLowerCase();
		        		var assignmentName = myrow[filteron].getText().toLowerCase();
		        		var containsTagSearch = false;
		        		var containsCitySearch = false;
		        		var containtsAssignmentSearch = false;

		        		jsonTags[assignment_id].each(function (jsonObj) {
		        			if(activeClouds.contains(jsonObj)) {
		        				containsTagSearch = true;
	        				};
		        		});

		        		containsCitySearch = (cityName.indexOf(key) > -1);
		        		containtsAssignmentSearch = (assignmentName.indexOf(key) > -1);
		       			if(
		       				(
		       					(
		       						(
			       						key != '' &&
				       					(	(
				       							(containtsAssignmentSearch || containsCitySearch) ||
				       							jsonTags[assignment_id].toString().indexOf(key) > -1
			       							)
			       						) &&
		       							(activeClouds.length > 0 ? containsTagSearch : true)
	       							) ||
	       							(key == '' && containsTagSearch)
       							)
       							||
       							(key == '' && activeClouds.length == 0)
       						)
	       					&& tr.hasClass('searchActiveAssignment')
	       					){
							if(tr.hasClass("invisibleRow")) {
							        tr.removeClass('invisibleRow');
							};
		                }
		                else{
							if(!tr.hasClass("invisibleRow")) {
							        tr.addClass("invisibleRow");
							};
		                };
		        };
		        // SEND BACK TO PAGE 1
		        callbackTable.updateTablePaginateClick(tableId);
		        callbackTable.calculateTotalAssignments(tableId);
		        tablePaginater.init(tableId);
		        tablePaginater.showPage(tableId,1);
		}
}
window.addEvent('domready', function() {
		updateTagSearch.updateCloud("mainTagCloud", jsonCloud);
		callbackTable.calculateTotalAssignments("theTable");
		$('idSearch').onkeyup = updateTagSearch.updateTableFromTagSearches;
		$('idSearch').focus();
});