var initialTab = "";
var cms_mname = false;
var cms_itemid = false;
var i=0;
var nowtpl = false; // Шаблон, который сейчас используется

window.addEvent('domready', function(){

	if (Browser.ie6) // Если IE6
	  {
	  redirect('/bb/index.php');
	  }

	 var i=0;
	$$('a[rel=\'external\']').setProperty('target','_blank'); // Добавляем таргет всем ссылкам где стоит рел екстернал

    nowww();  // Убираем www
    init_domready();
    create_lightbox();
    make_lightbox_draggable();
    init_lightbox($$('.lightbox'));
    init_tables();
	init_vartags_parse('var');
	init_tooltips($$('.tooltip'));
    init_multilink();
    init_fieldsets();
    set_referrer();
    mark_errors(); // Если форма вернула ошибки, то выделяем их в форме

    if ($('CommentForm'))
      {
      $('CommentForm').addEvent('submit', function(e) {
		e.stop();
		var info = JSON.decode($('mid').innerHTML);
		var log = $('CommentFormResult').empty().addClass('ajax-loading');
		this.set('send', {url: '/ajax/addcomment.php?id='+info.id, evalScripts: true, onComplete: function(response) {
			log.removeClass('ajax-loading');
			log.set('html', response);
		}});
		this.send();
	  });
      }

	if($('search')) // Если на странице есть форма поиска, то делаем чтоб она отправляла данные подругому
	  {
	  $('search').addEvent('submit', function(event){
	  		var value = $$('form#search input[type="text"]')[0].value;
	  		if (value.length > 1)
	  		  {
	  		  document.location = $('search').action.replace(/\/$/,'')+'/search/'+value;
	  		  $$('#search input[type=submit], #search input[type=image]')[0].disabled = true;
	  	      }
	  	    else
	  	      {
	  	      alert('Поиск по 1 букве не производится');
	  	      }
	  	    event.stop();
	    });
	  }

    init_inputs();
	init_ishuman($$('form'));

	if ($('register'))
	  {
	  $('register').addEvent('submit', function(e) {
		e.stop();
		var log = $('rezultdiv').empty().addClass('ajax-loading');
		this.set('send', {url: '/modules/users/ajax/register.php', evalScripts: true, onComplete: function(response) {
			log.removeClass('ajax-loading');
			log.set('html', response);
		}});
		this.send();
	  });
	  }

	$$('#register input').addEvent('keydown', function(e) {
		$(this.getProperty('id')+'_div').removeClass('formerr');
	});


	initStateFromURL();
	setInterval(initStateFromURL, 1000);

	//focus = new Element('input', {'id':'focus','type':'text'}); // Чтоб убирать фокус на этот элемент
	//$$('body').adopt(focus);

	ajaxinit($$('a,form'));
	find_selected();
	if (function_exists('template_domready')) { template_domready(); }
});

function set_referrer()
  {
  if (!Cookie.read('referrer')) // Если нет реферрера
    {
    var Referrer_Cookie = Cookie.write('referrer', document.referrer, {duration: 30}); // Ставим куку о том, откуда пришел пользователь
    }
  }

function mark_errors()
  {
  if ($('errors')) // Если на сайте есть div с ошибками
    {
    $$('#errors label').each(function (element) {
      var elemid = element.getProperty('for'); // Получаем ID поля, в котором была допущена ошибка

      if ($(elemid)) $(elemid).addClass('error'); // Навешиваем этому инпуту класс, если инпут есть

      if ($('fieldset_'+elemid)) $('fieldset_'+elemid).addClass('error'); // Навешиваем этому филдсету класс, если филдсет есть
      });
    }
  }

function create_lightbox()
  {
    fader = new Element('div', {'id':'fader'});
	$$('body').adopt(fader);
	fader.addEvent('click', function(e) {
		showbox('hide');
	});

    lightbox = new Element('div', {'id':'lightbox'});
    inlightbox = new Element('div', {'id':'inlightbox'});
	headlightbox = new Element('div', {'id':'headlightbox'});
	closelightbox = new Element('div', {'id':'closelightbox'});
	closelightbox.addEvent('click', function(e) {
		showbox('hide');
	})
	$$('body').adopt(lightbox.adopt(closelightbox));
	$$('body').adopt(lightbox.adopt(headlightbox));
	$$('body').adopt(lightbox.adopt(inlightbox));
  }

function centerlightbox()
  {
  // Смещаем блок на половину чтоб отображался поцентру
  $('lightbox').style.width = '';
  $('lightbox').style.height = '';

  lightboxSize = $('lightbox').getComputedSize();
  offsetX = Math.floor(lightboxSize.width/2);
  $('lightbox').style.width = lightboxSize.width+'px';
  $('lightbox').style.marginLeft = -offsetX+'px';
  offsetY = Math.floor(lightboxSize.height/2);
  /*$('lightbox').style.height = lightboxSize.height+'px';*/
  $('lightbox').style.marginTop = -offsetY+'px';

  // Если лайтбокс больше высоты или ширины экрана, то fixed меняем на absolute
  var ws = window.getSize();
  if (lightboxSize.y > ws.y || lightboxSize.x > ws.x)
    {
    $('lightbox').style.position = 'absolute';
    }
  else
    {
    $('lightbox').style.position = 'fixed';
    }
  }

function init_domready(tag)
  {
  //\_typeface_js.initialize(tag);
  }

function init_fieldsets()
  {
  $$('fieldset input').each(function (elem) {
    	var name = (elem.getAttribute('name'))?elem.getAttribute('name').replace(/(\[|\])/g,''):''; // Убираем скобки из имени

    	if (name)
    	  {
    	  var idname = 'input_'+name;
    	  var parents = elem.getParents();

    	  for(var i=0;i<parents.length;i++) // Ищем fieldset чтоб поставить ему айдишник и чтобы поставить for для label
    	    {
    	    var tagname = parents[i].get('tag');
    	    if (tagname == 'fieldset')
    	      {
              parents[i].setAttribute('id','fieldset_'+idname);
              if ($$('#fieldset_'+idname+' label')[0]) $$('#fieldset_'+idname+' label')[0].setAttribute('for',idname);
    	      }
    	    }

    	  elem.setAttribute('id',idname);
    	  }
  	});
  }

function init_multilink()
  {
  var num=0; // Номер мультилинкбокса
  $$('.multilink').each(function (elem) {

    var actionEvent = (elem.hasClass('hover'))?'mouseenter':'click';

    elem.setProperty('id','multilink'+num);
    var el = elem.getChildren('a'); // Получаем детей, только ссылки
    var linesize = el[0].getSize(); // Получаем размер видимой части
    var boxheight = 0; // Размер всего блока


    var selected_pos = false;
    var newarray = new Array;
  	for(var i=0;i<el.length;i++) // Ищем элемент с классом selected
  	  {
  	  if (el[i].hasClass('selected') || el[i].hasClass('active'))
  	    {
  	    selected_pos = i;
  	    }

  	  if (!el[i].hasClass('hidden')) // Если не спрятанный элемент, то плюсуем его размер к размеру всего блока
  	    {
  	    boxheight += linesize.y;
  	    }
  	  }
  	for(var i=0;i<el.length;i++) // Перемещаем выделенный элемент вперед
  	  {
  	  if (selected_pos == i)
  	    {
  	    newarray[0] = el[i];
  	    }
  	  else
  	    {
  	    newarray[i+1] = el[i];
  	    }
  	  }
  	elem.empty();
  	for(var i=0;i<newarray.length;i++) // Добавляем в DOM
  	  {
  	  elem.adopt(newarray[i]);
  	  }

     // Создаем видимую часть оставляя только высоту для одного элемента
    elem.setStyle('height',linesize.y);
  	elem.setStyle('overflow','hidden');
  	elem.setStyle('position','absolute');

  	elem.addEvent('mouseover', function(e) {
        elem.addClass('hover');
  		});

  	elem.addEvent(actionEvent, function(e) { // На ссылку навешиваем события
        elem.addClass('hover');
        elem.setStyle('z-index','999');

        var myFx = new Fx.Tween(elem, {
    		duration: 200,
   		    transition: Fx.Transitions.Sine.easeOut,
            link: 'cancel',
            property: 'height'
        });

        myFx.start(linesize.y, boxheight);
  		});


  	elem.addEvent('mouseleave', function(e) { // Реагирование на уведение ссылки с объекта
        var myFx = new Fx.Tween(elem, {
    		duration: 200,
   		    transition: Fx.Transitions.Sine.easeOut,
            link: 'cancel',
            property: 'height'
        });

        myFx.start(boxheight, linesize.y).chain(function(){
			elem.removeClass('hover');
			});

  		});

	num++;
  	elem.removeClass('hover');
  	});
  }

function multilink_close()
  {
  $$('.multilinkbox').each(function (elem) {
    elem.setStyle('display','none');
    })
  }

function init_inputs(tag)
  {
  if (!tag) tag = '';

  new NS.Placeholder({ // Плейсхолдер
    	elements: $$(tag+' input')
    });

  $$(tag+' input.integer').each(function (elem) { // Для полей где разрешены только цифры
		elem.addEvent('keyup', function(e) {
			this.value=this.value.replace(/\W|[a-z]/ig,'');
		});
    });

  $$(tag+' input.float').each(function (elem) { // Для полей где разрешены только цифры с плавающей точкой
		elem.addEvent('keyup', function(e) {
			this.value=this.value.replace(/[^0-9\.\,]/ig,'');
		});
    });

  $$(tag+' input.az09').each(function (elem) { // Для полей где разрешены только латинские буквы и цифры
		elem.addEvent('keyup', function(e) {
			this.value=this.value.replace(/[^a-z0-9_-]/ig,'');
		});
    });

  $$(tag+' input.phone').each(function (elem) { // Для полей с номером телефона
		elem.addEvent('keyup', function(e) {
			this.value=this.value.replace(/[^0-9\(\)\s\-\+]/ig,'');
		});
    });

  $$(tag+' input[autocomplete]').each(function (elem) {
       // Обработка параметров, пришедших с помощью title
       var rawparams = elem.getAttribute('title'); // Получам значение аттрибута title, в него записываются праметры
       var params = JSON.decode(rawparams);
       if (!params)
         {
         params = new Object();
         }
       elem.removeProperty('title');

       // Дефолтные значения
       if (elem.hasClass('tags')) // Теги
         {
         if (!params.minLength)
           {
           params.minLength = 2;
           }
         if (!params.multiple) params.multiple = 'true';
         }

       var paramline='';
       if (params.minLength)
         {
         paramline += ",'minLength':"+params.minLength+"";
         }
       if (params.multiple)
         {
         paramline += ",'multiple':1";
         }
       if (params.selectMode)
         {
         paramline += ",'selectMode':'type-ahead'";
         }
       if (params.extended)
         {
         paramline += ",'injectChoice': function(choice) { var text = choice.getFirst(); var value = text.innerHTML; choice.inputValue = value; text.set('html', this.markQueryValue(value)); this.addChoiceEvents(choice); }";
		 }

       paramline = "{'indicatorClass': 'loading', 'filterSubset': true" +paramline+"}";
        //alert(paramline);

       var autocompleteURL = elem.getAttribute('autocomplete'); // Получам значение аттрибута
       if (autocompleteURL != 'on' && autocompleteURL != 'off')
         {
         new Autocompleter.Request.HTML(elem, autocompleteURL, JSON.decode(paramline));
	     }
    });
  }

function init_lightbox(elems)
  {
  elems.each(function(element) {
		element.addEvent('click', function(e) {
			$('lightbox').className = (element.getProperty('href'))?element.getProperty('href').replace(/^\//g,'').replace(/\/$/g,'').replace(/\//g,' '):''; // Добавляем классы к лайтбоксу исходя из того, куда ведет ссылка

			picregexp = /.+(\.png|\.jpg|\.jpeg|\.gif)/i;
			if(picregexp.test(element.getProperty('href'))) // По этому регулярному выражению определяется картинка
			  {
			  image = new Element('img', {'src':element.getProperty('href')});
			  $('inlightbox').empty();
			  $('inlightbox').adopt(image);
			  $('headlightbox').hide();
			  image.addEvent('load', function(e) {
			  		centerlightbox();
			  	});

			  image.addEvent('click', function(e) {
			  		showbox('hide');
			  	});

			  $('lightbox').addClass('image');
			  }
			else // Если мы загружаем в лайтбокс файл
			  {
			  $('inlightbox').empty();
			  $('inlightbox').addClass('ajax-loading');
			  $('headlightbox').set('text',' ');
			  var myRequest = new Request.HTML({url: element.getProperty('href'), method: 'post', evalScripts: false, onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
    				$('inlightbox').innerHTML = responseHTML;
                    $('inlightbox').removeClass('ajax-loading');

        			Browser.exec(responseJavaScript); // Выполняем полученный яваскрипт после того как вставили полученный HTML в DOM

    				$$('#lightbox var').each(function(element) { // Обрабатываем полученные элементы var
  			        var lightboxinfo = JSON.decode(element.innerHTML);

				    if (lightboxinfo.title) // title
		  		      {
		  		      $('headlightbox').set('text',lightboxinfo.title);
		  		      $('headlightbox').show();
		  		      }
  			  	    });

  			  	    centerlightbox();

                    init_tables($$('#lightbox table tr'));
  			  	    ajaxinit($$('#lightbox form'));
		  		    init_ishuman($$('#lightbox form'));
		  		    init_lightbox($$('#lightbox .lightbox'));
  			    }}).send('ajax=1&lightbox=1');
			  }
			showbox('show');

			e.stop();
		});
	});
  }

function init_tables(elem)
  {
  if (!elem) elem = $$('table tr');
  i=0;
  elem.each(function(element) {

		if (i++%2 == 0)  // Нечетным элементам таблиц добавляем класс
		  {
		  element.addClass('odd');
		  }
		element.addEvent('mouseenter', function(e) {
			element.addClass('mouseover');
		});
		element.addEvent('mouseleave', function(e) {
			element.removeClass('mouseover');
		});
	});
  }

function init_ishuman(elem) // Ставим всем формам невидимое поле для того чтобы потом скриптом проверять его наличие чтоб определять что это был человек а не бот
  {
  var inputElement;
  elem.each(function(element) {
  		if (element.getAttribute('action') && !element.getAttribute('action').contains('http://') && !element.getAttribute('action').contains('https://')) // Если отправляется не наружу
  		  {
  		  inputElement = new Element('input', {id: 'ishuman', 'type':'hidden', 'name':'ishuman','value':'1'});
 		  element.adopt(inputElement);
 		  }
	});
  }

function make_lightbox_draggable()
  {
  var myDrag = new Drag('lightbox', {
  	handle: $('headlightbox'),
    snap: 0,
    onSnap: function(el){
        el.addClass('dragging');
    },
    onComplete: function(el){
        el.removeClass('dragging');
    }
  });
  }

function init_vartags_parse(tag)
  {
  var newbodyclass = '';
  var newbodyid = '';
  var newpagename = '';
  $$(tag).each(function(element) { // Для всех элементов информации
		var info = JSON.decode(element.innerHTML);

		if (info.preload) // Предподгрузка картинок
		  {
		  if ($type(info.preload) == 'string')
		    {
		    preload(info.preload)
		    }
		  else if($type(info.preload) == 'array')
		    {
		    info.preload.each(function(element){
		    	preload(element);
		    	});
		    }
		  }

		if (info.pagename)
		  {
		  if ($('lightbox').style.display == 'block') // Если открыт лайтбокс, то pagename пишется в лайтбокс
		    {
		    $('headlightbox').innerHTML = info.pagename.replace(/\{quote\}/ig,'"');
		    }
		  else
		    {
		    newpagename = info.pagename;
		    }
		  }

		if (info.nowtpl)
		  {
		  nowtpl = info.nowtpl;
		  }

		if (info.mname && info.id) // Если есть название модуля и id, то это страница просмотра материала
		  {
		  cms_mname = info.mname;
		  cms_itemid = info.id;
		  new Request({method: 'post', url: '/ajax/count.php'}).send('id='+info.id+'&mname='+info.mname);
		  }

		if (info.bodyclass) // Класс для тега боди
		  {
		  newbodyclass = info.bodyclass;
		  }

	    if (info.bodyid) // ID для тега боди
		  {
		  newbodyid = info.bodyid;
		  }

		if (info.title)
		  {
		  document.title = info.title.replace(/\{quote\}/ig,'"');
		  }

		if (info.needlogin)
		  {
		  users_loginform_show();
		  }
	});

  if ($('pagename'))
	{
    if (!newpagename && initialTab)
      {
      $('pagename').addClass('displaynone');
	  }
	else if(newpagename)
	  {
	  $('pagename').removeClass('displaynone');
	  newpagename = newpagename.replace(/\[a=([^\]]+)\]([^\[]+)?\[\/a\]/ig,'<a href="$1">$2</a>');
	  newpagename = newpagename.replace(/\{quote\}/ig,'"');
	  $('pagename').set('html','<h2>'+newpagename+'</h2>');
	  }
	}

  if (newbodyclass)
    {
    $$('body')[0].setAttribute('class',newbodyclass);
    }
  else
    {
    $$('body')[0].removeAttribute('class');
    }

  if (newbodyid)
    {
    $$('body')[0].setAttribute('id',newbodyid);
    }
  else
    {
    $$('body')[0].removeAttribute('id');
    }
  }

function showbox(act)
  {
  if (act == 'show')
    {
    $('lightbox').style.visibility = 'visible';
    $('lightbox').style.display = 'block';

	$('fader').style.visibility = 'visible';
    $('fader').style.display = 'block';
    }
  else
    {
    $('lightbox').style.visibility = 'hidden';
    $('lightbox').style.display = 'none';

	$('fader').style.visibility = 'hidden';
    $('fader').style.display = 'none';
    }
  }

function initStateFromURL() {

		if (window.location.hash==initialTab) {
      		 return; // Nothing's changed since last polled.
     	}

        regexp_p = /\/p([0-9]+)\/?/i; // По этому регулярному выражению определяется является ли строка партнерской ссылкой
        regexp_u = /\/u([0-9]+)\/?/i; // По этому регулярному выражению определяется пришел ли пользователь от друга
		if(regexp_p.test(window.location.hash)) // Обрабатываем партнера
		  {
		  var once;
		  if (!once)
		    {
		    rez = regexp.exec(window.location.hash);
    		window.location.hash = '';
    		initialTab = window.location.hash;
		    var myCookie = Cookie.write('partner', rez[1], {duration: 30}); // Ставим куку о том какой партнер привел пользователя
		    var myRequest = new Request({url: '/modules/partners/ajax/partners.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
		    	// Успешно посчитали
    		}}).send('ref='+escape(document.referrer));
		    once = 1;
		    }
	      }
	    else if (regexp_u.test(window.location.hash))
	      {
	      var once;
		  if (!once)
		    {
		    rez = regexp_u.exec(window.location.hash);
    		window.location.hash = '';
    		initialTab = window.location.hash;
		    var myCookie = Cookie.write('fromuser', rez[1], {duration: 30}); // Ставим куку о том какой пользователь привел
		    var myRequest = new Request({url: '/modules/users/ajax/invited_friend.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
		    	// Успешно посчитали
    		}}).send('ref='+escape(document.referrer));
		    once = 1;
		    }
	      }
	    else
	      {
     	  var loadhref = '';
		  initialTab = window.location.hash;
		  for(i=1;i<initialTab.length;i++)
	  	    {
	  		loadhref += initialTab[i];
	  	    }
		  if (loadhref) ajaxload(loadhref);
		  if (!loadhref) ajaxload('/',false,1); // Если перешли обратно на главную
	      }
   }

function nowww()
  {
  var myURI = new URI(document.location);
  var host = myURI.get('host');
  if (host.match(/www\./))
    {
    myURI.set('host',host.replace(/www\./,''));
    var replaced = myURI.toString();
    redirect(replaced);
    }
  }

function findhref()
  {
  var findhref = initialTab;
  if(!findhref) // Если зашли по прямой ссылке не используя ajax, то получаем путь
    {
    var myURI = new URI(document.location);
    var findhref = myURI.get('directory')+((strpos(myURI.get('file'),'.') === false)?myURI.get('file'):'');
    }

  var ini = findhref.replace(/\#/i,'').replace(/\/$/i,'');
  return ini;
  }

function find_selected()
  {
  var ini = findhref().replace(/^\//i,'').toLowerCase();
  //alert(ini);
  $$('a').each(function(element) {
    var href = (element.getProperty('href'))?element.getProperty('href').replace(/\/$/i,'').replace(/^\//i,''):'';
    href = href.toLowerCase();
    if (href == ini)
      {
      element.addClass('active');
      element.addClass('selectedlink');
      }
    else
      {
      element.removeClass('active');
      element.removeClass('selectedlink');
      }
  	});
  }

function ajaxinit(elems) { // Для всех elems ставим события чтобы они грузились через ajax
	var myURI = new URI(document.location);
	var host = myURI.get('host'); // Получаем текущий хост
	var base = ($$('base')[0])?$$('base')[0].href:''; // Если на странице есть тег base

	elems.each( function(element) {
	if (element.getProperty('href')) // Для ссылок
	  {
	  var href = element.getProperty('href');
	  var hrefuri = href.toURI();
	  if (href[0] == '/' && base) // Если ссылка относительная и есть base
	    {
	    href = base+href;
	    }
	  //$('statinfo').innerHTML += href+' - '+host;
	  //$('statinfo').innerHTML += href.test(host, "i");

	  if ((href[0] == '/' || href.contains('http://'+host)) && element.hasClass('ajax')) // Если локальная ссылка или хосты совпадают
	    {
	    //var relative = hrefuri.toRelative(host);
		element.addEvent('click', function(e){
			  ajaxload(href);
			  //$('focus').focus();
			  e.stop();
		  });
		}
	  }
	else if (element.get('tag') == 'form') // Для форм
	  {
	  var action = element.getProperty('action');
	  if (action && action[0] == '/' && element.hasClass('ajax') && !element.hasClass('file')) // Если использует абсолютный путь и имеет класс ajax и не иммет события onSubmit
		{
		  element.addEvent('submit', function(e) {

	      /*if (element.getProperty('onSubmit')) // Если у формы есть onSubmit, то выполняем сначала его
		    {
		    var code = element.getProperty('onSubmit').replace(/javascript\:/,'').replace(/return.+$/,''); // Получем код
		    Browser.exec(code);
	        } */

		  ajaxfield = new Element('input', {'name':'ajax','type':'hidden','value':'1'});
	      element.adopt(ajaxfield);

		  e.stop();
		  var log = element.addClass('ajax-loading');
		  if ($$('#lightbox form')[0]) { $('lightbox').addClass('ajax-loading'); }  // Если форма находится внутри лайтбокса
		  log.set('send', {url: action, method: 'post', evalScripts: true, onComplete: function(response) {
					log.removeClass('ajax-loading');
					$('lightbox').removeClass('ajax-loading');
					log.set('html', response.replace(/<\/?form.+?>/i, '')+'<input id="ishuman" type="hidden" name="ishuman" value="1">');
					init_fieldsets();
					mark_errors();
					init_ishuman($$('#inlightbox form'));
					init_lightbox($$('#inlightbox .lightbox'));
					}});
		    log.send();
	        });
	    }

	   if (action && action[0] == '/' && element.hasClass('ajax') && element.hasClass('file')) // Если использует абсолютный путь и имеет класс ajax и не иммет события onSubmit
		{
		element.setProperty('onSubmit','return AIM.submit(this, {\'onComplete\' : AIMcompleteCallback});');
	    }
	  }


	});
}

function init_thisform() {
	$$('form').each(function(element) {
	  if (element.className == 'this')
	    {
	    var hash = window.location.hash.replace(/\#/,'');
	    if (hash[0] == '/')
	      {
	      element.setProperty('action',hash);
	      }
	    }
	});
}

function ajaxload(href,elemid,mode) { // elemid - это куда грузиться
	var elemid = (elemid)?elemid:'moduleinfo';  // если не указан elemid, то грузимся в moduleinfo
	var sizes = $(elemid).getCoordinates();
	var loading = $$('body').addClass('ajax-loading');

	multilink_close();

	$(elemid).setProperty('style','height:'+sizes.height+'px;width:'+sizes.width+'px;');
	var container = $(elemid).empty();
	if (!mode)
	  {
	  new Fx.Scroll($(document.body)).toTop(); // Скроллим до верха
	  }
	else if (mode == 'scroll')
	  {
	  new Fx.Scroll($(document.body)).toElement(elemid, 'y'); // Скроллим до меняющегося контента
	  }

	var myRequest = new Request.HTML({url: href, method: 'post', evalScripts: false,
		onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
    		container.innerHTML = responseHTML;

        	Browser.exec(responseJavaScript); // Выполняем полученный яваскрипт после того как вставили полученный HTML в DOM

    		loading.removeClass('ajax-loading');
    		ajaxinit($$('#'+elemid+' a, #'+elemid+' form')); // Для загруженных элементов a и form
    		init_tooltips($$('.tooltip')); // Инициализируем тултипсы для нового контента
    		init_vartags_parse('#'+elemid+' var');
    		init_ishuman($$('#'+elemid+' form'));
    		init_lightbox($$('#'+elemid+' .lightbox'));
    		init_tables($$('#'+elemid+' table tr'));
    		init_inputs('#'+elemid);
    		init_domready('#'+elemid);
    		init_multilink();
    		$(elemid).setProperty('style','height:auto;width:auto;');
    		if (!mode)
    	  		{
    	  		initialTab = '#'+href;
    	  		window.location.hash = href;
    	  		}
    		find_selected(); // Отмечаем ссылки классом .selectedlink
    		init_thisform();
    		if (!mode && function_exists('template_domready')) { template_domready(elemid); }
    		},
		onFailure: function(response) {
			$(elemid).innerHTML = '<div id="error">При загрузке страницы произошла ошибка</div>';
			loading.removeClass('ajax-loading');
			}
    }).send('ajax=1&tpl='+nowtpl);
}

function make_error() {
	this.length = arguments.length;
  	for (var i = 0; i < this.length; i++)
  	  {
      $(arguments[i]+'_div').addClass('formerr');
      }

}

function init_tooltips(elems)
  {
  $$('.tip-wrap').each(function (elem) { elem.nix(true) }); // Если до этого были тултипсы, то удаляем их, чтоб не высвечивали
  toolTips = new Tips(elems);
  }

function preload(src)
  {
  var img = new Image();
  img.src = src;
  }

function addmark(mark)
  {
  toolTips.hide();
  var id = 0;

  $$('var').each(function(element) { // Для всех элементов информации
		var info = JSON.decode(element.innerHTML.toString());

		if (info['id'])
		  {
	      id = info['id'];
		  }
		});
  $('rateinfo').empty();
  var loading = $('ratingdiv').addClass('ajax-loading');

  var myRequest = new Request({url: '/ajax/vote.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
    	loading.removeClass('ajax-loading');
  }}).send('id='+id+'&mark='+parseInt(mark));
  }

function redirect(url)
  {
  var goURL = url.toURI().go();
  }

function function_exists (function_name) {
    if (typeof function_name == 'string'){
        return (typeof this.window[function_name] == 'function');
    } else{
        return (function_name instanceof Function);
    }
}

function strpos( haystack, needle, offset){ // Find position of first occurrence of a string
  var i = haystack.indexOf( needle, offset ); // returns -1
  return i >= 0 ? i : false;
}

function translit(msg)
  {
  var rusChars = new Array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ч','ц','ш','щ','э','ю','\я','ы','ъ','ь', ' ', '\'', '\"', '\#', '\$', '\%', '\&', '\*', '\,', '\:', '\;', '\<', '\>', '\?', '\[', '\]', '\^', '\{', '\}', '\|', '\!', '\@', '\(', '\)', '\-', '\=', '\+', '\/', '\\');
  var transChars = new Array('a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','ch','c','sh','csh','e','ju','ja','y','', '', '_', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '-', '', '', '', '');

  var rez = '';
  msg = msg.toLowerCase();
  var len = msg.length;
  var character, isRus;
  for(i=0; i < len; i++)
    {
    character = msg.charAt(i,1);
    isRus = false;
    for(j=0; j < rusChars.length; j++)
      {
      if(character == rusChars[j])
        {
        isRus = true;
        break;
        }
      }
    rez += (isRus) ? transChars[j] : character;
    }
  return rez;
  }


function to_fav(id,obj) // Избранное
  {
  if (obj.hasClass('in')) // Если уже есть в избранном, то удаляем
    {
    obj.removeClass('in').addClass('out');
    obj.innerHTML = 'в избранное';
    new Request.HTML({url:'/ajax/delfav.php',
		onSuccess: function(html) {
			if ($('num_fav'))
			  {
			  $('num_fav').set('text', '');
			  $('num_fav').adopt(html);
			  }
			$('fav_err').set('text','Объект удален из избранных');
		},
		onFailure: function() {
			$('fav_err').set('text', 'Объект не удален из избранных');
		}
	  }).get({'id': id});
	}
  else // Добавляем в избранное
    {
    obj.removeClass('out').addClass('in');
    obj.innerHTML = 'из избранного';
    new Request.HTML({url:'/ajax/fav.php',
		onSuccess: function(html) {
			if ($('num_fav'))
			  {
			  $('num_fav').set('text', '');
			  $('num_fav').adopt(html);
			  }
			$('fav_err').set('html', '<span style="color:#608C3F">добавлен</span>');
		},
		onFailure: function() {
			$('fav_err').set('text', 'В избранные не добавлен');
		}
	  }).get({'id': id});
    }
  }

function show_at_page(mname,count)
  {
  var myRequest = new Request({url: '/ajax/atpage.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
     ajaxload(findhref());
  }}).send('mname='+mname+'&count='+count);
  }

function del_photo(id)
  {
  var myRequest = new Request({url: '/ajax/del_photo.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
    $('photo'+id).nix({duration: 1000}, true);
  }}).send('id='+id);
  }

function delitem(mname,id)
  {
  var myRequest = new Request({url: '/ajax/delitem.php', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
  	$('mini'+id).nix({duration: 1000}, true);
  }}).send('mname='+mname+'&id='+id);
  }

function trim( str, charlist )
  {
  charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
  var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
  return str.replace(re, '');
  }

function set_status(mname,id,status,obj)
  {
  new Request({method: 'get', url: '/ajax/set_status.php', evalScripts: true, onComplete: function(response) {

		}}).send('mname='+mname+'&status='+status+'&id='+id);
  }

function set_shown(mname,id,shown,obj)
  {
  new Request({method: 'get', url: '/ajax/set_shown.php', evalScripts: true, onComplete: function(response) {

		}}).send('mname='+mname+'&shown='+shown+'&id='+id);
  }

function change_tpl(tpl)
  {
  var href;
  var CityCookie  = Cookie.write('tpl', tpl, {duration: 100});
  if (href = findhref())
    {
    redirect(href);
    }
  else
    {
     redirect('/');
    }
  }

function show_mainarticles(obj)
    {
    id = (obj.id).replace(/ma/,'');

    for (var i=0;i<100;i++) // Все скрываем
      {
      if ($('container'+i))
        {
        $('container'+i).hide();
        }
      }
    $('container'+id).show();
    }

function mainarticles(div,groupcount)
  {
  if (!$(div)) return;

  var kolvo = u = z = 0;
  var elems = new Array();
  var pagelinks;
  var li;
  var groupcodeElement;
  $$('#'+div+' a').each(function (element) {
    kolvo++;
    elems[u++] = element;
    })

  var groups = Math.ceil(kolvo/groupcount);
  var pagelinksElement  = new Element('div', {'id': 'pagelinks'});

  for(var i=0;i<groups;i++)
    {
    groupcodeElement  = new Element('ul', {'id': 'container'+i,'class':'container','styles':{'display': 'none'}});
    for(z=0;z<groupcount;z++)
      {
      if (elems[i*groupcount+z])
        {
        li = new Element('li');
        li.adopt(elems[i*groupcount+z]);
        groupcodeElement.adopt(li);
        }
      }
    $(div).adopt(groupcodeElement);

    pagelinks = new Element('a', {
    'id': 'ma'+i,
    'href': '',
    'html': (i+1),
    'events': {
        'click': function(e){
            show_mainarticles(this);
            e.stop();
        }
    }
});

    pagelinksElement.adopt(pagelinks);
	}

  $('container0').show();
  $(div).adopt(pagelinksElement);
  }

function calendar(month,year)
  {
  ajaxload('/ajax/calendar.php?month='+month+'&year='+year,'calendar',1);
  }

function save_tags(mname,itemid,elem)
  {
  elem = $(elem);
  var tagline = elem.value;
  $$('#tags'+itemid+' input[type=submit]')[0].hide();

  elem.addClass('ajaxload');
  		      var myRequest = new Request({url: '/ajax/tags.php?mode=set', method: 'post', evalScripts: true, onSuccess: function(responseText, responseXML) {
      		      elem.removeClass('ajaxload');
      		      elem.removeClass('error');
      		      lighting('done',elem);
  		        }, onFailure: function(err) {
  			      lighting('error',elem);
  		        }
    }).send('itemid='+itemid+'&mname='+mname+'&tagline='+tagline);


  }

Elements.implement({

	multiFade: function( opacity ) {

		var opacity = ( opacity ) ? opacity : .3,
		    elems = this;

		this.addEvents({
		  'mouseenter':  function( e ) {
		    elems.each( function( elem ) {
		      if( elem != e.target )
		        {
		        elem.set('tween', {duration: 200});
		        elem.tween( 'opacity', opacity );
		        }
		    });
		  },

		  'mouseleave':   function( e ) {
		    elems.each( function( elem ){
		      elem.set('tween', {duration: 200});
		      elem.tween( 'opacity', 1);
		    });
		  }
		});

	}
});

AIM = {
	frame : function(f,c) {
		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" '
			    + 'src="about:blank" id="'
			    + n + '" name="'
			    + n + '" onload="AIM.loaded(\''
			    + n + '\',\''+'form'+n+'\')"></iframe>';
		document.body.appendChild(d);

		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}

		f.addClass('form'+n);

		return n;
	},

	form : function(f, name) {
		f.setAttribute('target', name);
	},

	submit : function(f, c) {
		var n = AIM.frame(f,c);
		AIM.form(f, n);
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart();
		} else {
			return true;
		}
	},

	loaded : function(id,formclass) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}

		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML,formclass);
		}
	}
}

function AIMcompleteCallback(response,formclass) {
	$$('.'+formclass)[0].innerHTML = response;
}

var NS = NS || {};
NS.Placeholder = new Class({
	Implements: [Options],

	options: {
		/**
		 * Elements to check
		 * (single element, elements collection or a string selector)
		 * @var {Element|Elements|String}
		 */
		elements: 'input[type=text]',

		/**
		 * CSS class when value is empty
		 * @var {String}
		 */
		cssClass: 'placeholder',

		/**
		 * Color to apply directly
		 * @var {String}
		 */
		color: null
	},

	/**
	 * Initialization
	 *
	 * @param {Object}
	 */
	initialize: function(options)
	{
		// Setting options
		this.setOptions(options);

		// Retrieving elements to check
		var elements;
		switch ($type(this.options.elements))
		{
			case 'string':
				elements = $$(this.options.elements);
				break;
			case 'element':
				elements = [this.options.elements];
				break;
			default:
				elements = this.options.elements;
		}

		// Attaching events
		elements.each(function(el){
			var text = el.get('placeholder');
			if (text)
			{
				// Storing placeholder text
				el.store('ns-placeholder-text', text);

				// Storing default color
				el.store('ns-placeholder-color', el.getStyle('color'));

				// Bluring
				this.blur(el);

				// Events
				el.addEvents({
					focus: function(){ this.focus(el); }.bind(this),
					blur: function(){ this.blur(el); }.bind(this),
					keyup: function(){ this.keyup(el); }.bind(this)
				});

				// Form submit
				var form = el.getParent('form');
				if (form)
				{
					form.addEvent('submit', function()
					{
						if (el.value == text)
							el.set('value', '');
					});
				}
			}
		}.bind(this));
	},

	/**
	 * Focus element
	 * @param {Element}
	 * @param {Boolean}
	 */
	keyup: function(el, keyup)
	{
	var text = el.retrieve('ns-placeholder-text'),
	value = el.get('value');

	if (value == '' || value == text)
	   {

	  }
	else
	  {
	  if (el.hasClass('passwordfield'))
	    {
	    el.set('type','password');
	    }
	  }
	},

	focus: function(el, focus)
	{
		focus = focus == undefined || focus;

		var text = el.retrieve('ns-placeholder-text'),
			value = el.get('value');

		if (value == '' || value == text)
		{
			if (el.get('type') == 'password')
			  {
			  el.set('type','text');
			  el.addClass('passwordfield');
			  }

			// Setting placeholder CSS class if defined
			if (this.options.cssClass)
				el[focus ? 'removeClass' : 'addClass'](this.options.cssClass);

			// Setting color if defined
			if (this.options.color)
				el.setStyle('color', focus ? el.retrieve('ns-placeholder-color') : this.options.color);

			// Value
			el.set('value', focus ? '' : text);
		}
	},

	/**
	 * Blur element
	 * @param {Element}
	 */
	blur: function(el)
	{
		this.focus(el, false);
	}
});

