function setBrowserSpecificCSS() {
	var browser = "ie";
	if (navigator.appName.indexOf("Microsoft") != -1) {
		browser = "ie";
	} else {
		browser = "mozilla";
	}
	if (typeof(CONTEXT_PATH) != "undefined") {
		document.write('<link rel="stylesheet" type="text/css" href="' + CONTEXT_PATH + '/css/' + browser + '.css"/>');
	}
}
setBrowserSpecificCSS();
			
			
function setFocus(myElementName) {
	var myElement = getElement(myElementName);
	if (myElement) {
		myElement.focus();
	}
}


function getElement( nameStr ) {
	if ( document.getElementById ) return document.getElementById( nameStr ); // DOM
	if ( document.all ) return document.all[ nameStr ];  // IE4
		return null;  // sorry, no NS4.
}


var windowWidth = 0;
var windowHeight = 0;		
function evalWindowSize() { 
	if( typeof( window.innerWidth ) == 'number' ) {
		// Non-IE
		windowWidth = window.innerWidth-20;
		windowHeight = window.innerHeight-20;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}
}


function popWindow(url)
{
	satellite = window.open(url,'tepcon','menubar=no,scrollbars=yes,toolbar=no,location=no,directories=no,resizable=yes');
	satellite.focus();
	if (satellite != null) {
		if (satellite.opener == null) {
			satellite.opener = self;
		}
	}
}

function refreshPage() {
	window.location.href = window.location.pathname;
};


// Does the String str end with the given suffix String?
function endsWith(str, suffix) {
	var startPosition = str.length - suffix.length;

	if (startPosition >= 0) {
		if (str.substr(startPosition) == suffix) {
			return true;
		}
	}
	return false;
}


function convertNumberFromEnglishToGerman(enNumber) {
	deNumber = new String(enNumber);
	deNumber = deNumber.replace(/\,+/g,"_");
	deNumber = deNumber.replace(/\.+/g,",");
	deNumber = deNumber.replace(/\_+/g,".");
	
	return deNumber;
}

function convertNumberFromGermanToEnglish(deNumber) {
	enNumber = new String(deNumber);
	enNumber = enNumber.replace(/\.+/g,"_");
	enNumber = enNumber.replace(/\,+/g,".");
	enNumber = enNumber.replace(/\_+/g,",");
	
	return enNumber;
}

function getUserServerSideLanguage() {
	var language = document.getElementById("userServerSideLanguage").value;
	return language;	
}

function simulateClick(elem) {
	if (elem) {
		var evt;	
		if (document.createEvent) {
			evt = document.createEvent("MouseEvents");
			evt.initMouseEvent("click", true, true, window,
			0, 0, 0, 0, 0, false, false, false, false, 0, null);
		}
		(evt)? elem.dispatchEvent(evt) : (elem.click && elem.click());
	}
};

function simulateClickById(elId) {
	var evt;
	var el = document.getElementById(elId);
	if (el) {
		if (document.createEvent) {
			evt = document.createEvent("MouseEvents");
			evt.initMouseEvent("click", true, true, window,
			0, 0, 0, 0, 0, false, false, false, false, 0, null);
		}
		(evt)? el.dispatchEvent(evt) : (el.click && el.click());
	}
};

jQuery(document).ready(function() {
	simulateClick(jQuery(".icePnlTb:first-child a")[0]);
	setMenuWidth();
});

function roundClean(number, precision) {
	if (typeof precision == "undefined") {
		precision = 0;
	}
	for (var i = 10; i >= precision; i--) {
		number = Math.round(number * Math.pow(10, i)) / Math.pow(10, i);
	}
	return number;
};

function openReportWindow(url) {		
	features="height=600,width=800,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes";
	newWindow = window.open(url,'reportWindow',features);
	if (window.focus) {
		newWindow.focus();
	}
	return false;
}

function sleep(naptime){
	var sleeping = true;
	var now = new Date();
	var alarm;
	var startingMSeconds = now.getTime();
	while(sleeping) {
		alarm = new Date();
		alarmMSeconds = alarm.getTime();
		if(alarmMSeconds - startingMSeconds > naptime) { 
			sleeping = false;
		}
	}
}

function ImagePreloader(images, callback) {

   // store the call-back
   this.callback = callback;

   // initialize internal state.
   this.nLoaded = 0;
   this.nProcessed = 0;
   this.aImages = new Array();

   // record the number of images.
   this.nImages = images.length;

   // for each image, call preload()
   for (var i = 0; i < images.length; i++) {
      this.preload(images[i]);
   }
}

ImagePreloader.prototype.preload = function(image) {

   // create new Image object and add to array
   var oImage = new Image;
   this.aImages.push(oImage);

   // set up event handlers for the Image object
   oImage.onload = ImagePreloader.prototype.onload;
   oImage.onerror = ImagePreloader.prototype.onerror;
   oImage.onabort = ImagePreloader.prototype.onabort;

   // assign pointer back to this.
   oImage.oImagePreloader = this;
   oImage.bLoaded = false;

   // assign the .src property of the Image object
   oImage.src = image;
}

ImagePreloader.prototype.onComplete = function() {
   this.nProcessed++;
   if ( this.nProcessed == this.nImages ) {
      this.callback(this.aImages, this.nLoaded);
   }
}

ImagePreloader.prototype.onload = function() {
   this.bLoaded = true;
   this.oImagePreloader.nLoaded++;
   this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onerror = function() {
   this.bError = true;
   this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onabort = function() {
   this.bAbort = true;
   this.oImagePreloader.onComplete();
}

function EventLogDataHolder(objectId, latitude, longitude, imgURL, toolTip, zoomLevel) {
	this.objectId = objectId;
	this.latitude = latitude;
	this.longitude = longitude;
	this.imgURL = imgURL;
	this.toolTip = toolTip;
	this.zoomLevel = zoomLevel;
}

function setQueryIdToController(queryId){
	document.getElementById("menuBarForm:anchorQueryId").value = queryId;
	simulateClickById("menuBarForm:anchorQuerySetToController");
}

function setReportIdToController(reportId){
	document.getElementById("menuBarForm:anchorReportId").value = reportId;
	simulateClickById("menuBarForm:anchorReportSetToController");
}

var fieldName;
function callObjectLink(inputElement, objectTypeId){
	fieldName = inputElement.name.replace("CHANGEOB_","");
	
	var input = document.getElementById('objectlinkForm:objectType');
	
	if(input){
		changeValueInField(input,objectTypeId);
	}
	
	var link = document.getElementById('objectlinkForm:openpopup');	
	if(link){
		simulateClick(link);
	}
		
	var filter = document.getElementById('objectlinkForm:default');
	if(filter){
		simulateClick(filter);
	}	
}

function showObjectLink(inputElement, objectTypeId, organizationId){
	fieldName = inputElement.name.replace("SHOWOB_","");

	var input = document.getElementById('objectshowlinkForm:objectid');
	
	if(input && fieldName){
		var field = document.getElementById(fieldName);
		changeValueInField(input,field.value);
	}
	
	input = document.getElementById('objectshowlinkForm:organizationid');
	
	if(input){
		changeValueInField(input,organizationId);
	}
	
	var link = document.getElementById('objectshowlinkForm:openpopup');	
	if(link){
		simulateClick(link);
	}
}

function deleteObjectLink(inputElement, objectTypeId){
	var gfieldName = inputElement.name.replace("DELETEOB_","");	
	var input = document.getElementById(gfieldName);
	input.value ="";
}

function closeObjectLink(objectId){
	if(fieldName != null){ 
	
		var field = document.getElementById(fieldName);
		field.value = objectId;
	
		fieldName = null;
	}
}

function changeLanguageXSLobjectType(){
	var jq = jQuery("input[id*=changeXslLanguage]");
	var id = jq.attr("id");
	var link = document.getElementById(id);	
	if(link){
		simulateClick(link);
	}
}

function changeLanguageChartDetaileventType(){
	var jq = jQuery("input[id*=changeChartDetailLanguage]");
	var id = jq.attr("id");
	var link = document.getElementById(id);	
	if(link){
		simulateClick(link);
	}
}

function changeValueInField(field, value) {
	if (field != null) {
		field.value = value;

		//On IE
		if (field.fireEvent) {
			field.fireEvent("onchange");
		}
	
		//On Gecko based browsers
		if (document.createEvent) {
			var evt = document.createEvent("HTMLEvents");
			if (evt.initEvent) {
				evt.initEvent("change", true, true);
			}
			if (field.dispatchEvent) {
				field.dispatchEvent(evt);
			}
		}
	}
}

function setMenuWidth() {
	try{
		var nav = navigator.appName.indexOf("Netscape") != -1; 
	
		if (nav) {										 
			var el = document.getElementById("menuBarForm:menuBarNav");
			if(el){
				var context = jQuery(el);		
				jQuery("div", context).css("width","auto");
			}
		}
	}catch(e){};
}

function changePathValue(path){
	var jq = jQuery("input[id*=objectTypeAttributePath]");
	var id = jq.attr("id");
	var field = document.getElementById(id);	
	changeValueInField(field, path)
	
	jq = jQuery("input[id*=objectTypeAttributePathShow]");
	id = jq.attr("id");
	field = document.getElementById(id);	
	changeValueInField(field, path)
	
}

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text"))  {
		return false;
	}
}

function initTable(tableId, evenRowClass, oddRowClass){
	var table = document.getElementById(tableId);
	if(table){
		var pathToId = tableId.replace(/\/+/g,"_").replace(/\@+/g,"_").replace(/\[+/g,"_").replace(/\]+/g,"_");
		var	head = 0;
		var add = 1;
		for(var i = 0;i<table.rows.length;i++){
			if(table.rows[i].id.indexOf("HEAD_") == -1){
				if( (i + head) % 2 == 0){
					table.rows[i].className = oddRowClass
				} else {
					table.rows[i].className = evenRowClass
				}
				if((table.rows.length-1) != i){
					var rowListSuffix = "[" + (i + add) +"]";
					
					table.rows[i].id = tableId + rowListSuffix;
					var row = document.getElementById(table.rows[i].id)
					var jq = jQuery("input[id*=rowDeleteBtn]", row);
					jq.attr("name", "rowDeleteBtn_" + (i + add));
					jq.unbind( "click" )
					jq.click(function () { 
						var pos = this.name.replace("rowDeleteBtn_","");
						deleteRow(tableId,pos , evenRowClass, oddRowClass);
					});	
					
					jq = jQuery("input[name*='"+ tableId +"']", row);
					jq.each(function(index) {
							replaceListPosition($(this), rowListSuffix, pathToId);
					});
					
					
					jq = jQuery("textarea[name*='"+ tableId +"']", row);
					jq.each(function(index) {
							replaceListPosition($(this), rowListSuffix, pathToId);
					});
					
					jq = jQuery("select[name*='"+ tableId +"']", row);
					jq.each(function(index) {
							replaceListPosition($(this), rowListSuffix, pathToId);
					});
						
					jq = jQuery("input[id*="+ pathToId +"]", row);
					jq.each(function(index) {
						var regExpList = /_\d*_/;
						var id = $(this).id.replace(regExpList, "_" + (i + add) +"_");
						$(this).id = id;
					});
					
					var jq = jQuery("input[id*=showDynDate_]", row);
					jq.each(function(index) {
							showDynDate(pathToId, $(this))
					});	
					
					var jq = jQuery("input[id*=showDynTime_]", row);
					jq.each(function(index) {
							showDynTime(pathToId, $(this))
					});	
					
					var jq = jQuery("input[id*=showDynAutoComplete_]", row);
					jq.each(function(index) {
							showDynAutocomplete(pathToId, $(this))
					});	
					
				} else if((table.rows.length-1) == i){
					
					var row = document.getElementById("ADDROW_" + tableId);
					if(row){
						if(i > 0) {
							row.colSpan = 100;
						} else {
							row.colSpan = 1;
						}
											
						var jq = jQuery("input[id*=addRowBtn]", row);
						jq.attr("name", "addRowBtn_" + (i + add));
						jq.attr("id", "addRowBtn_" + (i + add));
						jq.unbind( "click" )
						jq.click(function () { 
							var pos = this.name.replace("addRowBtn_","");
							addRow(tableId, evenRowClass, oddRowClass)						
						});
					}
				}
			} else {
				head = 1;
				add = 0;
			}
		}
	}
	
	table = document.getElementById("ADD_" + tableId);
	if(table) {
		jq = jQuery("input[name*='"+ tableId +"']", table);
		jq.each(function(index) {
			if($(this).name.indexOf("ADDTD_") == -1){
				$(this).name = "ADDTD_" + $(this).name 
			}
		});
				
		jq = jQuery("textarea[name*='"+ tableId +"']", table);
		jq.each(function(index) {
			if($(this).name.indexOf("ADDTD_") == -1){
				$(this).name = "ADDTD_" + $(this).name 
			}	
		});
		
		jq = jQuery("select[name*='"+ tableId +"']", table);
		jq.each(function(index) {
			if($(this).name.indexOf("ADDTD_") == -1){
				$(this).name = "ADDTD_" + $(this).name 
			}	
		});
	}
}

function replaceListPosition(element, rowListSuffix, pathToId){
	var regExpList = /\[\d*\]/;
	var name = element.name.replace(regExpList, rowListSuffix);
	name = name.replace("ADDTD_", "");
	element.name = name;
	if(element.id.indexOf(pathToId) < 0 ){
		//alert(name);
		element.id = name;
	}
}

function showDynDate(pathToId, element ){
	var dateId = element.id.replace("showDynDate","");
	var jQueryPatternId = element.id.replace("showDynDate","jQueryPattern");
	var showTimeControlsId = element.id.replace("showDynDate","showTimeControls");
	
	var jQueryPattern = document.getElementById(jQueryPatternId).value;
	var showTimeControls = document.getElementById(showTimeControlsId).value;
	
	jQuery("#" + dateId ).dynDateTime({showsTime: showTimeControls, ifFormat: jQueryPattern 
	, daFormat:  jQueryPattern , electric: false, singleClick: false, button: '.next()'});
}

function showDynTime(pathToId, element ){
	var dateId = element.id.replace("showDynTime","");
	jQuery("#" + dateId ).timeEntry({show24Hours: true,spinnerImage:'../../js/timeentry/spinnerDefault.png'});
}

function showDynAutocomplete(pathToId, element ){
	var elementId = element.id.replace("showDynAutoComplete","");
	var pattern = document.getElementById("showDynAutoCompletePattern" + elementId).value;
	var organization =  document.getElementById("showDynAutoCompleteOrganization" + elementId).value;
	
	var contextEl =  document.getElementById("showDynAutoCompleteContext" + elementId);
	var context = ""
	if(contextEl){
		context = contextEl.value;
	}
	
	var addInfoEl =  document.getElementById("showDynAutoCompleteAddInfo" + elementId);
	var addInfo = ""
	if(addInfoEl){
		addInfo = addInfoEl.value;
	}
	jQuery("#" + elementId).autocomplete("../../FlexiObjectAutocompleteServlet",{extraParams: {'pattern':pattern,'organization':organization,'context':context,'addInfo':addInfo}});
}

function deleteRow(tableId, position, evenRowClass, oddRowClass){
	var elId = tableId + "[" + position + "]";
	var row = document.getElementById(elId);
	var table = document.getElementById(tableId);
	if(table && row){
		table.deleteRow(row.rowIndex);
	}
	initTable(tableId, evenRowClass, oddRowClass);
}

function addRow(tableId, evenRowClass, oddRowClass){

	var table = document.getElementById(tableId);
	var holderTable = document.getElementById("ADD_" + tableId);
	if(table && holderTable){
		var pos = table.rows.length-1;
		//remove add-input
		var row = table.deleteRow(pos);
		
		var row = table.insertRow(pos);
		row.id = tableId + "[" + (pos + 1) +"]";
		holderRow = holderTable.rows[0];
		
		var holderChilds = holderRow.childNodes;
		for(var run = 0; run < holderChilds.length; run++){
			row.appendChild(holderChilds[run].cloneNode(true));
		}
		
		//remove add-input
		pos = pos + 1;
		var row = table.insertRow(pos);
		holderRow = holderTable.rows[holderTable.rows.length-1];
		holderChilds = holderRow.childNodes;
		for(var run = 0; run < holderChilds.length; run++){
			row.appendChild(holderChilds[run].cloneNode(true));
		}
		
	}
	initTable(tableId, evenRowClass, oddRowClass);
}


function dsgcChangeType(){
	overtakeHighlightedCode('configurationScript', 'hiddenConfigurationScript');
	var jq = jQuery("input[id*=changeDSGCType]");

	var id = jq.attr("id");
	var link = document.getElementById(id);	
	if(link){
		simulateClick(link);
	}
}

function selectDetailGeofence(geofenceId){
	jQuery("input[id*=geofenceIdHolder]").val(geofenceId);
	var jq = jQuery("input[id*=geofenceIdHolderButton]");
	var id = jq.attr("id");
	var link = document.getElementById(id);	
	if(link){
		simulateClick(link);
	}
}

function getScriptBasePath(name){
	//get the basepath of script
	var scripts = document.getElementsByTagName('script');
	for (var i = 0; i < scripts.length ; i++) {
		var src = scripts[i].src;
		var index = src.indexOf(name);
		if(index > 1){
			return src.substr(0, index);
		}
	}
	return null;
}
