function sortList(box)
{
  var order = new Array();
	
  for(var i=0; i<box.options.length; i++)
	  order[i] = property_types_form_type_order[box.options[i].value];
    
  order.sort(compareNum);
  
  for(var i=0; i<order.length; i++)
  {
  	box.options[i].value = property_types_form_type_value[order[i]];
    box.options[i].text = property_types_form_type_name[order[i]];
  }
}

function sortListValue(box)
{
  var order = new Array();
	var text = new Array();
	
  for(var i=0; i<box.options.length; i++)
	{
		text[box.options[i].value] = box.options[i].text;
	  order[i] = box.options[i].value;
	}
    
  order.sort();
  
  for(var i=0; i<order.length; i++)
  {
  	box.options[i].value = order[i];
    box.options[i].text = text[order[i]];
  }
}

function sortListText(box)
{
  var order = new Array();
	var values = new Array();
	
  for(var i=0; i<box.options.length; i++)
	{
		values[box.options[i].text] = box.options[i].value;
	  order[i] = box.options[i].text;
	}
    
  order.sort();
  
  for(var i=0; i<order.length; i++)
  {
  	box.options[i].value = values[order[i]];
    box.options[i].text = order[i];
  }
}

function notInList(value, l)
{
	for(var x=0; x<l.length; x++)
  	if(l.options[x].value == value)
    	return false;
  return true;
}

function compareNum(a,b)
{
	return a-b
}

function setSize(list1,list2)
{
	list1.size = getSize(list1);
	if(typeof list2 != 'undefined')
		list2.size = getSize(list2);
}

function selectNone(list1,list2)
{
	list1.selectedIndex = -1;
	list2.selectedIndex = -1;
}

function getSize(list)
{
	var len = list.childNodes.length;
	var nsLen = 0;
	//nodeType returns 1 for elements
	for(i=0; i<len; i++)
		if(list.childNodes.item(i).nodeType==1)
			nsLen++;
      
	return nsLen ? nsLen : 1;
}

function selectAllPropertyTypes()
{
  for(ptfiq in property_types_form_id)
  	if(is_numeric(ptfiq))
    {
    	var form = getObject("property_types_"+property_types_form_id[ptfiq]);
      for(j=0; j<form.options.length; j++)
      	form.options[j].selected = true;
    }
}

function updateSelectedPropertyTypeList()
{
	var property_types = getObject("property_types");
  // updates the 'selected variable with the status of each option
  for(i=0; i<property_types.options.length; i++)
  {
   	property_form_types[property_types.options[i].value]['selected'] = property_types.options[i].selected;
  }
}

function populateCounties(s, c, status, force, showCounties)
{
	var state = s.options[s.selectedIndex].value;
	var box = document.getElementById(c);
  populateSelect(box, state, "/populate/counties.php?state="+state+"&status="+status, force, showCounties);
}

function populateCities(s, c, cc, force, extra, forceTitle)
{
	var state = s.options[s.selectedIndex].value;
  var county = c.options[c.selectedIndex].value;
  var forceTitle = forceTitle ? forceTitle : "-- Choose City --";
  var nonForceTitle = "-- Entire County --";
	var box = document.getElementById(cc);
  populateSelect(box, county, "/populate/cities.php?state="+state+"&county="+county+"&"+extra, force, "yes", forceTitle, nonForceTitle);
}

function populateCitiesFromZip(z, cc, force, extra)
{
	var zip = z.value;
  var forceTitle = "-- Choose City --";
	var box = document.getElementById(cc);
  populateSelect(box, zip, "/populate/cities.php?zip="+zip+"&"+extra, force, "yes", forceTitle);
}

function populateBrokenDownCounties(s, c)
{
	var state = s.options[s.selectedIndex].value;
	var box = document.getElementById(c);
  populateSelect(box, state, "/populate/counties.php?state="+state+"&status=brokendown", "no", "yes");
}

function populateUserCounties(s, c, username, forceCounty, showCounties)
{
	var state = s.options[s.selectedIndex].value;
	var box = document.getElementById(c);
	populateSelect(box, state, "/populate/counties.php?state="+state+"&status=user&username="+username, forceCounty ? forceCounty : "yes", showCounties ? showCounties : "yes");
}

function populateContactCounties(s, c, username)
{
	var state = s.options[s.selectedIndex].value;
	var box = document.getElementById(c);
	populateSelect(box, state, "/populate/counties.php?state="+state+"&status=contact&username="+username, "yes", "yes");
}

function populateSelect(box, state, datafile, forceCounty, showCounties, forceTitle, nonForceTitle)
{
	//Clear the county box out
  for(i=box.options.length-1; i>-1; i--)
	  box.options[i] = null;
	
  box.options[0] = new Option("       Loading...       ", "");
  box.disabled = 'disabled';  
  
  if(document.all)
  {
    objXml = new ActiveXObject("Microsoft.XMLHTTP");
    objXml.open("GET", datafile, true);
    objXml.onreadystatechange=function()
    {
    	if (objXml.readyState==4)
      {
      	states = objXml.responseText;
      	populateSelectAction(box, state, states, forceCounty, showCounties, forceTitle, nonForceTitle);
  		}
    }
    objXml.send(null);
  }
  else
  {
  	if (document.getElementById)
    {
    	objXml = new XMLHttpRequest();
    	objXml.open("GET",datafile,false);
    	objXml.send(null);
      
      states = objXml.responseText;
     	populateSelectAction(box, state, states, forceCounty, showCounties, forceTitle, nonForceTitle);
    }
  }
}

function populateSelectAction(box, state, states, forceCounty, showCounties, forceTitle, nonForceTitle)
{
	box.disabled = false;
  
  //Clear the county box out
  for(i=box.options.length-1; i>-1; i--)
	  box.options[i] = null;
  
	// repopulate
	if(forceCounty == "yes" || state == '')
		o = forceTitle ? forceTitle : "-- Select County --";
	else
		o = nonForceTitle ? nonForceTitle : "-- Entire State --";
	
  box.options[0] = new Option(o,"");
  if(states != "none")
  {
	 	state_array = states.split("|");
    if(showCounties == "yes")
    	for(i=0; i<state_array.length; i++)
      {
      	if(state_array[i].match(/::/))
        {
        	sam = state_array[i].split("::");
          text = sam[0];
          value = sam[1];
        }
        else
        {
        	text = state_array[i];
          value = state_array[i];
        }
        
      	if(value)
     			box.options[i+1] = new Option(text,value);
  		}
  }
}function populateOrders(c, p, plan_only, orderid, oncomplete)
{
  var clientid = getObject(c).value;
  var order_list = getObject(p);
  var datafile = "/populate/orders.php?clientid="+clientid+"&user_only=1&plan_only="+plan_only;
	//Clear the county box out
  for(i=order_list.options.length-1; i>-1; i--)
	  order_list.options[i] = null;
	
  order_list.options[0] = new Option("       Loading...       ", "");
  order_list.disabled = 'disabled';  
  
  if(document.all)
  {
    objXmlP = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlP.open("GET", datafile, true);
    objXmlP.onreadystatechange=function()
    {
    	if (objXmlP.readyState==4)
      {
      	orders = objXmlP.responseText;
      	populateOrdersAction(orders, order_list, orderid, oncomplete);
  		}
    }
    objXmlP.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlP = new XMLHttpRequest();
    	objXmlP.open("GET", datafile, false);
    	objXmlP.send(null);
      
      orders = objXmlP.responseText;
     	populateOrdersAction(orders, order_list, orderid, oncomplete);
    }
  }	
}

function populateOrdersAction(orders, order_list, sel_orderid, oncomplete)
{
	order_list.disabled = false;
	// repopulate
  if(orders.length > 0)
  {
  	order_list.options[0] = new Option("-- Select Order --","");
	 	orders_array = orders.split("|");
   	for(i=0; i<orders_array.length; i++)
     	if(orders_array[i])
      {
      	p = orders_array[i].split("~~");
   			order_list.options[i+1] = new Option("#"+p[0]+" - "+p[1]+", "+p[2]+", "+p[4]+" "+p[5], p[0]);
        if(p[0] == sel_orderid)
        	order_list.options[i+1].selected='selected';
      }    
  }
  else
  	order_list.options[0] = new Option("-- No Orders --","");
  eval(oncomplete);
}

function populateClientOrders(view_all)
{
	// poll when we're loaded to start loading each of the order options
	pollPopulateClientOrderOptions();
  
	var loading_div = getObject("loading_orders");
  var orders_div = getObject("orders");
  var datafile = "/clients/populate/orders.php?cb="+Math.random()+(view_all ? "&view_all=1" : "");
  
  if(document.all)
  {
    objXmlP = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlP.open("GET", datafile, true);
    objXmlP.onreadystatechange=function()
    {
    	if (objXmlP.readyState==4)
      {
      	orders_div.innerHTML = objXmlP.responseText;
        loading_div.style.display = "none";
  		}
    }
    objXmlP.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlP = new XMLHttpRequest();
    	objXmlP.open("GET", datafile, false);
    	objXmlP.send(null);
      
     	orders_div.innerHTML = objXmlP.responseText;
      loading_div.style.display = "none";
    }
  }	
}

function pollPopulateClientOrderOptions()
{
  if(orders_loaded = getObject("orders_loaded"))
  {
  	orderids = orders_loaded.orderid.split("|");
    for(i=0; i<orderids.length; i++)
    {
      populateClientOrderOptions(orderids[i]);
    }
  	return;
  }
	else
	  setTimeout("pollPopulateClientOrderOptions()", 60);
}

function populateClientOrderOptions(orderid)
{
  var options_div = getObject("order_options_"+orderid);
  var datafile = "/clients/populate/order_options.php?cb="+Math.random()+"&orderid="+orderid;

  hide("show_order_options_"+orderid);
  options_div.innerHTML = "Loading Order Options..."; 
  
  if(document.all)
  {
    var objXmlP = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlP.open("GET", datafile, true);
    objXmlP.onreadystatechange=function()
    {
    	if (objXmlP.readyState==4)
      {
      	options_div.innerHTML = objXmlP.responseText;
  		}
    }
    objXmlP.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlP = new XMLHttpRequest();
    	objXmlP.open("GET", datafile, false);
    	objXmlP.send(null);
      
     	options_div.innerHTML = objXmlP.responseText;
    }
  }	
}

function populateTransactionType(p, t)
{
  var p = p.value;
  var tt_list = getObject(t);
  
  var datafile = "/populate/package_item.php?package="+p+"&item=type";
	
	//Clear the county box out
	if(tt_list.options)
	{
		for(i=tt_list.options.length-1; i>-1; i--)
			tt_list.options[i] = null;
	
		tt_list.options[0] = new Option("       Loading...       ", "");
		tt_list.disabled = 'disabled';  
	}
  
  if(document.all)
  {
    objXmlTT = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlTT.open("GET", datafile, true);
    objXmlTT.onreadystatechange=function()
    {
    	if (objXmlTT.readyState==4)
      {
      	tt = objXmlTT.responseText;
      	populateTransactionTypeAction(tt, tt_list);
  		}
    }
    objXmlTT.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlTT = new XMLHttpRequest();
    	objXmlTT.open("GET", datafile, false);
    	objXmlTT.send(null);
      
      tt = objXmlTT.responseText;
     	populateTransactionTypeAction(tt, tt_list);
    }
  }
}

function populateTransactionTypeAction(tt, tt_list)
{
	if(tt_list.options == null)
	{
  	tt_list.value = tt;
		return;
	}
		
	tt_list.disabled = false;
  tt_list.options[0] = new Option("Allow Client To Choose","");
	// repopulate
  if(tt == 'sale')
		tt_list.options[1] = new Option("For Sale","sale");
  else if(tt == 'rent')
		tt_list.options[1] = new Option("For Rent","rent");
  else
  {
    tt_list.options[1] = new Option("For Sale","sale");
    tt_list.options[2] = new Option("For Rent","rent");
  }
}

function populatePropertyType(p, property_type)
{
  var p = p.value;
  var property_type_list = getObject(property_type);
  
  if(property_type_list.options == null)
  	return false;
  
  var datafile = "/populate/package_item.php?package="+p+"&item=zoning";
  
	//Clear the county box out
  for(i=property_type_list.options.length-1; i>-1; i--)
	  property_type_list.options[i] = null;
	
  property_type_list.options[0] = new Option("       Loading...       ", "");
  property_type_list.disabled = 'disabled';  
  
  if(document.all)
  {
    objXmlPT = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlPT.open("GET", datafile, true);
    objXmlPT.onreadystatechange=function()
    {
    	if (objXmlPT.readyState==4)
      {
      	property_type = objXmlPT.responseText;
      	populatePropertyTypeAction(property_type, property_type_list);
  		}
    }
    objXmlPT.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlPT = new XMLHttpRequest();
    	objXmlPT.open("GET", datafile, false);
    	objXmlPT.send(null);
      
      property_type = objXmlPT.responseText;
     	populatePropertyTypeAction(property_type, property_type_list);
    }
  }
}

function populatePropertyTypeAction(property_type, property_type_list)
{
	property_type_list.disabled = false;
  property_type_list.options[0] = new Option("Allow Client To Choose","");
	// repopulate
  if(property_type == 'res')
		property_type_list.options[1] = new Option("Residental","res");
  else if(property_type == 'rent')
		property_type_list.options[1] = new Option("Commercial","com");
  else
  {
    property_type_list.options[1] = new Option("Residential","res");
    property_type_list.options[2] = new Option("Commercial","com");
  }
}

function populatePropertyCategory(addon)
{
	var t = getObject('transaction_type');
  var p = getObject('property_type');

	var t_type = addon ? 'rent' : t.value;
  var p_type = p.value;

  var mls_category_addon = getObject('mls_category_addon');
  var mls_category = addon ? mls_category_addon : getObject('mls_category');
  var packageid = addon ? getObject("packageid_addon").value : getObject("packageid").value;
  
  if(mls_category)
  {
  	// clear out the mls_category select box
  	for(j=mls_category.options.length-1; j>-1; j--)
		  	mls_category.options[j] = null;
   
  	if(p_type == 'res' || p_type == 'com')
	  {
    	mls_category.options[0] = new Option("       Loading...       ", "");
		  mls_category.disabled = 'disabled'; 
      
      var datafile = "/populate/form_types.php?packageid="+packageid;
      if(document.all)
      {
        objXmlFT = new ActiveXObject("Microsoft.XMLHTTP");
        objXmlFT.open("GET", datafile, true);
        objXmlFT.onreadystatechange=function()
        {
        	if (objXmlFT.readyState==4)
          {
          	ft = objXmlFT.responseText;
          	populatePropertyCategoryAction(mls_category, t_type, p_type, ft);
            if(!addon && mls_category_addon)
            	populatePropertyCategory(true);
      		}
        }
        objXmlFT.send(null);
      }
      else
      {
      	if(document.getElementById)
        {
        	objXmlFT = new XMLHttpRequest();
        	objXmlFT.open("GET", datafile, false);
        	objXmlFT.send(null);
          
          ft = objXmlFT.responseText;
         	populatePropertyCategoryAction(mls_category, t_type, p_type, ft);
          if(!addon && mls_category_addon)
           	populatePropertyCategory(true);
        }
      }
  	}
    else
    	mls_category.options[0] = new Option("Choose Property Type First", "");
  }
}

function populatePropertyCategoryAction(mls_category, t_type, p_type, ft)
{
	var form_types = new Array();
  
  mls_category.disabled = false; 
  mls_category.options[0] = new Option("Please Choose", "");
  
	if(ft.length > 0)
  {
	 	form_types_array = ft.split("|");
    for(i=0; i<form_types_array.length; i++)
    {
    	ft_array = form_types_array[i].split("~~");
      
      id = ft_array[0];
      
      form_types[id] = new Array();
      form_types[id]['type'] = ft_array[1];
      form_types[id]['zoning'] = ft_array[2];
      form_types[id]['name'] = ft_array[3];
    }
  }
  
	j=1;
	for(var formid in form_types)
  {
  	if((form_types[formid]['type'] == 'both' || form_types[formid]['type'] == t_type) && (form_types[formid]['zoning'] == 'both' || form_types[formid]['zoning'] == p_type))
  	{
   		mls_category.options[j] = new Option(form_types[formid]['name'], formid);
      j++;
		}
  }
}

function populatePropertyTypeList()
{
	var type_sale = getObject("type_sale");
  var type_rent = getObject("type_rent");
  var type_both = getObject("type_both");
  
  var zoning_res = getObject("zoning_res");
  var zoning_com = getObject("zoning_com");
  var zoning_both = getObject("zoning_both");
  
  var property_types = getObject("property_types");
  
  var type_checked;
  var zoning_checked;
  
  // populate the type that's checked
  if(type_sale.checked)
  	type_checked = "sale";
  else if(type_rent.checked)
  	type_checked = "rent";
  else if(type_both.checked)
  	type_checked = "both";
  
  // populate the zoning that's checked
  if(zoning_com.checked)
  	zoning_checked = "com";
  else if(zoning_res.checked)
  	zoning_checked = "res";
  else if(zoning_both.checked)
  	zoning_checked = "both";
  
  // clear out the current option list
  for(j=property_types.options.length-1; j>-1; j--)
  	property_types.options[j] = null;
  
  j=0;
  // filter out the list based on the type and zoning checked
  //	if one is not checked, don't filter on that value
  //	if both is checked or form is 'both', include it
  for(i in property_form_types)
  {
  	if((!type_checked || type_checked == 'both' || property_form_types[i]['type'] == 'both' || property_form_types[i]['type'] == type_checked) && (!zoning_checked || zoning_checked == 'both' || property_form_types[i]['zoning'] == 'both' || property_form_types[i]['zoning'] == zoning_checked))
    {
    	// add the new option to the list
    	property_types.options[j] = new Option(property_form_types[i]['name'], i);
      // update the 'selected' property with the value from the stored variable
      property_types.options[j].selected = property_form_types[i]['selected'];
      j++;
    }
  }
}

function addPropertyType(formid)
{
	var form = getObject('property_types_'+formid);
  var list = getObject('available_property_types');
  var error = "";
  for(var k=0; k<list.length; k++)
  	if(list.options[k].selected)
    {
    	if((property_types_form_type[formid] == 'both' || property_types_form_type[formid] == property_types_form_type_type[list.options[k].value] || property_types_form_type_type[list.options[k].value] == 'both') && (property_types_form_zoning[formid] == 'both' || property_types_form_zoning[formid] == property_types_form_type_zoning[list.options[k].value] || property_types_form_type_zoning[list.options[k].value] == 'both'))
      {
      	if(notInList(list.options[k].value, form))
	    	 	form.options[form.options.length] = new Option(list.options[k].text, list.options[k].value);
        list.options[k] = null;
        // we removed one from list, so we have to decrement the counter
        k--;
      }
      else
      {
      	error += "The property type '"+list.options[k].text+"' is for ";
        if(property_types_form_type_zoning[list.options[k].value] == 'res')
        	error += "Residential ";
        else if(property_types_form_type_zoning[list.options[k].value] == 'com')
        	error += "Commercial ";
      	if(property_types_form_type_type[list.options[k].value] == 'sale')
        	error += "Sales ";
        else if(property_types_form_type_type[list.options[k].value] == 'rent')
        	error += "Rentals ";
        error += "Only\n";
    	}
    }
      
  setSize(form,list);
  sortList(form);
  selectNone(form,list);

  if(error != "")
  {
  	error += "\nThe form you selected is for ";
    if(property_types_form_zoning[formid] == 'res')
    	error += "Residential ";
    else if(property_types_form_zoning[formid] == 'com')
    	error += "Commercial ";
  	if(property_types_form_type[formid] == 'sale')
    	error += "Sales ";
    else if(property_types_form_type[formid] == 'rent')
    	error += "Rentals ";
    error += "Only\n\n";
  	alert("The following errors were encountered:\n\n"+error);
  }
}

function delPropertyType(formid)
{
	var form = getObject('property_types_'+formid);
  var list = getObject('available_property_types');
  
  for(var k=0; k<form.length; k++)
  	if(form.options[k].selected)
    {
    	if(notInList(form.options[k].value, list))
	  	 	list.options[list.options.length] = new Option(form.options[k].text, form.options[k].value);
      form.options[k] = null;
      // we removed one from form, so we have to decrement the counter
      k--;
    }

  setSize(form,list);
  sortList(list);
  selectNone(form,list);
}function populatePackages(s, c, p, current_plan_name, sort_wholesale)
{
	var state = getObject(s).value;
  var county = getObject(c).value;
  var package_list = getObject(p);
  var datafile = "/populate/packages.php?state="+state+"&county="+county+"&sort_wholesale="+(sort_wholesale ? "1" : "0");
	//Clear the county box out
  for(i=package_list.options.length-1; i>-1; i--)
	  package_list.options[i] = null;
	
  package_list.options[0] = new Option("       Loading...       ", "");
  package_list.disabled = 'disabled';  
  
  if(document.all)
  {
    objXmlP = new ActiveXObject("Microsoft.XMLHTTP");
    objXmlP.open("GET", datafile, true);
    objXmlP.onreadystatechange=function()
    {
    	if (objXmlP.readyState==4)
      {
      	packages = objXmlP.responseText;
      	populatePackagesAction(packages, package_list, current_plan_name);
  		}
    }
    objXmlP.send(null);
  }
  else
  {
  	if(document.getElementById)
    {
    	objXmlP = new XMLHttpRequest();
    	objXmlP.open("GET", datafile, false);
    	objXmlP.send(null);
      
      packages = objXmlP.responseText;
     	populatePackagesAction(packages, package_list, current_plan_name);
    }
  }	
}

function populatePackagesAction(packages, package_list, current_plan_name)
{
	package_list.disabled = false;
	// repopulate
  if(packages.length > 0)
  {
  	package_list.options[0] = new Option("--Select Package--","");
	 	packages_array = packages.split("|");
   	for(i=0; i<packages_array.length; i++)
     	if(packages_array[i])
      {
      	p = packages_array[i].split("~~");
   			package_list.options[i+1] = new Option("$"+p[2]+" - "+p[1],p[0]);
        if(p[1] == current_plan_name)
        	package_list.options[i+1].selected = "selected";
      }    
  }
  else
  	package_list.options[0] = new Option("--No Packages Available--","");
}
