var map;
var geocoder;
var iw;
var SERVICE_URL = "/GeoHotel/geoservice.asmx"; 
//var SERVICE_URL = "http://horse21.org/GeoHotel/geoservice.asmx"; 
var SOAP_ACTION_BASE = "http://horse21.com/GeoService";
var centerOk = false;
var checkcode = "";
var brand_ = "";
var pid_ = ""
var lang_ = "ru";
// var sMethod = "HotelInfo";
var sMethod = "HotelLatLng";
var divname = "map";
var funcError = null;

function getRequest(sMethod, Pid, Brand, CheckCode){
var sRequest = 
"<soap:Envelope xmlns:xsi=\""
+ "http://www.w3.org/2001/XMLSchema-instance\" "
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
+ "<soap:Body>\n"
+ "<" + sMethod + " xmlns=\"" + SOAP_ACTION_BASE + "\">\n"
+ "<Request Brand=\""+Brand+"\" Pid=\""+Pid+"\" Lang=\"" + lang_+ "\"/>\n" // CheckCode=\"" + CheckCode +"\"
+ "</" + sMethod + ">\n"
+ "</soap:Body>\n"
+ "</soap:Envelope>\n";
return sRequest;                 
}
function get_Request(sMethod, Pid, Brand, CheckCode){
return 
'<?xml version="1.0" encoding="utf-8"?>'+
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
  '<soap:Body>' +
    '<HotelInfoTest xmlns="http://horse21.com/GeoService">' +
      '<Brand>' + Brand + '</Brand>' +
      '<Pid>' + Pid + '</Pid>' +
      '<Lang>' + 'ru' + '</Lang>' +
    '</HotelInfoTest>' +
  '</soap:Body>' +
'</soap:Envelope>';
}

// funcError - указатель на ф-ию вида funcError(errCode), если ок параметр = 0 если ошибка то 1
function f_brov(_divname, _checkcode, _brand, _pid,_lang, _funcError){
funcError = _funcError;
if(map != null){funcError(0);return}
divname = _divname;
checkcode = _checkcode;
brand_ = _brand;
pid_ = _pid;
lang_ = _lang;
var xmlHttp;    
xmlHttp = getXmlHttp(); 
getSomeData(xmlHttp,SERVICE_URL);
}

function getStars(count){
//alert("getStars: " + count + " " + String(count).indexOf("/-1.jpg"));
if((count == null) ||(count == 0)) return "";
//var s1 = "<img src='" + count + "' alt=''/>";

var s = "<img src='content/img/star.jpg' width='16' height='16' align='left'/>";
var s_grey="<img src='content/img/star_grey.jpg' width='16' height='16' align='left'/>";
var s1 = "";    
for(var i = 0; i < count; i++) s1 += s;
var s_count= 5 - count;
for(i=0;i< s_count;i++) s1 +=s_grey;
return s1}
	
function fun_3(title,adres,informaciya,lat,lon,photo){
if(photo != "") return "<table width='571' height='135' border='0' ><tr><td>"+title+"</td><td rowspan='3'><div id='hotel_img'><img src="+photo+" width='300' height='200' align='right'/></div></td></tr><tr><td>"+adres+"</td></tr><tr><td>"+informaciya+"</td></tr><tr><td colspan='2'>HORSE-21</td></tr></table>";
else return "<table width='100%' height='156' border='0' ><tr><td width='294'>"+title+"</td></tr><tr><td>"+adres+"</td></tr><tr><td>"+informaciya+"</td></tr><tr><td colspan='2'>HORSE-21</td></tr></table>";
}

function Fun_short_info(informaciya){
var short_info="";
if(informaciya.length>40){
    short_info=(informaciya.substr(0,40));
    short_info=short_info.concat('...')}
else short_info=informaciya;
return short_info}

function f_maxInfoWindows(){map.getInfoWindow().maximize()}

function openInfo(marker, hotel, point){
map.setCenter(point, 14);
var	stardiv ='';

//var short_info=Fun_short_info(hotel.description);
//var short_adres=Fun_short_info(hotel.address);
//var maxContentDiv = document.createElement('div');
//maxContentDiv.innerHTML = '<h3>'+loc_address+'</h3>'
var smallimg = "";     
//if(hotel.smallphoto != "")
 if(String(hotelData.img).indexOf("/-1.jpg") == -1)
    smallimg = "<img src='" + hotelData.img + "'/>"; // hotel.smallphoto
        
stardiv =
    '<div>'+
        '<table cellpadding="0" cellspacing="0">'+
            '<tr valign="top">'+
                '<td rowspan="4" style="text-align:right; vertical-align:top; padding-right:30px;" >' + smallimg + '</td>'+
                '<td class="gmap-title">'+
//		   '<a href="http://horse21.org/RU/Hotel.aspx?Country=france&City=nice&Name=hotel+la+perouse+nice" target="_parent">' + 
			hotelData.name + 
//		   '</a>'+
		'</td>' + 
            '</tr>'+
            '<tr>'+
                '<td>' + getStars(hotelData.rating) + '</td>'+ // getStars(hotelData.rating) getStars(hotel.stars)
            '</tr>'+
            '<tr>'+
                '<td class="gmap-adressT">'+loc_address+':</td>'+
            '</tr>'+
            '<tr>'+
                '<td class="gmap-adress">' + hotelData.addr + '</td>'+ // hotel.address
            '</tr>'+
         '</table>'+
     '</div>';



if(hotel.type == 1){
var dm = $('hotel_Map');
dm.innerHTML = stardiv;
//stardiv ='<div class="gmap_">' + 'no hotel' + '</div>';
stardiv ='<div class="gmap_"><center>' + hotel.description + '</center></div>';
// var iw = new google.maps.InfoWindow({content: stardiv, width: 120, height: 30});
// iw.open(
/*	
	var hdivMap = parseInt($("divMap").style.height,10);
	$("divMap").style.height =  (hdivMap + 70) + "px";
	$("divMapBlock").style.height =  (parseInt($("divMapBlock").style.height,10)+70) + "px";
	window.parent.document.getElementById('frameMap').style.height = hdivMap + 72 + "px";	
*/
}

//else{
//var f = $('frameMap');
/*
var f = window.parent.document.getElementById('frameMap');
//var w = $("divMap").offsetWidth + "px";
var h = $("divMap").offsetHeight;
f.style.height = h + "px";// 604-80 + "px";
$("divMapBlock").style.height =  h + "px";
//}
*/
marker.openInfoWindowHtml(stardiv);
return true}

function f_marker(map, hotel){
var point=new GLatLng(hotel.lat, hotel.lon);    	
var mIcon = new GIcon(G_DEFAULT_ICON);
if(hotel.type != 1){
	mIcon.image = "content/img/marker.png"; 
	mIcon.iconSize = new GSize(43, 43); // 30,34); // 43, 43); // 
// mIcon.iconAnchor = new GPoint(43, 43); 
	mIcon.iconAnchor = new GPoint(9,34); // 15, 54); 
	mIcon.infoWindowAnchor = new GPoint(20, 5); 
}

markerOptions = { icon:mIcon };
var marker = new GMarker(point, markerOptions);
map.addOverlay(marker);//
GEvent.addListener(marker, 'click', function(){openInfo(marker, hotel, point);});
return marker}

function getXmlHttp(){
var xmlhttp = null;     
try{xmlhttp = new XMLHttpRequest()} 
catch (e){
    try{xmlhttp = new ActiveXObject('Msxml2.XMLHTTP')} 
    catch (e){
        try{xmlhttp = new ActiveXObject('Microsoft.XMLHTTP')} 
        catch (e){alert(e.message)}            
    }                
}
return xmlhttp;
}


function getSomeData(xmlHttp, url){
var sRequest = getRequest(sMethod, pid_, brand_, "Markel");
var sSoapActionHeader = SOAP_ACTION_BASE + "/" + sMethod;

xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = function(){
    if (xmlHttp.readyState == 4){ 		
        if(xmlHttp.status == 200){parseHotelXML(xmlHttp.responseXML)}
        else{alert(error_load_map + " " + xmlHttp.status +"\n" + xmlHttp.responseText, xmlHttp.responseXML)}
    }
}
xmlHttp.setRequestHeader("SOAPAction", sSoapActionHeader);
xmlHttp.setRequestHeader("Content-Type", "text/xml");
xmlHttp.send(sRequest);
}

function InitGoogle(){
if (GBrowserIsCompatible()){
	if(funcError != null) funcError(0);
    map = new GMap2(document.getElementById(divname));
    map.addControl(new GSmallMapControl());
    //map.addControl(new GMapTypeControl());
    map.enableScrollWheelZoom();
    map.setCenter(new GLatLng(0, 0), 14);        
    iw = map.getInfoWindow();
    //var dm = $(divname);
    GEvent.addListener(map, "click", Map_Click);
    // kd = GEvent.addDomListener(dm, "keydown", DomMap_KeyDown);
    //kd = GEvent.addListener(map,"keydown", DomMap_KeyDown);
}
else{
    if(funcError != null) funcError(1);
    return}   
}

function Map_Click(overlay, point){
if (!overlay || overlay.focusable){
var dm = $("divMap");
dm.focus()}}

function DomMap_KeyDown( e ){
if ( !e ) e = window.event ;
var iCode = ( e.keyCode || e.charCode ) ;
if (iCode == 46){}}

function HotelInfo(id, showinfownd, lat, lon,name,type, description, ico, scale, address, stars, smallphoto, photo, addressalt){
this.id = id;this.showinfownd = showinfownd;this.lat = lat;this.lon = lon;this.name = name;
this.type = type;this.description = description;this.ico = ico;this.scale = scale;this.address = address;		
this.stars = 0;this.smallphoto  = smallphoto;this.photo = photo;this.addressalt = addressalt}

function GetHotelInfo(x){
var showinfownd = true;
var hotels = new Array();
for (i=0;i<x.length;i++){
	var hotel = new HotelInfo("", true, 0, 0, "", "", "", "", "", "", 0, "", "","");
	for (j=0; j < x[i].childNodes.length; j++){
		if(x[i].childNodes[j].nodeType != 1) continue;			
		if(x[i].childNodes[j].firstChild == null) continue;	
		if(x[i].childNodes[j].firstChild.nodeValue == null) continue;	
		var theData = x[i].childNodes[j].firstChild.nodeValue;//  
		// if(theData == null) continue;	
		var nodeName = x[i].childNodes[j].nodeName;
		try{
		    switch(nodeName){			    
		        case "id": hotel.id = theData;break;
			    case "showinfownd": hotel.showinfownd = theData;break;
			    case "lat": hotel.lat = parseFloat(theData);break;
			    case "lon": hotel.lon = parseFloat(theData);break;
			    case "address": hotel.address = theData;break;
			    case "name": hotel.name = theData;break;
			    case "type": hotel.type = theData;break;
			    case "description": hotel.description = theData;break;
			    case "ico": hotel.ico = theData;break;
			    case "scale": hotel.scale = parseFloat(theData);break;
			    case "stars": hotel.stars = parseInt(theData);break;
		        case "smallphoto": hotel.smallphoto = theData;break;					
       		    case "photo": hotel.photo = theData;break;	
			    case "addressalt": hotel.addressalt = theData;break;
			    case "ac_level": hotel.type = parseInt(theData); break;
                case "ac_desc": hotel.description = theData;break;

		    }
		}
		catch(e)
		{			
		}
		
	}
	if(((hotel.lat == 0) || (hotel.lon == 0)) && (hotel.address != "")){	
        showAddress(hotel.address, hotel, showinfownd, hotel.addressalt);
        showinfownd = false}
	else{		    
	    InitGoogle();
		if(!centerOk){
		    map.setCenter(new GLatLng(hotel.lat, hotel.lon), 14);
			centerOk = true}
            // hotel.type = 1;
	    if(hotel.type == 1){
		var hdivMap = parseInt($("divMap").style.height,10);
		$("divMap").style.height =  (hdivMap + 70) + "px";
		$("divMapBlock").style.height =  (parseInt($("divMapBlock").style.height,10)+70) + "px";
		window.parent.document.getElementById('frameMap').style.height = hdivMap + 72 + "px";	
	    }	
	    var m = f_marker(map, hotel);
	    if(showinfownd){
	        openInfo(m, hotel);					
	        showinfownd = false}
	}		    
}	
}

function parseHotelXML(xmlDoc){
var er = xmlDoc.getElementsByTagName("Error");
if(er.length>0) funcError(1);
else{
var elem = xmlDoc.getElementsByTagName("hotel");
return GetHotelInfo(elem)}
}

//  geocoder = new GClientGeocoder();
// <input type="button" onclick="showAddress('')" />
var _err_ = false, _addralt,_hotel, _showinfownd;
function showAddress(address, hotel, showinfownd, addressalt){   
geocoder = new GClientGeocoder();
if (geocoder){ 
	_hotel = hotel;
	_showinfownd = showinfownd;
	_err_ = false;
	_addralt = addressalt;
    geocoder.getLatLng(address, function(point){showAddr(point)})}
}

function showAddr(point){ 
	if (point){ 
		try{
			_hotel.lat = point.lat();
			_hotel.lon = point.lng();                                
		}
		catch(e){}
  
		InitGoogle();
		if(!centerOk)
		{
			map.setCenter(new GLatLng(_hotel.lat, _hotel.lon), 14);
			centerOk = true}
		var m = f_marker(map, _hotel);//												           					--7--
		if(_showinfownd)
		{
			openInfo(m, _hotel);					
			_showinfownd = false
		}
	} 
	else if(_err_ && funcError != null) funcError(2);
	else{
		_err_ = true;
		geocoder.getLatLng(_addralt, function(point){showAddr(point)});
	}
}


