var JSON;if(!JSON){JSON={}}(function(){function str(a,b){var c,d,e,f,g=gap,h,i=b[a];if(i&&typeof i==="object"&&typeof i.toJSON==="function"){i=i.toJSON(a)}if(typeof rep==="function"){i=rep.call(b,a,i)}switch(typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i){return"null"}gap+=indent;h=[];if(Object.prototype.toString.apply(i)==="[object Array]"){f=i.length;for(c=0;c<f;c+=1){h[c]=str(c,i)||"null"}e=h.length===0?"[]":gap?"[\n"+gap+h.join(",\n"+gap)+"\n"+g+"]":"["+h.join(",")+"]";gap=g;return e}if(rep&&typeof rep==="object"){f=rep.length;for(c=0;c<f;c+=1){if(typeof rep[c]==="string"){d=rep[c];e=str(d,i);if(e){h.push(quote(d)+(gap?": ":":")+e)}}}}else{for(d in i){if(Object.prototype.hasOwnProperty.call(i,d)){e=str(d,i);if(e){h.push(quote(d)+(gap?": ":":")+e)}}}}e=h.length===0?"{}":gap?"{\n"+gap+h.join(",\n"+gap)+"\n"+g+"}":"{"+h.join(",")+"}";gap=g;return e}}function quote(a){escapable.lastIndex=0;return escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return typeof b==="string"?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function f(a){return a<10?"0"+a:a}"use strict";if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(a){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(a){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;if(typeof JSON.stringify!=="function"){JSON.stringify=function(a,b,c){var d;gap="";indent="";if(typeof c==="number"){for(d=0;d<c;d+=1){indent+=" "}}else if(typeof c==="string"){indent=c}rep=b;if(b&&typeof b!=="function"&&(typeof b!=="object"||typeof b.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":a})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&typeof e==="object"){for(c in e){if(Object.prototype.hasOwnProperty.call(e,c)){d=walk(e,c);if(d!==undefined){e[c]=d}else{delete e[c]}}}}return reviver.call(a,b,e)}var j;text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}})()

$.storage = function(key, val) {
  if (window.localStorage === undefined) {
    return false;
  }

  if (val === undefined) {
    var data;
    try {
      data = localStorage.getItem(key);
      if (data) {
        data = JSON.parse(data);
        if (typeof data != 'object') {
          data = false;
        }
      } else {
        data = false;
      }
    } catch (e) {            
      return false;
    }
    return data;
  }

  if (typeof val == 'object') {
    try {
      localStorage.setItem(key, JSON.stringify(val));
    } catch (e) {
      return false;
    }
    return true;
  }

  if (val === null) {
    localStorage.removeItem(key);
    return true;
  }

  return false;
};/**
 * 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
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
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 = '; 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;
    }
};
;/*
 * jqModal - Minimalist Modaling with jQuery
 *   (http://dev.iceburg.net/jquery/jqModal/)
 *
 * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net>
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 * 
 * $Version: 03/01/2009 +r14
 *
 * Updated (IE6 detection): Alex Olshansky <i@creagenics.com>, 19.05.2009
 *
 */
(function($) {
$.fn.jqm=function(o){
var p={
overlay: 50,
overlayClass: 'jqmOverlay',
closeClass: 'jqmClose',
trigger: '.jqModal',
ajax: F,
ajaxText: '',
target: F,
modal: F,
toTop: F,
onShow: F,
onHide: F,
onLoad: F
};
return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o);s++;this._jqm=s;
H[s]={c:$.extend(p,$.jqm.params,o),a:F,w:$(this).addClass('jqmID'+s),s:s};
if(p.trigger)$(this).jqmAddTrigger(p.trigger);
});};

$.fn.jqmAddClose=function(e){return hs(this,e,'jqmHide');};
$.fn.jqmAddTrigger=function(e){return hs(this,e,'jqmShow');};
$.fn.jqmShow=function(t){return this.each(function(){t=t||window.event;$.jqm.open(this._jqm,t);});};
$.fn.jqmHide=function(t){return this.each(function(){t=t||window.event;$.jqm.close(this._jqm,t)});};

$.jqm = {
hash:{},
open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index'))),z=(z>0)?z:3000,o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});if(h.a)return F;h.t=t;h.a=true;h.w.css('z-index',z);
 if(c.modal) {if(!A[0])L('bind');A.push(s);}
 else if(c.overlay > 0)h.w.jqmAddClose(o);
 else o=F;

 h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F;
 if(ie6){$('html,body').css({height:'100%',width:'100%'});if(o){o=o.css({position:'absolute'})[0];for(var y in {Top:1,Left:1})o.style.setExpression(y.toLowerCase(),"(_=(document.documentElement.scroll"+y+" || document.body.scroll"+y+"))+'px'");}}

 if(c.ajax) {var r=c.target||h.w,u=c.ajax,r=(typeof r == 'string')?$(r,h.w):$(r),u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u;
  r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});}
 else if(cc)h.w.jqmAddClose($(cc,h.w));

 if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o);	
 (c.onShow)?c.onShow(h):h.w.show();e(h);return F;
},
close:function(s){var h=H[s];if(!h.a)return F;h.a=F;
 if(A[0]){A.pop();if(!A[0])L('unbind');}
 if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove();
 if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return F;
},
params:{}};
var s=0,H=$.jqm.hash,A=[],ie6=((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined))/*$.browser.msie&&($.browser.version == "6.0")*/,F=false,
i=$('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({opacity:0}),
e=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(!$('iframe.jqm',h.w)[0])h.w.prepend(i); f(h);},
f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}},
L=function(t){$()[t]("keypress",m)[t]("keydown",m)[t]("mousedown",m);},
m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;},
hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() {
 if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});};
})(jQuery);/*
 * jQuery Color Animations
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 */

(function(jQuery){

	// We override the animation for all of these color styles
	jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
		jQuery.fx.step[attr] = function(fx){
			if ( fx.state == 0 ) {
				fx.start = getColor( fx.elem, attr );
				fx.end = getRGB( fx.end );
			}

			fx.elem.style[attr] = "rgb(" + [
				Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
			].join(",") + ")";
		}
	});

	// Color Conversion functions from highlightFade
	// By Blair Mitchelmore
	// http://jquery.offput.ca/highlightFade/

	// Parse strings looking for color tuples [255,255,255]
	function getRGB(color) {
		var result;

		// Check if we're already dealing with an array of colors
		if ( color && color.constructor == Array && color.length == 3 )
			return color;

		// Look for rgb(num,num,num)
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
			return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];

		// Look for rgb(num%,num%,num%)
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
			return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];

		// Look for #a0b1c2
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
			return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];

		// Look for #fff
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
			return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];

		// Otherwise, we're most likely dealing with a named color
		return colors[jQuery.trim(color).toLowerCase()];
	}
	
	function getColor(elem, attr) {
		var color;

		do {
			color = jQuery.curCSS(elem, attr);

			// Keep going until we find an element that has color, or we hit the body
			if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
				break; 

			attr = "backgroundColor";
		} while ( elem = elem.parentNode );

		return getRGB(color);
	};
	
	// Some named colors to work with
	// From Interface by Stefan Petre
	// http://interface.eyecon.ro/

	var colors = {
		aqua:[0,255,255],
		azure:[240,255,255],
		beige:[245,245,220],
		black:[0,0,0],
		blue:[0,0,255],
		brown:[165,42,42],
		cyan:[0,255,255],
		darkblue:[0,0,139],
		darkcyan:[0,139,139],
		darkgrey:[169,169,169],
		darkgreen:[0,100,0],
		darkkhaki:[189,183,107],
		darkmagenta:[139,0,139],
		darkolivegreen:[85,107,47],
		darkorange:[255,140,0],
		darkorchid:[153,50,204],
		darkred:[139,0,0],
		darksalmon:[233,150,122],
		darkviolet:[148,0,211],
		fuchsia:[255,0,255],
		gold:[255,215,0],
		green:[0,128,0],
		indigo:[75,0,130],
		khaki:[240,230,140],
		lightblue:[173,216,230],
		lightcyan:[224,255,255],
		lightgreen:[144,238,144],
		lightgrey:[211,211,211],
		lightpink:[255,182,193],
		lightyellow:[255,255,224],
		lime:[0,255,0],
		magenta:[255,0,255],
		maroon:[128,0,0],
		navy:[0,0,128],
		olive:[128,128,0],
		orange:[255,165,0],
		pink:[255,192,203],
		purple:[128,0,128],
		violet:[128,0,128],
		red:[255,0,0],
		silver:[192,192,192],
		white:[255,255,255],
		yellow:[255,255,0]
	};
	
})(jQuery);;function showmenu(elmnt)
{
document.getElementById(elmnt).style.visibility="visible";
document.getElementById(elmnt).style.zIndex="20000";
}
function hidemenu(elmnt)
{
document.getElementById(elmnt).style.visibility="hidden";
document.getElementById(elmnt).style.zIndex="0";
}


function markmenu(elmnt)
{
document.getElementById(elmnt).className='inner_spam_menu_selected';
}

function unmarkmenu(elmnt)
{
document.getElementById(elmnt).className='inner_spam_menu';
}

function change_znak(newsid)
{
var znak=document.getElementById('ch_weight_znak_'+newsid);
var pic =document.getElementById('ch_weight_pic_'+newsid);
if(znak.value=='+')
{
znak.value='-';
pic.src='http://smi2.ru/img/vote_minus.gif';
}
else
{
znak.value='+';
pic.src='http://smi2.ru/img/vote_plus.gif';
}
}

add2forum = function(newsId) {
  jQuery.ajax({
    type: "GET",
    cache: false,
    url: '/process/',
    data: {
        action: '2forum',
            news_id: newsId,
            bind_id: jQuery('#2forum_' + newsId).val()
    },
    timeout: 15000,
    beforeSend: function(XMLHttpRequest){},
    complete: function(data, status){}
  });
  window.location.reload();
}

move_forum_news = function(newsId, bindId, return_url) {
  var action = jQuery('#2forum_' + newsId).val() == "clean" ? 'del_from_forum' : 'move_forum_news';
  jQuery.ajax({
    type: "GET",
    cache: false,
    url: '/process/',
    data: {
        action: action,
            news_id: newsId,
            bind_id: jQuery('#2forum_' + newsId).val(),
            old_bind_id: bindId,
            return_url: return_url
    },
    timeout: 15000,
    beforeSend: function(XMLHttpRequest){},
    complete: function(data, status){}
  });
  window.location.reload();
}


function spam(news_id, type){
  var digit = document.getElementById('lay_spam_digit_'+news_id);
  var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
              if ( !isNaN(parseInt(resp)) ) {
                digit.innerHTML = drown+'! ('+resp+')';
                document.getElementById('Strany_'+news_id).style.visibility='hidden';
//						changevisible(twiggleoff, twiggleon);
//        	    		alert('Ваш сигнал учтен. Спасибо!'+resp);
              } else {
                    alert('Error: ' + resp);
              }
            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };

  var request = '/process/?action=spam&news_id='+news_id+'&type='+type;
    //alert(request);
    req.open('GET', request, true);
    req.send(null);
    return false;
}

/**
 *
 * @access public
 * @return void
 **/
function vote(news_id, digit_id, twiggleoff, twiggleon, attitude){
  var old_positive, old_negative, old_votes, obobs;
  var digit = $('#'+digit_id);
  old_positive=$('#lay_pdigit_'+news_id).text();
  old_negative=$('#lay_ndigit_'+news_id).text();
  old_votes=$(digit).text();
  odobs=Array();

  /*раньше это была аякса
  var odobs = resp.split('|'); // odob | odob_positive | odob_negative
  odobs[0] = parseInt(odobs[0]);
  odobs[1] = parseInt(odobs[1]);
  odobs[2] = parseInt(odobs[2]);*/

  odobs[0] = parseInt(old_votes)+1;
  if(attitude=='p'){
      odobs[1] = parseInt(old_positive)+1;
  }else{
      odobs[1] = parseInt(old_positive);
  }
  if(attitude=='n'){
      odobs[2] = parseInt(old_negative)+1;
  }else{
      odobs[2] = parseInt(old_negative);
  }

  $(digit).text(odobs[0]);
  changevisible(twiggleoff, twiggleon);
  var divs = document.getElementById(twiggleon[0]).getElementsByTagName('div');

  if (!odobs[1] && !odobs[2]) {
    var pw = 34;
    var nw = 34;
  } else if (!odobs[1]) {
    var pw = 0;
    var nw = 70;
  } else if (!odobs[2]) {
    var pw = 70;
    var nw = 0;
  } else {
    var pw = Math.round(odobs[1]/(odobs[1]+odobs[2])*70)-2;
    var nw = 68-pw;
  }

  if (!pw) {
    divs[0].style.display = 'none';
  } else {
    divs[0].style.display = 'block';
    divs[0].style.width = pw+'px';
  }

  if (!nw) {
    divs[1].style.display = 'none';
  } else {
    divs[1].style.display = 'block';
    divs[1].style.width = nw+'px';
  }

  $.get('/process/?action=vote&news_id='+news_id+'&attitude='+attitude);
  return true;
}

function vote_mosaic(news_id, digit_id, twiggleoff, twiggleon){
  var digit = document.getElementById(digit_id);
     var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
              if ( !isNaN(parseInt(resp)) ) {
                digit.innerHTML = resp;
                changevisible(twiggleoff, twiggleon);
              } else {
                    alert('Error: ' + resp);
              }
            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };
     /*пкоазывать голоса*/
  var request = '/process/?action=vote&news_id='+news_id+'&golosov=1';
    req.open('GET', request, true);
    req.send(null);
}


function vote_simple(news_id, digit_id, golosovat_id){
  var digit = document.getElementById(digit_id);
  var gol = document.getElementById(golosovat_id);
     var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
              if ( !isNaN(parseInt(resp)) ) {
                digit.innerHTML = resp;
                gol.innerHTML = '';
              } else {
                    alert('Error: ' + resp);
              }
            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };
  var request = '/process/?action=vote&news_id='+news_id;
    req.open('GET', request, true);
    req.send(null);
}

function setclick ( news_id, partner_id ){
     var req = newHttpRequest();

  var request = '/process/?action=click&news_id='+news_id+'&partner_id='+partner_id;
  var url = window.location.href;
  var re = /\/\?seid\=(\w+)/;
  if (re.test(url)) {
      var val = re.exec(url);
      request = request + "&seid="+val[1];
    }
    req.open('GET', request, true);
    req.send(null);
}

function click ( news_id, partner_id ){
     var req = newHttpRequest();

  var request = '/process/?action=click&news_id='+news_id+'&partner_id='+partner_id;
    req.open('GET', request, true);
    req.send(null);
}

function click_site ( news_id, partner_id ){
     var req = newHttpRequest();

  var request = '/process/?action=click_site&news_id='+news_id+'&partner_id='+partner_id;
    req.open('GET', request, true);
    req.send(null);
}

function news_delete(news_id/*, elem_off*/){
  if (!confirm('Удалить новость?')) {
    return 0;
  }
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
           if (req.status == 200) {
              if ( resp=='OK' ) {
                window.location.href=window.location.href;
                //changevisible(new Array (elem_off), new Array());
              } else {
                    alert('Error: ' + resp);
              }
            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
      };
  var request = '/process/?action=delete&news_id='+news_id;
      req.open('GET', request, true);
      req.send(null);
}


function topic_delete(topic_id){
    if (!confirm(delete_topic+'?')) {
        return 0;
    }
    var url='/process/?action=deleteTopic&topic_id='+topic_id;
    $.get(url,function(){
        document.location.href="/topics/";
    });
}


function forum_delete(news_id, elem_off){
  if (!confirm(delete_forum_posting+'?')) {
    return 0;
  }
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
              if ( resp=='OK' ) {
                window.location.href=window.location.href;
              } else {
                    alert('Error: ' + resp);
              }
            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
      };
  var request = '/process/?action=delete&news_id='+news_id;
      req.open('GET', request, true);
      req.send(null);
}


function forum_subscribe(user_id, news_id,topic)
{
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200)
            {
              if(req.responseText=='-1'){
                alert('Чтобы подписаться на тему: \n' + topic+'\n необходимо быть зарегистрированным пользователем');
              } else {
                  if(req.responseText=='1')
                  {
                    document.getElementById('forum_subscribe').innerHTML = 'Отписаться';
                    alert('Вы подписаны на рассылку по этой теме: \n' + topic);
                  }
                  else
                  {
                    document.getElementById('forum_subscribe').innerHTML = 'Подписаться';
                    alert('Вы удалены из списка рассылки по теме: \n' + topic);
                  }
              }
             }
            else
            {
              alert('There was a problem with the request.');
            }
          } else {
          }
      };
    var request = '/process/?action=forum_subscribe&user_id='+user_id+'&news_id='+news_id;
      req.open('GET', request, true);
      req.send(null);
}


function is_addcomments(news_id, status)
{
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200)
            {
              if(status==1)
              {
              document.getElementById('is_addcomments_'+news_id).innerHTML = '<a class="middle21" onclick="is_addcomments('+news_id+', 0)" href="javascript:{}">Откл. вопросы</a>';
              }
              else
              {
              document.getElementById('is_addcomments_'+news_id).innerHTML = '<a class="middle21" onclick="is_addcomments('+news_id+', 1)" href="javascript:{}">Вкл. вопросы</a>';
              }
             }
            else
            {
                  alert('There was a problem with the request.');
            }
          } else {
          }
      };
  var request = '/process/?action=is_addcomments&news_id='+news_id+'&status='+status;
      //alert(request);
      req.open('GET', request, true);
      req.send(null);
}

function setanswer(news_id)
{
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
              if (req.status == 200)
            {
                if(resp=='ok') alert('Запрос успешно выполнен.');
                else if(resp=='no user') alert('Пользователь с таким ником не найден.');
                else alert(resp);
            };
                      }
                        }
    var answer_nick=document.getElementById('answer_nick').value;
    if(answer_nick=='') alert('Укажите ник пользователя');
  var request = '/process/?action=setanswer&news_id='+news_id+'&answer_nick='+answer_nick;
      req.open('GET', request, true);
      req.send(null);
}

function client_ban(client_id){
  if (!confirm('Забанить юзера?')) {
    return 0;
  }
      var req = newHttpRequest();
      req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) alert('Пользователь отключен');
            }

        };
  var request = '/process/?action=ban&client_id='+client_id;
      req.open('GET', request, true);
      req.send(null);
}


function client_penalty(client_id){

  if (!confirm('Поставить штраф?'))
  {
    return 0;
  }
  var value=document.getElementById('client_penalty_'+client_id).value;
    if (isNaN(value)==true || value<=0)
    {
    alert ('Введите число большее 0.');
    return 0;
    }

   //alert(value);
   var req = newHttpRequest();

   req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) alert('Штраф начислен');
            }

        };
  var request = '/process/?action=penalty&client_id='+client_id+'&value='+value;
        req.open('GET', request, true);
      req.send(null);
}


function changeweight(newsid){

  var value=document.getElementById('ch_weight_value_'+newsid).value;
  var znak=document.getElementById('ch_weight_znak_'+newsid).value;

  if (!confirm('Изменить рейтинг?'))
  {
    return false;
  }
    if (isNaN(value)==true || value<=0)
    {
    alert ('Введите число большее 0.');
    return false;
    }

   //alert(value);
   var req = newHttpRequest();

   req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) alert('Рейтинг изменен. Вес новости изменится через некоторое время.');
            }

        };
  var request = '/process/?action=changenewsweight&news_id='+newsid+'&value='+znak+value;
        req.open('GET', request, true);
      req.send(null);
}


function exportrss(news_id, to_status, type, elem){
    var url='/process/?action=exportrss&news_id='+news_id+'&to_status='+to_status+'&type='+type;
    $.get(url, function(data){
          var html=$(elem).html();
          if(data=='1'){
              alert('Новость добавлена в ленту');
              $(elem).html(html.replace('2', 'Из'));
              $(elem).attr("onClick", "exportrss("+news_id+", '0', '"+type+"', this)");
         }else if(data=='0'){
              alert('Новость удалена из ленты');
              $(elem).html(html.replace('Из', '2'));
              $(elem).attr("onClick", "exportrss("+news_id+", '1', '"+type+"', this)");
          }else{
              alert('Ошибка запроса. Обратитесь в службу поддержки.');
          }
     });
}

//не ждать ответа от аяксы
function comment_rating(act, comm_id){
    var golosov, ar_golosov, num_golosov, t1, t2, re, pref, pref1;
    golosov=$('#comment_rating_'+comm_id+' .current-rating').text();
    ar_golosov=golosov.toString().split(' ');
    num_golosov=parseInt(ar_golosov[0]);
    act=parseInt(act);
    num_golosov=eval(num_golosov.toString()+'+'+act.toString());
    num_golosov=parseInt(num_golosov);
	re = /[^-]{0,2}$/i;
	t1 = num_golosov.toString().match(re);
	t1=parseInt(t1);
	re = /[^-]{0,1}$/i;
	t2 = num_golosov.toString().match(re);
	t2=parseInt(t2);
    if (t1 > 5 && t1 <= 20){
        pref = tr_golosov;
    }else if(t2 == 1){
        pref = tr_golos;
    }else if(t2 >= 2 && t2 <= 4){
        pref = tr_golosa;
    }else{
        pref = tr_golosov;
    }

    if(num_golosov>0){
        pref1='+';
    }else{
        pref1='';
    }

    $('#comment_rating_'+comm_id+' .current-rating').text(pref1+num_golosov.toString()+' '+ pref);

    $('#comment_rating_'+comm_id+' img').each(function (i) {
        var src=$(this).attr('src');
        $(this).attr('src', src.replace('.gif', '_grey.gif'));
        $(this).css('cursor', 'default');
        $(this).bind("click", function(){
          return false;
        });
        $(this).parent().bind("click", function(){
          return false;
        });
    });
    $.getJSON('/process/?action=vote_comment&comm_id='+comm_id+'&act1='+act, function(data){
       if(data.status!='ok'){
          alert(data.errors);
       }
    });
    return true;
}

function refreshPage() {
    var url = document.location.href;
    var i = url.indexOf('#');
    if (i) {
    	url = url.substr(0,i);
    }
    document.location.href = url;
}

function comment_delete(comm_id)
{
if (!confirm('Удалить комментарий?'))
  {
    return 0;
  }

  $.get('/process/?action=delete_comment',{comm_id:comm_id},function(){
        alert('Комментарий удален');
        refreshPage();
  });

}

function changevisible(twiggleoff, twiggleon){
  for(var i in twiggleoff) {
    var el = document.getElementById(twiggleoff[i]);
    if(el){
        el.style.display='none';
    }
  }
  for(var i in twiggleon) {
    var el = document.getElementById(twiggleon[i]);
    if(el){
        el.style.display='';
    }
  }

}



/*function $( element ){
  return document.getElementById(element);
  if(mem){
    return mem;
  }
  alert( element );
}*/

function unpopp(){poppDiv=document.getElementById('poppDiv');if(poppDiv){poppDiv.parentNode.removeChild(poppDiv);poppDiv=false;}}

function pop(id,text){
  unpopp();
  document.getElementById('place'+id).innerHTML+='<div id="poppDiv" class="inline-warning"><div><p><a href="/register/">Присоединяйтесь</a> к SMI2, чтобы '+text+'. Если у вас уже есть аккаунт, авторизуйтесь.</p><a href="javascript:unpopp()"><img src="http://smi2.ru/img/close.gif" class="close" border=0 width="22" height="22" alt="Close" /></a></div></div>';
  return(false);
}

function pop_comm(id,text){
  unpopp();
  document.getElementById('place_comm'+id).innerHTML+='<div id="poppDiv" class="inline-warning"><div><p><a href="/register/">Присоединяйтесь</a> к SMI2, чтобы '+text+'. Если у вас уже есть аккаунт, авторизуйтесь.</p><a href="javascript:unpopp()"><img src="http://smi2.ru/img/close.gif" class="close" border=0 width="22" height="22" alt="Close" /></a></div></div>';
  return(false);
}

function newHttpRequest(){
  var http_request;
  if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
  }
//  http_request.overrideMimeType('text/xml');
  return http_request;
}

function reply_to_comments(client_nick, reply_to, level, news_id, s1,s2,s3, otv,skr, home_domain)
{
/*document.getElementById('caption_comment').innerHTML='<b>Ответить на комментарий '+client_nick+':</b>(<a class="middle19" href="javascript:{}" onClick="reset_reply_to_comments(); return false;">Oтменить</a>)';
document.getElementById('reply_to').value=reply_to;
document.getElementById('level').value=level;*/
document.getElementById('response_form_'+reply_to).style.display = "block";
document.getElementById('response_form_'+reply_to).innerHTML= document.getElementById('response_form_'+reply_to).innerHTML +
'<span style="margin-right:222px;">'+s1+'</span> '+s2+' <a href="http://" + home_domain + "/rules/">'+s3+'</a>.<br>'+
'<input type=hidden name=action value=save_comment>'+
'<textarea name="comment" id="comment_reply_'+reply_to+'"'+
'class=input-text cols=64 rows=5></textarea>'+
'<br><div align="center" style="margin:7px 0 7px 0;"><input type=submit value= "'+otv+'" class="input-text">'+
'&nbsp;<input type=submit value="'+skr+'" class="input-text"'+
'onClick="reset_reply_to_comments('+reply_to+');return false;"></div>'+
'<input type="hidden" name="action" value="save_comment">'+
'<input id="reply_to" name="reply_to" type="hidden" value="'+reply_to+'">'+
'<input id="news_id" name="news_id" type="hidden" value="'+news_id+'">'+
'<input id="level" name="level" type="hidden" value="'+level+'">';
$('#comment_reply_'+reply_to).smi2editor()
//loadFCKEditor('comment_reply_'+reply_to, '', 'smi2_panel', '640', '250');
document.getElementById('response_link_'+reply_to).style.display='none';
return false;
}
function reply_to_comments_partner(client_nick, reply_to, level, news_id, s1,otv,skr, home_domain)
{
/*document.getElementById('caption_comment').innerHTML='<b>Ответить на комментарий '+client_nick+':</b>(<a class="middle19" href="javascript:{}" onClick="reset_reply_to_comments(); return false;">Oтменить</a>)';
document.getElementById('reply_to').value=reply_to;
document.getElementById('level').value=level;*/
document.getElementById('response_form_'+reply_to).innerHTML=
'<span style="margin-right:222px;">'+s1+'</span> '+'<br>'+
'<input type=hidden name=action value=save_comment>'+
'<textarea name="comment" id="comment_reply_'+reply_to+'"'+
'class=input-text cols=64 rows=5></textarea>'+
'<br><div align="center" style="margin:7px 0 7px 0;"><input type=submit value= "'+otv+'" class="input-text">'+
'&nbsp;<input type=submit value="'+skr+'" class="input-text"'+
'onClick="reset_reply_to_comments('+reply_to+');return false;"></div>'+
'<input type="hidden" name="action" value="save_comment">'+
'<input id="reply_to" name="reply_to" type="hidden" value="'+reply_to+'">'+
'<input id="news_id" name="news_id" type="hidden" value="'+news_id+'">'+
'<input id="level" name="level" type="hidden" value="'+level+'">';
$('#comment_reply_'+reply_to).smi2editor()
//loadFCKEditor('comment_reply_'+reply_to, '', 'smi2_panel', '640', '250');
document.getElementById('response_link_'+reply_to).style.display='none';
return false;
}

function reset_reply_to_comments(reply_to)
{
/*document.getElementById('caption_comment').innerHTML='<b>Ваш комментарий:</b>';
document.getElementById('reply_to').value='0';
document.getElementById('level').value='0';*/
document.getElementById('response_form_'+reply_to).innerHTML='';
document.getElementById('response_link_'+reply_to).style.display='block';
return false;
}

function fsearchform()
{
if(document.getElementById("search").style.display=='none')
{
document.getElementById("search").style.display='';
document.getElementById("search1").style.display='';
document.getElementById("login1").style.display='none';
document.getElementById("login2").style.display='none';
document.getElementById("rasp_670").style.display='none';
}
else
{
document.getElementById("search").style.display='none';
document.getElementById("search1").style.display='none';
document.getElementById("login1").style.display='';
document.getElementById("login2").style.display='';
document.getElementById("rasp_670").style.display='';
}
return false;
}

function changeColor(num, hexcolor)
{
document.getElementById('hexcolor'+num).value=hexcolor;
var colors_example=document.getElementById('colors_example');
if(Number(num)==1)
{
colors_example.style.borderColor=hexcolor;
}
if(Number(num)==2)
{
colors_example.style.backgroundColor=hexcolor;
}
}

function setChecks(flag, block_name)
{
var form_checks=document.getElementById(block_name);

  for(var i=0; i<form_checks.elements.length; i++)
  {
    if (form_checks.elements[i].id.search('friendid')!=-1)
    {
      if (flag==1)
      {
          form_checks.elements[i].checked=true;
      }
      else
      {
          form_checks.elements[i].checked=false;
      }
    }
  }
}

function unsend_comments(user_id, news_id){
  var block = document.getElementById('unsend_comments');
     var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {

            if(resp=='ok')
            {
                    alert('Извещение по email о новых комментариях успешно отключено.');
                block.innerHTML = '';
            }
            else
            {
            alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
            }

            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };
  var request = '/process/?action=unsend_comments&news_id='+news_id+'&user_id='+user_id;
    //alert(request);
    req.open('GET', request, true);
    req.send(null);
}

function setNewsCommentsNotification(user_id, news_id, val){
    if(val){
        val=1;
    }else{
        val=0;
    }
    jQuery.get("/process/?action=setNewsCommentsNotification&news_id="+news_id+"&user_id="+user_id+"&val="+val);
}

function mess_spam(mess_id){
     var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
                //alert(resp);
            if(resp=='ok')
            {
                    alert('Ваш сигнал учтен. Спасибо!');
        window.location.href=window.location.href;
            }
            else
            {
            alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
            }

            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };
  var request = '/process/?action=mess_spam&mess_id='+mess_id;
    //alert(request);
    req.open('GET', request, true);
    req.send(null);
}


function comm_spam(comm_id)
{
     var req = newHttpRequest();
     req.onreadystatechange = function(){
        if (req.readyState == 4) {
         var resp = req.responseText;
            if (req.status == 200) {
                //alert(resp);
            if(resp=='ok')
            {
                    alert('Ваш сигнал учтен. Спасибо!');
            //window.location.href=window.location.href;
            }
            else
            {
            alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
            }

            } else {
                  alert('There was a problem with the request.');
            }
          } else {
          }
     };
  var request = '/process/?action=comm_spam&comm_id='+comm_id;
    //alert(request);
    req.open('GET', request, true);
    req.send(null);
}

function number_format(number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

// связи пользователя (4 функции)

function addToFriends(st, generator_id, user_name, myid) /*myid - для свежезарегенного через социалку (у него он в пуле еще не записан)*/
{
    var url = '/process/?action=setUserRelation&st=' + st + '&user_id=' + generator_id + '&my_id=' + myid;
    var a = $('[class^=tofriends-][data-generator-id=' + generator_id + ']');

    if (a.length && st == 'default_user' && !confirm(sure_delete_friend1 + ' ' + user_name + ' ' + sure_delete_friend2 + '?')) {
        return false;
    }

    $.get(url, function(data) {
        if (!a.length) {
            return;
        }
        var c;
        if (st == 'default_user') {
            //a.data('st', 'friend').attr('data-st', 'friend').html(read_him);
            var t = $('.tofriends-'+generator_id).closest('div[id^="notification-"]'); 
            if (t.length>0) {
               t.slideUp(500);
            } else {             
                $(".is_friend-"+generator_id+", .remove_friend-"+generator_id).hide();
                $(".is_not_friend-"+generator_id).show();
                if ($(".count_is_read_by_" + generator_id).length>0) {
                    c = parseInt($(".count_is_read_by_" + generator_id).html().replace(/[^\d]/g, ''))-1;
                    $(".count_is_read_by_" + generator_id).html(number_format(c, 0, ',', ' '));
                }
            }
        } else if (st == 'friend') {
            //a.data('st', 'default_user').attr('data-st', 'default_user').html(not_read_him);
            $(".is_not_friend-"+generator_id).hide();
            $(".is_friend-"+generator_id).show();
            if ($(".count_is_read_by_" + generator_id).length>0) {
                c = parseInt($(".count_is_read_by_" + generator_id).html().replace(/[^\d]/g, ''))+1;
                $(".count_is_read_by_" + generator_id).html(number_format(c, 0, ',', ' '));       
            }
        }
      
    });        
    return false;
}

function addToNotOffer(st, user_id)
{
    var url = '/process/?action=setUserRelation&st='+st+'&user_id='+user_id;
    $.get(url, function(data){
        //alert('Пользователь исключен из списка предложений');
    });
    return false;
}

function addToBlack(st, user_id)
{
    var url = '/process/?action=setUserRelation&user_id='+user_id+'&st='+ st;
    var bl=$("#blacklist_"+user_id);
    $.get(url, function(data){
        if(data=='ok' && bl){
            if (st=='blacklist'){
                bl.html('<a href="javascript:{}" onClick="return addToBlack(\'default_user\', \''+user_id+'\');" title="'+activate_user+'.">'+activate_user+'</a>');
            }else if(st=='default_user'){
                bl.html('<a href="javascript:{}" onClick="return addToBlack(\'blacklist\', \''+user_id+'\');" title="'+deny_communicate+'.">'+ignore_user+'</a>');
            }
        }

    });
    return false;
}

function watchUserNews(st, user_id, li){
    var url='/process/?action=setUserRelation&user_id='+user_id+'&st='+st;
    $.get(url,function(data){
        if(data=='ok'){
            //если бы был только один на странице то можно было бы через this. А так через класс.
            if(li){
                var cl=$(li).attr('class');
                $('.watchnews-select-'+user_id+' li').css('background', 'none');
                $('.watchnews-select-'+user_id+' li.'+cl).css('background', 'url(\'/img/check_blue_12x12.png\') no-repeat left center');
            }else{
                alert('Статус пользователя изменен.');
            }
        }
    });
    return;
}

function setpartnerinsmi2(partner_id, to_status){
var req = newHttpRequest();
req.onreadystatechange = function()
{
    if (req.readyState == 4)
    {
        var resp = req.responseText;
        if (req.status == 200)
        {
            if(resp=='ok')
            {
                alert('Статус успешно изменен.')
            } else {
                alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
            }

        } else {
           alert('There was a problem with the request.');
        }
    }
};
  var request = '/process/?action=setpartnerinsmi2&partner_id='+partner_id+'&status='+to_status;
    req.open('GET', request, true);
    req.send(null);
}

function settemplateeditorinsmi2(partner_id){
var req = newHttpRequest();
  elem=document.getElementById('edit_selector_'+partner_id).value;
  to_status = elem;
//, this.options[this.selectedIndex].value

req.onreadystatechange = function()
{
    if (req.readyState == 4)
    {
      var resp = req.responseText;
         if (req.status == 200)
         {
          if(resp=='ok')
          {
        //var cb = document.getElementById('edit_template_'+partner_id);
        /*if (status==1){
          cb.value=1;
        }else if(status==0){
          cb.value=0;
        }*/
        elem=to_status;
        alert('Статус успешно изменен.')
            }
          else
          {
          alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
          }

         }
         else
         {
              alert('There was a problem with the request.');
         }
      }
};
  var request = '/process/?action=settemplateeditorinsmi2&partner_id='+partner_id+'&status='+to_status;
    req.open('GET', request, true);
    req.send(null);
}

function ed2main(partner_id, news_id){
var req = newHttpRequest();
var to_value=document.getElementById('editor_odob_'+news_id).value;
req.onreadystatechange = function()
{
    if (req.readyState == 4)
    {
      var resp = req.responseText;
         if (req.status == 200)
         {
              if(resp=='ok')
              {
                  alert('Статус успешно изменен.')
                  window.location.href=window.location.href;
                }
              else
              {
                  alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
              }
        }
         else
         {
              alert('There was a problem with the request.');
         }
      }
};
var request = '/process/?action=ed2main&partner_id='+partner_id+'&news_id='+news_id+'&to_value='+to_value;
req.open('GET', request, true);
req.send(null);
}


function floginform()
{
    if(document.getElementById("loginform").style.display=='none')
    {
        document.getElementById("loginform").style.display='block';
    }
    else
    {
        document.getElementById("loginform").style.display='none';
    }
    return false;
}

function toggle_block(block_id)
{
    if(document.getElementById(block_id).style.display=='none')
    {
        document.getElementById(block_id).style.display='block';
    }
    else
    {
        document.getElementById(block_id).style.display='none';
    }
    return false;
}

var markitupSettings = {
        onShiftEnter:   {keepDefault:false, replaceWith:'<br />\n'},
        onCtrlEnter:    {keepDefault:false, openWith:'\n<p>', closeWith:'</p>'},
        onTab:                  {keepDefault:false, replaceWith:'    '},
        resizeHandle: false,
        previewInWindow: 'width=600, height=400, resizable=yes, scrollbars=yes',
        markupSet:  [
                {name:'Bold', key:'B', openWith:'(!(<strong>|!|<b>)!)', closeWith:'(!(</strong>|!|</b>)!)' },
                {name:'Italic', key:'I', openWith:'(!(<em>|!|<i>)!)', closeWith:'(!(</em>|!|</i>)!)'  },
                {name:'Stroke through', key:'S', openWith:'<del>', closeWith:'</del>' },
                {name:'Picture', key:'P', replaceWith:'<img src="[![Source:!:http://]!]" alt="[![Alternative text]!]" />' },
                {name:'Link', key:'L', openWith:'<a href="[![Link:!:http://]!]"(!( title="[![Title]!]")!)>', closeWith:'</a>', placeHolder:'Your text to link...' },
                {name:'Clean', className:'clean', replaceWith:function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") } },
                {name:'Preview', className:'preview',  call:'preview'}
        ]
}

function toggleComment(id,link_id) {
    var l = link_id;
    jQuery.get("/process/?action=comm_toggle_vis&id="+id,null,function(){toggleLink(l)});
}

function enlistBattleComment(id) {

  var comment_id = id;
  var c = $('#'+comment_id);
  var level = parseInt(c.attr('level'));
  var tr = c.parent().parent();
  var descendants = new Array();

  do {
    descendants.push(tr);
    tr = tr.next();
  } while (tr.size() > 0 && parseInt(tr.attr('level')) > level);

  jQuery.get(
    "/process/?action=comm_enlist_battle&id="+id,
    null,
    function(){
      $.each(descendants, function(){
        var old = this;
        old.children().hide('slow')
      });
      //$('#'+comment_id).hide();
    }
  );
}

/*делает коммент на главной странице и добавляет к экспертам не убирая из общего потока*/
function setMainComment(id) {
  jQuery.get(
    "/process/?action=setMainComment&id="+id,
    null,
    function(){
      alert('Теперь мнение показывается на главной странице под анонсом новости и в комментариях экспертов');
      $('#set-maincomment-'+id).hide();
      $('#del-maincomment-'+id).show();
    }
  );
}


function banPreCommentBan(comm_id){
    $('#etalon_bancomment').attr('href', '/bancomment/?width=550&height=450&comm_id='+comm_id);
    $("#etalon_bancomment").trigger('click');
}

function delMainComment(id) {
  jQuery.get(
    "/process/?action=delMainComment&id="+id,
    null,
    function(){
      alert('Мнение больше не показывается в комментариях экспертов');
      $('#del-maincomment-'+id).hide();
      $('#set-maincomment-'+id).show();
    }
  );
}

function delExpertComment(id) {
  jQuery.get(
    "/process/?action=delExpertComment&id="+id,
    null,
    function(){
      alert('Мнение больше не показывается в комментариях экспертов');
    }
  );
}

function makeSpecialComment(id) {
  jQuery.get(
    "/process/?action=comm_make_special&id="+id,
    null,
    function(){
      alert('Теперь мнение показывается на главной странице под анонсом новости');
      $('#special-comment-trigger-make-'+id).hide();
      $('#special-comment-trigger-unmake-'+id).show();
    }
  );
}

function unmakeSpecialComment(id) {
  jQuery.get(
    "/process/?action=comm_unmake_special&id="+id,
    null,
    function(){
      alert('Мнение больше не показывается на главной странице под анонсом новости');
      $('#special-comment-trigger-unmake-'+id).hide();
      $('#special-comment-trigger-make-'+id).show();
    }
  );
}

function toggleLink(link_id) {
    var l1 = jQuery('#'+link_id+"_0");
    var l2 = jQuery('#'+link_id+"_1");
    if (l1.hasClass('hidden')) {
  l1.removeClass('hidden');
  l2.addClass('hidden');
    } else {
  l2.removeClass('hidden');
  l1.addClass('hidden');
    }
}

function binds_isonlyeditors(partner_id, bind_id, to_status){
  var req = newHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
          var resp = req.responseText;
             if (req.status == 200)
             {
                  if(resp=='ok')
                  {
                      alert('Статус успешно изменен.')
                    }
                  else
                  {
                      alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
                  }
            }
             else
             {
                  alert('There was a problem with the request.');
             }
          }
    };
    var request = '/process/?action=binds_isonlyeditors&partner_id='+partner_id+'&bind_id='+bind_id+'&to_status='+to_status;
    req.open('GET', request, true);
    req.send(null);
}

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

/**
 *
 * @access public
 * @return void
 * поставить редакторское одобрение для новости. действует пока только в партнерах
 * уникально для каждого партнера
 **/
function partner_edweight(newsid){
  var req = newHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
          var resp = req.responseText;
             if (req.status == 200)
             {
                  if(resp=='ok')
                  {
                      window.location.href=window.location.href;
                    }
                  else
                  {
                      alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
                  }
            }
             else
             {
                  alert('There was a problem with the request.');
             }
          }
    };

     var value=document.getElementById('partner_edweight_'+newsid).value;

    if (isNaN(value)==true || value<0)
    {
    alert ('Введите число большее 0.');
    return false;
    }


    var request = '/process/?action=partner_edweight&news_id='+newsid+'&value='+value;

    //alert(request);

    req.open('GET', request, true);
    req.send(null);
}


function add_partners_link(news_id){
var req = newHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
            var resp = req.responseText;
            if (req.status == 200)
            {
                if(resp=='ok')
                {
                    alert('Новость добавлена в партнерки.');
                } else {
                    alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
                }

            } else {
                 alert('There was a problem with the request.');
            }
        }
    };

	var objSel = document.getElementById('newspartnersrel_sel_'+news_id);
    //document.getElementById('newspartnersrel_'+news_id).style.display='none';
    hidemenu('newspartnersrel_'+news_id);

	if(objSel.options[0].selected)
		partners = '0'
	else{
		partners = '';
		for (var i=0; i < objSel.options.length; i++)
			if (objSel.options[i].selected) partners+=objSel.options[i].value+',';
	}
	var request = '/process/?action=setpartnernewslink&news='+news_id+'&partners='+partners;
    req.open('GET', request, true);
    req.send(null);
}

/**
 *
 * @access public
 * @return void
 **/
function chngSrcWeight(src, weight){
    if(weight>1 || weight<=0 || isNaN(parseFloat(weight)))
    {
        alert('Введите число от 0.1 до 1');
        return;
    }
    var req = newHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
            var resp = req.responseText;
            if (req.status == 200)
            {
                if(resp=='ok')
                {
                    alert('Вес источника успешно изменен.');
                } else {
                    alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
                }

            } else {
                 alert('There was a problem with the request.');
            }
        }
    };

	var request = '/process/?action=chngsrcweight&src='+src+'&weight='+weight;
    //alert(request);
    req.open('GET', request, true);
    req.send(null);
}

/**
 *
 * @access public
 * @return void
 **/
function loadFCKEditor(text_form, config_file, panel_name, width, height){
        if(config_file==''){
        config_file='fckconfig_07122009.js';
        }
        var sBasePath = '/lib/fckeditor262/';
        var oFCKeditor_comm = new FCKeditor(text_form) ;
        oFCKeditor_comm.BasePath	= sBasePath ;
        oFCKeditor_comm.Config['CustomConfigurationsPath'] = sBasePath + config_file;
        if(width!=''){
        oFCKeditor_comm.Width			= width;
        }
        if(height!=''){
        oFCKeditor_comm.Height			= height;
        }
        oFCKeditor_comm.ToolbarSet = panel_name;
        /*if(document.getElementById(text_form)){
            document.getElementById(text_form).style.display="none";
        }else if(document.getElementsByName(text_form)){
            var array_elem=document.getElementsByName(text_form);
            if(array_elem[0]){
                array_elem[0].style.display='none';
            }
        }
        oFCKeditor_comm.Create();*/
        oFCKeditor_comm.ReplaceTextarea() ;
}

function addFriendsForm(friendform, invite_count){
	var form = $('#'+friendform);
	form.append('E-mail друга:&nbsp;&nbsp;&nbsp;&nbsp;'+
	'<input name="email['+invite_count+']" type="text" class="input-text" value="" size="60"><br>');
}

function setPossiblePublicCreative(value, uid, is_refresh){
  var req = newHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
          var resp = req.responseText;
             if (req.status == 200)
             {
                  if(resp=='ok')
                  {
                      if(is_refresh==1){
                          window.location.href=window.location.href;
                      }else{
                      alert("Статус успешно изменен.");
                      }
                    }
                  else
                  {
                      alert('Ошибка базы данных. Попробуйте выполнить действие позже.')
                  }
            }
             else
             {
                  alert('There was a problem with the request.');
             }
          }
    };


    var request = '/process/?action=set_possible_public_creative&user_id='+uid+'&value='+value;

    //alert(request);

    req.open('GET', request, true);
    req.send(null);
}

function onOdobSuccess(data){
    $("#odob").html( data );
}
function onSpamSuccess(data){
    $("#spam").html( data );
}


function show_users( type, news_id) {
    $("#"+type).html(loading);
//    alert( type+news_id );
    $.get("/process/",
        {
            action: 'getUserList',
            type: type,
            news_id:  news_id
        },
        type=='odob'?onOdobSuccess:onSpamSuccess);

    return false;
}

function setBookmark(id, status) {
	$.get("/process/?action=setBookmark",{news_id:id,status:status},function(resp){
        if 	(resp=='OK') {
            if(status=='set'){
                $('#setBookmark'+id).hide();
                $('#delBookmark'+id).show();
            }else{
                $('#setBookmark'+id).show();
                $('#delBookmark'+id).hide();
            }
		} else {
			alert(resp);
		}
	})
}

/*вызывать по MouseDown иначе в IE глюк*/
var simpletips=new Array;
function popupUserMenu(uid, elem, styleclass, ip){
    //ip может не быть передан
    ip=ip || '';
    if(simpletips[elem]==undefined){
        jQuery(elem).simpletip({persistent: true,
            content: loading+'...',
            position: 'bottom',
            baseClass: styleclass,
            onBeforeShow: function(){
                 var data = jQuery.ajax({
                  url: "/process/?action=popupUserMenu&uid="+uid+"&ip="+ip,
                  async: false
                 }).responseText;

                 var api=jQuery(elem).simpletip();
                 api.update(data);

                 /*jQuery.get("/process/?action=popupUserMenu&uid="+uid, function(data){})*/

                 //this.load("/process/?action=popupUserMenu&uid="+uid);
            }
            });
        simpletips[elem]=1;
        //var api=jQuery(elem).simpletip();
        //api.show();
    }
}

function popupSourceMenu(source, elem, styleclass){
    if(simpletips[elem]==undefined){
        jQuery(elem).simpletip({persistent: true,
            content: loading+'...',
            position: 'bottom',
            baseClass: styleclass,
            onBeforeShow: function(){
                 var data = jQuery.ajax({
                  url: "/process/?action=popupSourceMenu&source="+source,
                  async: false
                 }).responseText;
                 var api=jQuery(elem).simpletip();
                 api.update(data);

            }
            });
        simpletips[elem]=1;
    }
}

function banSource(source, tostatus){
    var data = jQuery.ajax({
    url: "/process/?action=banSource&source="+source+"&tostatus="+tostatus,
    async: false
    }).responseText;
    if(data=='ok'){
        alert('Статус успешно изменен');
    }else{
        alert('Ошибка при выполнении запроса');
    }
}

function addNewsToAdsCmp(val){
    $.get('/traffic/?traff_action=traffic_add&news_id='+val, function(data){
       if(data=='ok'){
           alert('Новость добавлена в рекламные компании. Перейдите на страницу рекламных компаний для завершения настроек.');
       }else{
           alert(data);
       }
       //document.location.reload();
       return;
     });
}

//show arch links block
function salb(val){
    $('#arch_links_main').hide();
    $('.alns').hide();
    $('#aln'+val).show();
}

/*user wall*/
function sendWallMessage(){
    if(!$('#block_user_wall_send_mess_text').val()){
        alert('Введите текст сообщения');
        return;
    }
    $('#block_user_wall_send_mess').hide();
    $('#block_user_wall_send_mess_process').show();
    var form_data = $('#block_user_wall_send_mess_form').serialize();
    $.ajax({
        type: "POST",
        url: "/wall/",
        async: false,
        data: form_data,
        success: function(msg){
            if(msg){
                alert(msg);
            }else{
                $('#block_user_wall_send_mess_text').val('');
            }
            $('#block_user_wall_send_mess').show();
            $('#block_user_wall_send_mess_process').hide();
            return false;
        }
    });
    return false;

}

function sendCompactWallMessage(){
    if(!$('#compact_block_user_wall_send_mess_text').val()){
        alert('Введите текст сообщения');
        return;
    }
    $('#compact_block_user_wall_send_mess').hide();
    $('#compact_block_user_wall_send_mess_process').show();
    var form_data = $('#compact_block_user_wall_send_mess_form').serialize();
    $.ajax({
        type: "POST",
        url: "/wall/",
        async: false,
        data: form_data,
        success: function(msg){
            if(msg){
                alert(msg);
            }else{
                $('#block_user_wall_send_mess_text').val('');
            }
            $('#compact_block_user_wall_send_mess').show();
            $('#compact_block_user_wall_send_mess_process').hide();
            alert('Сообщение отправлено');
            return false;
        }
    });
    return false;
}

function editWallMessage(){
    var form_data = $('#edit_wall_mess_form').serialize();
    $.ajax({
        type: "POST",
        url: "/wall/",
        async: false,
        data: form_data,
        success: function(msg){
            if(msg){
                alert(msg);
            }else{
                tb_remove();
                refreshPage();
            }
        }
    });
    return false;
}

function delWallMessage(mess_id){
    if (!confirm('Удалить сообщение?')){return 0;}
    var url="/wall/?wall_action=delWallMessage&id="+mess_id;
    $.get(url, function(data){
        if(data){
            alert(data);
        }else{
            refreshPage();
        }
    });
    return false;
}

function delGalleryItem(image_id, redirect_url){
    if (!confirm('Удалить фотографию?')) {
        return 0;
    }

    var url='/galleries/?action=gallery_delete&image_id='+image_id;
    $.get(url,function(){
        if(redirect_url){
            window.location.href = redirect_url;
        }else{
            refreshPage();
        }
    });
}

if (typeof ajaxNewsLoader == 'undefined') {
    var ajaxNewsLoader = {};
}

if (typeof ajaxNewsPager == 'undefined') {
    var ajaxNewsPager = {};
}

ajaxNewsPager.init= function(selector, load_next, loading_next, no_more, items_in_page){
    ajaxNewsPager.selector = selector;
    ajaxNewsPager.load_next = load_next;
    ajaxNewsPager.loading_next = loading_next;
    ajaxNewsPager.no_more = no_more;
    ajaxNewsPager.items_in_page = items_in_page;
    return true;
}

ajaxNewsPager.showLoadingNext = function(){
    $(ajaxNewsPager.selector).html('<img src="http://smi2.ru/img/ad-campaigns/loading.gif" alt=""/ style="margin-right:7px;">' + ajaxNewsPager.loading_next + '...');
    return true;
}

ajaxNewsPager.showNoMore = function(){
    $(ajaxNewsPager.selector).text(ajaxNewsPager.no_more);
    return true;
}

ajaxNewsPager.showLoadNext = function(){
    $(ajaxNewsPager.selector).html('<a href="#load-more" onclick="ajaxNewsPager.loadNext(); return false;">' + ajaxNewsPager.load_next + '...</a>');
    return true;
}

ajaxNewsPager.loadNext = function(){
    ajaxNewsLoader.reqcount = parseInt(ajaxNewsLoader.reqcount) + parseInt(ajaxNewsPager.items_in_page);
    ajaxNewsLoader.loadReqursive();
    return true;
}

ajaxNewsLoader.init = function(newslist, reqcount, url){
    var ajaxnewsloader_id = 'ajaxNewsLoader'
    ajaxNewsLoader.period = 2;
    ajaxNewsLoader.reqcount = reqcount;
    ajaxNewsLoader.news_id = 0;
    ajaxNewsLoader.maxperiod = 5000;
    ajaxNewsLoader.newslist = newslist;
    ajaxNewsLoader.url = url?url:'';
    ajaxNewsLoader.load();
    return true;
}

ajaxNewsLoader.load = function(){
    ajaxNewsLoader.loadReqursive();
    return true;
}

ajaxNewsLoader.loadReqursive = function(){
    //id последней загруженной новости
    ajaxNewsLoader.news_id = ajaxNewsLoader.getLastNewsId(ajaxNewsLoader.newslist);
    //новостей на странице есть
    var news_count = $(ajaxNewsLoader.newslist).find('.nl-item').length;
    //сколько нужно догрузить
    var news_request = ajaxNewsLoader.reqcount - news_count;

    if(news_request<1){
        //все загружено и возможно есть еще
        ajaxNewsPager.showLoadNext();
        return true;
    }

    //больше ничего нет
    if(ajaxNewsLoader.period>ajaxNewsLoader.maxperiod){
        ajaxNewsPager.showNoMore();
        return true;
    }

    //показать процесс загурзки
    ajaxNewsPager.showLoadingNext();
    var url = '';
    if(ajaxNewsLoader.url){
        url = ajaxNewsLoader.url;
    }else{
        url = document.location.href;
    }
    url = url.split('#');
    url=url[0];
    if(url.indexOf('?')==-1){
        url=url+'?'
    }
    url = url+"&newsloader=1&ajaxnewsloader_period="+ajaxNewsLoader.period+"&ajaxnewsloader_news_id="+ajaxNewsLoader.news_id;
    $.ajax({
        type: "POST",
        dataType:"json",
        url: url,
        async: true,
        data: '',
        success: function(rdata){
            var html = rdata.html;
            var em_items = $(document.createElement('div')).html(html).find('.nl-item');
            $(em_items).each(function (i) {
                news_id = ajaxNewsLoader.getNewsId(this);
                if(news_request>0 && $(ajaxNewsLoader.newslist).find('#lay_show_'+news_id).length==0){
                    $(this).appendTo($(ajaxNewsLoader.newslist)).show('slow');
                    //нарисовать кружочек
                    voteobj.drawCircle($(this).find('.nlvb-num'), parseInt($(this).find('.num').html(), 10));
                    news_request--;
                }
            });
            ajaxNewsLoader.period=parseInt(ajaxNewsLoader.period)*2;
            ajaxNewsLoader.loadReqursive();
            return true;
        }
    });
}

ajaxNewsLoader.getLastNewsId = function(newslist){
    var news_item = $(newslist).find('.nl-item:last');
    var last_news_id = false;
    if($(news_item).length>0){
        var rs = $(news_item).attr('id').toString().match(/lay_show_([0-9]+)/i);
        last_news_id = parseInt(rs[1]);
    }
    return last_news_id;
}

ajaxNewsLoader.getNewsId = function(item){
    var rs = $(item).attr('id').toString().match(/lay_show_([0-9]+)/i);
    return parseInt(rs[1]);
}

initAjaxPager = function(selector, show_more, load_next, no_more) {
    $('#pager').addClass('ajax').html('<a href="#load-more" onclick="loadListPage(\'' + selector + '\', \'' + load_next + '\', \'' + no_more + '\', \'' + show_more + '\'); return false">' + show_more + '...</a>');
}

loadListPage = function(selector, load_next, no_more, show_more) {
  var lastPage = $('.list-page:last');
  var count = lastPage.find(selector).size();
  listPageOffset = parseInt(count) + parseInt(listPageOffset);
  lastPage.after('<div class="list-page"></div>');

  $('#pager').html('<i><img src="http://smi2.ru/img/ad-campaigns/loading.gif" width="16" /><span>' + load_next + '...</span></i>');
  var cd = false;
  var baseURL = '';
  if (cd = getQueryVariable('calendar_date')) {
    baseURL = './?calendar_date=' + cd + '&';
  } else if (cd = getQueryVariable('tag')) {
    baseURL = './?tag=' + cd + '&';
  } else if (cd = getQueryVariable('s_tag')) {
    baseURL = './?s_tag=' + cd + '&';
  } else if (cd = getQueryVariable('source')) {
    baseURL = './?source=' + cd + '&';
  } else if (cd = getQueryVariable('a')) {
        if(cd=='viewCommunity'){
            id= getQueryVariable('id')
            baseURL = './?a=viewCommunity&id=' + id + '&';
        }
  } else {
    baseURL = './?';
  }
  $('.list-page:last').load(baseURL + 'of=' + listPageOffset + '&naked=1', function() {
    if ($('.list-page:last').find(selector).length == 0) {
        $('#pager').html('<i>' + no_more + '.</i>');
    } else {
        $('.list-page:last').find('.nlvb-num').each(function() {
            var num = parseInt($(this).find('.num').html(), 10);
            voteobj.drawCircle(this, num);
        })
        $('#pager').html('<a href="#load-more" onclick="loadListPage(\'' + selector + '\', \'' + load_next + '\', \'' + no_more + '\', \'' + show_more +'\'); return false">' + show_more + '...</a>');
    }

  });
}

getQueryVariable = function(v) {
  var query = window.location.search.substring(1);
  var vars = query.split('&');
  for (var i=0; i<vars.length; i++) {
    var pair = vars[i].split('=');
    if (pair[0] == v) {
      return pair[1];
    }
  }
  return false;
}

function sendCommentForm(em) {
    var data= $(em).closest('form').serialize();
    $.ajax({
        type: "POST",
        dataType:"json",
        url: "/process/",
        async: false,
        data: data,
        success: function(rdata){
            //refreshPage();
            if(rdata.result==1){
                //редактировал или новый добавил
                $('form[id^=comment-form]').hide();
                $('.comm-add').show();
                var comm_id = rdata.comm_id;
                var comm_text = rdata.text;
                //редактировал
                var em = $('.comments-ordinary ').find('#'+comm_id);
                var parser = new Parse.Simple.Creole({forIE: document.all})
                if($(em).length > 0){
                    var ca = $(em).find('.comment-text .comment-author');
                    $(em).find('.comment-text').html('').append(ca).append(comm_text);
                //ставил новый
                }else{
                    tpl_comm = tmpl('comment_body_v3');
                    var html = tpl_comm(rdata);
                    if(rdata.reply_to){
                        length = $('#'+rdata.reply_to).nextAll('.comment-item').length;
                        if(length==0){
                            //первый коммент далее
                            $('.comments-ordinary').append(html);
                        }else{
                            //нашел коммент уровня выше
                            var is_add=false;
                            $('#'+rdata.reply_to).nextAll('.comment-item').each(function (i) {
                                if(parseInt($(this).find('input[name=level]').val())<parseInt(rdata.comm_level) && !is_add){
                                    is_add=true;
                                    $(this).before(html);
                                }
                            });
                            //не нашел коммент уровня выше
                            if(!is_add){
                                $('.comments-ordinary').append(html);
                            }
                        }
                    }else{
                        if($('.comments-ordinary .comment-item').length>0){
                            $('.comments-ordinary .comment-item:last').after(html);
                        }else{
                            $('.comments-ordinary').append(html);
                        }

                    }
                    if(!rdata.is_reply){
                        $('.reply'+comm_id).parent().remove();
                    }
                    anchorScroller(rdata.comm_id, 20);
                }
                var counthtml = $('#comments_count').html();
                var temp = counthtml.match(/(\d{1,5})/);
                var count = parseInt(temp[0])+1;
                $('#comments_count').html(count);
                if (count>5 && $("#additional_block").css('display', 'none')) {
                    $("#additional_block").show();
                }
            }else{
                alert('Ошибка при сохранении комментария.');
            }
        }
    });
}

function showReplyForm(reply_to) {
    reply_to=parseInt(reply_to);
    var em = $('#comment-form1').detach();
    $(em).find('input[name=comm_id]').val(0);
    $(em).find('input[name=reply_to]').val(reply_to);
    $(em).find('input[name=level]').val(parseInt($(em).find('input[name=level]').val())+1);
    $(em).find('.smi2editortext').val('');
    $(em).insertAfter('#'+reply_to).show();
    $('#comments .comm-add').show();
}

function showEditForm(comm_id) {
    comm_id=parseInt(comm_id);
    var parser = new Parse.Simple.Creole({forIE: document.all})
    var comment_text = $('#'+comm_id).find('.comment-text').clone();
    $(comment_text).find('.comment-author').remove();
    var text= $(comment_text).html();
    var em = $('#comment-form1').detach();
    $(em).find('input[name=comm_id]').val(comm_id);
    $(em).find('input[name=reply_to]').val(0);
    $(em).find('input[name=level]').val(0);
    $(em).find('.smi2editortext').val(parser.importHTML(text));
    $(em).insertAfter('#'+comm_id).show();
    $('#comments .comm-add').show();
    $('.actions').hide();
}

function showCommentForm(num) {
    var em = $('#comment-form'+num).detach();
    $(em).find('input[name=comm_id]').val(0);
    $(em).find('input[name=reply_to]').val(0);
    $(em).find('input[name=level]').val(0);
    $(em).find('.smi2editortext').val('');
    $(em).appendTo('#comments div#comment-form-div'+num).show();
    $('#comments #comm-add'+num).hide();
}

function v3commvote(comm_id, attitude, em) {
    var parent=$(em).closest('.nl-vote_block');
    if ($(em).hasClass('vote_plus_icon_na') || $(em).hasClass('vote_minus_icon_na')) {
        return false;
    }
    if (attitude == 'p') {
        $(em).addClass('vote_plus_icon_na');
        $(parent).find('.vote_minus_icon').removeClass('vote_minus_icon_na');
    } else {
        $(em).addClass('vote_minus_icon_na');
        $(parent).find('.vote_plus_icon').removeClass('vote_plus_icon_na');
    }
    $.getJSON('/process/?action=vote_comment&id=' + comm_id + '&attitude=' + attitude, function(data) {
        if(data.status=='ok'){
            $(parent).find('.num_rating').text(data.rating);
        }
    });
    return true;
}

function anchorScroller(address, duration) {
if (this.criticalSection) {
return false;
}

for (var i=0; i<document.anchors.length; i++) {
if (document.anchors[i].name == address) {
el = document.anchors[i];
break;
}
}
if (el === 0)
return true;

this.stopX = 0;
this.stopY = 0;
do {
this.stopX += el.offsetLeft;
this.stopY += el.offsetTop;
} while (el = el.offsetParent);

this.startX = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;
this.startY = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

this. stopX = this.stopX - this.startX;
this.stopY = this.stopY - this.startY;

if ( (this.stopX == 0) && (this.stopY == 0) )
return false;

this.criticalSection = true;
if (typeof duration == 'undefined')
this.duration = 500;
else
this.duration = duration;

var date = new Date();
this.start = date.getTime();
this.timer = setInterval(function () {
var date = new Date();
var X = (date.getTime() - this.start) / this.duration;
if (X > 1)
X = 1;
var Y = ((-Math.cos(X*Math.PI)/2) + 0.5);

cX = Math.round(this.startX + this.stopX*Y);
cY = Math.round(this.startY + this.stopY*Y);

document.documentElement.scrollLeft = cX;
document.documentElement.scrollTop = cY;
document.body.scrollLeft = cX;
document.body.scrollTop = cY;

if (X == 1) {
clearInterval( this.timer);
this.criticalSection = false;
}
}, 10);
return false;
}

function getCookie(c_name)
{
	var i,x,y,ARRcookies=document.cookie.split(";");
	for (i=0;i<ARRcookies.length;i++)
	{
		x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
		y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
		x=x.replace(/^\s+|\s+$/g,"");
		if (x==c_name)
		{
			return unescape(y);
		}
	}
	return null;
}

function setCookie(c_name,value,exdays, path)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate() + exdays);
	var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
	document.cookie=c_name + "=" + c_value + "; path=/";
};/*
  SortTable
  version 2
  7th April 2007
  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
  
  Instructions:
  Download this file
  Add <script src="sorttable.js"></script> to your HTML
  Add class="sortable" to any table you'd like to make sortable
  Click on the headers to sort
  
  Thanks to many, many people for contributions and suggestions.
  Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
  This basically means: do what you want with it.
  
  buzzer patch for sticky rows.
*/

 
var stIsIE = /*@cc_on!@*/false;

sorttable = {
  init: function() {
    // quit if this function has already been called
    if (arguments.callee.done) return;
    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;
    // kill the timer
    if (_timer) clearInterval(_timer);
    
    if (!document.createElement || !document.getElementsByTagName) return;
    
    sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
    
    forEach(document.getElementsByTagName('table'), function(table) {
      if (table.className.search(/\bsortable\b/) != -1) {
        sorttable.makeSortable(table);
      }
    });
    
  },
  
  makeSortable: function(table) {
    if (table.getElementsByTagName('thead').length == 0) {
      // table doesn't have a tHead. Since it should have, create one and
      // put the first table row in it.
      the = document.createElement('thead');
      the.appendChild(table.rows[0]);
      table.insertBefore(the,table.firstChild);
    }
    // Safari doesn't support table.tHead, sigh
    if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
    
    if (table.tHead.rows.length != 1) return; // can't cope with two header rows
    
    // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
    // "total" rows, for example). This is B&R, since what you're supposed
    // to do is put them in a tfoot. So, if there are sortbottom rows,
    // for backwards compatibility, move them to tfoot (creating it if needed).
    sortbottomrows = [];
    for (var i=0; i<table.rows.length; i++) {
      if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
        sortbottomrows[sortbottomrows.length] = table.rows[i];
      }
    }
    if (sortbottomrows) {
      if (table.tFoot == null) {
        // table doesn't have a tfoot. Create one.
        tfo = document.createElement('tfoot');
        table.appendChild(tfo);
      }
      for (var i=0; i<sortbottomrows.length; i++) {
        tfo.appendChild(sortbottomrows[i]);
      }
      delete sortbottomrows;
    }
    
    // work through each column and calculate its type
    headrow = table.tHead.rows[0].cells;
    for (var i=0; i<headrow.length; i++) {
      // manually override the type with a sorttable_type attribute
      if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
        mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
        if (mtch) { override = mtch[1]; }
	      if (mtch && typeof sorttable["sort_"+override] == 'function') {
	        headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
	      } else {
	        headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
	      }
	      // make it clickable to sort
	      headrow[i].sorttable_columnindex = i;
	      headrow[i].sorttable_tbody = table.tBodies[0];
	      dean_addEvent(headrow[i],"click", function(e) {
	      
          if (this.className.search(/\bsorttable_sorted\b/) != -1) {
            // if we're already sorted by this column, just 
            // reverse the table, which is quicker
            sorttable.reverse(this.sorttable_tbody);
            this.className = this.className.replace('sorttable_sorted',
                                                    'sorttable_sorted_reverse');
            this.removeChild(document.getElementById('sorttable_sortfwdind'));
            sortrevind = document.createElement('span');
            sortrevind.id = "sorttable_sortrevind";
            sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
            this.appendChild(sortrevind);
            return;
          }
          if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
            // if we're already sorted by this column in reverse, just 
            // re-reverse the table, which is quicker
            sorttable.reverse(this.sorttable_tbody);
            this.className = this.className.replace('sorttable_sorted_reverse',
                                                    'sorttable_sorted');
            this.removeChild(document.getElementById('sorttable_sortrevind'));
            sortfwdind = document.createElement('span');
            sortfwdind.id = "sorttable_sortfwdind";
            sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
            this.appendChild(sortfwdind);
            return;
          }
          
          // remove sorttable_sorted classes
          theadrow = this.parentNode;
          forEach(theadrow.childNodes, function(cell) {
            if (cell.nodeType == 1) { // an element
              cell.className = cell.className.replace('sorttable_sorted_reverse','');
              cell.className = cell.className.replace('sorttable_sorted','');
            }
          });
          sortfwdind = document.getElementById('sorttable_sortfwdind');
          if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
          sortrevind = document.getElementById('sorttable_sortrevind');
          if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
          
          this.className += ' sorttable_sorted';
          sortfwdind = document.createElement('span');
          sortfwdind.id = "sorttable_sortfwdind";
          sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
          this.appendChild(sortfwdind);

	        // build an array to sort. This is a Schwartzian transform thing,
	        // i.e., we "decorate" each row with the actual sort key,
	        // sort based on the sort keys, and then put the rows back in order
	        // which is a lot faster because you only do getInnerText once per row
	        row_array = [];
	        sticky_row_array = [];
	        col = this.sorttable_columnindex;
	        rows = this.sorttable_tbody.rows;
	        for (var j=0; j<rows.length; j++) {
	    	    if (rows[j].className.search(/\bsticky\b/) != -1) {
	    		sticky_row_array[sticky_row_array.length] = [j, rows[j]];
	    		}
	    	    else {
	        	row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
	    	    }	
	        }
	        
	        /* If you want a stable sort, uncomment the following line */
	        //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
	        /* and comment out this one */
	        row_array.sort(this.sorttable_sortfunction);
	        
	        tb = this.sorttable_tbody;
	        
	        for (var j=0,num=0; j<row_array.length; j++) {
	    	    if (num < sticky_row_array.length && sticky_row_array[num][0] == j+num) {
	    		tb.appendChild(sticky_row_array[num][1]);
	    		num++;
	    		j--; continue
	    	    } 
        	    tb.appendChild(row_array[j][1]);
	        }
	        
	        delete row_array;
	        delete sticky_row_array;
	      });
	    }
    }
  },
  
  guessType: function(table, column) {
    // guess the type of a column based on its first non-blank row
    sortfn = sorttable.sort_alpha;
    for (var i=0; i<table.tBodies[0].rows.length; i++) {
      text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
      if (text != '') {
        if (text.match(/^-?[�$�]?[\d,.]+%?$/)) {
          return sorttable.sort_numeric;
        }
        // check for a date: dd/mm/yyyy or dd/mm/yy 
        // can have / or . or - as separator
        // can be mm/dd as well
        possdate = text.match(sorttable.DATE_RE)
        if (possdate) {
          // looks like a date
          first = parseInt(possdate[1]);
          second = parseInt(possdate[2]);
          if (first > 12) {
            // definitely dd/mm
            return sorttable.sort_ddmm;
          } else if (second > 12) {
            return sorttable.sort_mmdd;
          } else {
            // looks like a date, but we can't tell which, so assume
            // that it's dd/mm (English imperialism!) and keep looking
            sortfn = sorttable.sort_ddmm;
          }
        }
      }
    }
    return sortfn;
  },
  
  getInnerText: function(node) {
    // gets the text we want to use for sorting for a cell.
    // strips leading and trailing whitespace.
    // this is *not* a generic getInnerText function; it's special to sorttable.
    // for example, you can override the cell text with a customkey attribute.
    // it also gets .value for <input> fields.
    
    hasInputs = (typeof node.getElementsByTagName == 'function') &&
                 node.getElementsByTagName('input').length;
    
    if (node.getAttribute("sorttable_customkey") != null) {
      return node.getAttribute("sorttable_customkey");
    }
    else if (typeof node.textContent != 'undefined' && !hasInputs) {
      return node.textContent.replace(/^\s+|\s+$/g, '');
    }
    else if (typeof node.innerText != 'undefined' && !hasInputs) {
      return node.innerText.replace(/^\s+|\s+$/g, '');
    }
    else if (typeof node.text != 'undefined' && !hasInputs) {
      return node.text.replace(/^\s+|\s+$/g, '');
    }
    else {
      switch (node.nodeType) {
        case 3:
          if (node.nodeName.toLowerCase() == 'input') {
            return node.value.replace(/^\s+|\s+$/g, '');
          }
        case 4:
          return node.nodeValue.replace(/^\s+|\s+$/g, '');
          break;
        case 1:
        case 11:
          var innerText = '';
          for (var i = 0; i < node.childNodes.length; i++) {
            innerText += sorttable.getInnerText(node.childNodes[i]);
          }
          return innerText.replace(/^\s+|\s+$/g, '');
          break;
        default:
          return '';
      }
    }
  },
  
  reverse: function(tbody) {
    // reverse the rows in a tbody
    newrows = [];
    sticky_row_array = [];
    for (var i=0; i<tbody.rows.length; i++) {
	if (tbody.rows[i].className.search(/\bsticky\b/) != -1) {
	    sticky_row_array[sticky_row_array.length] = [i, tbody.rows[i]];
	} else {
            newrows[newrows.length] = tbody.rows[i];
	}            
    }
    for (var i=newrows.length-1, num=0; i>=0; i--) {
		    var j = newrows.length-1 - i;
    	    	    if (num < sticky_row_array.length && sticky_row_array[num][0] == j+num) {
	    		tbody.appendChild(sticky_row_array[num][1]);
	    		num++;
	    		i++; continue
	    	    } 

       tbody.appendChild(newrows[i]);
    }
    delete newrows;
    delete sticky_row_array;
  },
  
  /* sort functions
     each sort function takes two parameters, a and b
     you are comparing a[0] and b[0] */
  sort_numeric: function(a,b) {
    aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
    if (isNaN(aa)) aa = 0;
    bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); 
    if (isNaN(bb)) bb = 0;
    return aa-bb;
  },
  sort_alpha: function(a,b) {
    if (a[0]==b[0]) return 0;
    if (a[0]<b[0]) return -1;
    return 1;
  },
  sort_ddmm: function(a,b) {
    mtch = a[0].match(sorttable.DATE_RE);
    y = mtch[3]; m = mtch[2]; d = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;
    mtch = b[0].match(sorttable.DATE_RE);
    y = mtch[3]; m = mtch[2]; d = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
  },
  sort_mmdd: function(a,b) {
    mtch = a[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;
    mtch = b[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
  },
  
  shaker_sort: function(list, comp_func) {
    // A stable sort function to allow multi-level sorting of data
    // see: http://en.wikipedia.org/wiki/Cocktail_sort
    // thanks to Joseph Nahmias
    var b = 0;
    var t = list.length - 1;
    var swap = true;

    while(swap) {
        swap = false;
        for(var i = b; i < t; ++i) {
            if ( comp_func(list[i], list[i+1]) > 0 ) {
                var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
                swap = true;
            }
        } // for
        t--;

        if (!swap) break;

        for(var i = t; i > b; --i) {
            if ( comp_func(list[i], list[i-1]) < 0 ) {
                var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
                swap = true;
            }
        } // for
        b++;

    } // while(swap)
  }  
}

/* ******************************************************************
   Supporting functions: bundled here to avoid depending on a library
   ****************************************************************** */

// Dean Edwards/Matthias Miller/John Resig

/* for Mozilla/Opera9 */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", sorttable.init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
    var script = document.getElementById("__ie_onload");
    script.onreadystatechange = function() {
        if (this.readyState == "complete") {
            sorttable.init(); // call the onload handler
        }
    };
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
    var _timer = setInterval(function() {
        if (/loaded|complete/.test(document.readyState)) {
            sorttable.init(); // call the onload handler
        }
    }, 10);
}

/* for other browsers */
window.onload = sorttable.init;

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function dean_addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
dean_addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
}

// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
	forEach, version 1.0
	Copyright 2006, Dean Edwards
	License: http://www.opensource.org/licenses/mit-license.php
*/

// array-like enumeration
if (!Array.forEach) { // mozilla already supports this
	Array.forEach = function(array, block, context) {
		for (var i = 0; i < array.length; i++) {
			block.call(context, array[i], i, array);
		}
	};
}

// generic enumeration
Function.prototype.forEach = function(object, block, context) {
	for (var key in object) {
		if (typeof this.prototype[key] == "undefined") {
			block.call(context, object[key], key, object);
		}
	}
};

// character enumeration
String.forEach = function(string, block, context) {
	Array.forEach(string.split(""), function(chr, index) {
		block.call(context, chr, index, string);
	});
};

// globally resolve forEach enumeration
var forEach = function(object, block, context) {
	if (object) {
		var resolve = Object; // default
		if (object instanceof Function) {
			// functions have a "length" property
			resolve = Function;
		} else if (object.forEach instanceof Function) {
			// the object implements a custom forEach method so use that
			object.forEach(block, context);
			return;
		} else if (typeof object == "string") {
			// the object is a string
			resolve = String;
		} else if (typeof object.length == "number") {
			// the object is array-like
			resolve = Array;
		}
		resolve.forEach(object, block, context);
	}
};
;/*
CSS Browser Selector v0.3.5 (Feb 05, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
function css_browser_selector(u){var ua = u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1;},g='gecko',w='webkit',s='safari',o='opera',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?'mobile':is('iphone')?'iphone':is('ipod')?'ipod':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win':is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':''/*,'js'*/]; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent);
;/**
 * jquery.simpletip 1.3.1. A simple tooltip plugin
 *
 * Copyright (c) 2009 Craig Thompson
 * http://craigsworks.com
 *
 * Licensed under GPLv3
 * http://www.opensource.org/licenses/gpl-3.0.html
 *
 * Launch  : February 2009
 * Version : 1.3.1
 * Released: February 5, 2009 - 11:04am
 */
(function($){function Simpletip(elem,conf){var self=this;elem=jQuery(elem);var tooltip=jQuery(document.createElement('div')).addClass(conf.baseClass).addClass((conf.fixed)?conf.fixedClass:'').addClass((conf.persistent)?conf.persistentClass:'').html(conf.content).appendTo(elem);if(!conf.hidden)tooltip.show();else tooltip.hide();if(!conf.persistent){elem.hover(function(event){self.show(event)},function(){self.hide()});if(!conf.fixed){elem.mousemove(function(event){if(tooltip.css('display')!=='none')self.updatePos(event)})}}else{elem.click(function(event){if(tooltip.css('display')!=='none')self.hide();else self.show()});jQuery(window).mousedown(function(event){if(tooltip.css('display')!=='none'){var check=(conf.focus)?jQuery(event.target).parents('.tooltip').andSelf().filter(function(){return this===tooltip.get(0)}).length:0;if(check===0)self.hide()}})};jQuery.extend(self,{getVersion:function(){return[1,2,0]},getParent:function(){return elem},getTooltip:function(){return tooltip},getPos:function(){return tooltip.offset()},setPos:function(posX,posY){var elemPos=elem.offset();if(typeof posX=='string')posX=parseInt(posX)+elemPos.left;if(typeof posY=='string')posY=parseInt(posY)+elemPos.top;tooltip.css({left:posX,top:posY});return self},show:function(event){conf.onBeforeShow.call(self);self.updatePos((conf.fixed)?null:event);switch(conf.showEffect){case'fade':tooltip.fadeIn(conf.showTime);break;case'slide':tooltip.slideDown(conf.showTime,self.updatePos);break;case'custom':conf.showCustom.call(tooltip,conf.showTime);break;default:case'none':tooltip.show();break};tooltip.addClass(conf.activeClass);conf.onShow.call(self);return self},hide:function(){conf.onBeforeHide.call(self);switch(conf.hideEffect){case'fade':tooltip.fadeOut(conf.hideTime);break;case'slide':tooltip.slideUp(conf.hideTime);break;case'custom':conf.hideCustom.call(tooltip,conf.hideTime);break;default:case'none':tooltip.hide();break};tooltip.removeClass(conf.activeClass);conf.onHide.call(self);return self},update:function(content){tooltip.html(content);conf.content=content;return self},load:function(uri,data){conf.beforeContentLoad.call(self);tooltip.load(uri,data,function(){conf.onContentLoad.call(self)});return self},boundryCheck:function(posX,posY){var newX=posX+tooltip.outerWidth();var newY=posY+tooltip.outerHeight();var windowWidth=jQuery(window).width()+jQuery(window).scrollLeft();var windowHeight=jQuery(window).height()+jQuery(window).scrollTop();return[(newX>=windowWidth),(newY>=windowHeight)]},updatePos:function(event){var tooltipWidth=tooltip.outerWidth();var tooltipHeight=tooltip.outerHeight();if(!event&&conf.fixed){if(conf.position.constructor==Array){posX=parseInt(conf.position[0]);posY=parseInt(conf.position[1])}else if(jQuery(conf.position).attr('nodeType')===1){var offset=jQuery(conf.position).offset();posX=offset.left;posY=offset.top}else{var elemPos=elem.offset();var elemWidth=elem.outerWidth();var elemHeight=elem.outerHeight();switch(conf.position){case'top':var posX=elemPos.left-(tooltipWidth/2)+(elemWidth/2);var posY=elemPos.top-tooltipHeight;break;case'bottom':var posX=elemPos.left-(tooltipWidth/2)+(elemWidth/2);var posY=elemPos.top+elemHeight;break;case'left':var posX=elemPos.left-tooltipWidth;var posY=elemPos.top-(tooltipHeight/2)+(elemHeight/2);break;case'right':var posX=elemPos.left+elemWidth;var posY=elemPos.top-(tooltipHeight/2)+(elemHeight/2);break;default:case'default':var posX=(elemWidth/2)+elemPos.left+20;var posY=elemPos.top;break}}}else{var posX=event.pageX;var posY=event.pageY};if(typeof conf.position!='object'){posX=posX+conf.offset[0];posY=posY+conf.offset[1];if(conf.boundryCheck){var overflow=self.boundryCheck(posX,posY);if(overflow[0])posX=posX-(tooltipWidth/2)-(2*conf.offset[0]);if(overflow[1])posY=posY-(tooltipHeight/2)-(2*conf.offset[1])}}else{if(typeof conf.position[0]=="string")posX=String(posX);if(typeof conf.position[1]=="string")posY=String(posY)};self.setPos(posX,posY);return self}})};jQuery.fn.simpletip=function(conf){var api=jQuery(this).eq(typeof conf=='number'?conf:0).data("simpletip");if(api)return api;var defaultConf={content:'A simple tooltip',persistent:false,focus:false,hidden:true,position:'default',offset:[0,0],boundryCheck:true,fixed:true,showEffect:'fade',showTime:150,showCustom:null,hideEffect:'fade',hideTime:150,hideCustom:null,baseClass:'tooltip',activeClass:'active',fixedClass:'fixed',persistentClass:'persistent',focusClass:'focus',onBeforeShow:function(){},onShow:function(){},onBeforeHide:function(){},onHide:function(){},beforeContentLoad:function(){},onContentLoad:function(){}};jQuery.extend(defaultConf,conf);this.each(function(){var el=new Simpletip(jQuery(this),defaultConf);jQuery(this).data("simpletip",el)});return this}})();/*
 * Thickbox 3 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
var tb_pathToImage = "/js/jquery/thickbox/loadingAnimation.gif";
var tb_pathToCloseImage = "http://smi2.ru/img/ico_close.png";
$(document).ready(function(){tb_init('a.thickbox, area.thickbox, input.thickbox');imgLoader=new Image();imgLoader.src=tb_pathToImage});function tb_init(domChunk){$(domChunk).live("click", function(){var t=this.title||this.name||null;var a=this.href||this.alt;var g=this.rel||false;tb_show(t,a,g);this.blur();return false})}function tb_show(caption,url,imageGroup){try{if(typeof document.body.style.maxHeight==="undefined"){$("body","html").css({height:"100%",width:"100%"});$("html").css("overflow","hidden");if(document.getElementById("TB_HideSelect")===null){$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");$("#TB_overlay").click(tb_remove)}}else{if(document.getElementById("TB_overlay")===null){$("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");$("#TB_overlay").click(tb_remove)}}if(tb_detectMacXFF()){$("#TB_overlay").addClass("TB_overlayMacFFBGHack")}else{$("#TB_overlay").addClass("TB_overlayBG")}if(caption===null){caption=""}$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");$('#TB_load').show();var baseURL;if(url.indexOf("?")!==-1){baseURL=url.substr(0,url.indexOf("?"))}else{baseURL=url}var urlString=/\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;var urlType=baseURL.toLowerCase().match(urlString);if(urlType=='.jpg'||urlType=='.jpeg'||urlType=='.png'||urlType=='.gif'||urlType=='.bmp'){TB_PrevCaption="";TB_PrevURL="";TB_PrevHTML="";TB_NextCaption="";TB_NextURL="";TB_NextHTML="";TB_imageCount="";TB_FoundURL=false;if(imageGroup){TB_TempArray=$("a[@rel="+imageGroup+"]").get();for(TB_Counter=0;((TB_Counter<TB_TempArray.length)&&(TB_NextHTML===""));TB_Counter++){var urlTypeTemp=TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);if(!(TB_TempArray[TB_Counter].href==url)){if(TB_FoundURL){TB_NextCaption=TB_TempArray[TB_Counter].title;TB_NextURL=TB_TempArray[TB_Counter].href;TB_NextHTML="<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>"}else{TB_PrevCaption=TB_TempArray[TB_Counter].title;TB_PrevURL=TB_TempArray[TB_Counter].href;TB_PrevHTML="<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>"}}else{TB_FoundURL=true;TB_imageCount="Image "+(TB_Counter+1)+" of "+(TB_TempArray.length)}}}imgPreloader=new Image();imgPreloader.onload=function(){imgPreloader.onload=null;var pagesize=tb_getPageSize();var x=pagesize[0]-150;var y=pagesize[1]-150;var imageWidth=imgPreloader.width;var imageHeight=imgPreloader.height;if(imageWidth>x){imageHeight=imageHeight*(x/imageWidth);imageWidth=x;if(imageHeight>y){imageWidth=imageWidth*(y/imageHeight);imageHeight=y}}else if(imageHeight>y){imageWidth=imageWidth*(y/imageHeight);imageHeight=y;if(imageWidth>x){imageHeight=imageHeight*(x/imageWidth);imageWidth=x}}TB_WIDTH=imageWidth+30;TB_HEIGHT=imageHeight+60;$("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>"+"<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>"+TB_imageCount+TB_PrevHTML+TB_NextHTML+"</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'><img src='"+tb_pathToCloseImage+"' border='0'/></a></div>");$("#TB_closeWindowButton").click(tb_remove);if(!(TB_PrevHTML==="")){function goPrev(){if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev)}$("#TB_window").remove();$("body").append("<div id='TB_window'></div>");tb_show(TB_PrevCaption,TB_PrevURL,imageGroup);return false}$("#TB_prev").click(goPrev)}if(!(TB_NextHTML==="")){function goNext(){$("#TB_window").remove();$("body").append("<div id='TB_window'></div>");tb_show(TB_NextCaption,TB_NextURL,imageGroup);return false}$("#TB_next").click(goNext)}document.onkeydown=function(e){if(e==null){keycode=event.keyCode}else{keycode=e.which}if(keycode==27){tb_remove()}else if(keycode==190){if(!(TB_NextHTML=="")){document.onkeydown="";goNext()}}else if(keycode==188){if(!(TB_PrevHTML=="")){document.onkeydown="";goPrev()}}};tb_position();$("#TB_load").remove();$("#TB_ImageOff").click(tb_remove);$("#TB_window").css({display:"block"})};imgPreloader.src=url}else{var queryString=url.replace(/^[^\?]+\??/,'');var params=tb_parseQuery(queryString);TB_WIDTH=(params['width']*1)+30||630;TB_HEIGHT=(params['height']*1)+40||440;ajaxContentW=TB_WIDTH-30;ajaxContentH=TB_HEIGHT-45;if(url.indexOf('TB_iframe')!=-1){urlNoQuery=url.split('TB_');$("#TB_iframeContent").remove();if(params['modal']!="true"){$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'><img src='"+tb_pathToCloseImage+"' border='0'/></a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW+29)+"px;height:"+(ajaxContentH+17)+"px;' > </iframe>")}else{$("#TB_overlay").unbind();$("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW+29)+"px;height:"+(ajaxContentH+17)+"px;'> </iframe>")}}else{if($("#TB_window").css("display")!="block"){if(params['modal']!="true"){$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'><img src='"+tb_pathToCloseImage+"' border='0'/></a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>")}else{$("#TB_overlay").unbind();$("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>")}}else{$("#TB_ajaxContent")[0].style.width=ajaxContentW+"px";$("#TB_ajaxContent")[0].style.height=ajaxContentH+"px";$("#TB_ajaxContent")[0].scrollTop=0;$("#TB_ajaxWindowTitle").html(caption)}}$("#TB_closeWindowButton").click(tb_remove);if(url.indexOf('TB_inline')!=-1){$("#TB_ajaxContent").append($('#'+params['inlineId']).children());$("#TB_window").unload(function(){$('#'+params['inlineId']).append($("#TB_ajaxContent").children())});tb_position();$("#TB_load").remove();$("#TB_window").css({display:"block"})}else if(url.indexOf('TB_iframe')!=-1){tb_position();if($.browser.safari){$("#TB_load").remove();$("#TB_window").css({display:"block"})}}else{$("#TB_ajaxContent").load(url+="&random="+(new Date().getTime()),function(){tb_position();$("#TB_load").remove();tb_init("#TB_ajaxContent a.thickbox");$("#TB_window").css({display:"block"})})}}if(!params['modal']){document.onkeyup=function(e){if(e==null){keycode=event.keyCode}else{keycode=e.which}if(keycode==27){tb_remove()}}}}catch(e){}}function tb_showIframe(){$("#TB_load").remove();$("#TB_window").css({display:"block"})}function tb_remove(){$("#TB_imageOff").unbind("click");$("#TB_closeWindowButton").unbind("click");$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove()});$("#TB_load").remove();if(typeof document.body.style.maxHeight=="undefined"){$("body","html").css({height:"auto",width:"auto"});$("html").css("overflow","")}document.onkeydown="";document.onkeyup="";return false}function tb_position(){$("#TB_window").css({marginLeft:'-'+parseInt((TB_WIDTH/2),10)+'px',width:TB_WIDTH+'px'});if(!(jQuery.browser.msie&&jQuery.browser.version<7)){$("#TB_window").css({marginTop:'-'+parseInt((TB_HEIGHT/2),10)+'px'})}}function tb_parseQuery(query){var Params={};if(!query){return Params}var Pairs=query.split(/[;&]/);for(var i=0;i<Pairs.length;i++){var KeyVal=Pairs[i].split('=');if(!KeyVal||KeyVal.length!=2){continue}var key=unescape(KeyVal[0]);var val=unescape(KeyVal[1]);val=val.replace(/\+/g,' ');Params[key]=val}return Params}function tb_getPageSize(){var de=document.documentElement;var w=window.innerWidth||self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth;var h=window.innerHeight||self.innerHeight||(de&&de.clientHeight)||document.body.clientHeight;arrayPageSize=[w,h];return arrayPageSize}function tb_detectMacXFF(){var userAgent=navigator.userAgent.toLowerCase();if(userAgent.indexOf('mac')!=-1&&userAgent.indexOf('firefox')!=-1){return true}};function loadCommThread(news_id,comm_id,el,bf) {

    var a = $('#'+comm_id);
    var tr = a.parent().parent();
    var start = tr;
    var level = parseInt(a.attr('level'));

    var all = new Array();
    do {
        all.push(tr);
        tr = tr.next();
    } while (tr.size() >0 && parseInt(tr.attr('level')) > level);

    $.each(all, function(){
        var id = this.attr('id');
        var a = $('#'+id+" a:contains(Развернуть)");
        a.before("<img src='/img/loading.gif'/>");
        a.remove();
    });


	$.get("/ajaxprocess/?act=commthread",
			 {news_id:news_id,comm_id:comm_id,level:level,bf:bf},
			 function(resp){

	                var newEl = $(resp);
	                newEl.css('display','none');
	                start.before(newEl);

	                $.each(all, function(){
	                    var old = this; old.children().fadeOut('fast',function(){old.remove();newEl.fadeIn('fast');})
	                });

                  $('#magic-book').jqmAddTrigger('.magic-book-trigger');

	});
}

function loadCommThread2(news_id,comm_id,el,bf,islast) {

//    $(el).remove();
	var a = $('#'+comm_id);
    var tr = a.parent().parent();
    var start = tr;
    var level = parseInt(a.attr('level'));
    var all = new Array();
    do {
        all.push(tr);
        tr = tr.next();
    } while (tr.size() >0 && parseInt(tr.attr('level')) > level);

    $.each(all, function(){
        var id = this.attr('id');
        var a = $('#'+id+" a:contains(Развернуть)");
        a.before("<img src='/img/loading.gif'/>");
        a.remove();
    });

    $.get("/ajaxprocess/?act=commthread",
        {news_id:news_id,comm_id:comm_id,level:level,bf:bf},
        function(resp){
            var newEl = $(resp);
            newEl.css('display','none');
            start.before(newEl);
            $.each(all, function(){
                var old = this;
                old.children().fadeOut('fast');
                newEl.show();
                old.remove();
            });

            $('#magic-book').jqmAddTrigger('.magic-book-trigger');
    });
}

/**
 * Объект управления последними комментариями
 */
comments = {

create:function(__uid){realplexor.addChannel((typeof __uid==='undefined')?'u_0':'id_'+__uid)},
eventHook:function(d,c){if(typeof d.comments !=='undefined')comments.updateComments(d.comments);},
updateComments: function(comments) {
	if (!comments.length) return;
	for (var i=0, l=comments.length; i<l; i++) { 
		$('#last-comments-sidebar-block .last-comment:first')
		.before(['<div class="last-comment" id="cmn', comments[i].comment_id,
			'" style="background-color:#f6eab6;"> <h2><span><a href="/',
			comments[i].news_author,'/c',comments[i].news_id,'/">',comments[i].news_title,
			'</a></span></h2><div class="comment-author"><a href="/',comments[i].commentator,
			'/"><img src="/data/avatars_images/',
			(comments[i].commentator_avatar_id ? 'uav_' + comments[i].commentator_avatar_id : 'noname'),
'_20.jpeg" width="20" height="20" /></a></div><div class="comment-text"><a href="/'+comments[i].commentator+'/" class="author">'+(comments[i].commentator_fname && comments[i].commentator_lname ? comments[i].commentator_fname + " " + comments[i].commentator_lname : comments[i].commentator)+'</a><br /><a href="/',comments[i].news_author,'/c',comments[i].news_id,
			'/?comm_id=',comments[i].comment_id,'#anchor-',comments[i].comment_id,'">',
			comments[i].comment_text,'</a></div><div style="clear:both;"></div></div>'].join(''));
		$('#last-comments-sidebar-block .last-comment:last').remove();
		$(['#cmn',comments[i].comment_id].join('')).animate({backgroundColor:$('#last-comments-header').css('background-color')},3000);
	}
}
}

if(typeof xscomm=='undefined'){
    var xscomm = {};
}

$(document).ready(function () {
    xscomm.onLoad();
});

xscomm.onLoad = function(){
    $('textarea[name=comment]').smi2editor();
    /*отсупы в коментариях*/
    xscomm.setLevels();
    $('#xscomm a').attr('target','_blank');
}


/**
 * сдвигает комменты согласно их уровням
 * @access public
 * @return void
 **/
xscomm.setLevels = function(){
    $(".comments-strip input[name^='comment_level_']").each(function (i) {
        var comm_id = $(this).attr('name').replace('comment_level_','');
        var level = parseInt($(this).val());
        var ml= 3 * (1 - Math.pow(0.8, level)) / (1-0.8);
        $('.comments-strip #comment_'+comm_id).css('margin-left', ml+'%');
    });
}

/**
 * навигация пока старая через аякс и перезагрузку всего блока
 * @access public
 * @return void
 **/
xscomm.naviComments= function(ofc){
    gdata = $('#comments-block .comments-gdata').text();
    gdata=json_decode(gdata);
    gdata.ofc=ofc
    xscomm.reloadAllComments(gdata);
}

/**
 * примитивно перегружает весь блок через аякс
 * если нет более изящных вариантов то релоадим ею
 * @access public
 * @return void
 **/
xscomm.reloadAllComments = function(gdata){
    if(!gdata){
        gdata = $('#comments-block .comments-gdata').text();
    }
    if(typeof gdata == 'string'){
        gdata=json_decode(gdata);
    }
    xscomm.showLoading();
    $.ajax({
        type: "POST",
        dataType:"json",
        url: "/process/?action=xscommReloadAllComments",
        async: false,
        data: gdata,
        success: function(data){
            if(data.status=='ok'){
                var em = document.createElement('div');
                $(em).html(data.html)
                html=$(em).find('#comments-block').html();
                $('#comments-block').html(html);
                xscomm.onLoad();
            }else{
                $('#comments-block').html(data.mess);
            }
            xscomm.hideLoading();
            if(typeof xscomm.childrenSize == 'function') {
               //в виджете извещаем родителя что изменился размер
               xscomm.childrenSize();
            }
        }
    });
    return false;
}


/**
 * скрыть-показать индикатор загрузки
 * @access public
 * @return void
 **/
xscomm.showLoading = function(){
    $('#comments-block').hide();
    $('#comments-loading').show();
}

xscomm.hideLoading = function(){
    $('#comments-loading').hide();
    $('#comments-block').show();
}

/**
 * litereg - быстрая регистрация
 * @access public
 * @return void
 **/
xscomm.literegShowEmailForm = function(){
    //показываем формочку для продолжения регистрации
    var litereg_client_nick=$("#comments-block .comments-registration-lite input[name='litereg_client_nick']").val();
    if(!litereg_client_nick){
        alert ('Для продолжения публикации комментария введите ваше имя.');
        return;
    }
    //обработаем никнейм
    var sdata = {};
    sdata.litereg_client_nick = litereg_client_nick;
    $.ajax({
        type: "POST",
        dataType:"json",
        url: "/client_registration/?&page_action=xscommLiteregPrepNickname",
        async: false,
        data: sdata,
        success: function(gdata){
            if(gdata.status=='ok'){
                //показываем формочку для продолжения регистрации
                $('#comments-block div.comment-form').addClass('hb');
                $('#litereg-form').removeClass('hb');
                $("#litereg-form input[name='litereg_client_nick']").val(gdata.litereg_client_nick);
            }
        }
    });
}

xscomm.literegRegistrationProcess = function(){
        var url='/client_registration/?&page_action=literegRegistrationProcess';
        var form_data = $('#litereg-form').serialize();
        //для постинга комментария
        var comment = encodeURIComponent($("#comments-block form.comment-form textarea[name='comment']").val());//encodeURIComponent(FCKeditorAPI.GetInstance('comment').GetData());
        var news_id = parseInt($("#comments-block form.comment-form input[name='news_id']").val());
        if(!news_id){
            xscomm.postNews();
        }

        news_id = parseInt($("#comments-block form.comment-form input[name='news_id']").val());
        news_id = encodeURIComponent(news_id);
        form_data = form_data+ '&comment='+comment+'&news_id='+news_id;
        $.getJSON(url, form_data, function(data){
            if(data.status=='ok'){
                $('.litereg-form').hide();
                $('.litereg-form-mess').text('На указанный адрес отправлено письмо с подтверждением регистрации. Для завершения публикации перейдите по ссылке указанной в письме.');
                $('.litereg-form-mess').removeClass('litereg-form-err');
                $('.litereg-form-mess').addClass('litereg-form-ok');
                $('.litereg-form-button-ok').hide();
                $('.litereg-form-button-cancel').show();
            }else{
                $('.litereg-form-mess').text(data.message);
                $('.litereg-form-mess').removeClass('litereg-form-ok');
                $('.litereg-form-mess').addClass('litereg-form-errors');
                $('.litereg-form-button-ok').show();
                $('.litereg-form-button-cancel').hide();
            }
        });
}


xscomm.literegHideEmailForm = function(){
    $('#litereg-form').addClass('hb');
    $('#comments-block div.comment-form').removeClass('hb');
}


/**
 *
 * @access public
 * @return void
 **/
xscomm.showEditForm = function(comm_id){
    $('div [class^=comment-edit-]').hide();
    $('div .comment-edit-'+comm_id).show();
    $('div .comment-edit-'+comm_id).find('textarea').smi2editor();
    return false;
}

/**
 * только для виджета
 * @access public
 * @return void
 **/
xscomm.logout = function(){
    /*тоже самое можно сделать асинхронным аяксом, но будем использовать
    один метод обмена данными*/
    //window.open('http://e-generator.ru/a/logout.php','','top=20, left=150, menubar, toolbar, location, directories, status, scrollbars, resizable=no, width=600, height=600');
    $.get('http://e-generator.ru/a/logout.php');
    $.get('/api/xscomm/widget.php?action=logout&xscomm='+xscomm.plexorChannelId+'&xscomm_uid='+xscomm.plexorUserId);
}

/**
 * только для виджета
 * @access public
 * @return void
 * http://habrahabr.ru/blogs/personal/46029/ - в имени окна IE не должно быть пробелов
 **/
xscomm.login = function(){
    window.open('http://smi2.ru/navapp.php?do=L&r=xscomm|'+xscomm.plexorChannelId+'|'+xscomm.plexorUserId,'','top=20, left=150, menubar, toolbar, location, directories, status, scrollbars, resizable=no, width=600, height=400');
}

/**
 *
 * @access public
 * @return void
 **/
xscomm.showReplyForm = function(comm_id){
    //получаем html формы
    var form_html = $('#comments-block form.comment-form-temp').parent().html();
    var comm_id = parseInt(comm_id);
    //создаем элемент - потом будем удалять
    var em = document.createElement('div');
    $(em).html(form_html);
    //изменяем некоторые html парметры
    $(em).attr('id', 'response-form-'+comm_id);
    $(em).find('input[name=reply_to]').val(comm_id);
    $(em).find('input[name=hide_form]').removeClass('hb');
    $(em).find('input[name=hide_form]').die();
    $(em).find('input[name=hide_form]').live("click", function(){
        xscomm.resetReplyForm(comm_id);
    });
    $('#response-link-'+comm_id).addClass('hb');
    $('#response-link-'+comm_id).parents('.comment-footer').append($(em));
    return false;
}

xscomm.resetReplyForm = function(comm_id){
    $('#response-link-'+comm_id).removeClass('hb');
    $('#response-form-'+comm_id).remove();
    return false;
}

/**
 *
 * @access public
 * @return void
 **/
xscomm.saveComment = function(em){
    xscomm.showLoading();
    var news_id = parseInt($("#comments-block form.comment-form input[name='news_id']").val());
    if(!news_id){
        news_id = xscomm.postNews();
    }
    //если новости нету просто обновились и все покажет пустую форму
    if(!news_id){
        xscomm.reloadAllComments();
        return;
    }
    var gdata=$(em).parents('form.comment-form').serialize();
    $.ajax({
        type: "POST",
        dataType:"html",
        url: "/process/",
        async: false,
        data: gdata,
        success: function(){
            /*при первом постинге news_id в gdata еще нету и надо его туда дописать
            gdata это собирательный блок информации который передается для инициализации блока и
            потом пишется вниз в скрытое поле, чтобы можно было восстановить информацию*/
            var old_gdata = $('#comments-block .comments-gdata').text();
            if(typeof old_gdata == 'string'){
                old_gdata=json_decode(old_gdata);
            }
            old_gdata.news_id = news_id;
            xscomm.reloadAllComments(old_gdata);
        }
    });
}

/**
 * если новости еще нету и кликнул по коментировать то запостить новость
 * @access public
 * @return void
 **/
xscomm.postNews = function(){
    gdata = $('#comments-block .comments-gdata').text();
    var sendData = json_decode(gdata);
    var news_id;
    news_id = false;
    $.ajax({
        type: "POST",
        dataType:"json",
        url: "/api/xscomm/widget.php?action=postNews",
        async: false,
        data: sendData,
        success: function(getData){
            if(getData.status=='ok'){
                news_id = getData.data.news_id;
                $('#comments-block input[name=news_id]').val(news_id);
            }
        }
    });
    return news_id;
}

xscomm.deleteСomment = function(comm_id){
    if (!confirm('Удалить комментарий?')){
        return 0;
    }

    $.get('/process/?action=delete_comment',{comm_id:comm_id},function(){
        alert('Комментарий удален');
        $('#comment_'+comm_id).remove();
    });
}

/*вспомагательные функции*/
function json_decode(str_json) {
    // Decodes the JSON representation into a PHP value
    //
    // version: 901.2515
    // discuss at: http://phpjs.org/functions/json_decode
    // +      original by: Public Domain (http://www.json.org/json2.js)
    // + reimplemented by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: json_decode('[\n    "e",\n    {\n    "pluribus": "unum"\n}\n]');
    // *     returns 1: ['e', {pluribus: 'unum'}]
    /*
        http://www.JSON.org/json2.js
        2008-11-19
        Public Domain.
        NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
        See http://www.JSON.org/js.html
    */

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    var j;
    var text = str_json;

    var walk = function(holder, key) {
        // The walk method is used to recursively walk the resulting structure so
        // that modifications can be made.
        var k, v, value = holder[key];
        if (value && typeof value === 'object') {
            for (k in value) {
                if (Object.hasOwnProperty.call(value, k)) {
                    v = walk(value, k);
                    if (v !== undefined) {
                        value[k] = v;
                    } else {
                        delete value[k];
                    }
                }
            }
        }
        return reviver.call(holder, key, value);
    }

    // Parsing happens in four stages. In the first stage, we replace certain
    // Unicode characters with escape sequences. JavaScript handles many characters
    // incorrectly, either silently deleting them, or treating them as line endings.
    cx.lastIndex = 0;
    if (cx.test(text)) {
        text = text.replace(cx, function (a) {
            return '\\u' +
            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
        });
    }

    // In the second stage, we run the text against regular expressions that look
    // for non-JSON patterns. We are especially concerned with '()' and 'new'
    // because they can cause invocation, and '=' because it can cause mutation.
    // But just to be safe, we want to reject all unexpected forms.

    // We split the second stage into 4 regexp operations in order to work around
    // crippling inefficiencies in IE's and Safari's regexp engines. First we
    // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
    // replace all simple value tokens with ']' characters. Third, we delete all
    // open brackets that follow a colon or comma or that begin the text. Finally,
    // we look to see that the remaining characters are only whitespace or ']' or
    // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
    if (/^[\],:{}\s]*$/.
        test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
            replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
            replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

        // In the third stage we use the eval function to compile the text into a
        // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
        // in JavaScript: it can begin a block or an object literal. We wrap the text
        // in parens to eliminate the ambiguity.

        j = eval('(' + text + ')');

        // In the optional fourth stage, we recursively walk the new structure, passing
        // each name/value pair to a reviver function for possible transformation.

        return typeof reviver === 'function' ?
        walk({
            '': j
        }, '') : j;
    }

    // If the text is not JSON parseable, then a SyntaxError is thrown.
    throw new SyntaxError('json_decode');
}

function md5(str) {	// Calculate the md5 hash of a string
	//
	// +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
	// + namespaced by: Michael White (http://crestidg.com)

	var RotateLeft = function(lValue, iShiftBits) {
			return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
		};

	var AddUnsigned = function(lX,lY) {
			var lX4,lY4,lX8,lY8,lResult;
			lX8 = (lX & 0x80000000);
			lY8 = (lY & 0x80000000);
			lX4 = (lX & 0x40000000);
			lY4 = (lY & 0x40000000);
			lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
			if (lX4 & lY4) {
				return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
			}
			if (lX4 | lY4) {
				if (lResult & 0x40000000) {
					return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
				} else {
					return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
				}
			} else {
				return (lResult ^ lX8 ^ lY8);
			}
		};

	var F = function(x,y,z) { return (x & y) | ((~x) & z); };
	var G = function(x,y,z) { return (x & z) | (y & (~z)); };
	var H = function(x,y,z) { return (x ^ y ^ z); };
	var I = function(x,y,z) { return (y ^ (x | (~z))); };

	var FF = function(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};

	var GG = function(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};

	var HH = function(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};

	var II = function(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};

	var ConvertToWordArray = function(str) {
			var lWordCount;
			var lMessageLength = str.length;
			var lNumberOfWords_temp1=lMessageLength + 8;
			var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
			var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
			var lWordArray=Array(lNumberOfWords-1);
			var lBytePosition = 0;
			var lByteCount = 0;
			while ( lByteCount < lMessageLength ) {
				lWordCount = (lByteCount-(lByteCount % 4))/4;
				lBytePosition = (lByteCount % 4)*8;
				lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
				lByteCount++;
			}
			lWordCount = (lByteCount-(lByteCount % 4))/4;
			lBytePosition = (lByteCount % 4)*8;
			lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
			lWordArray[lNumberOfWords-2] = lMessageLength<<3;
			lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
			return lWordArray;
		};

	var WordToHex = function(lValue) {
			var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
			for (lCount = 0;lCount<=3;lCount++) {
				lByte = (lValue>>>(lCount*8)) & 255;
				WordToHexValue_temp = "0" + lByte.toString(16);
				WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
			}
			return WordToHexValue;
		};

	var x=Array();
	var k,AA,BB,CC,DD,a,b,c,d;
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;

	str = this.utf8_encode(str);
	x = ConvertToWordArray(str);
	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

	for (k=0;k<x.length;k+=16) {
		AA=a; BB=b; CC=c; DD=d;
		a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
		d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
		c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
		b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
		a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
		d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
		c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
		b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
		a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
		d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
		c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
		b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
		a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
		d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
		c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
		b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
		a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
		d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
		c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
		b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
		a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
		d=GG(d,a,b,c,x[k+10],S22,0x2441453);
		c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
		b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
		a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
		d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
		c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
		b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
		a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
		d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
		c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
		b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
		a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
		d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
		c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
		b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
		a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
		d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
		c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
		b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
		a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
		d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
		c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
		b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
		a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
		d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
		c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
		b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
		a=II(a,b,c,d,x[k+0], S41,0xF4292244);
		d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
		c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
		b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
		a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
		d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
		c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
		b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
		a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
		d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
		c=II(c,d,a,b,x[k+6], S43,0xA3014314);
		b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
		a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
		d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
		c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
		b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
		a=AddUnsigned(a,AA);
		b=AddUnsigned(b,BB);
		c=AddUnsigned(c,CC);
		d=AddUnsigned(d,DD);
	}

	var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

	return temp.toLowerCase();
}

function utf8_encode ( str_data ) {	// Encodes an ISO-8859-1 string to UTF-8
	//
	// +   original by: Webtoolkit.info (http://www.webtoolkit.info/)

	str_data = str_data.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < str_data.length; n++) {
		var c = str_data.charCodeAt(n);
		if (c < 128) {
			utftext += String.fromCharCode(c);
		} else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		} else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}
	}

	return utftext;
};/*
 * JavaScript Creole 1.0 Wiki Markup Parser
 * $Id: creole.js 14 2009-03-21 16:15:08Z ifomichev $
 *
 * Copyright (c) 2009 Ivan Fomichev
 *
 * Portions Copyright (c) 2007 Chris Purcell
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

if (!Parse) { var Parse = {}; }
if (!Parse.Simple) { Parse.Simple = {}; }

Parse.Simple.Base = function(grammar, options) {
    if (!arguments.length) { return; }

    this.grammar = grammar;
    this.grammar.root = new this.ruleConstructor(this.grammar.root);
    this.options = options;
};

Parse.Simple.Base.prototype = {
    ruleConstructor: null,
    grammar: null,
    options: null,

    parse: function(node, data, options) {
        if (options) {
            for (i in this.options) {
                if (typeof options[i] == 'undefined') { options[i] = this.options[i]; }
            }
        }
        else {
            options = this.options;
        }
        data = data.replace(/\r\n?/g, '\n');

        data = data.replace(/<em\/>/g, '')		    
        data = data.replace(/<strong\/>/g, '')
        data = data.replace(/<img\/>/g, '')

        this.grammar.root.apply(node, data, options);
        if (options && options.forIE) { node.innerHTML = node.innerHTML.replace(/\r?\n/g, '\r\n'); }
    },

    getHTML: function(__html) {


	return __html
    },

    importHTML: function(__html) {

	__rules=[{rex:/<strong[^>]*?>(.*?)<\/strong>/mgi, tpl:"**$1**"},
		 {rex:/<b[^>]*?>(.*?)<\/b>/mgi, tpl:"**$1**"},
		 {rex:/<em[^>]*?>(.*?)<\/em>/mgi, tpl:"//$1//"},
		 {rex:/<i[^>]*?>(.*?)<\/i>/mgi, tpl:"//$1//"},
		 {rex:/<a[^>]*?href=\"([^\"]*)\"[^>]*?>(.*?)<\/a>/mgi, tpl:"[[$1|$2]]"},
		 {rex:/<img[^>]*?src=\"([^\"]*)\"[^>]*?>/mgi, tpl:"{{$1}}"},
		 {rex:/<\/img>/mgi, tpl:""},
	         {rex:/<p>/mgi, tpl:''},		 
	         {rex:/<\/p>/mgi, tpl:'\n'},
	         {rex:/\uffff\uffff/mgi, tpl:'\n'}]

/*
	          {rex:/<em[^>]*?>(.*?)<\/em>/mgi, tmplt:"_$1_" },]
       { rex:/<i[^>]*?>(.*?)<\/i>/mgi, tmplt:"_$1_" },
       { rex:/<sup[^>]*?>(.*?)<\/sup>/mgi, tmplt:"^$1^" },
       { rex:/<sub[^>]*?>(.*?)<\/sub>/mgi, tmplt:"~$1~" },
       { rex:/<del[^>]*?>(.*?)<\/del>/mgi, tmplt:"(-$1-)" },
       { rex:/<abbr title=\"([^\"]*)\">(.*?)<\/abbr>/mgi, tmplt:"?$2($1)?" },
       { rex:/<a href=\"([^\"]*)\"[^>]*?>(.*?)<\/a>/mgi, tmplt:function($0,$1,$2){return $1==$2?$1:"["+$1+","+$2+"]";}},
       { rex:/<img([^>]*)\/>/mgi, tmplt:function($0,$1){var a=Wiky.attrVal($1,"alt"),h=Wiky.attrVal($1,"src"),t=Wiky.attrVal($1,"title"),s=Wiky.attrVal($1,"style");return s||(t&&h!=t)?("["+Wiky.invStyle($1)+"img:"+h+(t&&(","+t))+"]"):h;}},
*/
	
	for (var i=0,l=__rules.length;i<l;i++) {

	    __html = __html.replace(/\n/g,'\uffff').replace(__rules[i].rex,__rules[i].tpl).replace(/\uffff/g,'\n');

	}
	return __html

    }  
};

Parse.Simple.Base.prototype.constructor = Parse.Simple.Base;

Parse.Simple.Base.Rule = function(params) {
    if (!arguments.length) { return; }

    for (var p in params) { this[p] = params[p]; }
    if (!this.children) { this.children = []; }
};

Parse.Simple.Base.prototype.ruleConstructor = Parse.Simple.Base.Rule;

Parse.Simple.Base.Rule.prototype = {
    regex: null,
    capture: null,
    replaceRegex: null,
    replaceString: null,
    tag: null,
    attrs: null,
    children: null,

    match: function(data, options) {
        return data.match(this.regex);
    },

    build: function(node, r, options) {
        var data;
        if (this.capture !== null) {
            data = r[this.capture];
        }

        var target;
        if (this.tag) {
            target = document.createElement(this.tag);
            node.appendChild(target);
        }
        else { target = node; }

        if (data) {
            if (this.replaceRegex) {
                data = data.replace(this.replaceRegex, this.replaceString);
            }
            this.apply(target, data, options);
        }

        if (this.attrs) {
            for (var i in this.attrs) {
                target.setAttribute(i, this.attrs[i]);
                if (options && options.forIE && i == 'class') { target.className = this.attrs[i]; }
            }
        }
        return this;
    },

    apply: function(node, data, options) {
        var tail = '' + data;
        var matches = [];

        if (!this.fallback.apply) {
            this.fallback = new this.constructor(this.fallback);
        }

        while (true) {
            var best = false;
            var rule  = false;
            for (var i = 0; i < this.children.length; i++) {
                if (typeof matches[i] == 'undefined') {
                    if (!this.children[i].match) {
                        this.children[i] = new this.constructor(this.children[i]);
                    }
                    matches[i] = this.children[i].match(tail, options);
                }
                if (matches[i] && (!best || best.index > matches[i].index)) {
                    best = matches[i];
                    rule = this.children[i];
                    if (best.index == 0) { break; }
                }
            }
                
            var pos = best ? best.index : tail.length;
            if (pos > 0) {
                this.fallback.apply(node, tail.substring(0, pos), options);
            }
            
            if (!best) { break; }

            if (!rule.build) { rule = new this.constructor(rule); }
            rule.build(node, best, options);

            var chopped = best.index + best[0].length;
            tail = tail.substring(chopped);
            for (var i = 0; i < this.children.length; i++) {
                if (matches[i]) {
                    if (matches[i].index >= chopped) {
                        matches[i].index -= chopped;
                    }
                    else {
                        matches[i] = void 0;
                    }
                }
            }
        }

        return this;
    },

    fallback: {
        apply: function(node, data, options) {
            if (options && options.forIE) {
                // workaround for bad IE
                data = data.replace(/\n/g, ' \r');
            }
            node.appendChild(document.createTextNode(data));
        }
    }    
};

Parse.Simple.Base.Rule.prototype.constructor = Parse.Simple.Base.Rule;

Parse.Simple.Creole = function(options) {
    var rx = {};
    rx.link = '[^\\]|~\\n]*(?:(?:\\](?!\\])|~.)[^\\]|~\\n]*)*';
    rx.linkText = '[^\\]~\\n]*(?:(?:\\](?!\\])|~.)[^\\]~\\n]*)*';
    rx.uriPrefix = '\\b(?:(?:https?|ftp)://|mailto:)';
    rx.uri = rx.uriPrefix + rx.link;
    rx.rawUri = rx.uriPrefix + '\\S*[^\\s!"\',.:;?]';
    rx.interwikiPrefix = '[\\w.]+:';
    rx.interwikiLink = rx.interwikiPrefix + rx.link;
    rx.img = '\\{\\{((?!\\{)[^|}\\n]*(?:}(?!})[^|}\\n]*)*)' +
             (options && options.strict ? '' : '(?:') + 
             '\\|([^}~\\n]*((}(?!})|~.)[^}~\\n]*)*)' +
             (options && options.strict ? '' : ')?') +
             '}}';
    rx.video= '\\{video:(youtube|rutube|smotri|smi2)(?:}|\\|(.*?)})'
    rx.audio= '\\{audio:(prostopleer)(?:}|\\|(.*?)})'

    var formatLink = function(link, format) {
        if (format instanceof Function) {
            return format(link);
        }

        format = format instanceof Array ? format : [ format ];
        if (typeof format[1] == 'undefined') { format[1] = ''; }
        return format[0] + link + format[1];
    };

    var g = {
        hr: { tag: 'hr', regex: /(^|\n)\s*----\s*(\n|$)/ },

        br: { tag: 'br', regex: /\\\\/ },
        
        preBlock: { tag: 'pre', capture: 2,
            regex: /(^|\n)\{\{\{\n((.*\n)*?)\}\}\}(\n|$)/,
            replaceRegex: /^ ([ \t]*\}\}\})/gm,
            replaceString: '$1' },
        tt: { tag: 'tt',
            regex: /\{\{\{(.*?\}\}\}+)/, capture: 1,
            replaceRegex: /\}\}\}$/, replaceString: '' },

        ulist: { tag: 'ul', capture: 0,
            regex: /(^|\n)([ \t]*\*[^*#].*(\n|$)([ \t]*[^\s*#].*(\n|$))*([ \t]*[*#]{2}.*(\n|$))*)+/ },
        olist: { tag: 'ol', capture: 0,
            regex: /(^|\n)([ \t]*#[^*#].*(\n|$)([ \t]*[^\s*#].*(\n|$))*([ \t]*[*#]{2}.*(\n|$))*)+/ },
        li: { tag: 'li', capture: 0,
            regex: /[ \t]*([*#]).+(\n[ \t]*[^*#\s].*)*(\n[ \t]*\1[*#].+)*/,
            replaceRegex: /(^|\n)[ \t]*[*#]/g, replaceString: '$1' },

        table: { tag: 'table', capture: 0,
            regex: /(^|\n)(\|.*?[ \t]*(\n|$))+/ },
        tr: { tag: 'tr', capture: 2, regex: /(^|\n)(\|.*?)\|?[ \t]*(\n|$)/ },
        th: { tag: 'th', regex: /\|+=([^|]*)/, capture: 1 },
        td: { tag: 'td', capture: 1,
            regex: '\\|+([^|~\\[{]*((~(.|(?=\\n)|$)|' +
                   '\\[\\[' + rx.link + '(\\|' + rx.linkText + ')?\\]\\]' +
                   (options && options.strict ? '' : '|' + rx.img) +
                   '|[\\[{])[^|~]*)*)' },

        singleLine: { regex: /.+/, capture: 0 },
        paragraph: { tag: 'p', capture: 0,
            regex: /(^|\n)([ \t]*\S.*(\n|$))+/ },
        text: { capture: 0, regex: /(^|\n)([ \t]*[^\s].*(\n|$))+/ },

        strong: { tag: 'strong', capture: 1,
            regex: /\*\*([^*~]*((\*(?!\*)|~(.|(?=\n)|$))[^*~]*)*)(\*\*|\n|$)/ },
        em: { tag: 'em', capture: 1,
            regex: '\\/\\/(((?!' + rx.uriPrefix + ')[^\\/~])*' +
                   '((' + rx.rawUri + '|\\/(?!\\/)|~(.|(?=\\n)|$))' +
                   '((?!' + rx.uriPrefix + ')[^\\/~])*)*)(\\/\\/|\\n|$)' },

        img: { regex: rx.img,
            build: function(node, r, options) {
                var img = document.createElement('img');
                img.src = r[1];
                img.alt = r[2] === undefined
                    ? (options && options.defaultImageText ? options.defaultImageText : '')
                    : r[2].replace(/~(.)/g, '$1');
                node.appendChild(img);
            } },

	video: { regex: rx.video,
		 build: function(node, r, options) {
		     if ($.browser.msie && navigator.appVersion.indexOf("Win") != -1) {
			 var video = document.createElement('object')
			 video.width='425'
			 video.height='344'
			 video.id='f_'+r[2]
			 node.appendChild(video)
			 var __video=document.getElementById('f_'+r[2])
			 if (r[1] == 'youtube') {
			     __video.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="422" height="344" id="f_'+r[2]+ '"><param name="movie" value="http://www.youtube.com/v/'+r[2]+'?fs=1&amp;hl=ru_RU"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param></object>'
			 } else if (r[1] == 'smi2') { 
			     __video.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="422" height="344" id="f_'+r[2]+ '" data="http://smi2.ru./lib/videoplayer/player.swf"><param name="bgcolor" value="ffffff"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"><param name="flashvars" value="file=http://smi2.ru/data/video/flv/'+r[2]+'.flv&m=video"></object>'
			 } else if (r[1] == 'rutube') {

			 }

		     } else {

			 if (r[1] == 'youtube') {
			     var video = document.createElement('object')
			     video.width='425'; video.height='344'
			     var __p1 = document.createElement('param')
			     __p1.name='movie'; __p1.value='http://www.youtube.com/v/'+r[2]+'?fs=1&amp;hl=ru_RU'
			     video.appendChild(__p1)
			     var __p2 = document.createElement('param')
			     __p2.name='allowFullScreen'; __p2.value='true'
			     video.appendChild(__p2)
			     var __p3 = document.createElement('param')
			     __p3.name='allowscriptaccess'; __p3.value='always'
			     video.appendChild(__p3)
			     var embed = document.createElement('embed')
			     embed.src = __p1.value
			     embed.allowscriptaccess='always'
			     embed.allowfullscreen='true'

			 } else if (r[1] == 'rutube') {

			     var video = document.createElement('object')
			     video.width='425'; video.height='344'
			     var __p1 = document.createElement('param')
			     __p1.name='movie'; __p1.value='http://video.rutube.ru/'+r[2]
			     video.appendChild(__p1)
			     var __p2 = document.createElement('param')
			     __p2.name='allowFullScreen'; __p2.value='true'
			     video.appendChild(__p2)
			     var __p3 = document.createElement('param')
			     __p3.name='wmode'; __p3.value='window'
			     video.appendChild(__p3)
			     var embed = document.createElement('embed')
			     embed.src = __p1.value; embed.allowfullscreen='true'; embed.wmode = 'window'

			 } else if (r[1] == 'smi2') { 

			     var video = document.createElement('object')
			     video.width='425'; video.height='344'
			     video.type='application/x-shockwave-flash' 
			     video.data='http://smi2.ru/lib/videoplayer/player.swf';
			     var __p1 = document.createElement('param')
			     __p1.name='flashvars'; __p1.value='file=http://smi2.ru/data/video/flv/'+r[2]+'.flv?c='+Math.floor(Math.random()*100)+'&m=video'
			     video.appendChild(__p1)
			     var __p5 = document.createElement('param')
			     __p5.name='movie'; __p5.value='http://smi2.ru/lib/videoplayer/player.swf'
			     video.appendChild(__p5)
			     var __p2 = document.createElement('param')
			     __p2.name='allowFullScreen'; __p2.value='true'
			     video.appendChild(__p2);
			     var __p3 = document.createElement('param')
			     __p3.name='allowscriptaccess'; __p3.value='always'
			     video.appendChild(__p3);
			     var __p4 = document.createElement('param')
			     __p4.name='bgcolor'; __p4.value='ffffff'
			     video.appendChild(__p4)
			     var embed = document.createElement('embed')
			     embed.src = 'http://smi2.ru/lib/videoplayer/player.swf'
			     embed.allowscriptaccess='always'; embed.allowfullscreen='true'

			 } else if (r[1] == 'smotri') {

			     var video = document.createElement('object')
			     video.width='425'; video.height='344'
			     var __p1 = document.createElement('param')
			     __p1.name='movie'; 
			     __p1.value='http://pics.smotri.com/player.swf?file='+r[2]+'&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml'
			     video.appendChild(__p1)
			     var __p2 = document.createElement('param')
			     __p2.name='allowFullScreen'; __p2.value='always'
			     video.appendChild(__p2)
			     var __p3 = document.createElement('param')
			     __p3.name='allowScriptAccess'; __p3.value='window'
			     video.appendChild(__p3)
			     var __p4 = document.createElement('param')
			     __p4.name='bgcolor'; __p4.value='#ffffff'
			     video.appendChild(__p4)
			     var embed = document.createElement('embed')
			     embed.src = __p1.value; embed.allowfullscreen='true'; embed.wmode = 'opaque'

			 }

			 if (r[1] == 'youtube' || r[1] == 'smi2' || r[1] == 'rutube' || r[1] == 'smotri') {
			     embed.type = 'application/x-shockwave-flash'
			     embed.width=video.width 
			     embed.height=video.height
			     video.appendChild(embed)
			     node.appendChild(video)
			 }

		     }
		 }},

	audio: { regex: rx.audio,
		 build: function(node, r, options) {
		     if ($.browser.msie && navigator.appVersion.indexOf("Win") != -1) {
			 var video = document.createElement('object')
			 video.width='425'
			 video.height='344'
			 video.id='f_'+r[2]
			 node.appendChild(video)
			 var __video=document.getElementById('f_'+r[2])
			 if (r[1] == 'prostopleer') {
			     __video.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="411" height="28" id="f_'+r[2]+ '"><param name="movie" value="http://embed.prostopleer.com/track?id='+r[2]+'"></param></object>'
			 } 

		     } else {

			 if (r[1] == 'prostopleer') {
			     var video = document.createElement('object')
			     video.width='411'; video.height='28'
			     var __p1 = document.createElement('param')
			     __p1.name='movie'; 
			     __p1.value='http://embed.prostopleer.com/track?id='+r[2]
			     video.appendChild(__p1)
			     var embed = document.createElement('embed')
			     embed.src = __p1.value
			     embed.type = 'application/x-shockwave-flash'
			     embed.width=video.width 
			     embed.height=video.height
			     video.appendChild(embed)
			     node.appendChild(video)
			 }

		     }
		 }},


        namedUri: { regex: '\\[\\[(' + rx.uri + ')\\|(' + rx.linkText + ')\\]\\]',
            build: function(node, r, options) {
                var link = document.createElement('a');
                link.href = r[1];
                if (options && options.isPlainUri) {
                    link.appendChild(document.createTextNode(r[2]));
                }
                else {
                    this.apply(link, r[2], options);
                }
                node.appendChild(link);
            } },

        namedLink: { regex: '\\[\\[(' + rx.link + ')\\|(' + rx.linkText + ')\\]\\]',
            build: function(node, r, options) {
                var link = document.createElement('a');
                
                link.href = options && options.linkFormat
                    ? formatLink(r[1].replace(/~(.)/g, '$1'), options.linkFormat)
                    : r[1].replace(/~(.)/g, '$1');
                this.apply(link, r[2], options);
                
                node.appendChild(link);
            } },

        unnamedUri: { regex: '\\[\\[(' + rx.uri + ')\\]\\]',
            build: 'dummy' },
        unnamedLink: { regex: '\\[\\[(' + rx.link + ')\\]\\]',
            build: 'dummy' },
        unnamedInterwikiLink: { regex: '\\[\\[(' + rx.interwikiLink + ')\\]\\]',
            build: 'dummy' },

        rawUri: { regex: '(' + rx.rawUri + ')',
            build: 'dummy' },

        escapedSequence: { regex: '~(' + rx.rawUri + '|.)', capture: 1,
            tag: 'span', attrs: { 'class': 'escaped' } },
        escapedSymbol: { regex: /~(.)/, capture: 1,
            tag: 'span', attrs: { 'class': 'escaped' } }
    };

    g.unnamedUri.build = g.rawUri.build = function(node, r, options) {
        if (!options) { options = {}; }
        options.isPlainUri = true;
        g.namedUri.build.call(this, node, Array(r[0], r[1], r[1]), options);
    };
    g.unnamedLink.build = function(node, r, options) {
        g.namedLink.build.call(this, node, Array(r[0], r[1], r[1]), options);
    };
    g.namedInterwikiLink = { regex: '\\[\\[(' + rx.interwikiLink + ')\\|(' + rx.linkText + ')\\]\\]',
        build: function(node, r, options) {
                var link = document.createElement('a');
                
                var m, f;
                if (options && options.interwiki) {
                m = r[1].match(/(.*?):(.*)/);
                f = options.interwiki[m[1]];
            }
            
            if (typeof f == 'undefined') {
                if (!g.namedLink.apply) {
                    g.namedLink = new this.constructor(g.namedLink);
                }
                return g.namedLink.build.call(g.namedLink, node, r, options);
            }

            link.href = formatLink(m[2].replace(/~(.)/g, '$1'), f);
            
            this.apply(link, r[2], options);
            
            node.appendChild(link);
        }
    };
    g.unnamedInterwikiLink.build = function(node, r, options) {
        g.namedInterwikiLink.build.call(this, node, Array(r[0], r[1], r[1]), options);
    };
    g.namedUri.children = g.unnamedUri.children = g.rawUri.children =
            g.namedLink.children = g.unnamedLink.children =
            g.namedInterwikiLink.children = g.unnamedInterwikiLink.children =
        [ g.escapedSymbol, g.img, g.video, g.audio ];

    for (var i = 1; i <= 6; i++) {
        g['h' + i] = { tag: 'h' + i, capture: 2,
            regex: '(^|\\n)[ \\t]*={' + i + '}[ \\t]' +
                   '([^~]*?(~(.|(?=\\n)|$))*)[ \\t]*=*\\s*(\\n|$)'
        };
    }

    g.ulist.children = g.olist.children = [ g.li ];
    g.li.children = [ g.ulist, g.olist ];
    g.li.fallback = g.text;

    g.table.children = [ g.tr ];
    g.tr.children = [ g.th, g.td ];
    g.td.children = [ g.singleLine ];
    g.th.children = [ g.singleLine ];

    g.h1.children = g.h2.children = g.h3.children =
            g.h4.children = g.h5.children = g.h6.children =
            g.singleLine.children = g.paragraph.children =
            g.text.children = g.strong.children = g.em.children =
        [ g.escapedSequence, g.strong, g.em, g.br, g.rawUri,
            g.namedUri, g.namedInterwikiLink, g.namedLink,
            g.unnamedUri, g.unnamedInterwikiLink, g.unnamedLink,
            g.tt, g.img, g.video, g.audio];

    g.root = {
        children: [ g.h1, g.h2, g.h3, g.h4, g.h5, g.h6,
            g.hr, g.ulist, g.olist, g.preBlock, g.table ],
        fallback: { children: [ g.paragraph ] }
    };

    Parse.Simple.Base.call(this, g, options);
};

Parse.Simple.Creole.prototype = new Parse.Simple.Base();

Parse.Simple.Creole.prototype.constructor = Parse.Simple.Creole;
;/**
 * jQuery SMI2 Editor
 * @author Sergey Khripunov <gzim9x@gmail.com>
 * @website http://smi2.ru
 * @version 0.1
 */
(function($) {

    var parser = new Parse.Simple.Creole({forIE: document.all})

    var methods = { init: function(options) {


        return this.each(function() {
            var $this = $(this)
            if (!$this.parents('.smi2editor').length)
                methods.create($this, options)
        })

    },

        /**
         * Создание окружения редактора
         */
        create: function(obj, options) {

            if (typeof options === 'undefined') options = {}

            var __id = obj.attr('id')
            var __name = obj.attr('name')
            var __text = obj.text()

            options.viewtype = 'extend'
            if (typeof options.viewtype !== 'undefined' && options.viewtype == 'extend') {
                var __buttons = [
                    {c:'b_bold', pos:-1},
                    {c:'b_cursive', pos:-21},
                    {c:'b_link', pos:-42},
                    {c:'b_img', pos:-61},
                    {c:'b_video', pos:-81},
                    {c:'b_ulist', pos:-101},
                    {c:'b_olist', pos:-121}
                ]
            } else
                var __buttons = [
                    {c:'b_bold', pos:0},
                    {c:'b_cursive', pos:-20},
                    {c:'b_link', pos:-40}
                ]
            var __menu = []
            for (var i = 0,l = __buttons.length; i < l; i++)
                __menu.push(['<input type="button" value="" class="smi2editorbutton ',
                    __buttons[i].c,
                    '" style="width:20px;background-position:0 ',
                    __buttons[i].pos,
                    'px" unselectable>'].join(''))

            obj.replaceWith(['<div class="smi2editor">',
                '<div id="smi2marker"></div>',
                '<div class="smi2editorpreview"></div>',
                '<div class="smi2editormenu">',
                __menu.join(''),
                '<div class="smi2editor_b_help">' + help + '</div>',
                '<div class="smi2editor_b_preview">' + preview + '</div>',
                '</div>',
                '<textarea class="smi2editortext" id="',
                __id,
                '" name="',
                __name,
                '" style="font-family: Arial, Tahoma, Verdana, Helvetica, sans-serif;margin:0">',
                __text,
                '</textarea>',
                '</div>'].join(''))

            var __marker = $('#smi2marker')
            obj = $('#smi2marker').parent()
            __marker.remove()

            obj.find('.smi2editortext').keyup(function() {
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })

            obj.find('.smi2editor_b_preview').click(function() {
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview')) {
                    __elem.data('preview', 0)
                    $(this).removeClass('preview_on')
                    __elem.find('.smi2editorpreview').empty()
                } else {
                    __elem.data('preview', 1)
                    $(this).addClass('preview_on')
                    methods.renderWiki(__elem)
                }
            })

            obj.find('.smi2editor_b_help').click(function() {

                if ($('.smi2editorhelp').is(":visible")) {
                    $(this).removeClass('preview_on')
                    methods.closeWindow()
                } else {
                    var __s = ['<table class="smi2editorhelp" cellpadding="1" cellspacing="1" border="0" width="100%">',
                        '<tr>',
                        '    <th>' + formatting + '</th>',
                        '    <th>' + syntax + '</th>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + bold + '</td>',
                        '    <td>**' + bold + '**</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + italic + '</td>',
                        '    <td>//' + italic + '//</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + link + '</td>',
                        '    <td>[[' + link_url + ']]</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + picture + '</td>',
                        '    <td>{{' + picture_url + '}}</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + paragraph + '</td>',
                        '    <td>' + empty_line + '<br /><br />' + new_paragraph + '</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + video + ':</td>',
                        '    <td>{video:smi2|' + video_code + '}<br />{video:youtube|' + video_code + '}<br />{video:rutube|' + video_code + '}</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + audio + ':</td>',
                        '    <td>{audio:prostopleer|' + audio_code + '}</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + unordered_list + '</td>',
                        '    <td>* ' + list_element + '</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + numbered_list + '</td>',
                        '    <td># ' + list_element + '</td>',
                        '</tr>',
                        '<tr>',
                        '    <td>' + table + '</td>',
                        '    <td>|=' + header + ' 1   |=' + header + ' 2             |<br />|' + cell + ' 1.1     |' + cell + ' 1.2 |<br>|' + cell + ' 2.1     |' + cell + ' 2.2                |</td>',
                        '</tr>',
                        '</table>'].join('')
                    $(this).addClass('preview_on')
                    var __pos = obj.offset()
                    methods.showWindow(reference_info, __s, {left:__pos.left + 100, top:__pos.top + 40 - 250}, 320, 320)
                }

            })

            obj.find('.smi2editormenu .b_bold').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                methods.insertTag(obj.find('.smi2editortext'),
                    '**',
                    (__sel.length) ? '**' : bold_ + '**',
                    __sel)
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })


            obj.find('.smi2editormenu .b_cursive').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                methods.insertTag(obj.find('.smi2editortext'),
                    '//',
                    (__sel.length) ? '//' : italic_ + '//',
                    __sel)
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })

            obj.find('.smi2editormenu .b_link').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                var __s = [specify_link_url + ':<br />',
                    '<input type="text" id="smi2editor_link" value="http://"><br />',
                    '<div class="smi2editorwindow_b">',
                    '<input type="button" value="ok" id="smi2editor_link_submit" />',
                    '<input type="button" value="отмена" onclick="$.fn.smi2editor(\'closeWindow\')" />',
                    '</div>'].join('')
                var __pos = obj.offset()
                var __height = $(this).parents('.smi2editor').find('.smi2editorpreview').height()
                methods.showWindow(insert_link, __s, {left:__pos.left + 100, top:__pos.top + 40 + __height})
                $('#smi2editor_link_submit').click(function() {
                    if ($('#smi2editor_link').val().length) {
                        methods.insertTag(obj.find('.smi2editortext'),
                            ['[[',
                                $('#smi2editor_link').val(),
                                (__sel.length) ? '|' : null].join(''),
                            ']]',
                            __sel)
                        if (obj.data('preview'))
                            methods.renderWiki(obj)
                    }
                    methods.closeWindow()
                })
            })

            obj.find('.smi2editormenu .b_img').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                var __s = ['<form action="/smi2editor.php" method="post" enctype="multipart/form-data" id="smi2editorformpreimg">',
                    specify_picture_url + ':<br>',
                    '<input type="text" name="smi2editorpurl" id="smi2editor_img" value="http://" /><br />',
                    or_browse + ':<br />',
                    '<input type="file" name="smi2editorpimg" /><br /><br />',
                    '<small>- ' + allowed_ext + ' jpeg, jpg, gif, bmp, png.<br />',
                    maximum_size + '-  5 Мб.</small>',
                    '<div class="smi2editorwindow_b">',
                    '<input type="submit" value="ok" id="smi2editor_img_submit" />',
                    '<input type="button" value="' + cancel + '" onclick="$.fn.smi2editor(\'closeWindow\')" />',
                    '</div>',
                    '<iframe id="smi2editor_uplfile" name="smi2editor_upltarget" src="/js/iframe.html" style="width:0;height:0;border:0"></iframe>',
                    '</form>'].join('')
                document.domain = document.domain
                var __pos = $(this).parents('.smi2editor').offset()
                var __height = $(this).parents('.smi2editor').find('.smi2editorpreview').height()
                methods.showWindow(insert_picture, __s, {left:__pos.left + 100, top:__pos.top + 40 + __height})

                $('#smi2editor_img_submit').click(function() {
                    var __height = $(this).parents('.smi2editor').find('.smi2editorpreview').height()
                    $('.smi2editorwindow').hide()
                    methods.showWaitWindow(upload_picture, {left:__pos.left + 100, top:__pos.top + 40 + __height})
                    $('#smi2editor_uplfile').load(function() {
                        __json = eval('(' + $(this).contents().find('body').text() + ')')
                        if (__json.s) {
                            methods.insertTag(obj.find('.smi2editortext'),
                                ['{{',__json.url,'}}'].join(''),
                                '',
                                __sel)
                            if (obj.data('preview'))
                                methods.renderWiki(obj)
                        } else {
                            alert(picture_not_uploaded)
                        }
                        $('.smi2editorwait').remove()
                        methods.closeWindow()
                    })
                    $('#smi2editorformpreimg').attr('target', 'smi2editor_upltarget').submit()
                    return false;
                })

            })

            obj.find('.smi2editormenu .b_video').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                var __s = [specify_video_url + ' (YouTube, RuTube, Smotri.com) ' + or_audio + ' (prostopleer):<br />',
                    '<input type="text" id="smi2editor_video" value="http://"><br />',
                    or_browse + ':<br />',
                    '<small>(.mp4, .avi, .mpg, .mov, .flv, .wmv - ' + size_under_25 + ')</small>',
                    '<form id="form1" action="upload_video.php" method="post" enctype="multipart/form-data">',
                    '<div class="fieldset flash" id="fsUploadProgress">',
                    '<span class="legend"></span>',
                    '</div>',
                    '<div id="divStatus"></div>',
                    '<div>',
                    '<span id="spanButtonPlaceHolder"></span>',
                    '<input id="btnCancel" type="button" value="Cancel All Uploads" disabled="disabled" style="display:none" />',
                    '</div>',
                    '</form>',
                    '<div class="smi2editorwindow_b">',
                    '<input type="button" value="ok" id="smi2editor_video_submit" />',
                    '<input type="button" value="' + cancel + '" onclick="$.fn.smi2editor(\'closeWindow\'); try {swfu.cancelQueue()} catch (e) {}">',
                    '</div>'].join('')
                var __pos = obj.offset()
                var __height = $(this).parents('.smi2editor').find('.smi2editorpreview').height()
                methods.showWindow(insert_video, __s, {left:__pos.left + 100, top:__pos.top + 40 + __height})

                try {
                    swfu = new SWFUpload({ flash_url : "/lib/swfupload2/swfupload.swf",
                        flash9_url : "/lib/swfupload2/swfupload_fp9.swf",
                        upload_url: "/upload_video.php",
                        post_params: {"PHPSESSID" : ""},
                        file_size_limit : "25 MB",
                        file_types : "*.mp4;*.avi;*.mpg;*.mov;*.flv;*.wmv",
                        file_types_description : "Video Files",
                        file_upload_limit : 1,
                        file_queue_limit : 1,
                        custom_settings : { progressTarget : "fsUploadProgress",
                            cancelButtonId : "btnCancel"
                        },
                        debug: false,

                        // Button settings
                        button_width: "100",
                        button_height: "24",
                        button_placeholder_id: "spanButtonPlaceHolder",
                        button_text: '<span class="theFont">' + browse + '</span>',
                        button_text_style: ".theFont { font-size:12px; }",
                        button_text_left_padding: 12,
                        button_text_top_padding: 3,

                        // The event handler functions are defined in handlers.js
                        swfupload_preload_handler : preLoad,
                        swfupload_load_failed_handler : loadFailed,
                        file_queued_handler : fileQueued,
                        file_queue_error_handler : fileQueueError,
                        file_dialog_complete_handler : fileDialogComplete,
                        upload_start_handler : uploadStart,
                        upload_progress_handler : uploadProgress,
                        upload_error_handler : uploadError,
                        upload_success_handler : uploadSuccess,
                        upload_complete_handler : uploadComplete,
                        queue_complete_handler : queueComplete // Queue plugin event

                    })
                } catch (ex) {
                }

                $('#smi2editor_video_submit').click(function() {

                    var __vlink = $('#smi2editor_video').val()

                    if (typeof window.___videoid === 'undefined') { // вставка видео из ссылки

                        var __site = false, __typecontext = false

                        if (__vlink.indexOf("youtube") > 0) {
                            __site = 'youtube';
                            __typecontext = 'video'
                        } else if (__vlink.indexOf("rutube") > 0) {
                            __site = 'rutube';
                            __typecontext = 'video'
                        } else if (__vlink.indexOf("smotri") > 0) {
                            __site = 'smotri';
                            __typecontext = 'video'
                        } else if (__vlink.indexOf("prostopleer") > 0) {
                            __site = 'prostopleer';
                            __typecontext = 'audio'
                        }

                        if (__site && __typecontext) {

                            if (__typecontext == 'video')
                                var res_id = (__site == 'smotri') ? __vlink.split('id=')[1] : __vlink.split('v=')[1]
                            else
                                var res_id = __vlink.split('tracks/')[1]

                            if (typeof res_id !== 'undefined') {
                                if (__typecontext == 'video' && __site != 'smotri') {
                                    var ampersandPosition = res_id.indexOf('&')
                                    if (ampersandPosition != -1)
                                        res_id = res_id.substring(0, ampersandPosition)
                                }

                                methods.insertTag(obj.find('.smi2editortext'),
                                    ['{',
                                        __typecontext,
                                        ':',
                                        __site,
                                        '|',
                                        res_id.replace(/(^\s+)|(\s+$)/g, ''),
                                        '}'].join(''),
                                    '',
                                    __sel)
                            } else
                                alert(wrong_adress + '...');

                        } else
                            alert(wrong_site + '...');


                    } else { // вставка загруженного видео
                        methods.insertTag(obj.find('.smi2editortext'),
                            ['{video:smi2|',
                                window.___videoid,
                                '}'].join(''),
                            '',
                            __sel)
                    }
                    if (obj.data('preview'))
                        methods.renderWiki(obj)
                    methods.closeWindow()
                })
            })

            obj.find('.smi2editormenu .b_ulist').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                methods.insertTag(obj.find('.smi2editortext'),
                    '\n* ',
                    (__sel.length) ? ' \n' : unordered_elem + '\n',
                    __sel)
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })

            obj.find('.smi2editormenu .b_olist').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                methods.insertTag(obj.find('.smi2editortext'),
                    '\n# ',
                    (__sel.length) ? ' \n' : numbered_elem + '\n',
                    __sel)
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })

            obj.find('.smi2editormenu .b_table').click(function() {
                var __sel = methods.getSelection(obj.find('.smi2editortext'))
                methods.insertTag(obj.find('.smi2editortext'),
                    '\n|' + cell + ' 1.1     |' + two_lines + ' \\\\' + in_cell + ' 1.2 |\n|' + cell + ' 2.1     |' + cell + ' 2.2                |\n',
                    '',
                    __sel.start,
                    __sel.end)
                var __elem = $(this).parents('.smi2editor')
                if (__elem.data('preview'))
                    methods.renderWiki(__elem)
            })
        },

        renderWiki: function(obj) {
            var __elem = obj.find('.smi2editorpreview')
            __elem.empty()
            parser.parse(__elem[0], obj.find('.smi2editortext').val())
        },


        renderNode: function(__node, __html) {
            parser.parse(__node, __html)
        },


        importWiki: function(__html) {

            return parser.importHTML(__html)

        },

        getSelection: function(__obj) {

            if (document.selection) {
                __obj.focus()
                var __selection = document.selection.createRange()
                return {selection:__selection,
                    length:__selection.text.length}
            } else {
                return {start:__obj[0].selectionStart,
                    end:__obj[0].selectionEnd,
                    length:__obj[0].selectionEnd - __obj[0].selectionStart}
            }
        },

        /**
         * Вставка тега
         */
        insertTag: function(__obj, tag1, tag2, sel_obj) {
            var __textarea = __obj[0], __scrollTop = __textarea.scrollTop
            if (typeof sel_obj.selection !== 'undefined') {
                sel_obj.selection.text = [tag1,sel_obj.selection.text,tag2].join('')
            } else {
                var __length = __textarea.value.length
                var sel = __textarea.value.substring(sel_obj.start, sel_obj.end)
                var rep = [tag1,sel,tag2].join('')
                __textarea.value = [__textarea.value.substring(0, sel_obj.start),
                    rep,
                    __textarea.value.substring(sel_obj.end, __length)].join('')
            }
            __textarea.scrollTop = __scrollTop
        },

        /**
         * Показать всплывающее окно
         */
        showWindow: function(__subject, __text, __pos, __width, __height) {

            methods.closeWindow()

            if ($.browser.msie) {
                __scrollTop = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset || 0
                __pos.top = ($(window).height() - (__height || 300)) / 2 + __scrollTop
            }

            $('body').append(['<div class="smi2editorwindow" style="left:',
                __pos.left,
                'px;top:',
                __pos.top,
                'px;',
                (typeof __width !== 'undefined') ? 'width:' + __width + 'px;' : null,
                (typeof __height !== 'undefined') ? 'height:' + __height + 'px;' : null,
                '">',
                '<div class="smi2editorwindow_c"></div>',
                '<div class="smi2editorwindow_h">',
                __subject,
                '</div>',
                '<div class="smi2editorwindow_t">',
                __text,
                '</div>',
                '</div>'].join(''))
            $('.smi2editorwindow_c').click(function() {
                methods.closeWindow()
            })

        },

        closeWindow: function() {
            if ($('.smi2editorhelp').is(":visible"))
                $('.smi2editor_b_help').removeClass('preview_on')
            $('.smi2editorwindow').remove()
        },

        /**
         * Показать окно ожидания
         */
        showWaitWindow: function(__subject, __pos) {

            $('body').append(['<div class="smi2editorwait" style="left:',
                __pos.left,
                'px;top:',
                __pos.top,
                'px">',
                '<div class="smi2editorwindow_h">',
                __subject,
                '</div>',
                '<img src="/img/ajax-circle.gif" class="loader">',
                '</div>'].join(''))
        } }

    $.fn.smi2editor = function(method) {

        // Method calling logic
        if (methods[method]) {

            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));

        } else if (typeof method === 'object' || ! method) {

            return methods.init.apply(this, arguments);

        } else {

            $.error('Method ' + method + ' does not exist on jQuery.smi2editor');

        }

        return this.each(function() {
        })

    }

})(jQuery);/*!
 * jQuery Form Plugin
 * version: 2.82 (15-JUN-2011)
 * @requires jQuery v1.3.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

/*
	Usage Note:
	-----------
	Do not use both ajaxSubmit and ajaxForm on the same form.  These
	functions are intended to be exclusive.  Use ajaxSubmit if you want
	to bind your own submit handler to the form.  For example,

	$(document).ready(function() {
		$('#myForm').bind('submit', function(e) {
			e.preventDefault(); // <-- important
			$(this).ajaxSubmit({
				target: '#output'
			});
		});
	});

	Use ajaxForm when you want the plugin to manage all the event binding
	for you.  For example,

	$(document).ready(function() {
		$('#myForm').ajaxForm({
			target: '#output'
		});
	});

	When using ajaxForm, the ajaxSubmit function will be invoked for you
	at the appropriate time.
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
	// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
	if (!this.length) {
		log('ajaxSubmit: skipping submit process - no element selected');
		return this;
	}
	
	var method, action, url, $form = this;;

	if (typeof options == 'function') {
		options = { success: options };
	}

	method = this.attr('method');
	action = this.attr('action');
	url = (typeof action === 'string') ? $.trim(action) : '';
	url = url || window.location.href || '';
	if (url) {
		// clean url (don't include hash vaue)
		url = (url.match(/^([^#]+)/)||[])[1];
	}

	options = $.extend(true, {
		url:  url,
		success: $.ajaxSettings.success,
		type: method || 'GET',
		iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
	}, options);

	// hook for manipulating the form data before it is extracted;
	// convenient for use with rich editors like tinyMCE or FCKEditor
	var veto = {};
	this.trigger('form-pre-serialize', [this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
		return this;
	}

	// provide opportunity to alter form data before it is serialized
	if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSerialize callback');
		return this;
	}

	var n,v,a = this.formToArray(options.semantic);
	if (options.data) {
		options.extraData = options.data;
		for (n in options.data) {
			if(options.data[n] instanceof Array) {
				for (var k in options.data[n]) {
					a.push( { name: n, value: options.data[n][k] } );
				}
			}
			else {
				v = options.data[n];
				v = $.isFunction(v) ? v() : v; // if value is fn, invoke it
				a.push( { name: n, value: v } );
			}
		}
	}

	// give pre-submit callback an opportunity to abort the submit
	if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSubmit callback');
		return this;
	}

	// fire vetoable 'validate' event
	this.trigger('form-submit-validate', [a, this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
		return this;
	}

	var q = $.param(a);

	if (options.type.toUpperCase() == 'GET') {
		options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
		options.data = null;  // data is null for 'get'
	}
	else {
		options.data = q; // data is the query string for 'post'
	}

	var callbacks = [];
	if (options.resetForm) {
		callbacks.push(function() { $form.resetForm(); });
	}
	if (options.clearForm) {
		callbacks.push(function() { $form.clearForm(); });
	}

	// perform a load on the target only if dataType is not provided
	if (!options.dataType && options.target) {
		var oldSuccess = options.success || function(){};
		callbacks.push(function(data) {
			var fn = options.replaceTarget ? 'replaceWith' : 'html';
			$(options.target)[fn](data).each(oldSuccess, arguments);
		});
	}
	else if (options.success) {
		callbacks.push(options.success);
	}

	options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
		var context = options.context || options;   // jQuery 1.4+ supports scope context 
		for (var i=0, max=callbacks.length; i < max; i++) {
			callbacks[i].apply(context, [data, status, xhr || $form, $form]);
		}
	};

	// are there files to upload?
	var fileInputs = $('input:file', this).length > 0;
	var mp = 'multipart/form-data';
	var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

	// options.iframe allows user to force iframe mode
	// 06-NOV-09: now defaulting to iframe mode if file input is detected
   if (options.iframe !== false && (fileInputs || options.iframe || multipart)) {
	   // hack to fix Safari hang (thanks to Tim Molendijk for this)
	   // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
	   if (options.closeKeepAlive) {
		   $.get(options.closeKeepAlive, function() { fileUpload(a); });
		}
	   else {
		   fileUpload(a);
		}
   }
   else {
		// IE7 massage (see issue 57)
		if ($.browser.msie && method == 'get') { 
			var ieMeth = $form[0].getAttribute('method');
			if (typeof ieMeth === 'string')
				options.type = ieMeth;
		}
		$.ajax(options);
   }

	// fire 'notify' event
	this.trigger('form-submit-notify', [this, options]);
	return this;


	// private function for handling file uploads (hat tip to YAHOO!)
	function fileUpload(a) {
		var form = $form[0], i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;

        if (a) {
        	// ensure that every serialized input is still enabled
          	for (i=0; i < a.length; i++) {
            	$(form[a[i].name]).attr('disabled', false);
          	}
        }

		if ($(':input[name=submit],:input[id=submit]', form).length) {
			// if there is an input with a name or id of 'submit' then we won't be
			// able to invoke the submit fn on the form (at least not x-browser)
			alert('Error: Form elements must not have name or id of "submit".');
			return;
		}
		
		s = $.extend(true, {}, $.ajaxSettings, options);
		s.context = s.context || s;
		id = 'jqFormIO' + (new Date().getTime());
		if (s.iframeTarget) {
			$io = $(s.iframeTarget);
			n = $io.attr('name');
			if (n == null)
			 	$io.attr('name', id);
			else
				id = n;
		}
		else {
			$io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
			$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
		}
		io = $io[0];


		xhr = { // mock object
			aborted: 0,
			responseText: null,
			responseXML: null,
			status: 0,
			statusText: 'n/a',
			getAllResponseHeaders: function() {},
			getResponseHeader: function() {},
			setRequestHeader: function() {},
			abort: function(status) {
				var e = (status === 'timeout' ? 'timeout' : 'aborted');
				log('aborting upload... ' + e);
				this.aborted = 1;
				$io.attr('src', s.iframeSrc); // abort op in progress
				xhr.error = e;
				s.error && s.error.call(s.context, xhr, e, status);
				g && $.event.trigger("ajaxError", [xhr, s, e]);
				s.complete && s.complete.call(s.context, xhr, e);
			}
		};

		g = s.global;
		// trigger ajax global events so that activity/block indicators work like normal
		if (g && ! $.active++) {
			$.event.trigger("ajaxStart");
		}
		if (g) {
			$.event.trigger("ajaxSend", [xhr, s]);
		}

		if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
			if (s.global) {
				$.active--;
			}
			return;
		}
		if (xhr.aborted) {
			return;
		}

		// add submitting element to data if we know it
		sub = form.clk;
		if (sub) {
			n = sub.name;
			if (n && !sub.disabled) {
				s.extraData = s.extraData || {};
				s.extraData[n] = sub.value;
				if (sub.type == "image") {
					s.extraData[n+'.x'] = form.clk_x;
					s.extraData[n+'.y'] = form.clk_y;
				}
			}
		}
		
		var CLIENT_TIMEOUT_ABORT = 1;
		var SERVER_ABORT = 2;

		function getDoc(frame) {
			var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
			return doc;
		}
		
		// take a breath so that pending repaints get some cpu time before the upload starts
		function doSubmit() {
			// make sure form attrs are set
			var t = $form.attr('target'), a = $form.attr('action');

			// update form attrs in IE friendly way
			form.setAttribute('target',id);
			if (!method) {
				form.setAttribute('method', 'POST');
			}
			if (a != s.url) {
				form.setAttribute('action', s.url);
			}

			// ie borks in some cases when setting encoding
			if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
				$form.attr({
					encoding: 'multipart/form-data',
					enctype:  'multipart/form-data'
				});
			}

			// support timout
			if (s.timeout) {
				timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
			}
			
			// look for server aborts
			function checkState() {
				try {
					var state = getDoc(io).readyState;
					log('state = ' + state);
					if (state.toLowerCase() == 'uninitialized')
						setTimeout(checkState,50);
				}
				catch(e) {
					log('Server abort: ' , e, ' (', e.name, ')');
					cb(SERVER_ABORT);
					timeoutHandle && clearTimeout(timeoutHandle);
					timeoutHandle = undefined;
				}
			}

			// add "extra" data to form if provided in options
			var extraInputs = [];
			try {
				if (s.extraData) {
					for (var n in s.extraData) {
						extraInputs.push(
							$('<input type="hidden" name="'+n+'" />').attr('value',s.extraData[n])
								.appendTo(form)[0]);
					}
				}

				if (!s.iframeTarget) {
					// add iframe to doc and submit the form
					$io.appendTo('body');
	                io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
				}
				setTimeout(checkState,15);
				form.submit();
			}
			finally {
				// reset attrs and remove "extra" input elements
				form.setAttribute('action',a);
				if(t) {
					form.setAttribute('target', t);
				} else {
					$form.removeAttr('target');
				}
				$(extraInputs).remove();
			}
		}

		if (s.forceSync) {
			doSubmit();
		}
		else {
			setTimeout(doSubmit, 10); // this lets dom updates render
		}

		var data, doc, domCheckCount = 50, callbackProcessed;

		function cb(e) {
			if (xhr.aborted || callbackProcessed) {
				return;
			}
			try {
				doc = getDoc(io);
			}
			catch(ex) {
				log('cannot access response document: ', ex);
				e = SERVER_ABORT;
			}
			if (e === CLIENT_TIMEOUT_ABORT && xhr) {
				xhr.abort('timeout');
				return;
			}
			else if (e == SERVER_ABORT && xhr) {
				xhr.abort('server abort');
				return;
			}

			if (!doc || doc.location.href == s.iframeSrc) {
				// response not received yet
				if (!timedOut)
					return;
			}
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

			var status = 'success', errMsg;
			try {
				if (timedOut) {
					throw 'timeout';
				}

				var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
				log('isXml='+isXml);
				if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
					if (--domCheckCount) {
						// in some browsers (Opera) the iframe DOM is not always traversable when
						// the onload callback fires, so we loop a bit to accommodate
						log('requeing onLoad callback, DOM not available');
						setTimeout(cb, 250);
						return;
					}
					// let this fall through because server response could be an empty document
					//log('Could not access iframe DOM after mutiple tries.');
					//throw 'DOMException: not available';
				}

				//log('response detected');
                var docRoot = doc.body ? doc.body : doc.documentElement;
                xhr.responseText = docRoot ? docRoot.innerHTML : null;
				xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
				if (isXml)
					s.dataType = 'xml';
				xhr.getResponseHeader = function(header){
					var headers = {'content-type': s.dataType};
					return headers[header];
				};
                // support for XHR 'status' & 'statusText' emulation :
                if (docRoot) {
                    xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
                    xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
                }

				var dt = s.dataType || '';
				var scr = /(json|script|text)/.test(dt.toLowerCase());
				if (scr || s.textarea) {
					// see if user embedded response in textarea
					var ta = doc.getElementsByTagName('textarea')[0];
					if (ta) {
						xhr.responseText = ta.value;
                        // support for XHR 'status' & 'statusText' emulation :
                        xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
                        xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
					}
					else if (scr) {
						// account for browsers injecting pre around json response
						var pre = doc.getElementsByTagName('pre')[0];
						var b = doc.getElementsByTagName('body')[0];
						if (pre) {
							xhr.responseText = pre.textContent ? pre.textContent : pre.innerHTML;
						}
						else if (b) {
							xhr.responseText = b.innerHTML;
						}
					}
				}
				else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
					xhr.responseXML = toXml(xhr.responseText);
				}

                try {
                    data = httpData(xhr, s.dataType, s);
                }
                catch (e) {
                    status = 'parsererror';
                    xhr.error = errMsg = (e || status);
                }
			}
			catch (e) {
				log('error caught: ',e);
				status = 'error';
                xhr.error = errMsg = (e || status);
			}

			if (xhr.aborted) {
				log('upload aborted');
				status = null;
			}

            if (xhr.status) { // we've set xhr.status
                status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
            }

			// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
			if (status === 'success') {
				s.success && s.success.call(s.context, data, 'success', xhr);
				g && $.event.trigger("ajaxSuccess", [xhr, s]);
			}
            else if (status) {
				if (errMsg == undefined)
					errMsg = xhr.statusText;
				s.error && s.error.call(s.context, xhr, status, errMsg);
				g && $.event.trigger("ajaxError", [xhr, s, errMsg]);
            }

			g && $.event.trigger("ajaxComplete", [xhr, s]);

			if (g && ! --$.active) {
				$.event.trigger("ajaxStop");
			}

			s.complete && s.complete.call(s.context, xhr, status);

			callbackProcessed = true;
			if (s.timeout)
				clearTimeout(timeoutHandle);

			// clean up
			setTimeout(function() {
				if (!s.iframeTarget)
					$io.remove();
				xhr.responseXML = null;
			}, 100);
		}

		var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
			if (window.ActiveXObject) {
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = 'false';
				doc.loadXML(s);
			}
			else {
				doc = (new DOMParser()).parseFromString(s, 'text/xml');
			}
			return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
		};
		var parseJSON = $.parseJSON || function(s) {
			return window['eval']('(' + s + ')');
		};

		var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4

			var ct = xhr.getResponseHeader('content-type') || '',
				xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
				data = xml ? xhr.responseXML : xhr.responseText;

			if (xml && data.documentElement.nodeName === 'parsererror') {
				$.error && $.error('parsererror');
			}
			if (s && s.dataFilter) {
				data = s.dataFilter(data, type);
			}
			if (typeof data === 'string') {
				if (type === 'json' || !type && ct.indexOf('json') >= 0) {
					data = parseJSON(data);
				} else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
					$.globalEval(data);
				}
			}
			return data;
		};
	}
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *	is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *	used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
	// in jQuery 1.3+ we can fix mistakes with the ready state
	if (this.length === 0) {
		var o = { s: this.selector, c: this.context };
		if (!$.isReady && o.s) {
			log('DOM not ready, queuing ajaxForm');
			$(function() {
				$(o.s,o.c).ajaxForm(options);
			});
			return this;
		}
		// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
		log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
		return this;
	}

	return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
		if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
			e.preventDefault();
			$(this).ajaxSubmit(options);
		}
	}).bind('click.form-plugin', function(e) {
		var target = e.target;
		var $el = $(target);
		if (!($el.is(":submit,input:image"))) {
			// is this a child element of the submit el?  (ex: a span within a button)
			var t = $el.closest(':submit');
			if (t.length == 0) {
				return;
			}
			target = t[0];
		}
		var form = this;
		form.clk = target;
		if (target.type == 'image') {
			if (e.offsetX != undefined) {
				form.clk_x = e.offsetX;
				form.clk_y = e.offsetY;
			} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
				var offset = $el.offset();
				form.clk_x = e.pageX - offset.left;
				form.clk_y = e.pageY - offset.top;
			} else {
				form.clk_x = e.pageX - target.offsetLeft;
				form.clk_y = e.pageY - target.offsetTop;
			}
		}
		// clear form vars
		setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
	});
};

// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
	return this.unbind('submit.form-plugin click.form-plugin');
};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic) {
	var a = [];
	if (this.length === 0) {
		return a;
	}

	var form = this[0];
	var els = semantic ? form.getElementsByTagName('*') : form.elements;
	if (!els) {
		return a;
	}

	var i,j,n,v,el,max,jmax;
	for(i=0, max=els.length; i < max; i++) {
		el = els[i];
		n = el.name;
		if (!n) {
			continue;
		}

		if (semantic && form.clk && el.type == "image") {
			// handle image inputs on the fly when semantic == true
			if(!el.disabled && form.clk == el) {
				a.push({name: n, value: $(el).val()});
				a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
			}
			continue;
		}

		v = $.fieldValue(el, true);
		if (v && v.constructor == Array) {
			for(j=0, jmax=v.length; j < jmax; j++) {
				a.push({name: n, value: v[j]});
			}
		}
		else if (v !== null && typeof v != 'undefined') {
			a.push({name: n, value: v});
		}
	}

	if (!semantic && form.clk) {
		// input type=='image' are not found in elements array! handle it here
		var $input = $(form.clk), input = $input[0];
		n = input.name;
		if (n && !input.disabled && input.type == 'image') {
			a.push({name: n, value: $input.val()});
			a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
		}
	}
	return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
	//hand off to jQuery.param for proper encoding
	return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
	var a = [];
	this.each(function() {
		var n = this.name;
		if (!n) {
			return;
		}
		var v = $.fieldValue(this, successful);
		if (v && v.constructor == Array) {
			for (var i=0,max=v.length; i < max; i++) {
				a.push({name: n, value: v[i]});
			}
		}
		else if (v !== null && typeof v != 'undefined') {
			a.push({name: this.name, value: v});
		}
	});
	//hand off to jQuery.param for proper encoding
	return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *	  <input name="A" type="text" />
 *	  <input name="A" type="text" />
 *	  <input name="B" type="checkbox" value="B1" />
 *	  <input name="B" type="checkbox" value="B2"/>
 *	  <input name="C" type="radio" value="C1" />
 *	  <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $(':text').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $(':checkbox').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $(':radio').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *	   array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
	for (var val=[], i=0, max=this.length; i < max; i++) {
		var el = this[i];
		var v = $.fieldValue(el, successful);
		if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
			continue;
		}
		v.constructor == Array ? $.merge(val, v) : val.push(v);
	}
	return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
	var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
	if (successful === undefined) {
		successful = true;
	}

	if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
		(t == 'checkbox' || t == 'radio') && !el.checked ||
		(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
		tag == 'select' && el.selectedIndex == -1)) {
			return null;
	}

	if (tag == 'select') {
		var index = el.selectedIndex;
		if (index < 0) {
			return null;
		}
		var a = [], ops = el.options;
		var one = (t == 'select-one');
		var max = (one ? index+1 : ops.length);
		for(var i=(one ? index : 0); i < max; i++) {
			var op = ops[i];
			if (op.selected) {
				var v = op.value;
				if (!v) { // extra pain for IE...
					v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
				}
				if (one) {
					return v;
				}
				a.push(v);
			}
		}
		return a;
	}
	return $(el).val();
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function() {
	return this.each(function() {
		$('input,select,textarea', this).clearFields();
	});
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function() {
	var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
	return this.each(function() {
		var t = this.type, tag = this.tagName.toLowerCase();
		if (re.test(t) || tag == 'textarea') {
			this.value = '';
		}
		else if (t == 'checkbox' || t == 'radio') {
			this.checked = false;
		}
		else if (tag == 'select') {
			this.selectedIndex = -1;
		}
	});
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
	return this.each(function() {
		// guard against an input with the name of 'reset'
		// note that IE reports the reset function as an 'object'
		if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
			this.reset();
		}
	});
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
	if (b === undefined) {
		b = true;
	}
	return this.each(function() {
		this.disabled = !b;
	});
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
	if (select === undefined) {
		select = true;
	}
	return this.each(function() {
		var t = this.type;
		if (t == 'checkbox' || t == 'radio') {
			this.checked = select;
		}
		else if (this.tagName.toLowerCase() == 'option') {
			var $sel = $(this).parent('select');
			if (select && $sel[0] && $sel[0].type == 'select-one') {
				// deselect all other options
				$sel.find('option').selected(false);
			}
			this.selected = select;
		}
	});
};

// helper fn for console logging
function log() {
	var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
	if (window.console && window.console.log) {
		window.console.log(msg);
	}
	else if (window.opera && window.opera.postError) {
		window.opera.postError(msg);
	}
};

})(jQuery);
;// Constructor. 
// Create new Dklab_Realplexor object.
function Dklab_Realplexor(fullUrl, namespace, viaDocumentWrite)
{
	// Current JS library version.
	var VERSION = "1.32";

	// Detect current page hostname.
	var host = document.location.host;

	// Assign initial properties.
	if (!this.constructor._registry) this.constructor._registry = {}; // all objects registry
	this.version = VERSION;
	this._map = {};
	this._realplexor = null;
	this._namespace = namespace;
	this._login = null;
	this._iframeId = "mpl" + (new Date().getTime());
	this._iframeTag = 
		'<iframe'
		+ ' id="' + this._iframeId + '"'
		+ ' onload="' + 'Dklab_Realplexor' + '._iframeLoaded(&quot;' + this._iframeId + '&quot;)"'
		+ ' src="' + fullUrl + '?identifier=IFRAME&amp;HOST=' + host + '&amp;version=' + this.version + '"'
		+ ' style="position:absolute; width:200px; height: 200px; top: -1000px; visibility:hidden"' +
		'></iframe>';
	this._iframeCreated = false;
	this._needExecute = false;
	this._executeTimer = null;
	
	// Register this object in the registry (for IFRAME onload callback).
	this.constructor._registry[this._iframeId] = this;
	
	// Validate realplexor URL.
	if (!fullUrl.match(/^\w+:\/\/([^/]+)/)) {
		throw 'Dklab_Realplexor constructor argument must be fully-qualified URL, ' + fullUrl + ' given.';
	}
	var mHost = RegExp.$1;
	if (mHost != host && mHost.lastIndexOf("." + host) != mHost.length - host.length - 1) {
		throw 'Due to the standard XMLHttpRequest security policy, hostname in URL passed to Dklab_Realplexor (' + mHost + ') must be equals to the current host (' + host + ') or be its direct sub-domain.';
	} 
	
	// Create IFRAME if requested.
	if (viaDocumentWrite) {
		document.write(this._iframeTag);
		this._iframeCreated = true;
	}
	
	// Allow realplexor's IFRAME to access outer window.
	document.domain = host;

}

// Static function. 
// Called when a realplexor iframe is loaded.
Dklab_Realplexor._iframeLoaded = function(id)
{
	var th = this._registry[id];
	// use setTimeout to let IFRAME JavaScript code some time to execute.
	setTimeout(function() {
		var iframe = document.getElementById(id);
		th._realplexor = iframe.contentWindow.Dklab_Realplexor_Loader;
		if (th.needExecute) {
			th.execute();
		}
	}, 50);
}

// Set active login.
Dklab_Realplexor.prototype.logon = function(login) {
	this._login = login;
}

// Set the position from which we need to listen a specified ID.
Dklab_Realplexor.prototype.setCursor = function(id, cursor) {
	if (!this._map[id]) this._map[id] = { cursor: null, callbacks: [] };
	this._map[id].cursor = cursor;
	return this;
}

// Subscribe a new callback to specified ID.
// To apply changes and reconnect to the server, call execute()
// after a sequence of subscribe() calls.
Dklab_Realplexor.prototype.subscribe = function(id, callback) {
	if (!this._map[id]) this._map[id] = { cursor: null, callbacks: [] };
	var chain = this._map[id].callbacks;
	for (var i = 0; i < chain.length; i++) {
		if (chain[i] === callback) return this;
	}
	chain.push(callback);
	return this;
}

// Unsubscribe a callback from the specified ID.
// You do not need to reconnect to the server (see execute()) 
// to stop calling of this callback.
Dklab_Realplexor.prototype.unsubscribe = function(id, callback) {

	if (!this._map[id]) return this;
	if (callback == null) {
		this._map[id].callbacks = [];
		return this;
	}

	var chain = this._map[id].callbacks;
	for (var i = 0; i < chain.length; i++) {
		if (chain[i] === callback) {
			chain.splice(i, 1);
			return this;
		}
	}

	return this;
}

// Reconnect to the server and listen for all specified IDs.
// You should call this method after a number of calls to subscribe().
Dklab_Realplexor.prototype.execute = function() {
	// Control IFRAME creation.
	if (!this._iframeCreated) {
		var div = document.createElement('DIV');
		div.innerHTML = this._iframeTag;
		document.body.appendChild(div);
		this._iframeCreated = true;
	}
	
	// Check if the realplexor is ready (if not, schedule later execution).
	if (this._executeTimer) {
		clearTimeout(this._executeTimer);
		this._executeTimer = null;
	}
	var th = this;
	if (!this._realplexor) {
		this._executeTimer = setTimeout(function() { th.execute() }, 30);
		return;
	}
	
	// Realplexor loader is ready, run it.
	this._realplexor.execute(
		this._map, 
		this.constructor._callAndReturnException, 
		(this._login != null? this._login + "_" : "") + (this._namespace != null? this._namespace : "")
	);
}

// This is a work-around for stupid IE. Unfortunately IE cannot
// catch exceptions which are thrown from the different frame
// (in most cases). Please see
// http://blogs.msdn.com/jaiprakash/archive/2007/01/22/jscript-exceptions-not-handled-thrown-across-frames-if-thrown-from-a-expando-method.aspx
Dklab_Realplexor._callAndReturnException = function(func, args) {
	try {
		func.apply(null, args);
		return null;
	} catch (e) {
		return "" + e;
	}
};/**
 * Объект-плексор
 */
var domain = document.domain;

realplexor = {  

    /**
     * dklab reaplexor object 
     */
    plexor: false,
    
    /**
     * Инициализация 
     */
    create: function() {
	this.plexor = new Dklab_Realplexor("http://rpl."+document.domain);

    },

    /**
     * Подписка на канал
     */
    addChannel: function(rp_channel) {
	realplexor.plexor.subscribe(rp_channel, realplexor.eventHook)
	realplexor.plexor.execute()
    },

    /**
     * Отписаться от канала
     */
    removeChannel: function(rp_channel) {
	realplexor.plexor.unsubscribe(rp_channel, null)
	realplexor.plexor.execute()
    },

    /**
     * Маршрутизатор событий
     */
    eventHook: function(rp_data, rp_channel) {

	if (typeof rp_data.obj !== 'undefined') {

	    switch (rp_data.obj) {

	    case 'chat':
		chat.eventHook(rp_data, rp_channel)
		break

	    case 'comments':
		comments.eventHook(rp_data, rp_channel)
		break

        case 'finam_onair':
		finam_onair.eventHook(rp_data, rp_channel)
		break

	    default:
		chat.eventHook(rp_data, rp_channel)

	    }

	}

    }

}


$(document).ready(function() {

    realplexor.create()

});function v3vote(news_id, attitude) {
    var rating_elem = $('#news-rating-' + news_id);
    var rating = parseInt($(rating_elem).text());
    var change_rating = parseInt($('.data-user').attr('data-user-weight')*10);

    if (attitude == 'p') {
        if (!$('#news-plus-' + news_id).hasClass('selected')) {
            //ранее уже голосовал против
            if($('#news-minus-' + news_id).hasClass('vote_minus_icon_g')){
                change_rating = change_rating *2;
            }
            $('#news-plus-' + news_id).addClass('selected');
            $('#news-minus-' + news_id).removeClass('selected');
            $('#news-plus-' + news_id).removeClass('vote_plus_icon');
            $('#news-plus-' + news_id).addClass('vote_plus_icon_g');
            $('#news-minus-' + news_id).removeClass('vote_minus_icon_g');
            $('#news-minus-' + news_id).addClass('vote_minus_icon');
            rating = rating + change_rating;
        }
    } else {
        if (!$('#news-minus-' + news_id).hasClass('selected')) {
            //ранее уже голосовал за
            if($('#news-plus-' + news_id).hasClass('vote_plus_icon_g')){
                change_rating = change_rating *2;
            }

            $('#news-plus-' + news_id).removeClass('selected');
            $('#news-minus-' + news_id).addClass('selected');

            $('#news-minus-' + news_id).removeClass('vote_minus_icon');
            $('#news-minus-' + news_id).addClass('vote_minus_icon_g');

            $('#news-plus-' + news_id).removeClass('vote_plus_icon_g');
            $('#news-plus-' + news_id).addClass('vote_plus_icon');
            rating = rating - change_rating;
        }
    }

    $(rating_elem).text(rating);
    //перерисовать канву
    voteobj.drawCircle($(rating_elem).parent(), rating);
    $.get('/process/?action=vote&news_id=' + news_id + '&attitude=' + attitude);
    return true;
}
$(document).ready(function() {
    $('.nl-vote_block')
        .live('mouseenter', function() {
            $(this).find('.news-plus, .news-minus').addClass('visible');
        })
        .live('mouseleave', function() {
            $(this).find('.news-plus, .news-minus').removeClass('visible');
        });
});;// Волшебство (новости, комментарии, сообщества)
/*$('#magic-book').jqmShow(); позволяет показать уже созданный jqm по live событию,
но ссылку аяксы он при этом теряет, поэтому именно в таком виде, триггер удаляем*/
/*для новостей - теперь другой js в actions_with_news.js*/
$(document).ready(function(){
  $('a.magic-book-trigger').live('click',function(){
      $('#magic-book').jqm({
        ajax: $(this).attr('ajaxhref'),
        target: $('#magic-book .magic-book-content'),
        onLoad: function(h) {
          current_action = 0;
          $('#magic-book .spell-trigger').bind('click', function(e){
            e.preventDefault();
            $(this).blur();
            $('#magic-book #spell-description-'+current_action).hide();
            current_action = $(this).attr('id').replace(/spell-trigger-/, '');
            $('#magic-book #spell-description-'+current_action).show();
          });

          $('#magic-book .spell-description form').ajaxForm({
            dataType: 'html',
            beforeSubmit: function(formData, jqForm, options) {
              $('#magic-book #spell-description-'+current_action).hide();
              current_action = 'conjuring';
              $('#magic-book #spell-description-'+current_action).show();
            },
            success: function(data) {
              var r, c;
              data = eval("(" + data + ")");
              if (data.status == 'ok') {
                if (data.message) {
                  r = data.message;
                } else {
                  r = action_performed+'!';
                }
                c = 'ok';
              } else if (data.status == 'fail') {
                if (data.message) {
                  r = error_occured+': ' + data.message;
                } else {
                  r =  error_occured;
                }
                c = 'fail';
              }
              $('#magic-book #spell-description-'+current_action).hide();
              current_action = 'conjured';
              $('#magic-book #spell-description-'+current_action+' .text p').html(r);
              $('#magic-book #spell-description-'+current_action).removeClass('ok fail').addClass(c).show();
            }
          });

          $('#magic-book .magic-signup-content form').resetForm().ajaxForm({
            //dataType: 'json',
            target: '#magic-book .magic-signup-content',
            beforeSubmit: function(formData, jqForm, options) {
              $('#magic-book .magic-signup-content').hide();
              $('#magic-book .magic-signup-loading').show();
            },
            success: function(data) {
              $('#magic-book .magic-signup-loading').hide();
              $('#magic-book .magic-signup-content').html(data).show();
            }
          });
        }
      });
      $('#magic-book').jqmShow();
      return false;
  });

  // Вход

  $('#magic-signin').jqm({
    //modal: true,
    trigger: '.magic-signin-trigger',
    target: '#magic-signin .magic-signin-content',
    onShow: function(hash) {
	  var tmp = document.location.toString().match(/http:\/\/([A-z0-9А-я.\-_]+)\/(.+)/);
	  if(tmp){
		  $.ajax({
			  url: "/process/",
			  type: "post",
			  data: {action: "login_redirect", url: tmp[2]}
		  });
	  }
      $('#magic-signin .magic-signin-content').hide();
      $('#magic-signin .magic-signin-loading').show();

      var jsonUrl = $(hash.t).attr('href') + '&r=json';
      $.getJSON(jsonUrl, function(data){
        if (data.url) {
          var iframeUrl = data.url + '&r=signup';
          $('#magic-signin iframe.magic-signin-content').html('').attr('src', iframeUrl);
          $('#magic-signin .magic-signin-loading').hide();
          $('#magic-signin .magic-signin-content').show();
        } else {
          $('#magic-signin iframe.magic-signin-content').html(data.html);
          $('#magic-signin .magic-signin-loading').hide();
          $('#magic-signin .magic-signin-content').show();
        }
      });
      $(hash.w).show().jqmShow();
    },
    onHide: function(hash) {
      var previewWindow = $(hash.w);
      var contentFrame = $('iframe.magic-signin-content', previewWindow);
      contentFrame.html('').attr('src', '');
      $('#magic-signin .magic-signin-content').hide();
      $('#magic-signin .magic-signin-loading').show();
      previewWindow.hide();
      hash.o.remove();
    }
  });



  // Быстрая регистрация (в разных местах, которые её требуют)

  $('#magic-signup').jqm({
    trigger: '.magic-signup-trigger',
    ajax: '/express_signup/',
    target: $('#magic-signup .magic-signup-content'),
    onLoad: function(hash) {
var atti=/negative-plus/i.test(hash.t.className)?'n':'p';
var voteid=hash.t.parentNode.id.split('lay_vote_').join('');
var b='#lay_show_'+voteid,a=$(b+' h2 a')[0],href;
if(a)href=a.href;else
{
a=$(b+' h1 a')[0];
href=$('#tipn'+voteid).href+'c'+voteid+'/';
}
var newstitle=a.text;

$('#magic-signup .magic-signup-content form input:hidden[name=vote]').val( voteid );
$('#magic-signup .magic-signup-content form input:hidden[name=attitude]').val( atti );
$('#magic-signup .magic-signup-content form input:hidden[name=return]').val( href);

      $('#magic-signup .magic-signup-content .social-buttons').html(
              '<div><iframe src="http://www.facebook.com/plugins/like.php?href=' + escape($(hash.t).attr('returnhref')) + '&amp;layout=button_count&amp;show_faces=false&amp;width=150&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:150px; height:21px;" allowTransparency="true"></iframe></div>' +
              '<div style="margin-top: 1em"><a href="http://twitter.com/share" class="twitter-share-button" data-url="' + $(hash.t).attr('returnhref') + '" data-text="' + $(hash.t).attr('newstitle') + '" data-count="horizontal">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></' + 'script></div>' +
              '<div style="margin-top: 1.1em"><a target="_blank" class="mrc__plugin_like_button" href="http://connect.mail.ru/share?share_url=' + escape($(hash.t).attr('returnhref')) + '" data-mrc-config="{\'type\' : \'button\', \'width\' : \'150\'}">Поделиться</a><sc' + 'ript src="http://cdn.connect.mail.ru/js/loader.js" type="text/javascript" charset="UTF-8"></s' + 'cript></div>' +
              '<style type="text/css">.vkontakte-button div { -moz-box-sizing: content-box; box-sizing: content-box; }</style><div class="vkontakte-button" style="margin-top: 1em">' + VK.Share.button({url: $(hash.t).attr('returnhref'), title: $(hash.t).attr('newstitle'), noparse: true}, {type: "round", text: "Сохранить"}) + '</div>'
      );

      $('#magic-signup .magic-signup-loading').hide();
      $('#magic-signup .magic-signup-content').show();

      $('#magic-signup .magic-signup-content form').ajaxForm({
        //dataType: 'json',
        target: '#magic-signup .magic-signup-content',
        beforeSubmit: function(formData, jqForm, options) {
          $('#magic-signup .magic-signup-content').hide();
          $('#magic-signup .magic-signup-loading').show();
        },
        success: function(data) {
          $('#magic-signup .magic-signup-loading').hide();
          $('#magic-signup .magic-signup-content').html(data).show();
        }
      });
    },
    onHide: function(hash) {
      $('#magic-signup .magic-signup-content').html('').hide();
      $('#magic-signup .magic-signup-loading').show();
      hash.w.hide();
      hash.o.remove();
    }
  });


  // Быстрая регистрация для Ad Sites

  $('#magic-adsites-signup').jqm({
    trigger: '.magic-adsites-signup-trigger',
    ajax: '/express_signup/?for=adsites',
    target: $('#magic-adsites-signup .magic-adsites-signup-content'),
    onLoad: function(hash) {
      $('#magic-adsites-signup .magic-adsites-signup-content form input:hidden[name=return]').val('/ad_sites/');

      $('#magic-adsites-signup .magic-adsites-signup-loading').hide();
      $('#magic-adsites-signup .magic-adsites-signup-content').show();

      $('#magic-adsites-signup .magic-adsites-signup-content form').ajaxForm({
        //dataType: 'json',
        target: '#magic-adsites-signup .magic-adsites-signup-content',
        beforeSubmit: function(formData, jqForm, options) {
          $('#magic-adsites-signup .magic-adsites-signup-content').hide();
          $('#magic-adsites-signup .magic-adsites-signup-loading').show();
        },
        success: function(data) {
          $('#magic-adsites-signup .magic-adsites-signup-loading').hide();
          $('#magic-adsites-signup .magic-adsites-signup-content').html(data).show();
        }
      });
    },
    onHide: function(hash) {
      $('#magic-adsites-signup .magic-adsites-signup-content').html('').hide();
      $('#magic-adsites-signup .magic-adsites-signup-loading').show();
      hash.w.hide();
      hash.o.remove();
    }
  });

  // Быстрая регистрация для Ad news

  $('#magic-adnews-signup').jqm({
    trigger: '.magic-adnews-signup-trigger',
    ajax: '/express_signup/?for=adnews',
    target: $('#magic-adnews-signup .magic-adnews-signup-content'),
    onLoad: function(hash) {
      $('#magic-adnews-signup .magic-adnews-signup-content form input:hidden[name=return]').val('/ad_news/');

      $('#magic-adnews-signup .magic-adnews-signup-loading').hide();
      $('#magic-adnews-signup .magic-adnews-signup-content').show();

      $('#magic-adnews-signup .magic-adnews-signup-content form').ajaxForm({
        //dataType: 'json',
        target: '#magic-adnews-signup .magic-adnews-signup-content',
        beforeSubmit: function(formData, jqForm, options) {
          $('#magic-adnews-signup .magic-adnews-signup-content').hide();
          $('#magic-adnews-signup .magic-adnews-signup-loading').show();
        },
        success: function(data) {
          $('#magic-adnews-signup .magic-adnews-signup-loading').hide();
          $('#magic-adnews-signup .magic-adnews-signup-content').html(data).show();
        }
      });
    },
    onHide: function(hash) {
      $('#magic-adnews-signup .magic-adnews-signup-content').html('').hide();
      $('#magic-adnews-signup .magic-adnews-signup-loading').show();
      hash.w.hide();
      hash.o.remove();
    }
  });

  // Используем jqModal вместо Thickbox (сообщества)

  $('#magic-thickbox').jqm({
    modal: true,
    trigger: '.magic-thickbox-trigger',
    ajax: '@href',
    target: $('#magic-thickbox .magic-thickbox-content'),
    onShow: function(hash) {
      var t = $(hash.t);
      var w = $(hash.w);
      $('#magic-thickbox .magic-thickbox-header').html(t.attr('title'));
      w.show();
    }
  });

  $('#magic-justintime').jqm();


  // Превью (новости)

  if ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined)) {
    // IE6. Do nothing
  } else {
    $('#magic-preview').jqm({
      //modal: true,
      trigger: '.magic-preview-trigger',
      target: '#magic-preview .magic-preview-content',
      onShow: function(hash) {
        var trigger = $(hash.t);
        var previewWindow = $(hash.w);

        var headerFrame = $('iframe.magic-preview-header', previewWindow);
        var headerUrl = trigger.attr('headerhref');
        headerFrame.html('').attr('src', headerUrl);

        var contentFrame = $('iframe.magic-preview-content', previewWindow);
        var contentUrl = trigger.attr('contenthref');
        contentFrame.html('').attr('src', contentUrl);

        previewWindow.show().jqmShow();
      },
      onHide: function(hash) {
        var previewWindow = $(hash.w);

        var headerFrame = $('iframe.magic-preview-header', previewWindow);
        headerFrame.html('').attr('src', '');

        var contentFrame = $('iframe.magic-preview-content', previewWindow);
        contentFrame.html('').attr('src', '');

        previewWindow.hide();
        hash.o.remove();
      }
    });
  }

  // Advance Preview (for homepage) - first part

  if (location.hash.match(/^#advance\-preview\-http/)) {
    $('#magic-preview').after('<div id="magic-advance-preview" style="display: none; position: fixed; left: 10%; top: 5%; width: 80%; height: 90%;"><iframe src="" border="0" frameborder="0" style="display: block; width: 100%; height: 100%; background-color: #eee; border: none; margin: 0"></iframe></div>');

    $('#magic-advance-preview').jqm({
      onShow: function(hash) {
        var previewWindow = $(hash.w);
        var contentFrame = $('iframe', previewWindow);
        var url = location.hash.replace(/^#advance\-preview\-/, '') + 'newspreview/?noclosebutton=1';
        contentFrame.html('').attr('src', url);
        previewWindow.show().jqmShow();
      }
    });

    $('#magic-advance-preview').jqmShow();
  }
// comments in the source language
 $(".text_source").live('click', function(){
     {
     $(this).attr('title', comment_translate);
     $(this).parent().parent().children(".comment-body").children().children(".source").show();
     $(this).parent().parent().children(".comment-body").children().children(".text").hide();
     $(this).removeClass("text_source").addClass("source_text");
     }
 return false;
 });
  $(".source_text").live('click', function(){
     {
     $(this).attr('title', comment_source);
     $(this).parent().parent().children(".comment-body").children().children(".text").show();
     $(this).parent().parent().children(".comment-body").children().children(".source").hide();
     $(this).removeClass("source_text").addClass("text_source");
     }
 return false;
 });
	$(".news-add-to-best").live("click", function(){
		var link = $(this), tmp = link.attr("id").match(/news-best-(\d+)/);
		if(tmp[1]) {$.ajax({url: "/news_best/", type: "post", dataType: "json", data: {action: "add", nid: tmp[1], naked: true}, success: function(res){if(res.s == 1) {link.text("Из лучшего").attr("href", "/news_best/?action=delete&nid=" + tmp[1]).attr("class", "news-delete-from-best");}}});}
		return false;
	});
	$(".news-delete-from-best").live("click", function(){
		var link = $(this), tmp = link.attr("id").match(/news-best-(\d+)/);
		if(tmp[1]) {$.ajax({url: "/news_best/", type: "post", dataType: "json", data: {action: "delete", nid: tmp[1], naked: true}, success: function(res){if(res.s == 1) {link.text("В лучшее").attr("href", "/news_best/?action=add&nid=" + tmp[1]).attr("class", "news-add-to-best");}}});}
		return false;
	});
	$(".news-add-to-popular").live("click", function(){
		var link = $(this), tmp = link.attr("id").match(/news-popular-(\d+)/);
		if(tmp[1]) {$.ajax({url: "/news_popular/", type: "post", dataType: "json", data: {action: "add", nid: tmp[1]}, success: function(res){if(res.s == 1) {link.text('Готово').fadeOut(2000);}}});}
		return false;
	});
});
;// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
  var cache = {};
  
  this.tmpl = function tmpl(str, data){
    // Figure out if we're getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :
      
      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
        
        // Introduce the data as local variables using with(){}
        "with(obj){p.push('" +
        
        // Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .replace(/'(?=[^%]*%>)/g,"\t")
          .split("'").join("\\'")
          .split("\t").join("'")
          .replace(/<%=(.+?)%>/g, "',$1,'")
          .split("<%").join("');")
          .split("%>").join("p.push('")
      + "');}return p.join('');");

    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})();
