function DoenAjax_buildinput_for(table,tableidfield,targetdiv,recno,hidesteps) {
	// NOTE: recno contains area_id in case of form for new listings
	// however, empty listings should be dealt with by DoenAjax_buildinput_form (note "_m_")
	//calls wrap... to setup containing controls
	// this creates a formlike control where each field is updated as it changes
	restoretimeout()
	$('#'+targetdiv).html('<img src="rpspinbig.gif">')
	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&targetdiv="+targetdiv
		$.ajax({
   			type: "POST",
   			url: "ajq_buildinput.php",
			data: poststr,
			dataType: "json",
			success: function(jr){
				$('#'+jr.respz.targetdiv)
				.html(jr.respz.html)
				.removeClass('content_adm')
				.addClass('content_nwl')
				.find(".ajxupd").not('.calendarButton').each( function() { // individual inputs update via ajax
					bindforupdate(this)

/*					$(this).unbind()
							.change(function() {
						var field =$(this).attr('field')
						var ctrlid=$(this).attr('ctrlid')
						var table =$(this).attr('table')
						var keyfield=$(this).attr('keyfield')
						var keyvalue=$(this).attr('keyvalue')


						DoenAjax_updatetable(field,ctrlid,table,field,keyfield,keyvalue);
							})
*/
						//			(inputidprefix,inputid,table,field,tableidfield,tableidvalue)
					})

				$('#fileToUpload').unbind().change(function(){ alert('Now click on the Upload button')})

				 DoenAjax_getrow_for(jr.respz.table,jr.respz.tableidfield,jr.respz.recno)

//				$('.optional').hide()
				$('.optional').show()
					if (jr.respz.level!='admin') $('.adminonly').parents('.fieldrow').hide()
				$('.optionalcaption').remove()
				$('.showoptional').unbind().click(function(){
					$('.optional').slideToggle('slow')
					$(this).html('Show / hide optional fields')
					if (jr.respz.level!='admin') $('.adminonly').parents('.fieldrow').hide()
				})

			//contents from dbase
/*				 DoenAjax_addpicuploadcontrol_recno(jr.respz.recno)
				now done in ajq_buildinput.php to avoid race conditions
				therefore prepare for upload needs to be done here
*/
// off for debug				$(".picform").each(function() {prepareUploadform(this,$(this).attr('id'))})

				 setClickable_delpic('delpic')  // in jquery_usradm.js
				 // primarypic also set with delpic
				 // does not work yet with initial (new) record
				 // ($record_id,$picfield,$pictable,$area_id,$listing_id)
				 // with record_id, the rest can be looked up
/*			if ($.browser.msie) {
			}
			else {*/

				$('.calendarButton').not('.caldone')

					.calendar({autoPopUp: 'both',
							buttonImageOnly: true,
							buttonImage: 'calendar.gif',
							buttonText: 'Calendar',
							minDate : new Date(2007, 1 - 1, 26),
							maxDate : new Date(2020, 1 - 1, 26),
							dateFormat : 'YMD-'
					})
					.addClass('caldone')
					.unbind( "bindforupdate_cal" )
					.change(function() { bindforupdate_cal(this)})
					.addClass('red');

// 			$('#dummybtn').unbind().click(function(){
// 				$(this).attr('src','rpspinbig.gif')
// 				$('#savingfeedback').html('Saving your input')
// 				window.setTimeout('restoredummysubmit()',2000)
// 			})

		if (jr.respz.newlistinginstructions!=undefined) { // should not be undefined, but in case
			$('.nwlstpholder').remove() //old ones
			if (hidesteps!='hidesteps') {
				$('#centerpaneldiv').after(jr.respz.newlistinginstructions)
		.css('border','1px solid #efefef')

				$('#closesteps').unbind().click(function(){ $('.nwlstpholder').remove()})
			}
		}

		if (jr.respz.firstpic=='first') {
			$('.picuploadheading').prepend('<span style="color:#FF6600;font-size:9pt">(3)&nbsp;&nbsp;</span>')
			$('.ajxupd').attr('readonly','readonly')
			$('#dummysubmit').html('Please upload one picture before editing your listing')
				.removeClass('clickable')
		}
		do_callback() // in usradm.js, if listing is live, say so now
					 // activate tooltip there
  			} // success
 		}); //ajax
} //function

function checkdatenotpast(obj) {
	var dateinput=$(obj).val()
	var yrinput  =parseInt(dateinput.substr(0, 4),10)
	var moinput  =parseInt(dateinput.substr(5, 2),10)
	var dayinput =parseInt(dateinput.substr(8, 2),10)
//alert(dateinput.substr(5, 2)+"="+moinput+"\n"+dateinput+',1:' + dayinput1+',2:'+dayinput2+',3:' +dayinput3)
/*var dateinputms = Date.parse(dateinput);
alert(dateinput+"\nms="+dateinputms)*/
	var dateToCheck = new Date();
	var yrtocheck= dateToCheck.getFullYear()
	var motocheck= dateToCheck.getMonth() + 1
	var daytocheck= dateToCheck.getDate()
//	alert(dateinput+"\n"+yrinput+"."+moinput+"."+dayinput+"\n"+yrtocheck+"."+motocheck+"."+daytocheck)

	var fb=':';
	if (yrinput>yrtocheck) fb+="[I]\n"
	if (yrinput==yrtocheck) fb+="[IIa]\n"
	if (moinput>moinput) fb+="[IIb]\n"
	if ((moinput==motocheck) && (dayinput>=daytocheck)) fb+="[IIc]\n"
//   alert (fb)
	var ok = (  (yrinput>yrtocheck) ||
				( (yrinput==yrtocheck) && (
						(moinput>motocheck) ||
						( (moinput==motocheck) && (dayinput>=daytocheck) )
					)
				)
			)
	if (!ok) {
			alert('Please enter a date equal to or later than today')
			$(obj).val('')
	}
}


//===============================================
function validate_one(obj) {
	var entry=$(obj).val()
	var isreq=$(obj).attr("rqurd")
	if (isreq=="yes") {
	if (( entry=="empty") || (entry=="")) {
			$(obj).addClass('failvalidate')
			return false
		}
		else {
			$(obj).removeClass('failvalidate')
			return true
		}
	}
	else return true
}
//==========================
function bindforupdate_cal(obj) {
//	alert('h')
		var field=$(obj).attr('field')
		var ctrlid=$(obj).attr('ctrlid')
		var table=$(obj).attr('table')
		var keyfield=$(obj).attr('keyfield')
		var keyvalue=$(obj).attr('keyvalue')

		var inputobject=$('#'+field+ctrlid)
		 DoenAjax_updatetable(field,ctrlid,table,field,keyfield,keyvalue);
}
//==========================
function bindforupdate(obj) {
		$(obj).unbind()
		.change(function() {
			var field=$(obj).attr('field')
			var ctrlid=$(obj).attr('ctrlid')
			var table=$(obj).attr('table')
			var keyfield=$(obj).attr('keyfield')
			var keyvalue=$(obj).attr('keyvalue')

			var inputobject=$('#'+field+ctrlid)

			if (field=='sqmeter') {
				var numbervalue=$(inputobject).val()
				if ((numbervalue<30) || (numbervalue>600)) {
						alert("Area in square meter must be\nbetween 30 and 600")
						$('#'+field+ctrlid).val('')
						return
					}
				}

			if (validate_one(inputobject)) {
				 DoenAjax_updatetable(field,ctrlid,table,field,keyfield,keyvalue);
//			$('#dummybtn').unbind().click(function(){
				$('#dummybtn').attr('src','rpspinbig.gif')
				$('#savingfeedback').html('Saving your input')
				window.setTimeout('restoredummysubmit()',2000)
//			})
			}
			else alert('Invalid entry')
		})

//		.remove()
// NUMERIC.js must be included.. or this will fail
		$('.numbersonly').numeric()
}
//===============================================

function saveChanges_direct(obj) { //save whats in this object
		restoretimeout()
		var t = $(obj).val();
		var tablename=$(obj).parents('.specscontainer').attr("tablename")
		var artno=$(obj).parents('.specscontainer').attr("thisrec")
		var poststring="content="+t+"&artno="+artno+"&fieldname="+$(obj).attr("fieldname")+"&tablename="+tablename
    		$.ajax({
   			type: "POST",
   			url: "ajq_saveart.php",
			data: poststring,
			dataType: "json",
   			success: function(jr){
				t=jr.respz.message
   			}
 		});

}
//===================================


function DoenAjax_buildinput_for_users(table,tableidfield,targetdiv,recno) {
	// NOTE: split from DoenAjax_buildinput_for - has special stuff for listings
	// empty listings should be dealt with by DoenAjax_buildinput_form (note "_m_")
	// calls wrap... to setup containing controls
	// this creates a formlike control where each field is updated as it changes
	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&targetdiv="+targetdiv
		$.ajax({
   			type: "POST",
   			url: "ajq_buildinput_users.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
//				$('#selectarea').remove()
				$('#'+jr.respz.targetdiv)
				.html(jr.respz.html)
				.find(".ajxupd").each( function() { // individual inputs update via ajax
					$(this).change(function() {
						var field=$(this).attr('field')
						var ctrlid=$(this).attr('ctrlid')
						var table=$(this).attr('table')
						var keyfield=$(this).attr('keyfield')
						var keyvalue=$(this).attr('keyvalue')
						DoenAjax_updatetable(field,ctrlid,table,field,keyfield,keyvalue);
						//			(inputidprefix,inputid,table,field,tableidfield,tableidvalue)
							})
					});
				 DoenAjax_getrow_for(jr.respz.table,jr.respz.tableidfield,jr.respz.recno)
				if (jr.respz.level!='admin') $('.adminonly').parents('.fieldrow').remove()//.hide()
				$('.canhide')./*hide().*/remove()
				$('#deleteuser').unbind()
				 .click(function() { deleteuser(this) })
   			}
 		});
}

function deleteuser(obj) {
	var record_id=$(obj).attr('title')
	if (!confirm( 'Delete this user record completely?')) return
	var poststr="tablename=users&tableidfield=title_id&title_id="+record_id
		$.ajax({
   			type: "POST",
   			url: "ajq_deleterec.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				Doenajax_builduserview_list ('users','0')
			}
		})
}

function DoenAjax_buildinput_for_banners(table,tableidfield,targetdiv,recno,chain) {
	// NOTE: recno contains area_id in case of form for new listings
	// however, empty listings should be dealt with by DoenAjax_buildinput_form (note "_m_")
	//calls wrap... to setup containing controls
	// this creates a formlike control where each field is updated as it changes
	$('#'+targetdiv).html('<img src=throborange.gif alt="Loading">')
	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&targetdiv="+targetdiv
	logthis('<span class="removable">'+poststr+'</span>')

		$.ajax({
   			type: "POST",
   			url: "ajq_buildinput_bnr.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
//   				$('#picuplctrl').remove() // not currently needed, a form and a div comes with wrapped form
				$('#'+jr.respz.targetdiv)
				.html(jr.respz.html)
				.find(".ajxupd").each( function() { // individual inputs update via ajax
					$(this).change(function() {
						var field=$(this).attr('field')
						var ctrlid=$(this).attr('ctrlid')
						var table=$(this).attr('table')
						var keyfield=$(this).attr('keyfield')
						var keyvalue=$(this).attr('keyvalue')
						DoenAjax_updatetable(field,ctrlid,table,field,keyfield,keyvalue);
						//			(inputidprefix,inputid,table,field,tableidfield,tableidvalue)
							})
					});
				 DoenAjax_getrow_for(jr.respz.table,jr.respz.tableidfield,jr.respz.recno)
				if (chain=="yes") {
					// in case of timing ...
					$('#upload_fallback').click(function () { 	DoenAjax_addpicuploadcontrol_banner(recno,chain) })

					 DoenAjax_addpicuploadcontrol_banner(recno,chain)
				}
//				 DoenAjax_buildinput_for_plusbanners(table,tableidfield,targetdiv,recno,ordinal)
				 	//contents from dbase
					if (jr.respz.level==undefined) alert('You need to login to upload banners')

				$('.canhide').remove()
				if ($.browser.msie) $('.dbg').remove()

				 return 'y';
   			},
   			error: function () {return 'n'}
 		});
 		return 'x'
}




function DoenAjax_buildinput_form(table,tableidfield,targetdiv,area_id,username) {
//note "m" in for_m_
//====================== customised for new listings =====================//
	//calls ajax wrap, but wraps all in form
	// NOTE: recno contains area_id in case of form for new listings == sort this out, is recno ever needed
	//  	yes, area_id is required for new listings, since user paid for an area, or selected an area from index page...THEREFORE recno MUST have area_id
	//  parameter renamed from recno to area_id on 2/08/07
	//  now recno will just be hardcoded to new
// 	($formid,$actionurl,$dblinkng,$fields,$table,
// 			 		$keyfield,$keyvalue,$ctrlid,$initvalue)

	var recno="new"

	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&area_id="+area_id+"&targetdiv="+targetdiv+"&formid=newlistingform&actionurl=ajq_saveform.php&username="+username
		$.ajax({
   			type: "POST",
   			url: "ajq_buildinputform.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				$('#'+jr.respz.targetdiv)
				.html(jr.respz.html)

				$("#dummysubmit").unbind()
				.click(function(){
					submitlistingform($("#newlistingform"),jr.respz.targetdiv)
					})

				$("#newlistingform")
					.find("#area_id"+recno).val(area_id).attr("readonly","readonly").end()

				.find("#username"+recno).val(jr.respz.username).attr("readonly","readonly").end()


				.find("#province"+recno).val(jr.names.provincename).attr("readonly","readonly").end()

				.find("#city"+recno).val(jr.names.cityname).attr("readonly","readonly").end()
				.find("#suburb"+recno).val(jr.names.suburbname).attr("readonly","readonly").end()

 				.find("#cityid"+recno).val(jr.names.cityid).attr("readonly","readonly").end()
 				.find("#provid"+recno).val(jr.names.provid).attr("readonly","readonly").end()

				.find("#rentvalue"+recno).change(function(){
						var rentamount=$(this).val()
						if (isNaN (rentamount)) {
							rentamount=stripalpha(rentamount)
							$(this).val(rentamount)
						}
					}).end()

				.find("#sqmeter"+recno).change(function(){
						var sqmeter=$(this).val()
						if ((sqmeter<30) || (sqmeter>600)) {
							alert("Area in square meter must be\nbetween 30 and 600")
							$(this).addClass('failvalidate')
						}
						else $(this).removeClass('failvalidate')
					}).end()
//				.find("#submitadd").html(' to proceed to picture upload').end()
				.find('.optional').show().end()
				.find('.showoptional').unbind().click(function(){
						$("#newlistingform").find('.optional').slideToggle('slow').hide()
						$(this).html('Show / hide optional fields')
					})
				$("#newlistingform").find('.numbersonly').numeric()
				if (jr.respz.level!='admin') $('.adminonly').parents('.fieldrow').hide()

				$("#dummysubmit").after('<div class="pleassubmit">Please save details to proceed to picture upload</div>')
				// #picuploadarea is part of useradmin.php

				$('.calendarButton')
					.calendar({autoPopUp: 'both',
							buttonImageOnly: true,
							buttonImage: 'calendar.gif',
							buttonText: 'Calendar',
							minDate : new Date(2007, 1 - 1, 26),
							maxDate : new Date(2020, 1 - 1, 26),
							dateFormat : 'YMD-'
					})
					.change(function(){ checkdatenotpast(this) })

//					change(function(){saveChanges_direct(this) })
// 					popUpCal.minDate = new Date(2007, 1 - 1, 26);
// 					popUpCal.maxDate = new Date(2020, 1 - 1, 26);
// 					popUpCal.dateFormat = 'YMD-';

			if (jr.respz.newlistinginstructions!=undefined) {
				$('.nwlstpholder').remove() //old ones
				$('#centerpaneldiv').after(jr.respz.newlistinginstructions)

 				$('.requiredcaption').prepend('<span style="color:#FF6600;font-size:9pt">(2)&nbsp;&nbsp;</span>')
				$('#closesteps').unbind().click(function(){ $('.nwlstpholder').remove()})
			}

   			}
 		});


}


function DoenAjax_buildinput_form_banner(table,tableidfield,targetdiv,chain) { //note "m" in for_m_
	//calls ajax wrap, but wraps all in form
	var browser='all'
	if ($.browser.msie) var browser="msie"
	$('#purchasecreditarea').html('')
	$('#picuploadarea').html('')
	$('#picdisplayarea').html('')
	$('#triggeroptionsdisplayarea').html('')
	$('#triggersdisplayarea').html('')
	$('#area_select').html('')
	var recno="new"
	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&targetdiv="+targetdiv+"&formid=newlistingform&actionurl=ajq_saveform.php&browser="+browser
		$.ajax({
   			type: "POST",
   			url: "ajq_buildinputform_bnr.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				$('#'+jr.respz.targetdiv)
//				.html(jr.respz.html+'<hr>'+jr.respz.picuploadform+'<hr>'+jr.respz.logstring)
				.html(jr.respz.html)
				.find("#newlistingform")
			 	.attr('action','ajq_saveform_bnr.php')
				.submit(function(){
					submitbannerform(this,jr.respz.targetdiv)  // where is this?
					return false;
					})
				scrollTo(0,100)

			//return  // 26 oct, go for plain old post
			/*************************
				 $(".picform").each(function() {  // set action for form too
				 	prepareUploadform_bnr(this,$(this).attr('id'))
				 				})
				if (chain=="yes") {
						DoenAjax_buildsearchbox_banners('triggeroptionsdisplayarea',chain)
				}
			******************/

   			}
 		});
}



function validateform(formobj) {
	var s="You need to complete the following:\n"
/*	$(formobj).("input").each(function() {s+=$(this).val()})*/
	var notok=0
	$(formobj).find("select").each(function(j) {
			var entry=$(this).val()
			var isreq=$(this).attr("rqurd")
			if (isreq=="yes") {
				if ( entry=="empty"){
					notok++;
					s+=$(this).attr('name')+"\n"//+":"+entry+"=>"+notok+"\n"
					$(this).addClass('failvalidate')
				}
				else $(this).removeClass('failvalidate')
			}
		})
	$(formobj).find("input").each(function(j) {
			var entry=$(this).val()
			var isreq=$(this).attr("rqurd")
			if (isreq=="yes") {
				if (( entry=="empty") || (entry=="")) {
					notok++;
					s+=$(this).attr('name')+"\n"//+":"+entry+"=>"+notok+"\n"
					$(this).addClass('failvalidate')
				}
				else $(this).removeClass('failvalidate')
			}
		})

	$(formobj).find("input").find('.numbersonly')
		.each(function(j) {
			var entry=$(this).val()
			if (isNaN (entry)) {
					numbervalue=stripalpha(numbervalue)
					$(this).val(numbervalue)
					notok++;
					s+=$(this).attr('name')+"\n"//+":"+entry+"=>"+notok+"\n"
					$(this).addClass('failvalidate')
				}
				else $(this).removeClass('failvalidate')
			})

	$(formobj).find("textarea").each(function(j) {
			var entry=$(this).val()
			var isreq=$(this).attr("rqurd")
			if (isreq=="yes") {
				if (( entry=="empty") || (entry=="")) {
					notok++;
					s+=$(this).attr('name')+"\n"//+":"+entry+"=>"+notok+"\n"
					$(this).addClass('failvalidate')
				}
				else $(this).removeClass('failvalidate')
			}
		})

//	var d = new Date()
//	document.write(d.getDate())
//	document.write(d.getMonth() + 1)
//	document.write(d.getFullYear())

	if (notok>0) alert('please complete all the fields shaded in red')
	return notok
}


function submitlistingform(formobj,targetdiv) {
   // only new listings are submitted this way (post)
   // once submitted, the record is treated as existing, and is edited with per field ajax updates
   // to get this going, build an ajax-wrapped form and plug it into the targetdiv -- once ajax is successfull
	restoretimeout()

var debug="no"
 	var poststr=$(formobj).formSerialize()+"&targetdiv="+targetdiv+"&table=listing"
 	//TODO does ajq_saveform.php need a table var?

 	if ((validateform(formobj)==0) ||  (debug=="yes")){  //counts no of erroneous fields

		$.ajax({
   			type: "POST",
   			url: "ajq_saveform.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				if ((jr.respz.invalids) && (debug!="yes") ){
					alert("Please fix these\n"+jr.respz.invalids)
				}
				else {
					$("#picuploadarea").html('') // remove the notice saying "please submit ..."
					$('#'+jr.respz.targetdiv)
					.html(jr.respz.feedback)
					DoenAjax_buildinput_for("listing","record_id",	targetdiv,jr.respz.record_id,'showsteps')
				//					table 	idfield/keyfield	passed back from ajq_saveform
				// this will build an empty ajax-wrapped form,
				// and will chain onto calling contents from the table and plug these into the DOM
				}
   			}
 		});
 	}
}


function submitbannerform(formobj,targetdiv) {
   // only new listings are submitted this way (post)
   // once submitted, the record is treated as existing, and is edited with per field ajax updates
   // to get this going, build an ajax-wrapped form and plug it into the targetdiv -- once ajax is successfull
   //NOTE: hardcoded table in next line
 	var poststr=$(formobj).formSerialize()+"&targetdiv="+targetdiv+"&table=banners"
 	//TODO does ajq_saveform.php need a table var?
 	if (validateform(formobj)==0) {  //counts no of erroneous fields
 		logthis('<span class="removable">Validated. Submitting</span>')

		$.ajax({
   			type: "POST",
   			url: "ajq_saveform_bnr.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
/*targetdiv="tempfeedback"*/
				$('#'+jr.respz.targetdiv)
				.html(jr.respz.html)
				DoenAjax_buildinput_for_plusbanners("banners","record_id",targetdiv,jr.respz.record_id,"yes")
				//					table 	idfield/keyfield	passed back from ajq_saveform
				// this will build an empty ajax-wrapped form,
				// and will chain onto calling contents from the table and plug these into the DOM
   			}
 		});
 	}
}



function DoenAjax_getrow_for(table,tableidfield,recno) { //gets recno from submitting control
	//needs containing controls to be setup
// 	var recno_in_form=document.getElementById("recno") //put the submitted value into form
//	recno_in_form.value=recno
	restoretimeout()

	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno
		$.ajax({
   			type: "POST",
   			url: "ajq_getrow.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				var teststring=""
   				var key
/*   				var i=0*/
   				var sessionlevel=0
   				if (jr.respz.level) var sessionlevel=jr.respz.level
   				if (sessionlevel=="admin") sessionlevel=1
   				if (sessionlevel=="corporate") sessionlevel=2
   				if (sessionlevel=="public") sessionlevel=3
   				if (sessionlevel=="provisional") sessionlevel=4
				if ((jr.tablerow.length==undefined) ||(jr.tablerow.length==0)) {
//						alert('empty record'+"\n"+jr.tablerow.length)
//						return 'x'
				}
				else {
				  for (key in jr.tablerow[0]) {
					var fid=key+jr.respz.recno
					var fval=jr.tablerow[0][key]
					teststring=teststring+fid+"="+fval+"\n"
					if (sessionlevel>0) {
						$('#'+fid).val(fval)
//val for editable, html for non-editable
					}
					else $('#'+fid).html(fval)
				 }
				// now make adminonly fields readonly, set in dbfunct=setupspecs,
				 if (sessionlevel!=1) {
					$('.adminonly').attr('readonly','readonly')
				 }
//				return 'y'
				}//else
				}
 		});
 }


function DoenAjax_updatetable(inputidprefix,inputid,table,field,tableidfield,tableidvalue) {

	if (busysaving) return
	busysaving=true
//	$('#'+inputidprefix+inputid).unbind()
 	var userinput_raw=document.getElementById(inputidprefix+inputid).value
	var userinput=userinput_raw.replace(/\&/g, "(ampersand)")

	var  feedback=document.getElementById("feedback")
	if ($(userinput).is('.numbersonly')) {
			if (isNaN (userinput)) {
					userinput=stripalpha(userinput)
			}
	}
  	var poststr="inputidprefix="+inputidprefix+"&inputid="+inputid+"&table="+table+"&field="+field+"&newvalue="+userinput+"&tableidfield="+tableidfield+"&tableidvalue="+tableidvalue

/*	userinput.style.color="red"
	userinput.value="Updating ..."*/
//	ajaxpack.postAjaxRequest("ajax_updatetable.php", poststr, processGetPost, "txt")
	$('#dummybtn').attr('src','rpspinbig.gif')
		$.ajax({
   			type: "POST",
   			url: "ajq_updatetable.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				$('#'+jr.respz.targetid)//.val(jr.respz.newvalue)
//					.attr('style','color:blue')
//				userinput.style.color="blue"
//				$('#dummysubmit').after('<div id="tempnotice">Submitted</div>')
				$('#dummybtn').children('img').attr('src','rpspinbig.gif')
				window.setTimeout('restoredummysubmit()',2000)
				$('#savingfeedback').html('Saving your input')
				if (jr.respz.newid>0) {
					alert ("Added record: "+jr.respz.newid)
					$('#recid').val(jr.respz.newid) // TODO ?? shouldnt this be recid+local_id
					// added record should get a container with correct dom ids for controls
					DoenAjax_buildinput_for('users','title_id',"addedrec",jr.respz.newid,'hidesteps')
					DoenAjax_getrow_for('users','title_id',r.respz.newid)
				}
				restoretimeout()
			}
 		});
}

function restoredummysubmit() {
//	$('#tempnotice').remove()
	$('#dummysubmit').children('img').attr('src','buttons/savebtn.png')
	$('#savingfeedback').html('Saved')
	busysaving=false
	window.setTimeout('clearsavingfeedback()',3000)
}

function clearsavingfeedback() {
	$('#savingfeedback').html('&nbsp;')
}

function addrec() {
//	var poststr="table="+table+"&tableidfield="+tableidfield+"&recno="+recno+"&targetdiv="+targetdiv
//		target=addedrec, container of New Record control
//						(table,tableidfield,targetdiv,recno)
	DoenAjax_buildinput_for('users','title_id',"addedrec",0,'hidesteps');
	// this should build an empty record control block, when anything is saved, a record will be added
	// however, this will not update the dom control ids ...
	// therefore the returning content (json) from the php script should repaint this control

}
//==========================================
function DoenAjax_addpicuploadcontrol_recno(recno) {
	// with record_id, the rest can be looked up

//($record_id,$picfield,$pictable,$area_id,$listing_id)
// recno===record_id
  var poststr="recno="+recno+"&targetdiv=picuplctrl"+recno
		$.ajax({
   			type: "POST",
   			url: "ajq_buildpicuplctrl.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				$('#'+jr.respz.targetdiv).html(jr.respz.html)
				 $(".picform").each(function() {prepareUploadform(this,$(this).attr('id'))})
				 // upload control sets form class to picform
//				setupfetchedpage()  == in BPMMag, not here
			}
 		});
}
//==========================================
function DoenAjax_addpicuploadcontrol_banner(recno,chain) {
	// with record_id, the rest can be looked up

//($record_id,$picfield,$pictable,$area_id,$listing_id)
// recno===record_id
	var browser='all'
	if ($.browser.msie) var browser="msie"

  var poststr="recno="+recno+"&targetdiv=picuplctrl"+recno+"&browser="+browser
		$.ajax({
   			type: "POST",
   			url: "ajq_buildpicuplctrl_bnr.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				$('#'+jr.respz.targetdiv).html(jr.respz.html)
			/****************************
				 $(".picform").each(function() {
					prepareUploadform_bnr(this,$(this).attr('id'))  // _useradmin.js
					})  // in ...usr_admin.js
				 // upload control sets form class to picform
			/****************************/
				if (chain=="yes") {
						DoenAjax_listbannertriggersfor(recno,"",chain)
				}
			}
 		});
}

//= User Searches=========================================

function DoenAjax_getusersearches(usn) {
	//var usn = document.getElementById('ajxusn').value;
	var poststr="usn="+usn
	logthis(poststr)
	$('#resultarea').html('<img src="rpspinbig.gif">').show()
	$.ajax({
   		type: "POST",
   		url: "ajq_usrsearches.php",
		data: poststr,
		dataType: "json",
   		success: function(jr){
			$('#resultarea').html(jr.respz.html);
			setClickable_runfullsearch('runfullsearch') //rentsa
			setClickable_deletefullsearch('deletesearch')
			setClickable_resavesearch('resavefullsearch')
			$('.extnd').each(function(){
					$(this).unbind()
						.click(function(){
//							DoenAjax_Resavefullsearch($(this).parents("form"),'','')
							var searchrecord_id=$(this).attr('rec')
							DoAjx_extendtrig(searchrecord_id,$(this).attr('title'))
							$(this).next('.canceltrig').show()
						})

					.addClass('clickable')
				})
			$('.canceltrig').each(function(){
					$(this).unbind()
						.click(function(){
							var searchrecord_id=$(this).attr('rec')
							DoAjx_canceltrig(searchrecord_id)
							$(this).hide()
					})
					.addClass('clickable')
				})


			$('.calendarButton').not('.caldone')
					.calendar({autoPopUp: 'both',
							buttonImageOnly: true,
							buttonImage: 'calendar.gif',
							buttonText: 'Calendar',
							minDate : new Date(2007, 1 - 1, 26),
							maxDate : new Date(2020, 1 - 1, 26),
//							yearRange: '0:+5',
							dateFormat : 'YMD-'
					})
				.addClass('caldone');

   		}
	});
}

function DoAjx_canceltrig(searchrecord_id){
		var poststr="cancelsearchid="+searchrecord_id
		$.ajax({
   			type: "POST",
   			url: "ajq_canceltrig.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				$('#trexp'+searchrecord_id).html(jr.respz.newdate)
   			}
		});
}

function DoAjx_extendtrig(searchrecord_id,username){
		var poststr="extendsearchid="+searchrecord_id
		$.ajax({
   			type: "POST",
   			url: "ajq_canceltrig.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
				$('#trexp'+searchrecord_id).html(jr.respz.newdate)
				alert(username+"\n"+jr.respz.sspopup)
   			}
		});
}



function DoenAjax_DeleteSavedSearch(searchrecord_id) {
	if (confirm("Do you want to delete this saved search?")) {
		$("#savebuttons"+searchrecord_id).hide()
		$("#runbutton_"+searchrecord_id).hide()
		var poststr="delsearchid="+searchrecord_id

		$.ajax({
   			type: "POST",
   			url: "ajq_deletesavedsearch.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				$('#searchheader'+jr.respz.id).html(jr.respz.feedback);
   			}
		});
	}
}

function DoenAjax_Resavefullsearch (formobj) {
// uses the search record id and saves over it ==> resavesearch in dbfunct
// gets containing form
		pq="nopq"
//	var poststr="step="+step+"&pq="+encodeURIComponent(pq)
//		$("#"+targetdiv).html('<img src=tiny_red.gif')
		var targetdiv=$(formobj).attr('id')
		$(formobj).find(".resavefullsearch").fadeOut("slow")

//		return
 		var poststr=$(formobj).formSerialize()+"&targetdiv="+targetdiv
		//alert(poststr)
		$.ajax({
   			type: "POST",
   			url: "ajq_resavefullsearch.php",
			data: poststr,
			dataType: "json",
   			success: function(jr){
   				$('#'+jr.respz.targetdiv).html(jr.respz.feedback)
				$('#trexp'+jr.respz.record_id).html('expires '+jr.respz.newdate)
				$(formobj).find(".resavefullsearch").fadeIn("slow")
   			}
		});
}

function hidesteps() {
	$('#nwlsteps').remove()
}