function messageBlock (controller, msg)
{
  var controller = jQuery(controller);
  var offsetPosition = controller.offset();
  var position = "left:"+offsetPosition.left+"px;top:"+(offsetPosition.top+controller.height()+5)+"px;";
  jQuery('#wrapper').append("<div class='message_block' style='"+position+"'>" + msg + "<span class='close' onclick='jQuery(this.parentNode).remove();'>x</span></div>");
};

function recommendationFromCommunityConfirmBlock (controller, msg, callback)
{
  var controller = jQuery(controller);
  var offsetPosition = controller.offset();
  var position = "left:"+offsetPosition.left+"px;top:"+(offsetPosition.top+controller.height()+5)+"px;";

  var html = "<div class='message_block' style='"+position+"'>";
  html += "<span class='msg'>" + msg + "</span><br/>";
  html += "<a id='ok' href='javascript:void(0)' class='button'>OK</a>&nbsp;";
  html += "<a href='javascript:void(0)' class='button'>Отмена</a>";
  html += "</div>"

  if(jQuery("#wrapper").is('div'))
    var elem = jQuery(html).appendTo("#wrapper");
  else
    var elem = jQuery(html).appendTo("body");

  elem.find('.button').eq(0).click(function(){jQuery(this.parentNode).remove();return false;});
  elem.find('.button').eq(1).click(function(){jQuery(this.parentNode).remove();return false;});
  return elem;
};

function confirmBlock (param1, param2)
{
  var html = "<div class='confirm_block'>";
  html += "<span class='close' onclick='jQuery(this.parentNode).remove();'>x</span>";

  if (typeof(param1) == "string")
  {
    var link = "#";
    var msg = param1;
  }
  else
  {
    var link = param1.href;
    var msg = param2;
  }

  html += "<span class='msg'>" + msg + "</span>";
  html += "<a id='ok' href='"+ link +"' class='button'>OK</a>";
  html += "<a href='#' class='button'>Отмена</a>";
  html += "</div>"

  if(jQuery("#wrapper").is('div'))
    var elem = jQuery(html).appendTo("#wrapper");
  else
    var elem = jQuery(html).appendTo("body");

  var timeout = setTimeout(function(){deleteNode(elem)},20000);

  elem.find('.button').eq(0).click(function(){jQuery(this.parentNode).remove();clearTimeout(timeout);});
  elem.find('.button').eq(1).click(function(){jQuery(this.parentNode).remove();clearTimeout(timeout);return false;});

  if(typeof(param1) == "string")
    return elem;
  else
    return false;
}

function deleteNode(node)
{
  jQuery(node).remove();
}

jQuery.fn.showSpinner = function() {
   jQuery(this).addClass('spinner');
}

jQuery.fn.hideSpinner = function() {
  jQuery(this).removeClass('spinner');
}

function addAuthorToFavorites(author_id)
{
	jQuery("#add_favourite_author").showSpinner();
	jQuery.ajax({
		type: 'POST',
		url: '/member_favorites/ajax_add_author_to_favorites',
		data: {'id' : author_id},
		success: function(msg){
			jQuery("#add_favourite_author").hideSpinner();
			if(msg == 'success')
			{
				var favourite_author_control_html = "<a href='javascript:void(0)' class='is_favourite' id='delete_favourite_author' title='Удалить из избранных авторов'><img src='/images/1x1.gif' alt='Удалить из избранных авторов' /></a>";
				jQuery("#add_favourite_author").before(favourite_author_control_html).remove();
				messageBlock('#delete_favourite_author','Автор добавлен в избранные');
				
				jQuery('#delete_favourite_author').click(function(){deleteAuthorFromFavorites(author_id); return false;})
			}
			else
				messageBlock('#add_favourite_author',msg);
		}
	})
	
	return false;
}

function deleteAuthorFromFavorites(author_id)
{
	jQuery("#delete_favourite_author").showSpinner();
	jQuery.ajax({
		type: 'POST',
		url: '/member_favorites/ajax_delete_author_from_favorites',
		data: {'id' : author_id},
		success: function(msg){
			jQuery("#delete_favourite_author").hideSpinner();
			if(msg == 'success')
			{
				var favourite_author_control_html = "<a href='javascript:void(0)' class='favourite' id='add_favourite_author' title='Добавить в избранные авторы'><img src='/images/1x1.gif' alt='Добавить в избранные авторы' /></a>";
					jQuery("#delete_favourite_author").before(favourite_author_control_html).remove();
				messageBlock('#add_favourite_author','Автор удален из избранных');
				
				jQuery('#add_favourite_author').click(function(){addAuthorToFavorites(author_id); return false;})
			}
			else
				messageBlock('#delete_favourite_author',msg);
		}
	})
	
	return false;
}

function addMemberToIgnored(member_id)
{
  jQuery("#add_ignored_member").showSpinner();
  jQuery.ajax({
    type: 'POST',
    url: '/member/ajax_add_to_ignored',
    data: {'id' : member_id},
    success: function(msg){
      jQuery("#add_ignored_member").hideSpinner();
      if(msg == 'success')
      {
        var ignored_member_control_html = "<a href='javascript:void(0)' class='is_ignored' id='delete_ignored_member' title='Удалить из черного списка'><img src='/images/1x1.gif' alt='Удалить из черного списка' /></a>";
        jQuery("#add_ignored_member").before(ignored_member_control_html).remove();
        messageBlock('#delete_ignored_member','Автор добавлен в черный список');

        jQuery('#delete_ignored_member').click(function(){deleteMemberFromIgnored(member_id); return false;})
      }
      else
        messageBlock('#add_ignored_member',msg);
    }
  })

  return false;
}

function deleteMemberFromIgnored(member_id)
{
  jQuery("#delete_ignored_member").showSpinner();
  jQuery.ajax({
    type: 'POST',
    url: '/member/ajax_remove_from_ignored',
    data: {'id' : member_id},
    success: function(msg){
      jQuery("#delete_ignored_member").hideSpinner();
      if(msg == 'success')
      {
        var ignored_member_control_html = "<a href='javascript:void(0)' class='ignored' id='add_ignored_member' title='Добавить в черный список'><img src='/images/1x1.gif' alt='Добавить в черный список' /></a>";
        jQuery("#delete_ignored_member").before(ignored_member_control_html).remove();
        messageBlock('#add_ignored_member','Автор удален из черного списка');

        jQuery('#add_ignored_member').click(function(){addMemberToIgnored(member_id); return false;})
      }
      else
        messageBlock('#delete_ignored_member',msg);
    }
  })

  return false;
}

/***************************************/
/*************UPLOAD.JS************/
/***************************************/
function initUploadFileControl(){

    var upload_file = jQuery('.upload_file')
    upload_file.children('input[type=file]').wrap("<div class='choose_file'>").after("<br /><a href='#' class='show_options'>Не изменять</a>");
    jQuery('.choose_file').hide();

    upload_file.each(function(){
      var elem = jQuery(this);
      elem.find('input[type=checkbox]').parent('label').wrap('<div class="options"></div>').after(' <a href="#" class="show_choose_file">Изменить</a>');
      elem.find('input[type=checkbox]').change(function(){
        var info =  jQuery(this).parents().siblings('.info');;
        if(this.checked == true)
          info.css('text-decoration', 'line-through');
        else
          info.css('text-decoration', 'none');
      })
    });

    jQuery('.show_choose_file').click(function(){
      var elem = jQuery(this);
      elem.parents('.upload_file').children('.choose_file').show();
      elem.parent('.options').hide();
      return false;
    });

    jQuery('.show_options').click(function(){
      var elem = jQuery(this);
      elem.parent('.choose_file').hide();
      elem.parents('.upload_file').children('.options').show();
      return false;
    });

};
jQuery(window).ready(function(){
  initUploadFileControl();
});


/***************************************/
/*************VALIDATUION.JS************/
/***************************************/
Limb.Class('Validator',
{
  __construct: function()
  {

    this.resetRules();
    this.resetState();
  },

  resetState: function()
  {
    this.is_valid = true;
    this.error_list = [];
  },

  resetRules: function()
  {
    this.rules = [];
  },

  addRule: function(rule)
  {
    this.rules[this.rules.length] = rule;
  },

  validate: function()
  {
    var rule = null;
    for(i = 0; i < this.rules.length; i++)
    {
      rule = this.rules[i];
      var result = rule.check(this.error_list);//.bind(rule)
      if(result == false)
        this.is_valid = false;
    }
  },

  isValid: function()
  {
    return this.is_valid;
  },

  getErrors: function()
  {
    return this.error_list;
  },

  getErrorsString: function()
  {
    var error_message = "<ul>";
    for(i = 0; i < this.error_list.length; i++)
    {
      if(this.error_list[i])
        error_message += "<li>" + this.error_list[i] + "</li>";
    }
    error_message += "</ul>"
    return error_message;
  }
});

Limb.Class('RequiredFieldRule',
{
  __construct: function(field_id)
  {
    this.field_id = field_id;
  },

  check: function(error_list)
  {
    var field = jQuery('#' + this.field_id);
    if(!field.val())
    {
      error_list[error_list.length] = 'Поле "' + field.attr('title') + '" должно быть заполнено';
      return false;
    }
    return true;
  }
});

Limb.Class('MaxLengthFieldRule',
{
  __construct: function(field_id, max_length)
  {
    this.field_id = field_id;
    this.max_length = max_length;
  },

  check: function(error_list)
  {
    var field = jQuery('#' + this.field_id);
    if(field.val().length > this.max_length)
    {
      error_list[error_list.length] = 'Поле "' + field.attr('title') + '" не должно первышать \'' + this.max_length + '\' символов';
      return false;
    }
    return true;
  }
});


/**
 * Cookie plugin
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

