var currencysymbol_js = Array();
currencysymbol_js[1] = "\u00a3";
currencysymbol_js[2] = "\u20ac";
currencysymbol_js[3] = "CHF ";

var subnav_order_labels = Array();
subnav_order_labels[1] = "Order by Price";
subnav_order_labels[2] = "Order by sq ft";
subnav_order_labels[3] = "Order by no. of bedrooms";

var property_subnav_labels = Array();
property_subnav_labels[1] = "Details";
property_subnav_labels[2] = "Images";
property_subnav_labels[3] = "Floorplan";
property_subnav_labels[4] = "Map";
property_subnav_labels[5] = "Brochure";

var selected_sort_field = 1;
var sort_fields = Array();
sort_fields[1] = "price_gbp";
sort_fields[2] = "floorarea_int";
sort_fields[3] = "bedrooms";
sort_fields[4] = "title";

results_array = Array();
propertydetails_array = Array();
images_array = Array();

function submenu_toggle(id, action) {
	if (action == 1) {
	  for (i=1;i<=8;i++) {
	   if (i==id) {
	    document.getElementById('menu'+i).style.display = 'block';
	    document.getElementById('menu_item'+i).style.background = '#02024b';
	   } else {
	    document.getElementById('menu'+i).style.display = 'none';
	    document.getElementById('menu_item'+i).style.background = 'none';
	   }
	  }
	  
	} else if (action == 0) {
	  document.getElementById('menu'+id).style.display = 'none';
	  document.getElementById('menu_item'+id).style.background = 'none';
	}
}

function property_page(propertyid, page) {
        for (i=1;i<=4;i++) {
         if (i==page) {
          subnav_item=document.getElementById('property_subnav'+i);
          subnav_item.className = "subnav_item_selected";
          clear_children(subnav_item);
          var textNode = document.createTextNode(property_subnav_labels[i]);
          subnav_item.appendChild(textNode);
          document.getElementById('propertydetails'+i).style.display = 'block';
          if (page==4) {
            initialize(document.getElementById('postcode').value);
          }
         } else {
          subnav_item=document.getElementById('property_subnav'+i);
          if (subnav_item.className != "subnav_item_disabled") { subnav_item.className = "subnav_item"; }
          clear_children(subnav_item);
          var subnav_item_link = document.createElement('a');
          subnav_item_link.setAttribute('href','javascript:property_page('+propertyid+','+i+');');
          subnav_item_link.appendChild(document.createTextNode(property_subnav_labels[i]));
          subnav_item.appendChild(subnav_item_link);
          document.getElementById('propertydetails'+i).style.display = 'none';
         }
        }
}

function results_order(order) {
	// alert("results_order: "+results_array.length);
        for (i=1;i<=3;i++) {
         if (i==order) {
          subnav_item=document.getElementById('subnav'+i);
          subnav_item.className = "subnav_item_selected";
          clear_children(subnav_item);
          var textNode = document.createTextNode(subnav_order_labels[i]);
          subnav_item.appendChild(textNode);
         } else {
          subnav_item=document.getElementById('subnav'+i);
          subnav_item.className = "subnav_item";
          clear_children(subnav_item);
          var subnav_item_link = document.createElement('a');
          subnav_item_link.setAttribute('href','javascript:results_order('+i+');');
          subnav_item_link.appendChild(document.createTextNode(subnav_order_labels[i]));
          subnav_item.appendChild(subnav_item_link);
          }
        }
        var properties = document.getElementById('properties');
        clear_children(properties);

        var loading_panel = document.createElement('div');
        loading_panel.setAttribute('class','loading_panel');
        loading_panel.setAttribute('className','loading_panel');
        properties.appendChild(loading_panel);

        var loading_icon = document.createElement('img');
        loading_icon.setAttribute('src','/images/loader_circle.gif');
        loading_icon.setAttribute('alt','Reordering ...');
        loading_icon.setAttribute('width','16');
        loading_icon.setAttribute('height','16');
        loading_icon.setAttribute('border','0');
        loading_panel.appendChild(loading_icon);
        var linebreak = document.createElement('br');
        loading_panel.appendChild(linebreak);
        var textNode = document.createTextNode("Reordering ...");
        loading_panel.appendChild(textNode);
        
        document.getElementById('order').value = order;

        // alert(results_array.length);
        if (results_array.length == 0) {
          run_search(1);
        } else {
          selected_sort_field = order;
          results_array.sort(array_sort);
	  // alert(results_array[0]['url']);
          setTimeout('refresh_results(results_array.length);', 500);
        }
        
}

function run_search(no_keyword) {

   var site=document.getElementById('site').value;
   var category=document.getElementById('category').value;
   var floorarea_from=document.getElementById('floorarea_from').value;
   var price_from=document.getElementById('price_from').value;
   var price_to=document.getElementById('price_to').value;
   var bedrooms_from=document.getElementById('bedrooms_from').value;
   var keywords=document.getElementById('search_keywords').value;
   var order=document.getElementById('order').value;

   var parameters = 'site='+site+'&category='+category+'&order='+order+'&floorarea_from='+floorarea_from+'&price_from='+price_from+'&price_to='+price_to+'&bedrooms_from='+bedrooms_from;
   if (no_keyword != 1) {

    var search_statusarea=document.getElementById('sidebar_right_top');
    clear_children(search_statusarea);  
    var textNode = document.createTextNode("Searching ");
    search_statusarea.appendChild(textNode);
    var searching_icon = document.createElement('img');
    searching_icon.setAttribute('src','/images/loader_pulse.gif');
    searching_icon.setAttribute('alt','Reordering ...');
    searching_icon.setAttribute('width','16');
    searching_icon.setAttribute('height','11');
    searching_icon.setAttribute('border','0');
    search_statusarea.appendChild(searching_icon);

    if ((keywords != "") && (keywords != undefined)) {
     parameters += '&keywords='+keywords;
    }

   }

   new Ajax.Request('/search.php',{method: 'post', postBody: parameters, asynchronous: true, onSuccess: function(transport){
        var response = transport.responseText || "no response text";
        xmldoc = parse_xml(response);

        // alert("hello");
        var no_of_results = xmldoc.getElementsByTagName('no_of_results')[0].childNodes[0].nodeValue;
        // alert("No of results: "+no_of_results);

        for (i=0;i<no_of_results;i++) {
          // alert(i);
          
          var propertyitem = xmldoc.getElementsByTagName('propertyitem')[i];
          results_array[i] = new Array();

          results_array[i]['url'] = propertyitem.getElementsByTagName('url')[0].childNodes[0].nodeValue;
          var url = propertyitem.getElementsByTagName('url')[0].childNodes[0].nodeValue;
          // alert(i+": "+url);

          results_array[i]['title'] = convert_htmlentities(propertyitem.getElementsByTagName('title')[0].childNodes[0].nodeValue);
          // alert(i+": flag 170");
          results_array[i]['price'] = currencysymbol_js[propertyitem.getElementsByTagName('currency')[0].childNodes[0].nodeValue]+propertyitem.getElementsByTagName('price')[0].childNodes[0].nodeValue;
          results_array[i]['price_gbp'] = propertyitem.getElementsByTagName('price_gbp')[0].childNodes[0].nodeValue;
          results_array[i]['status'] = propertyitem.getElementsByTagName('status')[0].childNodes[0].nodeValue;
          results_array[i]['tenure'] = propertyitem.getElementsByTagName('tenure')[0].childNodes[0].nodeValue;
          results_array[i]['bedrooms'] = propertyitem.getElementsByTagName('bedrooms')[0].childNodes[0].nodeValue;
          results_array[i]['reception'] = propertyitem.getElementsByTagName('reception')[0].childNodes[0].nodeValue;
          results_array[i]['bathrooms'] = propertyitem.getElementsByTagName('bathrooms')[0].childNodes[0].nodeValue;

          if (propertyitem.getElementsByTagName('summarydesc')[0] != null) {
           results_array[i]['summarydesc'] = convert_htmlentities(propertyitem.getElementsByTagName('summarydesc')[0].childNodes[0].nodeValue);
          } else {
           results_array[i]['summarydesc'] = "";
          }

          // alert(i+": flag 185");
          results_array[i]['floorarea_int'] = propertyitem.getElementsByTagName('floorarea_int')[0].childNodes[0].nodeValue;
          if (propertyitem.getElementsByTagName('floorarea')[0] != null) {
           results_array[i]['floorarea'] = propertyitem.getElementsByTagName('floorarea')[0].childNodes[0].nodeValue;
          } else {
           results_array[i]['floorarea'] = "";
          }

          if (propertyitem.getElementsByTagName('imagesrc')[0] != null) {
           results_array[i]['imagesrc'] = propertyitem.getElementsByTagName('imagesrc')[0].childNodes[0].nodeValue;
           results_array[i]['image_width'] = propertyitem.getElementsByTagName('image_width')[0].childNodes[0].nodeValue;
           results_array[i]['image_height'] = propertyitem.getElementsByTagName('image_height')[0].childNodes[0].nodeValue;
          } else {
           results_array[i]['imagesrc'] = "";
          }

        }
	// alert("run_search: "+results_array.length);

        var properties = document.getElementById('properties');
        clear_children(properties);

        var loading_panel = document.createElement('div');
        loading_panel.setAttribute('class','loading_panel');
        loading_panel.setAttribute('className','loading_panel');
        properties.appendChild(loading_panel);

        var loading_icon = document.createElement('img');
        loading_icon.setAttribute('src','/images/loader_circle.gif');
        loading_icon.setAttribute('alt','Loading results ...');
        loading_icon.setAttribute('width','16');
        loading_icon.setAttribute('height','16');
        loading_icon.setAttribute('border','0');
        loading_panel.appendChild(loading_icon);
        var linebreak = document.createElement('br');
        loading_panel.appendChild(linebreak);
        var textNode = document.createTextNode("Loading results ...");
        loading_panel.appendChild(textNode);
        
        document.getElementById('order').value = order;

        // alert(results_array.length);
        setTimeout('refresh_results('+no_of_results+');', 500);

     },
     onFailure: function(){ alert('ERROR: Search failed.') }
    });

}

function refresh_results(no_of_results) {

	// alert("refresh results: "+results_array.length);
        var search_statusarea=document.getElementById('sidebar_right_top');
        search_statusarea.innerHTML = "<b>"+no_of_results+"</b> results";

        var properties = document.getElementById('properties');
        clear_children(properties);

        for (i=0;i<no_of_results;i++) {
          // alert(i);

          var propertyitem_box = document.createElement('div');
          propertyitem_box.setAttribute('class','propertyitem');
          propertyitem_box.setAttribute('className','propertyitem');
          properties.appendChild(propertyitem_box);

          var propertyitem_imagebox = document.createElement('div');
          propertyitem_imagebox.setAttribute('class','propertyitem_imagebox');
          propertyitem_imagebox.setAttribute('className','propertyitem_imagebox');
          propertyitem_box.appendChild(propertyitem_imagebox);

          var propertyitem_image = document.createElement('div');
          propertyitem_image.setAttribute('class','propertyitem_image');
          propertyitem_image.setAttribute('className','propertyitem_image');
          propertyitem_image.setAttribute('style','background: url(/thumbnails/'+results_array[i]['imagesrc']+'); width: '+results_array[i]['image_width']+'px; height: '+results_array[i]['image_height']+'px;');
          propertyitem_image.style.background = 'url(/thumbnails/'+results_array[i]['imagesrc']+')';
          propertyitem_image.style.width = results_array[i]['image_width']+'px';
          // alert(results_array[i]['image_width']);
          propertyitem_image.style.height = results_array[i]['image_height']+'px';
          propertyitem_imagebox.appendChild(propertyitem_image);

          if (results_array[i]['status']=="Sold") {
            var sold_redband = document.createElement('img');
            sold_redband.setAttribute('src','/images/sold.png');
            sold_redband.setAttribute('alt','SOLD');
            sold_redband.setAttribute('width','66');
            sold_redband.setAttribute('height','66');
            sold_redband.setAttribute('border','0');
            propertyitem_image.appendChild(sold_redband);
          }

          var propertyitem_summary = document.createElement('div');
          propertyitem_summary.setAttribute('class','propertyitem_summary');
          propertyitem_summary.setAttribute('className','propertyitem_summary');
          propertyitem_box.appendChild(propertyitem_summary);

          var propertyitem_summary_p = document.createElement('p');
          propertyitem_summary.appendChild(propertyitem_summary_p);

          var propertyitem_title_link = document.createElement('a');
          propertyitem_title_link.setAttribute('href','/index.php/'+results_array[i]['url']);
          propertyitem_title_link.setAttribute('class','propertyitem_mainlink');
          propertyitem_title_link.setAttribute('className','propertyitem_mainlink');
          propertyitem_title_link.appendChild(document.createTextNode(results_array[i]['title']));
          propertyitem_summary_p.appendChild(propertyitem_title_link);

          var rooms="";

          if (results_array[i]['bedrooms'] > 0) {
           rooms+=results_array[i]['bedrooms']+" Bedroom";
           if (results_array[i]['bedrooms'] > 1) { rooms+="s"; }
          }

          if (results_array[i]['reception'] > 0) {
           if (rooms != "") { rooms+=", "; }
           rooms+=results_array[i]['reception']+" Reception Room";
           if (results_array[i]['reception'] > 1) { rooms+="s"; }
          }

          if (results_array[i]['bathrooms'] > 0) {
           if (rooms != "") { rooms+=", "; }
           rooms+=results_array[i]['bathrooms']+" Bathroom";
           if (results_array[i]['bathrooms'] > 1) { rooms+="s"; }
          }

          if (rooms != "") {

            var linebreak = document.createElement('br');
            propertyitem_summary_p.appendChild(linebreak);

            var textNode = document.createTextNode(rooms);
            propertyitem_summary_p.appendChild(textNode);

          }

          var propertyitem_summary_p = document.createElement('p');
          propertyitem_summary.appendChild(propertyitem_summary_p);

          if (results_array[i]['summarydesc'] != "") {
            var textNode = document.createTextNode(results_array[i]['summarydesc']);
            propertyitem_summary_p.appendChild(textNode);
          }

          var propertyitem_summary_p = document.createElement('p');
          propertyitem_summary.appendChild(propertyitem_summary_p);

          var propertyitem_details_link = document.createElement('a');
          propertyitem_details_link.setAttribute('href','/index.php/'+results_array[i]['url']);
          
          propertyitem_details_link.appendChild(document.createTextNode("› full details"));
          propertyitem_summary_p.appendChild(propertyitem_details_link);

          var propertyitem_sidebar = document.createElement('div');
          propertyitem_sidebar.setAttribute('class','propertyitem_sidebar');
          propertyitem_sidebar.setAttribute('className','propertyitem_sidebar');
          propertyitem_box.appendChild(propertyitem_sidebar);

          var propertyitem_sidebar_p = document.createElement('p');
          propertyitem_sidebar.appendChild(propertyitem_sidebar_p);

          var propertyitem_sidebar_bold = document.createElement('b');
          propertyitem_sidebar_p.appendChild(propertyitem_sidebar_bold);

          var textNode = document.createTextNode(results_array[i]['price']);
          propertyitem_sidebar_bold.appendChild(textNode);

          var linebreak = document.createElement('br');
          propertyitem_sidebar_p.appendChild(linebreak);

          var textNode = document.createTextNode(results_array[i]['status']);
          propertyitem_sidebar_p.appendChild(textNode);

          var propertyitem_sidebar_p = document.createElement('p');
          propertyitem_sidebar.appendChild(propertyitem_sidebar_p);

          if (results_array[i]['floorarea'] != "") {
            var textNode = document.createTextNode(results_array[i]['floorarea']);
            propertyitem_sidebar_p.appendChild(textNode);

            var linebreak = document.createElement('br');
            propertyitem_sidebar_p.appendChild(linebreak);
          }

          var textNode = document.createTextNode(results_array[i]['tenure']);
          propertyitem_sidebar_p.appendChild(textNode);

          var div_clear = document.createElement('div');
          div_clear.setAttribute('class','clear');
          div_clear.setAttribute('className','clear');
          propertyitem_box.appendChild(div_clear);
          // alert(i+": Done.");

        }
}

function image_browser(id, step) {

  if (id==1) {
   var imageno=selectedimage+step;
   if (imageno==images.length) { imageno=0; }
   if (imageno==-1) { imageno=(images.length-1); }
   selectedimage = imageno;
   document.getElementById('imagebrowser_header').innerHTML = "Image "+(imageno+1)+" of "+images.length;
   document.getElementById('imagebrowser_image').src = '/propertyimages/'+images[imageno]['imagesrc'];
   if (images[imageno]['image_width'] > 500) {
     document.getElementById('imagebrowser_image').width = 500;
   } else {
     document.getElementById('imagebrowser_image').width = images[imageno]['image_width'];
     document.getElementById('imagebrowser_image').height = images[imageno]['image_height'];
   }
   document.getElementById('imagebrowser_image').alt = images[imageno]['label'];
   document.getElementById('image_caption').innerHTML = images[imageno]['label'];
  } else if (id==2) {
   var floorplanno=selectedfloorplan+step;
   if (floorplanno==floorplans.length) { floorplanno=0; }
   if (floorplanno==-1) { floorplanno=(floorplans.length-1); }
   selectedfloorplan = floorplanno;
   document.getElementById('floorplanbrowser_header').innerHTML = "floorplan "+(floorplanno+1)+" of "+floorplans.length;
   document.getElementById('floorplanbrowser_image').src = '/propertyimages/'+floorplans[floorplanno]['imagesrc'];
   if (floorplans[floorplanno]['image_width'] > 500) {
     document.getElementById('floorplanbrowser_image').width = 500;
   } else {
     document.getElementById('floorplanbrowser_image').width = floorplans[floorplanno]['image_width'];
     document.getElementById('floorplanbrowser_image').height = floorplans[floorplanno]['image_height'];
   }
   document.getElementById('floorplanbrowser_image').alt = floorplans[floorplanno]['label'];
   document.getElementById('floorplan_caption').innerHTML = floorplans[floorplanno]['label'];
  }

}

function loadXMLDoc(url) {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
	}
}


function parse_xml(xml_string) {

  if (window.DOMParser) {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(xml_string,"text/xml");
  } else {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(xml_string); 
  }
  return xmlDoc;

}

function clear_children(obj) {

 if (obj.hasChildNodes()) {
    while (obj.childNodes.length >= 1) {
        obj.removeChild(obj.firstChild);       
    }
 }

}

function array_sort(a,b){

  if ((a[sort_fields[selected_sort_field]]-b[sort_fields[selected_sort_field]])==0) {
    for (i=1;i<=(sort_fields.length-1);i++) {
      if (i!=selected_sort_field) {
        if ((a[sort_fields[i]]-b[sort_fields[i]])!=0) {
          return a[sort_fields[i]]-b[sort_fields[i]];
        }
      }
    }
    return 0;
  } else {
    return a[sort_fields[selected_sort_field]]-b[sort_fields[selected_sort_field]];
  }

//  if(a > b)
//    return 1;
//  if(a < b)
//    return -1;
//  return 0;

}

function convert_htmlentities(str) {

  var htmlentities_converter = document.createElement("textarea");
  htmlentities_converter.innerHTML = str;
  var str_converted = htmlentities_converter.value;
  return str_converted;

}

function initialize(postcode) {
      postcode=postcode+", UK";
      geocoder = new GClientGeocoder();
      if (geocoder) {
        geocoder.getLatLng(
          postcode,
          function(point) {
            if (!point) {
              alert(point + " not found");
            } else {
              var map = new GMap2(document.getElementById("map_canvas"));
              map.setCenter(point, 13);
              var marker = new GMarker(point);
              map.addOverlay(marker);
              map.addControl(new GLargeMapControl3D());
              // marker.openInfoWindowHtml(postcode);
            }
          }
        );
      }
}
