
// URLEncode is from http://cass-hacks.com/articles/code/js_url_encode_decode/
// It was added by Kelson Consulting AS. Modified to not encode letters used in nordic languages.
// It is used for correctly storing edited blog posts containing html markup, ampersands etc.
function URLEncode(clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.æøåäöüÆØÅÄÖÜ]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}


// From http://cass-hacks.com/articles/code/js_url_encode_decode/
function URLDecode (encodedString) {
  var output = encodedString;
  var binVal, thisString;
  var myregexp = /(%[^%]{2})/;
  while ((match = myregexp.exec(output)) != null
             && match.length > 1
             && match[1] != '') {
    binVal = parseInt(match[1].substr(1),16);
    thisString = String.fromCharCode(binVal);
    output = output.replace(match[1], thisString);
  }
  return output;
}





// Show Ajax Errors

function showError(r){
  // console.log(r);
  if((r.responseText != "")&&($('ajax_result'))){
  var re = new RegExp(/<body>([\s\S]*)<\/body>/m);
  var nobody = re.exec(r.responseText);
  $('ajax_result').setHTML(nobody[1]);
  $('ajax_result').setStyle('display', 'block');
  }else{
  alert("Error: " + r.status + " - " + r.statusText);
  }
}

// Helper function to fix AJAX errors when tinyMCE is enabled
function saveTinyMCE() {
	try {
		tinyMCE.triggerSave();
	}
	catch(e) {
	}
}


// Extra Check for Ajax Error in XML

function CheckIfError(r){

	var result = r.documentElement;
	var error = result.getElementsByTagName('error')[0].firstChild.data;
	var error_string = result.getElementsByTagName('error_string')[0].firstChild.data;

	if(error == 1){
		if(error_string != ""){
			alert("Error: " + error_string);
		}

	return true;
	}

return false;
}

// rating functions

function setRating(rating, media_key){

	var myAjax = new Ajax(
		"ajax_com.php?action=mediarating",
			{
				method:'post',
				update: 'media_rating',
        onFailure: function(e){showError(this.transport)},
        data:'rating=' + rating + '&mediakey=' + media_key
			}
	).request();
}

// favorite functions

function setFavorite(media_key){

	var myAjax = new Ajax(
		"ajax_com.php?action=favourite",
		{
				method:'post',
      onFailure: function(e){showError(this.transport)},
      onComplete: function(e){showFavouriteResult(this.transport.responseXML)},
      data: '&mediakey=' + media_key
			}
	).request();
}


function showFavouriteResult(r){

	if(CheckIfError(r)) return ;

	var result = r.documentElement;
	var image = result.getElementsByTagName('image')[0].firstChild.data;
	var image_alt = result.getElementsByTagName('image_alt')[0].firstChild.data;
	var message = result.getElementsByTagName('message')[0].firstChild.data;
	
  $('favorite_button').style.height = result.getElementsByTagName('height')[0].firstChild.data + "px";
	$('favorite_button').style.width = result.getElementsByTagName('width')[0].firstChild.data + "px";
	
	$('favorite_button').className = 'button';
  $('favorite_button').src = image;
	$('favorite_button').alt = $('favorite_button').title= image_alt;

}



function checkMediaForm(){
  saveTinyMCE();
  var form_value = $('comment_text_id').value;
  $('comment_text_id').value = '';
  
  if(form_value==""){
    $('comment_text_id').focus();
    
    new Fx.Style('comment_text_id', 'background-color').start('#FF0000','#ffffff');
  }else{
    var myAjax = new Ajax(
      "ajax_com.php?action=comments",
      {
	method:'post',
	onFailure:function(e){showError(this.transport)},
	update: 'comments_div',
	data: 'comment=' + form_value + '&mediakey=' + $('comment_mediakey_id').value
      }
    ).request()
  
  };
  return false;
}


function CheckUploadForm(){
saveTinyMCE();
$('upload_media_title_error').setStyle('display','none');
$('upload_file_error').setStyle('display','none');
$('upload_file_type_error').setStyle('display','none');
$('upload_media_description_error').setStyle('display','none');
$('upload_media_channel_error').setStyle('display','none');
$('errors').setStyle('display','none');

if($('upload_media_title_id').value=='')$('upload_media_title_error').setStyle('display','block');

if($('upfile_0_id').value=='')$('upload_file_error').setStyle('display','block');

if($('upload_media_description_id').value=='')$('upload_media_description_error').setStyle('display','block');

$('upload_media_channel_error').setStyle('display','block');
$$('input[id^=upload_media_channel]').each(function(checkbox){
   if(checkbox.checked==true)$('upload_media_channel_error').setStyle('display','none');
   });

if(
($('upload_media_title_error').getStyle('display')=="block") ||
($('upload_file_error').getStyle('display')=="block") ||
($('upload_media_description_error').getStyle('display')=="block") ||
($('upload_media_channel_error').getStyle('display')=="block") ||
($('upload_file_type_error').getStyle('display')=="block")){
  $('errors').setStyle('display', 'block');
  return false;
}else{
$$('input[id^=upload_media_type]').each(function(radio){
   if(radio.checked==true)$('filetype_id').value=radio.value;
   });

var myAjax = new Ajax(
		'ajax_com.php?action=checktype&umt='+$('filetype_id').value,
			{
				method:'post',
				onFailure:function(e){showError(this.transport)},
				onComplete:function(e){
        if(this.transport.responseXML.documentElement.getElementsByTagName('filetype')[0].firstChild.data != "ok"){
        $('upload_file_type_error').setStyle('display','block');
        $('errors').setStyle('display', 'block');
        return false;
        }else{
            uploadFiles();
        };
         },
				data: 'ext='+encodeURIComponent($('upfile_0_id').value)
       }
	).request();
};
}

function CheckUploadForm2(){
saveTinyMCE();
$('upload_media_title_error').setStyle('display','none');
$('upload_file_error').setStyle('display','none');
$('upload_file_type_error').setStyle('display','none');
$('upload_media_description_error').setStyle('display','none');
$('upload_media_channel_error').setStyle('display','none');
$('errors').setStyle('display','none');

if($('upload_media_title_id').value=='')$('upload_media_title_error').setStyle('display','block');

if($('upfile_0_id').value=='')$('upload_file_error').setStyle('display','block');

if($('upload_media_description_id').value=='')$('upload_media_description_error').setStyle('display','block');

$('upload_media_channel_error').setStyle('display','block');
$$('input[id^=upload_media_channel]').each(function(checkbox){
   if(checkbox.checked==true)$('upload_media_channel_error').setStyle('display','none');
   });

if(
($('upload_media_title_error').getStyle('display')=="block") ||
($('upload_file_error').getStyle('display')=="block") ||
($('upload_media_description_error').getStyle('display')=="block") ||
($('upload_media_channel_error').getStyle('display')=="block") ||
($('upload_file_type_error').getStyle('display')=="block")){
  $('errors').setStyle('display', 'block');
  return false;
}else{
$$('input[id^=upload_media_type]').each(function(radio){
   if(radio.checked==true)$('filetype_id').value=radio.value;
   });

var myAjax = new Ajax(
		'ajax_com.php?action=checktype&umt='+$('filetype_id').value,
			{
				method:'post',
				onFailure:function(e){showError(this.transport)},
				onComplete:function(e){
        if(this.transport.responseXML.documentElement.getElementsByTagName('filetype')[0].firstChild.data != "ok"){
        $('upload_file_type_error').setStyle('display','block');
        $('errors').setStyle('display', 'block');
        return false;
        }else{
        $('form_upload').submit();
        };
         },
				data: 'ext='+encodeURIComponent($('upfile_0_id').value)
       }
	).request();
};
}

function ChangeForm(mediatype){
var myAjax = new Ajax(
		"ajax_com.php?action=mediatype&type="+mediatype,
			{
				method:'get',
				update: 'media_type',
				onFailure:function(e){showError(this.transport)}
       }
	).request();
}

// guestbook functions
function checkGuestBook(){
saveTinyMCE();
$('errors').setStyle('display','none');
if(($('guestbook_text_id').value=='')&&($('guestbook_media_id').value=='0'))$('errors').setStyle('display','block');
if($('errors').getStyle('display')!="block"){
  var myAjax = new Ajax(
		"ajax_com.php?action=gb_insert&uid="+$('user_id_id').value,
			{
				method:'post',
				update: 'user_guestbook',
				onFailure:function(e){showError(this.transport)},
				data: 'media_id='+$('guestbook_media_id').value+'&text='+$('guestbook_text_id').value
        }
	).request();
 };
}

function showGuestBook(offset){
$('errors').setStyle('display','none');
  var myAjax = new Ajax(
		"ajax_com.php?action=guestbook&uid="+$('user_id_id').value+"&offset="+offset,
			{
				method:'get',
				update: 'user_guestbook',
				onFailure:function(e){showError(this.transport)}
				}
	).request();
return false;
}

function delete_guestbook(gid){
  new Ajax('ajax_com.php?action=gb_delete&uid='+$('user_id_id').value+'&offset='+$('offset_id').value,
    {
	  method: 'post',
	  update: 'user_guestbook',
    onFailure:function(e){showError(this.transport)},
	  data: 'gid='+gid
	  }).request();
	return false;
}

// chat block functions
function checkChatForm(){

$('errors').setStyle('display','none');
$('errors2').setStyle('display','none');
if($('user_id_id').value==''){
 $('errors2').setStyle('display','block');
}else{
  if($('chat_text_id').value=='')$('errors').setStyle('display','block');
};

if(($('errors').getStyle('display')!="block")&&($('errors2').getStyle('display')!="block")){
  var myAjax = new Ajax(
		"ajax_com.php?action=chat&uid="+$('user_id_id').value,
			{
				method:'post',
				onFailure:function(e){showError(this.transport)},
				update: 'chatbox',
				data: 'txt='+$('chat_text_id').value
        }
	).request();
 };
}

function refreshChat() {
  if(($('errors').getStyle('display')!="block")&&($('errors2').getStyle('display')!="block")&&($('chat_text_id').value=='')){
    var myAjax = new Ajax(
      "ajax_com.php?action=chat",
       {
        method:'post',
        update: 'chatbox',
        data: ''
       }
	   ).request();
	};
}

function showUserFriends(id,show){
   new Ajax('ajax_com.php?action=friends&id='+id+'&show='+show,
   {
		method: 'get',
		onFailure:function(e){showError(this.transport)},
		onComplete: function(e){
        $('friends_main_'+id).setHTML(this.transport.responseXML.documentElement.getElementsByTagName('friends')[0].firstChild.data);
        var show = this.transport.responseXML.documentElement.getElementsByTagName('friends_show')[0].firstChild.data;
        $('friends_'+id).removeEvents('click');
        $('friends_'+id).addEvent('click', function(e){
          e = new Event(e).stop();
          showUserFriends(id,show);
        });
        }
	}).request();
}

function add_nick(nick){
  if($('message_id').value.indexOf(nick+':') != 0) $('message_id').value = nick + ': ' + $('message_id').value;
}

function make_text(id, startTag, endTag){
	var txtarea = document.getElementById(id);
	txtarea.focus();
	startTag = '<'+startTag+'>';
	if(endTag)endTag = '</'+endTag+'>';
	var scrtop = txtarea.scrollTop;
  var cursorPos = getCursor(txtarea);
	var txt_pre = txtarea.value.substring(0, cursorPos.start);
	var txt_sel = txtarea.value.substring(cursorPos.start, cursorPos.end);
	var txt_aft = txtarea.value.substring(cursorPos.end);

	if (cursorPos.start == cursorPos.end){
		var nuCursorPos = cursorPos.start + startTag.length;
	}else{
		var nuCursorPos=String(txt_pre + startTag + txt_sel + endTag).length;
	}
	txtarea.value = txt_pre + startTag + txt_sel + endTag + txt_aft;
	setCursor(txtarea,nuCursorPos,nuCursorPos);

	if (scrtop) txtarea.scrollTop=scrtop;
	return false;
}

function getCursor(input){
	var result = {start: 0, end: 0};
	if (input.setSelectionRange){
		result.start= input.selectionStart;
		result.end = input.selectionEnd;
	} else if (!document.selection) {
		return false;
	} else if (document.selection && document.selection.createRange) {
		var range = document.selection.createRange();
		var stored_range = range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint('EndToEnd', range);
		result.start = stored_range.text.length - range.text.length;
		result.end = result.start + range.text.length;
	}
	return result;
}

function setCursor(txtarea, start, end){
	if(txtarea.createTextRange) {
		var range = txtarea.createTextRange();
		range.move("character", start);
		range.select();
	} else if(txtarea.selectionStart) {
		txtarea.setSelectionRange(start, end);
	}
}

function insert_image(id, message){
	var src = prompt(message, 'http://');
	if(src){
		make_text(id, 'img src="' + src + '" alt="" /', '');
	}
}

function insert_link(id, message){
	var href = prompt(message, 'http://');
	if(href){
		make_text(id, 'a href="' + href + '" target="_blank"', 'a');
	}
}

function checkBlogForm(){
	saveTinyMCE();
  $('errors_div').setStyle('display','none');
	try {
	title = $('title_id').value;
   
   
   if((!$('title_id').value) || ((!$('message_id').value) && ($('blog_media_id_id').value==0))){
  		$('message_id').focus();
      $('errors_div').setStyle('display','block');
  	}else{
      $('blogform').submit();
    }
    

  }
  catch(e) {
    if((!$('message_id').value) && ($('blog_media_id_id').value==0)){
  		$('message_id').focus();
      $('errors_div').setStyle('display','block');
  	}else{
      $('blogform').submit();
    }
  }
  return false;
}

function edit_text(type,id){
  new Ajax('ajax_com.php?action=language&id=blog&id2='+id+'&type='+type,
   {
		method: 'get',
		onFailure:function(e){showError(this.transport)},
		onComplete: function(e){
		try {
     var message_text = this.transport.responseXML.documentElement.getElementsByTagName('blog_innerhtml')[0].firstChild.data;
    }catch(ex){
     var message_text = '';
    };
   
    $(type+'_'+id).setHTML('<textarea id="txt_'+type+'_'+id+'" name="txt_'+type+'_'+id+'" class="blog_'+type+'_text">'+message_text+'</textarea>');
    $(type+'_'+id+'_admin').setHTML('[ <a onclick="save_text(\''+type+'\','+id+');" style="cursor: pointer;">'+this.transport.responseXML.documentElement.getElementsByTagName('blog_save')[0].firstChild.data+'</a> | <a onclick="set_back(\''+type+'\','+id+');" style="cursor: pointer;">'+this.transport.responseXML.documentElement.getElementsByTagName('blog_cancel')[0].firstChild.data+'</a> ]');
        }        
	}).request();
}

function delete_text(type,id){
   new Ajax('ajax_com.php?action=language&id=blog',
   {
		method: 'get',
		onFailure:function(e){showError(this.transport)},
		onComplete: function(e){
  	if(confirm(this.transport.responseXML.documentElement.getElementsByTagName('blog_delete_sure')[0].firstChild.data)){
       new Ajax('ajax_com.php?action=blog_delete',
       {
		   method: 'post',
		   onFailure:function(e){showError(this.transport)},
       onComplete: function(e){document.location.reload();},
		   data: 'type='+type+'&id='+id
	     }).request();
    };
  }
	}).request();
}

function set_back(type,id){
  new Ajax('ajax_com.php?action=blog_setback',
  {
	method: 'post',
	onFailure:function(e){showError(this.transport)},
  onComplete: function(e){
    $(type+'_'+id).setHTML(this.transport.responseXML.documentElement.getElementsByTagName('text')[0].firstChild.data);
    $(type+'_'+id+'_admin').setHTML('[ <a href="javascript:edit_text(\''+type+'\','+id+');">'+this.transport.responseXML.documentElement.getElementsByTagName('edit')[0].firstChild.data+'</a> | <a href="javascript:delete_text(\''+type+'\','+id+');">'+this.transport.responseXML.documentElement.getElementsByTagName('delete')[0].firstChild.data+'</a> ]');
    },
	data: 'type='+type+'&id='+id
	}).request();
}

function save_text(type,id){
   new Ajax('ajax_com.php?action=blog_save',
   {
	 method: 'post',
	 onFailure:function(e){showError(this.transport)},
   onComplete: function(e){
     $(type+'_'+id).setHTML(this.transport.responseXML.documentElement.getElementsByTagName('text')[0].firstChild.data);
     $(type+'_'+id+'_admin').setHTML('[ <a href="javascript:edit_text(\''+type+'\','+id+');">'+this.transport.responseXML.documentElement.getElementsByTagName('edit')[0].firstChild.data+'</a> | <a href="javascript:delete_text(\''+type+'\','+id+');">'+this.transport.responseXML.documentElement.getElementsByTagName('delete')[0].firstChild.data+'</a> ]');
     },
	 data: 'type='+type+'&id='+id+'&text='+ URLEncode($('txt_'+type+'_'+id).value)
	 }).request();
}

function pm_mark_all(value) {
  if(typeof value == 'undefined') {
    value = true;
  }
  $(document).getElements('input[type=checkbox]').setProperty('checked', value);
}

function show_referer(offset){
   new Ajax('ajax_com.php?action=referer&offset='+offset,
   {
		method: 'post',
		update: 'referer',
		onFailure:function(e){showError(this.transport)},
		data: 'mkey='+$('media_key').value
	}).request();
}

function initMap(mode) {
	if (!GBrowserIsCompatible()) {
		return;
	}
	
	if (!$('map_canvas') || !$('location_longitude') || !$('location_latitude') || !$('location_zoom')) {
		return;
	}
	
	var field = $('map_canvas');
	
	field.map = new GMap2(field);
	field.map.setMapType(G_HYBRID_MAP);
	field.geocoder = new GClientGeocoder();
	
	var center = new GLatLng(parseFloat($('location_latitude').value), parseFloat($('location_longitude').value));
	field.map.setCenter(center, parseInt($('location_zoom').value));
	field.map.addControl(new GMapTypeControl());
	field.map.addControl(new GLargeMapControl());
	field.map.enableScrollWheelZoom();
	
	if (mode == 'edit') {
		field.marker = new GMarker(center, {draggable:true, autoPan:true});
		GEvent.addListener(field.marker, 'dragend', dragMapMarker);
		GEvent.addListener(field.map, 'click', clickMap);
		field.map.addOverlay(field.marker);
		GEvent.addListener(field.map, 'zoomend', zoomMap);
	}
	else {
		field.marker = new GMarker(center);
		field.map.addOverlay(field.marker);
	}
	
	GEvent.addListener(field.marker, 'click', clickMarker);
	
	if (mode != 'edit') {
		clickMarker(center);
	}
}

function clickMap(overlay, loc, overlayLoc) {
	if (!overlay) {
		$('map_canvas').marker.setLatLng(loc);
		dragMapMarker(loc);
	}
}

function dragMapMarker(loc) {
	$('location_longitude').value = loc.lng();
	$('location_latitude').value = loc.lat();
	
	$('map_canvas').geocoder.getLocations(loc, showAddress);
}

function zoomMap(oldLevel, newLevel) {
	$('location_zoom').value = newLevel;
}

function showAddress(response) {
	if (!response || response.Status.code != 200) {
		$('location_str').value = '';
		return;
	}
	
	$('location_str').value = response.Placemark[0].address;
}

function clickMarker(loc) {
	if (!$('location_str').value) {
		return;
	}
	
	var locationParts = $('location_str').value.split(', ');
	$('map_canvas').map.openInfoWindowHtml(loc, '<div style="color:#000;">'+ locationParts.join('<br />') +'</span>');
}

function findMapCoordinates() {
	if (!$('location_str').value) {
		return;
	}
	
	$('map_canvas').geocoder.getLocations($('location_str').value, setLocation);
}

function setLocation(response) {
	if (!response || response.Status.code != 200) {
		return;
	}
	
	$('location_str').value = response.Placemark[0].address;
	
	var loc = new GLatLng(response.Placemark[0].Point.coordinates[1], response.Placemark[0].Point.coordinates[0]);
	$('map_canvas').map.setZoom(8+response.Placemark[0].AddressDetails.Accuracy);
	$('map_canvas').marker.setLatLng(loc);
	$('map_canvas').map.setCenter(loc);
	$('location_longitude').value = response.Placemark[0].Point.coordinates[0];
	$('location_latitude').value = response.Placemark[0].Point.coordinates[1];
	clickMarker(loc);
}

function copyAddressData() {
	var parts = new Array();
	var addressFields = new Array('street', 'zip', 'city', 'country');
	for (i = 0; i < addressFields.length; i++) {
		field = addressFields[i];
		if (!$(field +'_id') || !$(field +'_id').value) {
			continue;
		}
		
		parts[parts.length] = $(field +'_id').value;
	}
	$('location_str').value = (parts.length > 1) ? parts.join(', ') : '';
	findMapCoordinates();
}

function centerMap() {
	if (!$('map_canvas').marker) {
		return;
	}
	
	$('map_canvas').map.setCenter($('map_canvas').marker.getLatLng());
}

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);
}

function commentReply(userName) {
  var $text = jQuery('#comment_text' + '_id'),
      s = [],
      name = '@' + userName;
      
  s.push(trim($text.val()));
  
  if ($text.val().indexOf(name) < 0) {
    s.push(($text.val().length > 0 ? ' ' + name + ' ' : name + ' '));
  }
  
  $text.val(s.join(''));
  location.hash = 'comments_div';
  $text.focus();
}

function subComment(ctrl, mediaKey, commentId, userName) {
	var $pnl = jQuery(ctrl).parents('.comment').next();

	if ($pnl.html().length == 0) {
		jQuery.ajax({
			type: 'GET',
			dataType: 'html',
			data: { 
				'action': 'sub_comment_form',
				'mediaKey': mediaKey,
				'commentId': commentId,
				'userName': userName
			},
			url: 'ajax_com.php',
			success: function(o) {
				var $form = jQuery(o);
				var $textBox = $form.find('textarea[name="commentText"]');
				var $submitButton = $form.find('p > input[type="submit"]');
				var $cancelButton = $form.find('p > input[type="button"]');
				
				var options = {
					dataType: 'json',
					beforeSubmit: function(data, form, opts) {
						$submitButton.attr({'disabled': true});
						$cancelButton.attr({'disabled': true});
					},
					success: function(r) {
						if (r.isSuccessful) {
							var url = location.href.replace(location.hash, '');
							location.href = url + '#comment_' + r.commentId;
							location.reload(true);
						}
					}
				};

				$form.ajaxForm(options);

				$cancelButton.bind('click', function(e) {
					$pnl.html('');
				});

				$pnl.html($form);
				$textBox.focus();
			}
		});
	}
}

function addTags(ctrl, cid, uid, mkey, fm) {
	var $pnl = jQuery('#formTemp');
	var $_self = jQuery(ctrl);
	
	if ($pnl.html().length == 0) {
		jQuery.ajax({
			type: 'GET',
			dataType: 'html',
			data: { 
				'action': 'add_tags_form',
				'commentId': cid,
				'userId': uid,
				'mediaKey': mkey
			},
			url: 'ajax_com.php',
			success: function(o) {
				var $panel = jQuery(o);
				var $form = $panel.find('form');
				var $textBox = $form.find('input[type="text"]');
				var $hiddenMediaKey = $form.find('input[name="addTagMediaKey"]').val(mkey);
				var $hiddenCommentId = $form.find('input[name="addTagCommentId"]').val(cid);
				var $hiddenUserId = $form.find('input[name="addTagUserId"]').val(uid);
				var $hiddenFrameMode = $form.find('input[name="addTagFrameMode"]').val(fm);
				var $submitButton = $form.find('p > input[type="submit"]');
				var $cancelButton = $form.find('p > input[type="button"]');
				
				function split(val) {
					return val.split(/,\s*/);
				}
				
				function extractLast(term) {
					return split(term).pop();
				}
				
				$textBox.bind("keydown", function(e) {
					if (e.keyCode === jQuery.ui.keyCode.TAB &&
							jQuery(this).data("autocomplete").menu.active) {
						e.preventDefault();
					}
				}).autocomplete({
					minLength: 0,
					source: function(request, response) {
						jQuery.getJSON("ajax_com.php?action=tag_search",
							{ term: extractLast(request.term) }, function(r) {
								response(r.result);
							}
						);
					},
					focus: function() {
						return false;
					},
					select: function(e, ui) {
						var terms = split(this.value);
						terms.pop();
						terms.push(ui.item.value);
						terms.push('');
						
						this.value = terms.join(', ');
						return false;
					}
				});
				
				var options = {
					dataType: 'json',
					beforeSubmit: function(data, form, opts) {
						$submitButton.attr({'disabled': true});
						$cancelButton.attr({'disabled': true});
					},
					success: function(r) {
						jQuery('#comment_tags').html(r.result.commentTags);
						jQuery('#comment_tag_' + cid).html(r.result.eachCommentTags);
						
						$panel.remove();
					}
				};

				$form.ajaxForm(options);
				
				/*
				$form.bind('submit', function(e) {
					jQuery.ajax({
						type: 'POST',
						dataType: 'json',
						data: { 
							'mkey': mkey,
							'cid': cid,
							'uid': uid,
							'fm': fm,
							'tags': $textBox.val()
						},
						url: 'ajax_com.php?action=add_tags',
						success: function(r) {
							jQuery('#comment_tags').html(r.result.commentTags);
							jQuery('#comment_tag_' + cid).html(r.result.eachCommentTags);
							
							$form.remove();
						}
					});
				});
				*/
				
				/*
				$submitButton.bind('click', function(e) {
					jQuery.ajax({
						type: 'POST',
						dataType: 'json',
						data: { 
							'mkey': mkey,
							'cid': cid,
							'uid': uid,
							'fm': fm,
							'tags': $textBox.val()
						},
						url: 'ajax_com.php?action=add_tags',
						success: function(r) {
							jQuery('#comment_tags').html(r.result.commentTags);
							jQuery('#comment_tag_' + cid).html(r.result.eachCommentTags);
							
							$form.remove();
						}
					});
				});
				*/
				
				$cancelButton.bind('click', function(e) {
					$panel.remove();
				});
				
				$pnl.append($panel);
				var pW = $panel.width();
				
                var offset = $_self.position();
                var w = $_self.width();
                var h = $_self.height();

                $panel.css({ left: offset.left - pW + w, top: offset.top + h });
                $panel.show();

				$textBox.focus();
			}
		});
	}
}

(function($) {	
	$(function() {
		var $commentVotePanels = $('#comment_list .comment_vote_panel');

		$commentVotePanels.each(function(i) {
			var $panel = $(this);

			var $voteLink = $panel.find('a').first();
			var $completeMsg = $voteLink.next();

			$voteLink.bind('click', function(e) {
				e.preventDefault();

				var commentId = $(this).attr('href').substring(1);

				$.ajax({
					type: 'POST',
					dataType: 'json',
					data: { 'commentId': commentId },
					url: 'ajax_com.php?action=vote_comment',
					success: function(o) {
						if (!o.currentVote) return;

						$voteLink.remove();
						$completeMsg.show();

						$countPanel = $panel.next();
						$countPanel.text('(' + o.currentVote + ')');
					}
				});
			});

			$panel.append($completeMsg);
		});
	});
})(jQuery);


