function MM_preloadImages() { //v3.0
  var d=document; if (d.images) {
      if (!d.MM_p) d.MM_p=new Array();
      var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for (i=0; i<a.length; i++)
          if (a[i].indexOf("#")!=0) {
              d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];
          }
  }
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for (i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if (!d) d=document;if ((p=n.indexOf("?"))>0&&parent.frames.length) {
      d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
  }
  if (!(x=d[n])&&d.all) x=d.all[n];for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for (i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if (!x && document.getElementById) x=document.getElementById(n);return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for (i=0;i<(a.length-2);i+=3)
      if ((x=MM_findObj(a[i]))!=null) {
          document.MM_sr[j++]=x; if (!x.oSrc) x.oSrc=x.src;x.src=a[i+2];
      }
}
function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) {v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v;}
}
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function hide_other_options(objname,ok){

    var obj = eval("document.opts."+objname);

    for (var i=0; i<obj.length; i++ ) {
        if (obj[i].value != ok) {
            MM_showHideLayers('option_'+obj[i].value,'','hide');
            //alert ('option '+obj[i].value+' hides? '+hides[obj[i].value]);
            //does this option have dependent checkboxes?
            if (hides[obj[i].value]) {
                //alert ("in hide_other_options" + hides[obj[i].value] + " length: "+hides[obj[i].value].length);
                if (isNaN (hides[obj[i].value]) && (hides[obj[i].value].length)>0) {
                    for (var j=0; j<hides[obj[i].value].length; j++) {
                        var index=hides[obj[i].value][j];
                        //alert (index);
                        var chk = eval("document.opts.opt_"+index);
                        chk.checked=false;
                        MM_showHideLayers('option_'+chk.value,'','hide');
                    }
                }else{
                    var index=hides[obj[i].value];
                    //alert (index);
                    var chk = eval("document.opts.opt_"+index);
                    chk.checked=false;
                    MM_showHideLayers('option_'+chk.value,'','hide');
                }
            }
        }
    }
}
function hide_radio_option(objname,ok){

    var obj = eval("document.opts."+objname);

    //alert ("in hide_radio_options");
    
    for (var i=0; i<obj.length; i++ ) {
        if (obj[i].value == ok) {
            MM_showHideLayers('option_'+obj[i].value,'','hide');
            obj[i].checked=false;
            // need to hide other options that require this one!
            hide_option(obj[i]);
        }
    }
}
function show_radio_option(objname,ok){

    var obj = eval("document.opts."+objname);

    //alert ("in show_radio_option");

    for (var i=0; i<obj.length; i++ ) {
        if (obj[i].value == ok) {
            obj[i].checked=true;
            MM_showHideLayers('option_'+obj[i].value,'','show');
        }else{
            obj[i].checked=false;
            MM_showHideLayers('option_'+obj[i].value,'','hide');
            
            //alert ('option '+obj[i].value+' shows?'+shows[obj[i].value]);
            //does this option have dependent checkboxes?
            if (shows[obj[i].value]) {
                //alert ("Got shows: "+shows[obj.value]+' length = '+shows[obj.value].length);
                for (var i=0; i<shows[obj[i].value].length; i++) {
                    var index=shows[obj[i].value][i];
                    //alert (index);
                    var chk = eval("document.opts.opt_"+index);
                    chk.checked=false;
                    MM_showHideLayers('option_'+chk.value,'','hide');
                }
            }
        }
    }
}
function show_option(obj){
    
    //alert ("in show_option");
    
    obj.checked=true;
    MM_showHideLayers('option_'+obj.value,'','show');
    
    if (obj.type=='radio') {
        hide_other_options(obj.name,obj.value);
    }

    if (shows[obj.value]) {
        //alert ("Got shows: "+shows[obj.value]+' length = '+shows[obj.value].length);
        for (var i=0; i<shows[obj.value].length; i++) {
            var index=shows[obj.value][i];
            //alert (index);
            if (index.length) {
                // this is a radio button...
                var rad = eval("document.opts.opt_"+index[0]);
                //alert (rad + ' ' + rad.length);
                for (var j=0; j<rad.length; j++) {
                    if (rad[j].value==index[1]) {
                        show_radio_option(rad[j].name,rad[j].value);
                        break;
                    }
                }
            }else{
                // this is a checkbox...
                var chk = eval("document.opts.opt_"+index);
                chk.checked=true;
                MM_showHideLayers('option_'+chk.value,'','show');
            }
        }
    }
}
function hide_option(obj){

    //alert ("in hide_option: "+obj.name);
    
    obj.checked=false;
    MM_showHideLayers('option_'+obj.value,'','hide');

    if (hides[obj.value] && hides[obj.value].length) {
        //alert ("Got shows: "+shows[obj.value]+' length = '+shows[obj.value].length);
        for (var i=0; i<hides[obj.value].length; i++) {
            var index=hides[obj.value][i];
            if (index.length) {
                // this is a radio button...
                var rad = eval("document.opts.opt_"+index[0]);
                //alert (rad + ' ' + rad.length);
                for (var j=0; j<rad.length; j++) {
                    if (rad[j].value==index[1]) {
                        //alert ('Need to hide #'+index[1]);
                        hide_radio_option(rad[j].name,index[1]);
                        break;
                    }
                }
            }else{
                // this is a checkbox...
                var chk = eval("document.opts.opt_"+index);
                chk.checked=false;
                MM_showHideLayers('option_'+chk.value,'','hide');
            }
        }
    }
}
function reset_model_info(f){

    var totalsqft=basesqft;
    var totalprice=baseprice;

    for (var i=0; i<optnames.length; i++) {
        var opt = eval("f.opt_"+optnames[i]);
        if (opt.length) {
            for (var j=0; j<opt.length; j++) {
                if (opt[j].checked) {
                   totalsqft += opt[j].sqft;
                   totalprice += opt[j].price;
                }
            }
        }else if(opt.type == "checkbox"){
            if (opt.checked) {
               totalsqft += opt.sqft;
               totalprice += opt.price;
            }
        }
    }
    f.sqft.value = totalsqft;
    f.price.value = '$'+commify(totalprice);
}
function set_range(low,lowobject,highobject){
   lowindex=lowobject.selectedIndex;
   highindex=highobject.selectedIndex;
   if(low == "low"){
      highobject.options[lowindex].selected=true;
   }else{
      if(lowindex==0){
         alert("Please choose a low value first.");
         highobject.options[0].selected=true;
         lowobject.options[0].selected=true;
         lowobject.focus();
      }else{
         if (lowindex>0) {
            if(lowobject.options[lowindex].value >= highobject.options[highindex].value){
               highobject.options[lowindex].selected=true;
            }
         }
      }
   }
}
function commify (num){
   var strnum = num.toString();
   var pattern = /^([\-\+]?\d+)(\d{3})/;
   while ( pattern.test(strnum) ) {
      strnum=strnum.replace(pattern,"$1,$2");
   }
   return strnum;
}
function reset_options (f){
    for (var i=0; i<optnames.length; i++) {
        var opt = eval("f.opt_"+optnames[i]);
        //alert (optnames[i] + ' ' + opt.name + ' ' + opt.type);
        if(opt.type == "checkbox"){
            if (opt.checked) {
                opt.checked==false;
                hide_option(opt);
            }
        }else if (opt.length) {
            for (var j=0; j<opt.length; j++) {
                if (opt[j].checked) {
                    opt[j].checked=false;
                    hide_radio_option(opt[j].name,opt[j].value);
                }
            }
        }
    }
    f.sqft.value = basesqft;
    f.price.value = '$'+commify(baseprice);
}
function check_required (f){
    var empties="";
    var focuselement;
    var chk=true;
    for (var i=0; i<f.length; i++) {
        var e=f.elements[i];
        
        if ((e.type=="text" || e.type=="textarea" || e.type=="password") && e.required) {
            if (is_blank(e.value)) {
               empties += "\n     " + e.label;
               if (chk) {
                   focuselement=e;
                   chk=false;
               }
               continue;
            }
        }
    }
    if (empties) {
        var msg = "You must fill in the following required fields:\n" + empties;
        alert (msg);
        focuselement.focus();
        return false;
    }else{
        return true;
    }
}
function is_blank(s){
    if (s == null) return true;
    if (s == "") return true;
    
    for (var i=0; i<s.length; i++) {
        var c = s.charAt(i);
        if ((c!=' ') && (c!='\n') && (c!='\t')) return false;
    }
    return true;
}
function check_survey_responses (f){
    //params: current form object
    var empties="";
    var focuselement;
    var missing=false;
    var processed = new Array();
    
    for (var i=0; i<f.length; i++) {
        var e=f.elements[i];
        if (e.type=="checkbox" || e.type=="radio") {
            if (!processed[e.name] && !has_response(f,e)) {
                //alert(e.name+" type="+e.type+" val="+e.value);
                missing=true;
                if (!focuselement) {
                    focuselement=e;
                }
            }
            processed[e.name]=1;
        }
        //alert (processed);
    }
    if (missing) {
        alert ("Please make sure you respond to each question before continuing.");
        focuselement.focus();
        return false;
    }else{
        return true;
    }
}
function has_response (f,e){
    // params: current form element
    
    switch (e.type) {
    case "checkbox":
        var obj = eval("f."+e.name); // this retrieves the array of all checkboxes with same name
        //alert ("checking "+obj.name+":"+obj.length);
        if (obj.length) {
            for (var i=0; i<obj.length; i++) {
                if (obj[i].checked) {
                    //alert (e.name+" has a response");
                    return true;
                }
            }
            return false;
        }else return true;
        break;
    case "radio":
        var obj = eval("f."+e.name); // this retrieves the array of all radio buttons with same name
        //alert ("checking "+obj.name+":"+obj.length);
        if (obj.length) {
            for (var i=0; i<obj.length; i++) {
                if (obj[i].checked) {
                    //alert (e.name+" has a response");
                    return true;
                }
            }
            return false;
        }else return true;
        break;
    default:
        return true;
        break;
    }
}

