var ce_opts = {
	link_cont : '<table border=0 width="100%"><tr style="border-bottom:1px solid silver"><td width="80%" class="ca">Заголовок</td><td class="ca">Ссылка</td><td class="ca">Действие</td></tr>{body}</table>',
	link_item : '<tr><td><input type="hidden" name="lid{n}" value="{id}"><input id="inp{n}" type="text" name="inp{n}" value="{cp}" onchange="ce.upd(this,\'{id}\')" style="width:100%"></td><td>{sel}</td><td>{act}</td></tr>',
	link_add  : '<a href="javascript:void(0)" onclick="ce.add()">Добавить</a>',
	link_del  : '<a href="javascript:void(0)" onclick="ce.del(\'{id}\')">Удалить</a>'
};

function cs_edit() {
	this.nlk=100;
	this.add_link='';
	this.refs=new st_linkto();
	this.links=new st_link();
	
	this.init = function() {
		this.nlk=this.links.get_len();
		var elm=document.getElementById('nd_id'); if(!elm) return;
		if (elm.value=='') {
			elm=document.getElementById('links_fs'); if(elm) elm.style.display='none';
			elm=document.getElementById('nd_grp'); if(elm) elm.style.display='block';
		} else {
			document.getElementById('bt_del').style.display='block';
		}
		this.show();
	}
	
	this.show = function(block) {
		var i = this.links.get_len();
		if (i<10 && !block) this.links.add('new','','');
		elm=document.getElementById('nd_help'); if (!elm) return;
		if (i==0) elm.style.display="block"; else elm.style.display="none";
		this.links.make('links',this.refs);
	}

	this.add = function() {
		var capt=document.getElementById('inp_new').value;
		if (capt=='') return alert('Пожалуйста, укажите заголовок!');
		var linkto=document.getElementById('sel_new').value;
		if (linkto=='') return alert('Пожалуйста, укажите ссылку!');
		this.links.del('new');
		this.links.add('add'+this.nlk++,capt,linkto);
		this.show(false);
	}
	
	this.del = function(id) {
		this.links.del(id); this.links.del('new'); this.show();
	}
	
	this.save = function() { 
		this.links.del('new'); this.show(true);
		var elm=document.getElementById('ce_form');  if (!elm) return;
		elm.submit();
	}
	this.upd = function(elm,id) {
		if (elm.name.substr(3,1)=='_') return;
		var stk=this.links.lnk_stack.get(id); var s=elm.name.substr(0,3);
		if (s=='inp') stk.caption=elm.value;
		else if (s=='sel') stk.linkto=elm.value;
	}
}

function st_link() {
	this.lnk_stack = new stack();
	this.add = function(id,caption,linkto) {
		var tmp=this.lnk_stack.add(new el_link(id,caption,linkto));
	}
	
	this.del = function(sId) {return this.lnk_stack.del(sId);}

	this.make = function(did,sel) {
		var elm=document.getElementById(did);
		if (!did) {alert('No place for links!'); return;}
		var out = this.lnk_stack.toString(sel);
		out = ce_opts.link_cont.replace('{body}',out);
		elm.innerHTML=out;
	}
	
	this.get_len = function() {return this.lnk_stack.len;}
}

function el_link(id,caption,linkto) {
	this.id = id;
	this.caption = caption;
	this.linkto = linkto;
	this.toString = function(sel,i) {
		var act=ce_opts.link_del, n=i;

		if (this.id=='new') {
			act=ce_opts.link_add; n='_new';
		}
		var out = ce_opts.link_item.replace(/{n}/g,n);
		out = out.replace(/{act}/,act);
		out = out.replace(/{id}/g,this.id);
		out = out.replace(/{cp}/,this.caption);
		var sel_out = sel.make('sel'+n,this.linkto,this.id);
		out = out.replace(/{sel}/,sel_out);
		return out;
	}
}

function st_linkto() {
	this.opts=new stack();
	this.add = function(opt,val) {
		this.opts.add(new el_option(opt,val));
	}
	this.make = function(id,active,pid) {
		var out= '<select style="width: 250px" class="select" id="'+id+'" name="'+id+'"  onchange="ce.upd(this,\''+pid+'\')">'+this.opts.toString(active)+'</select>';
		return out;
	}
}

function el_option(opt,val) {
	this.id=opt;
	this.val=val;
	this.toString = function(active) {
		return '<option value="'+this.id+'"'+(this.id==active ? ' selected':'')+'>'+this.val+'</option>';
	}
}

function stack(id) {
	this.id=id;
	this.stack=[];
	this.len=0;

	this.add = function(itm) { this.stack[this.len]=itm; return this.stack[this.len++]; }
	this.get = function (sId) {
		for (var i=0; i<this.len;i++) if (this.stack[i].id==sId) return this.stack[i];
		return false;
	}
	this.apply = function(fn) {for (var i=0; i<this.len;i++)fn(this.stack[i]);}
	this.view = function() {
		var s='', i=0;
		for (var j=0; j<this.len; j++) s+=' '+j+'=>'+this.stack[j].id+'\n';
		alert('Stack view is:\n'+s);
		}
	this.del = function (sId) {
		var i=j=0;
		while ( i < this.len && this.stack[i].id!=sId ) i++;
		//for (var i=0; i<this.len;i++) if (this.stack[i].id==sId) break;
		if (i == this.len) return false;
		while ( ++i < this.len) this.stack[i-1]=this.stack[i];
		this.stack.pop(); this.len--;
	}
	this.clear = function() { this.stack=[]; this.len=0; }
	this.toString = function(prm) {
		var s='', i=0, j=0;
		for (j=0; j<this.len; j++) { s+=this.stack[j].toString(prm,i++);}
		return s;
	}
}

var ce = new cs_edit();

