function ExpandableDiv() {}

ExpandableDiv.expand = function ExpandableDiv_expandReadMore(more_id) {
   Core.setText(more_id, window.more_text[more_id]);
}

ExpandableDiv.onmouseover_bg_color = '#dfe5f4';
ExpandableDiv.onmouseout_bg_color = 'transparent';
ExpandableDiv.default_readmore_text = 'read more...'

ExpandableDiv.init = function ExpandableDiv_inititalizeViewMoreEffect(whole_id, more_id, textarea_container_id, textarea_id, cancel_id, save_id, save_callback) {
   if (! window.more_text) {
      window.more_text = new Array();
   }
  
   var is_editable = (! textarea_container_id ) ? 0 : 1;
 
   var whole_visible_text_id = whole_id + '_text';
   
   window.more_text[more_id] = Core.getText(more_id);

   Core.hideElement(more_id);
   Core.hideElement(textarea_container_id);

   var more_element = Core.getElementU(more_id);
   if (more_element) {
      var more_link = more_element.getAttribute("title") || ExpandableDiv.default_readmore_text;
      Core.setText(more_id, "<a href='javascript:ExpandableDiv.expand(\"" + more_id + "\")' id=\"expand_" + more_id + "\">" + more_link + "</a>");
      Core.showElement(more_id);
   }

   if (! is_editable) {
      return;
   }

   window['ExpandableDiv_showEditField_'+ more_id] = function showEditField (e) {
      if (!e) var e = window.event;
      var tg = (window.event) ? e.srcElement : e.target;

      if (tg.id != ('expand_' + more_id)) {
         ExpandableDiv.expand(more_id);
         Core.flushElementCache();
         var set_text = '';
         if (Core.getElementU(whole_visible_text_id) && (Core.getText(more_id) != undefined)) {
            set_text = Core.getText(whole_visible_text_id) + Core.getText(more_id);
         } else if (Core.getElementU(whole_visible_text_id)) {
            set_text = Core.getText(whole_visible_text_id);
         } else {
            set_text = Core.getText(whole_id);   
         }
         Core.setText(textarea_id, set_text.replace(/<br>/gi,"\n"));
         Core.hideElement(whole_id);
         Core.showElement(textarea_container_id);
      }
   }
 
   var whole_element = Core.getElementU(whole_id);
   Core.addEvent(whole_element, 'click', window['ExpandableDiv_showEditField_'+more_id]);

   window['ExpandableDiv_cancelEdit_'+more_id] = function cancelEdit() {
      Core.hideElement(textarea_container_id);
      Core.showElement(whole_id);
   }

   var cancel_element = Core.getElementU(cancel_id);
   Core.addEvent(cancel_element, 'click', window['ExpandableDiv_cancelEdit_'+more_id]);


   window['ExpandableDiv_saveEdit_'+more_id] = function saveEdit() {
      var text = Core.getText(textarea_id);
      if ((text == '') && (whole_visible_text_id != 'tabsdescr_text')) {
         alert('Empty text.'); return;
      }
      Core.setText(whole_id, text.replace(/\n/gi,"<br>"));
      Core.flushElementCache();
      window['ExpandableDiv_cancelEdit_'+more_id]();
      save_callback(text, whole_id);
   }

   var save_element = Core.getElementU(save_id);
   Core.addEvent(save_element, 'click', window['ExpandableDiv_saveEdit_'+more_id]);

   window['ExpandableDiv_onMouseOverEdit_'+more_id] = function () {
      Core.setBg(whole_id, ExpandableDiv.onmouseover_bg_color);
   }

   window['ExpandableDiv_onMouseOutEdit_'+more_id] = function () {
      Core.setBg(whole_id,ExpandableDiv.onmouseout_bg_color);
   }

   Core.addEvent(whole_element, 'mouseover', window['ExpandableDiv_onMouseOverEdit_'+more_id]);
   Core.addEvent(whole_element, 'mouseout',  window['ExpandableDiv_onMouseOutEdit_'+more_id]);

   window['ExpandableDiv_onKeyPressEdit_'+more_id] = function myonKeyPress(e) {
      if (!e) var e = window.event;
    var character = e.charCode > 0 ? String.fromCharCode(e.charCode) : null;
      var code = e.keyCode;
      if (code==27) {
         window['ExpandableDiv_cancelEdit_'+more_id]();
         return false;
      } else if (code==13 && Core.getElementU(textarea_id).tagName == 'INPUT') {
         window['ExpandableDiv_saveEdit_'+more_id]();
         return false;
      }
   }

   Core.getElementU(textarea_id).onkeypress = 
      function myKeyPress_wrapper(e) { 
         return window['ExpandableDiv_onKeyPressEdit_'+more_id](e);
      }
}

function Inputs() {}
Inputs.interactiveEdit = function Inputs_interactiveEdit(element_id,element_edit_area) {
   Core.setText(element_edit_area,Core.getText(element_id).replace(/<br>/gi,"\n"));
}
Inputs.interactiveSave = function Inputs_interactiveSave(element_id,element_edit_area,save_command,album_id) {
	var typed_message = Core.getText(element_edit_area);
	typed_message.replace = (' ', '');
	typed_message = typed_message.replace(/\n/g, "");
	typed_message = typed_message.replace(/\r/g, "");
	typed_message = typed_message.replace(/ /g, "");
	
if (typed_message.length >= 1 || element_id == 'photoalbum_description') {
      advAJAX.post({
	      cmd:save_command,
	      new_text:Core.getText(element_edit_area),
	      aid:album_id,
	      onLoading: function(obj) {	},
	      onSuccess: function(obj) {
	      Core.setText(element_id,Core.getText(element_edit_area).replace(/\n/gi,"<br>"));
	      }
      });
	} else {
	   alert("Cannot save empty place!");
	   Core.showElement(element_id);
   }
Core.showElement(element_id);
}

/**********************************************
This is rewritten uniedit implementation 
 **************************************/

var UE_MAX_WIDTH = 70;
var UE_MAX_HEIGHT = 14;
/*var UE_max_characters = 0xFFFFFFFF; */
var UE_max_characters = 200000;
/* increase if you know a longer word */
var UE_MAX_WORD_LENGTH = 50;

function uniedit_width( text )
{
   var tmptext = ''+text;
   var lin = tmptext.split('\n');
   var len = 25;

   for (var i = 0; i < lin.length; i++) {
      if (lin[i].length >= UE_MAX_WIDTH ) {
         return UE_MAX_WIDTH;
      }
      if (lin[i].length > len) {
         len = lin[i].length+1;
      }
   }
   return len+1;
}
function uniedit_width1( text ) {
   var width = 25;
   while (text.length>0) {
      var lwidth = text.indexOf("\n") + 1;
      if ( lwidth == 0 ) { lwidth = text.length }
      width = Math.max( width, lwidth );
      if (width+1>=UE_MAX_WIDTH) {
         return UE_MAX_WIDTH;
      }
      if ( lwidth == text.length ) {
         return width+1;
      }
      text = text.substring( lwidth , text.length - 1 );
   }
	return width+1;
}

function uniedit_height( text, width ) {
   var lines = 1;
   var tmptext = ''+text;
   var lin = tmptext.split('\n');
   lines = (lin.length || 1);
   if (!lin) {
      lin[0] = tmptext;
   }
   for (var i = 0; i < lin.length; i++) { 
     lines += (lin[i].length/width < 1 ? 0 : Math.round(lin[i].length/width));
   }
    if (lines > UE_MAX_HEIGHT) {
      return UE_MAX_HEIGHT;
   }

   return (lines || 1 );
}

function isUrl(s) {
   var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
   return regexp.test(s);
}

/* if the word in a text is too long - split it into several */
function splitLongWords(str) {
 //  var string = ''+string;
   str = str.replace(/ {2,}/g, " ");
   var stringWords = str.split(' ');
   for (var i = 0; i < stringWords.length; i++) {
      if (stringWords[i].length > UE_MAX_WORD_LENGTH && !isUrl(stringWords[i])) {
          stringWords[i] = stringWords[i].replace(/([^\s\t\r\n]{24})/g,"$1 ");
      }
   }
   str = stringWords.join(' ');
   return str;
}

/* unused currently */
function wrapLines(max, text) {
   max--;
   text = "" + text;
   var temp = "";
   var chcount = 0; 
   for (var i = 0; i < text.length; i++) // for each character ... 
      {   
      var ch = text.substring(i, i+1); // first character
      var ch2 = text.substring(i+1, i+2); // next character
      if (ch == '\n') // if character is a hard return
         {  
            temp += ch;
            chcount = 1;
         } else {
            if (chcount == max) // line has max chacters on this line
               {
                  temp += '\n' + ch; // go to next line
                  chcount = 1; // reset chcount
               } else {  // Not a newline or max characters ...
                  temp += ch;
                  chcount++; // so add 1 to chcount
               }
         }
      }     
   return (temp); // sends value of temp back
}

function uniedit_checklen( edit_area, maxlen ) {
   if (Core.getText(edit_area).length > maxlen) {
      Core.setText(edit_area, Core.getText(edit_area).substr(0, maxlen));
      alert('Max text size ' + maxlen + ' symbols!');
   }
}

function uniedit_update_edit_size( edit_area ) {
   uniedit_checklen( edit_area, UE_max_characters );
	var obj = document.getElementById(edit_area);
	if ( obj ) {
      // obj.value = splitLongWords(obj.value);
	    obj.cols = uniedit_width( obj.value );
	    obj.rows = uniedit_height( obj.value, obj.cols );
	}
}

function check_empty(id,check) {

   if (check && Core.getText(id) == '') {
         alert(check);
         return 0;
   }   
   return 1;
}

function universal_edit2(text_var, text_var_value, edit_area, formated_text_area, post_url, post_cmd, objects_to_hide, msg) {
   var err_msg = '';
   if (typeof(msg) != 'undefined') {
      err_msg = msg;
   } 

	if ( text_var && edit_area ) {
	    var text_area_width = uniedit_width( text_var_value );
	    var text_area_height = uniedit_height( text_var_value, text_area_width );
	    var obj_hidden = "";
	    var obj_oncancel_show = "";
	    for (var i = 0 ; i < objects_to_hide.length ; i++ ){
          Core.hideElement( objects_to_hide[ i ] );
          obj_oncancel_show = obj_oncancel_show +
		    "Core.showElement('" + objects_to_hide[ i ] + "');";
          if (obj_hidden == "") {
             obj_hidden = "'" + objects_to_hide[ i ] + "'";
          } else obj_hidden = obj_hidden + ", '" + objects_to_hide[ i ] + "'";
       }
	    if (obj_hidden == "") {
          obj_hidden = 0;
	    } else obj_hidden = "[" + obj_hidden + "]";
	    Core.setText( edit_area ,
            "<textarea id=UE_area" + text_var + " " +
           "onkeypress=\"uniedit_update_edit_size('UE_area"+ text_var + "');\" " +
           "onkeyup=\"uniedit_update_edit_size('UE_area"+ text_var + "');\" " +
           "onkeydown=\"uniedit_update_edit_size('UE_area"+ text_var + "');\"" + ">" +
			  "</textarea><br clear=\"both\">"+
			  "<input type=button class=button " +
			  "id=UE_sb_" + text_var + " " +
			  "value=\""+LangDict.translateToken('Common.Save')+"\" onclick=\"if (check_empty('UE_area"+text_var+"', '"+err_msg+"')) uniedit_post('UE_area" + text_var +
			  "', " + text_var + ", '" + edit_area +
			  "', '" + formated_text_area +
			  "', '" + post_url + "', " +
			  post_cmd + ", " +
			  obj_hidden + ");\">" +
			  "<input type=button class=button " +
			  "id=UE_cb_" + text_var + " " +
			  "value=\""+LangDict.translateToken('Common.Cancel')+"\" onclick=\"Core.hideElement('" +
			  edit_area + "');" + obj_oncancel_show +"\">" );
       Core.flushElementCache( edit_area );
	    Core.setText("UE_area"+text_var, text_var_value.value);
       uniedit_update_edit_size("UE_area" + text_var);
	    Core.showElement( edit_area );
	    Core.flushElementCache( edit_area );
	}
}

function uniedit_post(ue_ref, text_var, edit_area, formated_text_area, post_url, post_cmd, objects_to_show) {
   if ( text_var && formated_text_area ) {
      uniedit_checklen( ue_ref, UE_max_characters );
      text_var.value = Core.getText( ue_ref );
      if (post_url == "" || post_cmd == "") {
         alert( "AJAX post parameters are NULL" );
         return;
      }
      Core.hideElement(edit_area);
      advAJAX.post({
          url : post_url,
          parameters : post_cmd,
          "new_text": text_var.value,

          onLoading: function(obj) {	},
          onSuccess: function(obj) {
            Core.setText( formated_text_area , obj.responseText );
            Core.hideElement(edit_area);
            if (Core.getElementU('del_button')) {
               show_delete = true;
               Core.showElement('del_button');
            }
            for (var i = 0 ; i < objects_to_show.length ; i++ ){
               Core.showElement( objects_to_show[ i ] );
            }
            Core.flushElementCache(formated_text_area);
          }
      });
   }
}
/**********************************************
End of uniedit implamentation 
 **************************************/




















/**************************************
Old version. may be deleted in future.
 ***************************/




    function universal_edit(get_text_from, textarea_id, textarea_height, textarea_width, put_textarea_to, save_command, a_id) {
	if (get_text_from && textarea_id && textarea_height && textarea_width && put_textarea_to && save_command !== undefined) {
		if (textarea_height == "1") {
			Core.setText(put_textarea_to, "<input type=text id=" + textarea_id +  " size=" + textarea_width + "><br><input type=button class=button id='save_button' value=Save onClick=\"save_edited_text('" + save_command + "', '" + textarea_id + "', '" + get_text_from + "','" + put_textarea_to +"', '"+ a_id + "')\"><input type=button class=button id='cancel_button' value=Cancel onCLick=\"Core.hideElement('" +  put_textarea_to + "');Core.showElement('" + get_text_from + "');Core.setText('" + put_textarea_to + "', window.more_text['" +get_text_from+ "']);Core.flushElementCache();\">");
		} else {
			Core.setText(put_textarea_to, "<textarea id=" + textarea_id + " rows=" + textarea_height + " cols=" + textarea_width + "></textarea><br><input type=button class=button id='save_button' value=Save onClick=\"save_edited_text('" + save_command + "', '" + textarea_id + "', '" + get_text_from + "','" + put_textarea_to +"', '"+ a_id +"');\"><input type=button class=button id='cancel_button' value=Cancel onCLick=\"Core.hideElement('" +  put_textarea_to + "');Core.showElement('" + get_text_from + "');Core.showElement('onpage_edit_button');Core.setText('" + put_textarea_to + "', window.more_text['" +get_text_from+ "']);Core.flushElementCache();\">");
		}
		Core.setText(textarea_id, window.more_text[get_text_from]);
		Core.hideElement(get_text_from);
		Core.showElement(put_textarea_to);
	} 
}
function save_edited_text(save_cmd,textarea_id,get_text_from,put_textarea_to, a_id) {
   var messagetext = Core.getText(textarea_id);
   messagetext = messagetext.replace(/id="onpage_edit_button"/gi, "");
   messagetext = messagetext.replace(/id="text"/gi, "");
   messagetext = messagetext.replace(/id="for_text_area"/gi, "");
   messagetext = messagetext.replace(/id="editing_area"/gi, "");
   messagetext = messagetext.replace(/onClick="universal_edit"/gi, "");
   messagetext = messagetext.replace(/id=onpage_edit_button/gi, "");
   messagetext = messagetext.replace(/id=text/gi, "");
   messagetext = messagetext.replace(/id=for_text_area/gi, "");
   messagetext = messagetext.replace(/id=editing_area/gi, "");
   messagetext = messagetext.replace(/onClick=universal_edit/gi, "");
	advAJAX.post({
		cmd:save_cmd,
                aid : a_id,
                new_text : messagetext,
		onLoading: function(obj) {	},
		onSuccess: function(obj) {
                        Core.setText(put_textarea_to, messagetext);
			Core.setText(get_text_from, obj.responseText);
                        Core.hideElement(put_textarea_to);
			Core.hideElement('save_button');
			Core.hideElement('cancel_button');
			Core.hideElement(textarea_id);
			Core.showElement(get_text_from);
			Core.showElement('onpage_edit_button');
			Core.flushElementCache(get_text_from);
		}
		});
	}
   
function erase_welcomepage_contents() {
   var conf_box = confirm("\t\t\tWARNING!!!\n\n\ Are you sure you want to delete all contents?\nPlease note that all your previously created \"Welcome\" page content will be lost and you will get back to Fotki default message.");
   if (conf_box == true){
	advAJAX.post({
		newly_edited_text:' ',
		cmd:'save_edited_page',
		onLoading: function(obj) {},
		onSuccess: function(obj) {
         if (Core.getElementU('del_button')) {
         show_delete = false;
         Core.hideElement('del_button');
      }
      window.location.reload()
    } 
   });} else {
      if (Core.getElementU('del_button')) {
         show_delete = true;
         Core.showElement('del_button');
      }
      window.location.reload;
    }
}

function checkLen(description_limit) {
   var descr_text = Core.getText('large_edit_area');
   var text_lenght = descr_text.length;                                 
   Core.setText('text_lenght', text_lenght);
   Core.setText('chars_left', description_limit - text_lenght);
   if(text_lenght > description_limit) {
      Core.setText('large_edit_area',descr_text.substr(0, description_limit))
      alert('Max text size '+description_limit+' symbols!');
   }
}
