var parameters = new Array();
var httpObject = null; //--> // 
var template;
var url="http://www.euraxess.rs/integration/";
var query_string='';
var shown = false;
// Added for gmaps
var  myOptions;
var popW = 400;
var popH = 400;
var shown = false;
var g_mapsEuraxess;
var no_service = false;
var xmlDoc;
var radius_distance = 10;
var radius_step = 50;
var maxDistance = 1000;
var centers = [];
var distances = [];
var LatLngLocation;
var features, old_feature;
var originalMap;
var countrySeacrhList;
var geocoder;
var map;
var directionDisplay;
var directionsService; 
var old_divs_content;
var old_transparent_div_content;
var old_shade_div_content;
var mouseX=100, mouseY=50;
var divs_close;
var google_load = true;
var MarkerTitle='',whatElement='';
//var content_map_div_id = 'DHTMLSuite_modalBox_contentDiv';
// End Maps var
// Init functions for google maps
//document.onclick = check;
//function loadGoogle() {
	google.load('gdata', '2.x', {packages: ['maps']}); 
	google.setOnLoadCallback(onGoogleDataLoad);
	
//}
    
	function onGoogleDataLoad() {
	    google_load = true;
	    g_mapsEuraxess = new google.gdata.maps.MapsService('euraxess_map_service'); 
		listMaps();
		
}

	function listMaps() {
	
	/*
		Test mapa radi jer sam je ja kreirao i setovao api visible na 1.
		Centri koju sam iskopirao nisam mogao da setujem jer je kreirao drugi korisnik.
		Nije vidljiva ka API-ju. Pomocna funkcija za setovanje je data u fajlu: api_visible.js
	*/
	 	g_mapsEuraxess.getMapEntry(RealCentri, function(entryRoot) {     
			 var entry = entryRoot.entry;   
			 originalMap = entry;
			 getFeatures(entry);
		}, errorHandler); 
	}
	function errorHandler(e) {   
		var errorDiv = document.getElementById('error_log');
		errorDiv.style.display='block';
		if (e instanceof Error) {
			errorDiv.innerHTML = 'Error on line ' + e.lineNumber + ' in ' + e.fileName + '\nMessage: ' + e.message;     
			if (e.cause) {       
				errorDiv.innerHTML = errorDiv.innerHTML + '<br />Root cause: HTTP error '  + e.cause.status + ': ' + e.cause.statusText;     
			}   
		} else {
			//alert(e.toString());   
		} 
	}
	function getFeatures(entry) {
		g_mapsEuraxess.getFeatureFeed(entry.getContent().getUri(), function(feedRoot) {    
		//alert("xzcczxczx");	
			var feed = feedRoot.feed;
			features = feed.getEntries();
			//var content='';
				//content += feature.getContent().getText();  
				//createCenterElement(feature,i);
			   // Add the unordered list to the document body.   
			if (features.length > 0) {
				//loadFeatureKml(content); 
				//initializeDir();
			}
		
		}, errorHandler);
	}
	function createCenterElement(feature,i) {
			if (window.DOMParser) {
			parser=new DOMParser();
			xmlDoc=parser.parseFromString(str,"text/xml");
		} else {
			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.loadXML(str); 
		}  
		//x=xmlDoc.getElementsByTagName("coordinates")[0];
		//y=x.childNodes[0];
		//txt=y.nodeValue; 
		//var latlong = txt.split(",");
		centers[i] = feature;
	
	}
// End if init functions
// Functions for hide on click outside
function checkContent(e) {
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}
 function check(e){
     setMouseCoordinates(e);
 	 hideProgressBox();
	 divs_close.style.display='none';
	 shown = false;
	 //divs_content = old_divs_content;
     //divs_transparentDiv = old_transparent_div_content;
     //divs_shadow = old_shade_div_content;
 } 
 function cancelHide(e){ 
 	 setMouseCoordinates(e);
 } 
 function setMouseCoordinates(e) {
 //alert("usao");
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	//alert(posx);
	mouseX = posx;
	mouseY = posy;
 }
 function prepareDivs() {
		var topOffset = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
		var brSize = getBrowserSize();
		var bodyWidth = brSize[0]/2;
		var bodyHeight = brSize[1]/1.5;
		divs_content.onclick = checkContent;
		document.onclick=check; 
		divs_content.style.width=bodyWidth;
		divs_content.style.height=bodyHeight;
		var tmpWidth = divs_content.offsetWidth;	
    	var tmpHeight = divs_content.offsetHeight;
		divs_content.style.left = bodyWidth / 2;
    	divs_content.style.top = bodyHeight / 2 +  topOffset;
		divs_content.style.zIndex = 1000000
		var wc;
		if(navigator.userAgent.indexOf('MSIE')>=0) {
			iframe.style.display='none';
			wc = bodyWidth;
		} else {
			wc = bodyWidth+4;
		}
		divs_shadow.style.display='none';
		divs_transparentDiv.style.display='none';
		
		
			divs_close = document.createElement('div');
			// this.divs_content.className = 'modalDialog_contentDiv';
			divs_close.style.zIndex = '100001';
			divs_close.style.position = 'absolute';
			divs_close.id = 'close_div';
			//divs_close.style.height=10;
			divs_close.style.width = wc;
			divs_close.style.top = topOffset + bodyHeight/2-31;
			divs_close.style.left = divs_content.style.left;
			divs_close.style.border = 'solid white 1px';
			divs_close.style.zIndex = 1000001
			document.body.appendChild(divs_close);
			var add1='', add2='';
			var country = document.getElementById('txtCountry');
			if (country != null && typeof(country) !='undefined') var con = country; else var con='Country';
			var top = topOffset + bodyHeight/2 - 31;
			var left = 	divs_content.style.left;
			if (no_service)  {
			  add1= "<div style='height:38px;left:"+left+"px;top:"+top+"px;width:"+wc+"px;background-color:silver;font-weight:bold;color:white;font-family:arial;font-size:13px'>";
			  add2 = "<strong>THERE ARE NO SERVICE CENTERS OR BRIDGEHEAD ORGANISATIONS IN " + con + " </strong></div>" ;
				//divs_close.style.left = divs_close.style.left -300;
			} else {
			  add1="<div style='height:38px;left:"+left+"px;top:"+top+"px;width:"+wc+"px;background-color:silver;font-weight:bold;color:white;font-family:arial;font-size:13px'>";
			  add2=' '+whatElement+'</strong></div>';
			}
			divs_close.innerHTML = add1 +"<a href='javascript:hideElements();'><span style='color:black'><img src='/integration/close.png'></span></a>"+ add2;
	}
	function hideElements() {
   	hideProgressBox();
	divs_close.style.display='none';
 }
// End of hide functions
function getHTTPObject(){   
	if (window.ActiveXObject) 
		return new ActiveXObject("Microsoft.XMLHTTP"); 
	else if (window.XMLHttpRequest) return new XMLHttpRequest();   
	else {
		alert("Your browser does not support AJAX.");
		return null;
	}
}
// Change the value of the outputText field
function setContent(){
	if(httpObject.readyState == 4){
	    var div_element = document.getElementById(parameters['destination']);
	    if (div_element != null && typeof(div_element)!="undefined") {
	    // alert(httpObject.responseText);
	        div_element.innerHTML = applyTemplate(httpObject.responseText);
              if(divs_content) {
			   hideProgressBox();
              }
	    } else {
	    	//alert('DIV element with ID'+parameters['destination']+'does not exists');
	    	return;
	    }
	        
	} 
}

function executeQuery(page){
 	httpObject = getHTTPObject();
 	if (httpObject != null) { 
 	    var query_string = 'country='+parameters['country']+'&researchfield='+parameters['researchfield'] + '&organisationid='+parameters['organisationid'];
 	    query_string = query_string + '&marie='+ parameters['marie']+'&offset='+parameters['offset']+'&limit='+parameters['limit']+'&templateid='+parameters['templateid']+"&page="+page;
 	    query_string = query_string + "&showform=" + parameters['showform'] + "&showpag=" + parameters['showpag'] + "&showres=" +parameters['showres']+"&orderby="+parameters['orderby'];
           if(parameters['what']=="FG") {
              query_string = query_string + "&careerstage=" + parameters['careerstage'];
           }
           if(parameters['what']=="PI") {
              query_string = query_string + "&subject=" + parameters['subject'];
           }
 	    if(parameters['what']=="PI" || parameters['what']=="JV" ) {
        // Parse URI
 	      var sGet = window.location.search;
 	      // alert(sGet);
 	      sGet = sGet.substr(1);
 	      var sNVPairs = sGet.split("&");
 	      for (var i = 0; i < sNVPairs.length; i++) {
         var sNV = sNVPairs[i].split("=");
         var sName = sNV[0];
         var sValue = sNV[1];
         if(sName=="cmd" && (sValue=="showServices" || sValue=="showJobs")) {
          var addExecuteQuery = 1;
         }
         query_string = query_string + "&" + sName + "=" + sValue;
        }
 	    }
 	    if(parameters['what']=="JV" || parameters['what']=="") {
             query_string = url + "lib/jobs_directions_lat_lng.php?" +query_string;
           } else if(parameters['what']=="FG") {
             query_string = url + "lib/fellowships.php?" +query_string;
           } else if(parameters['what']=="PI") {
             query_string = url + "lib/practical_information.php?" +query_string;
           }
 	    query_string = query_string + '&executequery=' + parameters['executequery'];
 	    if(addExecuteQuery==1 || parameters['home']==1) {
        query_string = query_string + '&executequery=1';
       }
	   if(typeof(parameters['countryForm'])!= "undefined" && parameters['countryForm'] != '') {
        query_string = query_string + '&countryForm='+parameters['countryForm'];
       }
 	    // alert(query_string);
 	    // alert(httpObject);
 		httpObject.open("GET", query_string, true);
 		httpObject.send(null);
 		httpObject.onreadystatechange = setContent;
 	}
}

function doJob(frm,e) {
if (google_load) {
   var agentB = navigator.userAgent;
	no_service = false;
	//listMaps();
	// because of google maps
	if (shown) hideProgressBox();
	if (!e) var e = window.event;
//alert("sdf");
	if (e !=null) e.cancelBubble = true;
//alert("sdf");	
	if (agentB.indexOf('Firefox') == -1 ) {
	 if (e.stopPropagation) e.stopPropagation();
	}
//alert("kuku");		
	document.onclick = cancelHide;
	// end maps
//alert("lele");	
	 if(parameters['what']=="JV") {
	  if (frm.chkMarieCurie.checked) {
		parameters['marie'] = 1;
	  } else {
		parameters['marie'] = 0;
	  }
	 }
	 parameters['country'] = frm.txtCountry.value;
	 parameters['countryForm'] = frm.txtCountry.value;
	 if(parameters['what']!="PI") {
	  parameters['researchfield'] = frm.txtResearchField.value;
	 }
	 if(parameters['what']=="FG") {
	  parameters['careerstage'] = frm.txtCareerStage.value;
	 }
	 if(parameters['what']=="PI") {
	  parameters['subject'] = frm.txtSubject.value;
	 }
	 parameters['executequery'] = 1;
	// parameters['organisationid'] = frm.txtOrganisation.value;
	 page = '1';

//alert("progress");	
	 showProgressBox();

	 executeQuery(page);
 } else {
	alert("Waiting for google...");
 }
} 

function init() {
    //loadGoogle();
	// Execute Query and start Ajax work
	executeQuery('1');
}

function goToPage(offset1,page1) {
  parameters['offset'] = offset1;
  parameters['executequery'] = 1;
  page = page1;

  showProgressBox();

  executeQuery(page);
}

function applyTemplate(strResponse) {
var rows = new Array();
var rowsData = new Array();
var rowsNewData = new Array();
var rowsTable = new Array();
var i;
var all = new Array();

   if (strResponse != null && strResponse !='') {
		rows = strResponse.split('###');
		numrows = rows.length
		k = 0;
		j = 0;
		for (i = 0;i<numrows;i++) {
		 index = rows[i].search(/Data/);
			if (index != -1 ) {
				rowsData[k] = rows[i].substr(index+4);
				k++;
			} else {
			    rowsTable[j] = rows[i];
			    j++;
			}
		}
		var numrowsData = rowsData.length;	
		i = 0;	
		for (i = 0;i<numrowsData;i++) {
			rowsNewData[i] = makeRowByTemplate(rowsData[i]);
		}
		Table_length = rowsTable.length;
		
		all = rowsTable[0];
		i = 0;
		for (i = 0;i<numrowsData;i++) {
		   all += rowsNewData[i];
		}
		i = 0;
		for (i = 1;i<Table_length;i++) {
		 	all += rowsTable[i];
		}
			return all;
	}
		
}

function makeRowByTemplate(strRow) {
var inside_array = new Array();
var elementsPar = new Array();
	index_start = strRow.search(/Start:/);
	index_end = strRow.search(/:End/);
	inside = strRow.substr((index_start+6),index_end-(index_start+6));
	inside_array = inside.split(';;;');
	len = inside_array.length
	for (i = 0; i< len;i++) {
	    tempArray = new Array();
	    tempArray = inside_array[i].split('==');
		//alert(tempArray[1]);
		elementsPar[i] = tempArray[1];
		
	}
	
 if(parameters['what']=="JV" || parameters['what']=="") {
	str1 = template.replace(/#postdate#/,elementsPar[0]);
	str2 = str1.replace(/#applicationdeadline#/,elementsPar[1]);
	str3 = str2.replace(/#jobstartingdate#/,elementsPar[2]);
	str4 = str3.replace(/#marie#/,elementsPar[3]);
	str5 = str4.replace(/#jobtitle#/,"<a target='_blank' href='http://ec.europa.eu/euraxess/index_en.cfm?l1=1&l2=1&l3=1&IdJob="+elementsPar[5]+"'>"+elementsPar[4]+"</a>");
	str6 = str5.replace(/#jobsummary#/,elementsPar[6]);
	str7 = str6.replace(/#country#/,elementsPar[7]);
	str8 = str7.replace(/#organisation#/,elementsPar[8]);
	str9 = str8.replace(/#researchfield#/,elementsPar[9]);
	
	/*
	if (elementsPar[7] =='Austria') {
		sub = 'AT';
	} else {
		sub = elementsPar[7];
	}
	
	sub = eu_countries[elementsPar[7].toLowerCase()];
	var str = elementsPar[10] + "," + sub + "," + elementsPar[7];
	str = str.replace("'","%%");
	*/
	var country = elementsPar[7];
	MarkerTitle = elementsPar[4] + " Organisation: " + elementsPar[8];
	lat = elementsPar[13];
	lng = elementsPar[14];
	str = lat + "," + lng;
	str10 = str9.replace(/#linkmaps#/,"<a href=\"javascript:findIt('" +str+ "')\">Find it on Google Maps</a>");
	str11 = str10.replace(/#linkdirections#/,"<a href=\"javascript:findDirections('" +str+  "','"+country+"')\">Find Directions to the closest Service Center</a>");
	str10 = str11;
 }
 if(parameters['what']=="FG") {
	str1 = template.replace(/#organisation#/,elementsPar[0]);
	str2 = str1.replace(/#siteURL#/,elementsPar[1]);
	str3 = str2.replace(/#careerstage#/,elementsPar[2]);
	str4 = str3.replace(/#researchfield#/,elementsPar[3]);
	str10 = str4.replace(/#country#/,elementsPar[4]);
 }
 if(parameters['what']=="PI") {
	str1 = template.replace(/#organisation#/,elementsPar[0]);
	str2 = str1.replace(/#siteURL#/,elementsPar[1]);
	str10 = str2.replace(/#country#/,elementsPar[4]);
 }

	first_part = strRow.substr(0,index_start);
	return first_part+str10+"</td></tr>";
	 
}
// for maps

function findIt(url) {
//document.onclick = check;
    whatElement='';
    //MarkerTitle='';
	geocoder = new google.maps.Geocoder();
	var latlngStr = url.split(",",2);
	var lat = parseFloat(latlngStr[0]);     
	var lng = parseFloat(latlngStr[1]);     
	var latlng = new google.maps.LatLng(lat, lng); 
	showProgressBox();
	shown = true;
	geocoder.geocode( {'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
	     //hideProgressBox();
		 //createDiv(popW,popH);
		 initializeLoc(latlng);
      }  else {
		alert("Geocode was not able to find: " + url);
    }});
	
  }
  function findDirections(url,country) {
  //document.onclick = check;
    whatElement='';
    //MarkerTitle='';
		
	var agentB = navigator.userAgent;
	  if (agentB.indexOf('Firefox') == -1 ) {
			geocoder = new google.maps.Geocoder();
			var latlngStr = url.split(",",2);
			var lat = parseFloat(latlngStr[0]);     
			var lng = parseFloat(latlngStr[1]);     
			var latlng = new google.maps.LatLng(lat, lng); 
			showProgressBox();
			shown = true;
			geocoder.geocode( {'latLng': latlng}, function(results, status) {
			  if (status == google.maps.GeocoderStatus.OK) {
				 LatLngLocation = results[0].geometry.location;
				 initializeDir(latlng,country);
			  }  else {
				alert("Geocode was not able to find: " + url);
			}});
	  } else {
			geocoder = new google.maps.Geocoder();
			var latlngStr = url.split(",",2);
			var lat = parseFloat(latlngStr[0]);     
			var lng = parseFloat(latlngStr[1]);     
			var latlng = new google.maps.LatLng(lat, lng); 
			showProgressBox();
			shown = true;
			geocoder.geocode( {'latLng': latlng}, function(results, status) {
			 if (status == google.maps.GeocoderStatus.OK) {
			 var addr ="lib/direction_lat_lng.php?value="+url+"&country="+country;
				//alert(addr);
				window.open(addr,'test','width=1200,height=700,resizable=1,scrollbars=1');
				hideProgressBox();
			  }  else {
				alert("Geocode was not able to find: " + url);
			}});
	   }

  }
  
  function initializeLoc(latlng) {
    geocoder = new google.maps.Geocoder();
	myOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
	
	prepareDivs();
	divs_close.style.display='block';
    map = new google.maps.Map(divs_content, myOptions);
	 
	 var marker = new google.maps.Marker({
            map: map, 
            position: latlng,
			title:MarkerTitle
        });
	
	//createDiv(popW,popH);
    //codeAddress("<?php echo $_REQUEST['value']; ?>");
  }
 
 
 function initializeDir(latlng,country) {
    geocoder = new google.maps.Geocoder();
    myOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
	
    checkDistances(country,latlng);
  }

  
 function haversine(lat1,lon1,lat2,lon2) {
	var unit = "K"; // kilometres
	var radlat1 = Math.PI * lat1/180
	var radlat2 = Math.PI * lat2/180
	var radlon1 = Math.PI * lon1/180
	var radlon2 = Math.PI * lon2/180
	var theta = lon1-lon2
	var radtheta = Math.PI * theta/180
	var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
	dist = Math.acos(dist)
	dist = dist * 180/Math.PI
	dist = dist * 60 * 1.1515
	if (unit=="K") { dist = dist * 1.609344 }
	
	return dist

 }
 function checkDistances(country,latlng) {
//alert("U funckiji");
	var content="";
	var outputcenter = "";
	var k = 0;
	radius_distance = 10;
	distances = new Array();
	var tempFeatures = new Array();
	//alert (features);
	for (var i = 0; i < features.length; i++) { 
			var feature = features[i]; 
			str = feature.getContent().getText();
			var title = feature.getTitle().getText(); 
			var last = title.lastIndexOf(";");
			var service = title.indexOf("Service");
			//alert(title + " " + service);
			var country_map = trimAll(title.substr(last+1));
			var request_country = trimAll(country);
		   //alert ("Country:" +country_map + "request:" + request_country + " Service" + service);
			if (country_map.toLowerCase() == request_country.toLowerCase() /*&& service != -1*/) {
			//	alert("ima");
				tempFeatures[k] = feature;
				k++;
			}
	}
	
	
	if (tempFeatures.length >0) {
		while (radius_distance < maxDistance) {
			var dis = 0;
			for (var i = 0; i < tempFeatures.length; i++) {      
				var feature = tempFeatures[i]; 
				str = feature.getContent().getText();
				var title = feature.getTitle().getText(); 
				if (window.DOMParser) {
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(str,"text/xml");
				} else {
					xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
					xmlDoc.async="false";
					xmlDoc.loadXML(str); 
				}  	
				var last = title.lastIndexOf(";");
				var service = title.indexOf("Service");
				//alert(title + " " + service);
				var country_map = trimAll(title.substr(last+1));
				//var request_country = trimAll(country);
				//alert ("Country:" +country_map + "request:" + request_country);
				if (country_map.toLowerCase() == request_country.toLowerCase() /*&& service != -1*/) {
				 //alert(country + " " + title);
					x=xmlDoc.getElementsByTagName("coordinates")[0];
					y=x.childNodes[0];
					txt=y.nodeValue; 
					var latlong = txt.split(",");
					var place = new google.maps.LatLng(latlong[1],latlong[0]);
					var d = haversine(latlong[1],latlong[0],LatLngLocation.lat(),LatLngLocation.lng());
					//alert(d + " " + feature.getTitle().getText());
					outputcenter += feature.getTitle().getText() + "#" + latlong[0] + "#" + latlong[1]  + "<br>";
					if (d<=radius_distance) {
							distances[dis] = place;
							dis++;
							whatElement='Closest Center: '+title;
							break;
					}
				}	
			}
			if (dis == 0) radius_distance += radius_step;
			else break;
		}
	}
  
	if (dis > 0) {
		no_service = false;
	//alert("ima");
	    prepareDivs();
	    divs_close.style.display='block';
	    map = new google.maps.Map(divs_content, myOptions);
		map.setCenter(latlng);
	 	getDirections();
	} else if (tempFeatures.length == 0) {
		//alert("There are no Service Centers in " + country);
		no_service = true;
		initializeLoc(latlng);
		//hideProgressBox();
		return;
	} else {
		//alert("There is no Service Center in "+ country + ", at radius of " + maxDistance + "km");
		//hideProgressBox();
		no_service = true;
		initializeLoc(latlng);
		return;
		 
	}
}	
function trimAll(sString) 	{ 
	while (sString.substring(0,1) == ' ') 
	{ 
	sString = sString.substring(1, sString.length); 
	} 
	while (sString.substring(sString.length-1, sString.length) == ' ') 
	{ 
	sString = sString.substring(0,sString.length-1); 
	} 
	return sString; 
} 
function getDirections() {
	initializeDirections()
 }

directionsService = new google.maps.DirectionsService();

function initializeDirections() {
  directionsDisplay = new google.maps.DirectionsRenderer();
  directionsDisplay.setMap(map);
  findRoute();
}
  
function findRoute() {
 var start =LatLngLocation;
 var end = distances[0];
 var request = {
    origin:start, 
    destination: end,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  };
  directionsService.route(request, function(result, status) {
  //alert(status);
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(result);
	  //createDiv(popW,popH);
    } else if (status == google.maps.DirectionsStatus.ZERO_RESULTS) {
		alert('Sorry Google maps was not able to find route directions');
	} else {
		alert('Error:' + status);
	}
	//document.getElementById("map_canvas").display = "block";
  });
}



