//
/*
This page for generic text and image objects with their  handling*/
//alert('got generic')
///  gather divs & co into field groups from containing div
function grabElements(skin){
	els = skin.getElementsByTagName("*")
	sep = skin.sep ? skin.sep : '_'
	skin.flds = Array()
	des = ""
	var fry = skin.flds
	for(oi=0;oi<els.length;oi++){
		if(els[oi].id == "dv-rwfar"){
			skin.infrw = els[oi]
		}
		if(els[oi].id == "spkey"){
			skin.spkey = els[oi]
		}		
		if(els[oi].id && els[oi].id.indexOf(sep) > 0){
			obts = els[oi].id.split(sep)
			ofld = obts[1] + '_' + obts[2]
			var fobj =  kgetv(fry, ofld, true)
			fobj[1].fld =ofld
			fobj[1].dad = skin
			if((!obts[3]  || obts[3]>0) && obts[0] == "dv" && obts[1] != "btn"){  //grab htm showing div
			
				fobj[1].htm = els[oi]
				fobj[1].htm.dad = fobj[1]
				fobj[1].htm.fnm = ofld
			}
			else if(obts[0] == "cln"){
				if(obts[3] == "lnm"){
					fobj[1].clnm = els[oi]
					fobj[1].clnm.dad = fobj[1]
				}
				else if(obts[3] == "skn"){
					fobj[1].skn = els[oi]
					fobj[1].skn.dad = fobj[1]					
				}
				else if(obts[3] == "init"){
					fobj[1].init = els[oi]
					fobj[1].init.dad = fobj[1]					
				}
				else if(obts[4] == "new"){
					fobj[1].add = els[oi]
					fobj[1].add.dad = fobj[1]			
				}
			}
			else if(obts[0] == "bar"){  ///  grab edit showing div
				if(obts[3] == "grp"){
					fobj[1].grp = els[oi]
					fobj[1].grp.dad = fobj[1]
				}
				if(obts[3] == "spn"){
					fobj[1].spn = els[oi]
					fobj[1].spn.dad = fobj[1]
				}
				
			}
			else if(obts[0] == "onf"){  ///  grab edit showing divgrpspnspn
				if(obts[3] == "on"){
					fobj[1].dvon = els[oi]
					fobj[1].dvon.dad = fobj[1]
				}
				if(obts[3] == "off"){
					fobj[1].dvoff = els[oi]
					fobj[1].dvoff.dad = fobj[1]
				}
				
			}
			else if(obts[0] == "dte"){
				if(obts[3] == "edt"){
					fobj[1].edt = els[oi]
					fobj[1].edt.dad = fobj[1]				
				}
				if(obts[3] == "shw"){
					fobj[1].shw = els[oi]
					fobj[1].shw.dad = fobj[1]				
				}
				if(!obts[3] && isNaN(obts[1])){
					fobj[1].htm = els[oi]
					fobj[1].htm.dad = fobj[1]
				}
				
			}
			else if(obts[0] == "lnm"){// grab the commentator
				//alert("got lnm")
				skin.lnm = els[oi]
				skin.lnm.dad = skin
			}
			else if(obts[0] == "dvx"){///  grab edit showing div
				fobj[1].dvx  = els[oi]
				fobj[1].dvx.dad = fobj[1]
			}
			else if(obts[1] == "btn"){// a pseudo field keep away from data 
				
				fobj[1].btn = els[oi]
				fobj[1].btn.dad = fobj[1]
			}
			else if(obts[0] == "dv"){///  grab edit showing div
				fobj[1].edt  = els[oi]
				fobj[1].edt.dad = fobj[1]
			}
			else if(obts[0] == "img"){/// as tag
				fobj[1].pic  = els[oi]
				fobj[1].pic.dad = fobj[1]
			}
			else if(obts[0] == "txt"){
				fobj[1].tx  = els[oi]
				fobj[1].tx.dad = fobj[1]
				fobj[1].tx.fld =ofld
			}
			else if(obts[0] == "ddl"){
				fobj[1].ddl = els[oi]
				fobj[1].ddl.dad = fobj[1]
			}
			else if(obts[0] == "com"){// comment, essentially a sub text-field to an image object
				fobj[1].com = els[oi]
				fobj[1].com.dad = fobj[1]
			}
			else if(obts[0] == "off"){// the off icon for a flip button
				//alert("got off icon")//
				fobj[1].off = els[oi]
				fobj[1].off.dad = fobj[1]
			}
			else if(obts[0] == "upl"){// upload
				fobj[1].upl = els[oi]
				fobj[1].upl.dad = fobj[1]
			}
			
			else{
				if(!(fobj[1].elms && fobj[1].elms[0])){// may be useful
					fobj[1].elms = Array(els[oi])
				}
				else{
					fobj[1].elms[fobj[1].elms.length] = els[oi]
				}
			}
		}
		else if(sep == '-' && els[oi].id){
			des += '\n' + els[oi].id
		}
	}	
	//alert("grab el, sep is: " + sep + "\n" + fry.length + '\nels no.\n' + els.length + des)
	return 1
}
////  object to handle icons
function icob(htm){/**/
	var im = htm.dad.pic
	htm.onsrc = im.src.replace(/^.+?ssets/, "assets")  ////// stored in assets folder
	htm.offsrc = htm.onsrc.replace(/\.gif$/i, "-no.gif")
	htm.onedy = "this.htm.style.display = 'block';"
	htm.onedn = "if(this.pic.src.indexOf(this.htm.offsrc) + 1){this.htm.style.display = 'none'};"
	htm.dad.setv = function(rstr){

				this.id = 'dv_' + this.fld + '_' + document.curnntid
				vl = rsval(rstr, this.fld)
				this.pic.src = (vl.indexOf(".gif") != -1)? this.htm.onsrc  : this.htm.offsrc 
				this.htm.style.display = this.htm.style.border.indexOf("dashed") + 1  || vl.indexOf(".gif") != -1 ? "block" : "none"
	}
	htm.goedt =  function(){
				if(confirm("Ok to change icon\nCancel to leave as is")){
					var vbts = this.dad.id.split("_")
					dbfld = this.dad.fld
					this.dad.pic.src = (this.dad.pic.src.indexOf("-no.") + 1)  ? this.onsrc : this.offsrc
					vl = (this.dad.pic.src.indexOf("-no.") + 1) ? 0 : this.onsrc
					arg = dbfld + '~c~' + vl + '~c~' +  vbts[3]
					kzam("cmupd",  arg)
					//alert(arg)
				}
			}
	htm.dad.setedt = gensetedt
	//htm.setedt = unfunc;
	htm.onblur = unfunc
}
function gensetedt(bl){		
	// general set edit ie. do dashed border add ability to click

		if(bl){	///  boolean bl true so go to edit
			this.htm.style.border = "2px dashed #009933"
			this.htm.style.display = "block"
			nixlnk(this.htm, true)/// stops linked images/text acting as a link when you want to edit
			this.htm.onclick =  this.htm.goedt				
			if(this.htm.onedy){eval(this.htm.onedy)}   ///alert(this.id);
		}
		else{/// or remove and restore
			this.htm.style.border = ""
			this.htm.onclick = null
			nixlnk(this.htm, false)
			
			if(this.htm.onedn){eval(this.htm.onedn)}
			//alert(this.htm.style.border);
		}

}
////////////////////////////                                        Star picker   
function strob (htm){
	var im = htm.dad.pic
	var ed = htm.dad.edt
	if(im && ed){
		htm.onedy = "this.htm.style.display = 'block';"
		htm.onedn = "if(!this.pic){this.htm.style.display = 'none'};"
		htm.dad.setv =  function (rstr){
					this.id = 'dv_' + this.fld + '_' + document.curnntid				
		
					vl = rsval(rstr, this.fld)
					this.pic.src = vl ? vl : ""
					this.htm.style.display = vl ? "block" : "none"
					//this.onclick = this.goedt
					
				}				
		im.quit = function(){
					this.dad.edt.style.display = "none"
				}
		htm.dad.setedt = gensetedt				
		htm.goedt =  function (){

					this.dad.edt.style.border = "2px solid #009933"
					this.dad.edt.style.display = "block"
					this.style.display = "block"
					this.dad.edt.innerHTML = "Click to Pick"
					
					
					for(var i=0;i<7;i++){
						var nd = document.createElement("div")
						var op = this.dad.edt.appendChild (nd)
							op.pic = this.dad.pic
						if (i == 6) {
							opsrc = "assets/basca-icon-available-soon.gif"
							//op.innerHTML = opsrc
							op.val = opsrc
							var imnd = document.createElement("img")
							var opim = op.appendChild (imnd)
							opim.src = opsrc/**/						
						}
						else if(i){
							opsrc = "assets/basca-icon-" + i + "star.gif"
							//op.innerHTML = opsrc
							op.val = opsrc
							var imnd = document.createElement("img")
							var opim = op.appendChild (imnd)
							opim.src = opsrc/**/						
						}
						else{
							op.innerHTML = "None"
							op.val = ''
						}						

						
						op.onclick = function (){
									this.parentNode.style.display = "none"
									this.parentNode.innerHTML = ""
									if(this.pic.src != this.val){
										bs = this.pic.dad.id.split("_")
										arg = bs[1] + '_' + bs[2] + '~c~' + this.val  + '~c~' + bs[3]
										//alert(arg)//
										
										kzam("cmupd",  arg)
									}
								}
					}
				}
	}
	else{
		alert("Need the ingredients for an star object")
	}	
}
function unfunc(){
	return 1
}
///  initialize text, image objects etc.
function initobjs(skin){
	sep = skin.sep ? skin.sep : '_'
	//alert("in init")
	if(skin.flds && skin.flds[0][1]){
		var fry = skin.flds
		for(var i=0;i<fry.length;i++){
			var bts = fry[i][0].split(sep)
			//fdnm = bts[1] + '_' + bts[2]
			var fdob = fry[i][1]
			if(fdob.htm && fdob.tx && fdob.edt){
				if(fdob.dvx){
					mkxptxob(fdob)
				}
				else{
					mktxob(fdob)
				}
				
				document.lnm.innerHTML += "Text object " + fdob.fld+ "<br>"
			}
			if(fdob.shw && fdob.edt){
				//alert("off datin")
				mkdteob(fdob)
			}
			if(fdob.skn && fdob.add){
				//alert("off subclonin")
				mksubcln(fdob)
				document.lnm.innerHTML += "<br>sub clone object " + fdob.fld
			}	
			if(fdob.htm  && fdob.pic && (fdob.fld.indexOf("ico") > 0)){
				icob(fdob.htm);
				document.lnm.innerHTML += "<br>Icon object " + fdob.fld
			}			
			else if (fdob.htm  && fdob.pic && ((fdob.fld.indexOf("str") > 0) || (fdob.fld.indexOf("max") > 0) || (fdob.fld.indexOf("min") > 0))){
				strob(fdob.htm);
				document.lnm.innerHTML += "<br>Star object " + fdob.fld
			}		
			else if(fdob.htm && fdob.pic && fdob.edt){
				mkimob(fdob)
				//document.lnm.innerHTML += "<br>Image object " + fdob.fld
			}							
			if(fdob.htm &&  bts[1] == "upl"){
				//alert("in init upl")
				mkupld(fdob)
				document.lnm.innerHTML += "<br>upload object " + fdob.fld
			}
			else if(fdob.btn){
				//alert(" in mkbtn")
				mkbtn(fdob)
				document.lnm.innerHTML += "<br>btn object " + fdob.fld
				
			}
			else if(fdob.off  && fdob.htm && fdob.edt){
				mkicob(fdob)
				document.lnm.innerHTML += "<br>Icon object " + fdob.fld
			}			
			
			if(fdob.grp && fdob.spn){
				//alert("off subclonin")
				mkbarobj(fdob)
				document.lnm.innerHTML += "<br>bar object " + fdob.fld
			}
			if(fdob.dvon && fdob.dvoff){
				//alert("off subclonin")
				mkonfobj(fdob)
				document.lnm.innerHTML += "<br>on/off object " + fdob.fld
			}
			if(fdob.upl && fdob.pic){
				//alert("off upl img\n" + fdob.fld + '\n' + fdob.htm.id)
				mkimupob(fdob)
				document.lnm.innerHTML += "<br>img upl object " + fdob.fld
			}
			
		}		
	}
	else{
		alert("no fields on " + skin.id)
	}
}

//###########################################
//###########            text object         #################
function mktxob(fdob){
	fdob.typ = "t"
	fdob.setv = txsetv
	fdob.setedt = txsetedt
	//fdob.goedt = txgoedt
	fdob.tx.auto = true // default auto update onblur
	//if(pgspc){pgspc(fdob) } // opportunity to customize on the page's own js file
}



function txsetv(rstr){
	
	var vl = rsval(rstr, this.fld)
	// Oliver H 12.8.06
	if (vl && !document.isbeingedt) { //vl = vl.replace(/\[link:(.*)\](.*)\[\/link\]/g, "<a href='$1' target='_blank'>$2</a>"); 
		vl = vl.replace(/(\S+?@\S+?\056\S+)/g, "<a href='mailto:$1' class='blue-link'>$1</a>");
		vl = vl.replace(/(www\056\S+)/g, "<a href='http://$1' class='blue-link' target='_blank'>$1</a>");
	}
	this.htm.innerHTML = vl ? vl : "*"
	this.tx.value = vl ? vl : "*"
	this.htm.style.display = (vl && (this.fld != "event_srt")) ? "block" : "none"  
	this.edt.style.display = "none"
	//document.lnm.innerHTML += "<br> val :" + vl.substr(0,20)
	if(this.onsetv){eval(this.onsetv)}
}

function txsetedt(bl){
	
	var vl = this.htm.innerHTML
	this.htm.style.display =   "block"
	//alert(bl+" "+document.isbeingedt)
	// Oliver H 12.8.06
	if (!bl && !document.isbeingedt) { // vl = vl.replace(/\[link:(.*)\](.*)\[\/link\]/g, "<a href='$1' target='_blank'>$2</a>"); 
		vl = vl.replace(/(\S+?@\S+?\056\S+)/g, "<a href='mailto:$1' class='blue-link'>$1</a>");
		vl = vl.replace(/(www\056\S+)/g, "<a href='http://$1' class='blue-link' target='_blank'>$1</a>");
	}
	if (!bl) this.htm.innerHTML = vl;
	
	this.htm.style.border = (bl ? ("2px dashed #009933") : "none")
	nixlnk(this.htm, bl)
	//alert("a");

	//alert("b");
	// Oliver H 
	//alert(this.onsetedt);
	if (bl) this.htm.onclick = txgoedt
	else this.htm.onclick = clicknull
	// Oliver H 
	if(this.onsetedt && bl){eval(this.onsetedt)}
	//else this.htm.onclick = clicknull
}
 function txgoedt(bl){
	var tx = this.dad.tx
	var edt = this.dad.edt
	mkactv(tx)
	if(tx){
		txvl = txtohtm(this.innerHTML, false)
		tx.value = txvl
		this.style.display = "none"
		edt.style.display = "block"
		tx.dty = txvl  //dirty, ie. store original value to check if altered
		tx.onblur = txonblur
		//tx.focus()
	}
	else{
		alert("no tx for " + this.id)
		
		/*htmvl = txtohtm(this.htm.innerHTML, true)
		this.htm.innerHTML = htmvl
		this.htm.style.display = "block"
		this.tx.style.display = "none"*/		
	}
	if(this.ongoedt){
		//alert(this.ongoedt)
		eval(this.ongoedt)
		
	}
	
}
function txonblur (){
	//alert("blurrin")
	if(this.lgn){///  overloading for log on use 
		dologon.call(this)//// booking-1sr.js
	}
	else{
		if((this.dty != this.value) && this.auto){
			fnm = this.dad.fld
			dbid = this.dad.dad.rwid
			
			arg = fnm + '~c~' + txtohtm(this.value, true) + '~c~' + dbid 
			//alert("tx arg\n" + arg)
			kzam("doupdt", arg)
		}
		else{
			this.dad.edt.style.display = "none"
			this.dad.htm.style.display = "block"
		}
	}
}
//###########            end text obj       #################



//###########################################
//###########            image object         #################
function mkimob(fdob){
	//alert("a");
	fdob.typ = "i"
	fdob.setv =imsetv
	fdob.setedt = imsetedt
	fdob.goedt = imgoedt
	fdob.imid = document.curnntid;
	
}
function imsetv(rstr){
	vl = rsval(rstr, this.fld)
		//if(bts[2] == "pc1"){alert(this.id + '\n' + vl)}
	///alert(this.fld)
	if(vl.indexOf(":IM:") + 1){
		var b = vl.split(":IM:")
		vl = b[0]
		if (this.com) { 
		this.com.innerHTML = b[1]; 
		}
		
	}
	if (this.pic.src ) { this.pic.src = vl ? vl : ""; }
	else { this.pic.innerHTML = vl ? vl : ""; }
	this.htm.style.display = vl ? "block" : "none"   ///// default hide div if no image
	if(this.onsetv){eval(this.onsetv)}
}
function imsetedt(bl){
	this.htm.style.display = "block"
	this.htm.style.border = bl ?  ( document.edbrd ? document.edbrd : "2px dashed #009933")  : "none"
	nixlnk(this.htm, bl)
	// Oliver H 	
	if (bl) this.htm.onclick = imgoedt
	else this.htm.onclick = clicknull	
	// Oliver H 
	if(this.onsetedt && bl){
		eval(this.onsetedt);
	}
	else this.htm.onclick = imupgoedt;
}
function imgoedt(){
	//alert("imgo id\n" + this.id + '\n' + this.dad.pic.src + '\n'  + this.dad.dad.rwid)
	this.dad.edt.style.border = "2px solid #009933"
	this.dad.edt.style.display = "block"
	this.style.display = "block"
	//this.dad.edt.innerHTML = "Click to Pick"
	if(this.dad.com){
		//this.dad.tx.value = txtohtm(this.dad.com,false)
		txgoed.call(this)
	//alert("boo -")
	}
	if(document.actv && document.actv.onblur){
		document.actv.blur()
	}
	document.actv = this
		whwd = " and img_fld = '"+  this.dad.fld +"'"

	//alert(this.dad.dad.cmpid)

	arg = "where 1" + (whwd ?  whwd : "") 
	//alert(arg)
	kzam("getims",  arg)  ////////////   ##  returns to   mkimpck	
}

function mkimpck(str){
	var ht = document.actv
	var ed = ht.dad.edt
	ed.style.zIndex = "10"
	var cols = 3
	//alert(str.replace(/:R:/g, '\n'))
	if (ed && str && ht){
		ed.datry = str.indexOf(":R:") + 1 ? str.split(":R:") : Array(str)
		tot = ed.datry.length
		ed.style.border = "2px solid #009933"
		ed.style.width ="340px"
		vardvttl = mkel(ed,'div')
		//vardvttl.className = "property-name-sr"  ///////#### in style-properties.css
		vardvttl.innerHTML = "Wizzy-dizzy piccy picker<br><span style='font-size:.4em;'>Click here to close</span>"
		vardvttl.edt = ed 
		vardvttl.onclick = function(){
				this.edt.style.display = "none"
				this.edt.innerHTML = ""						
					}
		for(var i =0 ; i< tot ; i++){
			if(!(i%cols)){
				var rw = mkel(ed,'div')
				var sf = mkel(rw,'div')
				sf.style.clear = "both"
				rw.sf = sf
				rw.style.margin = "5px 5px 5px 5px"
				ed.rw = rw
			}
			url = rsval(ed.datry[i],"img_url")
			id =  rsval(ed.datry[i],"img_id")
			var exo = mkdblcell(ed.rw)
			exo.style.margin = "5px 5px 5px 5px"
			var im = mkel(exo.endo, 'img')
			im.style.height = "50px"
			im.style.width = "auto"
			im.src =url
			exo.endo.htm = ht
			exo.endo.url = url
			exo.endo.onclick = picclk
		}
		//alert("In impck\n" + str +'\n'+ ht.id +'\n'+ ed.id)
	}
	
}
function picclk(){
	this.htm.dad.edt.style.display = "none"
	this.htm.dad.edt.innerHTML = ""
	//alert("got it \n" + this.htm.dad.pic.src + '\n' + this.url)
	if(this.htm.dad.pic.src.indexOf( this.url) == -1){
		bs = this.htm.id.split("_")
		//alert("Pickin' \n" + bs[1] + '_' + bs[2] + '~c~' + this.val  + '~c~' + bs[3] )
		imvl = this.url.replace ( /^.+?_basca-active./, "")
		//alert("im val " + imvl)
		cmvl = ( this.htm.dad.com ? ':IM:' + txtohtm(this.htm.dad.tx.value, true) : "" )
		//alert("cm val " + cmvl)
		
		arg = bs[1] + '_' + bs[2] + '~c~' + imvl  + cmvl + '~c~' +this.htm.dad.dad.rwid
		if(document.actv && document.actv.onblur){
			document.actv.blur()
		}/**/
		alert(arg)//////
		document.actv = this.htm.dad.pic
		kzam("doupdt",  arg)
	}
	
	return false
}

//###########            end image obj       #################

//###########################################
//###########         on/off   icon object         #################
function mkicob(fdob){
	var htm = fdob.htm
	var edt = fdob.edt 
	var off = fdob.off
	if(htm && edt && off){
		fdob.typ = "c"
		fdob.setv =icsetv
		fdob.setedt = icsetedt
		fdob.goedt = icgoedt
		fdob.onseted = "this.iconst()"
		fdob.iconst = iconset
		//
	}
	else{
		alert(htm.id +  '\n' +  edt.id +  '\n' +  off.id)
	}
}
function icsetv(rstr){	
	vl = rsval(rstr, this.fld)
	//alert("val icon" + vl)
	this.vl = vl
	this.off.style.display = (vl  ==1 ? "block" : "none")
	this.htm.style.display = (vl  ==1 ? "none" : "block")
	this.dad.style.display = ((vl  ==1) && (document.admin != -1) ? "none" : "block")
	if(this.onsetv){eval(this.onsetv)}
	
}
function icsetedt(bl){
	this.edt.style.display = bl ? "block" : "none"
	// Oliver H 	
	if (bl) this.edt.onclick = icgoedt
	else this.edt.onclick = clicknull	
	if(this.onseted){eval(this.onseted)}
}
function iconset(){
	var hde = this.off	
	vl = (hde.style.display == "none" ? 1  : 0)
	//alert ("onset\n" + document.admin + '\n' + vl)
	this.dad.style.display = ( (this.vl  ==1) && (document.admin != -1) ? "none" : "block")	
}
function icgoedt(){
	var shw = this.dad.htm
	var hde = this.dad.off
	//shw.style.display = (shw.style.display == "none") ?  "block"  : "none"
	//hde.style.display = (hde.style.display == "none") ?  "block"  : "none"
	vl = (hde.style.display == "none" ? 1  : 0)
	fnm = this.dad.fld
	dbid = this.dad.dad.rwid
	arg = fnm + '~c~' + vl + '~c~' + dbid 

	mkactv(this)
	kzam("doupdt", arg)
	//alert(this.id)
}
//###########            end icon obj       #################

//###########################################
//############     upload object             ###############
function mkupld(fdob){
		//alert("got upload")//
		fdob.setedt =  uplsetedt
		fdob.htm.onclick = function (){
					
					var upmg = document.upld
					if(upmg.style.display != 'block'){
						upmg.style.display = 'block'
						upmg.style.left = "200px"
						//upmg.style.top = "100px"
						upmg.style.top = document.body.scrollTop;
						
						var f = document.pat
						f.hidcmpid.value =  document.admin/*this.id.substr(11,4)*/
						
						f.filupm.focus()
						}
					else{
						upmg.style.display = 'none'
					}
					//alert("you clicked sir")
				}
			
}
function uplsetedt(bl){
	this.htm.style.display = (bl ? 'block' : "none" )
	this.htm.style.top = document.body.scrollTop;
	
	//alert(this.htm.style.display )
}

//############     end upload object             ###############

//###########################################
//############     button object             ###############(altered.........
function mkbtn(fdob){
	//alert(fdob.btn.id)
	fdob.setedt = btnedt
	fdob.btn.onclick = gebtnclk
	if(fdob.dad && fdob.dad.rwid > 0){
		fdob.btn.id += '_' + fdob.dad.rwid
	}
	document.lnm.innerHTML += "<br> made button :" +fdob.btn.id
}
function btnedt(bl){
	this.btn.style.display = bl ? "block" : "none"
}
function gebtnclk(){
	tab = this.id.substring(11,20)
	evu = rsval(this.dad.dad.rwdat, "evu_id") //
	vnu = rsval(this.dad.dad.rwdat, "vnu_id")
		//alert('vnu' + vnu + '\nevu' + evu)
	if(this.id.indexOf("new-") > 1){
		kzam("mknew", tab)
	}
	else if(this.id.indexOf("del-evr") > 1){//// ****	not generic**********
		if(confirm("Now I'm quite serious\nThis will excoriate Room rate number " + tab)){
			this.dad.dad.actab = null
			kzam("nixit", tab)
		}
	}	
	else if(this.id.indexOf("del-xfn") > 1){//// ****	not generic**********
		if(confirm("Now I'm quite serious\nThis will excoriate Room rate number " + tab)){
			this.dad.dad.actab = null
			kzam("nixit", tab)
		}
	}	
	else if(this.id.indexOf("del-vnu") > 1){
		if(confirm("Now I'm quite serious\nThis will Remove the Hotel " + tab)){
			this.dad.dad.actab = null
			kzam("nixit", "evu_" + evu + ":D:vnu_" + vnu)
		}
	}
	else if(this.id.indexOf("unl-vnu") > 1){
		if(confirm("This will unlink the Hotel\n from this event " + tab)){
			this.dad.dad.actab = null
			kzam("nixit", "evu_" + evu)
		}
	}
	else if(this.id.indexOf("btn_mor") > 1){
		more_details(this.id);
	}
	else if(this.id.indexOf("btn_new") > 1){
		newprop();
	}
	else if(this.id.indexOf("btn_del-event") > 1){
		specevid = this.id.split("_");
		delevt(specevid[3]);
	}	
	else if(this.id.indexOf("btn_del") > 1){
		delprop();
	}	
	else{
		//alert("you clicked " + this.id)
	}
}
//############     end button object             ###############


////////////////////////////////////////////////////////////////
//////////////         on/off object     //////////////////////////////
//////          similar to icon really :(   /////////////
function mkonfobj(fo){
	fo.setedt = onfsetedt
	fo.setv = onfsetv
	fo.htm.onclick = onfclk
}
function onfsetedt(bl){
	this.htm.style.border = (bl) ? "2px dashed #009933" : "none"
}
function onfsetv(rstr){
	var bts = this.htm.id.split("_")
	idvl = rsval(rstr, bts[1] + "_id")
	this.htm.id += "_" + idvl
	vl = rsval(rstr, bts[1] + "_" + bts[2])
	this.val = vl
	alert(rstr + '\n' + vl + '\n fld  ' + bts[1] + "_" + bts[2])
	this.dvon.style.display =  (vl != 0) ?  "block" : "none"
	this.dvoff.style.display =  !(vl != 0) ?  "block" : "none"
}
function onfclk(){
	if(this.dad.dvon.style.display == "block"){
		this.dad.dvon.style.display = "none"
		this.dad.dvoff.style.display = "block"
		this.dad.val = 0
	}
	else{
		this.dad.dvon.style.display = "block"
		this.dad.dvoff.style.display = "none"
		this.dad.val = 1
	}
	fnm = this.dad.fld
	dbid = this.dad.dad.rwid
	
	arg = fnm + '~c~' + this.dad.val + '~c~' + dbid 
	//alert(arg)
		kzam("doupdt", arg)
}
///////////////////            end on/off         //////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////
//###########    Sub Clone object     #####################
/////////////////////////////////////////////////////////////////////////////////////////////////
function mksubcln(fob){
	/*if(fob.skn){alert("got skn\n" + fob.skn.id)}
	if(fob.add){alert("got add\n" + fob.add.id)}
	if(fob.clnm){alert("got lnm\n" + fob.clnm.id)}*/
	//alert("in sub clone")
	fob.add.onclick = sbclck
	fob.setv = sbcsetv
	fob.skn.sep = '-'
	initdat = fob.init.innerHTML
	fob.mpt = rsval(initdat, "mpt")
	fob.nql = rsval(initdat, "nql")
	fob.mkcl = mkcln
	fob.setedt = sbsetedt
}
function sbclck(){
		ql = this.dad.nql.replace(/~id~/, this.dad.evuid)
		
		kzam("sbnew", ql)
		//alert(ql)
	
	
	//alert("New Sub clone")
}
function sbcsetv(rstr){
	var i=0
	if(document.tabrow.dat){
		sbdat= document.tabrow.dat.replace(/^.+?:SB:/,"")
		this.evuid = rsval(rstr, this.fld)
		rmry = rsrow(sbdat,  this.fld + ":V:" + this.evuid)
		//alert(this.evuid)
		if(rmry.length){
			this.clnm.style.display = "none"
			this.clnm.innerHTML = ""
			for(;i<rmry.length;i++){
				//alert("sub clone loop\nsep is" + this.skn.sep)
				if(!this.clns){
					this.clns = Array()
				}
				if(!this.clns[i]){
					this.clns[i] = this.mkcl(rmry[i])
				}
				this.clns[i].setv(rmry[i])
				this.clns[i].style.display =  "block" 
			}
			//alert("got 'un\n" + rmry[0])
		}
		else{
			this.clnm.style.display = "block"
			this.clnm.innerHTML = this.mpt
		}
	}
	if(this.clns){
		for(;i < this.clns.length; i++){
			this.clns[i].setv("")
			this.clns[i].style.display =  "none" 
		}
	}
}
function sbsetedt(bl){

	if(this.clns){
		for(var i=0;i<this.clns.length;i++){
			this.clns[i].setedt(bl)
		}
		alert("cycled clones\n" + i)
	}
}
////#############   end sub clone    ######################

///////////////////////////////////////////////////////////
///##############   Expandable text object     ############
function mkxptxob(fo){
	mktxob(fo)
}

function xpclk(ths){
	//alert(ths.parentNode.dad.tx.id + '\n' + ths.innerHTML)
	ths.parentNode.dad.tx.value = ths.innerHTML
	//alert(ths.parentNode.dad.tx.id + '\n' + ths.innerHTML)
	txonblur.call(ths.parentNode.dad.tx)
	//alert(ths.parentNode.id)
}
//////////////////     end Expandable    //////////////////

///############# category  object  ########################
function initcat(catdat){
	var tmp = document.getElementById("dv-ct-tmp")
	
	if(tmp && tmp.parentNode){
		document.catmp = tmp
		document.catmp.dat = catdat
		var dadv = tmp.parentNode
		dadv.dad = ""
		dadv.dad.kids = Array()
		dadv.sbcts = Array("cat_dad:V:-1:F:cat_nme:V:Main:F:cat_id:V:0")
		document.catmain = new mkctob(dadv , 0)
		document.catmain.txi.innerHTML = "Main"/**/
		////document.catmain.catid = 0
	}
	else{
		alert("no tmp man")
	}
	
}
function catclk(){	
	//alert("cat click\n" + this.dad.sbcts ?  this.dad.sbcts.length : "no subcats")////
	if(this.dad.im.className == "cat-pls"){
		if(this.dad.sbcts && this.dad.sbcts.length >0){		
			var sbcats = this.dad.sbcts
			msgc = "" //"boo\n" + reg + "\n" + sbcats.length
			if(sbcats && sbcats.length){
				
				for(i=0;i< sbcats.length;i++){
					var nmry = sbcats[i].match(/:cat_nme:V:([^:]+):F:cat_id:V:([0-9]+)/)
					var newb = new mkctob(this.dad.txo,nmry[2])
					//alert(nmry[1])
					newb.txi.innerHTML = nmry[1]
					//newb.catid = nmry[2]
					//msgc += (nmry) ? "\nAnd \n" + nmry[1] + " (" + nmry[2] + ")" : "\noops\n" + sbcats[i]
				}		
			}
			this.dad.im.className = "cat-mns"
		}
	}
	else{
		while(this.dad.txi != this.dad.txo.lastChild){
			var foo =  this.dad.txo.removeChild(this.dad.txo.lastChild)
			this.dad.im.className = "cat-pls"
		}
		this.kids = Array()
	}
}
function mkctob(dad, ctid){
	
	var tmp = document.catmp
	var nd = tmp.cloneNode(true)
	var tm =  dad.appendChild (nd)
	var dvs = tm.getElementsByTagName("div")
	for(var i=0;i<dvs.length;i++){
		if(dvs[i].id == "dv-ct-im"){
			tm.im = dvs[i]
			dvs[i].onclick = catclk
		}
		else if(dvs[i].id == "dv-ct-txi"){
			tm.txi = dvs[i]
			dvs[i].onclick = catclk
		}
		else if(dvs[i].id == "dv-ct-txo"){
			tm.txo = dvs[i]
			//dvs[i].onclick = catclk
		}
		dvs[i].dad = tm
	}
	tm.catid =  ctid
	
	tm.kids = Array()
	if(dad.dad.kids){
		var l = dad.dad.kids.length
		dad.dad.kids[l] = tm
		tm.ind = l
	}
	else{
		//alert("no kids")
	}
	tm.style.display =  "block" 
	catdat = document.catmp.dat
	if(catdat){
		reg = new RegExp("cat_dad:V:" +ctid + ":F:cat_nme:V:([^:]+):F:cat_id:V:([0-9]+)", "g")
		var subcats = catdat.match(reg)
		if(subcats && subcats.length > 0){
			tm.im.className = "cat-pls"
			tm.sbcts = subcats
			//alert("set subcats\n" + ctid)
		}
		else{
			tm.im.className = "cat-mns"
			tm.sbcts = ""
			//alert(" not  set subcats\n" + ctid)
		}
		
		msgc = "" //"boo\n" + reg + "\n" + sbcats.length
		/*for(i=0;i< sbcats.length;i++){
			nmry = sbcats[i].match(/:cat_nme:V:([^:]+):F:cat_id:V:([0-9]+)/)
			var newb = new mkctob(this.dad.txo)
			
			newb.txi.innerHTML = nmry[1]
			newb.catid = nmry[2]
			msgc += (nmry) ? "\nAnd \n" + nmry[1] + " (" + nmry[2] + ")" : "\noops\n" + sbcats[i]
		}		*/
		//alert(msgc)// && nmry[1]
	}
	return tm
	//if(dad){alert(" in mkcat")}else{alert("no dad man")}///////////////
}
function gotcat(catdat){
	initcat(catdat)
	//alert("got cat \n" + catdat)
}
///#############  end tree object  ########################

////###############   Date object     #####################
function mkdteob(fo){
	alert("in mkdte")
	fo.setv = dtesetv
	fo.setedt = function (bl){
		this.htm.style.border = (bl ?  document.edbrd : "none")
		this.htm.style.display = (bl ?  "block" : "none")
		// Oliver H 		
		if (bl) this.htm.onclick = dtegoed
		else this.htm.onclick = clicknull		
		alert("in mkdte setedt")
	}
	alert("out mkdte")
	//this.htm.goedt = dtegoed
	fo.edt.gotdte = dtegot
}
function dtesetv(rstr){
	alert("in mkdte setv")
	vl = rsval(rstr, this.fld)
	this.htm.style.display ="block"
	this.htm.innerHTML = (vl ? vl : "*")
	
	
}
function dtegoed(){
	this.dad.edt.style.display = "block"
	//alert("go ed\n" + this.dad.edt.id)
	this.style.display = "none"//
}
function dtegot(){
	alert("got it\n" + this.val)
}
///###############   end Date object   #####################

////###############   image upload object   #####################
function mkimupob(fo){	
	fo.fil = document.getElementById("filupl")
	fo.fil.dad = document.getElementById("edt-upl")	/// div contains all assoc form objects, anywhere on page	
	fo.fil.ttldv = document.getElementById("edt-upl-ttl")
	fo.fil.onchange = doupl ///// set in local js
	fo.setv = imsetv
	fo.onsetedt = "this.htm.onclick = imupgoedt"
	fo.setedt= imsetedt
	
}
function imupgoedt(){
	//alert("Upload for field " + this.dad.fld);
	if ((this.dad.fld == "cmp_img") || (this.dad.fld == "event_img")){
		document.getElementById('edt-upl').style.top = document.body.scrollTop;
		document.getElementById("edt-upl").style.display = "block";
		
		document.getElementById("edt-upl-ttl").innerHTML = "Upload for field id " + this.dad.imid;
		document.getElementById("coid").value = this.dad.imid

	}
	else if (document.getElementById("coid")) {
		document.getElementById('dv-upimbb').style.top = document.body.scrollTop;
	
		document.getElementById("edt-upl").style.display = "block";
//		alert("set dv-upimbb to scrolltop");
		
		document.getElementById("edt-upl-ttl").innerHTML = "Upload for field " + this.dad.fld ;
		document.getElementById("imgfld").value = this.dad.fld;
		if (this.dad.com) document.getElementById("imgcmts").value = this.dad.com.innerHTML;
		else document.getElementById("imgcmts").value = "";
	}
	else {

	this.dad.fil.ttldv.innerHTML = "Upload for field " + this.dad.fld
	this.dad.fil.dad.style.display = "block"
	this.dad.fil.fld =  this.dad.fld
	this.dad.fil.focus()
	}
	/*this.dad.fil.onblur = function (){
							this.dad.style.display = "none"	
							}*/
	//alert("in upload img obj")
}
////###############   end image upload object   #####################

/// set events

///  event set value,   page opening, dat incoming

///  event set edit, user logged in, shows all editable areas
function setedt(bl) { /// Cycle clones 
document.lnm.innerHTML += "got this far";
	for(var i=0;i<document.paige.clns.length;i++){
		document.lnm.innerHTML += "<br><br>Set edit Row id:" + document.paige.clns[i].rwid
		document.paige.clns[i].setedt(bl)
	}
	if(document.btrw){
		if(!(document.btrw.flds)){					
			grabElements(document.btrw)
			//if(document.btrw.flds){alert("buttons man")}
			initobjs(document.btrw)
			document.btrw.setedt = clsetedt
			document.lnm.innerHTML += "<br><br>Set edit button Row " 
		}
		
		document.btrw.setedt(bl)
	}
}

///  event go edit, user clicks editable div so display edit bits

///  user finishes making a choice, onblur for keyboard, onclick/onchange for mouse events. Object should handle update 
///  row object
function mkcln(dat){
	var sk =  ((this && this.skn) ? this.skn : document.skin)
	var cln = sk.cloneNode(true)
	var cl = sk.parentNode.appendChild(cln)
	cl.sep = sk.sep
	if(isNaN(dat)){
		cl.rwid = rsval(dat,"\\w+_id")
		document.curnntid = rsval(dat,"\\w+_id");
		cl.rwdat = dat
	}
	else{
		cl.dadix = dat
	}
	cl.style.display = "block"
	//cl.dadry = document.clns
	cl.setv = clsetv
	cl.setedt = clsetedt
	grabElements(cl)
	initobjs(cl)
	//alert(cl.rwid+" "+dat)
	document.lnm.innerHTML += "<br><br>Row id:" + cl.rwid
	return cl
}

///  cycle fields, calling events, hang row specific data (_id..)
function clsetv(dat){
	fry = this.flds
	//alert("setv\n" + fry.length + '\n' + dat)
	this.rwdat = (dat && dat.length > 0) ? dat : this.rwdat
	this.rwid = (dat && dat.length > 0) ? rsval(dat,"\\w+_id") : this.rwid
	document.lnm.innerHTML += "<br><br>clset id :" + this.rwid
	//document.lnm.innerHTML += "<br>setting field "
	if (fry && fry[0] && this.rwdat){
		this.style.display = "block"
		for(var i=0;i<fry.length;i++){			
			if(fry[i][1].setv){
				document.lnm.innerHTML += "<br>set field " + fry[i][0]//
				fry[i][1].setv(this.rwdat)
			}
			else{
				document.lnm.innerHTML += "<br>no field set " + fry[i][0]
			}
		}		
	}
	else{
		this.style.display = "none"
		document.lnm.innerHTML += "<br>No fields, man, row " + this.rwid
	}
}

function clsetedt(bl){
	document.isbeingedt = bl;

//	if(document.admin == -1 || document.admin == this.rwid){

		fry = this.flds
		document.lnm.innerHTML += "<br>set edit for rwid :" + this.rwid
		//document.lnm.innerHTML += "<br>setting field "
		if (fry && fry[0]){
			for(var i=0;i<fry.length;i++){			
				if(fry[i][1].setedt){
					//if (!bl) alert(fry[i][0]);
					//document.lnm.innerHTML += "<br>set field " + fry[i][0]
					//alert("attempting to set edit for\n" + fry[i][0])
					fry[i][1].setedt(bl)
				}
				else{
					document.lnm.innerHTML += "<br>no edit set " + fry[i][0]
				}
			}		
		}
		else{
			document.lnm.innerHTML += "<br>No fields, man, row " + this.rwid
		}
//	} 
}
///  table object
function gotdat(str,msg){
	if(!document.paige){
		document.paige = new jimmy()
	}
	document.paige.setv(str)
	if(!document.paige.pgno){
		document.paige.turn(1)
	}
	if(msg){
		if(msg.indexOf("O") > 0){
			supid = msg.replace(/\D/g, '')
			//alert("Login for id\n" + supid)
			document.admin = supid
			setedt(true)			
		}
		else{
			alert(msg)
		}
	}
	//kzam("getcat", 0)
	/*datry = (str.indexOf(":R:")  + 1) ? str.split(":R:")  : Array(str)
	numrw = datry.length
	document.lnm.innerHTML += "<br><br>got data rows:" + numrw
	if(document.clns){
		while(document.clns[0]){
			var cl = document.clns.pop()
			var foo = cl.parentNode.removeChild(cl)
		}
	}
	document.clns = Array()
	for(var i=0;i<datry.length;i++){
		document.clns[i] = mkcln(datry[i])
		document.clns[i].setv()
	}
	if(document.admin == -1){setedt(true)}*/
}

///  if repeatable template required, clone multiple rows, pass on events
//////   /////////////////////
//////////////   Page object, holds data populates clones
///////////////
 function jimmy(){
	this.pgsz = 5
	//insert cookie stuff here
	if(!this.clns){
		this.clns = Array()
		for(var i=0;i<this.pgsz;i++){
			this.clns[i] = mkcln(i)			
		}
	}
	//alert("got clones")
	
	this.setv = pgsetv
	this.pgbtns = Array()
	var jimdv = document.getElementById("dv-jimmy")
	jimdv.sf = mkel(jimdv, "div")
	jimdv.sf.style.clear = "both"
	this.jimdv = jimdv
}  
   
function btnclk(){	
	ix = this.idx
	
	this.jim.turn(ix)
	//alert(this.jim.pgsz +'\n' + )
}
function turnpg(idx){
	if(this.pgno != idx){
		if(isNaN(idx)){
			nw =  eval("1*this.pgno " + idx +  " 1")
			if(nw*(this.lst  - nw + 1) == 0){
				alert("Ok, so do we go round the corner\nor disable arrows??")
				return 0
			}
			else{
				idx =nw
			}
			
		}
		if(this.pgno){this.pgbtns[this.pgno].endo.className ="slct"}
		this.pgbtns[idx].endo.className = "crnt"
		this.pgno = idx
		//alert(idx)
		from = (idx-1)*this.pgsz
		for(var i = 0; i < this.pgsz; i++){
			this.clns[i].setv(this.datry[from + i])
		}	
	}	
}
 function pgsetv(str){
	this.datry = (str.indexOf(":R:")  + 1) ? str.split(":R:")  : Array(str)
	this.numrw = this.datry.length
	btndat = Array("&lt;&lt;")
	lstpg = Math.ceil(this.numrw/this.pgsz)
	//alert(datry.length + '\n' + lstpg)
	for(var  i = 1;i < lstpg +1;i++){
		btndat[i] = i
	}
	this.lst = lstpg
	btndat[i] = "&gt;&gt;"
	//alert(btndat.join("__"))
	for(var i = 0; i < btndat.length ; i++){
		this.pgbtns[i] = mkdblcell(this.jimdv)
		var inbtn = this.pgbtns[i].endo
		inbtn.innerHTML = btndat[i]
		inbtn.className = ( i*(btndat.length - i - 1) )?  "slct" : "rrws"
		
		inbtn.onclick = btnclk
		inbtn.jim = this
		inbtn.idx = (i == ( btndat.length -1)) ? '+' : i ? i : '-'		
	}
	this.btndat = btndat
	this.turn = turnpg
	//if(!this.pgno){this.pgbtns[1].endo.click()}
}   
/////////////////////  end page object

/////////////////////////////////////////////////////////////////
//////////////  tab object   /////////////////////////////
/////   same soup different gravy as page object/////////

function initabs(idrw, idtm, idsk, idln, mpt){
	//alert("init tabs init")
	document.admin = -1
	document.tabrow = document.getElementById(idrw)
	document.tabtmp = document.getElementById( idtm)
	document.tabrow.tabs = Array()
	document.tabrow.skn = document.getElementById( idsk)
	document.tabrow.lnm = document.getElementById(idln)
	document.tabrow. mpt = mpt ? mpt : "No Hotels Assigned to this event yet"
	document.tabrow.tbtl = document.tabrow.tbtl ? document.tabrow.tbtl : "vnu_nme"
	document.tabrow.tbid = document.tabrow.tbid ? document.tabrow.tbid : "vnu_id"
	document.tabrow.nwdat = document.tabrow.nwdat ? document.tabrow.nwdat : ":R:vnu_id:V:0:F:vnu_nme:V:Add New"
	document.tabrow.setv = tabsetv
	document.tabrow.mktab = tabmk
	document.tabrow.mkitem = mkcln
}
 function tabsetv(){
	//alert("setv tabs init\n" + (this.actab ? this.actab.id : "no actab"))
	//this.actab = null
	mpt =  this.mpt ?  this.mpt : "No Hotels Assigned to this event yet"
	if(this.dat){
		dt = this.dat
		if(dt == 0){
			this.lnm.innerHTML =  mpt
		}
		else if(dt.indexOf(":V:") == -1){
			this.lnm.innerHTML = dt
		}
		this.mktab()
	}
	else{
		alert("No data man!")
	}
}
function tabmk(){
	//alert("makin tabs init\n" + this.dat)
	dt = this.dat + this.nwdat
	dtry = (dt.indexOf(":R:") != -1) ? dt.split(":R:") :( dt.indexOf(":V:")  != -1) ? Array(dt) : Array()
	tb = 0
	for( var i=0;i<dtry.length;i++){
		tbid = rsval(dtry[i], this.tbid)
		tbnm = rsval(dtry[i], this.tbtl)
		if(tbnm){
			if(!this.tabs[tb]){
				var nd = document.tabtmp.cloneNode(true)
				var tbdv = this.insertBefore(nd, this.lastChild)
				tbdv.inn = getChild(tbdv, "tab-in")
				
				tbdv.inn.dad = tbdv
				tbdv.onclick = tabclk
				tbdv.dad = this
				tbdv.ind = tb
				tbdv.mkactv = tabactv
				this.tabs[tb] = tbdv
			}
			this.tabs[tb].dat = dtry[i]
			this.tabs[tb].style.display = "block"
			this.tabs[tb].inn.innerHTML = tbnm
			this.tabs[tb].rwid = tbid
			if(this.tabs[tb] == this.actab){
				//alert("got actab")
				tabclk(this.tabs[tb])
			}
			tb++
		}
	}	
	while(this.tabs[tb] && this.tabs[tb].style.display == "block"){
		this.tabs[tb].style.display = "none"
	}
	if(this.actab){
		tabactv()
	}
}

function tabclk(tab){
	
	//alert("tab click\n" + tbb.id)
	if (isNaN( this.rwid)){
		var tbb  =  tab
	}
	else{
		var tbb  =  this
		tbb.mkactv()
		if(tbb.rwid == 0){
			kzam("newhtl",  document.evid)
		}
	}
	
	     if(!tbb.dad.itm){
		     tbb.dad.itm = tbb.dad.mkitem(tbb.dat)
		      tbb.dad.itm.lnm = tbb.dad.lnm
	     }
	     tbb.dad.itm.setv( tbb.dat)
	     tbb.dad.itm.setedt(true)
	    // this.dad.cln.style.display =  "block"
	     
	     //var todo = getdivkid(this.dad.cln, "dv-todo")
	    // todo.innerHTML = this.dat.replace(/:F:/g, "<br>")
	
	//alert(this.rwid)
}
function tabactv(){
	if(this.dad){
		this.dad.actab = this
		if(this.dad.tabs && !isNaN(this.ind)){
			for(var i=0;i<this.dad.tabs.length;i++){
				this.dad.tabs[i].inn.className = (i != this.ind) ? "clsoff" : "clson"
			}		
		}
		else{
			alert(" tab actv oops")
		}
	}
}

////////   end tab object  /////////////////


///////////////////////////////////////
////     Bar show/hide    ////////////
//////////////////////////////////////
function mkbarobj(fdob){
	if(fdob.spn && fdob.grp){
		//alert("got em")
		fdob.spn.bro = fdob.grp
		fdob.spn.onclick = function (){
									if (this.bro.style.display ==  "block"){
										this.innerHTML = "(View)"
										this.bro.style.display = "none"
									}
									else{
										this.innerHTML = "(Hide)"
										this.bro.style.display =  "block"
									}
								}
	}
	else{
		alert("Ooops on bar creation\n" +fdob.spn.id + '\n' + fdob.grp.id)
	}
}


////////      end show/hide     //////////////////


////   login stuff

function gentimber(str){
	return 1;
	var ky = document.getElementById("spkey")
	bt = str.split(":O:")
	document.admin = bt[0]
	//alert(bt[1])
	ky.innerHTML = '&nbsp; ~ = Log Out = ~ &nbsp;'
	//alert("ok, in")
	setedt(true)
}
////  utilities

function kgetv(hsh, k, mk){//// hash, key, make new(bool)
	l = hsh.length
	for(kvi=0;kvi<l;kvi++){
		if(hsh[kvi][0] && hsh[kvi][0] == k){
			return hsh[kvi]
		}
	}
	if(mk){
		var ob = new Object()
		hsh[l] = Array(k,ob)
		return hsh[l]
	}
	return false
}
var xmlhttp=false;    //  ###############    The  MAGIC object ;)
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}
document.magic = true


/////////////////////    The Main Man
function doreq (url){
	if (!xmlhttp) {
		  alert("No magic in this browser, sorry")
		  return (0);
	}
	else{
		c = 0
		resp = ""//		
	 	 //alert(url)	
	 
		xmlhttp.open("POST",url ,true);
		
		 xmlhttp.onreadystatechange = kzamback
		 t = new Date()
		 xmlhttp.send(null)
		 return(1);
	}
}
function kzamback() {
				 var t = new Date()
			 
			  if (xmlhttp.readyState==4) {
				 ////////////////////////////     could be used to stop multiple requests  
					//  alert(document.grd +'\n' + xmlhttp.readyState + ' @ ' + t.getTime())
					 // document.grd = ""
				///////////////////////     *********  important debug line  ************** 
					 //alert("doreq return\n" + xmlhttp.responseText)	    //
					  
					  ///**************
					   //document.getElementById("dvlynam").innerHTML = xmlhttp.responseText
					   var resp = xmlhttp.responseText
					 /*  if(document.magic && document.magic.substr(0,5) == 'doreq'){
						//alert("waiting\n" + document.magic )//
					       	eval(document.magic)
					   }*/
					   document.magic = true
					   fnclf = resp.split(/:A:/)
					   fncla = resp.match(/ALT:([^\|]+)/)
					   
					   if(fnclf && fnclf[1] && fnclf[2]){
							foo = fnclf.shift()
							fnc = fnclf.shift()
							js = fnc + "(\"" + fnclf.join("\", \"") + "\")"
							//alert(js)
							eval(js)
							return 0
					   }
					   else if(fncla && fncla[1]){
							eval("alert(\"" + fncla[1].replace(/<br>/g,"\\n") + "\")")
							return 0
					   }
					   else{
						 if(confirm(resp)){
						 eval(resp)
						 }
					}
				   
			  }
			  else{
				 //document.grd += '\n' + xmlhttp.readyState + ' @ ' + t.getTime()
//
			  }
		 }

function kzam(fnc, arg){
		grl = document.phpurl + "?fnc=" + fnc + "&arg=" + escape(arg)
		//alert(grl)
		if(document.magic){
		document.magic = false
			doreq (grl)
		}
		else{
			document.magic = "doreq (\"" + grl + "\")"
		}
		return 1
}
function rsval (rstr, fld){
	var reg = RegExp("(F:|R:|^)" + fld + ":V:(.*?)(:F:|:DV:|:R:|$)")
	mvl = rstr ? rstr.match(reg) : ''
	return (mvl && mvl[2] ? mvl[2] : '')
}


function nullfunc(){
	return 1
}

function nixlnk(dv, bl){
	if ((dv.id == "dv_pty_str") || (dv.id == "dv_cmp_max") || (dv.id == "dv_cmp_min") || (dv.id.indexOf("pty_ico") > 0 )) { return 1; }
	else {
	if (bl) { 
		//alert("a");
		//dv = dv.replace(/<a href(.*)\>(.*)\<\/a>/g, "$2"); 
		if (dv.innerText) {
			if (dv.innerHTML && (dv.innerHTML.indexOf("img") > 0)) {
		dv.innerHTML = dv.innerHTML.replace(/<a h[^>]+?>/g, "")
		dv.innerHTML = dv.innerHTML.replace(/<\/a>/g, "")		
			
			}
			else {
		dv.innerText = dv.innerText.replace(/<a h[^>]+?>/g, "")
		dv.innerText = dv.innerText.replace(/<\/a>/g, "")	
			}
		}
		else {
		dv.innerHTML = dv.innerHTML.replace(/<a h[^>]+?>/g, "")
		dv.innerHTML = dv.innerHTML.replace(/<\/a>/g, "")		
		
		}
	}
	return 1;
	}

	var ahrs = dv.getElementsByTagName("a")
	if(ahrs && ahrs[0] && bl){
		var ah = ahrs[0]
		dv.ohr = ah.href
		ih = ah.innerHTML
		// Oliver H 12.8.06

		//dv.innerHTML = "[link:"+ahrs[0]+"]"+ih+"[/link]";
		
		// Oli 07
		
		dv.innerHTML = ahrs[0];
	}
	else if(dv.ohr && !bl){
	//	dv.innerHTML = ""
	//	var lnk = mkel(dv, "a")
	//	lnk.href = dv.ohr
	//	lnk.innerHTML = ih
	}
	
	return 1
}

function txtohtm(str, bl){
	if(bl){
		str = str.replace(/\015\012|\012/g, "<br>")
		str = str.replace(/\243/g, "&pound;")
		/*str = str.replace(/(\S+?@\S+?\056\S+)/g, "<a href='mailto:$1' class='blue-link'>$1</a>")*/
		/*str = str.replace(/(www\056\S+)/g, "<a href='http://$1' class='blue-link' target='_blank'>$1</a>")*/
		/*str = str.replace(/\243/g, "&pound;")*/
		/*str = str.replace(/\[link:.*\]/g, "<a href='http://$1' class='blue-link' target='_blank'>")*/
		
	}
	else{
		str = str.replace(/<br>/g, "\n")
		str = str.replace(/&pound;/g, String.fromCharCode(163))
		str = str.replace(/<a h[^>]+?>([^@]+?@[^.]+?[.].+?)<.a>/g, "$1")
		str = str.replace(/<a h[^>]+?>(www\056\S+?\w\w)<.a>/g, "$1")
		/*str = str.replace(/&pound;/g, String.fromCharCode(163))
		str = str.replace(/&pound;/g, String.fromCharCode(163))
		str = str.replace(/&pound;/g, String.fromCharCode(163))*/
	}
	return str
}
function dodes(){
	//alert('boo');
	var d=document.getElementById('dvdes');
	d.style.display=(d.style.display=='none')?'block':'none';
}
function mkactv(el){
	if(document.actv){
		document.actv.blur()
		//alert("active element:" + document.actv.id)
	}
	document.actv = el
}
function retcmupd(msg, val){	
	//alert(msg + '\n' +  val + '\n' + document.actv.id)
	if(document.actv && val){
		//alert(document.actv.dad.setv ? "setv set" + val : "no setv")
		document.actv.dad.setv(val)
		
	}
	if(document.actv && document.actv.dad.dad.lnm){
		document.actv.dad.dad.lnm.innerHTML = "The update to your listing has been successful"
		document.actv.dad.dad.lnm.style.display = "block"
		self.setTimeout('fadit()', 5000)
	}
	else{
		alert("not able to report \n" + '\n' + msg)
	}
	//+ "\n" + val
}
function fadit(dvid){
	if(dvid){
		//alert(dvid)
		var dvd =document.getElementById(dvid)
		dvd.innerHTML = "" 
		dvd.style.display = "none"
		
	}
	else{
		document.actv.dad.dad.lnm.innerHTML = "" 
		document.actv.dad.dad.lnm.style.display = "none"	
	}	

	//document.actv = 0
}

function mkel(dad,tag,sf){
	var nd = document.createElement(tag)
	if(sf && sf.style){
		var el = dad.insertBefore(nd, sf)
	}
	else{
		var el = dad.appendChild (nd)
	}
	return el
}
function mkdblcell(dad){
	var exo = mkel(dad, 'div',  dad.sf)
	exo.style.styleFloat= "left"
	exo.style.cssFloat= "left"
	var endo = mkel(exo,"div")
	endo.rxo = exo
	exo.endo = endo
	endo.rwdv = dad
	exo.rwdv = dad
	return exo
}
function upval(frm){
	fld = frm.rdofld[0].checked ?  frm.rdofld[0].value : frm.rdofld[1].value
	//alert(frm.rdowdh[0].checked  + '\n' +   frm.rdowdh[0].value  + '\n' + frm.rdowdh[1].value)
	alert(frm.hidcmpid.value + '\n' + fld)////
	if(fld &&frm.hidcmpid.value ){
		frm.submit()
	}
}

function getChild(el,kid){
	var kids = el.childNodes
	msg = el.id
	for(var i=0;i<kids.length;i++){
		if(kids[i].id == kid){
			return kids[i]
		}
		msg += "\nid : " + (kids[i].id  ?  kids[i].id : "no id" )
	}
	alert(msg)
	return null
}
function getdivkid(el, kid){
	var kids = el.getElementsByTagName("div")
	for(var i=0;i<kids.length;i++){
		if(kids[i].id == kid){
			return kids[i]
		}
		msg += "\nid : " + (kids[i].id  ?  kids[i].id : "no id" )
	}
	alert(msg)
	return null	
}

function rsrow(dat, fld){
	ary = (dat.indexOf(":R:") + 1) ? dat.split(":R:")  : Array(dat)
	//var reg = RegExp(fld)
	out = Array()
	for(var i=0;i<ary.length;i++){
		if(ary[i].indexOf(fld) + 1){
			out[out.length] = ary[i]
		}
	}	
	return out
}

function shwhd(idbar, idblk){	
	var ths = document.getElementById(idbar)
	var grp = document.getElementById(idblk)
	//alert(ths.id + '\n' + grp.id)//

}

function bounce(str){
	window.location = str
}

function decook(inp){  //   Cookie hex decoder
	inp = inp.replace(/\+/g," ")
	uch = inp.match(/%[A-F,0-9]{2}/gi)
	if(uch){
		for (i=0;i<uch.length;i++){
			ary = uch[i].split("")
			sx = ary[1].charCodeAt(0) > 60 ? 1*(ary[1].charCodeAt(0) -55 ) : 1*ary[1]
			un = ary[2].charCodeAt(0) > 60 ? 1*(ary[2].charCodeAt(0) -55 ) : 1*ary[2]
			dec = 16 * sx + un
			charx = String.fromCharCode(dec)
			inp = inp.replace(uch[i],charx)
		}
	}
	return inp
}


function mkddl (dad, vlfd, txfd, pkfnc){
	//alert("in 'ere")
	if(dad.opt && dad.ttl && dad.dat){
		ops = (dad.dat.indexOf(":R:") ? dad.dat.split(":R:") : Array(dad.dat))
		dad.ttl.onclick = opnevt
		dad.ttl.clse = opnevt
		dad.opts = Array()
	//alert("and  'ere\n" + dad.dat + '\n' + ops.length)//
		for(var i=0;i<ops.length;i++){
			reg = RegExp (vlfd + ":V:([0-9]+):F:" + txfd + ":V:([^:]+)")
			kv = ops[i].match(reg)
			if(kv){
				var nd = dad.opt.cloneNode(true)
				var op = dad.opt.parentNode.appendChild (nd)
				op.innerHTML = kv[2]
				op.evd =  kv[1]
				op.onclick = eval(pkfnc)
				op.style.top = 20*(i +1)+ "px"
				op.dad = dad
				var l = dad.opts.length
				dad.opts[l] = op				
			}
			else{
				alert(ops[i] + '\n' +reg)
			}
		}		
	}
	else{
		alert("no bits for the ddl\n" + dad.id)
	}
}
function opnevt(){
	var pts = (this && this.dad && this.dad.opts) ? this.dad.opts : document.evtpck.opts
	if(pts.length > 0){
		for(var i=0;i<pts.length;i++){
			pts[i].style.display = (pts[i].style.display == "block") ? "none" : "block"
		}		
	}
	else{
		alert("no options!!")
	}
}

// Example:

// writeCookie("myCookie", "my name", 24);

// Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.

function writeCookie(name, value, hours){
  var expire = "";
  if(hours != null)
  {
    expire = new Date((new Date()).getTime() + hours * 3600000);
    expire = "; expires=" + expire.toGMTString();
  }
  document.cookie = name + "=" + escape(value) + expire;
}

// Example:
// alert( readCookie("myCookie") );
function readCookie(name){
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0)
  { 
    offset = document.cookie.indexOf(search);
    if (offset != -1)
    { 
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end))
    }
  }
  return cookieValue;
}

function clicknull() {
	return true;
}





