function textCounter(fieldName, msgFieldName, msgButtonName, maxLimit) {
	var field = document.getElementById(fieldName);
	var msgField = document.getElementById(msgFieldName);
	
	if (field.value.length <= maxLimit) {
		//field.value = field.value.substring(0, maxLimit);
		msgField.innerHTML = "Pozostało znaków: "+(maxLimit-field.value.length);
		document.getElementById(msgButtonName).disabled=false;		
	}
	else { 
		msgField = document.getElementById(msgFieldName);
		msgField.innerHTML = "Za długi tekst: "+field.value.length;
		document.getElementById(msgButtonName).disabled=true;
	}
	
	msgField.innerHTML += "/"+maxLimit;
}

function autoSelect(field1, field2) {
    var sel1 = document.getElementById(field1);
    var sel2 = document.getElementById(field2);
    var selIndex = sel1.selectedIndex;
    var selVal = sel1.options[selIndex].value;
    
    var opts = sel1.options.length;
    for(index = 0; index < opts;  index++) {
        if(sel2.options[index].value == selVal)
        sel2.selectedIndex = index;
    }
}

function copyToList(list1, list2) {
	$(list2).insert($(list1).options[$(list1).selectedIndex]);
	sortOptions($(list2));
}

function selectAllOpts(listName) {
  var selObj = $(listName);
  for (var i=0; i<selObj.options.length; i++) {
    selObj.options[i].selected = true;
  }
}

/* return (>0 if a>b) (0 if a=b) (<0 if a<b) */
function compareOptionText(s1, s2) {
      var a = s1.text.toLowerCase();
      var b = s2.text.toLowerCase();
      return a!=b ? a<b ? -1 : 1 : 0;
}
       
function sortOptions(list) {
      var items = list.options.length;
      // create array and make copies of options in list
      var tmpArray = new Array(items);
      for ( i=0; i<items; i++ )
      	tmpArray[i] = new Option(list.options[i].text,list.options[i].value);
      // sort options using given function
      tmpArray.sort(compareOptionText);
      // make copies of sorted options back to list
      for ( i=0; i<items; i++ )
      	list.options[i] = new Option(tmpArray[i].text,tmpArray[i].value);
}


function showHideList(elemId) {
    var sel1 = document.getElementById(elemId);

    if(sel1.style.display == 'none') {
    	sel1.style.display = 'block';
    }
    else {
        sel1.style.display = 'none';
    }
}

function showEditPost(holderDivId, postId) {

	showHideOther();
	
    var holderDiv = document.getElementById(holderDivId+postId);	  // div holding the post
    var formContent = document.getElementById('postEdit').innerHTML;  // html displaying the edit form
    var post = document.getElementById(postId).innerHTML;             // post content
    post = htmlToBB(post);

    // insert form into the holder div
	holderDiv.innerHTML = formContent;

    // fill the form with post content
	document.getElementById('textarea').value = trim(post);

    // replace post id in the form hidden field
    newHiddenPostId = 'hid_post_'+postId;
	document.getElementById('hid_post').id = newHiddenPostId;
	document.getElementById(newHiddenPostId).value=postId;
	
	// toggle show/hide property for both divs
	contentDiv = document.getElementById('postContentDiv'+postId);
    if(holderDiv.style.display == 'none') {
    	holderDiv.style.display = 'block';
    	contentDiv.style.display = 'none';
    } else {
        holderDiv.style.display = 'none';
        contentDiv.style.display = 'block';
    }
}

function quotePost(holderDivId, postId, newDivId) {
	var holderDiv = document.getElementById(holderDivId+postId);	  // div holding the post
    var formContent = document.getElementById('postEdit').innerHTML;  // html displaying the edit form
    var post = document.getElementById(postId).innerHTML;             // post content
    post = htmlToBB(post);
    
    post = "[quote="+ $("auth"+postId).innerHTML +"]"+trim(post)+"[/quote]";
    
    showNewPost(newDivId, post);
}

function showNewPost(holderDivId, post) {

	showHideOther();
	
    var holderDiv = document.getElementById(holderDivId);	  // div holding the post
    var formContent = document.getElementById('postEdit').innerHTML;  // html displaying the edit form

    // insert form into the holder div
	holderDiv.innerHTML = formContent;
	
	if(post != null) document.getElementById('textarea').value = post;

	// toggle show/hide property
    if(holderDiv.style.display == 'none') {
    	holderDiv.style.display = 'block';
    } else {
        holderDiv.style.display = 'none';
    }
}

function showHideOther() {
	// hide all edit divs
    $$('div.postEditDiv').each(function(s) { s.innerHTML=''; });
    // show all content divs
    $$('div.postContentDiv').each(function(s) { s.style.display='block'; });
}

function htmlToBB(s) {
//	alert(s);
	s=s.gsub(/<div class=\"bbcode_quote\">\s/i, '').gsub(/<div class=\"bbcode_quote_head\">Cytat:<\/div>\s/i, '[quote]').gsub(/<div class=\"bbcode_quote_head\">(.*?)\spisze:<\/div>\s/i, '[quote=#{1}]').gsub(/<div class=\"bbcode_quote_body\">(.*?)<\/div>\s<\/div>/i, '#{1}[/quote]').
	gsub(/<b>/i, '[b]').gsub(/<\/b>/i, '[/b]').gsub(/<i>/i, '[i]').gsub(/<\/i>/i, '[/i]').gsub(/<u>/i, '[u]').gsub(/<\/u>/i, '[/u]').gsub(/<a href=\"(.*?)\"(.*?)>/i, '[url=#{1}]').gsub(/<\/a>/i, '[/url]').
	gsub(/<span style=\"color:(.*?)\">(.*?)<\/span>/i, '[color=#{1}]#{2}[/color]').
	gsub(/<span style=\"font-size:\s*0?.5em;?\">/i, '[size=0]').gsub(/<span style=\"font-size:\s*1(.0)?em;?\">/i, '[size=3]').gsub(/<span style=\"font-size:\s*1.17em;?\">/i, '[size=4]').gsub(/<span style=\"font-size:\s*1.5em;?\">/i, '[size=5]').gsub(/<span style=\"font-size:\s*2(.0)?em;?\">/i, '[size=6]').gsub(/<span style=\"font-size:\s*2.5em;?\">/i, '[size=7]').gsub(/<\/span>/i, '[/size]').
	gsub(/<ul(.*?)>/i, '[list]').gsub(/<\/ul>/i, '[/list]').gsub(/<li>(.*?)<\/li>/i, '[*]#{1}').gsub(/<ol(.*?)>/i, '[list=1]').gsub(/<\/ol>/i, '[/list]').//gsub(/<br\s*\/?>/i, '\r\n').
	gsub(/<object type=\"application\/x-shockwave-flash\".*\s*value=\"http:\/\/www.youtube.com\/v\/(.*?)\"\s*\/?><\/object>/i, '[youtube]#{1}[/youtube]').
	unescapeHTML();
//	alert(s);
	return s;
}

function trim(str) {
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}

// modal window functions
function myModalImg(imgSrc) {
	var myDiv = new Element('div');
	var newImg = new Element('img');
	
	newImg.observe('load', function(){
		myDiv.update(newImg);
		  
		var maxH = document.documentElement.clientHeight - 40;
		var optH = newImg.height + 20;
		var maxW = document.documentElement.clientWidth - 40;
		var optW = newImg.width + 36;
		
		var modalHeight = optH > maxH ? maxH : optH;
		var modalWidth = optW > maxW ? maxW : optW; 

		Modalbox.show(myDiv, {title: null, width: modalWidth, height: modalHeight});
	 });
	newImg.src = imgSrc;
}

function myModal(text, link, width, height, onlyOneButton) {
	var node = new Element('div', {className: 'warning', style: 'text-align: center; display:none'}).update(
		new Element('p').update(text)).
		insert(new Element('input', {className: 'submit', type: 'button', value: 'Tak', id: 'deleteBut'})).
	    insert(new Element('input', {className: 'submit', type: 'button', value: 'Nie', id: 'cancelBut'}));
	
	var hideObserver = Modalbox.hide.bindAsEventListener(Modalbox);
	var confirmObserver = confirmHandler.bindAsEventListener(Modalbox, link);
	function setObservers() {
		$('deleteBut').observe('click', confirmObserver);
		$('cancelBut').observe('click', hideObserver);
		
		if(onlyOneButton == true) { $('deleteBut').remove(); $('cancelBut').value = 'Zamknij'; }
	};
	function removeObservers() {
		$('deleteBut').stopObserving('click', confirmObserver);
		$('cancelBut').stopObserving('click', hideObserver);
	}
	
	if(width === undefined) var width = 300;
	if(height === undefined) var height = 90;
	
	Modalbox.show(node, {title: this.title, width: width, height: height, afterLoad: setObservers, onHide: removeObservers});
}

function confirmHandler(event) {
	var data = $A(arguments);
	data.shift();
	Modalbox.hide();
	window.location = data[0];
}

// inplace editor functions

function inplaceEditor(updatedId, ajaxDivId, buttonId, url, params) {
	// usage
	// <div id="editor" onclick="inplaceEditor('title', 'ajax', this.id, <?php echo url_for('forum/updateTitle') ?>,'id=<?php echo $topic->getId() ?>.')">edytuj</div>
	$(updatedId).hide();
	$(buttonId).hide();
	$(ajaxDivId).innerHTML = 
		'<form id="myform">' +
			'<input type="text" style="border:1px solid red;" name="text" value="'+$(updatedId).innerHTML+'" />' +
			'<input type="button" value="Zapisz" class="gen-submit" onclick="ajaxUpdater(\''+updatedId+'\',\''+url+'\',\''+params+'\'); $('+buttonId+').show(); $(\''+updatedId+'\').show(); $('+ajaxDivId+').innerHTML=\'\'" />' +
			'<input type="reset" value="Anuluj" class="gen-submit" onclick="$('+buttonId+').show(); $(\''+updatedId+'\').show(); $('+ajaxDivId+').innerHTML=\'\'" />' +
		'</form><div class="clear"></div>';
}

function ajaxUpdater(updatedId, url, params) {
	if(params.length>0) params += '&';
	params += $('myform').serialize();
	new Ajax.Updater(updatedId, url, {parameters: params});
}

function semiInplaceEditor(ajaxDivId, buttonId, url, params) {
	var hiddenFields = '';
	var keyVals = params.toQueryParams();

	// get keys and values
	Object.keys(keyVals).each(function(key) {
		hiddenFields += '<input type="hidden" name="'+key+'" value="'+keyVals[key]+'" />';
	});
	$(buttonId).hide();
	$(ajaxDivId).innerHTML = 
		'<form id="myform" action="'+url+'">' + hiddenFields +
			'<input type="text" class="inplaceEditor" name="text" />' +
			'<input type="submit" value="Zapisz" class="gen-submit" />' +
			'<input type="reset" value="Anuluj" class="gen-submit" onclick="$('+buttonId+').show(); $('+ajaxDivId+').innerHTML=\'\'" />' +
		'</form><div class="clear"></div>';
}
