/*-----------------------------------------------------------------------
Objects JavaScript File

version: 	4.0
author:		sebastian kupke
email:		sebastian.kupke@baral.de
website:	http://www.baral.de
-----------------------------------------------------------------------*/



var websisObjects = new Hash();
var mObjectsSearchResult = new Hash();
var flag = 0;

/* =Create tree
-----------------------------------------------------------------------*/
function mObjectsCreateTree(datasource) {
	$('#object_tree_' + datasource).treeview({
		animated: 'fast',
		alwaysOpen: true,
		persist: 'cookie',
		cookieId: datasource
	});
}

/* =Object search
-----------------------------------------------------------------------*/
var count = 0;

function doObjectSearch(dsn) {

	count = count + 1;
	setTimeout('doObjectSearchGo(' + count + ',\'' + dsn + '\')',800);
}

/* =Gets all objects from the object search
-----------------------------------------------------------------------*/
function doObjectSearchGo(currentCount,dsn) {

	if (currentCount == count) {

		if ($('#object_search_result_' + dsn).is(":hidden")) {
			$('#object_search_result_' + dsn).slideDown("slow");
		}
		
		count = 0;

		if ($('#object_search_inp_' + dsn).val().length > 0) {
			setObjectInfo(dsn,'indicator',mObjectsSearching);
			
			var maxResults = dsns[dsn].maxResults;
			var groups = '';
			$('#object_tree_' + dsn + ' input').each(function (i) {
				if (i > 0) { groups += ',';	}
				groups += this.value;
			});
	
			$.ajax({
		        url: 'scripts/modules/objects/doObjectSearch.gsp',
		        data: 'search_input=' + $('#object_search_inp_' + dsn).val() + '&searchable_content=' + $('#mObjects_searchable_content').val() + '&max_results=' + maxResults + '&groups=' + groups,
		        dataType: 'json',
		        type: 'post',
		        success: function(data){
		        	
					var size = data.objects.length;
	
					var objectsResultListHtml = '<ul>';
					
					var objects = data.objects;
					for (i = 0; i < objects.length; i++) {
						try {
							
							var id = objects[i].id;
							var group = objects[i].group;
							var groupName = objects[i].groupName;
							var logo = 'data/' + dsn + '/logos/' + objects[i].logo;
							var url = objects[i].url;
							var x = objects[i].x;
							var y = objects[i].y;
							var name = objects[i].name;
							var tooltip = objects[i].tooltip;
							var content = objects[i].content;
	
							mObjectsSearchResult.set(id,new WebsisObject(id,group,groupName,logo,url,x,y,name,tooltip,content,dsn));
							
							var clazz = i % 2 == 0 ? ' class="even" ' : ' class="odd" ';
							objectsResultListHtml += '<li ' + clazz + 'onclick="mObjectsZoomtoObject(\'' + id + '\',\'' + dsn + '\');">' + name + '<span class="informal">' + groupName + '</span></li>';
						} catch (e) {
	
						}
					}
	
					objectsResultListHtml += '</ul>';
	
					$('#object_search_result_' + dsn).html(objectsResultListHtml);
					
		        	if (size == 0) {
						setObjectInfo(dsn,'failure',mObjectsNoObjectsFound);
					} else if (size == 1) {
						setObjectInfo(dsn,'success',mObjectsOneObjectFound);
					} else if (size >= maxResults) {
						setObjectInfo(dsn,'warning',mObjectsMoreObjectsFound.replace(/\{0\}/,size).replace(/\{1\}/,maxResults));
					} else {
						setObjectInfo(dsn,'success',mObjectsObjectsFound.replace(/\{0\}/,size));
					}
		        }
		    });
		} else {
			$('#object_search_result_' + dsn).html('');
			setObjectInfo(dsn,'hide');
		}
	}
}

function mObjectsZoomtoObject(id,dsn) {
	
	var obj = mObjectsSearchResult.get(id);
	
	if (obj.x > 0 && obj.y > 0) {
		
		flag = id;
		$('#object_tree_' + dsn + ' input[value=' + obj.group + ']').each(function() {
			$(this).attr('checked','checked');
		});
		showObjectsFromTree(dsn,obj);
		
		zoomtoPoint(obj.x,obj.y,dsns[dsn].zoomtoScalefactor);
	} else {
		alert(mObjectsNoCoords.replace(/\{0\}/,obj.name)); 
	}
}

/* =Gets all objects from groups which are selected in the tree
-----------------------------------------------------------------------*/
function showObjectsFromTree(dsn,currentWebsisObject) {
	
	setObjectInfo(dsn,'indicator',mObjectsLoading);
	
	var groups = 'groups=';
	
	$('#object_tree_' + dsn + ' input:checked').each(function (i) {
		if (i > 0) { groups += ','; }
		groups += this.value;
	});
	
	var maxResults = dsns[dsn].maxResults;
	
	$.ajax({
        url: 'scripts/modules/objects/doObjectTreeSearch.gsp',
        data: groups + '&max_results=' + maxResults,
        dataType: 'json',
        type: 'post',
        success: function(data){
        	
			var size = data.objects.length;
			
        	if (size == 0) {
				setObjectInfo(dsn,'failure',mObjectsNoObjectsFound);
			} else if (size == 1) {
				setObjectInfo(dsn,'success',mObjectsOneObjectFound);
			} else if (size >= maxResults) {
				setObjectInfo(dsn,'warning',mObjectsMoreObjectsFound.replace(/\{0\}/,size).replace(/\{1\}/,maxResults));
			} else {
				setObjectInfo(dsn,'success',mObjectsObjectsFound.replace(/\{0\}/,size));
			}

			websisObjects = new Hash();

			var objects = data.objects;
			for (i = 0; i < objects.length; i++) {
				try {
					
					var id = objects[i].id;
					var group = objects[i].group;
					var groupName = objects[i].groupName;
					var logo = 'data/' + dsn + '/logos/' + objects[i].logo;
					var url = objects[i].url;
					var x = objects[i].x;
					var y = objects[i].y;
					var name = objects[i].name;
					var tooltip = objects[i].tooltip;
					var content = objects[i].content;

					websisObjects.set(id,new WebsisObject(id,group,groupName,logo,url,x,y,name,tooltip,content,dsn));
				} catch (e) {

				}
			}
			
			if (currentWebsisObject) {
				websisObjects.set(currentWebsisObject.id,currentWebsisObject);
			}
			
			showObjectsInMap();
        }
    });
}

/* =Writes the html for the divs into the map
-----------------------------------------------------------------------*/
function showObjectsInMap() {
	
	var objectHtml = '';
	
	var mapDivWidth = $('#map_div').width();
	var mapDivHeight = $('#map_div').height();
	
	var avail = $('#tool_objectsAdmin').size();
	
	for (var i in websisObjects.items) {
		
		var obj = websisObjects.items[i];
		
		if (obj && obj.id) {	
			var pos = getPositionFromCoords(obj.x,obj.y);
			
			var widthHeight = 0;
			if (dsns[obj.dsn].imgScale) {
				widthHeight = getImageWidthHeight(dsns[obj.dsn].imgScale);
			}
			
			var top = Math.round(pos.y - (widthHeight / 2));
			var left = Math.round(pos.x - (widthHeight / 2));
			
			// Show objects only when in map view
			if (top > -500 && top < mapDivHeight + 500 && left > -500 && left < mapDivWidth + 500) {
				// Now write the html
				objectHtml += '<div obj_id="' + obj.id + '" dsn="' + obj.dsn + '" style="position: absolute; top: ' + top + 'px; left: ' + left + 'px; z-index: 750;">';
				
				if (avail > 0) {
					objectHtml += '<span style="cursor: pointer;" ondblclick="mObjectsAdminObjectEdit(\'' + obj.id + '\');">';
				} else if (obj.url && obj.url.length > 0) {
					objectHtml += '<a style="cursor: pointer;" href="' + obj.url + '" target="_blank">';
				}
				
				objectHtml += '<img src="' + obj.logo + '"';
				if (widthHeight > 0) {
					objectHtml += ' style="width: ' + widthHeight + 'px; height: ' + widthHeight + 'px;"'; 
				}
				objectHtml += ' />';
				//objectHtml += ' title="' + obj.tooltip.replace(/"/g,'&quot;') + '" />';
				
				if (avail > 0) {
					objectHtml += '</span>';
				} else if (obj.url && obj.url.length > 0) {
					objectHtml += '</a>';
				}
		
				objectHtml += '</div>';
			}
		}
	}
	

	$('#map_objects').html(objectHtml);
	
	if (!$.browser.msie) {
		$('#map_objects div').mouseover(function() {
			$(this).effect('pulsate',{times: 4});
		});
	}
	
	$('#map_objects div').tooltip({
		bodyHandler: function() {
			var id = $(this).attr('obj_id');
			var dsn = $(this).attr('dsn');
			var obj = websisObjects.get(id);
	        return '<span class="header">' + obj.name + ' <span class="header_note">(' + obj.groupName + ')</span>' + '</span><br /><div class="content">' + obj.content + '</div>'; 
	    },
	    showURL: false,
	    fixPNG: true
	});
	
	if (flag && flag > 0) {
  		window.setTimeout(function() {
  			
			var obj = $('#map_objects div[obj_id=' + flag + '] img');
			var width = obj.width();
			var height = obj.height();
			var dWidth = width * 2;
			var dHeight = height * 2;
			var hWidth = width / 2;
			var hHeight = height / 2;
			
			$('#map_objects div[obj_id=' + flag + ']').css('z-index','760');
			
			obj.css('position','relative');
			obj.css('top','0px');
			obj.css('left','0px');
			
			for (i = 0; i < 4; i++) {
				obj.animate({
	                top: '-' + hHeight + 'px',
	                left: '-' + hWidth + 'px',
	                width: dWidth + 'px',
	                height: dHeight + 'px'
	            }).animate({
	                top: '0px',
	                left: '0px',
	                width: width + 'px',
	                height: height + 'px'
	            });
			}
  			
			flag = 0;
        },1000);
    }
}

/* =Calculate the width and height of an image
-----------------------------------------------------------------------*/
function getImageWidthHeight(imgScale) {

	var scaleNumber = getScaleNumber();
	var widthHeight = 0;
	
	if (scaleNumber >= imgScale.imgMinScale) {
		widthHeight = imgScale.imgMinSize;
	} else if (scaleNumber <= imgScale.imgMaxScale) {
		widthHeight = imgScale.imgMaxSize;
	} else {
		var diffImgScale = imgScale.imgMinScale - imgScale.imgMaxScale;
		var realDiffImgScale = scaleNumber - imgScale.imgMaxScale;
		var percent = (realDiffImgScale * 100) / diffImgScale;
		
		var diffImgSize = imgScale.imgMaxSize - imgScale.imgMinSize;
		var imgDiffSize = (diffImgSize * percent) / 100
		
		widthHeight = imgScale.imgMaxSize - imgDiffSize;
	}
	
	return Math.round(widthHeight);
}

/* =Sets the indicator
-----------------------------------------------------------------------*/
function setObjectInfo(dsn,type,text) {

	// type is success, warning, failure or indicator
	if (type == 'success') {
		$('#object_info_img_' + dsn).attr('src','style/' + styleFolder + '/img/info/success.gif');
		$('#object_info_txt_' + dsn).html(text).css('color','green');
		$('#object_info_div_' + dsn).css('visibility','visible');
	} else if (type == 'warning') {
		$('#object_info_img_' + dsn).attr('src','style/' + styleFolder + '/img/info/warning.gif');
		$('#object_info_txt_' + dsn).html(text).css('color','orange');
		$('#object_info_div_' + dsn).css('visibility','visible');
	} else if (type == 'failure') {
		$('#object_info_img_' + dsn).attr('src','style/' + styleFolder + '/img/info/failure.gif');
		$('#object_info_txt_' + dsn).html(text).css('color','red');
		$('#object_info_div_' + dsn).css('visibility','visible');
	} else if (type == 'indicator') {
		$('#object_info_img_' + dsn).attr('src','style/' + styleFolder + '/img/info/load.gif');
		$('#object_info_txt_' + dsn).html(text).css('color','gray');
		$('#object_info_div_' + dsn).css('visibility','visible');
	} else {
		$('#object_info_txt_' + dsn).html('');
		$('#object_info_div_' + dsn).css('visibility','hidden');
	}
}























