/**
 * Cloud wrapper
 * 
*/

var cloudMapObject;
var tempXml;
var relativeWords = ['#feffec', '#fcffd0', '#f9feb3', '#f7fda4'];

//Prepare and send query to cloud webservice
	function sendQueryToCloudService(xml) {
		var wordsCount = $('#wordsCount').val();
		
		//Prepare xml request
		xml = xml.replace('<?xml version="1.0"?>','');
		xml	= '<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><GetMap xmlns="http://iveonik.com/services">'
			+ xml
			+ '<cloudSettings relatedNeeded="'+wordsCount+'" />'
			+ '</GetMap></soap12:Body></soap12:Envelope>';

		//Send request to cloud webservice
		$.ajax({
			cache: false,
			contentType: "application/soap+xml; charset=utf-8",
			type: "POST",
			url: $('#cloudUrl').val(),
			success: drawHulbeeMap,
			data: xml,
			dataType: 'text'
		});
	};

//Draw hulbee map
	function drawHulbeeMap(xml) {
		
		//Draw new map
		tempXml = xml;
		xml = $.createXMLDocument(xml);
		cloudMapObject = new mapPrototype('cloudContainer');
		cloudMapObject.importFromXml(xml);
		cloudMapObject.searchObject = hSearchContainer;
		cloudMapObject.drawMap();
		
		//Stop preloader
		$('#preloader').css('display' ,'none');
		
		$('#footer').css('display', 'none');
		$('#footer').css('display', 'inline');
	};
	
//Hightlight relative words
	function showEntries(id){

		var keyword = cloudMapObject.getKeyword(id);
		if (keyword==false) {
			return;
		};
		
		var relationsArray = cloudMapObject.getRelationsTo(keyword.realId);
		var delta = cloudMapObject.maxRelationWeight-cloudMapObject.minRelationWeight;

		for (var i=0; i<relationsArray.length; i++) {
			
			var relatedTo = relationsArray[i].id1;
			if (relatedTo==keyword.realId) {
				relatedTo = relationsArray[i].id2;
			};
			
			var keyword2 = cloudMapObject.getKeyword(relatedTo,'realId');
			var divId = '#keyword'+keyword2.id;
			var style =  Math.floor(relationsArray[i].weight*3/delta -1);
			$(divId).css('background-color', relativeWords[style]);
		};
		
		$('#keyword'+id).css('background-color', relativeWords[3]);
	
		showSearchEntries(id);
	};

//Hightlight entries in search result	
	function showSearchEntries(id) {
	
		var keyword = cloudMapObject.getKeyword(id);
		if (keyword==false) {
			return;
		};
		
		var thisIdDoc = '';
		var thisField = '';

		for (var i=keyword.entries.length-1; i>-1; i--) {
			var entry = keyword.entries[i];
			if (entry.field!='query') {
				
							
				if ((thisIdDoc!=entry.idDoc)||(thisField!=entry.field)) {
					if (entry.field == 'abstract') {
						elementContent = cloudMapObject.searchObject.getResult(entry.idDoc).abstract;
					} else {
						elementContent = cloudMapObject.searchObject.getResult(entry.idDoc).title;
					};				
				};
			
				thisIdDoc = entry.idDoc;
				thisField = entry.field;

				entry.startPos = new Number(entry.startPos);
				entry.length = new Number(entry.length);

				elementContent	= elementContent.substr(0,entry.startPos)
								+ '<span class="highlighted">'
								+ elementContent.substr(entry.startPos, entry.length)
								+ '</span>'
								+ elementContent.substr(entry.startPos+entry.length, elementContent.length);

				var elementId = entry.field + entry.idDoc;
				$('#'+elementId).attr('innerHTML', elementContent);
			};
		};
	
	};

//Hide entries in search results
	function hideSearchEntries() {
		
		//Repaint search results
//		var searchResultsHtml = cloudMapObject.searchObject.prepareSearchResultsHtml();
//		$('#searchResults').attr('innerHTML', searchResultsHtml);
		
		if (cloudMapObject.searchObject.totalHits==0) {
			$('#searchResults').attr('innerHTML','<p><strong>Sorry, no results found</strong></p>');
		}
		else {
			$('#searchResults').children().not('.shopping-result').remove();
			$('#searchResults').attr('innerHTML', function(i, v){
				return v + cloudMapObject.searchObject.prepareSearchResultsHtml();
			});
		};
		
	};
	
//Hide relative words hightlight
	function hideEntries() {
		for (var i=0; i<cloudMapObject.keywordsArray.length; i++) {
			var divId = '#keyword'+cloudMapObject.keywordsArray[i].id;
			$(divId).css('background-color', '#fff');
		};
		hideSearchEntries();
	};

//Add word to query
	function addWord(id) {
		var keyword = cloudMapObject.getKeyword(id);
		var kWord = keyword.word;
		if (keyword.isSetExpression()) {
			kWord = '"'+kWord+'"';
		};
		
		var newQuery = $('#query').val() + ' ' + kWord;
		
		$('#query').val(newQuery);
		submitForm();
	};

//Delete word from query
	function deleteWord(id) {
		var keyword = cloudMapObject.getKeyword(id);
		var entrie = keyword.getFirstQueryEntry();
		var newQuery = cloudMapObject.searchObject.responseObject.searchQuery.query;
		var endPos = new Number(entrie.startPos) + new Number(entrie.length);
		newQuery = newQuery.substr(0,entrie.startPos)+' '+newQuery.substr(endPos,newQuery.length);
		$('#query').val(newQuery);
		submitForm();
	};

