/* ----------------------------------
| $RCSfile: main_app.js,v $
| $Date: 2007/11/07 11:56:02 $
| $Revision: 1.24 $
 ---------------------------------- */

var OBJ_TYPE_APARTMENT = 1;
var OBJ_TYPE_HOUSE = 2;
var OBJ_TYPE_LAND = 3;
var OBJ_TYPE_FLAT = 4;
var OBJ_TYPE_COMMERCIAL = 5;
var OBJ_TYPE_STREETBAR = 6;
var OBJ_TYPE_GARAGE = 7;

var obj_overlays_cache = new Array();
// handle for add overlay listener
var ev_add_last_obj_handle = null;
// invalidated after first set of overlays are written to map (used for on load object show)
var first_page_load = true;

var gicons = [];
for (t=OBJ_TYPE_APARTMENT; t<=OBJ_TYPE_GARAGE; t++)
 gicons["objtype_"+t] = g_create_icon(IMAGES_DIR, "gmap_objtype_"+t+".png");


function g_create_icon(img_path, icon_image) {
    var icon = new GIcon();
    icon.image = img_path + icon_image;
    icon.iconSize = new GSize(23, 30);
    icon.shadow = img_path + "gmap_shadow.png";
    icon.shadowSize = new GSize(51, 29);
    icon.iconAnchor = new GPoint(9, 30);
    icon.infoWindowAnchor = new GPoint(9, 29);
    return icon;
}

function fill_region_areas(region_id) {
	// load region geo data with ajax
	if (!loaded_geo_data['regid_'+region_id])
		get_geo_data_to_js_array("sreg_id="+region_id);
    frm  = document.forms[0];
    msel = frm.elements['g_object[area_id]'];
    msel.length = 1;
    for (x=1; x<msel.length; x++) {
       msel.options[x] = null;
    }    
    if (region_area_ids[''+region_id]) {
       for (x=0; x<region_area_ids[''+region_id].length; x++) {
          msel.options[x+1] = new Option(areas[''+region_area_ids[''+region_id][x]], region_area_ids[''+region_id][x]);
       }
    }       
    // handle zagreb region default value
    if (region_id == ZG_REGION_ID)
        msel.options[0] = new Option(js_texts['zg_area_default_select'], 0);
    else
        msel.options[0] = new Option(js_texts['area_default_select'], 0);
    msel.options[0].selected = true;
    fill_places(0);
}

function fill_places(area_id) {
    frm  = document.forms[0];
    msel = frm.elements['g_object[place_id]'];
    msel.length = 1;
    for (x=1; x<msel.length; x++) {
       msel.options[x] = null;
    }    
    if (area_places_ids[''+area_id]) {
       for (x=0; x<area_places_ids[''+area_id].length; x++) {
          msel.options[x+1] = new Option(places[''+area_places_ids[''+area_id][x]], area_places_ids[''+area_id][x]);
       }
    }       
    msel.options[0].selected = true;
}    

function loadmap() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("g_map"));
	map.addControl(new GLargeMapControl());
	map.addControl(g_create_map_type_control());
	map.enableDoubleClickZoom();
    GEvent.addListener(map, "maptypechanged", ev_cache_map_type); // cache in cookie chosen map type (common.js)
    /* 09.06.2007. Infrastructure control button is allways shown */
    //GEvent.addListener(map, "zoomend", ev_handle_map_zoom_infra); // hides/shows infrastructure control (infrastructure.js)
    g_el("infrastructure_ctrl").style.display = '';
    map.addControl(new GOverviewMapControl(new GSize(150,150)));
    set_map_center_on_place(frm.elements['g_object[place_id]'].value); 
    // ====== set up marker mouseover tooltip div ======
    tooltip = document.createElement("div");
    map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
    tooltip.style.visibility="hidden";
  }
  resize();
}

function set_map_center_on_place(place_id) {
	// load region geo data with ajax
	if (!loaded_geo_data['regid_'+frm.elements['g_object[region_id]'].value])
		get_geo_data_to_js_array("sreg_id="+frm.elements['g_object[region_id]'].value);
    if (place_id > 0) {
        lat = parseFloat(places_latlng[""+place_id][0]);
        lon = parseFloat(places_latlng[""+place_id][1]);
        zoom = parseInt(places_latlng[""+place_id][2]);
        map.setCenter(new GLatLng(lat, lon), zoom, get_map_type());        
    } else if (place_id == 0) {
        if (frm.elements['g_object[area_id]'].value > 0) {
            // set map on area center
            area_id = frm.elements['g_object[area_id]'].value;
            area_bounds = new GLatLngBounds(new GLatLng(areas_latlng[area_id][0], areas_latlng[area_id][1]),new GLatLng(areas_latlng[area_id][2], areas_latlng[area_id][3]));
            area_center = area_bounds.getCenter(); 
            map.setCenter(area_center, map.getBoundsZoomLevel(area_bounds), get_map_type());
        } else {
            // set map on region center
            region_id = frm.elements['g_object[region_id]'].value;
            region_bounds = new GLatLngBounds(new GLatLng(regions_latlng[region_id][0], regions_latlng[region_id][1]),new GLatLng(regions_latlng[region_id][2], regions_latlng[region_id][3]));
            region_center = region_bounds.getCenter(); 
            map.setCenter(region_center, map.getBoundsZoomLevel(region_bounds), get_map_type());        
        }
    }
}

function g_trim(str) {
    return str.replace(/^\s*|\s*$/g,"");
}         

function clear_obj_overlays() {
    for (i=0; i<obj_overlays_cache.length; i++) {
        map.removeOverlay(obj_overlays_cache[i]); 
    }
    obj_overlays_cache = null;
    obj_overlays_cache = new Array();
}

function ev_add_last_obj(obj_overlay) {
    if (obj_overlay.cm_is_last) {
        setTimeout('hide_loading_notice_small()',10);
        obj_overlay.cm_is_last = false;
        GEvent.removeListener(ev_add_last_obj_handle); 
        // on load (just once) check if we have to show object on map requested through URL
        if (first_page_load && target_obj_id > 0) {
            g_show_info_win(target_obj_id);
        }  
        first_page_load = false;
    }
}

function show_all_objs_on_map(xmlresult) {
    // build latlng obj array
    g_objs = xmlresult.getElementsByTagName("object");
    clear_obj_overlays();
    g_objs_num = g_objs.length;
    if (g_objs_num > 0) // add listener which will remove loading notice after last overlay is loaded on map
        ev_add_last_obj_handle = GEvent.addListener(map, "addoverlay", ev_add_last_obj);
    else
        hide_loading_notice_small(); // no results, hide loading notice
    for (i=0; i<g_objs_num; i++) {
        is_last = false;
        obj_id = g_objs[i].getElementsByTagName("id").item(0).firstChild.data;
        lat = g_objs[i].getElementsByTagName("latitude").item(0).firstChild.data;
        lng = g_objs[i].getElementsByTagName("longitude").item(0).firstChild.data;
        addr = g_objs[i].getElementsByTagName("address").item(0).firstChild.data;
        prc = "";
        if (g_objs[i].getElementsByTagName("price").item(0).firstChild) {
            prc = formatCurrency(g_objs[i].getElementsByTagName("price").item(0).firstChild.data);
        }
        foot = "";
        if (g_objs[i].getElementsByTagName("sq_footage").item(0).firstChild)  
            foot = g_objs[i].getElementsByTagName("sq_footage").item(0).firstChild.data;
        obj_type = g_objs[i].getElementsByTagName("type").item(0).firstChild.data;
        if (obj_type == OBJ_TYPE_LAND)
            foot = g_objs[i].getElementsByTagName("land_footage").item(0).firstChild.data;
        if (i == (g_objs_num - 1)) is_last = true;
        map.addOverlay( g_create_marker(new GLatLng(lat, lng), obj_id, prc, addr, foot, obj_type, is_last) );
    }    
}    

function g_show_tool_tip(marker) {
    tooltip.innerHTML = marker.tooltip;
	var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor = marker.getIcon().iconAnchor;
	var width = marker.getIcon().iconSize.width;
	var height = tooltip.clientHeight;
	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y -height)); 
	pos.apply(tooltip);
	tooltip.style.visibility="visible";
}

function g_hide_tool_tip(marker) {
    tooltip.style.visibility="hidden";    
}

function g_create_marker(point, obj_id, price, address, foot, obj_type, is_last) {
  var marker = new GMarker(point, gicons["objtype_"+obj_type]);
  marker.tooltip = "<div class='obj_info_tooltip'>"+js_texts["o_type_"+obj_type]+", "+address+", ";
  if (foot != '') marker.tooltip+= foot+"m2, ";
  marker.tooltip+= price+" EUR</div>";
  if (is_last) {
      marker.cm_is_last = true;
  }
  GEvent.addListener(marker, "click", function() {
    g_show_info_win(obj_id);
  });
  GEvent.addListener(marker, "mouseover", function() {
    g_show_tool_tip(marker);
  });
  GEvent.addListener(marker, "mouseout", function() {
    g_hide_tool_tip(marker);
  });    
  obj_overlays_cache[obj_overlays_cache.length] = marker;
  return marker;
}

function g_show_results(new_search, reset_page) {
    // build filter
    if (reset_page || new_search) {
        frm.elements["g_object[start_page]"].value = "0";
        // empty street autocomplete textbox
        frm.elements['street_search'].value = "";
    }        
    region_id = frm.elements["g_object[region_id]"].value;
    // remove infrastructure overlays on region change
    if (new_search) {
        if (curr_sel_reg_id > 0)
            if (region_id != curr_sel_reg_id)
                infra_handle_region_change();
    }
    g_createCookie("g_object[region_id]", region_id, 100);
    area_id   = frm.elements["g_object[area_id]"].value;
    g_createCookie("g_object[area_id]", area_id, 100);
    place_id = frm.elements["g_object[place_id]"].value;
    g_createCookie("g_object[place_id]", place_id, 100);
    type      = frm.elements["g_object[type]"].value;
    category  = "0";
    if (frm.elements["g_object[category]"]) {
        category = frm.elements["g_object[category]"].value;
    }
    price      = frm.elements["g_object[price]"].value;
    start_page = frm.elements["g_object[start_page]"].value;
    g_createCookie("g_object[start_page]", start_page, 100);
    page_size  = frm.elements["g_object[page_size]"].value; 
    g_createCookie("g_object[page_size]", page_size, 100);       
    order_rule   = frm.elements["g_object[order_rule]"].value;
    g_createCookie("g_object[order_rule]", order_rule, 100);
    lang_code   = frm.elements["g_app[lang_code]"].value;
    g_createCookie("g_app[lang_code]", lang_code, 100);  
    trans_type  = frm.elements["g_object[transaction_type]"].value;  
    params     = "region_id="+region_id+"&area_id="+area_id+"&place_id="+place_id;
    params    += "&type="+type+"&category="+category+"&price="+price;
    params    += "&start_page="+start_page+"&page_size="+page_size;   
    params    += "&order_rule="+order_rule+"&lang_code="+lang_code+"&trans_type="+trans_type;
    if (AGENCY_ID_FILTER) { // this var is set on browse_agency.php page
        params+= "&user_id="+AGENCY_ID_FILTER;
    }
    params    += "&rnd="+Math.random();
    myurl      = WEB_ROOT_RELATIVE+"ajax/sobjcts.php?search_type=simple&"+params; 

    // create ajax request for displaying search results    
    var ai = new AJAXInteraction(myurl, g_show_objects_list_from_xml);
    ai.doGet();    
    
    // if this is new search, show all objects that match filter on map
    if (new_search) {
        // get all objs coordinates data and show them on map
        show_loading_notice("small", "objects");
        var ai2 = new AJAXInteraction(WEB_ROOT_RELATIVE+'ajax/sobjcts.php?search_type=all&'+params, show_all_objs_on_map);
        ai2.doGet();        
        set_map_center_on_place(place_id);
    }             
}

function g_get_infowin_tpl(object_type) {
    return js_tpls["obj_info_tab"];
}    

function g_get_infowin_other_tpl(object_type) {
    return js_tpls["obj_other_tab"];
}    

function g_get_infowin_tabs(object_id) {
    oid_hash = "oid_"+object_id;
    // prepare html for info tab
    info_tpl = g_get_infowin_tpl(allobjs[oid_hash]["type"]);
    info_tpl = info_tpl.replace(new RegExp("{TYPE}","i"), js_texts["o_type"]+" "+js_texts["o_type_"+allobjs[oid_hash]["type"]]);
    info_tpl = info_tpl.replace(new RegExp("{ADDRESS_FULL}","i"), allobjs[oid_hash]["address"]+", "+allobjs[oid_hash]["place_name"]);
    info_tpl = info_tpl.replace(new RegExp("{PRICE}","i"), js_texts["o_price"]+" "+formatCurrency(allobjs[oid_hash]["price"])+" EUR");
    /* do not show sq_footage for land */
    if (frm.elements['g_object[type]'] == OBJ_TYPE_LAND)
        info_tpl = info_tpl.replace(new RegExp("{FOOTAGE}","i"), js_texts["o_land_footage"]+" "+allobjs[oid_hash]["land_footage"]+"m<span class='superscript'>2</span>");
    else {
        foot_rpl = js_texts["o_sq_footage"]+allobjs[oid_hash]["sq_footage"]+"m<span class='superscript'>2</span>";
        if (allobjs[oid_hash]["land_footage"]) foot_rpl+= "<br />"+js_texts["o_land_footage"]+" "+allobjs[oid_hash]["land_footage"]+"m<span class='superscript'>2</span>";
        info_tpl = info_tpl.replace(new RegExp("{FOOTAGE}","i"), foot_rpl);
    }
    /* do not show room_no for land */
    room_rpl = "";
    if (frm.elements['g_object[type]'] != OBJ_TYPE_LAND && allobjs[oid_hash]["room_no"])
        room_rpl = "<br />"+js_texts["o_room_no"]+" "+allobjs[oid_hash]["room_no"];
    info_tpl = info_tpl.replace(new RegExp("{ROOM_NO}","i"), room_rpl);
    /* show category only for rent */
    cat_rpl = "";
    if (frm.elements['g_object[transaction_type]'].value == OBJ_TYPE_HOUSE && allobjs[oid_hash]["category"])
        cat_rpl = "<br />"+js_texts["o_category"]+" <img src='"+WEB_ROOT_RELATIVE+"images/stars_"+allobjs[oid_hash]["category"]+".gif'>";
    info_tpl = info_tpl.replace(new RegExp("{CATEGORY}","i"), cat_rpl);    
    photo_rpl = "";
    if (allobjs[oid_hash]["main_photo_id"])
        photo_rpl = "<br /><img src='"+WEB_ROOT_RELATIVE+"photo.php?type=1&oid="+object_id+"&thumb=2&photoid="+allobjs[oid_hash]["main_photo_id"]+"' class='obj_list_img'>";
    info_tpl = info_tpl.replace(new RegExp("{MAIN_PHOTO_SRC}","i"), photo_rpl);
    info_tpl = info_tpl.replace(new RegExp("{SHOWDETAILS}","i"), "> "+js_texts["o_show_details2"]);
    info_tpl = info_tpl.replace(new RegExp("{OBJID}","ig"), object_id);        
    // prepare html for other info tab
    other_tpl = g_get_infowin_other_tpl(allobjs[oid_hash]["type"]);
    desc_rpl = js_texts['o_no_desc'];
    if (allobjs[oid_hash]["description_"+frm.elements['g_app[lang_code]'].value])
        desc_rpl = allobjs[oid_hash]["description_"+frm.elements['g_app[lang_code]'].value].replace(/(\r\n)/gi,"<br />").replace(/(\n)/gi,"<br />");
    other_tpl = other_tpl.replace(new RegExp("{DESCRIPTION}","i"), desc_rpl);
    // create tabs
    tabs = new Array();
    tabs[0] = new GInfoWindowTab(js_texts["tab_info"], info_tpl);
    tabs[1] = new GInfoWindowTab(js_texts["tab_other"], other_tpl);    
    return tabs;    
}    

function g_fill_obj_data_from_server(object_id) {
    // create sync ajax request for getting obj data from server    
    var ai = new AJAXInteraction(WEB_ROOT_RELATIVE+"ajax/sobjcts.php?search_type=single&oid="+object_id+"&lang_code="+frm.elements["g_app[lang_code]"].value+"&rnd="+Math.random());
    xmlresult = ai.doGet(); 
    g_objs = xmlresult.getElementsByTagName("object");
    // cache object data
    oid = g_objs[0].getElementsByTagName("id").item(0).firstChild.data;
    g_cache_object(oid, g_objs[0]); 
}    

function g_show_info_win_and_zoom(object_id) {
    if (map.getZoom() < 13) map.setZoom(14);
	g_show_info_win(object_id);
}

function g_show_info_win(object_id) {
    if (getScrollXY()[1] > 260) self.scrollTo(0, 260);
    oid_hash = "oid_"+object_id;
    if (!allobjs[oid_hash]) {
        // go to server and fill data for this object  
        g_fill_obj_data_from_server(object_id); 
    }    
    map.openInfoWindowTabsHtml(new GLatLng(allobjs[oid_hash]["latitude"], allobjs[oid_hash]["longitude"]),
                               g_get_infowin_tabs(object_id));
}    

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [scrOfX, scrOfY];
}

function g_cache_object(obj_id, obj_xmldoc) {
    // set array hash value
    oid_hash = "oid_"+obj_id;
    allobjs[oid_hash] = new Array();
    // cache place name
    place_name = "";
    if (obj_xmldoc.getElementsByTagName("place_name").item(0).firstChild) {
        place_name = obj_xmldoc.getElementsByTagName("place_name").item(0).firstChild.data;
    }
    allobjs[oid_hash]["place_name"] = place_name;
    // cache address
    address = "";
    if (obj_xmldoc.getElementsByTagName("address").item(0).firstChild) {
        address = obj_xmldoc.getElementsByTagName("address").item(0).firstChild.data;
    }
    allobjs[oid_hash]["address"] = address; 
    // cache footage
    sq_footage = "";
    if (obj_xmldoc.getElementsByTagName("sq_footage").item(0).firstChild) {
        sq_footage = obj_xmldoc.getElementsByTagName("sq_footage").item(0).firstChild.data;
    }
    allobjs[oid_hash]["sq_footage"] = sq_footage;    
    // cache land footage
    land_footage = "";
    if (obj_xmldoc.getElementsByTagName("land_footage").item(0).firstChild) {
        land_footage = obj_xmldoc.getElementsByTagName("land_footage").item(0).firstChild.data;
    }
    allobjs[oid_hash]["land_footage"] = land_footage;    
    // cache object type
    type = "";
    if (obj_xmldoc.getElementsByTagName("type").item(0).firstChild) {
        type = obj_xmldoc.getElementsByTagName("type").item(0).firstChild.data;
    }
    allobjs[oid_hash]["type"] = type;
    // cache area name 
    area_name = "";
    if (obj_xmldoc.getElementsByTagName("area_name").item(0).firstChild) {
        city_name = obj_xmldoc.getElementsByTagName("area_name").item(0).firstChild.data;
    }
    allobjs[oid_hash]["area_name"] = area_name;            
    // cache room number 
    room_no = "";
    if (obj_xmldoc.getElementsByTagName("room_no").item(0).firstChild) {
        room_no = obj_xmldoc.getElementsByTagName("room_no").item(0).firstChild.data;
    }
    allobjs[oid_hash]["room_no"] = room_no;
    // cache category 
    category = "";
    if (obj_xmldoc.getElementsByTagName("category").item(0).firstChild) {
        category = obj_xmldoc.getElementsByTagName("category").item(0).firstChild.data;
    }
    allobjs[oid_hash]["category"] = category;
    // cache price 
    price = "";
    if (obj_xmldoc.getElementsByTagName("price").item(0).firstChild) {
        price = obj_xmldoc.getElementsByTagName("price").item(0).firstChild.data;
    }
    allobjs[oid_hash]["price"] = price; 
    // cache agency name	
	ag_name = '';
	if ( obj_xmldoc.getElementsByTagName("ag_name").item(0) )
        if (obj_xmldoc.getElementsByTagName("ag_name").item(0).firstChild) {
            ag_name = obj_xmldoc.getElementsByTagName("ag_name").item(0).firstChild.data;
    }
    allobjs[oid_hash]["ag_name"] = ag_name; 	
    // cache latitudes
    latitude = obj_xmldoc.getElementsByTagName("latitude").item(0).firstChild.data;
    allobjs[oid_hash]["latitude"] = parseFloat(latitude); 
    longitude = obj_xmldoc.getElementsByTagName("longitude").item(0).firstChild.data;
    allobjs[oid_hash]["longitude"] = parseFloat(longitude);   
    // cache description
    if ( obj_xmldoc.getElementsByTagName("description").item(0) && obj_xmldoc.getElementsByTagName("description").item(0).firstChild )
        allobjs[oid_hash]["description_"+frm.elements["g_app[lang_code]"].value] = obj_xmldoc.getElementsByTagName("description").item(0).firstChild.data; 
    // cache main picture id
    if ( obj_xmldoc.getElementsByTagName("main_photo_id").item(0) && obj_xmldoc.getElementsByTagName("main_photo_id").item(0).firstChild )
        allobjs[oid_hash]["main_photo_id"] = obj_xmldoc.getElementsByTagName("main_photo_id").item(0).firstChild.data;     
}

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    num = Math.floor(num/100).toString();
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+'.'+
        num.substring(num.length-(4*i+3));
    return (num);
}

function g_show_objects_list_from_xml(xmlresult) {

    var g_objs_html = "";
    var g_objs = xmlresult.getElementsByTagName("object");
    //loop through objects
    for (i=0; i<g_objs.length; i++) {
        oid = g_objs[i].getElementsByTagName("id").item(0).firstChild.data;
        oid_hash = "oid_"+oid;
        if (!allobjs[oid_hash]) {  
            g_cache_object(oid, g_objs[i]);  
        }
        // object values
        tmp = js_tpls["obj_list"].replace(new RegExp("{PLACE_NAME}","i"), allobjs[oid_hash]["place_name"]);
        tmp = tmp.replace(new RegExp("{AREA_NAME}","i"), allobjs[oid_hash]["area_name"]);            
        tmp = tmp.replace(new RegExp("{ADDRESS}","i"), allobjs[oid_hash]["address"]);
        tmp = tmp.replace(new RegExp("{PRICE}","i"), allobjs[oid_hash]["price"] ? formatCurrency(allobjs[oid_hash]["price"])+" EUR" : "");
        foot_rpl = "";
        foot_delim = "";
        if (allobjs[oid_hash]["sq_footage"]) {
            foot_rpl+= allobjs[oid_hash]["sq_footage"]+"m<span class='superscript'>2</span>";
            foot_delim = "/";
        }
        if (allobjs[oid_hash]["land_footage"]) 
            foot_rpl+= foot_delim+allobjs[oid_hash]["land_footage"]+"m<span class='superscript'>2</span>";
        tmp = tmp.replace(new RegExp("{FOOTAGE}","i"), foot_rpl);
        //tmp = tmp.replace(new RegExp("{LAND_FOOTAGE}","i"), allobjs[oid_hash]["land_footage"]);
        // photo part
        tmp = tmp.replace(new RegExp("{PHOTO_SRC}","i"), allobjs[oid_hash]["main_photo_id"] ? WEB_ROOT_RELATIVE+"photo.php?type=1&oid="+oid+"&thumb=1&photoid="+allobjs[oid_hash]["main_photo_id"] : WEB_ROOT_RELATIVE+'photo.php?noimage=1');
        // show on map part
        tmp = tmp.replace(new RegExp("{SHOWONMAP}","i"), js_texts["o_show_on_map"]);
        tmp = tmp.replace(new RegExp("{SHOWDETAILS}","i"), js_texts["o_show_details"]);
		tmp = tmp.replace(new RegExp("{AGENCY_NAME}","i"), (allobjs[oid_hash]["ag_name"] ? "<br /><span class='ag_name'>"+allobjs[oid_hash]["ag_name"]+"</span>" : ""));
        tmp = tmp.replace(new RegExp("{OBJID}","ig"), oid);
        // categories stars
        cat_rpl = "";
        if (frm.elements['g_object[transaction_type]'].value == "2" && allobjs[oid_hash]["category"])
            cat_rpl = "<br /><img src='images/stars_"+allobjs[oid_hash]["category"]+".gif' style='margin-top:5px;'>";    
        tmp = tmp.replace(new RegExp("{CATEGORY}","i"), cat_rpl);
        // if top five ad, change css
        tfv = 0;
        if (g_objs[i].getElementsByTagName("top_order").item(0).firstChild) {
            tfv = parseInt(g_objs[i].getElementsByTagName("top_order").item(0).firstChild.data);
        }      
        if (tfv > 0) 
            tmp = tmp.replace(new RegExp("{TOP_FIVE_CLASS}","i"), " class='top_five_ad'");
        else
            tmp = tmp.replace(new RegExp("{TOP_FIVE_CLASS}","i"), "");
        g_objs_html+= tmp;
    }    
    // get paging data        
    total_items = xmlresult.getElementsByTagName("total").item(0).firstChild.data;
    start_page = frm.elements["g_object[start_page]"].value;
    page_size = frm.elements['g_object[page_size]'].value;
    // set main browse content + paging part
    if (total_items == 0) g_objs_html = "<tr><td valign='middle' align='center'><p style='margin:161px 0px'>"+js_texts['no_results']+"</p></td></tr>";
    document.getElementById("g_browse").innerHTML = "<table width='100%' border='0' cellspacing='0' cellpadding='0'>"+g_objs_html+"</table>";
    if (total_items > 0) {
        g_write_navigation( parseInt(start_page), parseInt(total_items), parseInt(page_size) );
    } else {
        g_empty_nav();
    }
    g_write_sort_navigation( parseInt(total_items) );
    // set breadcrumb
    bread_span = document.getElementById("js_bread_crumb");
    if (frm.elements["g_object[area_id]"].value > 0)
        bread_span_html = "<a href='javascript:g_show_region("+frm.elements["g_object[region_id]"].value+")'>"+
                            regions[frm.elements["g_object[region_id]"].value]+
                          "</a> / ";
    else
        bread_span_html = regions[frm.elements["g_object[region_id]"].value];
    if (frm.elements["g_object[area_id]"].value > 0)
        if (frm.elements["g_object[place_id]"].value > 0)
            bread_span_html+= "<a href='javascript:g_show_area("+frm.elements["g_object[area_id]"].value+")'>"+
                                areas[frm.elements["g_object[area_id]"].value]+
                              "</a>";
        else
            bread_span_html+= areas[frm.elements["g_object[area_id]"].value];
    if (frm.elements["g_object[place_id]"].value > 0) {
        bread_span_html+= " / "+places[frm.elements["g_object[place_id]"].value];
    }
    bread_span.innerHTML = bread_span_html;
}


//navigation func

function g_show_area(area_id) {
    frm.elements["g_object[place_id]"].value = 0;
    g_show_results(1, 1); // new search
}

function g_show_region(region_id) {
    frm.elements["g_object[place_id]"].value = 0;
    frm.elements["g_object[area_id]"].value = 0;
    g_show_results(1, 1); // new search
}

function g_sort_results(order_rule) {
    frm.elements["g_object[order_rule]"].value = order_rule;
    g_show_results(0, 1); // reset page on sort action, leave all objects on map
}  

function g_modify_page_size(page_size) {
    frm.elements["g_object[page_size]"].value = page_size;
    g_show_results(0, 1); // reset page on sort action, leave all objects on map
}    

function g_write_sort_navigation(total_items) {
    ret = "";
    if (total_items > 0) {
        ret+= js_texts["sort_title"]+" <select onchange='g_sort_results(this.options[this.selectedIndex].value)' class='browse' style='margin-right:5px;'>";
        curr_order_rule = frm.elements["g_object[order_rule]"].value;
        selected = "";
        for (opt_value in js_order_select) {
            if (opt_value == curr_order_rule) selected = " selected";
            else selected = "";
            ret+= "<option value='"+opt_value+"'"+selected+">"+js_texts[js_order_select[opt_value]]+"</option>";    
        }
        ret+= "</select>";
    }
    document.getElementById("res_sort_inner").innerHTML = ret;
}        

function g_write_navigation(start_item, total_items, page_size) {
    if(total_items < page_size) {
        pages_no = 1;
    } else {
        pages_no = Math.ceil(total_items / page_size);
    }
    total_pages = pages_no;
    
    if(start_item == 0) {
        curr_page = 1;
    } else if (start_item == page_size) {
        curr_page = 2;
    } else {
        curr_page = Math.ceil((start_item + 1) / page_size);
    }
    current_page = curr_page;
    
    html_str = "<table cellspacing='0' cellpadding='0'><tr>";
    if (total_items > page_size)
        middle_nav = "<td>"+js_texts['nav_page']+"</td><td>"+write_pages_jumper(total_pages, page_size, current_page)+"</td><td>"+js_texts['nav_page_from']+" "+pages_no+"</td>";
    else
        middle_nav = "<td>"+js_texts['nav_page']+" "+current_page+" "+js_texts['nav_page_from']+" "+pages_no+"</td>";
    prev_nav   = "";
    next_nav = "";
    if(total_items > page_size) {
        if(start_item >= page_size) {
            prev_nav+= "<td><a href='javascript:g_navigate(0)' title='"+js_texts['nav_first_page']+"'><img src='images/bt_browse_first.gif' border='0' align='middle' style='margin: 3px 4px 0 7px;' /></a></td>";
            prev_nav+= "<td><a href='javascript:g_navigate("+(start_item - page_size)+")' title='"+js_texts['nav_prev_page']+"'><img src='images/bt_browse_prev.gif' border='0' align='middle' style='margin: 3px 1px 0 0;' /></a></td>";
            prev_nav+= "<td style='padding-right:5px;'><a href='javascript:g_navigate("+(start_item - page_size)+")'>"+js_texts['nav_prev']+"</a></td>";
        }
      if((start_item + page_size) < total_items) {
       	if(total_items % page_size != 0) {
       	    last_page = total_items - (Math.ceil(total_items % page_size));
       	} else {
       	    last_page = total_items - page_size;
       	}
       	next_nav+= "<td style='padding-left:5px;'><a href='javascript:g_navigate("+(start_item + page_size)+")'>"+js_texts['nav_next']+"</a></td>";
       	next_nav+= "<td><a href='javascript:g_navigate("+(start_item + page_size)+")' title='"+js_texts['nav_next_page']+"'><img src='images/bt_browse_next.gif' border='0' align='middle' style='margin: 3px 0 0 1px;' /></a></td>";
        next_nav+= "<td><a href='javascript:g_navigate("+last_page+")' title='"+js_texts['nav_last_page']+"'><img src='images/bt_browse_last.gif' border='0' align='middle' style='margin: 3px 7px 0 4px;' /></a></td>";
       }
     }
    if (prev_nav == '') prev_nav = "<td>&nbsp;&nbsp;</td>";
    html_str+= prev_nav + middle_nav + next_nav;
    html_str+= "</tr></table>";
    document.getElementById("g_nav_top").innerHTML = html_str;
    document.getElementById("g_nav_bottom").innerHTML = html_str;
}    

function g_empty_nav() {
    document.getElementById("g_nav_top").innerHTML = "";
    document.getElementById("g_nav_bottom").innerHTML = "";    
}

function write_pages_jumper(total_pages, page_size, current_page) {
    ret = "<select onchange='g_navigate(this.options[this.selectedIndex].value)' class='browse' style='margin-left:3px;margin-right:3px;'>\n";
    for(x=0; x<total_pages; x++) {
        if(x > 0) jump = x * page_size;
        else jump = 0;
        if( (x+1) == current_page) selected = " selected";
        else selected = "";
        ret+= "<option value='"+jump+"'"+selected+">"+(x+1)+"</option>\n";
    }
    ret+= "</select>\n";
    return ret;
}


function g_navigate(next_start_page) {
    frm.elements["g_object[start_page]"].value = next_start_page;
    g_show_results(0, 0);
} 

// end navigation func

// page func

function open_window(url, height, width) {
    window.open(url, '', "toolbar=no,status=1,resizable=yes,scrollbars=yes,height="+height+",width="+width);
}

function resize() {
    div_g_map = document.getElementById("g_map");
    div_g_browse = document.getElementById("g_browse");
    td_map_wrap = document.getElementById("g_map_wrapper");
    isWinIE = ((navigator.userAgent.indexOf("Win") != -1 ) && (navigator.userAgent.indexOf("MSIE") != -1 ));
    if (isWinIE) {
        my_body_h = document.documentElement.clientHeight;
        my_body_w = document.documentElement.clientWidth;
        body_elem_h = document.body.offsetHeight;
    } else {
        my_body_h = window.innerHeight;
        my_body_w = window.innerWidth;
        body_elem_h = document.body.offsetHeight;
    }
    min_height = my_body_h - 468 + 100;
    map_width = my_body_w - 360;
    if (isWinIE) {
    //    map_width = my_body_w - 392; ??? wtf?
    } else {
        /* Fix for scrollbar issue in Firefox */
        if (body_elem_h > my_body_h)
            map_width = map_width - 16;
    }
    div_g_map.style.height = (min_height +113+99)+"px";
    td_map_wrap.style.width = map_width+"px";
    div_g_map.style.width = map_width+"px";
}

// end page func

// street autocomplete

function g_show_street_on_map() {
	coord = g_get_street_coordinates(); // requires street_acmpl.js
	if (coord['lat'] && coord['lon']) {
	    lat = parseFloat(coord['lat']);
	    lng = parseFloat(coord['lon']);
	    zoom = parseInt(coord['zoom']);
	    map.setCenter(new GLatLng(lat, lng), zoom, get_map_type());	    
        street_marker = g_create_street_marker(lat, lng, frm.elements['street_search'].value);
		map.addOverlay(street_marker);	
        street_marker.openInfoWindowHtml(js_texts['street_name']+"<br /><b>"+frm.elements['street_search'].value+"</b>");
	} else {
		// TODO: handle error when getting street coordinates
	}
}

function g_create_street_marker(lat, lng, street_name) {
	var street_marker = new GMarker( new GLatLng(lat, lng), 
                                     g_create_icon(IMAGES_DIR, "gmap_info.png") );
    street_marker.tooltip = "<div class='obj_info_tooltip'>"+js_texts['street_name']+" ";
    street_marker.tooltip+= street_name+"</div>";
    GEvent.addListener(street_marker, "mouseover", function() {
        g_show_tool_tip(street_marker);
    });
    GEvent.addListener(street_marker, "mouseout", function() {
        g_hide_tool_tip(street_marker);
    });         
    return street_marker;
}

function getEvent(event) {
   return (event ? event : window.event);
}

function handleKeyPressOnStreetAutoCmplt(event) {
    e = getEvent(event);
    kc = e["keyCode"];
    if (kc == 13) { // enter
       if (STRTACMPLT['g_street_id'] > 0) { // this means that some street was autoselected
           g_show_street_on_map();
       }
    }
}

function reg_event_listener_for_street_input() {
    if (document.addEventListener) { 
        frm.elements["street_search"].addEventListener("keyup", handleKeyPressOnStreetAutoCmplt, false);
    } else {
        frm.elements["street_search"].onkeyup = handleKeyPressOnStreetAutoCmplt;   
    }
}

// end street autocomplete
