var ub={
	current_id: '',
	sendData: '',
	showed_code_id: '',
	
	edit: function(id){
		if (this.current_id!='') {
			ub.hideForm(this.current_id);
		}
		this.current_id=id;
		$.getJSON(
			'ajax/barsettings.php',
			{bbase: id},
			ub.insform
		);
	},
	
	insform: function(data){
		var div=$("div#edit_"+ub.current_id);
		var insforms=document.getElementById('bar_tpl').innerHTML;
		div.html(insforms);
		$("span#defbuttons_"+ub.current_id).hide();
		$.each(data, function(fname, fvalue){
			var frm=document.getElementById("form_"+ub.current_id)[fname];
			if( (frm.tagName=="INPUT" || frm.tagName=="SELECT") && frm.type!="checkbox"){
				frm.value=fvalue;
				if(frm.className=='minput') mSel.formChange(frm);
			};
			if(frm.type=="checkbox"){
				frm.checked=fvalue;
			};
		});
		$('#fill').colorPicker();
		$('#txtcolor').colorPicker();
		$('#border_color').colorPicker();
		$('#grid_color').colorPicker();
		div.slideDown();
		ub.state='form_opened';
	},
	
	preview: function(id){
		var data=$("form#form_"+ub.current_id).serialize();
		data=data+'&i='+document.dbid;
		var div=document.getElementById("edit_"+ub.current_id);
		var prev=document.getElementById("preview");
		if(prev != null ){
			prev.src = 'ajax/createbar.php?'+data;
		}else{
			var img = document.createElement('img');
			img.src = 'ajax/createbar.php?'+data;
			img.id = 'preview';
			$(div).append('<br/>');
			$("div#preview_img").append(img);
		}
	},
	
	getCode: function(id){
		if (ub.showed_code_id!=''){
			$("#codes_"+ub.showed_code_id).hide().remove();
		}
		if(id){//!=ub.current_id){
			 ub.showCodes({"status":"local", "id": id});
		}else{
			var data=$("form#form_"+ub.current_id).serializeArray();
			var len=data.length;
			data[len]={"name": "i", "value": document.dbid};
			data[len+1]={"name": "save"};
	//		test=toJSON(data);
			$.post(
				'ajax/createbar.php',
				data,
				ub.showCodes,
				"json"
			);
		}
	},
	
	showCodes: function(data){
		if(data.status=='error'){
			error(data);
			return false;
		}
		var shorturl='bar?i='+document.dbid+'&n='+data.id;
		var url='http://icq.seriyps.ru/'+shorturl;
		var bbcode='[url=http://icq.seriyps.ru/all?i='+document.dbid+'][img='+url+'][/url]';
		var html='&lt;a href=&quot;http://icq.seriyps.ru/all?i='+document.dbid+'&quot; title=&quot;Добавьте меня в Jabber!&quot;&gt;&lt;img src=&quot;'+url+'&quot; alt=&quot;Добавьте меня в Jabber&quot;/&gt;&lt;/a&gt;';
		forms='<div class="codes" id="codes_'+data.id+'"> <p>BB код для форумов<br/>' +
				'<input type="text" value="'+bbcode+'"/></p>'+
				'<p>HTML код для сайтов и блогов<br/>' +
				'<input type="text" value="'+html+'"/></p>' +
				'<p>Адрес картинки<br/>' +
				'<input type="text" value="'+url+'"/></p>' +
				'<p>Предпросмотр<br/>' +
				'<img src="'+shorturl+'&nocache"/></p></div>';
		if(data.status=="local") insto=data.id;
		else insto=ub.current_id;
		ub.showed_code_id=data.id;
		$("span#defbuttons_"+insto).after(forms);
	},
	
	hideForm: function(id){
		if(!id) id=ub.current_id;
		var div=$("div#edit_"+id);
		div.slideUp();
		$("span#defbuttons_"+ub.current_id).show();
		div.text('');
		ub.current_id=''
	}
}

var linker_reload={
	makeLink: function(){
		var jid=$("#jid").val();
		$.getJSON('ajax/mklink.php', {"jid": jid, "type": "jid"}, linker_reload.processLink);
	},
	
	
	processLink: function(data){
		if(data.status=='error'){
			error(data);
			return false;
		}
		var dl=document.location;
		dl.href='http://'+dl.hostname+dl.pathname+'?i='+data.id;
	},
	
};


//Виджет "селектор"
var mSel={
	selectorShowing: false,//bool
	selectorOwner: '',//DOMnode - "форма", по которой кликнули
	selector: '',//DOMnode - выпадающий список
	inputForm: '',//DOMnode - форма, в которой хранится выбранный пункт
	selected: '',//JQuery obj
	
	init: function(){
		$("div.mselect").each(function(){
//			$(this.previousSibling).bind("change", mSel.formChange);
			$(this).before('<div class="chooser" onclick="mSel.toogle(this);"></div>');
		});
	},
	
	toogle: function(obj){
		mSel.selector=obj.nextSibling;
		mSel.selectorOwner=obj;
		mSel.inputForm=obj.previousSibling;
		mSel.selectorShowing ? mSel.hide() : mSel.show();
	},
	show: function(obj){
		var sel=$(mSel.selector);
		mSel.selected=sel.children("div.mselected");
		mSel.selectorOwner.innerHtml=mSel.selected.html();
		sel.attr("id", "openselect");
		sel.css("left", mSel.selectorOwner.offsetLeft);
		top=mSel.selectorOwner.offsetTop+mSel.selectorOwner.offsetHeight;
		sel.css("top", top);
		$(mSel.selectorOwner).after(mSel.selector);
		$("div#openselect div").each(function(){
			$(this).bind("click", mSel.optClick);
			$(this).bind("mouseenter mouseleave", function(e){ $(this).toggleClass("over"); });
		});
		sel.show("slow");

		$(document).bind("mousedown", mSel.checkMouse);
		this.selectorShowing = true;
	},
	hide: function(obj){
		var sel=$(mSel.selector);
		sel.removeAttr("id");
		sel.hide();
		$(document).unbind("mousedown", mSel.checkMouse);
		this.selectorShowing = false;
	},
	checkMouse: function(event){
		//check the click was on selector itself or on selectorOwner
		var selector = "div#openselect";
		var selectorParent = $(event.target).parents(selector).length;
		sltr=$(selector);
		if(event.target == sltr) return;
		if($(event.target).parents(mSel.selectorOwner).length>0 ) return;
		if( selectorParent > 0) return;
		mSel.hide();
	},
	
	optClick: function(event){
		mSel.selectorOwner.innerHTML=this.innerHTML;
		var re=/img\/bars\/([0-9]*\.png)/i;
		var matches=this.firstChild.src.match(re);
		mSel.inputForm.value=matches[1];
		mSel.formChange(mSel.inputForm);
//		mSel.selected.removeClass('mselected');
//		$(this).addClass('mselected');
		mSel.hide();
	},
	formChange: function(obj){
		var selectorOwner=obj.nextSibling;
		var selector=selectorOwner.nextSibling;
		$(selector).children().removeClass("mselected");
		var re=new RegExp(obj.value,"i");
		for(i=0; i<selector.childNodes.length; i++){//FIXME: медленный метод((
			var div=selector.childNodes[i];
			var image=div.childNodes[0];
			if(image.src.search(re) != -1){
				selector.childNodes[i].className='mselected'
				selectorOwner.innerHTML=selector.childNodes[i].innerHTML;
				break;
			}
		}
//		data=$(selector).children("div:contains('"+obj.value+"')").addClass('mselected').html();
//		selectorOwner.innerHTML=data;
	}
}

//TODO: это должно срабатывать при вызове ub.edit();
$(document).ready(function() {
//	$('#fill').colorPicker();
//	$('#txtcolor').colorPicker();
//	$('#border_color').colorPicker();
	mSel.init();
});



/*
  * toJson
  *
  * produces a JSON string representation of a javascript object
  * usage: var jsonstring = toJSON(someobject);
  *
  * Tino Zijdel - crisp@xs4all.nl, 28/09/2006
  *//*
function toJSON(obj)
{
	if (typeof obj == 'undefined')
		return 'undefined';
	else if (obj === null)
		return 'null';

	var stringescape = {
		'\b': '\\b',
		'\t': '\\t',
		'\n': '\\n',
		'\f': '\\f',
		'\r': '\\r',
		'"' : '\\"',
		'\\': '\\\\'
        }

	var json = null, i, l, v, a = [];
	switch (obj.constructor)
	{
		case Array:
			l = obj.length;
			for (i = 0; i < l; i++)
			{
				if ((v = toJSON(obj[i])) !== null)
					a.push(v);
			}
			json = '[' + a.join(',') + ']';
			break;
		case Object:
			for (i in obj)
			{
				if (obj.hasOwnProperty(i) && (v = toJSON(obj[i])) !== null)
					a.push(toJSON(String(i)) + ':' + v);
			}
			json = '{' + a.join(',') + '}';
			break;
		case String:
			json = '"' + obj.replace(/[\x00-\x1f\\"]/g, function($0)
			{
				var c;
				if ((c = stringescape[$0]))
					return c;
				c = $0.charCodeAt();
				return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
			}) + '"';
			break;
		case Number:
			json = isFinite(obj) ? String(obj) : 'null';
			break;
		case Boolean:
			json = String(obj);
			break;
	}

	return json;
}
*/

function error(data){
	alert("Произошла ошибка:\n"+data.msg);
}

