/******************************************************************************************
Scheduling Code
*******************************************************************************************/
function checkScheduleForm() {
  var sindex = $j('#stime').attr('selectedIndex');
  var eindex = $j('#etime').attr('selectedIndex');
  
  var selectedService = $j("input[name='service']:checked").val();
  var cost = 0;
  var serviceCount = 0;
  $j("input[name='aservices[]']").each(function (i,domElement) {
    if (domElement.checked) {
      serviceCount++;
    }
  });
  
  locationFail = timeFail = serviceFail = false;
  
  if ($j('#field_lat').val() == '' || $j('#field_lon').val() == '')
    locationFail = true;
  if (sindex>=eindex)
    timeFail = true;
  if (serviceCount == 0 && selectedService == null && packageCount == 0)
    serviceFail = true;
  
  if (locationFail||timeFail||serviceFail) {
    var errorText = '';
    if (locationFail)
      errorText += 'You must enter a valid location, then click one of the results to confirm. ';
    if (timeFail)
      errorText += 'You must enter a valid time span. ';
    if (serviceFail)
      errorText += 'You must select at least one service. ';
    alert(errorText);
    return false;
  }
}

function calculateCost() {
  
  var sindex = $j('#stime').attr('selectedIndex');
  var eindex = $j('#etime').attr('selectedIndex');
  var time = (eindex-sindex)*.5;
  var selectedService = $j("input[name='service']:checked").val();
  var cost = 0;
  var selectedAServices = Array();
  var selectedAPackages = Array();
  var serviceCount = 0;
  var packageCount = 0;
  var serviceString = '';
  var packageString = '';
  var totalTimeMin = 0;
  var totalTimeMax = 0;
  
  $j("input[name='aservices[]']").each(function (i,domElement) {
    if (domElement.checked) {
      selectedAServices[serviceCount] = parseInt(domElement.value);
      serviceCount++;
    }
  });
  
  $j("input[name='apackages[]']").each(function (i,domElement) {
    if (domElement.checked) {
      selectedAPackages[packageCount] = parseInt(domElement.value);
      packageCount++;
    }
  });
  
  if (selectedService) {
    cost += time*services[selectedService][1];
    if (serviceString != '')
      serviceString += ', ';
    serviceString += services[selectedService][2];
    totalTimeMin += services[selectedService][3];
    totalTimeMax += services[selectedService][4];
  }
  
  for (var i = 0; i <selectedAServices.length; i++) {
    if (serviceString != '')
      serviceString += ', ';
    if (document.getElementById('serviceTime_'+selectedAServices[i])) {
      cost += services[selectedAServices[i]][1]*$j('#serviceTime_'+selectedAServices[i]).val()/60;
      totalTimeMin += parseInt($j('#serviceTime_'+selectedAServices[i]).val());
      totalTimeMax += parseInt($j('#serviceTime_'+selectedAServices[i]).val());
      serviceString += services[selectedAServices[i]][2]+" ("+parseInt($j('#serviceTime_'+selectedAServices[i]).val())+" min)";
    }
    else {
      serviceString += services[selectedAServices[i]][2];
      cost += services[selectedAServices[i]][1];
      totalTimeMin += services[selectedAServices[i]][3];
      totalTimeMax += services[selectedAServices[i]][4];
    }
  }
  for (var i = 0; i <selectedAPackages.length; i++) {
    cost += packages[selectedAPackages[i]][0];
    if (packageString != '')
      packageString += ', ';
    packageString += packages[selectedAPackages[i]][1];
    totalTimeMin += packages[selectedAPackages][2];
    totalTimeMax += packages[selectedAPackages][2]; // CHANGE THIS
    //totalTimeMax += services[selectedAServices][3];
  }
  
  var hoursS = '';
  if (time != 1)
    hoursS = 's'
      
      if (time*60 > totalTimeMax && totalTimeMax != 0) {  
      /*    
      $j('#approxCost').html('');      
      alert("The appointment you've scheduled is "+(totalTimeMax-(time*60+30))+" minutes too long.");
      */
      eindex = $j('#etime').attr('selectedIndex');
  while (time*60 > totalTimeMax && eindex != 0) {
    eindex--;
    $j('#etime').attr('selectedIndex',eindex);
    time = (eindex-sindex)*.5;
  }
}

if (totalTimeMin > time*60) {  
  eindex = $j('#etime').attr('selectedIndex');
  while (totalTimeMin > time*60 && eindex < $j('#etime').children().length-1) {
    eindex++;
    $j('#etime').attr('selectedIndex',eindex);
    time = (eindex-sindex)*.5;
  }
}

if (totalTimeMin > time*60) {  
  $j('#approxCost').html('');      
  alert("You've selected a service or package that requires more time ("+(totalTimeMin/60)+" hours) than the slot you selected ("+(time)+" hours). Find a time when this instructor is available for longer.");
}
else {
  var costHtml = '<div class="roundedBox"><strong>Date:</strong> '+$j('#apptDate').html()+'<br />';
  costHtml += '<strong>Time:</strong> '+$j('#stime option:selected').text()+' - '+$j('#etime option:selected').text()+' ('+time+' hour'+hoursS+')<br />';
  costHtml += '<strong>Place:</strong> '+$j('#field_location').val()+'<br />';
  if (serviceString != '')
    costHtml += '<strong>Services:</strong> '+serviceString+'<br />';
  if (packageString != '')
    costHtml += '<strong>Packages:</strong> '+packageString+'<br />';
  if (consultantType != 3)
    costHtml += '<strong>Cost:</strong> $'+cost+'</div><div style="clear:both;"></div>';
  
  if (cost != 0 && time != 0)
    $j('#approxCost').html(costHtml);
  else
    $j('#approxCost').html('');
}
} 
  function setEndTimeMenu(index) {
  if (index==$j('#stime').children().length-1) {
  $j('#stime').attr('selectedIndex',$j('#etime').children().length-2);
index = $j('#etime').children().length-2;
}
  var eindex = $j('#etime').attr('selectedIndex');
if (eindex < index && index+2 < $j('#stime').children().length)
  $j('#etime').attr('selectedIndex',index+2);
else if (eindex < index && index+1 < $j('#stime').children().length)
  $j('#etime').attr('selectedIndex',index+1);
else
  $j('#etime').attr('selectedIndex',$j('#etime').children().length-1);
calculateCost();
}
  function setStartTimeMenu(index) {
  if (index==0)
  $j('#etime').attr('selectedIndex',1);
index = 1;
var sindex = $j('#stime').attr('selectedIndex');
if (sindex > index && index-2 >= 0)
  $j('#stime').attr('selectedIndex',index-2);
else if (sindex > index && index-1 >= 0)
  $j('#stime').attr('selectedIndex',index-1);
else 
  $j('#stime').attr('selectedIndex',0);
calculateCost();
}
  
  /******************************************************************************************
  Local Search Code
  *******************************************************************************************/
  function findPlace(query,start) {
  if (!start)
  start = 0;
var searchUrl = "http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q="+query+"&rsz=small&start="+start+"&callback=?"; // build url
//&sll="+sll+"
$j.getJSON(searchUrl,
           function(data){
             if (data.responseStatus == 200) {
               if (data.responseData.results.length != 0) {
                 $j('#geocodeError').html('  <div class="roundedBox"><strong><img src="/images/icon_suc_small.gif" border="0" alt="√" align="absmiddle" /> Click a place below</strong></div>');
                 addResults(data,query,start);
               }
               else {
                 
                 $j('#geocodeError').html('<div class="roundedBox"><strong><img src="/images/icon_err_small.gif" border="0" alt="X" align="absmiddle" /> No matching places found!</strong></div>');
                 
                 $j('#field_lat').val('');
                 $j('#field_lon').val('');
                 $j('#localSearchResults').html('');
                 $j('#localSearchPages').html('');
               }
             }
           });
}
  
  function setApptLocation(object) {
  $j('#geocodeError').html('');

var children = $j(object).children();
var address = '';
address += children[1].innerHTML; // name
if (address != children[2].innerHTML.replace(/([^,]*?),.*/,'$1'))
  address += ', '+children[2].innerHTML;
else
  address += ', '+children[2].innerHTML.replace(/[^,]*?, (.*)/,'$1'); // address

address = address.replace(/<br ?\/?>/,', ');

var phone = object.childNodes[object.childNodes.length-1].innerHTML;
var latLon = object.childNodes[0].innerHTML.split(/,/);
$j('#field_lat').val(latLon[0]);
$j('#field_lon').val(latLon[1]);
$j('#field_phone').val(phone);
$j('#field_location').val(address);
calculateCost();
}
  
  function addResults(data,query,start) {
  var listHtml = '';
if (!start)
  start = 0;
for (var i = 0; i < data.responseData.results.length; i++) {
  var address = '';
  var phoneNumber = '';
  if (data.responseData.results[i].streetAddress != data.responseData.results[i].titleNoFormatting)
    address = data.responseData.results[i].streetAddress.replace(new RegExp('^'+data.responseData.results[i].titleNoFormatting+', '),'');
  
  if (data.responseData.results[i].region != '' && address+data.responseData.results[i].city != '') {
    if (address!='')
      address += '<br />';
    address += data.responseData.results[i].city+', '+data.responseData.results[i].region;
  }
  
  address = '<h3 class="blue">'+address.replace(/ *\d{5}$/,'')+'</h3>';
  if (typeof data.responseData.results[i].phoneNumbers != 'undefined' && data.responseData.results[i].phoneNumbers.length != 0)
    phoneNumber = data.responseData.results[i].phoneNumbers[0].number;
  listHtml += '<li class="hand" onclick="setApptLocation(this)"><div class="hidden">'+data.responseData.results[i].lat+','+data.responseData.results[i].lng+'</div><h2>'+data.responseData.results[i].titleNoFormatting+'</h2>'+address+'<div class="hidden">'+phoneNumber+'</div></li>';
} 

var pageHtml = '';
if (typeof data.responseData.cursor.pages != 'undefined' && data.responseData.cursor.pages.length != 1) {
  var pageHtml = '<table cellpadding="0" cellspacing="0" align="center" border="0"><tr>';
  for (var i = 0; i < data.responseData.cursor.pages.length; i++) {
    pageHtml += '<td valign="middle"><a ';
    if (data.responseData.cursor.pages[i].start==start)
      pageHtml += ' class="localSearchCurrentPage"';
    pageHtml += 'href="javascript:findPlace(\''+escape(query.replace(/'/,"\'"))+'\','+data.responseData.cursor.pages[i].start+');">'+data.responseData.cursor.pages[i].label+'</a></td>';
  }
  pageHtml += '</tr></table>';
}
$j('#localSearchResults').html(listHtml);
$j('#localSearchPages').html(pageHtml);
}
  
  function startPlaceSearch(query,force) {
  //beginGeoCode(query,document.getElementById('#field_lat'),document.getElementById('#field_lon'),document.getElementById('#geocodeError'),force);
  
  if (typeof placeSearch != 'undefined')
  clearTimeout(placeSearch);
if (force)
  findPlace(query,0);
else
  placeSearch = setTimeout("findPlace('"+escape(query)+"',0)", 300);
}
  
  
  /******************************************************************************************
  Geocoding
  *******************************************************************************************/
  
  function beginGeoCode(gcString, JIDgcLatField_, JIDgcLonField_, JIDgcErrorField_, force) {
  JIDgcLatField = JIDgcLatField_;
JIDgcLonField = JIDgcLonField_;
JIDgcErrorField = JIDgcErrorField_;

if (typeof geocodeSearch != 'undefined')
  clearTimeout(geocodeSearch);
if (force)
  doGeocode(gcString);
else
  geocodeSearch = setTimeout("doGeocode('"+gcString+"')", 300);
if ((typeof lastAddr == 'undefined' || (lastAddr.substr(0,gcString.length) != gcString)))
  $j(JIDgcErrorField).html('<div class="roundedBox"><img src="/images/loading.gif" style="margin-bottom: 1px;" border="0" height="16" alt="." align="absmiddle" /> Locating...</div>');
}
  
  /**
  Supply a string, then either objects or JQuery selectors like #elementId
  */
  function doGeocode(gcString) {
  geocodeToFields(gcString,$j(JIDgcLatField),$j(JIDgcLonField),$j(JIDgcErrorField));
}
  
  /**
  Supply a string, and 3 JQuery objects
  */
  function geocodeToFields(address,JlatField,JlonField,JerrorContainer) {
  if (geocoder && (typeof lastAddr == 'undefined' || (lastAddr != address))) {
  geocoder.getLocations(address, 
  function(response) {
  if (!response || response.Status.code != 200) {
  JerrorContainer.html('<div class="roundedBox"><strong><img src="/images/icon_err_small.gif" border="0" alt="X" align="absmiddle" /> Not found!</strong></div>');
} else {
  place = response.Placemark[0];
JlatField.val(place.Point.coordinates[1]);
JlonField.val(place.Point.coordinates[0]);
JerrorContainer.html('<div class="roundedBox"><strong><img src="/images/icon_suc_small.gif" border="0" alt="√" align="absmiddle" />  '+place.address.replace(/, USA/,'')+'</strong></div>');
//<div class="buttonContainer"><a class="smallButton yellowButton addStopButton" onclick="manualAddRemoveFromRoute(this.parentNode);">Add to Route</a></div>
}
  });
lastAddr = address;
}
  }
  
  /**
  Format the input (lat,lon) as lat,lon or lat%2Clon
  */
  function formatLatLon(sll,preserveComma) {
  if (!preserveComma)
  sll = sll.replace(/,/,"%2C");
sll = sll.replace(/[\(\) ]/g,"");
return sll;
}
  
  /******************************************************************************************
  Image Rotation
  *******************************************************************************************/
  
  function nextImageRotation() {
  var rotImgChildren = $j('#rotatingImageBk').children();
rotImgChildren = rotImgChildren[0].childNodes;
var rotButChildren = $j('#rotatingImageButtons').children();

if (curImage > rotButChildren.length-1)
  curImage = 1;

for (var i = 0; i < rotButChildren.length-1; i++) {
  if (rotImgChildren[i].nodeName == 'DIV' && i+1==curImage) {
    rotateImage(curImage);
  }
}
curImage++;
}
  
  function rotateImage(id) {
  var rotImgChildren = $j('#rotatingImageBk').children();
rotImgChildren = rotImgChildren[0].childNodes;

var rotButChildren = $j('#rotatingImageButtons').children();

var j = 1;
for (var i = 0; i < rotImgChildren.length; i++) {
  if (rotImgChildren[i].nodeName == 'DIV') {
    if (j == id)
      $j(rotButChildren[i]).addClass('bO');
    else {
      $j(rotButChildren[i]).removeClass('bO');
      $j(rotImgChildren[i]).slideUp();  
    }
    j++;
  }
}

$j('#rotatingImage_'+id).slideDown();
var children = $j('#rotatingImage_'+id).children();
$j('#rotatingImageBk').fadeOut("normal",function() {
  $j('#rotatingImageBk').css('background-image','url('+children[children.length-1].src+')');
  $j('#rotatingImageBk').fadeIn();
});

}
  
  //layer visibility functions
  function toggleLayer(obj) {
  if(document.getElementById(obj).style.visibility == "visible") {
  document.getElementById(obj).style.visibility = "hidden";
document.getElementById(obj).style.display = "none";
}
  else {
  document.getElementById(obj).style.visibility = "visible";
document.getElementById(obj).style.display = "";
}
  }
  function hideLayer(obj) {
  document.getElementById(obj).style.visibility = "hidden";
document.getElementById(obj).style.display = "none";
} 
  function showLayer(obj) {
  document.getElementById(obj).style.visibility = "visible";
document.getElementById(obj).style.display = "";
}
  
  /******************************************************************************************
  Google Maps
  *******************************************************************************************/
  
  function googleMapFieldLoad(lat,lon) {  
  if (GBrowserIsCompatible()) {
  map = new GMap2(document.getElementById("googleMap"));
geocoder = new GClientGeocoder();
map.addControl(new GSmallMapControl());

// map.setMapType(G_HYBRID_MAP); 
map.addControl(new GMapTypeControl()); // let them set map type

map.enableScrollWheelZoom(); // enable scroll wheel zoom

// Stop page scrolling if wheel over map
function wheelevent(e) {
  if (!e)
    e = window.event;
  if (e.preventDefault)
    e.preventDefault();
  e.returnValue = false;
}
GEvent.addDomListener(document.getElementById("googleMap"), "DOMMouseScroll", wheelevent);
document.getElementById("googleMap").onmousewheel = wheelevent; 

var point = new GLatLng(lat, lon);
map.setCenter(point, 14);
map.addOverlay(marker = new GMarker(point,{draggable: true}));

GEvent.addListener(marker, "dragend", function() {
  var point = marker.getPoint();
  document.getElementById("base_location").value = point.toString().replace(/\(|\)/g,'');
  //marker.openInfoWindowHtml(point.toString());
});
GEvent.addListener(map, "click", function(overlay, point) {
  if (!overlay) {
    map.clearOverlays();
    map.addOverlay(marker = new GMarker(point,{draggable: true}));
    document.getElementById("base_location").value = point.toString();
    GEvent.addListener(marker, "dragend", function() {
      var point = marker.getPoint();
      document.getElementById("base_location").value = point.toString().replace(/\(|\)/g,'');
      //marker.openInfoWindowHtml(point.toString());
    });
  }
});      
}
  }
  
  function googleMapsSetBaseAddress(address) {   
  if(address) {
  if (geocoder) {
  geocoder.getLatLng(
  address,
  function(point) {
  if (!point) {
  showLayer("error_not_found");
hideLayer("map_success_found");
} 
  else {
  hideLayer("error_not_found");
showLayer("map_success_found");
map.clearOverlays();
map.addOverlay(marker = new GMarker(point,{draggable: true}));
map.setCenter(point);
document.getElementById("base_location").value = point.toString().replace(/\(|\)/g,'');
GEvent.addListener(marker, "dragend", function() {
  var point = marker.getPoint();
  document.getElementById("base_location").value = point.toString().replace(/\(|\)/g,'');
  //marker.openInfoWindowHtml(point.toString());
});
}
  });
}
  }
  }
  
  function googleMapsSetBaseFromLatLong(str) {
  var loc_str = str.split(',');
if(loc_str[1]) {
  map.clearOverlays();
  var point = new GLatLng(loc_str[0].replace(/\(/,""), loc_str[1].replace(/\)/,""));
  map.addOverlay(marker = new GMarker(point,{draggable: true}));
  map.setCenter(point);
  GEvent.addListener(marker, "dragend", function() {
    var point = marker.getPoint();
    document.getElementById("base_location").value = point.toString().replace(/\(|\)/g,'');
    //marker.openInfoWindowHtml(point.toString());
  });
}
}
  
  function googleMapDoAddressSearch() {
  if (document.getElementById("search_address").value != '') {
  if(document.getElementById("search_address").value != googleMapCurrentAddress) {
  googleMapCurrentAddress = document.getElementById("search_address").value;
googleMapsSetBaseAddress(document.getElementById("search_address").value);
}
  }
  clearInterval(window.mapsSearchInterval);
}
  
  
  function helpFade(helpLayerId,e,action) {
  var revert = 0;
if ($j('#'+helpLayerId).css('display') == 'none') {
  $j('#'+helpLayerId).css('display','block');
  $j('#'+helpLayerId).css('position','absolute');
  revert = 1;
}
var verticalOffset = -document.getElementById(helpLayerId).offsetHeight;
if (revert == 1) {
  $j('#'+helpLayerId).css('visibility','visible');
  $j('#'+helpLayerId).css('display','none');
}
var clickCoords = getClickCoords(e);
var horizontalOffset = 1;
clearInterval(window.helpFadeInterval);
window.helpFadeInterval = setInterval('toggleHelp(\''+helpLayerId+'\',\''+clickCoords[0]+verticalOffset+'\',\''+clickCoords[1]+horizontalOffset+'\','+action+');',500);
}
  
  /******************************************************************************************
  Misc Functions
  *******************************************************************************************/
  
  
  function toggleHelp(helpLayerId,x,y,action,e) {
  if(window.helpFadeInterval)
  clearInterval(window.helpFadeInterval);

if (e) {
  $j('#'+helpLayerId).css('visibility','hidden');  
  $j('#'+helpLayerId).css('position','absolute');      // FLAG: this code is messing stuff up, see below
  $j('#'+helpLayerId).css('display','block');
  var verticalOffset = -document.getElementById(helpLayerId).offsetHeight-2;
  $j('#'+helpLayerId).css('visibility','visible');
  var horizontalOffset = 2;
  var clickCoords = getClickCoords(e);
  x = clickCoords[0]+horizontalOffset;
  y = clickCoords[1]+verticalOffset;
}

if($j('#'+helpLayerId).css('display') == 'none' || action == true) {
  $j('#'+helpLayerId).css('position','absolute');
  $j('#'+helpLayerId).css('left',x);
  $j('#'+helpLayerId).css('top',y);
  $j('#'+helpLayerId).fadeIn(250); // FLAG: doesn't actually do anything because of FLAG above
}
else
  $j('#'+helpLayerId).fadeOut(250);  // IE 7 PROBLEM - fade out has black border, hide right away instead

if (helpLayerId != window.lastHelp)
  $j('#'+window.lastHelp).fadeOut();

window.lastHelp = helpLayerId;
}
  
  
  function getClickCoords(e) {
  if( !e ) {
  if( window.event ) {
  //Internet Explorer
  e = window.event;
} else {
  //total failure, we have no way of referencing the event
  return;
}
  }
  if( typeof( e.pageX ) == 'number' ) {
  //most browsers
  var xcoord = e.pageX;
var ycoord = e.pageY;
} else if( typeof( e.clientX ) == 'number' ) {
  //Internet Explorer and older browsers
  //other browsers provide this, but follow the pageX/Y branch
  var xcoord = e.clientX;
var ycoord = e.clientY;
var badOldBrowser = ( window.navigator.userAgent.indexOf( 'Opera' ) + 1 ) ||
    ( window.ScriptEngine && ScriptEngine().indexOf( 'InScript' ) + 1 ) ||
    ( navigator.vendor == 'KDE' );
if( !badOldBrowser ) {
  if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //IE 4, 5 & 6 (in non-standards compliant mode)
    xcoord += document.body.scrollLeft;
    ycoord += document.body.scrollTop;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE 6 (in standards compliant mode)
    xcoord += document.documentElement.scrollLeft;
    ycoord += document.documentElement.scrollTop;
  }
}
} else {
  //total failure, we have no way of obtaining the mouse coordinates
  return;
}
  var arrayClickCoords = new Array(xcoord,ycoord) 
  return arrayClickCoords;
}
  
  
  
  // form validation
  function checkField (field,condition) {
  // might need to check for empty dropdown menu
  // might need to check for no selection on radio buttons
  if (condition == 'empty') {
  if (field.value=='') {
  //field.parent.innerHTML += '<div class="empty">This field is required.</div>';
  alert('The field '+field.name+' is required');
return false;
}
  }
  else if (condition == 'int') {
  //if (=='NaN') {
  //  return false;
  //}
  }
  else if (condition == 'email') {
  //if (!checkEmailAddress(field.value))
  //  return false;
  }
  return true;  
}
  
  function checkLabel (field,value,state) {
  if (field.value == '' && !state) {
  field.value = value;
}
  else if (field.value == value && state) {
  field.value = '';
}    
  }
  
  function lazdFormFieldChanged() {
  return true;
  }
  
  // iframe resize function courtesey of microsoft support (except their code wasn't standards compliant and didn't work, so I fixed it)
  function resizeFrame(frameId,frameObj) {
  var ifrm;
if (frameId!='')
  ifrm = document.getElementById(frameId);
else
  ifrm = frameObj;

if (ifrm) {
  var oBody  =  ifrm.contentDocument.body;
  var oFrame  =  ifrm;
  
  oFrame.style.width = oFrame.style.width+80;
  
  for (var i=0; i<2; i++) { // firefox makes me want to do it twice now (yea)
    oFrame.style.height = oBody.scrollHeight + (oBody.offsetHeight - oBody.clientHeight)+20+'px';
    oFrame.style.width = oBody.scrollWidth + (oBody.offsetWidth - oBody.clientWidth)+'px';
  }
}
else {
  if (frameId!='')
    alert('resizeFrame called on '+frameId+' but object doesn\'t exist!');
  else
    alert('resizeFrame passed null object!');
}
}
  
  
  // multi field copy funciton
  function addFieldCopy(multiContainer) {
  var dest = $j('#'+multiContainer);
var destChildren = dest.children();
var source = $j(destChildren[destChildren.length-1]);
var newChild = source.clone(false);
newChild.css('clear',"left");

$j(newChild).children(".lazdFormField").each(function () { 
  var elem = $j(this);
  elem.children(".hasDatepicker").each(function () {
    var elemi = $j(this);
    elemi.removeClass("hasDatepicker");
    this.id = 'datePicker'+Math.floor(Math.random()*100000);
    elemi.datepicker({ constrainInput: false }); 
  });
});

$j(newChild).appendTo(dest);
//clearForm(newChild);
}
  
  
  function clearForm(obj) {
  $j(':input',obj)
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');
}
  
  function removeMultiField(obj) {
  if (obj.parentNode.childNodes.length!=1)
  $j(obj).remove();
else {
  clearForm(obj);
}
}
  
  
  // form add ploaded file to list
  function addUploadedFile(fileName,fieldName,uploadDir,size,type,multipleFiles) {
  var targetDiv = document.getElementById('lazdFormUploadedFiles');

if (document.getElementById('lazdFormUploadedFiles').innerHTML=='') {
  document.getElementById('lazdFormUploadedFilesContainer')
    }
    
    var newHtml = '';    
  
  //var fieldName = '';
  if (multipleFiles==1)
    fieldName = 'lazdUploadedFiles[]';
  //else
  //  fieldName = 'file';
  
  if (type == 'image') {
    var imageUrl = fileName;
    if (fileName.match(/\.png|\.jpg/i))
      imageUrl = 'tn_'+fileName;
    newHtml += '<div style="float: left;">'+lazdElements['shadowStart']+'<div class="lazdFormUploadedImage"><input type="hidden" name="'+fieldName+'" value="'+fileName+'" /><img width="170" src="/uploaded/'+uploadDir+imageUrl+'" border="0" alt="" /><br /><div class="lazdFormImageFileInfo"><strong>'+fileName+'</strong><br />'+formatByte(size,1)+'</div><div class="lazdFormImageDelete"><a onclick="deleteFile(this.parentNode.parentNode.parentNode.parentNode.parentNode);"><img width="8" border="0" alt="x" src="/admin/images/x.gif" align="bottom" /> <strong>Delete</strong> </a></div></div>'+lazdElements['shadowEnd']+'</div>';
  }
  else {
    newHtml += '<div class="lazdFormFileListItem">';
    newHtml += '<input type="hidden" name="'+fieldName+'" value="'+fileName+'" /><div class="lazdFormDelete"><a onclick="deleteFile(this)"><img width="10" src="/admin/images/x.gif" border="0" alt="x" /></a></div><div class="lazdFormFileName">'+fileName+'</div><div class="lazdFormFileSize">'+formatByte(size,1)+'</div><div style="clear: both;"></div></div>'+"\n";
  }
  
  targetDiv.innerHTML += newHtml;
  
}
//misc functions
function formatByte (filesize,decimals,noUnits,noNumbers) {
  if (!decimals)
    decimals=2;
  var formattedSize = '';
  if (filesize >= 1073741824) {
    if(!noNumbers)
      formattedSize = number_format(filesize / 1073741824, decimals, '.', '');
    if(!noUnits)
      formattedSize += ' GB';
  } 
  else if (filesize >= 1048576) {
    if(!noNumbers)
      formattedSize = number_format(filesize / 1048576, decimals, '.', '');
    if(!noUnits)
      formattedSize += ' MB';
  }
  else if (filesize >= 1024) {
    if(!noNumbers)
      formattedSize = number_format(filesize / 1024, 0);
    if(!noUnits)
      formattedSize += ' KB';
  } 
  else {
    if(!noNumbers)
      formattedSize = number_format(filesize, 0);
    if(!noUnits)
      formattedSize += ' bytes';
  }
  return formattedSize;
};

function number_format( number, decimals, dec_point, thousands_sep ) {
  // http://kevin.vanzonneveld.net
  // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
  // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  
  var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
  var d = dec_point == undefined ? "," : dec_point;
  var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
  var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
  
  return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}


function deleteFile(object) { //,module,id
  // prompt to make sure
  if (object.childNodes[1])
    document.getElementById('lazdJDialogBox').innerHTML=object.childNodes[1].childNodes[1].innerHTML.replace(/<div class="lazdFormImageDelete">.*?<\/div>/g,'');
  else
    document.getElementById('lazdJDialogBox').innerHTML=object.parentNode.parentNode.innerHTML.replace(/<div class="lazdFormDelete">.*?<\/div>/g,'');
  $j('#lazdJDialogBox').dialog('destroy');
  $j('#lazdJDialogBox').dialog({ 
    modal: true,
    autoOpen: false,
    resizable: false,
    draggable: false,
    minHeight: 0,
    title: 'Delete this file?',
    buttons: { 
      'Cancel': function() { 
        $j(this).dialog('close'); 
      }, 
      'DELETE': function() { 
        // do post to actually remove the file
        //executeModuleActionId('','deleteFile','someWhere','','','','',true);
        // if it's a m-m, remove database entry
        // if it's a 1-m, nullify database field
        
        document.getElementById('lazdFileUploadField').contentWindow.numUploadedFiles--;
        domDelete(object.parentNode.parentNode);
        
        if(document.getElementById('lazdFileUploadField').contentWindow.numUploadedFiles==0)  {
          document.getElementById('lazdFileUploadField').contentWindow.showLayer('lazdFormFileUploadMain');
          $j('#lazdFormUploadedFilesContainer').slideUp();
          document.getElementById('lazdFileUploadField').contentDocument.getElementById('fileUploadStatus').innerHTML='';
          document.getElementById('lazdFormUploadedFiles').innerHTML='';
          document.getElementById('lazdFileUploadField').contentWindow.
            $j("#uploadprogressbar").progressBar(0);
        }
        
        showLayer('lazdFileUploadField');
        resizeFrame('lazdFileUploadField');
        setTimeout("resizeFrame('lazdFileUploadField');",100);
        setTimeout("resizeFrame('lazdFileUploadField');",100);
        $j(this).dialog('close'); 
      } 
    } 
  });
  $j('#lazdJDialogBox').dialog('open');
}


// dom edit functions 
function domDelete(object) {
  object.parentNode.removeChild(object);
}

function domInsertAfter(newChild, refChild) { 
  refChild.parentNode.insertBefore(newChild,refChild.nextSibling); 
}

function resetHtml(id) {
  $j('#'+id).html($j('#'+id).html());
}
