var map;
var geocoder;
var iw;
var SERVICE_URL = "/GeoHotel/geoservice.asmx"; 
var SOAP_ACTION_BASE = "http://horse21.com/GeoService";
var centerOk = false;
var checkcode = "000194";
var brand_ = "HUBRUDS";
var pid_ = "MBFKZs92ZqiKTPyFuP6sekNfxNXkm7FEkJOiX3f+QlU=AC 225713 uq/Er1mKPBkkqiT2Kz7QVquLwMhPS7s4ZKgjIWVkkxrZ22NK8U3IIxFtsFQfLFQY"
var lang_ = "ru";
var sMethod = "HotelInfo";
var divname = "map";
var funcError = null;


function getRequest(sMethod, Pid, Brand, CheckCode)//																--3--
{
    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 CheckCode=\"" + CheckCode +"\" Brand=\""+Brand+"\" Pid=\""+Pid+"\"/>\n"
                 + "</" + sMethod + ">\n"
                 + "</soap:Body>\n"
                 + "</soap:Envelope>\n";
    return sRequest;                 
}


function f_brov(_divname, _checkcode, _brand, _pid,_lang, _funcError) // funcError - указатель на ф-ию вида funcError(errCode), если ок параметр = 0 если ошибка то 1
{
   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);//									--2--	    
}

function getStars(count)
{
    if((count == null) ||(count == 0))
        return "";
        
    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)//																				--9--
{
    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)// 															--8--
{
window.status = "openInfo()";
    map.setCenter(point, 14);
    var short_info=Fun_short_info(hotel.description);//                                                              --9--    
	var short_adres=Fun_short_info(hotel.address);//																  --10(9)--	
	
	var maxContentDiv = document.createElement('div');
    maxContentDiv.innerHTML = '<h3>'+loc_address+'</h3>'
    
    
    
    var smallimg = "";     
    if(hotel.smallphoto != "")
        smallimg = "<img src='"+ hotel.smallphoto +"'/>";
        
    var	stardiv ='<div class="gmap"><table cellpadding="0" cellspacing="0"><tr><td class="gmap-title">' + hotel.name + '</td><td rowspan="4" style="text-align:right; vertical-align:top;" >' + smallimg + '</td>' +
        '</tr><tr><td>' + getStars(hotel.stars) + '</td></tr><tr><td class="gmap-adress">'+loc_address+':</td></tr><tr><td class="gmap-adress">' + hotel.address +
        '</td></tr></table></div>';
/*   
   var	stardiv ='<table cellpadding="0" cellspacing="0" class="hotel">'+
		 '<tr><td><h1>'+hotel.name+'</h1>'+
		 getStars(hotel.stars)+
                 '<p><strong>'+loc_address+':</strong><br />' + hotel.address + '</p>'+
         	 '</td><td>'+
        	 '<div style="display:block; width:80px; height:80px; border:dashed 1px #ccc;">' + smallimg + '</div>';
        	 '</td></tr>'+
		 '</table>';
*/
    marker.openInfoWindowHtml(stardiv);
return true;    
}


function f_marker(map, hotel)//																						--7--
{
    var point=new GLatLng(hotel.lat, hotel.lon);    	

var mIcon = new GIcon(G_DEFAULT_ICON);
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);

/*
var marker = new GMarker(point);//	
*/

    map.addOverlay(marker);//
    GEvent.addListener
        (marker, 'click', function(){openInfo(marker, hotel, point);});

    return marker;
}

//
function getXmlHttp()//																--1--
{
    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)//														--2--
{

    var sRequest = getRequest(sMethod, pid_, brand_, "Markel"); // checkcode);//  		--3-- 
    var sSoapActionHeader = SOAP_ACTION_BASE + "/" + sMethod;
//alert("Header: " + sSoapActionHeader + "\nRequest: " + sRequest);

    xmlHttp.open("POST", url, true);
    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4)
        { 		
            if(xmlHttp.status == 200)
            {       
//alert("OK:\n"+xmlHttp.responseText); // responseXML);
                parseHotelXML(xmlHttp.responseXML);//															--4--				
            }
            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();
    }
    else
    {
        alert("!");
        if(funcError != null)
            funcError(1);
        return;        
    }   
}

function HotelInfo(id,			// 1
					showinfownd,//  2
					lat,//  3
					lon,//  4
					name ,// 5
					type,// 6
					description,// 7
					ico,// 8
					scale, //  9
					address, // 10
					stars,	// 11
					smallphoto,  // 12
					photo,		// 13
					addressalt	// 14
					)
{
                    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)//       																			--5--
{

    var showinfownd = true;//
	var hotels = new Array();//
	for (i=0;i<x.length;i++)
	{							// 1  2     3  4  5   6   7   8   9   10  11 12  13  14 
		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;	
// alert(i + " " + theData);
			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;
				
			    }
			}
			catch(e)
			{			
			}
			
		}
		if(((hotel.lat == 0) || (hotel.lon == 0)) && (hotel.address != ""))//
		{	
            showAddress(hotel.address, hotel, showinfownd, hotel.addressalt); //            --6--
            showinfownd = false;
		}
		else
		{		    
		    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
		    }
		}		    
	}	
}

//   HotelInfo
function parseHotelXML(xmlDoc)//		                                                             --4--
{
	var elem = xmlDoc.getElementsByTagName("hotel");//    XML
//alert("parseHotelXML: " + elem);
	return GetHotelInfo(elem);//																								--5--		
}

//        
//  
//  geocoder = new GClientGeocoder();
// <input type="button" onclick="showAddress('')" />
var _err_ = false, _addralt,_hotel, _showinfownd;
function showAddress(address, hotel, showinfownd, addressalt)//                                                                                 --6--
{   
    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)});
	}
}