var pre_mode;
var _act_x=0;

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

if (navigator.userAgent.indexOf("Safari") > 0)
{
  isSafari = true;
  isMoz = false;
  isIE = false;
}
else if (navigator.product == "Gecko")
{
  isSafari = false;
  isMoz = true;
  isIE = false;
}
else
{
  isSafari = false;
  isMoz = false;
  isIE = true;
}

/* Functions to handle browser incompatibilites */
function eventElement(event)
{
  if(isMoz)
  {
    return event.currentTarget;
  }
  else
  {
    return event.srcElement;
  }
}


function addKeyListener(element, listener)
{
  if (isSafari)
    element.addEventListener("keyup",listener,false);
  else if (isMoz)
    element.addEventListener("keyup",listener,false);
  else
    element.attachEvent("onkeyup",listener);
}

function addListener(element, type, listener)
{
  if(element.addEventListener)
  {
    element.addEventListener(type, listener, false);
  }
  else
  {
    element.attachEvent('on' + type, listener);
  }
}

function removeListener(element, type, listener)
{
  if(element.removeEventListener)
  {
    element.removeEventListener(type, listener, false);
  }
  else
  {
    element.detachEvent('on' + type, listener);
  }
}



function _navigate(url){
	window.location=url;
}

function new_navigate(url){
	nw=open(url);
}

function get_ajax(url){
	if (window.XMLHttpRequest) {
		var xmlhttp = new XMLHttpRequest();
	}else{
		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.open("GET", "http://"+document.location.host+url, false);
	xmlhttp.send("request");
	return xmlhttp.responseText;
}

function clickact(id){
	i=document.getElementById("acts"+id);
	window.location=i.value;
}

function actions(id,acts){
	var a,i;
	a=acts.split("\n");
	document.write("<select id=\"acts"+id+"\" style=\"font-size:8pt\">");
	for(i=0;i<a.length;i++){
		b=a[i].split("\t");
		document.write("<option value=\""+b[0]+"\">"+b[1]+"</option>");
	}
	document.write("</select>&nbsp;");
	document.write("<input type=\"button\" value=\" Go \" onclick=\"clickact("+id+")\">");
}


function pick_link(name){
	pl_load_data(name);
	e=document.getElementById("pl_sel_"+name);
	e.style.display="block";
}


var pl_srch=0;


function pl_de_search(name){
	clearTimeout(pl_srch);
	pl_srch=setTimeout("pl_search('"+name+"')",500);
}


function pl_search(name){
	pl_load_data(name);
}

function pl_close(name){
	e=document.getElementById("pl_sel_"+name);
	e.style.display="none";
}

function pl_load_data(name){
	var txt;
	sr=document.getElementById("pl_search_"+name);

	key=sr.value;

	tf=document.getElementById("pl_seltype_"+name);
	if(tf){
		if(tf.value){
			sx+="&sy="+tf.value;
		}
	}
	t=document.getElementById("pl_type_"+name);
	vt=t.value;
	txt=get_ajax("/listobjects/"+vt+"/"+key+"/"+"?name="+name);
	e=document.getElementById("pl_main_"+name);
	e.innerHTML=txt;
}

function describe_object(name,id){
	var txt;
	t=document.getElementById("pl_type_"+name);
	vt=t.value;

	u=document.getElementById("pl_url_"+name);

	txt=get_ajax("/objectdata/"+vt+"."+id+"/?name="+name);

	x=txt.split("|");

	u.innerHTML=x[2];

	e=document.getElementById("pl_txt_"+name);
	if(x[0]!=""){
		e.value=x[0]+": "+x[1];
		t.value=x[3];
	}else{
		e.value="";
	}
}

function add_link(name){
	src=document.getElementById("pl_txt_"+name);
	dst=document.getElementById("id_a_add");

	t=document.getElementById("pl_type_"+name);
	vt=t.value;
	i=document.getElementById("pl_id_"+name);
	vi=i.value;
	ct=document.getElementById("id_context");
	ctx=ct.innerHTML;
	    

	txt=get_ajax("/newlink/"+vt+"/");

	x=txt.split("|");
	base=x[0];
	txt=get_ajax(base+"/?part=add&target="+base+"&return_to="+escape(window.location.href)+"&autolink="+ctx);
	var pos=get_location(src);

	dst.innerHTML=txt;	
	dst.style.left=(pos[0])+"px";
	dst.style.top=(pos[1]+19)+"px";
	dst.style.display="block";
	dst.selectable=true;

}


function select_object(name,id,sub){
	e=document.getElementById("pl_id_"+name);
	e.value=id;
	if(sub){
		e=document.getElementById("pl_sub_"+name);
		e.value=sub;
	}

	describe_object(name,id);
	pl_close(name);
}

function view_link(name){
	u=document.getElementById("pl_url_"+name);
	if(u.innerHTML!=""){
		_navigate(u.innerHTML);
	}
}

function empty_link(name){
	select_object(name,0);
}


function get_location(obj){
	var p=obj;
	var rv=new Array();
	rv[0]=0;rv[1]=0;
	if(!p) return rv;
	do{
		rv[0]+=p.offsetLeft;
		rv[1]+=p.offsetTop;
	}while(p=p.offsetParent);
	return rv;
}

function move_actions(){
	dst=document.getElementById('id_actions');
	src=document.getElementById('id_actions_float');
	if(src && dst){
		pos=get_location(dst);
		src.style.left=(pos[0])+"px";
		src.style.top=(pos[1]+4)+"px";
		src.style.display="block";
	}
}

var ahist=new Array();

function action(type){
	src=document.getElementById('id_a_'+type);

	if(type=='add' && pre_mode==1){
		af=document.getElementById('add_form');
		for(i=0;i<af.elements.length;i++){
			el=af.elements[i];
			for(k=0;k<pre_n.length;k++){
				if(el.name==pre_n[k]){
					el.value=pre_v[k];
				}
			}
		}
	}

	if(type=='edit' || type=='kill'){
		u=document.getElementById('id_url_'+type);
		url=u.innerHTML;
		if(!url) return;
		txt=get_ajax(url);
		src.innerHTML=txt;
	}
	if(type=='detail'){
		u=document.getElementById('id_url_'+type);
		url=u.innerHTML;
		if(!url) return;

		_navigate(url);
		return;
	}
	dst=document.getElementById('id_l_'+type);

	pos=get_location(dst);
	src.style.left=(pos[0]-2+_act_x)+"px";
	src.style.top=(pos[1]+40)+"px";
	src.style.display="block";
	src.selectable=true;

	var saved=false;
	for(var i=0;i<ahist.length;i++){
		if(ahist[i]==type) saved=true; else {
			close_action(ahist[i]);
		}
	}

	if(!saved){
		ahist.push(type);
	}
}

function close_action(type){
	src=document.getElementById('id_a_'+type);
	src.style.display="none";
}

function close_up(type){
	setTimeout("close_action('"+type+"')",100);
}

function action_up(type){
	setTimeout("action('"+type+"')",100);
}

function action_url(url_edit,url_kill,url_detail){
	u=document.getElementById('id_url_edit');
	u.innerHTML=url_edit;
	u=document.getElementById('id_url_kill');
	u.innerHTML=url_kill;
	u=document.getElementById('id_url_detail');
	u.innerHTML=url_detail;

	action('edit');
}

function move_buttons(){
	src=document.getElementById('id_buttons');
	dst=document.getElementById('id_place_buttons');
	pos=get_location(dst);
	diff=dst.offsetWidth-265;
	src.style.left=(pos[0]+diff)+"px";
	src.style.top=(pos[1])+"px";
	src.style.display="block";
}

function ensure_line(e){
	var el=eventElement(e);
	var name=el.name;
	x=name.split("_");
	prefix=x[0];

	var tbody,tr,td,ctr;

	cnt=document.getElementById("id_phones_"+prefix);
	tbody=cnt.firstChild;
	tr=tbody.lastChild;

	ctr=el.parentNode.parentNode;
	if(ctr.firstChild.firstChild.value=="" && ctr.firstChild.nextSibling.nextSibling.firstChild.value=="" && tr!=ctr){
		tr=ctr.nextSibling;
		tr.firstChild.firstChild.focus();
		tbody.removeChild(ctr);
		return;
	}

	if(tr.firstChild.firstChild.value=="" && tr.firstChild.nextSibling.nextSibling.firstChild.value==""){
	}else{
		add_phone(prefix,"",false,"");
	}
}

function add_phone(prefix,phone,fax,descr){
	cnt=document.getElementById("id_phones_"+prefix);
	src=document.getElementById("samplerow_"+prefix);

	var el=document.createElement("tr");
	el=src.cloneNode(true);

	var isrc=document.getElementById("id_phones_idx_"+prefix);

	var idx=parseInt(isrc.innerHTML,10);

	var td=el.firstChild;
	var inp=td.firstChild;
	inp.name=prefix+"_phone["+idx+"]";
	addKeyListener(inp,ensure_line);
	inp.value=phone;

	td=td.nextSibling;
	inp=td.firstChild;
	inp.name=prefix+"_fax["+idx+"]";
	inp.checked=fax;
	inp.defaultChecked=fax;

	td=td.nextSibling;
	inp=td.firstChild;
	inp.name=prefix+"_descr["+idx+"]";
	addKeyListener(inp,ensure_line);
	inp.value=descr;

	o=cnt.firstChild;
	o.appendChild(el);

	idx++;
	isrc.innerHTML=idx+"";
}

function ensure_itemline(e){
	var el=eventElement(e);
	var name=el.name;
	x=name.split("[");
	prefix=x[0];

	var tbody,tr,td,ctr;

	cnt=document.getElementById("id_lines_"+prefix);
	tbody=cnt.firstChild;
	tr=tbody.lastChild;

	ctr=el.parentNode.parentNode;
	if(ctr.firstChild.firstChild.value=="" && tr!=ctr){
		tr=ctr.nextSibling;
		tr.firstChild.firstChild.focus();
		tbody.removeChild(ctr);
		return;
	}

	if(tr.firstChild.firstChild.value==""){
	}else{
		add_itemline(prefix,"",false,"");
	}
}

function add_itemline(prefix,value){
	cnt=document.getElementById("id_lines_"+prefix);
	src=document.getElementById("samplerow_"+prefix);

	var el=document.createElement("tr");
	el=src.cloneNode(true);

	var isrc=document.getElementById("id_lines_idx_"+prefix);

	var idx=parseInt(isrc.innerHTML,10);

	var td=el.firstChild;
	var inp=td.firstChild;
	inp.name=prefix+"["+idx+"]";
	addKeyListener(inp,ensure_itemline);
	inp.value=value;

	o=cnt.firstChild;
	o.appendChild(el);

	idx++;
	isrc.innerHTML=idx+"";
}

function initPhones(prefix){
	add_phone(prefix,"",false,"");
}

function initLines(name){
	add_itemline(name,"");
}

function askform(text,id){
	if(confirm(text)){
		f=document.getElementById(id);
		f.submit();
	}
}

function askkill(id){
	f=document.getElementById(id);
	if(confirm("Delete selected?")){
		f.submit();
	}
}

function submitform(el,id){
	var f=document.getElementById(id);
	var r;
	var h=f.getAttribute('onsubmit');
	
	if(h){
		r=f.onsubmit();
	}else r=true;
	if(!r) return;
	el.disabled=true;
	f.contentEditable=false;
	f.submit();
}

function askdo(text,url){
	if(confirm(text)){
		_navigate(url);
	}
}

function selection(part,id,name){
	i=document.getElementById("id_select_target_"+part);
	i.value=id;
	i=document.getElementById("id_select_name_"+part);
	i.innerHTML=name;
	
}

function pl_typesel(name){
	t=document.getElementById("pl_seltype_"+name);
	s=document.getElementById("pl_sub_"+name);
	s.value=t.value;

	pl_load_data(name);
}

function selmypos(){
	load_pos_data();
	i=document.getElementById("id_sel_mypos");
	f=document.getElementById("id_selpos_box");
	var pos=get_location(i);
	
	f.style.left=(pos[0]-295)+"px";
	f.style.top=(pos[1]+19)+"px";
	f.style.display="block";

}

function sp_close(){
	f=document.getElementById("id_selpos_box");
	f.style.display="none";
}

function load_pos_data(){
	e=document.getElementById("id_selbox_data");

	txt=get_ajax("/listmypos/");
	e.innerHTML=txt;
}

function select_mypos(id){
	_navigate("./?select_position="+id);
}

function add_link(name){
	src=document.getElementById("pl_txt_"+name);
	dst=document.getElementById("id_a_add");

	t=document.getElementById("pl_type_"+name);
	vt=t.value;
	s=document.getElementById("pl_sub_"+name);
	vs=s.value;
	i=document.getElementById("pl_id_"+name);
	vi=i.value;
	lt=document.getElementById("pl_lt_"+name);
	vlt=lt.value;

	ct=document.getElementById("id_context");
	ctx=parseInt(ct.innerHTML);

	f=document.getElementById("pl_filter_"+name);
	var sk="";
	if(f.innerHTML!="" && f.innerHTML!="0"){
		var filter=f.innerHTML;
		ft=document.getElementById("pl_type_"+filter);
		fvt=ft.value;
		fs=document.getElementById("pl_sub_"+filter);
		fvs=fs.value;
		fi=document.getElementById("pl_id_"+filter);
		fis=fi.value;
		fl=document.getElementById("pl_lt_"+filter);
		fls=fl.value;

		if(parseInt(fls)==1) fls="2"; else if(parseInt(fls)==2) fls="1";

		sk=fvt+"."+fvs+"."+fis+"."+fls;
	}

	txt=get_ajax("/newlink/"+ctx+"/"+vt+"."+vs+"."+vi+"."+vlt+"/"+sk+"/");

	x=txt.split("|");
	base=x[0];
	txt=get_ajax(base+"/?part=add&target="+base+"&autolink="+x[1]+"&makelink="+x[2]);
	var pos=get_location(src);

	dst.innerHTML=txt;	
	dst.style.left=(pos[0])+"px";
	dst.style.top=(pos[1]+19)+"px";
	dst.style.display="block";
	dst.selectable=true;

}

var _hm=new Array();

function pop_menu(id){
	clearTimeout(_hm[id]);
	var m=document.getElementById("pmenu_"+id);
	var e=document.getElementById("mitem_"+id);
	if(m && e){
		var a=get_location(e);
		m.style.display="block";
		m.style.left=a[0]+"px";
		m.style.top=(a[1]+e.offsetHeight)+"px";
	}

}

function hide_menu_do(id){
	var m=document.getElementById("pmenu_"+id);
	if(m){
		m.style.display="none";
	}
}

function hide_menu(id){
	var m=document.getElementById("pmenu_"+id);
	if(m){
		_hm[id]=setTimeout("hide_menu_do("+id+")",500);
	}
}

function askgo(url,text){
	if(confirm(text)){
		_navigate(url);
	}
}

function report(url){
	window.open(url,"report","left=100,top=100,width=750,height=700,location=no,status=no,resizable=yes,scrollbars=yes,menubar=yes",false);
}

function onitemclose(){

}

function newitem(url){
	ewindow=window.open(url,"report","left=100,top=100,width=750,height=700,location=no,status=no,resizable=yes,scrollbars=yes,menubar=yes",false);
	addListener(window,"close",onitemclose);
}



