/*global YGeoPoint, YMarker, YImage, EventsList, YCoordPoint, YMap, YSize, YEvent, ActiveXObject */
var map = null;
var specialMarker = null;
var xmlHttp = null ;
var sc_mapsize = 0;
var noCustomPoints = 0;
var spotImage = new YImage("http://sap-consulting.ro/images/spot_big.png", new YSize(16, 16), new YCoordPoint(11, 8));
function addNew(implname, lat, lon) {
if (lat === 0 || lon === 0) {
return;
}
var newMarker, currentGeoPoint = new YGeoPoint(lat, lon);
newMarker = new YMarker(currentGeoPoint, spotImage);
newMarker.openSmartWindow(' ' + implname);
newMarker.enableAutoContain();
// newMarker.addAutoExpand(implname);
// newMarker.openAutoExpand()
if (specialMarker) {
map.removeMarker(specialMarker.id);
specialMarker = null;
}
map.addOverlay(newMarker);
map.panToLatLon(currentGeoPoint);
}
function showSendBox(pDisplay) {
if (pDisplay) {
document.getElementById('sendbox').style.display = 'block';
document.getElementById('addnew').className = 'boldnolink';
}
else {
document.getElementById('sendbox').style.display = 'none';
document.getElementById('addnew').className = 'jslink';
}
}
function reportPosition(ev, coords) {
var currentGeoPoint = new YGeoPoint(coords.Lat, coords.Lon);
if (!specialMarker) {
specialMarker = new YMarker(currentGeoPoint);
map.addOverlay(specialMarker);
}
else {
specialMarker.setYGeoPoint(currentGeoPoint);
}
document.sendimpl.latit.value = coords.Lat;
// document.sendimpl.latit.select();
document.sendimpl.longit.value = coords.Lon;
showSendBox(true);
}
function readFromDB(search_term) {
if (!createXmlHttp()) {
return "";
}
var url = "/code/implmap.php?lang=en";
if (search_term) {
url = url + "&st=" + search_term;
}
xmlHttp.open("GET", url, false);
xmlHttp.send(null);
if (xmlHttp.status === 200) {
return xmlHttp.responseText; //use xmlhttp.responseText or responseXML here
}
else {
return '';
}
}
function addImplMarkers(search_term) {
var crtGeoPoint, lResult, newMarker, allImpl, i;
lResult = readFromDB(search_term);
if (lResult) {
allImpl = eval('(' + lResult + ')');
for (i = 0;i < allImpl.item.length; i = i+1) {
if (allImpl.item[i].lat && allImpl.item[i].long) {
crtGeoPoint = new YGeoPoint(allImpl.item[i].lat, allImpl.item[i].long);
newMarker = new YMarker(crtGeoPoint, spotImage);
if (allImpl.item[i].desc) {
newMarker.openSmartWindow(' ' + allImpl.item[i].desc);
}
map.addOverlay(newMarker);
}
}
if (allImpl.msg) {
document.getElementById('errmsg').innerHTML = allImpl.msg;
}
return allImpl;
}
}
function showAllMarkers() {
var allImpl = addImplMarkers('');
if (allImpl) {
document.getElementById("noimpl").innerHTML = allImpl.item.length;
}
}
function GetXmlHttpObject() {
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e2) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function createXmlHttp() {
if (xmlHttp !== null) {
return true;
}
xmlHttp = GetXmlHttpObject();
if (xmlHttp === null) {
alert("Browser does not support HTTP Request");
return false;
}
return true;
}
function change_size() {
sc_mapsize = 1 - sc_mapsize;
var mapBox = document.getElementById('map'),
lHeight,
lWidth,
lCenter = map.getCenterLatLon(),
lSize;
if (sc_mapsize === 0) {
document.getElementById('link_large').innerHTML = 'Large
format';
map.setZoomLevel(map.getZoomLevel() + 1);
lHeight = 350;
lWidth = 495;
}
else {
document.getElementById('link_large').innerHTML = 'Small
format';
map.setZoomLevel(map.getZoomLevel() - 1);
lHeight = 600;
lWidth = 850;
}
mapBox.style.height = lHeight;
mapBox.style.width = lWidth;
lSize = new YSize(lWidth, lHeight);
map.resizeTo(lSize);
map.panToLatLon(lCenter);
}
function search_impl() {
var lCompany = document.getElementById('company').value;
show_search_result(lCompany);
return false;
}
function show_search_result(lCompany) {
var allImpl;
if (lCompany.length < 4) {
alert("Company name must have at least 4 letters");
}
if (noCustomPoints === 0) {
map.removeMarkersAll();
}
allImpl = addImplMarkers(lCompany);
if (allImpl !== null && allImpl.item.length > 0) {
map.panToLatLon(new YGeoPoint(allImpl.item[0].lat, allImpl.item[0].long));
noCustomPoints = noCustomPoints + 1;
}
else {
document.getElementById('implname').value = lCompany;
showSendBox(true);
}
document.getElementById('company').value = "";
}
function urlencode(str) {
// http://kevin.vanzonneveld.net
// + original by: Philip Peterson
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: AJ
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// % note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
// * example 1: urlencode('Kevin van Zonneveld!');
// * returns 1: 'Kevin+van+Zonneveld%21'
// * example 2: urlencode('http://kevin.vanzonneveld.net/');
// * returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
// * example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
// * returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
var histogram = {}, histogram_r = {}, code = 0, tmp_arr = [],
ret = str.toString();
replacer = function(search, replace, str) {
var tmp_arr = [];
tmp_arr = str.split(search);
return tmp_arr.join(replace);
};
// The histogram is identical to the one in urldecode.
histogram['!'] = '%21';
histogram['%20'] = '+';
// Begin with encodeURIComponent, which most resembles PHP's encoding functions
ret = encodeURIComponent(ret);
for (search in histogram) {
replace = histogram[search];
ret = replacer(search, replace, ret) // Custom replace. No regexing
}
// Uppercase for full PHP compatibility
return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
return "%" + m2.toUpperCase();
});
return ret;
}
function addImplementation(pForm) {
if (pForm.implname.value.length < 4) {
alert("Company name must have at least 4 letters");
return false;
}
if ((pForm.latit.value === "" || pForm.longit.value === "") && pForm.address.value === "") {
alert("Fill in latitude/longitude by double clicking on the map or fill in the address");
return false;
}
if ((pForm.repname.value === "" || pForm.email.value === "") && pForm.details.value === "") {
alert("Fill either name/address, or other details");
return false;
}
if (!createXmlHttp()) {
return;
}
xmlHttp.open("POST", "/code/implmap.php", true);
var params = "implname=" + urlencode(pForm.implname.value) +
"&latit=" + urlencode(pForm.latit.value) +
"&longit=" + urlencode(pForm.longit.value) +
"&address=" + urlencode(pForm.address.value) +
"&repname=" + urlencode(pForm.repname.value) +
"&email=" + urlencode(pForm.email.value) +
"&details=" + urlencode(pForm.details.value);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(params);
if (noCustomPoints === 0) {
map.removeMarkersAll();
}
addNew(pForm.implname.value, pForm.latit.value, pForm.longit.value);
noCustomPoints = noCustomPoints + 1;
document.getElementById('errmsg').innerHTML = "Thank you! After verification the implementation will be added to the map.";
showSendBox(false);
pForm.implname.value = "";
pForm.latit.value = "";
pForm.longit.value = "";
pForm.address.value = "";
pForm.repname.value = "";
pForm.email.value = "";
pForm.details.value = "";
return false;
}
function zoomOnBuc() {
if (sc_mapsize === 0) {
map.setZoomLevel(7);
}
else {
map.setZoomLevel(6);
}
map.panToLatLon(new YGeoPoint(44.4450557989, 26.109008789));
}
function zoomOnRom() {
if (sc_mapsize === 0) {
map.setZoomLevel(12);
}
else {
map.setZoomLevel(11);
}
map.panToLatLon(new YGeoPoint(45.90529986, 24.91699219));
}
function startMap(ini_location) {
// Create a Map that will be placed in the "map" div.
map = new YMap(document.getElementById('map'));
// Add the zoom control. Long specifies a Slider versus a "+" and "-" zoom control
map.addZoomLong();
map.disableKeyControls();
map.disablePanOnDoubleClick();
map.setZoomRange(1, 12);
// Specifying the Map starting location and zoom level
var centerPoint = new YGeoPoint(45.90529986, 24.91699219);
map.drawZoomAndCenter(centerPoint, 12);
if (ini_location === "b") {
zoomOnBuc();
}
// Add an event
YEvent.Capture(map, EventsList.MouseDoubleClick, reportPosition);
}