
var tinymce_text = "";
var tinymce_node = "";
var tinymce_edit = false;
var tinymce_tag = false;

var regexp_param_name = "\\w*";
var regexp_param_value = "(\"([^\"]*)\"|'([^']*)'|(([^\\s\\]])*))";
var regexp_param = regexp_param_name+"="+regexp_param_value;

function tinymceLoadParamText(param, field) {
    var regexp = new RegExp(param+"="+regexp_param_value, "");
    var result = tinymce_tag.match(regexp);
    if (result != null) {
      value = result[2];
      if(result[3]) {value = result[3]}
      if(result[4]) {value = result[4]}
      $('#'+field).val(value);
    }
}

function tinymceLoadParamCheck(param, field) {
    var regexp = new RegExp(param+"="+regexp_param_value, "");
    var result = tinymce_tag.match(regexp);
    if (result != null) {
      value = result[2];
      if(result[3]) {value = result[3]}
      if(result[4]) {value = result[4]}
      $('#'+field).attr('checked', value);
    }
}

function tinymceLoadParamSelect(param, field) {
    var regexp = new RegExp(param+"="+regexp_param_value, "");
    var result = tinymce_tag.match(regexp);
    if (result != null) {
      value = result[2];
      if(result[3]) {value = result[3]}
      if(result[4]) {value = result[4]}
      $('#'+field).val('selected', value);
    }
}


function tinymceGetParamText(param, field, optional) {
  var val = $('#'+field).val();
  if(val.length != 0 || !optional) {
    return ' ' + param + '="' + val + '" ';
  } else {
    return '';
  }
}

function tinymceGetParamCheck(param, field, optional) {
  var val = $('#'+field).attr('checked');
  if(val || !optional) {
    if(val) {
      return ' ' + param + '=1 ';
    } else {
      return ' ' + param + '=0 ';
    }
  } else {
    return '';
  }
}

function tinymceGetParamSelect(param, field, optional) {
  var val = $('#'+field).val();
  if(val || !optional) {
    return ' ' + param + '="'+val+'" ';
  } else {
    return '';
  }
}

function tinymceFetchNode(contenttag) {
  tinymce_node = tinyMCEPopup.editor.selection.getNode();
  tinymce_text = tinyMCEPopup.editor.selection.getContent();

  var className = 'tag-'+contenttag;
  if (tinymce_node.className == className) {
    tinyMCEPopup.execCommand("mceSelectNode", false, tinymce_node);
    tinymce_text = tinymce_node.firstChild.wholeText;
    tinymce_tag = tinymceReplaceFromTitle(tinymce_node.title);
    tinymce_edit=true;
    return true;
  }

  return false;
}

function tinymceSave(content) {
  var operation = "mceReplaceContent";
  if (tinymce_text.length == 0 && !tinymce_edit) {
    operation = "mceInsertContent";
  }

  tinyMCEPopup.execCommand(operation, false, content);

  tinyMCEPopup.execCommand("mceCleanup", false, false);
  window.close();

}

function tinymceTagToSpan(str, contenttag, pair) {

  var className = "tag-"+contenttag;

  var regexp = "";
  if(pair) {
    regexp = "(\\["+contenttag+"((?:\\s+"+regexp_param+")*)\\s*\\])(.*?)\\[\\/"+contenttag+"\\]";
  } else {
    regexp = "(\\["+contenttag+"((?:\\s+"+regexp_param+")*)\\s*\\])";
  }

  var matches = str.match(RegExp(regexp, "gi"));

  if(matches) {
  for(matchId = 0; matchId < matches.length; matchId++) {
    var matchStr = matches[matchId];
    var parts = matchStr.match(RegExp(regexp, "i"));
    var tag = parts[1];
    var params = parts[2];
    var content = parts[8];

    var tagescaped = tinymceReplaceToTitle(tag);

    if(pair) {
      var html = '<span class="'+className+'" title="'+tagescaped+'">'+content+'</span>';
    } else {
      var html = '<span class="'+className+'" title="'+tagescaped+'" />';
    }

    //alert("tagToSpan "+matchStr+" -> "+html);
    str = str.replace(matchStr, html);
  }
  }

  return str;
}

function tinymceSpanToTag(str, contenttag, pair) {

  var className = "tag-"+contenttag;

  var regexp = "";
  if(pair) {
    regexp = '(<span ([^>]*?)class="'+className+'" ([^>]*?)title="(.*?)"([^>]*?)>(.*?)</span>)';
  } else {
    regexp = '(<span ([^>]*?)class="'+className+'" ([^>]*?)title="(.*?)"([^>]*?)/>)"';
  }

  var matches = str.match(RegExp(regexp, "gi"));

  if(matches) {
  for(matchId = 0; matchId < matches.length; matchId++) {
    var matchStr = matches[matchId];
    var parts = matchStr.match(RegExp(regexp, "i"));
    var tagescaped = parts[4];
    var content = parts[6];

    var tagunescaped = tinymceReplaceFromTitle(tagescaped);

    if(pair) {
      var tag = tagunescaped+content+'[/'+contenttag+']';
    } else {
      var tag = tagunescaped;
    }
    
    //alert("spanToTag "+matchStr+" -> "+tag);
    str = str.replace(matchStr, tag);
  }
  }

  return str;

}

function tinymceTagToImg(str, contenttag, image) {

  var className = "tag-"+contenttag;

  var regexp = "";
  regexp = "(\\["+contenttag+"((?:\\s+"+regexp_param+")*)\\s*\\])";

  var matches = str.match(RegExp(regexp, "gi"));

  if(matches) {
  for(matchId = 0; matchId < matches.length; matchId++) {
    var matchStr = matches[matchId];
    var parts = matchStr.match(RegExp(regexp, "i"));
    var tag = parts[1];
    var params = parts[2];
    var content = parts[4];
    var tagescaped = tinymceReplaceToTitle(tag);
    var html = '<img src="'+tinyMCE.activeEditor.getParam('aeroot')+image+'" class="'+className+'" title="'+tagescaped+'" />';
    str = str.replace(matchStr, html);
  }
  }

  return str;
}

function tinymceImgToTag(str, contenttag) {

  var className = "tag-"+contenttag;

  var regexp = "";
  regexp = '(<img ([^>]*?)class="'+className+'" ([^>]*?)title="(.*?)"([^>]*?)/>)';

  var matches = str.match(RegExp(regexp, "gi"));

  if(matches) {
  for(matchId = 0; matchId < matches.length; matchId++) {
    var matchStr = matches[matchId];
    var parts = matchStr.match(RegExp(regexp, "i"));
    var tagescaped = parts[4];
    var tagunescaped = tinymceReplaceFromTitle(tagescaped);
    var tag = tagunescaped;
    str = str.replace(matchStr, tag);
  }
  }

  return str;

}

function tinymceReplaceToTitle(str) {
  return escape(str);
  /*return str.replace(/\"/g, '&quot;');*/
}

function tinymceReplaceFromTitle(str) {
  return unescape(str);
  /*return str.replace(/&quot;/g, '\"');*/
}

