/*
 *	This library is a copyright software;
 *
 *	@package		: Poety CMS
 *	@version		: 1.0
 *	@creation		: 2007.04.13.
 *	@link			: http://poety.hu
 *	@author			: Szirják Csaba (Chaar-Lee) [chaarlee@poety.hu]
 *	@license		: http://poety.hu/license.html
 *
 *	Copyright (C) 2007 Szirják Csaba (Chaar-Lee)
 */


/****************************************/
/***             cookies              ***/
/****************************************/

function cookie_set(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function cookie_get(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function cookie_delete(name) {
	cookie_set(name,"",-1);
}

/****************************************/
/***       javascrip extension        ***/
/****************************************/

function load_script(library) {
	//document.write('<script type="text/javascript" src="'+library+'"></script>');
	var script = document.createElement('script');
	script.type = 'text/javascript';
	script.src = library;
	document.getElementsByTagName('head')[0].appendChild(script);  
}

function in_array(my_value,my_array) {
	//default is incasesensitive!
	caseSensitive = in_array.arguments.length<3?0:in_array.arguments[2];
	for(i=0;i<my_array.length;i++) {
		if((caseSensitive==0?my_array[i]:my_array[i].toUpperCase())==(caseSensitive==0?my_value:my_value.toUpperCase())) {
			return true;
		}
	}
	return false;
}

function popup(url,target,width,height,left,top) {
	window.open(url,target,'scrollbars=no,status=no,toolbar=no,directories=no,menubar=no,location=no,resizable=no,width='+width+',height='+height+',left='+left+',top='+top+'');
}

/****************************************/
/***     overlib Poety extension      ***/
/****************************************/

function _overlib(e) {
	return overlib(overlib_text[this.id]);
}

function overlib_observe(objid,comment) {
	overlib_text[objid] = comment;
	Event.observe(objid,'mouseover',_overlib,false);
	Event.observe(objid,'mouseout',nd,false);
}

/****************************************/
/***    calendar Poety extension      ***/
/****************************************/

function _calendar(_input,_button,_type) {
	 _format = "%Y-%m-%d";
	 _showtime = false;
	 if(_type=='datetime') {
		_format = "%Y-%m-%d %H:%M:%S";
		_showtime = true;
	 }
	 if(_type=='time') {
		_format = "%H:%M:%S";
		_showtime = true;
	 }
	 Zapatec.Calendar.setup({
        firstDay          : 1,
        showOthers        : true,
		showsTime         : _showtime,
        electric          : false,
        inputField        : _input,
        button            : _button,
        ifFormat          : _format,
        daFormat          : _format
      });
}

/****************************************/
/***          DOM extension           ***/
/****************************************/

function element_append_attribute(element,attr,value) {
	_attr = document.createAttribute(attr);
	_attr.value = value;
	element.setAttributeNode(_attr);
}

function element_append_element(element,append_tag,append_id,append_class) {
	var append_element = document.createElement(append_tag);
	if(append_id!="") { element_append_attribute(append_element,'id',append_id); }
	if(append_class!="") { element_append_attribute(append_element,'class',append_class); }
	element.appendChild(append_element);
	return append_element;
}

function switch_display(element) {
	if($(element)) {
		if($(element).style.display=='none') {
			Element.setStyle(element,{display: 'block'});
		}
		else {
			Element.setStyle(element,{display: 'none'});
		}
	}
}

/****************************************/
/***            box handler           ***/
/****************************************/

function box_handler() {
	boxes = document.getElementsByClassName('box_button_close');
	for(i=0;i<boxes.length;i++) {
		boxes[i].onclick = box_close.bindAsEventListener(this,boxes[i]);
	}
	boxes = document.getElementsByClassName('box_button_blind');
	for(i=0;i<boxes.length;i++) {
		boxes[i].onclick = box_blind.bindAsEventListener(this,boxes[i]);
	}
}

function box_close(e,box) {
	new Effect.Fade(box.parentNode.parentNode.id);
}

function box_blind(e,box) {
	if(header = document.getElementsByClassName('box_header',box.parentNode.parentNode)) {
		switch_display(header[0]);
	}
	if(body = document.getElementsByClassName('box_body',box.parentNode.parentNode)) {
		switch_display(body[0]);	
	}
	if(footer = document.getElementsByClassName('box_footer',box.parentNode.parentNode)) {
		switch_display(footer[0]);
	}
	//new Effect.toggle(body[0],'BLIND');
}


/****************************************/
/***           lista handler          ***/
/****************************************/

function lista_handler() {
	orderables = $$(".lista .lista_orderable");
	for(i=0;i<orderables.length;i++) {
		orderables[i].onclick = lista_order.bindAsEventListener(this,orderables[i]);
	}
	rows = $$(".lista tbody tr");
	for(i=0;i<rows.length;i++) {
		rows[i].onclick = lista_row_select.bindAsEventListener(this,rows[i]);
	}
}

function lista_order(e,row) {
	order_by = row.getAttribute('abbr');
	order = row.className.indexOf('asc')>=0?'desc':'asc';
	table_name = row.parentNode.parentNode.parentNode.id;
	$('order_by_'+table_name).value = order_by;
	$('order_'+table_name).value = order;
	$('form_'+table_name).submit();
}

function lista_row_select(e,row) {
	if(row.className.indexOf("lista_row_selected")==-1) {
		Element.addClassName(row,"lista_row_selected");
	}
	else {
		Element.removeClassName(row,"lista_row_selected");
	}
}


/****************************************/
/***           pager handler          ***/
/****************************************/

function pager_handler() {
	pager_selects = $$('.pager select');
	for(i=0;i<pager_selects.length;i++) {
		pager_selects[i].onchange = pager_select_submit.bindAsEventListener(this,pager_selects[i]);
	}
	pager_prevs = $$('.pager span.pager_prev');
	for(i=0;i<pager_prevs.length;i++) {
		pager_page_selector_div = pager_prevs[i].parentNode.parentNode.getElementsByClassName('pager_page_selector');
		pager_page_selector = pager_page_selector_div[0].getElementsByTagName('select');
		if(pager_page_selector[0].selectedIndex==0) {
			Element.setStyle(pager_prevs[i],{visibility: 'hidden'});
		}
		else {
			pager_prevs[i].onclick = pager_arrow_submit.bindAsEventListener(this,pager_prevs[i],pager_page_selector[0].selectedIndex-1);
		}		
	}
	pager_nexts = $$('.pager span.pager_next');
	for(i=0;i<pager_nexts.length;i++) {
		pager_page_selector_div = pager_nexts[i].parentNode.parentNode.getElementsByClassName('pager_page_selector');
		pager_page_selector = pager_page_selector_div[0].getElementsByTagName('select');
		if(pager_page_selector[0].selectedIndex==pager_page_selector[0].options.length-1) {
			Element.setStyle(pager_nexts[i],{visibility: 'hidden'});
		}
		else {
			//pager_nexts[i].onclick = pager_arrow_submit.bindAsEventListener(this,pager_page_selector[0].options[pager_page_selector[0].selectedIndex+1]);
			pager_nexts[i].onclick = pager_arrow_submit.bindAsEventListener(this,pager_nexts[i],pager_page_selector[0].selectedIndex+1);
		}		
	}
}

function pager_select_submit(e,select) {
	select_divs = select.parentNode.parentNode.parentNode.getElementsByClassName(select.parentNode.className);
	for(i=0;i<select_divs.length;i++) {
		selects = select_divs[i].getElementsByTagName('select');
		selects[0].options[select.selectedIndex].selected = true;
	}
	select.parentNode.parentNode.parentNode.submit();
}

function pager_arrow_submit(e,arrow,option_index) {
	page_selector_divs = arrow.parentNode.parentNode.parentNode.getElementsByClassName('pager_page_selector');
	for(i=0;i<page_selector_divs.length;i++) {
		selects = page_selector_divs[i].getElementsByTagName('select');
		option = selects[0].options[option_index];
		option.selected = true;
	}	
	arrow.parentNode.parentNode.parentNode.submit();
}


/****************************************/
/***          filter handler          ***/
/****************************************/

function filter_handler() {
	filters = $$('.filter');
	for(i=0;i<filters.length;i++) {
		visibility_buttons = filters[i].getElementsByClassName('filter_visibility_button');
		contents = filters[i].getElementsByClassName('filter_content');
		inputs = filters[i].getElementsByTagName('input');
		button_turnoff = filters[i].getElementsByClassName('filter_button_turnoff');
		visibility_buttons[0].onclick = filter_change_visibility.bindAsEventListener(this,contents[0]);
		button_turnoff[0].onclick = filter_turnoff.bindAsEventListener(this,filters[i]);
		display = 0;
		for(j=0;j<inputs.length;j++) {
			if(inputs[j].value!="") {
				display = 1;
			}
		}
		if(!display) {
			Element.setStyle(contents[0],{display: 'none'});
		}
	}
}

function filter_change_visibility(e,content) {
	//new Effect.toggle(content,'blind');
	switch_display(content);
}

function filter_turnoff(e,filter) {
	inputs = filter.getElementsByTagName('input');
	for(i=0;i<inputs.length;i++) {
		inputs[i].value="";
	}
}


/****************************************/
/***        listaedit handler         ***/
/****************************************/

function listaedit_handler() {
	listaedits = $$('.listaedit');
	for(i=0;i<listaedits.length;i++) {
		name						= listaedits[i].id;
		edit_visibility_buttons		= listaedits[i].getElementsByClassName('listaedit_visibility_button_edit');
		edit_contents				= listaedits[i].getElementsByClassName('listaedit_content_edit');
		lista_visibility_buttons	= listaedits[i].getElementsByClassName('listaedit_visibility_button_lista');
		lista_contents				= listaedits[i].getElementsByClassName('listaedit_content_lista');
		inputs						= edit_contents[0].getElementsByTagName('input');
		clear_buttons				= listaedits[i].getElementsByClassName('listaedit_button_clear');
		add_buttons					= listaedits[i].getElementsByClassName('listaedit_button_add');
		save_buttons				= listaedits[i].getElementsByClassName('listaedit_button_save');
		//tbody						= listaedits[i].getElementsByTagName('tbody');
		//tbody						= $$('.listaedit .lista tbody');
		tbody						= $$('#'+listaedits[i].id+' .lista tbody');
		edit_visibility_buttons[0].onclick = listaedit_change_visibility.bindAsEventListener(this,edit_contents[0]);
		lista_visibility_buttons[0].onclick = listaedit_change_visibility.bindAsEventListener(this,lista_contents[0]);
		clear_buttons[0].onclick = listaedit_clear.bindAsEventListener(this,edit_contents[0]);
		add_buttons[0].onclick = listaedit_add.bindAsEventListener(this,edit_contents[0],save_buttons[0]);
		display = 0;
		for(j=0;j<inputs.length;j++) {
			if(inputs[j].value!="" && inputs[j].type=="text") {
				display = 1;
			}
		}
		if(!display) {
			Element.setStyle(edit_contents[0],{display: 'none'});
		}
		link = window.location.href.replace(window.location.search,"");
		if(tbody[0]) {
			rows = tbody[0].getElementsByTagName('tr');
			for(j=0;j<rows.length;j++) {
				cols = rows[j].getElementsByTagName('td');
				id = cols[0].innerHTML;
				cols[0].innerHTML = "";
				command_button = element_append_element(cols[0],'div',"","listaedit_button_command");
				//element_append_attribute(edit_button,'title',"commands");
				id_span = element_append_element(cols[0],'span',"","listaedit_row_id");
				id_span.innerHTML = id;
				command_button.onclick = listaedit_command.bindAsEventListener(this,'command',name,cols[0],"");
			}
		}
		if($(name+'_commands_box')) {
			Position.absolutize($(name+'_commands_box'));
			Element.setStyle($(name+'_commands_box'),{display: 'none'});
			commands = $$('#'+name+'_commands_box ul li');
			for(j=0;j<commands.length;j++) {
				// strlen("listaedit_command_") =
				command = commands[j].className.substr(18);
				span = commands[j].getElementsByClassName('confirm_text');
				confirm_text = span[0].innerHTML;
				commands[j].onclick = listaedit_command.bindAsEventListener(this,command,name,0,confirm_text);
			}
			input = element_append_element($('form_'+name+'_lista'),'input');
			element_append_attribute(input,'id',name+'_com');
			Element.hide(input);
		}	
	}
}

function listaedit_change_visibility(e,content) {
	//new Effect.toggle(content,'blind');
	switch_display(content);
	commands_boxs = $$('.listaedit_commands_box');
	for(i=0;i<commands_boxs.length;i++) {
		Element.setStyle(commands_boxs[i],{display: 'none'});
	}
}

function listaedit_clear(e,edit) {
	inputs = edit.getElementsByTagName('input');
	for(i=0;i<inputs.length;i++) {
		//if(inputs[i].type!="hidden" && inputs[i].type!="radio" && inputs[i].type!="checkbox") {
		/*
		if(inputs[i].type=="text") {
			inputs[i].value="";
		}
		*/
		Form.Element.clear(inputs[i]);
	}
	textareas = edit.getElementsByTagName('textarea');
	for(i=0;i<textareas.length;i++) {
		//textareas[i].value="";
		Form.Element.clear(textareas[i]);
	}
}

function listaedit_add(e,edit,save) {
	ok = 0;
	inputs = edit.getElementsByTagName('input');
	for(i=0;i<inputs.length;i++) {
		if(inputs[i].type=="hidden") {
			if(!ok && inputs[i].name.indexOf('_id')==inputs[i].name.length-3) {
				inputs[i].disabled = true;
				ok = 1;
			}
		}
	}
	save.click();
}

function listaedit_command(e,com,name,col,confirm_text) {
	if(com=='command') {
		pos = Position.cumulativeOffset(col);
		Element.setStyle(name+'_commands_box',{left: (pos[0])+'px', top: (pos[1])+'px'});
		switch_display(name+'_commands_box');
		id_span = col.getElementsByClassName('listaedit_row_id');
		id = parseInt(id_span[0].innerHTML);
		$(name+'_com').value = id;
	}
	else {
		if($F(name+'_com') && (confirm_text=="" || confirm(confirm_text))) {
			//alert(com+'_'+name);
			$(name+'_com').name = com+'_'+name;
			form = $('form_'+name+'_lista');
			form.submit();
		}
	}
}


/****************************************/
/***            view handler          ***/
/****************************************/

function view_handler() {
	rows = $$(".view tbody tr");
	for(i=0;i<rows.length;i++) {
		rows[i].onclick = view_row_select.bindAsEventListener(this,rows[i]);
	}
}

function view_row_select(e,row) {
	if(row.className.indexOf("view_row_selected")==-1) {
		Element.addClassName(row,"view_row_selected");
	}
	else {
		Element.removeClassName(row,"view_row_selected");
	}
}


/****************************************/
/***           frame handler          ***/
/****************************************/

function frame_handler() {
	frame_handler_debug();
	frame_handler_response();
	frame_handler_error();
	frame_handler_loadbar();
}

// debug
function frame_handler_debug() {
	if($('frame_debug')) {
		frame_handler_debug_show();
		frame_handler_debug_append_button_close();
		frame_handler_debug_append_button_expand();
	}
}

function frame_handler_debug_show() {
	Element.setStyle('frame_debug',{display: 'block'});
}

function frame_handler_debug_hide() {
	Element.setStyle('frame_debug',{display: 'none'});
}

function frame_handler_debug_close() {
	new Effect.Fade('frame_debug');
	window.setTimeout("frame_handler_debug_hide()",5000);
}

function frame_handler_debug_append_button_close() {
	button_close = element_append_element($('frame_debug_buttons'),'div',"frame_debug_button_close","frame_debug_button_close");
	Event.observe(button_close,'click',frame_handler_debug_close,false);
}

function frame_handler_debug_append_button_expand() {
	button_expand = element_append_element($('frame_debug_buttons'),'div',"frame_debug_button_expand","frame_debug_button_expand");
	Event.observe(button_expand,'click',frame_handler_debug_expand,false);
}

function frame_handler_debug_expand() {
	Element.setStyle('frame_debug_content',{height: '250px'});
	Event.stopObserving('frame_debug_button_expand','click',frame_handler_debug_expand,false);
	Event.observe('frame_debug_button_expand','click',frame_handler_debug_contract,false);
}

function frame_handler_debug_contract() {
	Element.setStyle('frame_debug_content',{height: '50px'});
	Event.stopObserving('frame_debug_button_expand','click',frame_handler_debug_contract,false);
	Event.observe('frame_debug_button_expand','click',frame_handler_debug_expand,false);
}

// error
function frame_handler_error() {
	if($('frame_error')) {
		frame_handler_error_show();
		Event.observe('frame_error','click',frame_handler_error_hide,false);
		window.setTimeout("frame_handler_error_hide()",60000);
	}
}

function frame_handler_error_show() {
	$('frame_error').setOpacity(0.9);
	Element.setStyle('frame_error',{display: 'block'});	
}

function frame_handler_error_hide() {
	new Effect.Fade('frame_error');
	window.setTimeout("Element.setStyle('frame_error',{display: 'none'})",3000);
}

// response
function frame_handler_response() {
	if($('frame_response')) {
		frame_handler_response_show();
		Event.observe('frame_response','click',frame_handler_response_hide,false);
		window.setTimeout("frame_handler_response_hide()",15000);
	}
}

function frame_handler_response_show() {
	$('frame_response').setOpacity(0.9);
	Element.setStyle('frame_response',{display: 'block'});	
}

function frame_handler_response_hide() {
	new Effect.Fade('frame_response');
	window.setTimeout("Element.setStyle('frame_response',{display: 'none'})",3000);
}

// loadbar
function frame_handler_loadbar() {
	if($('frame_loadbar')) {
		Element.hide('frame_loadbar');
		Position.prepare();
		Element.setStyle('frame_loadbar',{top: (Position.deltaY+30)+'px'});
		var loadbar_handler = {
			onCreate: function(){
				Position.prepare();
				Element.setStyle('frame_loadbar',{top: (Position.deltaY+30)+'px'});
				Element.setStyle('frame_loadbar',{display: 'block'});
				//Element.show('frame_loadbar');
			},

			onComplete: function() {
				if(Ajax.activeRequestCount == 0){
					Element.hide('frame_loadbar');
				}
			}
		};
		Ajax.Responders.register(loadbar_handler);
	}
}


/****************************************/
/***    language_selector handler     ***/
/****************************************/

function language_selector_handler() {
	if($('language_selector')) {
		langs = $('language_selector').getElementsByTagName('img');
		for(i=0;i<langs.length;i++) {
			langs[i].onclick = language_select.bindAsEventListener(this,langs[i]);
		}
	}
}

function language_select(e,obj) {
	cookie_set('lang',obj.title,365);
	document.location.reload();
}


/****************************************/
/***          email handler           ***/
/****************************************/

function email_handler() {
	emails = document.getElementsByClassName('email');
	for(i=0;i<emails.length;i++) {
		s = emails[i].href;
		s = s.replace('[at]','@');
		s = s.replace('[dot]','.');
		emails[i].href = s;
		s = emails[i].innerHTML;
		s = s.replace('[at]','@');
		s = s.replace('[dot]','.');
		emails[i].innerHTML = s;
	}
}

/****************************************/
/***               poety              ***/
/****************************************/

function poety_init() {
	box_handler();
	frame_handler();
	lista_handler();
	pager_handler();
	filter_handler();
	view_handler();
	listaedit_handler();
	language_selector_handler();
	email_handler();
}

var overlib_text = new Array();
Event.observe(window,'load',poety_init,false);