/* Minification failed. Returning unminified contents.
(204,82-89): run-time error JS1300: Strict-mode does not allow assignment to undefined variables: CURLANG
(203,88-95): run-time error JS1300: Strict-mode does not allow assignment to undefined variables: CURLANG
 */
/*!
 * jQuery Cookie Plugin v1.4.0
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2013 Klaus Hartl
 * Released under the MIT license
 */
(function (factory) {
	if (typeof define === 'function' && define.amd) {
		// AMD. Register as anonymous module.
		define(['jquery'], factory);
	} else {
		// Browser globals.
		factory(jQuery);
	}
}(function ($) {

	var pluses = /\+/g;

	function encode(s) {
		return config.raw ? s : encodeURIComponent(s);
	}

	function decode(s) {
		return config.raw ? s : decodeURIComponent(s);
	}

	function stringifyCookieValue(value) {
		return encode(config.json ? JSON.stringify(value) : String(value));
	}

	function parseCookieValue(s) {
		if (s.indexOf('"') === 0) {
			// This is a quoted cookie as according to RFC2068, unescape...
			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
		}

		try {
			// Replace server-side written pluses with spaces.
			// If we can't decode the cookie, ignore it, it's unusable.
			s = decodeURIComponent(s.replace(pluses, ' '));
		} catch(e) {
			return;
		}

		try {
			// If we can't parse the cookie, ignore it, it's unusable.
			return config.json ? JSON.parse(s) : s;
		} catch(e) {}
	}

	function read(s, converter) {
		var value = config.raw ? s : parseCookieValue(s);
		return $.isFunction(converter) ? converter(value) : value;
	}

	var config = $.cookie = function (key, value, options) {

		// Write
		if (value !== undefined && !$.isFunction(value)) {
			options = $.extend({}, config.defaults, options);

			if (typeof options.expires === 'number') {
				var days = options.expires, t = options.expires = new Date();
				t.setDate(t.getDate() + days);
			}

			return (document.cookie = [
				encode(key), '=', stringifyCookieValue(value),
				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
				options.path    ? '; path=' + options.path : '',
				options.domain  ? '; domain=' + options.domain : '',
				options.secure  ? '; secure' : ''
			].join(''));
		}

		// Read

		var result = key ? undefined : {};

		// To prevent the for loop in the first place assign an empty array
		// in case there are no cookies at all. Also prevents odd result when
		// calling $.cookie().
		var cookies = document.cookie ? document.cookie.split('; ') : [];

		for (var i = 0, l = cookies.length; i < l; i++) {
			var parts = cookies[i].split('=');
			var name = decode(parts.shift());
			var cookie = parts.join('=');

			if (key && key === name) {
				// If second argument (value) is a function it's a converter...
				result = read(cookie, value);
				break;
			}

			// Prevent storing a cookie that we couldn't decode.
			if (!key && (cookie = read(cookie)) !== undefined) {
				result[name] = cookie;
			}
		}

		return result;
	};

	config.defaults = {};

	$.removeCookie = function (key, options) {
		if ($.cookie(key) !== undefined) {
			// Must not alter options, thus extending a fresh object...
			$.cookie(key, '', $.extend({}, options, { expires: -1 }));
			return true;
		}
		return false;
	};

}));
;
/*! WysiBB v1.5.1 2014-03-26 
    Author: Vadim Dobroskok
 */
if (typeof (WBBLANG)=="undefined") {WBBLANG = {};}
WBBLANG['en'] = CURLANG = {
	bold: "Bold",
	italic: "Italic",
	underline: "Underline",
	strike: "Strike",
	link: "Link",
	img: "Insert image",
	sup: "Superscript",
	sub: "Subscript",
	justifyleft: "Align left",
	justifycenter: "Align center",
	justifyright: "Align right",
	table: "Insert table",
	bullist: "• Unordered list",
	numlist: "1. Ordered list",
	quote: "Quote",
	offtop: "Offtop",
	code: "Code",
	spoiler: "Spoiler",
	fontcolor: "Font color",
	fontsize: "Font size",
	fontfamily: "Font family",
	fs_verysmall: "Very small",
	fs_small: "Small",
	fs_normal: "Normal",
	fs_big: "Big",
	fs_verybig: "Very big",
	smilebox: "Insert emoticon",
	video: "Insert YouTube",
	removeFormat:"Remove Format",
	
	modal_link_title: "Insert link",
	modal_link_text: "Display text",
	modal_link_url: "URL",
	modal_email_text: "Display email",
	modal_email_url: "Email",
	modal_link_tab1: "Insert URL",
	
	modal_img_title: "Insert image",
	modal_img_tab1: "Insert URL",
	modal_img_tab2: "Upload image",
	modal_imgsrc_text: "Enter image URL",
	modal_img_btn: "Choose file",
	add_attach: "Add Attachment",
	
	modal_video_text: "Enter the URL of the video",
	
	close: "Close",
	save: "Save",
	cancel: "Cancel",
	remove: "Delete",
	
	validation_err: "The entered data is invalid",
	error_onupload: "Error during file upload",
	
	fileupload_text1: "Drop file here",
	fileupload_text2: "or",
	
	loading: "Loading",
	auto: "Auto",
	views: "Views",
	downloads: "Downloads",
	
	//smiles
	sm1: "Smile",
	sm2: "Laughter",
	sm3: "Wink",
	sm4: "Thank you",
	sm5: "Scold",
	sm6: "Shock",
	sm7: "Angry",
	sm8: "Pain",
	sm9: "Sick"
};
wbbdebug=true;
(function($) {
	'use strict';
	$.wysibb = function(txtArea,settings) {
		$(txtArea).data("wbb",this);
		
		if (settings && settings.deflang && typeof(WBBLANG[settings.deflang])!="undefined") {CURLANG = WBBLANG[settings.deflang];}
		if (settings && settings.lang && typeof(WBBLANG[settings.lang])!="undefined") {CURLANG = WBBLANG[settings.lang];}
		this.txtArea=txtArea;
		this.$txtArea=$(txtArea);
		var id = this.$txtArea.attr("id") || this.setUID(this.txtArea);
		this.options = {
			bbmode:				false,
			onlyBBmode:			false,
			themeName:			"default", 
			bodyClass:			"",
			lang:				"ru",
			tabInsert:			true,
//			toolbar:			false,
			//img upload config 
			imgupload:			false,
			img_uploadurl:		"/iupload.php",
			img_maxwidth:		800,
			img_maxheight:		800,
			hotkeys:			true,
			showHotkeys:		true,
			autoresize:			true,
			resize_maxheight:	800,
			loadPageStyles:		true,
			traceTextarea:		true,
//			direction:			"ltr",
			smileConversion:	true,

			//END img upload config 
			buttons: 			"bold,italic,underline,strike,sup,sub,|,img,video,link,|,bullist,numlist,|,fontcolor,fontsize,fontfamily,|,justifyleft,justifycenter,justifyright,|,quote,code,table,removeFormat",
			allButtons: {
				bold : {
					title: CURLANG.bold,
					buttonHTML: '<span class="fonticon ve-tlb-bold1">\uE018</span>',
					excmd: 'bold',
					hotkey: 'ctrl+b',
					transform : {
						'<b>{SELTEXT}</b>':"[b]{SELTEXT}[/b]",
						'<strong>{SELTEXT}</strong>':"[b]{SELTEXT}[/b]"
					}
				},
				italic : {
					title: CURLANG.italic,
					buttonHTML: '<span class="fonticon ve-tlb-italic1">\uE001</span>',
					excmd: 'italic',
					hotkey: 'ctrl+i',
					transform : {
						'<i>{SELTEXT}</i>':"[i]{SELTEXT}[/i]",
						'<em>{SELTEXT}</em>':"[i]{SELTEXT}[/i]"
					}
				},
				underline : {
					title: CURLANG.underline,
					buttonHTML: '<span class="fonticon ve-tlb-underline1">\uE002</span>',
					excmd: 'underline',
					hotkey: 'ctrl+u',
					transform : {
						'<u>{SELTEXT}</u>':"[u]{SELTEXT}[/u]"
					}
				},
				strike : {
					title: CURLANG.strike,
					buttonHTML: '<span class="fonticon fi-stroke1 ve-tlb-strike1">\uE003</span>',
					excmd: 'strikeThrough',
					transform : {
						'<strike>{SELTEXT}</strike>':"[s]{SELTEXT}[/s]",
						'<s>{SELTEXT}</s>':"[s]{SELTEXT}[/s]"
					}
				},
				sup : {
					title: CURLANG.sup,
					buttonHTML: '<span class="fonticon ve-tlb-sup1">\uE005</span>',
					excmd: 'superscript',
					transform : {
						'<sup>{SELTEXT}</sup>':"[sup]{SELTEXT}[/sup]"
					}
				},
				sub : {
					title: CURLANG.sub,
					buttonHTML: '<span class="fonticon ve-tlb-sub1">\uE004</span>',
					excmd: 'subscript',
					transform : {
						'<sub>{SELTEXT}</sub>':"[sub]{SELTEXT}[/sub]"
					}
				},
				link : {
					title: CURLANG.link,
					buttonHTML: '<span class="fonticon ve-tlb-link1">\uE007</span>',
					hotkey: 'ctrl+shift+2',
					modal: {
						title: CURLANG.modal_link_title,
						width: "500px",
						tabs: [
							{
								input: [
									{param: "SELTEXT",title:CURLANG.modal_link_text, type: "div"},
									{param: "URL",title:CURLANG.modal_link_url,validation: '^http(s)?://'}
								]
							}
						]
					},
					transform : {
						'<a href="{URL}">{SELTEXT}</a>':"[url={URL}]{SELTEXT}[/url]",
						'<a href="{URL}">{URL}</a>':"[url]{URL}[/url]"
					}
				},
				img : {
					title: CURLANG.img,
					buttonHTML: '<span class="fonticon ve-tlb-img1">\uE006</span>',
					hotkey: 'ctrl+shift+1',
					addWrap: true,
					modal: {
						title: CURLANG.modal_img_title,
						width: "600px",
						tabs: [
							{
								title: CURLANG.modal_img_tab1,
								input: [
									{param: "SRC",title:CURLANG.modal_imgsrc_text,validation: '^http(s)?://.*?\.(jpg|png|gif|jpeg)$'}
								]
							}
						],
						onLoad: this.imgLoadModal
					},
					transform : {
						'<img src="{SRC}" />':"[img]{SRC}[/img]",
						'<img src="{SRC}" width="{WIDTH}" height="{HEIGHT}"/>':"[img width={WIDTH},height={HEIGHT}]{SRC}[/img]"
					}
				},
				bullist : {
					title: CURLANG.bullist,
					buttonHTML: '<span class="fonticon ve-tlb-list1">\uE009</span>',
					excmd: 'insertUnorderedList',
					transform : {
						'<ul>{SELTEXT}</ul>':"[list]{SELTEXT}[/list]",
						'<li>{SELTEXT}</li>':"[*]{SELTEXT}[/*]"
					}
				},
				numlist : {
					title: CURLANG.numlist,
					buttonHTML: '<span class="fonticon ve-tlb-numlist1">\uE00a</span>',
					excmd: 'insertOrderedList',
					transform : {
						'<ol>{SELTEXT}</ol>':"[list=1]{SELTEXT}[/list]",
						'<li>{SELTEXT}</li>':"[*]{SELTEXT}[/*]"
					}
				},
				quote : {
					title: CURLANG.quote,
					buttonHTML: '<span class="fonticon ve-tlb-quote1">\uE00c</span>',
					hotkey: 'ctrl+shift+3',
					//subInsert: true,
					transform : { 
						'<blockquote>{SELTEXT}</blockquote>':"[quote]{SELTEXT}[/quote]"
					}
				},
				code : {
					title: CURLANG.code,
					buttonText: '[code]',
					/* buttonHTML: '<span class="fonticon">\uE00d</span>', */
					hotkey: 'ctrl+shift+4',
					onlyClearText: true,
					transform : {
						'<code>{SELTEXT}</code>':"[code]{SELTEXT}[/code]"
					}
				},
				offtop : {
					title: CURLANG.offtop,
					buttonText: 'offtop',
					transform : {
						'<span style="font-size:10px;color:#ccc">{SELTEXT}</span>':"[offtop]{SELTEXT}[/offtop]"
					}
				},
				fontcolor: {
					type: "colorpicker",
					title: CURLANG.fontcolor,
					excmd: "foreColor",
					valueBBname: "color",
					subInsert: true,
					colors: "#000000,#444444,#666666,#999999,#b6b6b6,#cccccc,#d8d8d8,#efefef,#f4f4f4,#ffffff,-, \
							 #ff0000,#980000,#ff7700,#ffff00,#00ff00,#00ffff,#1e84cc,#0000ff,#9900ff,#ff00ff,-, \
							 #f4cccc,#dbb0a7,#fce5cd,#fff2cc,#d9ead3,#d0e0e3,#c9daf8,#cfe2f3,#d9d2e9,#ead1dc, \
							 #ea9999,#dd7e6b,#f9cb9c,#ffe599,#b6d7a8,#a2c4c9,#a4c2f4,#9fc5e8,#b4a7d6,#d5a6bd, \
							 #e06666,#cc4125,#f6b26b,#ffd966,#93c47d,#76a5af,#6d9eeb,#6fa8dc,#8e7cc3,#c27ba0, \
							 #cc0000,#a61c00,#e69138,#f1c232,#6aa84f,#45818e,#3c78d8,#3d85c6,#674ea7,#a64d79, \
							 #900000,#85200C,#B45F06,#BF9000,#38761D,#134F5C,#1155Cc,#0B5394,#351C75,#741B47, \
							 #660000,#5B0F00,#783F04,#7F6000,#274E13,#0C343D,#1C4587,#073763,#20124D,#4C1130",
					transform: {
						'<font color="{COLOR}">{SELTEXT}</font>':'[color={COLOR}]{SELTEXT}[/color]'
					}
				},
				table: {
					type: "table",
					title: CURLANG.table,
					cols: 10,
					rows: 10,
					cellwidth: 20,
					transform: {
						'<td>{SELTEXT}</td>': '[td]{SELTEXT}[/td]',
						'<tr>{SELTEXT}</tr>': '[tr]{SELTEXT}[/tr]',
						'<table class="wbb-table">{SELTEXT}</table>': '[table]{SELTEXT}[/table]'
					},
					skipRules: true
				},
				fontsize: {
					type: 'select',
					title: CURLANG.fontsize,
					options: "fs_verysmall,fs_small,fs_normal,fs_big,fs_verybig"
				},
				fontfamily: {
					type: 'select',
					title: CURLANG.fontfamily,
					excmd: 'fontName',
					valueBBname: "font",
					options: [
						{title: "Arial",exvalue: "Arial"},
						{title: "Comic Sans MS",exvalue: "Comic Sans MS"},
						{title: "Courier New",exvalue: "Courier New"},
						{title: "Georgia",exvalue: "Georgia"},
						{title: "Lucida Sans Unicode",exvalue: "Lucida Sans Unicode"},
						{title: "Tahoma",exvalue: "Tahoma"},
						{title: "Times New Roman",exvalue: "Times New Roman"},
						{title: "Trebuchet MS",exvalue: "Trebuchet MS"},
						{title: "Verdana",exvalue: "Verdana"}
					],
					transform: {
						'<font face="{FONT}">{SELTEXT}</font>':'[font={FONT}]{SELTEXT}[/font]'
					}
				},
				smilebox: {
					type: 'smilebox',
					title: CURLANG.smilebox,
					buttonHTML: '<span class="fonticon ve-tlb-smilebox1">\uE00b</span>'
				},
				justifyleft: {
					title: CURLANG.justifyleft,
					buttonHTML: '<span class="fonticon ve-tlb-textleft1">\uE015</span>',
					groupkey: 'align',
					transform: {
						'<p style="text-align:left">{SELTEXT}</p>': '[left]{SELTEXT}[/left]'
					}
				},
				justifyright: {
					title: CURLANG.justifyright,
					buttonHTML: '<span class="fonticon ve-tlb-textright1">\uE016</span>',
					groupkey: 'align',
					transform: {
						'<p style="text-align:right">{SELTEXT}</p>': '[right]{SELTEXT}[/right]'
					}
				},
				justifycenter: {
					title: CURLANG.justifycenter,
					buttonHTML: '<span class="fonticon ve-tlb-textcenter1">\uE014</span>',
					groupkey: 'align',
					transform: {
						'<p style="text-align:center">{SELTEXT}</p>': '[center]{SELTEXT}[/center]'
					}
				},
				video: {
					title: CURLANG.video,
					buttonHTML: '<span class="fonticon ve-tlb-video1">\uE008</span>',
					modal: {
						title: CURLANG.video,
						width: "600px",
						tabs: [
							{
								title: CURLANG.video,
								input: [
									{param: "SRC",title:CURLANG.modal_video_text}
								]
							}
						],
						onSubmit: function(cmd,opt,queryState) {
							var url = this.$modal.find('input[name="SRC"]').val();
							if (url) {
								url = url.replace(/^\s+/,"").replace(/\s+$/,"");
							}
							var a;
							if (url.indexOf("youtu.be")!=-1) {
								a = url.match(/^http[s]*:\/\/youtu\.be\/([a-z0-9_-]+)/i);
							}else{
								a = url.match(/^http[s]*:\/\/www\.youtube\.com\/watch\?.*?v=([a-z0-9_-]+)/i);
							}
							if (a && a.length==2) {
								var code = a[1];
								this.insertAtCursor(this.getCodeByCommand(cmd,{src:code}));
							}
							this.closeModal();
							this.updateUI();
							return false;
						}
					},
					transform: {
						'<iframe src="http://www.youtube.com/embed/{SRC}" width="640" height="480" frameborder="0"></iframe>':'[video]{SRC}[/video]'
					}
				},
				
				//select options
				fs_verysmall: {
					title: CURLANG.fs_verysmall,
					buttonText: "fs1",
					excmd: 'fontSize',
					exvalue: "1",
					transform: {
						'<font size="1">{SELTEXT}</font>':'[size=50]{SELTEXT}[/size]'
					}
				},
				fs_small: {
					title: CURLANG.fs_small,
					buttonText: "fs2",
					excmd: 'fontSize',
					exvalue: "2",
					transform: {
						'<font size="2">{SELTEXT}</font>':'[size=85]{SELTEXT}[/size]'
					}
				},
				fs_normal: {
					title: CURLANG.fs_normal,
					buttonText: "fs3",
					excmd: 'fontSize',
					exvalue: "3",
					transform: {
						'<font size="3">{SELTEXT}</font>':'[size=100]{SELTEXT}[/size]'
					}
				},
				fs_big: {
					title: CURLANG.fs_big,
					buttonText: "fs4",
					excmd: 'fontSize',
					exvalue: "4",
					transform: {
						'<font size="4">{SELTEXT}</font>':'[size=150]{SELTEXT}[/size]'
					}
				},
				fs_verybig: {
					title: CURLANG.fs_verybig,
					buttonText: "fs5",
					excmd: 'fontSize',
					exvalue: "6",
					transform: {
						'<font size="6">{SELTEXT}</font>':'[size=200]{SELTEXT}[/size]'
					}
				},
				
				removeformat: {
					title: CURLANG.removeFormat,
					buttonHTML: '<span class="fonticon ve-tlb-removeformat1">\uE00f</span>',
					excmd: "removeFormat"
				}
			},
			systr: {
				'<br/>':"\n",
				'<span class="wbbtab">{SELTEXT}</span>': '   {SELTEXT}'
			},
			customRules: {
				td: [["[td]{SELTEXT}[/td]",{seltext: {rgx:false,attr:false,sel:false}}]],
				tr: [["[tr]{SELTEXT}[/tr]",{seltext: {rgx:false,attr:false,sel:false}}]],
				table: [["[table]{SELTEXT}[/table]",{seltext: {rgx:false,attr:false,sel:false}}]]
				//blockquote: [["   {SELTEXT}",{seltext: {rgx:false,attr:false,sel:false}}]]
			},
			smileList: [
				//{title:CURLANG.sm1, img: '<img src="{themePrefix}{themeName}/img/smiles/sm1.png" class="sm">', bbcode:":)"},
			],
			attrWrap: ['src','color','href'] //use becouse FF and IE change values for this attr, modify [attr] to _[attr]
		}
		
		//FIX for Opera. Wait while iframe loaded
		this.inited=this.options.onlyBBmode;
		
		//init css prefix, if not set
		if (!this.options.themePrefix) {
			$('link').each($.proxy(function(idx, el) {
				var sriptMatch = $(el).get(0).href.match(/(.*\/)(.*)\/wbbtheme\.css.*$/);
				if (sriptMatch !== null) {
					this.options.themeName = sriptMatch[2];
					this.options.themePrefix = sriptMatch[1];
				}
			},this));
		}
		
		//check for preset
		if (typeof(WBBPRESET)!="undefined") {
			if (WBBPRESET.allButtons) {
				//clear transform
				$.each(WBBPRESET.allButtons,$.proxy(function(k,v) {
					if (v.transform && this.options.allButtons[k]) {
						delete this.options.allButtons[k].transform;
					}
				},this));
			}
			$.extend(true,this.options,WBBPRESET);
		} 
		
		if (settings && settings.allButtons) {
			$.each(settings.allButtons,$.proxy(function(k,v) {
				if (v.transform && this.options.allButtons[k]) {
					delete this.options.allButtons[k].transform;
				}
			},this));
		}
		$.extend(true,this.options,settings);
		this.init();
	}
	
	$.wysibb.prototype = {
		lastid : 1,
		init:	function() {
			$.log("Init",this);
			//check for mobile
			this.isMobile = function(a) {(/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a))}(navigator.userAgent||navigator.vendor||window.opera);
			
			//use bbmode on mobile devices
			//this.isMobile = true; //TEMP
			if (this.options.onlyBBmode===true) {this.options.bbmode=true;}
			//create array of controls, for queryState
			this.controllers = [];
			
			//convert button string to array
			this.options.buttons = this.options.buttons.toLowerCase();
			this.options.buttons = this.options.buttons.split(",");
			
			//init system transforms
			this.options.allButtons["_systr"] = {};
			this.options.allButtons["_systr"]["transform"]= this.options.systr;
			
			this.smileFind();
			this.initTransforms();
			this.build();
			this.initModal();
			if (this.options.hotkeys===true && !this.isMobile) {
				this.initHotkeys();
			}
			
			//sort smiles
			if (this.options.smileList && this.options.smileList.length>0) {
				this.options.smileList.sort(function(a,b) {
					return (b.bbcode.length-a.bbcode.length);
				})
			}
			
			this.$txtArea.parents("form").bind("submit",$.proxy(function() {
				this.sync();
				return true;
			},this)); 
			
			
			//phpbb2
			this.$txtArea.parents("form").find("input[id*='preview'],input[id*='submit'],input[class*='preview'],input[class*='submit'],input[name*='preview'],input[name*='submit']").bind("mousedown",$.proxy(function() {
				this.sync();
				setTimeout($.proxy(function() {
					if (this.options.bbmode===false) {
						this.$txtArea.removeAttr("wbbsync").val("");
					}
				},this),1000);
			},this));
			//end phpbb2
			
			if (this.options.initCallback) {
				this.options.initCallback.call(this);
			}
			
			$.log(this);
			
		},
		initTransforms: function() {
			$.log("Create rules for transform HTML=>BB");
			var o = this.options;
			//need to check for active buttons
			if (!o.rules) {o.rules={};}
			if (!o.groups) {o.groups={};} //use for groupkey, For example: justifyleft,justifyright,justifycenter. It is must replace each other.
			var  btnlist = o.buttons.slice();
			
			//add system transform
			btnlist.push("_systr");
			for (var bidx=0; bidx<btnlist.length; bidx++) {
				var ob = o.allButtons[btnlist[bidx]];
				if (!ob ) {continue;}
				ob.en=true;
				
				//check for simplebbcode
				if (ob.simplebbcode && $.isArray(ob.simplebbcode) && ob.simplebbcode.length==2) {
					ob.bbcode = ob.html = ob.simplebbcode[0]+"{SELTEXT}"+ob.simplebbcode[1];
					if (ob.transform) delete ob.transform;
					if (ob.modal)  delete ob.modal;
				}
				
				//add transforms to option list
				if (ob.type=="select" && typeof(ob.options)=="string") {
					var olist = ob.options.split(",");
					$.each(olist,function(i,op) {
						if ($.inArray(op,btnlist)==-1) {
							btnlist.push(op);
						}
					});
				}
				if (ob.transform && ob.skipRules!==true) {
					var obtr = $.extend({},ob.transform);
					
					/* if (ob.addWrap) {
						//addWrap
						$.log("needWrap");
						for (var bhtml in obtr) {
							var bbcode = ob.transform[bhtml];
							var newhtml = '<span wbb="'+btnlist[bidx]+'">'+bhtml+'</span>';
							obtr[newhtml] = bbcode;
						}
					} */
					
					for (var bhtml in obtr) {
						var orightml = bhtml;
						var bbcode = obtr[bhtml];
						
						//create root selector for isContain bbmode
						if (!ob.bbSelector) {ob.bbSelector=[];}
						if ($.inArray(bbcode,ob.bbSelector)==-1) {
							ob.bbSelector.push(bbcode);
						}
						if (this.options.onlyBBmode===false) {
						
							//wrap attributes 
							bhtml = this.wrapAttrs(bhtml);
							

							var $bel = $(document.createElement('DIV')).append($(this.elFromString(bhtml,document)));
							var rootSelector = this.filterByNode($bel.children());
							
							
							//check if current rootSelector is exist, create unique selector for each transform (1.2.2)
							if (rootSelector=="div" || typeof(o.rules[rootSelector])!="undefined") {
								//create unique selector
								$.log("create unique selector: "+rootSelector);
								this.setUID($bel.children());
								rootSelector = this.filterByNode($bel.children());
								$.log("New rootSelector: "+rootSelector);
								//replace transform with unique selector
								var nhtml2 = $bel.html();
								nhtml2 = this.unwrapAttrs(nhtml2);
								var obhtml = this.unwrapAttrs(bhtml);
								
								
								ob.transform[nhtml2]=bbcode;
								delete ob.transform[obhtml];
								
								bhtml=nhtml2;
								orightml = nhtml2;
							}
							
							//create root selector for isContain
							if (!ob.excmd) {
								if (!ob.rootSelector) {ob.rootSelector=[];}
								ob.rootSelector.push(rootSelector);
							}
							
							//check for rules on this rootSeletor
							if (typeof(o.rules[rootSelector])=="undefined") {
								o.rules[rootSelector]=[];
							}
							var crules={};
							
							if (bhtml.match(/\{\S+?\}/)) {
								$bel.find('*').each($.proxy(function(idx,el) {
									//check attributes
									
									var attributes = this.getAttributeList(el);
									$.each(attributes,$.proxy(function(i, item) {
										var attr = $(el).attr(item);
										if (item.substr(0,1)=='_') {
											item = item.substr(1);
										}
										
										var r = attr.match(/\{\S+?\}/g);
										if (r) {
											for (var a=0; a<r.length; a++) {
												var rname = r[a].substr(1,r[a].length-2);
													rname = rname.replace(this.getValidationRGX(rname),"");
												var p = this.relFilterByNode(el,rootSelector);
												var regRepl = (attr!=r[a]) ? this.getRegexpReplace(attr,r[a]):false;
												crules[rname.toLowerCase()]={sel:(p) ? $.trim(p):false,attr:item,rgx:regRepl}
											}
										}
									},this));
									
									//check for text
									var  sl=[];
									if (!$(el).is("iframe")) {
										$(el).contents().filter(function() {return this.nodeType===3}).each($.proxy(function(i,rel) {
											var txt = rel.textContent || rel.data;
											if (typeof(txt)=="undefined") {return true;}
											var r = txt.match(/\{\S+?\}/g)
											if (r) {
												for (var a=0; a<r.length; a++) {	
													var rname = r[a].substr(1,r[a].length-2);
														rname = rname.replace(this.getValidationRGX(rname),"");
													var p = this.relFilterByNode(el,rootSelector);
													var regRepl = (txt!=r[a]) ? this.getRegexpReplace(txt,r[a]):false;
													var sel = (p) ? $.trim(p):false;
													if ($.inArray(sel,sl)>-1 || $(rel).parent().contents().size()>1) {
														//has dublicate and not one children, need wrap
														var nel = $("<span>").html("{"+rname+"}");
														this.setUID(nel,"wbb");
														var start = (txt.indexOf(rname)+rname.length)+1;
														var after_txt = txt.substr(start,txt.length-start);
														//create wrap element
														rel.data = txt.substr(0,txt.indexOf(rname)-1);
														$(rel).after(this.elFromString(after_txt,document)).after(nel);
														
														sel=((sel) ? sel+" ":"")+this.filterByNode(nel);
														regRepl=false;
													}
													crules[rname.toLowerCase()]={sel:sel,attr:false,rgx:regRepl}
													sl[sl.length]=sel;
												}
											}
										},this));
									}
									sl=null;
									
									
								},this));
								
								var nbhtml = $bel.html();
								//UnWrap attributes 
								nbhtml = this.unwrapAttrs(nbhtml);
								if (orightml!=nbhtml) {
									//if we modify html, replace it
									delete ob.transform[orightml];
									ob.transform[nbhtml]=bbcode;
									bhtml=nbhtml;
								}
								
							}
							o.rules[rootSelector].push([bbcode,crules]);
							
							//check for onlyClearText
							if (ob.onlyClearText===true) {
								if (!this.cleartext) {this.cleartext={};}
								this.cleartext[rootSelector]=btnlist[bidx];
							}
							
							//check for groupkey
							if (ob.groupkey) {
								if (!o.groups[ob.groupkey]) {o.groups[ob.groupkey]=[]}
								o.groups[ob.groupkey].push(rootSelector);
							}
						}
					}
					
					//sort rootSelector
					if (ob.rootSelector) {
						this.sortArray(ob.rootSelector,-1);
					}
						
					var htmll = $.map(ob.transform,function(bb,html) {return html}).sort(function(a,b) {
							return ((b[0] || "").length-(a[0] || "").length)
					});
					ob.bbcode = ob.transform[htmll[0]];
					ob.html = htmll[0];
				}
			};
			
			this.options.btnlist=btnlist; //use for transforms, becouse select elements not present in buttons
			
			//add custom rules, for table,tr,td and other
			$.extend(o.rules,this.options.customRules);
		
			//smile rules
			o.srules={};
			if (this.options.smileList) {
				$.each(o.smileList,$.proxy(function(i,sm) {
					var $sm = $(this.strf(sm.img,o));
					var f = this.filterByNode($sm);
					o.srules[f]=[sm.bbcode,sm.img];
				},this));
			}
			
			//sort transforms by bbcode length desc
			for (var rootsel in o.rules) {
				this.options.rules[rootsel].sort(function(a,b) {
					return (b[0].length-a[0].length)
				});
			}
			
			//create rootsel list
			this.rsellist = [];
			for (var rootsel in this.options.rules) {
				this.rsellist.push(rootsel);
			}
			this.sortArray(this.rsellist,-1);
		},
		
		//BUILD
		build: function() {
			$.log("Build editor");
			
			//this.$editor = $('<div class="wysibb">');
			this.$editor = $('<div>').addClass("wysibb");
			
			if (this.isMobile) {
				this.$editor.addClass("wysibb-mobile");
			}
			
			//set direction if defined
			if (this.options.direction) {this.$editor.css("direction",this.options.direction)}
			
			this.$editor.insertAfter(this.txtArea).append(this.txtArea);
			
			this.startHeight = this.$txtArea.outerHeight();
			this.$txtArea.addClass("wysibb-texarea");
			this.buildToolbar();
			//Build iframe if needed
			this.$txtArea.wrap('<div class="wysibb-text">');
			
			if (this.options.onlyBBmode===false) {
				var height = this.options.minheight || this.$txtArea.outerHeight();
				var maxheight = this.options.resize_maxheight;
				var mheight = (this.options.autoresize===true) ? this.options.resize_maxheight:height;
				this.$body = $(this.strf('<div class="wysibb-text-editor" style="max-height:{maxheight}px;min-height:{height}px"></div>',{maxheight:mheight,height:height})).insertAfter(this.$txtArea);
				this.body = this.$body[0];
				this.$txtArea.hide();
				
				if (height>32) {
					this.$toolbar.css("max-height",height);
				}
				
				$.log("WysiBB loaded");
				
				this.$body.addClass("wysibb-body").addClass(this.options.bodyClass);
				
				//set direction if defined
				if (this.options.direction) {this.$body.css("direction",this.options.direction)}
				
				
				if ('contentEditable' in this.body) {
					this.body.contentEditable=true;
					try{
						//fix for mfirefox
						//document.execCommand('enableObjectResizing', false, 'false'); //disable image resizing
						document.execCommand('StyleWithCSS', false, false);
						//document.designMode = "on";
						this.$body.append("<span></span>");
					}catch(e) {}
				}else{
					//use onlybbmode
					this.options.onlyBBmode=this.options.bbmode=true;
				}
				
				//check for exist content in textarea
				if (this.txtArea.value.length>0) {
					this.txtAreaInitContent();
				}
				
				
				//clear html on paste from external editors
				this.$body.bind('keydown', $.proxy(function(e) {
					if ((e.which == 86 && (e.ctrlKey==true || e.metaKey==true)) || (e.which == 45 && (e.shiftKey==true || e.metaKey==true))) {
						if (!this.$pasteBlock) {
							this.saveRange();
							this.$pasteBlock = $(this.elFromString('<div style="opacity:0;" contenteditable="true">\uFEFF</div>'));
							
							this.$pasteBlock.appendTo(this.body);
							//if (!$.support.search?type=2) {this.$pasteBlock.focus();} //IE 7,8 FIX
								setTimeout($.proxy(function() {
									this.clearPaste(this.$pasteBlock);
									var rdata = '<span>'+this.$pasteBlock.html()+'</span>';
									this.$body.attr("contentEditable","true");
									this.$pasteBlock.blur().remove();
									this.body.focus();

									if (this.cleartext) {
										$.log("Check if paste to clearText Block");
										if (this.isInClearTextBlock()) {
											rdata = this.toBB(rdata).replace(/\n/g,"<br/>").replace(/\s{3}/g,'<span class="wbbtab"></span>');
										}
									}
									rdata = rdata.replace(/\t/g,'<span class="wbbtab"></span>');
									this.selectRange(this.lastRange);
									this.insertAtCursor(rdata,false);
									this.lastRange=false;
									this.$pasteBlock=false;
								}
								,this), 1);
							this.selectNode(this.$pasteBlock[0]);
						}
						return true;
					}
				},this));
				
				//insert BR on press enter
				this.$body.bind('keydown',$.proxy(function(e) {
					if (e.which == 13) {
						var isLi = this.isContain(this.getSelectNode(),'li');
						if (!isLi) {
							if (e.preventDefault) {e.preventDefault();}
							this.checkForLastBR(this.getSelectNode());
							this.insertAtCursor('<br/>',false);
						}
					}
				},this));
				
				//tabInsert
				if (this.options.tabInsert===true) {
					this.$body.bind('keydown', $.proxy(this.pressTab,this));
				}
				
				//add event listeners
				this.$body.bind('mouseup keyup',$.proxy(this.updateUI,this));
				this.$body.bind('mousedown',$.proxy(function(e) {this.clearLastRange();this.checkForLastBR(e.target)},this));

				//trace Textarea
				if (this.options.traceTextarea===true) {
					$(document).bind("mousedown",$.proxy(this.traceTextareaEvent,this));
					this.$txtArea.val("");
				}

				//attach hotkeys
				if (this.options.hotkeys===true) {
					this.$body.bind('keydown',$.proxy(this.presskey,this));
				}
				
				//smileConversion
				if (this.options.smileConversion===true) {
					this.$body.bind('keyup',$.proxy(this.smileConversion,this));
				}

				this.inited=true;

				//create resize lines
				if (this.options.autoresize===true) {
					this.$bresize = $(this.elFromString('<div class="bottom-resize-line"></div>')).appendTo(this.$editor)
						.wdrag({
							scope:this,
							axisY: true,
							height: height
						});
				}
				
				this.imgListeners();
			}
			
			
			//this.$editor.append('<span class="powered">Powered by <a href="http://www.wysibb.com" target="_blank">WysiBB<a/></span>');
			
			//add event listeners to textarea 
			this.$txtArea.bind('mouseup keyup',$.proxy(function() {
				clearTimeout(this.uitimer);
				this.uitimer = setTimeout($.proxy(this.updateUI,this),100);
			},this));
			
			//attach hotkeys
			if (this.options.hotkeys===true) {
				$(document).bind('keydown',$.proxy(this.presskey,this));
			}
		},
		buildToolbar: function() {
			if (this.options.toolbar === false) {return false;}
			
			//this.$toolbar = $('<div class="wysibb-toolbar">').prependTo(this.$editor);
			this.$toolbar = $('<div>').addClass("wysibb-toolbar").prependTo(this.$editor);
			
			var $btnContainer;
			$.each(this.options.buttons,$.proxy(function(i,bn) {
				var opt = this.options.allButtons[bn];
				if (i==0 || bn=="|" || bn=="-") {
					if (bn=="-") {
						this.$toolbar.append("<div>");
					}
					$btnContainer = $('<div class="wysibb-toolbar-container">').appendTo(this.$toolbar);
				}
				if (opt) {
					if (opt.type=="colorpicker") {
						this.buildColorpicker($btnContainer,bn,opt);
					}else if (opt.type=="table") {
						this.buildTablepicker($btnContainer,bn,opt);
					}else if (opt.type=="select") {
						this.buildSelect($btnContainer,bn,opt);
					}else if (opt.type=="smilebox") {
						this.buildSmilebox($btnContainer,bn,opt);
					}else{
						this.buildButton($btnContainer,bn,opt);
					}
				}
			},this));
			
			//fix for hide tooltip on quick mouse over
			this.$toolbar.find(".btn-tooltip").hover(function () {$(this).parent().css("overflow","hidden")},function() {$(this).parent().css("overflow","visible")});
			
			//build bbcode switch button
			//var $bbsw = $('<div class="wysibb-toolbar-container modeSwitch"><div class="wysibb-toolbar-btn" unselectable="on"><span class="btn-inner ve-tlb-bbcode" unselectable="on"></span></div></div>').appendTo(this.$toolbar);
			var $bbsw = $(document.createElement('div')).addClass("wysibb-toolbar-container modeSwitch").html('<div class="wysibb-toolbar-btn mswitch" unselectable="on"><span class="btn-inner modesw" unselectable="on">[bbcode]</span></div>').appendTo(this.$toolbar);
			if (this.options.bbmode==true) {$bbsw.children(".wysibb-toolbar-btn").addClass("on");}
			if (this.options.onlyBBmode===false) {
				$bbsw.children(".wysibb-toolbar-btn").click($.proxy(function(e) {
					$(e.currentTarget).toggleClass("on");
					this.modeSwitch();
				},this));
			}
		},
		buildButton: function(container,bn,opt) {
			if (typeof(container)!="object") {
				container = this.$toolbar;
			}
			var btnHTML = (opt.buttonHTML) ? $(this.strf(opt.buttonHTML,this.options)).addClass("btn-inner") : this.strf('<span class="btn-inner btn-text">{text}</span>',{text:opt.buttonText.replace(/</g,"&lt;")});
			var hotkey = (this.options.hotkeys===true && this.options.showHotkeys===true && opt.hotkey) ? (' <span class="tthotkey">['+opt.hotkey+']</span>'):""
			var $btn = $('<div class="wysibb-toolbar-btn wbb-'+bn+'">').appendTo(container).append(btnHTML).append(this.strf('<span class="btn-tooltip">{title}<ins/>{hotkey}</span>',{title:opt.title,hotkey:hotkey}));
			
			//attach events
			this.controllers.push($btn);
			$btn.bind('queryState',$.proxy(function(e) {
				(this.queryState(bn)) ? $(e.currentTarget).addClass("on"):$(e.currentTarget).removeClass("on");
			},this));
			$btn.mousedown($.proxy(function(e) {
				e.preventDefault();
				this.execCommand(bn,opt.exvalue || false);
				$(e.currentTarget).trigger('queryState');
			},this));
		},
		buildColorpicker: function(container,bn,opt) {
			var $btn = $('<div class="wysibb-toolbar-btn wbb-dropdown wbb-cp">').appendTo(container).append('<div class="ve-tlb-colorpick"><span class="fonticon">\uE010</span><span class="cp-line"></span></div><ins class="fonticon ar">\uE011</ins>').append(this.strf('<span class="btn-tooltip">{title}<ins/></span>',{title:opt.title}));
			var $cpline = $btn.find(".cp-line");
			
			var $dropblock = $('<div class="wbb-list">').appendTo($btn); 
			$dropblock.append('<div class="nc">'+CURLANG.auto+'</div>');
			var colorlist = (opt.colors) ? opt.colors.split(","):[]; 
			for (var j=0; j<colorlist.length; j++) {
				colorlist[j] = $.trim(colorlist[j]);
				if (colorlist[j]=="-") { 
					//insert padding
					$dropblock.append('<span class="pl"></span>');
				}else{ 
					$dropblock.append(this.strf('<div class="sc" style="background:{color}" title="{color}"></div>',{color:colorlist[j]}));
				}
			}
			var basecolor = $(document.body).css("color");
			//attach events
			this.controllers.push($btn);
			$btn.bind('queryState',$.proxy(function(e) {
				//queryState
				$cpline.css("background-color",basecolor);
				var r = this.queryState(bn,true);
				if (r) {
					$cpline.css("background-color",(this.options.bbmode) ? r.color:r);
					$btn.find(".ve-tlb-colorpick span.fonticon").css("color",(this.options.bbmode) ? r.color:r);
				}
			},this));
			$btn.mousedown($.proxy(function(e) {
				e.preventDefault();
				this.dropdownclick(".wbb-cp",".wbb-list",e);
			},this));
			$btn.find(".sc").mousedown($.proxy(function(e) {
				e.preventDefault();
				this.selectLastRange();
				var c = $(e.currentTarget).attr("title");
				this.execCommand(bn,c);
				$btn.trigger('queryState');
			},this));
			$btn.find(".nc").mousedown($.proxy(function(e) {
				e.preventDefault();
				this.selectLastRange();
				this.execCommand(bn,basecolor);
				$btn.trigger('queryState');
			},this));
			$btn.mousedown(function(e) { 
				if (e.preventDefault) e.preventDefault();
			});
		},
		buildTablepicker: function(container,bn,opt) {
			var $btn = $('<div class="wysibb-toolbar-btn wbb-dropdown wbb-tbl">').appendTo(container).append('<span class="btn-inner fonticon ve-tlb-table1">\uE00e</span><ins class="fonticon ar">\uE011</ins>').append(this.strf('<span class="btn-tooltip">{title}<ins/></span>',{title:opt.title}));
			
			var $listblock = $('<div class="wbb-list">').appendTo($btn);
			var $dropblock = $('<div>').css({"position":"relative","box-sizing":"border-box"}).appendTo($listblock);
			var rows = opt.rows || 10;
			var cols = opt.cols || 10;
			var allcount = rows*cols;
			$dropblock.css("height",(rows*opt.cellwidth+2)+"px");
			for (var j=1; j<=cols; j++) {
				for (var h=1; h<=rows; h++) {
					//var html = this.strf('<div class="tbl-sel" style="width:{width}px;height:{height}px;z-index:{zindex}" title="{row},{col}"></div>',{width: (j*opt.cellwidth),height: (h*opt.cellwidth),zindex: --allcount,row:h,col:j});
					var html = '<div class="tbl-sel" style="width:'+(j*100/cols)+'%;height:'+(h*100/rows)+'%;z-index:'+(--allcount)+'" title="'+h+','+j+'"></div>';
					$dropblock.append(html);
				}
			}
			//this.debug("Attach event on: tbl-sel");
			$btn.find(".tbl-sel").mousedown($.proxy(function(e) {
				e.preventDefault();
				var t = $(e.currentTarget).attr("title");
				var rc = t.split(",");
				var code = (this.options.bbmode) ? '[table]':'<table class="wbb-table" cellspacing="5" cellpadding="0">';
				for (var i=1; i<=rc[0]; i++) {
					code += (this.options.bbmode) ? ' [tr]\n':'<tr>';
					for (var j=1; j<=rc[1]; j++) {
						code += (this.options.bbmode) ? '  [td][/td]\n':'<td>\uFEFF</td>';
					}
					code += (this.options.bbmode) ? '[/tr]\n':'</tr>';
				}
				code += (this.options.bbmode) ? '[/table]':'</table>';
				this.insertAtCursor(code);
			},this));
			//this.debug("END Attach event on: tbl-sel");
			$btn.mousedown($.proxy(function(e) {
				e.preventDefault();
				this.dropdownclick(".wbb-tbl",".wbb-list",e);
			},this));
			
		},
		buildSelect: function(container,bn,opt) {
			var $btn = $('<div class="wysibb-toolbar-btn wbb-select wbb-'+bn+'">').appendTo(container).append(this.strf('<span class="val">{title}</span><ins class="fonticon sar">\uE012</ins>',opt)).append(this.strf('<span class="btn-tooltip">{title}<ins/></span>',{title:opt.title}));  
			var $sblock = $('<div class="wbb-list">').appendTo($btn);
			var $sval = $btn.find("span.val");
			
			var olist = ($.isArray(opt.options)) ? opt.options:opt.options.split(",");
			var $selectbox = (this.isMobile) ? $("<select>").addClass("wbb-selectbox"):"";
			for (var i=0; i<olist.length; i++) {
				var oname = olist[i];
				if (typeof(oname)=="string") {
					var option = this.options.allButtons[oname];
					if (option) {
						//$.log("create: "+oname); 
						if (option.html) {
							$('<span>').addClass("option").attr("oid",oname).attr("cmdvalue",option.exvalue).appendTo($sblock).append(this.strf(option.html,{seltext:option.title}));
						}else{
							$sblock.append(this.strf('<span class="option" oid="'+oname+'" cmdvalue="'+option.exvalue+'">{title}</span>',option));
						}
						
						//SelectBox for mobile devices
						if (this.isMobile) {
							$selectbox.append($('<option>').attr("oid",oname).attr("cmdvalue",option.exvalue).append(option.title));
						}
					}
				}else{
					//build option list from array
					var params = {
						seltext: oname.title
					}
					params[opt.valueBBname]=oname.exvalue;
					$('<span>').addClass("option").attr("oid",bn).attr("cmdvalue",oname.exvalue).appendTo($sblock).append(this.strf(opt.html,params));
					
					if (this.isMobile) {$selectbox.append($('<option>').attr("oid",bn).attr("cmdvalue",oname.exvalue).append(oname.exvalue))}
				}
			}
			//$sblock.append($selectbox);
			if (this.isMobile) {
				$selectbox.appendTo(container);
				this.controllers.push($selectbox);
				
				$selectbox.bind('queryState',$.proxy(function(e) {
					//queryState
					$selectbox.find("option").each($.proxy(function(i,el){
						var $el = $(el);
						var r = this.queryState($el.attr("oid"),true);
						var cmdvalue = $el.attr("cmdvalue");
						if ((cmdvalue && r==$el.attr("cmdvalue")) || (!cmdvalue && r)) {
							$el.prop("selected",true);
							return false;
						}
					},this));
				},this));
				
				$selectbox.change($.proxy(function(e) {
					e.preventDefault();
					var $o =  $(e.currentTarget).find(":selected");
					var oid = $o.attr("oid");
					var cmdvalue = $o.attr("cmdvalue");
					var opt = this.options.allButtons[oid];
					this.execCommand(oid,opt.exvalue || cmdvalue || false);
					$(e.currentTarget).trigger('queryState');
				},this));
				
			}
			this.controllers.push($btn);
			$btn.bind('queryState',$.proxy(function(e) {
				//queryState
				$sval.text(opt.title);
				$btn.find(".option.selected").removeClass("selected");
				$btn.find(".option").each($.proxy(function(i,el){
					var $el = $(el);
					var r = this.queryState($el.attr("oid"),true);
					var cmdvalue = $el.attr("cmdvalue");
					if ((cmdvalue && r==$el.attr("cmdvalue")) || (!cmdvalue && r)) {
						$sval.text($el.text());
						$el.addClass("selected");
						return false;
					}
				},this));
			},this));
			$btn.mousedown($.proxy(function(e) {
				e.preventDefault();
				this.dropdownclick(".wbb-select",".wbb-list",e);
			},this));
			$btn.find(".option").mousedown($.proxy(function(e) {
				e.preventDefault();
				var oid = $(e.currentTarget).attr("oid");
				var cmdvalue = $(e.currentTarget).attr("cmdvalue");
				var opt = this.options.allButtons[oid];
				this.execCommand(oid,opt.exvalue || cmdvalue || false);
				$(e.currentTarget).trigger('queryState');
			},this));
		},
		buildSmilebox: function(container,bn,opt) {
			if (this.options.smileList && this.options.smileList.length>0) {
				var $btnHTML = $(this.strf(opt.buttonHTML,opt)).addClass("btn-inner");
				var $btn = $('<div class="wysibb-toolbar-btn wbb-smilebox wbb-'+bn+'">').appendTo(container).append($btnHTML).append(this.strf('<span class="btn-tooltip">{title}<ins/></span>',{title:opt.title}));  
				var $sblock = $('<div class="wbb-list">').appendTo($btn);
				if ($.isArray(this.options.smileList)) {
					$.each(this.options.smileList,$.proxy(function(i,sm){
						$('<span>').addClass("smile").appendTo($sblock).append($(this.strf(sm.img,this.options)).attr("title",sm.title));
					},this));
				}
				$btn.mousedown($.proxy(function(e) {
					e.preventDefault();
					this.dropdownclick(".wbb-smilebox",".wbb-list",e);
				},this));
				$btn.find('.smile').mousedown($.proxy(function(e) {
					e.preventDefault();
					//this.selectLastRange();
					this.insertAtCursor((this.options.bbmode) ? this.toBB($(e.currentTarget).html()):$($(e.currentTarget).html()));
				},this))
			}
		},
		updateUI: function(e) {
			if (!e || ((e.which>=8 && e.which<=46) || e.which>90 || e.type=="mouseup")) {
				$.each(this.controllers,$.proxy(function(i,$btn) {
					$btn.trigger('queryState');
				},this));
			}
			
			//check for onlyClearText
			this.disNonActiveButtons();
			
		},
		initModal: function() {
			this.$modal=$("#wbbmodal");
			if (this.$modal.size()==0) {
				$.log("Init modal");
				this.$modal = $('<div>').attr("id","wbbmodal").prependTo(document.body)
					.html('<div class="wbbm"><div class="wbbm-title"><span class="wbbm-title-text"></span><span class="wbbclose" title="'+CURLANG.close+'">×</span></div><div class="wbbm-content"></div><div class="wbbm-bottom"><button id="wbbm-submit" class="wbb-button">'+CURLANG.save+'</button><button id="wbbm-cancel" class="wbb-cancel-button">'+CURLANG.cancel+'</button><button id="wbbm-remove" class="wbb-remove-button">'+CURLANG.remove+'</button></div></div>').hide();
				
				this.$modal.find('#wbbm-cancel,.wbbclose').click($.proxy(this.closeModal,this));
				this.$modal.bind('click',$.proxy(function(e) {
					if ($(e.target).parents(".wbbm").size()==0) {
						this.closeModal();
					}
				},this));
				
				$(document).bind("keydown",$.proxy(this.escModal,this)); //ESC key close modal
			}
		},
		initHotkeys: function() {
			$.log("initHotkeys");
			this.hotkeys=[];
			var klist = "0123456789       abcdefghijklmnopqrstuvwxyz";
			$.each(this.options.allButtons,$.proxy(function(cmd,opt) {
				if (opt.hotkey) {
					var keys = opt.hotkey.split("+");
 					if (keys && keys.length>=2) {
						var metasum=0;
						var key = keys.pop();
						$.each(keys,function(i,k) {
							switch($.trim(k.toLowerCase())) {
								case "ctrl": {metasum+=1;break;}
								case "shift": {metasum+=4;break;}
								case "alt": {metasum+=7;break;}
							}
						})
						//$.log("metasum: "+metasum+" key: "+key+" code: "+(klist.indexOf(key)+48));
						if (metasum>0) {
							if (!this.hotkeys["m"+metasum]) {this.hotkeys["m"+metasum]=[];}
							this.hotkeys["m"+metasum]["k"+(klist.indexOf(key)+48)]=cmd;
						}
					}
				}
			},this))
		},
		presskey: function(e) {
			if (e.ctrlKey==true || e.shiftKey==true || e.altKey==true) {
				var  metasum = ((e.ctrlKey==true) ? 1:0)+((e.shiftKey==true) ? 4:0)+((e.altKey==true) ? 7:0);
				if (this.hotkeys["m"+metasum] && this.hotkeys["m"+metasum]["k"+e.which]) {
					this.execCommand(this.hotkeys["m"+metasum]["k"+e.which],false);
					e.preventDefault();
					return false;
				}
			}
		},
		
		//COgdfMMAND FUNCTIONS
		execCommand: function(command,value) {
			$.log("execCommand: "+command);
			var opt = this.options.allButtons[command];
			if (opt.en!==true) {return false;}
			var queryState = this.queryState(command,value);
			
			//check for onlyClearText
			var skipcmd = this.isInClearTextBlock();
			if (skipcmd && skipcmd!=command) {return;}
			
			
			if (opt.excmd) {
				//use NativeCommand
				if (this.options.bbmode) {
					$.log("Native command in bbmode: "+command);
					if (queryState && opt.subInsert!=true) {
						//remove bbcode
						this.wbbRemoveCallback(command,value);
					}else{
						//insert bbcode
						var v = {};
						if (opt.valueBBname && value) {
							v[opt.valueBBname]=value;
						}
						this.insertAtCursor(this.getBBCodeByCommand(command,v));
					}
				}else{
					this.execNativeCommand(opt.excmd,value || false);
				}
			}else if (!opt.cmd) {
				//wbbCommand
				//this.wbbExecCommand(command,value,queryState,$.proxy(this.wbbInsertCallback,this),$.proxy(this.wbbRemoveCallback,this));
				this.wbbExecCommand.call(this,command,value,queryState);
			}else{
				//user custom command
				opt.cmd.call(this,command,value,queryState);
			}
			this.updateUI();
		},
		queryState: function(command,withvalue) {
			var opt = this.options.allButtons[command];
			if (opt.en!==true) {return false;}
			//if (opt.subInsert===true && opt.type!="colorpicker") {return false;}
			if (this.options.bbmode) {
				//bbmode
				if (opt.bbSelector) {
					for (var i=0; i<opt.bbSelector.length; i++) {
						var b = this.isBBContain(opt.bbSelector[i]);
						if (b) {
							return this.getParams(b,opt.bbSelector[i],b[1]);
						}
					}
				}
				return false;
			}else{
				if (opt.excmd) {
					//native command
					if (withvalue) {
						try {
							//Firefox fix
							var v = (document.queryCommandValue(opt.excmd)+"").replace(/\'/g,"");
							if (opt.excmd=="foreColor") {
								v = this.rgbToHex(v);
							}
							//return (v==value);
							return v;
						}catch(e) {return false;}
					}else{
						try { //Firefox fix, exception while get queryState for UnorderedList
							if ((opt.excmd=="bold" || opt.excmd=="italic" || opt.excmd=="underline" || opt.excmd=="strikeThrough") && $(this.getSelectNode()).is("img")) { //Fix, when img selected
								return false;
							}else if (opt.excmd=="underline" && $(this.getSelectNode()).closest("a").size()>0) { //fix, when link select
								return false;
							}
							return document.queryCommandState(opt.excmd);
						}catch(e) {return false;}
					}
				}else{
					//custom command
					if ($.isArray(opt.rootSelector)) {
						for (var i=0; i<opt.rootSelector.length; i++) {
							var n = this.isContain(this.getSelectNode(),opt.rootSelector[i]);
							if (n) {
								return this.getParams(n,opt.rootSelector[i]);
							}
						}
					}
					return false;
				}
			}
		},
		wbbExecCommand: function(command,value,queryState) { //default command for custom bbcodes
			$.log("wbbExecCommand");
			var opt = this.options.allButtons[command];
			if (opt) {
				if (opt.modal) {
					if ($.isFunction(opt.modal)) {
						//custom modal function
						//opt.modal(command,opt.modal,queryState,new clbk(this));
						opt.modal.call(this,command,opt.modal,queryState);
					}else{
						this.showModal.call(this,command,opt.modal,queryState);
					}
				}else{
					if (queryState && opt.subInsert!=true) {
						//remove formatting
						//removeCallback(command,value);
						this.wbbRemoveCallback(command);
					}else{
						//insert format
						if (opt.groupkey) {
							var groupsel = this.options.groups[opt.groupkey];
							if (groupsel) {
								var snode = this.getSelectNode();
								$.each(groupsel,$.proxy(function(i,sel) {
									var is = this.isContain(snode,sel);
									if (is) {
										var $sp = $('<span>').html(is.innerHTML)
										var id = this.setUID($sp);
										$(is).replaceWith($sp);
										this.selectNode(this.$editor.find("#"+id)[0]);
										return false;
									}
								},this));
							}
						}
						this.wbbInsertCallback(command,value)
					}
				}
			}
		},
		wbbInsertCallback: function(command,paramobj) {
			if (typeof(paramobj)!="object") {paramobj={}};
			$.log("wbbInsertCallback: "+command);
			var data = this.getCodeByCommand(command,paramobj);
			this.insertAtCursor(data);
			
			if (this.seltextID && data.indexOf(this.seltextID)!=-1) {
				var snode = this.$body.find("#"+this.seltextID)[0];
				this.selectNode(snode);
				$(snode).removeAttr("id");
				this.seltextID=false;
			}
		},
		wbbRemoveCallback: function(command,clear) {
			$.log("wbbRemoveCallback: "+command);
			var opt = this.options.allButtons[command];
			if (this.options.bbmode) {
				//bbmode
				//REMOVE BBCODE
				var pos = this.getCursorPosBB();
				var stextnum=0;
				$.each(opt.bbSelector,$.proxy(function(i,bbcode) {
					var stext = bbcode.match(/\{[\s\S]+?\}/g);
					$.each(stext,function(n,s) {
						if (s.toLowerCase()=="{seltext}") {stextnum=n;return false}
					});
					var a = this.isBBContain(bbcode);
					if (a) {
						this.txtArea.value = this.txtArea.value.substr(0,a[1])+this.txtArea.value.substr(a[1],this.txtArea.value.length-a[1]).replace(a[0][0],(clear===true) ? '':a[0][stextnum+1]);
						this.setCursorPosBB(a[1]);
						return false;
					}
				},this));
			}else{
				var node = this.getSelectNode();
				$.each(opt.rootSelector,$.proxy(function(i,s) {
					//$.log("RS: "+s);
					var root = this.isContain(node,s);
					if (!root) {return true;}
					var $root = $(root);
					var cs = this.options.rules[s][0][1];
					if ($root.is("span[wbb]") || !$root.is("span,font")) { //remove only blocks
						if (clear===true || (!cs || !cs["seltext"])) {
							this.setCursorByEl($root);
							$root.remove();
						}else{
							if (cs && cs["seltext"] && cs["seltext"]["sel"]) {
								var htmldata = $root.find(cs["seltext"]["sel"]).html();
								if (opt.onlyClearText===true) {
									htmldata = this.getHTML(htmldata,true,true);
									htmldata = htmldata.replace(/\&#123;/g,"{").replace(/\&#125;/g,"}");
								}
								$root.replaceWith(htmldata);
							}else{
								var htmldata = $root.html();
								if (opt.onlyClearText===true) {
									htmldata = this.getHTML(htmldata,true);
									htmldata = htmldata.replace(/\&lt;/g,"<").replace(/\&gt;/g,">").replace(/\&#123;/g,"{").replace(/\&#125;/g,"}");
								}
								$root.replaceWith(htmldata);
							}
						}
						return false;
					}else{
						//span,font - extract select content from this span,font
						var rng = this.getRange();
						var shtml = this.getSelectText();
						var rnode = this.getSelectNode();
						if (shtml=="") {
							shtml="\uFEFF";
						}else{
							shtml = this.clearFromSubInsert(shtml,command);
						}
						var ins = this.elFromString(shtml);
						
						var before_rng = (window.getSelection) ? rng.cloneRange():this.body.createTextRange();
						var after_rng = (window.getSelection) ? rng.cloneRange():this.body.createTextRange();

						if (window.getSelection) {
							this.insertAtCursor('<span id="wbbdivide"></span>');
							var div = $root.find('span#wbbdivide').get(0);
							before_rng.setStart(root.firstChild,0);
							before_rng.setEndBefore(div);
							after_rng.setStartAfter(div);
							after_rng.setEndAfter(root.lastChild);
						}else{
							before_rng.moveToElementText(root);
							after_rng.moveToElementText(root);
							before_rng.setEndPoint('EndToStart',rng);
							after_rng.setEndPoint('StartToEnd',rng);
						}
						var bf = this.getSelectText(false,before_rng);
						var af = this.getSelectText(false,after_rng);
						if (af!="") {
							var $af = $root.clone().html(af);
							$root.after($af);
						}
						if (clear!==true) $root.after(ins); //insert select html
						if (window.getSelection) {
							$root.html(bf);
							if (clear!==true) this.selectNode(ins);
						}else{
							$root.replaceWith(bf);
						}
						return false;
					}
				},this));
			}
		},
		execNativeCommand: function(cmd,param) { 
			//$.log("execNativeCommand: '"+cmd+"' : "+param); 
			this.body.focus(); //set focus to frame body
			if (cmd=="insertHTML" && !window.getSelection) { //IE does't support insertHTML
				var r = (this.lastRange) ? this.lastRange:document.selection.createRange(); //IE 7,8 range lost fix
				r.pasteHTML(param);
				var txt = $('<div>').html(param).text(); //for ie selection inside block
				var brsp = txt.indexOf("\uFEFF");
				if (brsp>-1) {
					r.moveStart('character',(-1)*(txt.length-brsp));
					r.select();
				}
				this.lastRange=false;
			}else if (cmd=="insertHTML") { //fix webkit bug with insertHTML
				var sel = this.getSelection();
				var e = this.elFromString(param);
				var rng = (this.lastRange) ? this.lastRange:this.getRange();
				rng.deleteContents();
				rng.insertNode(e);
				rng.collapse(false);
				sel.removeAllRanges();
				sel.addRange(rng);
			}else{
				if (typeof param == "undefined") {param=false;}
				if (this.lastRange) {
					$.log("Last range select");
					this.selectLastRange()
				}
				document.execCommand(cmd, false, param);
			}
			
		},
		getCodeByCommand: function(command,paramobj) {
			return (this.options.bbmode) ? this.getBBCodeByCommand(command,paramobj):this.getHTMLByCommand(command,paramobj);
		},
		getBBCodeByCommand: function(command,params) {
			if (!this.options.allButtons[command]) {return "";}
			if (typeof(params)=="undefined") {params={};}
			params = this.keysToLower(params);
			if (!params["seltext"]) {
				//get selected text
				params["seltext"] = this.getSelectText(true);
			}
			
			var bbcode = this.options.allButtons[command].bbcode;
			//bbcode = this.strf(bbcode,params);
			bbcode = bbcode.replace(/\{(.*?)(\[.*?\])*\}/g,function(str,p,vrgx) {
				if (vrgx) {
					var vrgxp;
					if (vrgx) {
						vrgxp = new RegExp(vrgx+"+","i");
					}
					if (typeof(params[p.toLowerCase()])!="undefined" && params[p.toLowerCase()].toString().match(vrgxp)===null) {
						//not valid value
						return "";
					}
				}
				return (typeof(params[p.toLowerCase()])=="undefined") ? "":params[p.toLowerCase()];
			});
			
			//insert first with max params
			var rbbcode=null,maxpcount=0;
			if (this.options.allButtons[command].transform) {
				var tr=[];
				$.each(this.options.allButtons[command].transform,function(html,bb) {
					tr.push(bb);
				});
				tr=this.sortArray(tr,-1);
				$.each(tr,function(i,v) {
					var valid=true,pcount=0,pname={};;
					v = v.replace(/\{(.*?)(\[.*?\])*\}/g,function(str,p,vrgx) {
						var vrgxp;
						p = p.toLowerCase();
						if (vrgx) {
							vrgxp = new RegExp(vrgx+"+","i");
						}
						if (typeof(params[p.toLowerCase()])=="undefined" || (vrgx && params[p.toLowerCase()].toString().match(vrgxp)===null)) {valid=false;};
						if (typeof(params[p])!="undefined" && !pname[p]) {pname[p]=1;pcount++;}
						return (typeof(params[p.toLowerCase()])=="undefined") ? "":params[p.toLowerCase()];
					});
					if (valid && (pcount>maxpcount)) {rbbcode = v;maxpcount=pcount;}
				});
			}
			return rbbcode || bbcode;
		},
		getHTMLByCommand: function(command,params) {
			if (!this.options.allButtons[command]) {return "";}
			params = this.keysToLower(params);
			if (typeof(params)=="undefined") {params={};}
			if (!params["seltext"]) {
				//get selected text
				params["seltext"] = this.getSelectText(false);
				//$.log("seltext: '"+params["seltext"]+"'");
				if (params["seltext"]=="") {params["seltext"]="\uFEFF";}
				else{
					//clear selection from current command tags
					params["seltext"] = this.clearFromSubInsert(params["seltext"],command);
					
					//toBB if params onlyClearText=true
					if (this.options.allButtons[command].onlyClearText===true) {
						params["seltext"] = this.toBB(params["seltext"]).replace(/\</g,"&lt;").replace(/\n/g,"<br/>").replace(/\s{3}/g,'<span class="wbbtab"></span>'); 
					}
					
				}
			}
			
			var postsel="";
			this.seltextID = "wbbid_"+(++this.lastid);
			if (command!="link" && command!="img") {
				params["seltext"] = '<span id="'+this.seltextID+'">'+params["seltext"]+'</span>'; //use for select seltext
			}else{
				postsel = '<span id="'+this.seltextID+'">\uFEFF</span>'
			}
			var html = this.options.allButtons[command].html;
			html = html.replace(/\{(.*?)(\[.*?\])*\}/g,function(str,p,vrgx) {
				if (vrgx) {
					var vrgxp = new RegExp(vrgx+"+","i");
					if (typeof(params[p.toLowerCase()])!="undefined" && params[p.toLowerCase()].toString().match(vrgxp)===null) {
						//not valid value
						return "";
					}
				}
				return (typeof(params[p.toLowerCase()])=="undefined") ? "":params[p.toLowerCase()];
			});
			
			//insert first with max params
			var rhtml=null,maxpcount=0;
			if (this.options.allButtons[command].transform) {
				var tr=[];
				$.each(this.options.allButtons[command].transform,function(html,bb) {
					tr.push(html);
				});
				tr=this.sortArray(tr,-1);
				$.each(tr,function(i,v) {
					var valid=true, pcount=0,pname={};
					v = v.replace(/\{(.*?)(\[.*?\])*\}/g,function(str,p,vrgx) {
						var vrgxp;
						p = p.toLowerCase();
						if (vrgx) {
							vrgxp = new RegExp(vrgx+"+","i");
						}
						if (typeof(params[p])=="undefined" || (vrgx && params[p].toString().match(vrgxp)===null)) {valid=false;};
						if (typeof(params[p])!="undefined" && !pname[p]) {pname[p]=1;pcount++;}
						return (typeof(params[p])=="undefined") ? "":params[p];
					});
					if (valid && (pcount>maxpcount)) {rhtml = v;maxpcount=pcount;}
				});
			}
			return (rhtml || html)+postsel;
		},
		
		//SELECTION FUNCTIONS
		getSelection: function() {
			if (window.getSelection) {
				return window.getSelection();
			}else if (document.selection) {
				return (this.options.bbmode) ? document.selection.createRange():document.selection.createRange();
			}
		},
		getSelectText: function(fromTxtArea,range) {
			if (fromTxtArea) {
				//return select text from textarea
				this.txtArea.focus();
				if('selectionStart' in this.txtArea) {
					var l = this.txtArea.selectionEnd - this.txtArea.selectionStart;
					return this.txtArea.value.substr(this.txtArea.selectionStart, l);
				}else{
					//IE
					var r = document.selection.createRange();
					return r.text;
				}
			}else{
				//return select html from body
				this.body.focus();
				if (!range)  {range=this.getRange()};
				if (window.getSelection) {
					//w3c
					if (range) {
						return $('<div>').append(range.cloneContents()).html();
					}
				}else{
					//ie
					return range.htmlText;
				}
			}
			return "";
		},
		getRange: function() {
			if (window.getSelection) {
				var sel = this.getSelection();
				if (sel.getRangeAt && sel.rangeCount>0) {
					return sel.getRangeAt(0);
				}else if (sel.anchorNode) {
					var range = (this.options.bbmode) ? document.createRange() : document.createRange();
					range.setStart (sel.anchorNode, sel.anchorOffset);
					range.setEnd (sel.focusNode, sel.focusOffset);
					return range;
				}
			}else{
				return (this.options.bbmode===true) ? document.selection.createRange():document.selection.createRange();
			}
		},
		insertAtCursor: function(code,forceBBMode) {
			if (typeof(code)!="string") {code = $("<div>").append(code).html();}
			if ((this.options.bbmode && typeof(forceBBMode)=="undefined") || forceBBMode===true) {
				var clbb = code.replace(/.*(\[\/\S+?\])$/,"$1");
				var p = this.getCursorPosBB()+((code.indexOf(clbb)!=-1 && code.match(/\[.*\]/)) ? code.indexOf(clbb):code.length);
				if (document.selection) {
					//IE
					this.txtArea.focus();
					this.getSelection().text=code;
				}else if (this.txtArea.selectionStart || this.txtArea.selectionStart == '0') {
					this.txtArea.value = this.txtArea.value.substring(0, this.txtArea.selectionStart) + code + this.txtArea.value.substring(this.txtArea.selectionEnd, this.txtArea.value.length);
				}
				if (p<0) {p=0;}
				this.setCursorPosBB(p);
			}else{
				this.execNativeCommand("insertHTML",code);
				var node = this.getSelectNode();
				if (!$(node).closest("table,tr,td")) {
					this.splitPrevNext(node);
				}
			}
		},
		getSelectNode: function(rng) {
			this.body.focus();
			if (!rng) {rng=this.getRange();}
			if (!rng) {return this.$body;}
			//return (window.getSelection) ? rng.commonAncestorContainer:rng.parentElement();
			var sn = (window.getSelection) ? rng.commonAncestorContainer:rng.parentElement();
			if ($(sn).is(".imgWrap")) {sn = $(sn).children("img")[0];}
			return sn;
		},
		getCursorPosBB: function() {	
			var pos=0;
			if ('selectionStart' in this.txtArea) {
				pos = this.txtArea.selectionStart;
			}else{
				this.txtArea.focus();
				var r = this.getRange();
				var rt = document.body.createTextRange();
				rt.moveToElementText(this.txtArea);
				rt.setEndPoint('EndToStart',r);
				pos = rt.text.length;
			}
			return pos;
		},
		setCursorPosBB: function(pos) {
			if (this.options.bbmode) {
				if (window.getSelection) {
					this.txtArea.selectionStart=pos;
					this.txtArea.selectionEnd=pos;
				}else{
					var range = this.txtArea.createTextRange();
					range.collapse(true);
					range.move('character', pos);
					range.select();
				}
			}
		},
		selectNode: function(node,rng) {
			if (!rng) {rng = this.getRange();}
			if (!rng) {return;}
			if (window.getSelection) {
				var sel = this.getSelection();
				rng.selectNodeContents(node)
				sel.removeAllRanges();
				sel.addRange(rng);
			}else{
				rng.moveToElementText(node);
				rng.select();
			}
		},
		selectRange: function(rng) {
			if (rng) {
				if (!window.getSelection) {
					rng.select();
				}else{
					var sel = this.getSelection();
					sel.removeAllRanges();
					sel.addRange(rng);
				}
			}
		},
		cloneRange: function(rng) {
			if (rng) {
				if (!window.getSelection) {
					return rng.duplicate();
				}else{
					return rng.cloneRange();
				}
			}
		},
		getRangeClone: function() {
			return this.cloneRange(this.getRange());
		},
		saveRange: function() {
			this.setBodyFocus();
			//this.lastRange=(this.options.bbmode) ? this.getCursorPosBB():this.getRangeClone();
			this.lastRange=this.getRangeClone();
		},
		selectLastRange: function() {
			if (this.lastRange) {
				this.body.focus();
				this.selectRange(this.lastRange);
				this.lastRange=false;
			}
		},
		setBodyFocus: function() {
			/*$.log("Set focus to WysiBB editor");
			if (this.options.bbmode) {
				if (!this.$txtArea.is(":focus")) {
					this.$txtArea.focus();
				}
			}else{
				if (!this.$body.is(":focus")) {
					this.$body.focus();
				}
			}*/
		},
		clearLastRange: function() {
			this.lastRange=false;
		},
		 
		//TRANSFORM FUNCTIONS
		filterByNode: function(node) {
			var $n = $(node);
			var tagName = $n.get(0).tagName.toLowerCase();
			var filter=tagName;
			var attributes = this.getAttributeList($n.get(0));
			$.each(attributes, $.proxy(function(i, item) {
				var v = $n.attr(item);
				/* $.log("v: "+v);
				if ($.inArray(item,this.options.attrWrap)!=-1) {
					item = '_'+item;
				} */
				//$.log(item);
				if (item.substr(0,1)=="_") {item=item.substr(1,item.length)}
				if (v && !v.match(/\{.*?\}/)) {
					//$.log("I1: "+item);
					if (item=="style") {
						var v = $n.attr(item);
						var va = v.split(";");
						$.each(va,function(i,f) {
							if (f && f.length>0) {
								filter+='['+item+'*="'+$.trim(f)+'"]';
							}
						});
					}else{
						filter+='['+item+'="'+v+'"]';
					}
				}else if (v && item=="style") {
					//$.log("I2: "+item);
					var vf = v.substr(0,v.indexOf("{"));
					if (vf && vf!="") {
						var v = v.substr(0,v.indexOf("{"));
						var va = v.split(";");
						$.each(va,function(i,f) {
							filter+='['+item+'*="'+f+'"]';
						});
						//filter+='['+item+'*="'+v.substr(0,v.indexOf("{"))+'"]';
					}
				}else{ //1.2.2
					//$.log("I3: "+item);
					filter+='['+item+']';
				}
			},this));
			
			//index
			var idx = $n.parent().children(filter).index($n);
			if (idx>0) {
				filter+=":eq("+$n.index()+")";
			}
			return filter;
		},
		relFilterByNode: function(node,stop) {
			var p="";
			$.each(this.options.attrWrap,function(i,a) {
				stop = stop.replace('['+a,'[_'+a);
			});
			while (node && node.tagName!="BODY" && !$(node).is(stop)) {
				p=this.filterByNode(node)+" "+p;
				if (node) {node = node.parentNode;}
			}
			return p;
		},
		getRegexpReplace: function(str,validname) {
			str = str.replace(/(\(|\)|\[|\]|\.|\*|\?|\:|\\)/g,"\\$1") 
				.replace(/\s+/g,"\\s+")
				.replace(validname.replace(/(\(|\)|\[|\]|\.|\*|\?|\:|\\)/g,"\\$1"),"(.+)")
				.replace(/\{\S+?\}/g,".*");
			return (str);
		},
		getBBCode: function() {
			if (!this.options.rules) {return this.$txtArea.val();}
			if (this.options.bbmode) {return this.$txtArea.val();}
			this.clearEmpty();
			this.removeLastBodyBR();
			return this.toBB(this.$body.html());
		},
		toBB: function(data) {
			if (!data) {return "";};
			var $e = (typeof(data)=="string") ? $('<span>').html(data):$(data);
			//remove last BR
			$e.find("div,blockquote,p").each(function() {
				if (this.nodeType!=3 && this.lastChild && this.lastChild.tagName=="BR") {
					$(this.lastChild).remove();
				}
			})
			if ($e.is("div,blockquote,p") && $e[0].nodeType!=3 && $e[0].lastChild && $e[0].lastChild.tagName=="BR") {
				$($e[0].lastChild).remove();
			}
			//END remove last BR
			
			//Remove BR
			$e.find("ul > br, table > br, tr > br").remove();
			//IE
			
			var outbb="";
			
			//transform smiles
			$.each(this.options.srules,$.proxy(function(s,bb) {
				$e.find(s).replaceWith(bb[0]);
			},this));
			
			$e.contents().each($.proxy(function(i,el) {
				var $el = $(el);
				if (el.nodeType===3) {
					outbb+=el.data.replace(/\n+/,"").replace(/\t/g,"   ");
				}else{
					//process html tag
					var rpl,processed=false;

					//for (var rootsel in this.options.rules) {
					for (var j=0; j<this.rsellist.length; j++) {
						var rootsel = this.rsellist[j];
						if ($el && $el.is(rootsel)) {
							//it is root sel
							var rlist = this.options.rules[rootsel];
							for (var i=0; i<rlist.length; i++) {
								var bbcode = rlist[i][0];
								var crules = rlist[i][1];
								var skip=false,keepElement=false,keepAttr=false;
								if (!$el.is("br")) {
									bbcode = bbcode.replace(/\n/g,"<br>");
								}
								bbcode = bbcode.replace(/\{(.*?)(\[.*?\])*\}/g,$.proxy(function(str,s,vrgx) {
									var c = crules[s.toLowerCase()];
									//if (typeof(c)=="undefined") {$.log("Param: {"+s+"} not found in HTML representation.");skip=true;return s;}
									if (typeof(c)=="undefined") {$.log("Param: {"+s+"} not found in HTML representation.");skip=true;}
									var $cel = (c.sel) ? $(el).find(c.sel):$(el);
									if (c.attr && !$cel.attr(c.attr)) {skip=true;return s;} //skip if needed attribute not present, maybe other bbcode
									var cont = (c.attr) ? $cel.attr(c.attr):$cel.html();
									if (typeof(cont)=="undefined" || cont==null) {skip=true;return s;}
									var regexp = c.rgx;
									
									//style fix 
									if (regexp && c.attr=="style" && regexp.substr(regexp.length-1,1)!=";") {
										regexp+=";";
									}
									if (c.attr=="style" && cont && cont.substr(cont.length-1,1)!=";") {cont+=";"}
									//prepare regexp
									var rgx = (regexp) ? new RegExp(regexp,""):false;
									if (rgx) {
										if (cont.match(rgx)) {
											var m = cont.match(rgx);
											if (m && m.length==2) {
												cont=m[1];
											}
										}else{
											cont="";
										}
									}
									
									//if it is style attr, then keep tag alive, remove this style
									if (c.attr && skip===false) {
										if (c.attr=="style") {
											keepElement=true;
											var nstyle="";
											var r = c.rgx.replace(/^\.\*\?/,"").replace(/\.\*$/,"").replace(/;$/,"");
											$($cel.attr("style").split(";")).each(function(idx,style) {
												if (style && style!="") {
													if (!style.match(r)) {
														nstyle+=style+";";
													}
												}
											});
											if (nstyle=="") {
												$cel.removeAttr("style");
											}else{
												$cel.attr("style",nstyle);
											}
										}else if (c.rgx===false){	
											keepElement=true;
											keepAttr=true;
											$cel.removeAttr(c.attr);
										}
									}
									if ($el.is('table,tr,td,font')) {keepElement=true;}
									
									return cont || "";
								},this));
								if (skip) {continue;}
								if ($el.is("img,br,hr")) {
									//replace element
									outbb+=bbcode;
									$el=null;
									break;
								}else{
									if (keepElement && !$el.attr("notkeep")) {
										if ($el.is("table,tr,td")) {
											bbcode = this.fixTableTransform(bbcode);
											outbb+=this.toBB($('<span>').html(bbcode));
											$el=null;
										}else{
											$el.empty().html('<span>'+bbcode+'</span>');
										}
										
									}else{
										if ($el.is("iframe")) {
											outbb+=bbcode;
										}else{
											$el.empty().html(bbcode);
											outbb+=this.toBB($el);
											$el=null;
											
										}
										break;
									}
								}
							}
						}
					}
					if (!$el || $el.is("iframe,img")) {return true;}
					outbb+=this.toBB($el);
				}
			},this));
			
			outbb.replace(/\uFEFF/g,"");
			return outbb;
		},
		getHTML: function(bbdata,init,skiplt) {
			if (!this.options.bbmode && !init) {return this.$body.html()}
			
			if (!skiplt) {bbdata = bbdata.replace(/</g,"&lt;").replace(/\{/g,"&#123;").replace(/\}/g,"&#125;");}
			bbdata = bbdata.replace(/\[code\]([\s\S]*?)\[\/code\]/g,function(s) {
				s = s.substr("[code]".length,s.length-"[code]".length-"[/code]".length).replace(/\[/g,"&#91;").replace(/\]/g,"&#93;");
				return "[code]"+s+"[/code]";
			});
			
			
			$.each(this.options.btnlist,$.proxy(function(i,b){
				if (b!="|" && b!="-") {
					var find=true;
					if (!this.options.allButtons[b] || !this.options.allButtons[b].transform) {
						return true;
					}

					$.each(this.options.allButtons[b].transform,$.proxy(function(html,bb) {
						html = html.replace(/\n/g,""); //IE 7,8 FIX
						var a=[];
						bb = bb.replace(/(\(|\)|\[|\]|\.|\*|\?|\:|\\|\\)/g,"\\$1");
							//.replace(/\s/g,"\\s");
						bb = bb.replace(/\{(.*?)(\\\[.*?\\\])*\}/gi,$.proxy(function(str,s,vrgx) {
							a.push(s);
							if (vrgx) {
								//has validation regexp
								vrgx = vrgx.replace(/\\/g,"");
								return "("+vrgx+"*?)";
							}
							return "([\\s\\S]*?)";
						},this));
						var n=0,am;
						while ((am = (new RegExp(bb,"mgi")).exec(bbdata)) != null) {
							if (am) {
								var r={};
								$.each(a,$.proxy(function(i,k) {
									r[k]=am[i+1];
								},this));
								var nhtml = html;
								nhtml = nhtml.replace(/\{(.*?)(\[.*?\])\}/g,"{$1}");
								nhtml = this.strf(nhtml,r);
								bbdata = bbdata.replace(am[0],nhtml);
							}
						}
					},this));
				}
			},this));
			
			//transform system codes
			$.each(this.options.systr,function(html,bb) {
				bb = bb.replace(/(\(|\)|\[|\]|\.|\*|\?|\:|\\|\\)/g,"\\$1")
					.replace(" ","\\s");
				bbdata = bbdata.replace(new RegExp(bb,"g"),html);
			});
			
			
			var $wrap = $(this.elFromString("<div>"+bbdata+"</div>"));
			//transform smiles
			/* $wrap.contents().filter(function() {return this.nodeType==3}).each($.proxy(smilerpl,this)).end().find("*").contents().filter(function() {return this.nodeType==3}).each($.proxy(smilerpl,this));
			
			function smilerpl(i,el) {
				var ndata = el.data;
				$.each(this.options.smileList,$.proxy(function(i,row) {
					var fidx = ndata.indexOf(row.bbcode);
					if (fidx!=-1) {
						var afternode_txt = ndata.substring(fidx+row.bbcode.length,ndata.length);
						var afternode = document.createTextNode(afternode_txt);
						el.data = ndata = el.data.substr(0,fidx);
						$(el).after(afternode).after(this.strf(row.img,this.options));
					}
				},this));	
			} */
			this.getHTMLSmiles($wrap);
			//$wrap.contents().filter(function() {return this.nodeType==3}).each($.proxy(this,smileRPL,this));
			
			return $wrap.html();
		},
		getHTMLSmiles: function(rel) {
			$(rel).contents().filter(function() {return this.nodeType==3}).each($.proxy(this.smileRPL,this));
		},
		smileRPL: function(i,el) {
			var ndata = el.data;
			$.each(this.options.smileList,$.proxy(function(i,row) {
				var fidx = ndata.indexOf(row.bbcode);
				if (fidx!=-1) {
					var afternode_txt = ndata.substring(fidx+row.bbcode.length,ndata.length);
					var afternode = document.createTextNode(afternode_txt);
					el.data = ndata = el.data.substr(0,fidx);
					$(el).after(afternode).after(this.strf(row.img,this.options));
					this.getHTMLSmiles(el.parentNode);
					return false;
				}
			this.getHTMLSmiles(el);
			},this));	
		},
		//UTILS
		setUID: function(el,attr) {
			var id = "wbbid_"+(++this.lastid);
			if (el) {
				$(el).attr(attr || "id",id);
			}
			return id;
		},
		keysToLower: function(o) {
			$.each(o,function(k,v) {
				if (k!=k.toLowerCase()) {
					delete o[k];
					o[k.toLowerCase()]=v;
				}
			});
			return o;
		},
		strf: function(str,data) {
			data = this.keysToLower($.extend({},data));
			return str.replace(/\{([\w\.]*)\}/g, function (str, key) {key = key.toLowerCase();var keys = key.split("."), value = data[keys.shift().toLowerCase()];$.each(keys, function () { value = value[this]; }); return (value === null || value === undefined) ? "" : value;});
		},
		elFromString: function(str) {
			if (str.indexOf("<")!=-1 && str.indexOf(">")!=-1) {
				//create tag
				var wr = document.createElement("SPAN");
				$(wr).html(str);
				this.setUID(wr,"wbb");
				return ($(wr).contents().size()>1) ? wr:wr.firstChild;
			}else{
				//create text node
				return document.createTextNode(str);
			}
		},
		isContain: function(node,sel) {
			while (node && !$(node).hasClass("wysibb")) {
				if ($(node).is(sel)) {return node};
				if (node) {node = node.parentNode;}
				else{return null;}
			}
		},
		isBBContain: function(bbcode) {
			var pos=this.getCursorPosBB();
			var b = this.prepareRGX(bbcode);
			var bbrgx = new RegExp(b,"g");
			var a;
			var lastindex=0;
			while ((a=bbrgx.exec(this.txtArea.value))!=null) {
				var p = this.txtArea.value.indexOf(a[0],lastindex);
				if (pos>p && pos<(p+a[0].length)) {
					return [a,p];
				}
				lastindex=p+1;
			}
		},
		prepareRGX: function(r) {
			return r.replace(/(\[|\]|\)|\(|\.|\*|\?|\:|\||\\)/g,"\\$1").replace(/\{.*?\}/g,"([\\s\\S]*?)");
			//return r.replace(/([^a-z0-9)/ig,"\\$1").replace(/\{.*?\}/g,"([\\s\\S]*?)");
		},
		checkForLastBR: function(node) {
			if (!node) {$node = this.body;} 
			if (node.nodeType==3) {node=node.parentNode;}
			var $node = $(node);
			if ($node.is("span[id*='wbbid']")) {$node = $node.parent();}
			if (this.options.bbmode===false && $node.is('div,blockquote,code') && $node.contents().size()>0) {
				var l = $node[0].lastChild;
				if (!l || (l && l.tagName!="BR")) {$node.append("<br/>");}
			}
			if (this.$body.contents().size()>0 && this.body.lastChild.tagName!="BR") {
				this.$body.append('<br/>');
			}
		},
		getAttributeList: function(el) {
			var a=[];
			$.each(el.attributes,function(i,attr) {
				if (attr.specified) {
					a.push(attr.name);
				}
			});
			return a;
		},
		clearFromSubInsert: function(html,cmd) {
			if (this.options.allButtons[cmd] && this.options.allButtons[cmd].rootSelector) {
				var $wr = $('<div>').html(html);
				$.each(this.options.allButtons[cmd].rootSelector,$.proxy(function(i,s) {
					var seltext=false;
					if (typeof(this.options.rules[s][0][1]["seltext"])!="undefined") {
						seltext = this.options.rules[s][0][1]["seltext"]["sel"];
					}
					var res=true;
					$wr.find("*").each(function() { //work with find("*") and "is", becouse in ie7-8 find is case sensitive
						if ($(this).is(s)) {
							if (seltext && seltext["sel"]) {
								$(this).replaceWith($(this).find(seltext["sel"].toLowerCase()).html());
							}else{
								$(this).replaceWith($(this).html());
							}
							res=false;
						}
					});
					return res;
				},this));
				return $wr.html();
			}
			return html;
		},
		splitPrevNext: function(node) {
			if (node.nodeType==3) {node = node.parentNode};
			var f = this.filterByNode(node).replace(/\:eq.*$/g,"");
			if ($(node.nextSibling).is(f)) {
				$(node).append($(node.nextSibling).html());
				$(node.nextSibling).remove();
			}
			if ($(node.previousSibling).is(f)) {
				$(node).prepend($(node.previousSibling).html());
				$(node.previousSibling).remove();
			}
		},
		modeSwitch: function() {
			if (this.options.bbmode) {
				//to HTML
				this.$body.html(this.getHTML(this.$txtArea.val()));
				this.$txtArea.hide().removeAttr("wbbsync").val("");
				this.$body.css("min-height",this.$txtArea.height()).show().focus();
			}else{
				//to bbcode
				this.$txtArea.val(this.getBBCode()).css("min-height",this.$body.height());
				this.$body.hide();
				this.$txtArea.show().focus();
			}
			this.options.bbmode=!this.options.bbmode;
		},
		clearEmpty: function () {
			this.$body.children().filter(emptyFilter).remove();
			function emptyFilter() {
				if (!$(this).is("span,font,a,b,i,u,s")) {
					//clear empty only for span,font
					return false;
				}
				if (!$(this).hasClass("wbbtab") && $.trim($(this).html()).length==0) {
					return true;
				}else if ($(this).children().size()>0) {
					$(this).children().filter(emptyFilter).remove();
					if ($(this).html().length==0 && this.tagName!="BODY") {
						return true;
					}
				}
			}
		},
		dropdownclick: function(bsel,tsel,e) {
			//this.body.focus();
			var $btn = $(e.currentTarget).closest(bsel);
			if ($btn.hasClass("dis")) {return;}
			if ($btn.attr("wbbshow")) {
				//hide dropdown
				$btn.removeAttr("wbbshow");
				$(document).unbind("mousedown",this.dropdownhandler);
				if (document) {
					$(document).unbind("mousedown",this.dropdownhandler);
				}
				this.lastRange=false;
				
			}else{
				this.saveRange();
				this.$editor.find("*[wbbshow]").each(function(i,el) {
					$(el).removeClass("on").find($(el).attr("wbbshow")).hide().end().removeAttr("wbbshow");
				})
				$btn.attr("wbbshow",tsel);
				$(document.body).bind("mousedown",$.proxy(function(evt) {this.dropdownhandler($btn,bsel,tsel,evt)},this));
				if (this.$body) {
					this.$body.bind("mousedown",$.proxy(function(evt) {this.dropdownhandler($btn,bsel,tsel,evt)},this));
				}
			}
			$btn.find(tsel).toggle();
			$btn.toggleClass("on");
		},
		dropdownhandler: function($btn,bsel,tsel,e) {
			if ($(e.target).parents(bsel).size()==0) {
				$btn.removeClass("on").find(tsel).hide();
				$(document).unbind('mousedown',this.dropdownhandler);
				if (this.$body) {
					this.$body.unbind('mousedown',this.dropdownhandler);
				}
			}
		},
		rgbToHex: function(rgb) {
			if (rgb.substr(0, 1)=='#') {return rgb;}
			//if (rgb.indexOf("rgb")==-1) {return rgb;}
			if (rgb.indexOf("rgb")==-1) {
				//IE
				var color=parseInt(rgb);
				color = ((color & 0x0000ff) << 16) | (color & 0x00ff00) | ((color & 0xff0000) >>> 16);
				return '#'+color.toString(16);
			}
			var digits = /(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/.exec(rgb);
			return "#"+this.dec2hex(parseInt(digits[2]))+this.dec2hex(parseInt(digits[3]))+this.dec2hex(parseInt(digits[4])); 
		},
		dec2hex: function(d) {
			if(d>15) {
				return d.toString(16);
			}else{
				return "0"+d.toString(16);
			}
		},
		sync: function() {
			if (this.options.bbmode) {
				this.$body.html(this.getHTML(this.txtArea.value,true));
			}else{
				this.$txtArea.attr("wbbsync",1).val(this.getBBCode());
			}
		},
		clearPaste: function(el) {
			var $block = $(el);
			//NEW 
			$.each(this.options.rules,$.proxy(function(s,ar) {
				var $sf = $block.find(s).attr("wbbkeep",1);
				if ($sf.size()>0) {
					var s2 = ar[0][1];
					$.each(s2,function(i,v) {
						if (v.sel) {
							$sf.find(v.sel).attr("wbbkeep",1);
						}
					});
				}
			},this));
			$block.find("*[wbbkeep!='1']").each($.proxy(function(i,el) {
				var $this = $(el);
				if ($this.is('div,p') && ($this.children().size()==0 || el.lastChild.tagName!="BR")) {
					$this.after("<br/>");
				}
			},this));
			$block.find("*[wbbkeep]").removeAttr("wbbkeep").removeAttr("style");
			$.log($block.html());
			//$.log("BBCODE: "+this.toBB($block.clone(true)));
			$block.html(this.getHTML(this.toBB($block),true));
			$.log($block.html());
			
			//OLD
			/* $.each(this.options.rules,$.proxy(function(s,bb) {
				$block.find(s).attr("wbbkeep",1);
			},this));
			
			//replace div and p without last br to html()+br
			$block.find("*[wbbkeep!='1']").each($.proxy(function(i,el) {
				var $this = $(el);
				if ($this.is('div,p') && ($this.children().size()==0 || el.lastChild.tagName!="BR")) {
					$this.after("<br/>").after($this.contents()).remove();
				}else{
					$this.after($this.contents()).remove();
				}
			},this));
			$block.find("*[wbbkeep]").removeAttr("wbbkeep").removeAttr("style"); */
		},
		sortArray: function(ar,asc) {
			ar.sort(function(a,b) {
				return (a.length-b.length)*(asc || 1);
			});
			return ar;
		},
		smileFind: function() {
			if (this.options.smilefind) {
				var $smlist = $(this.options.smilefind).find('img[alt]');
				if ($smlist.size()>0) {
					this.options.smileList=[];
					$smlist.each($.proxy(function(i,el) {
						var $el=$(el);
						this.options.smileList.push({title:$el.attr("title"),bbcode:$el.attr("alt"),img:$el.removeAttr("alt").removeAttr("title")[0].outerHTML});
					},this));
				}
			}
		},
		destroy: function() {
			this.$editor.replaceWith(this.$txtArea);
			this.$txtArea.removeClass("wysibb-texarea").show();
			this.$modal.remove();
			this.$txtArea.data("wbb",null);
		},
		pressTab: function(e) {
			if (e && e.which == 9) {
				//insert tab
				if (e.preventDefault) {e.preventDefault();}
				if (this.options.bbmode) {
					this.insertAtCursor('   ',false);
				}else{
					this.insertAtCursor('<span class="wbbtab">\uFEFF</span>',false);
					//this.execNativeCommand("indent",false); 
				}
			}
		},
		removeLastBodyBR: function() {
			if (this.body.lastChild && this.body.lastChild.nodeType!=3 && this.body.lastChild.tagName=="BR") {
				this.body.removeChild(this.body.lastChild);
				this.removeLastBodyBR();
			}
		},
		traceTextareaEvent: function(e) {
			if ($(e.target).closest("div.wysibb").size()==0) {
				if ($(document.activeElement).is("div.wysibb-body")) {
					this.saveRange();
				}
				setTimeout($.proxy(function() {
					var data = this.$txtArea.val();
					if (this.options.bbmode===false && data!="" && $(e.target).closest("div.wysibb").size()==0 && !this.$txtArea.attr("wbbsync")) {
						this.selectLastRange();
						this.insertAtCursor(this.getHTML(data,true));
						this.$txtArea.val("");
					}
					if ($(document.activeElement).is("div.wysibb-body")) {
						this.lastRange=false;
					}
				},this),100);
			}
		},
		txtAreaInitContent: function() {
			//$.log(this.txtArea.value);
			this.$body.html(this.getHTML(this.txtArea.value,true));
		},
		getValidationRGX: function(s) {
			if (s.match(/\[\S+\]/)) {
				return s.replace(/.*(\\*\[\S+\]).*/,"$1");
			}
			return "";
		},
		smileConversion: function() {
			if (this.options.smileList && this.options.smileList.length>0) {
				var snode = this.getSelectNode();
				if (snode.nodeType==3) {
					var ndata = snode.data;
					if (ndata.length>=2 && !this.isInClearTextBlock(snode) && $(snode).parents("a").size()==0) {
						$.each(this.options.srules,$.proxy(function(i,sar) {
							var smbb = sar[0];
							var fidx = ndata.indexOf(smbb);
							if (fidx!=-1) {
								var afternode_txt = ndata.substring(fidx+smbb.length,ndata.length);
								var afternode = document.createTextNode(afternode_txt);
								var afternode_cursor = document.createElement("SPAN");
								snode.data = snode.data.substr(0,fidx);
								$(snode).after(afternode).after(afternode_cursor).after(this.strf(sar[1],this.options));
								this.selectNode(afternode_cursor);
								return false;
							}
						},this));
					}
				}
			}
		},
		isInClearTextBlock: function() {
			if (this.cleartext) {
				var find=false;
				$.each(this.cleartext,$.proxy(function(sel,command) {
					if (this.queryState(command)) {
						find=command;
						return false;
					}
				},this))
				return find;
			}
			return false;
		},
		wrapAttrs: function(html) {
			$.each(this.options.attrWrap,function(i,a) {
				html = html.replace(a+'="','_'+a+'="');
			});
			return html;
		},
		unwrapAttrs: function(html) {
			$.each(this.options.attrWrap,function(i,a) {
				html = html.replace('_'+a+'="',a+'="');
			});
			return html;
		},
		disNonActiveButtons: function() {
			if (this.isInClearTextBlock()) {
				this.$toolbar.find(".wysibb-toolbar-btn:not(.on,.mswitch)").addClass("dis");
			}else{
				this.$toolbar.find(".wysibb-toolbar-btn.dis").removeClass("dis");
			}
		},
		setCursorByEl: function(el) {
			var sl = document.createTextNode("\uFEFF");
			$(el).after(sl);
			this.selectNode(sl);
		},
		
		//img listeners
		imgListeners: function() {
			$(document).on("mousedown",$.proxy(this.imgEventHandler,this));
		},
		imgEventHandler: function(e) {
			var $e = $(e.target);
			if (this.hasWrapedImage && ($e.closest(".wbb-img,#wbbmodal").size()==0 || $e.hasClass("wbb-cancel-button"))) {
				this.$body.find(".imgWrap ").each(function() {
					$.log("Removed imgWrap block");
					$(this).replaceWith($(this).find("img"));
				})
				this.hasWrapedImage = false;
				this.updateUI();
			}
			
			if ($e.is("img") && $e.closest(".wysibb-body").size()>0) {
				$e.wrap("<span class='imgWrap'></span>");
				this.hasWrapedImage = $e;
				this.$body.focus();
				this.selectNode($e.parent()[0]);
			}
		},
		
		//MODAL WINDOW
		showModal: function(cmd,opt,queryState) {
			$.log("showModal: "+cmd);
			this.saveRange();
			var $cont = this.$modal.find(".wbbm-content").html("");
			var $wbbm = this.$modal.find(".wbbm").removeClass("hastabs");
			this.$modal.find("span.wbbm-title-text").html(opt.title);
			if (opt.tabs && opt.tabs.length>1) {
				//has tabs, create
				$wbbm.addClass("hastabs");
				var $ul = $('<div class="wbbm-tablist">').appendTo($cont).append("<ul>").children("ul");
				$.each(opt.tabs,$.proxy(function(i,row) {
					if (i==0) {row['on']="on"}
					$ul.append(this.strf('<li class="{on}" onClick="$(this).parent().find(\'.on\').removeClass(\'on\');$(this).addClass(\'on\');$(this).parents(\'.wbbm-content\').find(\'.tab-cont\').hide();$(this).parents(\'.wbbm-content\').find(\'.tab'+i+'\').show()">{title}</li>',row));
					
				},this))
			}
			if (opt.width) {
				$wbbm.css("width",opt.width);
			}
			var $cnt = $('<div class="wbbm-cont">').appendTo($cont);
			if (queryState) {
				$wbbm.find('#wbbm-remove').show();
			}else{
				$wbbm.find('#wbbm-remove').hide();
			}
			$.each(opt.tabs,$.proxy(function(i,r) {
				var $c = $('<div>').addClass("tab-cont tab"+i).attr("tid",i).appendTo($cnt);
				if (i>0) {$c.hide();} 
				if (r.html) {
					$c.html(this.strf(r.html,this.options));
				}else{
					$.each(r.input,$.proxy(function(j,inp) {
						inp["value"]=queryState[inp.param.toLowerCase()];
						if (inp.param.toLowerCase()=="seltext" && (!inp["value"] || inp["value"]=="")) {
							inp["value"] = this.getSelectText(this.options.bbmode);
						}
						if (inp["value"] && inp["value"].indexOf("<span id='wbbid")==0 && $(inp["value"]).is("span[id*='wbbid']")) {
							inp["value"] = $(inp["value"]).html();
						}
						if (inp.type && inp.type=="div") {
							//div input, support wysiwyg input
							$c.append(this.strf('<div class="wbbm-inp-row"><label>{title}</label><div class="inp-text div-modal-text" contenteditable="true" name="{param}">{value}</div></div>',inp));
						}else{
							//default input
							$c.append(this.strf('<div class="wbbm-inp-row"><label>{title}</label><input class="inp-text modal-text" type="text" name="{param}" value="{value}"/></div>',inp));
						}
						
						
					},this));
				}
			},this));
			
			//this.lastRange=this.getRange();
			
			if ($.isFunction(opt.onLoad)) {
				opt.onLoad.call(this,cmd,opt,queryState);
			}
			
			$wbbm.find('#wbbm-submit').click($.proxy(function() {
				
				if ($.isFunction(opt.onSubmit)) { //custom submit function, if return false, then don't process our function
					var r = opt.onSubmit.call(this,cmd,opt,queryState);
					if (r===false) {return;}
				}
				var params={};
				var valid=true;
				this.$modal.find(".wbbm-inperr").remove();
				this.$modal.find(".wbbm-brdred").removeClass("wbbm-brdred");
				//$.each(this.$modal.find(".tab-cont:visible input"),$.proxy(function(i,el) {
				$.each(this.$modal.find(".tab-cont:visible .inp-text"),$.proxy(function(i,el) {
					var tid = $(el).parents(".tab-cont").attr("tid");
					var pname = $(el).attr("name").toLowerCase();
					var pval="";
					if ($(el).is("input,textrea,select")) {
						pval = $(el).val();
					}else{
						pval = $(el).html();
					}
					var validation = opt.tabs[tid]["input"][i]["validation"];
					if (typeof(validation)!="undefined") {
						if (!pval.match(new RegExp(validation,"i"))) {
							valid=false;
							$(el).after('<span class="wbbm-inperr">'+CURLANG.validation_err+'</span>').addClass("wbbm-brdred");
						}
					}
					params[pname]=pval;
				},this));
				if (valid) {
					$.log("Last range: "+this.lastRange);
					this.selectLastRange();
					//insert callback
					if (queryState) {
						this.wbbRemoveCallback(cmd,true);
					}
					this.wbbInsertCallback(cmd,params);
					//END insert callback
					
					this.closeModal();
					this.updateUI();
				}
			},this));
			$wbbm.find('#wbbm-remove').click($.proxy(function() {
				//clbk.remove();
				this.selectLastRange();
				this.wbbRemoveCallback(cmd); //remove callback
				this.closeModal();
				this.updateUI();
			},this));
			
			$(document.body).css("overflow","hidden"); //lock the screen, remove scroll on body
			if ($("body").height() > $(window).height()) { //if body has scroll, add padding-right 18px
				$(document.body).css("padding-right","18px");
			}
			this.$modal.show();
			//if (window.getSelection) 
			if (this.isMobile) {
				$wbbm.css("margin-top","10px");
			}else{
				$wbbm.css("margin-top",($(window).height()-$wbbm.outerHeight())/3+"px");
			}
			//setTimeout($.proxy(function() {this.$modal.find("input:visible")[0].focus()},this),10);
			setTimeout($.proxy(function() {this.$modal.find(".inp-text:visible")[0].focus()},this),10);
		},
		escModal: function(e) {
			if (e.which==27) {this.closeModal();}
		},
		closeModal: function() {
			$(document.body).css("overflow","auto").css("padding-right","0").unbind("keyup",this.escModal); //ESC key close modal;
			this.$modal.find('#wbbm-submit,#wbbm-remove').unbind('click');
			this.$modal.hide();
			this.lastRange=false;
			return this;
		},
		getParams: function(src,s,offset) {
			var params={};
			if (this.options.bbmode) {
				//bbmode
				var stext = s.match(/\{[\s\S]+?\}/g);
				s = this.prepareRGX(s);
				var rgx = new RegExp(s,"g");
				var val = this.txtArea.value;
				if (offset>0) {
					val = val.substr(offset,val.length-offset);
				}
				var a = rgx.exec(val);
				if (a) {
					$.each(stext,function(i,n) {
						params[n.replace(/\{|\}/g,"").replace(/"/g,"'").toLowerCase()] = a[i+1];
					});
				}
			}else{
				var rules = this.options.rules[s][0][1];
				$.each(rules,$.proxy(function(k,v) {
					var value="";
					var $v = (v.sel!==false) ? value=$(src).find(v.sel):$(src);
					if (v.attr!==false) {
						value=$v.attr(v.attr);
					}else{
						value=$v.html();
					}
					if (value) {
						if (v.rgx!==false) {
							var m = value.match(new RegExp(v.rgx));
							if (m && m.length==2) {
								value = m[1];
							}
						}
						params[k]=value.replace(/"/g,"'");
					}
				},this))
			}
			return params;
		},
		
		 
		//imgUploader
		imgLoadModal: function() {
			$.log("imgLoadModal");
			if (this.options.imgupload===true) {
				this.$modal.find("#imguploader").dragfileupload({
					url: this.strf(this.options.img_uploadurl,this.options),
					extraParams: {
						maxwidth: this.options.img_maxwidth,
						maxheight: this.options.img_maxheight
					},
					themePrefix: this.options.themePrefix,
					themeName: this.options.themeName,
					success: $.proxy(function(data) {
						this.$txtArea.insertImage(data.image_link,data.thumb_link);
						
						this.closeModal();
						this.updateUI();
					},this)
				});
				
				this.$modal.find("#fileupl").bind("change",function() {
					$("#fupform").submit();
				});
				this.$modal.find("#fupform").bind("submit",$.proxy(function(e) {
					$(e.target).parents("#imguploader").hide().after('<div class="loader"><img src="'+this.options.themePrefix+'/'+this.options.themeName+'/img/loader.gif" /><br/><span>'+CURLANG.loading+'</span></div>').parent().css("text-align","center");
				},this))
				
			}else{
				this.$modal.find(".hastabs").removeClass("hastabs");
				this.$modal.find("#imguploader").parents(".tab-cont").remove();
				this.$modal.find(".wbbm-tablist").remove();
			}
		},
		imgSubmitModal: function() {
			$.log("imgSubmitModal");
		},
		//DEBUG
		printObjectInIE: function(obj) {
			try{
			$.log(JSON.stringify(obj));
			}catch(e) {}
		},
		checkFilter: function(node,filter) {
			$.log("node: "+$(node).get(0).outerHTML+" filter: "+filter+" res: "+$(node).is(filter.toLowerCase()));
		},
		debug: function(msg) {
			if (this.options.debug===true) {
				var time = (new Date()).getTime();
				if (typeof(console)!="undefined") {
					console.log((time-this.startTime)+" ms: "+msg);
				}else{
					$("#exlog").append('<p>'+(time-this.startTime)+" ms: "+msg+'</p>');  
				}
				this.startTime=time;
			}
		},
		
		//Browser fixes
		isChrome: function() {
			return (window.chrome) ? true:false;
		},
		fixTableTransform: function(html) {
			if (!html) {return "";}
			if ($.inArray("table",this.options.buttons)==-1) {
				return html.replace(/\<(\/*?(table|tr|td|tbody))[^>]*\>/ig,"");
			}else{
				return html.replace(/\<(\/*?(table|tr|td))[^>]*\>/ig,"[$1]".toLowerCase()).replace(/\<\/*tbody[^>]*\>/ig,"");
			}
		}
	}
	
	$.log = function(msg) {
		if (typeof(wbbdebug)!="undefined" && wbbdebug===true) {
			if (typeof(console)!="undefined") {
				console.log(msg);
			}else{
				$("#exlog").append('<p>'+msg+'</p>');  
			}
		}
	}
	$.fn.wysibb = function(settings) {
		return this.each(function() {
			var data = $(this).data("wbb");
			if (!data) {
				new $.wysibb(this, settings);
			}
		});
	}
	$.fn.wdrag = function(opt) {
		if (!opt.scope) {opt.scope=this;}
		var start={x:0,y:0, height: 0};
		var drag;
		opt.scope.drag_mousedown = function(e) {
			e.preventDefault();
			start = {
				x: e.pageX,
				y: e.pageY,
				height: opt.height,
				sheight: opt.scope.$body.height()
			}
			drag=true;
			$(document).bind("mousemove",$.proxy(opt.scope.drag_mousemove,this));
			$(this).addClass("drag");
		};
		opt.scope.drag_mouseup = function(e) {
			if (drag===true) {
				e.preventDefault();
				$(document).unbind("mousemove",opt.scope.drag_mousemove);
				$(this).removeClass("drag");
				drag=false;
			}
		};
		opt.scope.drag_mousemove = function(e) {
			e.preventDefault();
			var axisX=0,axisY=0;
			if (opt.axisX) {
				axisX = e.pageX-start.x;
			}
			if (opt.axisY) {
				axisY = e.pageY-start.y;
			}
			if (axisY!=0) {
				var nheight = start.sheight+axisY;
				if (nheight>start.height && nheight<=opt.scope.options.resize_maxheight) {
					if (opt.scope.options.bbmode==true) {
						opt.scope.$txtArea.css((opt.scope.options.autoresize===true) ? "min-height":"height",nheight+"px");
					}else{
						opt.scope.$body.css((opt.scope.options.autoresize===true) ? "min-height":"height",nheight+"px");
					}
				}
			}
		};

		
		$(this).bind("mousedown",opt.scope.drag_mousedown);
		$(document).bind("mouseup",$.proxy(opt.scope.drag_mouseup,this));
	},
	
	//API
	$.fn.getDoc = function() {
		return this.data('wbb').doc;
	}
	$.fn.getSelectText = function(fromTextArea) {
		return this.data('wbb').getSelectText(fromTextArea);
	}
	$.fn.bbcode = function(data) {
		if (typeof(data)!="undefined") {
			if (this.data('wbb').options.bbmode) {
				this.data('wbb').$txtArea.val(data);
			}else{
				this.data('wbb').$body.html(this.data("wbb").getHTML(data));
			}
			return this;
		}else{
			return this.data('wbb').getBBCode();
		}
	}
	$.fn.htmlcode = function(data) {
		if (!this.data('wbb').options.onlyBBMode && this.data('wbb').inited===true) {
			if (typeof(data)!="undefined") {
				this.data('wbb').$body.html(data);
				return this;
			}else{
				return this.data('wbb').getHTML(this.data('wbb').$txtArea.val());
			}
		}
	}
	$.fn.getBBCode = function() {
		return this.data('wbb').getBBCode();
	}
	$.fn.getHTML = function() {
		var wbb = this.data('wbb');
		return wbb.getHTML(wbb.$txtArea.val());
	}
	$.fn.getHTMLByCommand = function(command,params) {
		return this.data("wbb").getHTMLByCommand(command,params);
	}
	$.fn.getBBCodeByCommand = function(command,params) {
		return this.data("wbb").getBBCodeByCommand(command,params);
	}
	$.fn.insertAtCursor = function(data,forceBBMode) {
		this.data("wbb").insertAtCursor(data,forceBBMode);
		return this.data("wbb");
	}
	$.fn.execCommand = function(command,value) {
		this.data("wbb").execCommand(command,value);
		return this.data("wbb");
	}
	$.fn.insertImage = function(imgurl,thumburl) {
		var editor = this.data("wbb");
		var code = (thumburl) ? editor.getCodeByCommand('link',{url:imgurl,seltext: editor.getCodeByCommand('img',{src:thumburl})}): editor.getCodeByCommand('img',{src:imgurl});
		this.insertAtCursor(code);
		return editor;
	}
	$.fn.sync = function() {
		this.data("wbb").sync();
		return this.data("wbb");
	}
	$.fn.destroy = function() {
		this.data("wbb").destroy();
	}
	
	
	$.fn.queryState = function(command) {
		return this.data("wbb").queryState(command);
	}
})(jQuery);


//Drag&Drop file uploader
(function($) {
	'use strict';
	
	$.fn.dragfileupload = function(options) {		
		return this.each(function() { 
			var upl = new FileUpload(this, options);
			upl.init();
		});
	}; 
	
	function FileUpload(e, options) {
		this.$block=$(e);
		
		this.opt = $.extend({
			url: false,
			success: false,
			extraParams: false,
			fileParam: 'img',
			validation: '\.(jpg|png|gif|jpeg)$',
			
			t1: CURLANG.fileupload_text1,
			t2: CURLANG.fileupload_text2
		},options);
	}
	
	FileUpload.prototype = {
		init: function() {
			if (window.FormData != null) {
				this.$block.addClass("drag");
				this.$block.prepend('<div class="p2">'+this.opt.t2+'</div>');
				this.$block.prepend('<div class="p">'+this.opt.t1+'</div>');
				
				this.$block.bind('dragover', function() {$(this).addClass('dragover');return false;});
				this.$block.bind('dragleave', function() {$(this).removeClass('dragover');return false;});
				
				//upload progress
				var uploadProgress = $.proxy(function(e) { 
					var p = parseInt(e.loaded/e.total*100, 10);
					this.$loader.children("span").text(CURLANG.loading+': '+ p+'%');
					
				}, this);
				var xhr = jQuery.ajaxSettings.xhr(); 
				if (xhr.upload) {
					xhr.upload.addEventListener('progress', uploadProgress, false);
				}
				this.$block[0].ondrop = $.proxy(function(e) {
					e.preventDefault();
					this.$block.removeClass('dragover');
					var ufile = e.dataTransfer.files[0];
					if (this.opt.validation && !ufile.name.match(new RegExp(this.opt.validation))) {
						this.error(CURLANG.validation_err);
						return false;
					}
					var fData = new FormData();
					fData.append(this.opt.fileParam, ufile);
					
					if (this.opt.extraParams) { //check for extraParams to upload
						$.each(this.opt.extraParams,function(k,v) {
							fData.append(k, v);
						});
					}
					
					this.$loader = $('<div class="loader"><img src="'+this.opt.themePrefix+'/'+this.opt.themeName+'/img/loader.gif" /><br/><span>'+CURLANG.loading+'</span></div>');
					this.$block.html(this.$loader);
					
					$.ajax({
						type: 'POST',
						url: this.opt.url,
						data: fData,
						processData: false,
						contentType: false,
						xhr: function() {return xhr},
						dataType: 'json',
						success: $.proxy(function(data) {
							if (data && data.status==1) {
								this.opt.success(data); 
							}else{
								this.error(data.msg || CURLANG.error_onupload);
							}
						},this),
						error: $.proxy(function (xhr, txt, thr) {this.error(CURLANG.error_onupload)},this)
					});
				},this);
				
			}
		},
		error: function(msg) {
			this.$block.find(".upl-error").remove().end().append('<span class="upl-error">'+msg+'</span>').addClass("wbbm-brdred");
		}
	}
})(jQuery);;
(function(){var a,b,c,d,e,f,g,h,i=[].slice,j={}.hasOwnProperty,k=function(a,b){function c(){this.constructor=a}for(var d in b)j.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};g=function(){},b=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?i.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;f>e;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;g>f;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),a=function(a){function c(a,b){var e,f,g;if(this.element=a,this.version=c.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(c.instances.push(this),this.element.dropzone=this,e=null!=(g=c.optionsForElement(this.element))?g:{},this.options=d({},this.defaultOptions,e,null!=b?b:{}),this.options.forceFallback||!c.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.previewsContainer=this.options.previewsContainer?c.getElement(this.options.previewsContainer,"previewsContainer"):this.element),this.options.clickable&&(this.clickableElements=this.options.clickable===!0?[this.element]:c.getElements(this.options.clickable,"clickable")),this.init()}var d,e;return k(c,a),c.prototype.Emitter=b,c.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],c.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,filesizeBase:1e3,maxFiles:null,filesizeBase:1e3,params:{},clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,capture:null,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",accept:function(a,b){return b()},init:function(){return g},forceFallback:!1,fallback:function(){var a,b,d,e,f,g;for(this.element.className=""+this.element.className+" dz-browser-not-supported",g=this.element.getElementsByTagName("div"),e=0,f=g.length;f>e;e++)a=g[e],/(^| )dz-message($| )/.test(a.className)&&(b=a,a.className="dz-message");return b||(b=c.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(b)),d=b.getElementsByTagName("span")[0],d&&(d.textContent=this.options.dictFallbackMessage),this.element.appendChild(this.getFallbackForm())},resize:function(a){var b,c,d;return b={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},c=a.width/a.height,b.optWidth=this.options.thumbnailWidth,b.optHeight=this.options.thumbnailHeight,null==b.optWidth&&null==b.optHeight?(b.optWidth=b.srcWidth,b.optHeight=b.srcHeight):null==b.optWidth?b.optWidth=c*b.optHeight:null==b.optHeight&&(b.optHeight=1/c*b.optWidth),d=b.optWidth/b.optHeight,a.height<b.optHeight||a.width<b.optWidth?(b.trgHeight=b.srcHeight,b.trgWidth=b.srcWidth):c>d?(b.srcHeight=a.height,b.srcWidth=b.srcHeight*d):(b.srcWidth=a.width,b.srcHeight=b.srcWidth/d),b.srcX=(a.width-b.srcWidth)/2,b.srcY=(a.height-b.srcHeight)/2,b},drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:g,dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:g,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,d,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=c.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),l=a.previewElement.querySelectorAll("[data-dz-name]"),f=0,i=l.length;i>f;f++)b=l[f],b.textContent=a.name;for(m=a.previewElement.querySelectorAll("[data-dz-size]"),g=0,j=m.length;j>g;g++)b=m[g],b.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=c.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),d=function(b){return function(d){return d.preventDefault(),d.stopPropagation(),a.status===c.UPLOADING?c.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?c.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this),n=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],h=0,k=n.length;k>h;h++)e=n[h],o.push(e.addEventListener("click",d));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),f=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),d=0,e=f.length;e>d;d++)c=f[d],c.alt=a.name,c.src=b;return setTimeout(function(){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.textContent=b);return g}},errormultiple:g,processing:function(a){return a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink)?a._removeLink.textContent=this.options.dictCancelUpload:void 0},processingmultiple:g,uploadprogress:function(a,b){var c,d,e,f,g;if(a.previewElement){for(f=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push("PROGRESS"===c.nodeName?c.value=b:c.style.width=""+b+"%");return g}},totaluploadprogress:g,sending:g,sendingmultiple:g,success:function(a){return a.previewElement?a.previewElement.classList.add("dz-success"):void 0},successmultiple:g,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:g,complete:function(a){return a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement?a.previewElement.classList.add("dz-complete"):void 0},completemultiple:g,maxfilesexceeded:g,maxfilesreached:g,queuecomplete:g,previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>'},d=function(){var a,b,c,d,e,f,g;for(d=arguments[0],c=2<=arguments.length?i.call(arguments,1):[],f=0,g=c.length;g>f;f++){b=c[f];for(a in b)e=b[a],d[a]=e}return d},c.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.accepted&&e.push(a);return e},c.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.accepted||e.push(a);return e},c.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;d>c;c++)b=e[c],b.status===a&&f.push(b);return f},c.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(c.QUEUED)},c.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(c.UPLOADING)},c.prototype.getActiveFiles=function(){var a,b,d,e,f;for(e=this.files,f=[],b=0,d=e.length;d>b;b++)a=e[b],(a.status===c.UPLOADING||a.status===c.QUEUED)&&f.push(a);return f},c.prototype.init=function(){var a,b,d,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(c.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(d=function(a){return function(){return a.hiddenFileInput&&document.body.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.body.appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,e,f;if(c=a.hiddenFileInput.files,c.length)for(e=0,f=c.length;f>e;e++)b=c[e],a.addFile(b);return d()})}}(this))(),this.URL=null!=(g=window.URL)?g:window.webkitURL,h=this.events,e=0,f=h.length;f>e;e++)a=h[e],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(){return 0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length?setTimeout(function(){return a.emit("queuecomplete")},0):void 0}}(this)),b=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(c){return b(c),a.emit("dragenter",c)}}(this),dragover:function(a){return function(c){var d;try{d=c.dataTransfer.effectAllowed}catch(e){}return c.dataTransfer.dropEffect="move"===d||"linkMove"===d?"move":"copy",b(c),a.emit("dragover",c)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(c){return b(c),a.drop(c)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(b){return a.listeners.push({element:b,events:{click:function(d){return b!==a.element||d.target===a.element||c.elementInside(d.target,a.element.querySelector(".dz-message"))?a.hiddenFileInput.click():void 0}}})}}(this)),this.enable(),this.options.init.call(this)},c.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,c.instances.splice(c.instances.indexOf(this),1)},c.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(d=0,c=0,a=this.getActiveFiles(),a.length){for(h=this.getActiveFiles(),f=0,g=h.length;g>f;f++)b=h[f],d+=b.upload.bytesSent,c+=b.upload.total;e=100*d/c}else e=100;return this.emit("totaluploadprogress",e,c,d)},c.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},c.prototype.getFallbackForm=function(){var a,b,d,e;return(a=this.getExistingFallback())?a:(d='<div class="dz-fallback">',this.options.dictFallbackText&&(d+="<p>"+this.options.dictFallbackText+"</p>"),d+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',b=c.createElement(d),"FORM"!==this.element.tagName?(e=c.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(b)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:b)},c.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;d>c;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},f=["div","form"],d=0,e=f.length;e>d;d++)if(c=f[d],a=b(this.element.getElementsByTagName(c)))return a},c.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],d=0,e=f.length;e>d;d++)a=f[d],g.push(function(){var d,e;d=a.events,e=[];for(b in d)c=d[b],e.push(a.element.addEventListener(b,c,!1));return e}());return g},c.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],d=0,e=f.length;e>d;d++)a=f[d],g.push(function(){var d,e;d=a.events,e=[];for(b in d)c=d[b],e.push(a.element.removeEventListener(b,c,!1));return e}());return g},c.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.cancelUpload(a));return e},c.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},c.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;for(g=["TB","GB","MB","KB","b"],d=e=null,c=h=0,i=g.length;i>h;c=++h)if(f=g[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){d=a/Math.pow(this.options.filesizeBase,4-c),e=f;break}return d=Math.round(10*d)/10,"<strong>"+d+"</strong> "+e},c.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},c.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},c.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},c.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.addFile(b));return e},c.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?this.addFile(c.getAsFile()):b.isDirectory?this._addFilesFromDirectory(b,b.name):void 0:null!=c.getAsFile?null==c.kind||"file"===c.kind?this.addFile(c.getAsFile()):void 0:void 0);return f},c.prototype._addFilesFromDirectory=function(a,b){var c,d;return c=a.createReader(),d=function(a){return function(c){var d,e,f;for(e=0,f=c.length;f>e;e++)d=c[e],d.isFile?d.file(function(c){return a.options.ignoreHiddenFiles&&"."===c.name.substring(0,1)?void 0:(c.fullPath=""+b+"/"+c.name,a.addFile(c))}):d.isDirectory&&a._addFilesFromDirectory(d,""+b+"/"+d.name)}}(this),c.readEntries(d,function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0})},c.prototype.accept=function(a,b){return a.size>1024*this.options.maxFilesize*1024?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):c.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)},c.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0},this.files.push(a),a.status=c.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},c.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;d>c;c++)b=a[c],this.enqueueFile(b);return null},c.prototype.enqueueFile=function(a){if(a.status!==c.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");return a.status=c.QUEUED,this.options.autoProcessQueue?setTimeout(function(a){return function(){return a.processQueue()}}(this),0):void 0},c.prototype._thumbnailQueue=[],c.prototype._processingThumbnail=!1,c.prototype._enqueueThumbnail=function(a){return this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024?(this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)):void 0},c.prototype._processThumbnailQueue=function(){return this._processingThumbnail||0===this._thumbnailQueue.length?void 0:(this._processingThumbnail=!0,this.createThumbnail(this._thumbnailQueue.shift(),function(a){return function(){return a._processingThumbnail=!1,a._processThumbnailQueue()}}(this)))},c.prototype.removeFile=function(a){return a.status===c.UPLOADING&&this.cancelUpload(a),this.files=h(this.files,a),this.emit("removedfile",a),0===this.files.length?this.emit("reset"):void 0},c.prototype.removeAllFiles=function(a){var b,d,e,f;for(null==a&&(a=!1),f=this.files.slice(),d=0,e=f.length;e>d;d++)b=f[d],(b.status!==c.UPLOADING||a)&&this.removeFile(b);return null},c.prototype.createThumbnail=function(a,b){var c;return c=new FileReader,c.onload=function(d){return function(){var e;return"image/svg+xml"===a.type?(d.emit("thumbnail",a,c.result),void(null!=b&&b())):(e=document.createElement("img"),e.onload=function(){var c,g,h,i,j,k,l,m;return a.width=e.width,a.height=e.height,h=d.options.resize.call(d,a),null==h.trgWidth&&(h.trgWidth=h.optWidth),null==h.trgHeight&&(h.trgHeight=h.optHeight),c=document.createElement("canvas"),g=c.getContext("2d"),c.width=h.trgWidth,c.height=h.trgHeight,f(g,e,null!=(j=h.srcX)?j:0,null!=(k=h.srcY)?k:0,h.srcWidth,h.srcHeight,null!=(l=h.trgX)?l:0,null!=(m=h.trgY)?m:0,h.trgWidth,h.trgHeight),i=c.toDataURL("image/png"),d.emit("thumbnail",a,i),null!=b?b():void 0},e.onerror=b,e.src=c.result)}}(this),c.readAsDataURL(a)},c.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;b>a;){if(!d.length)return;this.processFile(d.shift()),a++}}},c.prototype.processFile=function(a){return this.processFiles([a])},c.prototype.processFiles=function(a){var b,d,e;for(d=0,e=a.length;e>d;d++)b=a[d],b.processing=!0,b.status=c.UPLOADING,this.emit("processing",b);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},c.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;d>c;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},c.prototype.cancelUpload=function(a){var b,d,e,f,g,h,i;if(a.status===c.UPLOADING){for(d=this._getFilesWithXhr(a.xhr),e=0,g=d.length;g>e;e++)b=d[e],b.status=c.CANCELED;for(a.xhr.abort(),f=0,h=d.length;h>f;f++)b=d[f],this.emit("canceled",b);this.options.uploadMultiple&&this.emit("canceledmultiple",d)}else((i=a.status)===c.ADDED||i===c.QUEUED)&&(a.status=c.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));return this.options.autoProcessQueue?this.processQueue():void 0},e=function(){var a,b;return b=arguments[0],a=2<=arguments.length?i.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},c.prototype.uploadFile=function(a){return this.uploadFiles([a])},c.prototype.uploadFiles=function(a){var b,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L;for(w=new XMLHttpRequest,x=0,B=a.length;B>x;x++)b=a[x],b.xhr=w;p=e(this.options.method,a),u=e(this.options.url,a),w.open(p,u,!0),w.withCredentials=!!this.options.withCredentials,s=null,g=function(c){return function(){var d,e,f;for(f=[],d=0,e=a.length;e>d;d++)b=a[d],f.push(c._errorProcessing(a,s||c.options.dictResponseError.replace("{{statusCode}}",w.status),w));return f}}(this),t=function(c){return function(d){var e,f,g,h,i,j,k,l,m;if(null!=d)for(f=100*d.loaded/d.total,g=0,j=a.length;j>g;g++)b=a[g],b.upload={progress:f,total:d.total,bytesSent:d.loaded};else{for(e=!0,f=100,h=0,k=a.length;k>h;h++)b=a[h],(100!==b.upload.progress||b.upload.bytesSent!==b.upload.total)&&(e=!1),b.upload.progress=f,b.upload.bytesSent=b.upload.total;if(e)return}for(m=[],i=0,l=a.length;l>i;i++)b=a[i],m.push(c.emit("uploadprogress",b,f,b.upload.bytesSent));return m}}(this),w.onload=function(b){return function(d){var e;if(a[0].status!==c.CANCELED&&4===w.readyState){if(s=w.responseText,w.getResponseHeader("content-type")&&~w.getResponseHeader("content-type").indexOf("application/json"))try{s=JSON.parse(s)}catch(f){d=f,s="Invalid JSON response from server."}return t(),200<=(e=w.status)&&300>e?b._finished(a,s,d):g()}}}(this),w.onerror=function(){return function(){return a[0].status!==c.CANCELED?g():void 0}}(this),r=null!=(G=w.upload)?G:w,r.onprogress=t,j={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&d(j,this.options.headers);for(h in j)i=j[h],w.setRequestHeader(h,i);if(f=new FormData,this.options.params){H=this.options.params;for(o in H)v=H[o],f.append(o,v)}for(y=0,C=a.length;C>y;y++)b=a[y],this.emit("sending",b,w,f);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,w,f),"FORM"===this.element.tagName)for(I=this.element.querySelectorAll("input, textarea, select, button"),z=0,D=I.length;D>z;z++)if(l=I[z],m=l.getAttribute("name"),n=l.getAttribute("type"),"SELECT"===l.tagName&&l.hasAttribute("multiple"))for(J=l.options,A=0,E=J.length;E>A;A++)q=J[A],q.selected&&f.append(m,q.value);else(!n||"checkbox"!==(K=n.toLowerCase())&&"radio"!==K||l.checked)&&f.append(m,l.value);for(k=F=0,L=a.length-1;L>=0?L>=F:F>=L;k=L>=0?++F:--F)f.append(this._getParamName(k),a[k],a[k].name);return w.send(f)},c.prototype._finished=function(a,b,d){var e,f,g;for(f=0,g=a.length;g>f;f++)e=a[f],e.status=c.SUCCESS,this.emit("success",e,b,d),this.emit("complete",e);return this.options.uploadMultiple&&(this.emit("successmultiple",a,b,d),this.emit("completemultiple",a)),this.options.autoProcessQueue?this.processQueue():void 0},c.prototype._errorProcessing=function(a,b,d){var e,f,g;for(f=0,g=a.length;g>f;f++)e=a[f],e.status=c.ERROR,this.emit("error",e,b,d),this.emit("complete",e);return this.options.uploadMultiple&&(this.emit("errormultiple",a,b,d),this.emit("completemultiple",a)),this.options.autoProcessQueue?this.processQueue():void 0},c}(b),a.version="4.0.1",a.options={},a.optionsForElement=function(b){return b.getAttribute("id")?a.options[c(b.getAttribute("id"))]:void 0},a.instances=[],a.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},a.autoDiscover=!0,a.discover=function(){var b,c,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],b=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;e>c;c++)b=a[c],f.push(/(^| )dropzone($| )/.test(b.className)?d.push(b):void 0);return f},b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))),g=[],e=0,f=d.length;f>e;e++)c=d[e],g.push(a.optionsForElement(c)!==!1?new a(c):void 0);return g},a.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],a.isBrowserSupported=function(){var b,c,d,e,f;if(b=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(f=a.blacklistedBrowsers,d=0,e=f.length;e>d;d++)c=f[d],c.test(navigator.userAgent)&&(b=!1);else b=!1;else b=!1;return b},h=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;e>d;d++)c=a[d],c!==b&&f.push(c);return f},c=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},a.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},a.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},a.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},a.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;h>f;f++)d=a[f],e.push(this.getElement(d,b))}catch(k){c=k,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;i>g;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},a.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},a.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),d=a.type,c=d.replace(/\/.*$/,""),f=0,g=b.length;g>f;f++)if(e=b[f],e=e.trim(),"."===e.charAt(0)){if(-1!==a.name.toLowerCase().indexOf(e.toLowerCase(),a.name.length-e.length))return!0}else if(/\/\*$/.test(e)){if(c===e.replace(/\/.*$/,""))return!0}else if(d===e)return!0;return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(b){return this.each(function(){return new a(this,b)})}),"undefined"!=typeof module&&null!==module?module.exports=a:window.Dropzone=a,a.ADDED="added",a.QUEUED="queued",a.ACCEPTED=a.QUEUED,a.UPLOADING="uploading",a.PROCESSING=a.UPLOADING,a.CANCELED="canceled",a.ERROR="error",a.SUCCESS="success",e=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(0,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},f=function(a,b,c,d,f,g,h,i,j,k){var l;return l=e(b),a.drawImage(b,c,d,f,g,h,i,j,k/l)},d=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){return"readystatechange"!==c.type||"complete"===d.readyState?(("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0):void 0
},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(l){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},a._autoDiscoverFunction=function(){return a.autoDiscover?a.discover():void 0},d(window,a._autoDiscoverFunction)}).call(this);;
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&E(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},w=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.5",defaults:{padding:15,margin:20,
width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
(I?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,
c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&&
k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||
b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=
setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":c,"onUpdate.player":e,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(q(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))},prev:function(a){var d=b.current;
d&&(q(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d=
a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),
b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(),
y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement;
if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==v)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&&"hidden"===h[0].style.overflow)&&
(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,
{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,
mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=
!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");
"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=
this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);
f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,
e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,
outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}",
g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll":
"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside?
h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth||
h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),c<m&&(c=m,j=l(c/D)),j<u&&(j=u,c=l(j*D))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&&
"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,p)));if(h.fitToView)if(g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height(),h.aspectRatio)for(;(a>z||y>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(p,j-10)),c=l(j*D),c<m&&(c=m,j=l(c/D)),c>n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&j<A&&c+x+q<z)&&(c+=q);g.width(c).height(j);e.width(c+x);a=e.width();
y=e.height();e=(a>z||y>r)&&c>m&&j>u;c=h.aspectRatio?c<F&&j<B&&c<C&&j<A:(c<F||j<B)&&(c<C||j<A);f.extend(h,{dim:{width:w(a),height:w(y)},origWidth:C,origHeight:A,canShrink:e,canExpand:c,wPadding:x,hPadding:v,wrapSpace:y-k.outerHeight(!0),skinSpace:k.height()-j});!H&&(h.autoHeight&&j>u&&j<p&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute",top:c[0],left:c[3]};d.autoCenter&&d.fixed&&
!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=w(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=w(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&&(d.preventDefault(),
b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a=
a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())):
(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:w(c.top-h*a.topRatio),left:w(c.left-j*a.leftRatio),width:w(f+j),height:w(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"===
f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c,
{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=w(l(e[g])-200),c[g]="+=200px"):(e[g]=w(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a=
b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay=
f('<div class="fancybox-overlay"></div>').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?
b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth),
p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"===
f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=
b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,
e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+
":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body");var e=20===
d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(d-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);;
 /*!
 * Thumbnail helper for fancyBox
 * version: 1.0.7 (Mon, 01 Oct 2012)
 * @requires fancyBox v2.0 or later
 *
 * Usage:
 *     $(".fancybox").fancybox({
 *         helpers : {
 *             thumbs: {
 *                 width  : 50,
 *                 height : 50
 *             }
 *         }
 *     });
 *
 */
(function ($) {
	//Shortcut for fancyBox object
	var F = $.fancybox;

	//Add helper object
	F.helpers.thumbs = {
		defaults : {
			width    : 50,       // thumbnail width
			height   : 50,       // thumbnail height
			position : 'bottom', // 'top' or 'bottom'
			source   : function ( item ) {  // function to obtain the URL of the thumbnail image
				var href;

				if (item.element) {
					href = $(item.element).find('img').attr('src');
				}

				if (!href && item.type === 'image' && item.href) {
					href = item.href;
				}

				return href;
			}
		},

		wrap  : null,
		list  : null,
		width : 0,

		init: function (opts, obj) {
			var that = this,
				list,
				thumbWidth  = opts.width,
				thumbHeight = opts.height,
				thumbSource = opts.source;

			//Build list structure
			list = '';

			for (var n = 0; n < obj.group.length; n++) {
				list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
			}

			this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body');
			this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);

			//Load each thumbnail
			$.each(obj.group, function (i) {
				var href = thumbSource( obj.group[ i ] );

				if (!href) {
					return;
				}

				$("<img />").load(function () {
					var width  = this.width,
						height = this.height,
						widthRatio, heightRatio, parent;

					if (!that.list || !width || !height) {
						return;
					}

					//Calculate thumbnail width/height and center it
					widthRatio  = width / thumbWidth;
					heightRatio = height / thumbHeight;

					parent = that.list.children().eq(i).find('a');

					if (widthRatio >= 1 && heightRatio >= 1) {
						if (widthRatio > heightRatio) {
							width  = Math.floor(width / heightRatio);
							height = thumbHeight;

						} else {
							width  = thumbWidth;
							height = Math.floor(height / widthRatio);
						}
					}

					$(this).css({
						width  : width,
						height : height,
						top    : Math.floor(thumbHeight / 2 - height / 2),
						left   : Math.floor(thumbWidth / 2 - width / 2)
					});

					parent.width(thumbWidth).height(thumbHeight);

					$(this).hide().appendTo(parent).fadeIn(300);

				}).attr('src', href);
			});

			//Set initial width
			this.width = this.list.children().eq(0).outerWidth(true);

			this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
		},

		beforeLoad: function (opts, obj) {
			//Remove self if gallery do not have at least two items
			if (obj.group.length < 2) {
				obj.helpers.thumbs = false;

				return;
			}

			//Increase bottom margin to give space for thumbs
			obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
		},

		afterShow: function (opts, obj) {
			//Check if exists and create or update list
			if (this.list) {
				this.onUpdate(opts, obj);

			} else {
				this.init(opts, obj);
			}

			//Set active element
			this.list.children().removeClass('active').eq(obj.index).addClass('active');
		},

		//Center list
		onUpdate: function (opts, obj) {
			if (this.list) {
				this.list.stop(true).animate({
					'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
				}, 150);
			}
		},

		beforeClose: function () {
			if (this.wrap) {
				this.wrap.remove();
			}

			this.wrap  = null;
			this.list  = null;
			this.width = 0;
		}
	}

}(jQuery));;
/*

 bootpag - jQuery plugin for dynamic pagination

 Copyright (c) 2015 botmonster@7items.com

 Licensed under the MIT license:
   http://www.opensource.org/licenses/mit-license.php

 Project home:
   http://botmonster.com/jquery-bootpag/

 Version:  1.0.7

*/
(function(h,q){h.fn.bootpag=function(p){function m(c,b){b=parseInt(b,10);var d,e=0==a.maxVisible?1:a.maxVisible,k=1==a.maxVisible?0:1,n=Math.floor((b-1)/e)*e,f=c.find("li");a.page=b=0>b?0:b>a.total?a.total:b;f.removeClass(a.activeClass);d=1>b-1?1:a.leaps&&b-1>=a.maxVisible?Math.floor((b-1)/e)*e:b-1;a.firstLastUse&&f.first().toggleClass(a.disabledClass,1===b);e=f.first();a.firstLastUse&&(e=e.next());e.toggleClass(a.disabledClass,1===b).attr("data-lp",d).find("a").attr("href",g(d));k=1==a.maxVisible?
0:1;d=b+1>a.total?a.total:a.leaps&&b+1<a.total-a.maxVisible?n+a.maxVisible+k:b+1;e=f.last();a.firstLastUse&&(e=e.prev());e.toggleClass(a.disabledClass,b===a.total).attr("data-lp",d).find("a").attr("href",g(d));f.last().toggleClass(a.disabledClass,b===a.total);e=f.filter("[data-lp="+b+"]");k="."+[a.nextClass,a.prevClass,a.firstClass,a.lastClass].join(",.");if(!e.not(k).length){var m=b<=n?-a.maxVisible:0;f.not(k).each(function(b){d=b+1+n+m;h(this).attr("data-lp",d).toggle(d<=a.total).find("a").html(d).attr("href",
g(d))});e=f.filter("[data-lp="+b+"]")}e.not(k).addClass(a.activeClass);l.data("settings",a)}function g(c){return a.href.replace(a.hrefVariable,c)}var l=this,a=h.extend({total:0,page:1,maxVisible:null,leaps:!0,href:"javascript:void(0);",hrefVariable:"{{number}}",next:"&raquo;",prev:"&laquo;",firstLastUse:!1,first:'<span aria-hidden="true">&larr;</span>',last:'<span aria-hidden="true">&rarr;</span>',wrapClass:"pagination",activeClass:"active",disabledClass:"disabled",nextClass:"next",prevClass:"prev",
lastClass:"last",firstClass:"first"},l.data("settings")||{},p||{});if(0>=a.total)return this;h.isNumeric(a.maxVisible)||a.maxVisible||(a.maxVisible=parseInt(a.total,10));l.data("settings",a);return this.each(function(){var c,b,d=h(this);c=['<ul class="',a.wrapClass,' bootpag">'];a.firstLastUse&&(c=c.concat(['<li data-lp="1" class="',a.firstClass,'"><a href="',g(1),'">',a.first,"</a></li>"]));a.prev&&(c=c.concat(['<li data-lp="1" class="',a.prevClass,'"><a href="',g(1),'">',a.prev,"</a></li>"]));for(b=
1;b<=Math.min(a.total,a.maxVisible);b++)c=c.concat(['<li data-lp="',b,'"><a href="',g(b),'">',b,"</a></li>"]);a.next&&(b=a.leaps&&a.total>a.maxVisible?Math.min(a.maxVisible+1,a.total):2,c=c.concat(['<li data-lp="',b,'" class="',a.nextClass,'"><a href="',g(b),'">',a.next,"</a></li>"]));a.firstLastUse&&(c=c.concat(['<li data-lp="',a.total,'" class="last"><a href="',g(a.total),'">',a.last,"</a></li>"]));c.push("</ul>");d.find("ul.bootpag").remove();d.append(c.join(""));c=d.find("ul.bootpag");d.find("li").click(function(){var b=
h(this);if(!b.hasClass(a.disabledClass)&&!b.hasClass(a.activeClass)){var c=parseInt(b.attr("data-lp"),10);l.find("ul.bootpag").each(function(){m(h(this),c)});l.trigger("page",c)}});m(c,a.page)})}})(jQuery,window);
;
/*
 * Copyright (c) 2013 Peter Morlion
 * Licensed under the MIT license.
 * http://petermorlion.blogspot.com
 */

(function ($) {
    if (typeof __doPostBack === 'function') {
        var old__doPostBack = __doPostBack;
        __doPostBack = function (eventTarget, eventArgument) {
            $('form').trigger('beforePostBack');
            old__doPostBack(eventTarget, eventArgument);
        };
    }

    $.beforePostBack = function (func) {
        $('form').on('beforePostBack', function () {
            func();
        });
    };
})(jQuery);
;
$(document).ready(function() {
    if ($('#carousel').length)
    {
        $("#carousel").rcarousel({
            auto: {
                enabled: true,
                interval: 10000,
                direction: "next"
            },
            visible: 4,
            step: 4,
            speed: 2000,
            margin: 7,
            width: 210,
            height: 80


        });

        $("#ui-carousel-next")
                        .add("#ui-carousel-prev")
                        .hover(
                            function () {
                                $(this).css("opacity", 0.7);
                            },
                            function () {
                                $(this).css("opacity", 1.0);
                            }
                        );
        $("#carouselouter").css("display", "block");

    }

});

$.ajaxSetup({ cache: false });

        $(document).ready(function () {
            $(document).on("click", ".openDialog", function (e) {
                e.preventDefault();

                $("<div>Vent...</div>")
                    .addClass("dialog")
                    .attr("id", $(this).attr("data-dialog-id"))
                    .appendTo("body")
                    .dialog({
                        title: $(this).attr("data-dialog-title"),
                        close: function () { $(this).remove() },
                        modal: true,
                        resizable: true,
                        width: 'auto',
                        height: 'auto'

                    })
                    .load(this.href);
            });

            $(document).on("click", ".close", function (e) {
                e.preventDefault();
                $(this).closest(".dialog").dialog("close");
            });




        });



function Loadwysibbeditor(textareaid) {
    var wbbOpt = {
        //lang: "da",
        buttons: "bold,italic,underline",
        allButtons: {
            bold: {
                title: 'Fed',
                buttonHTML: '<span class="fonticon ve-tlb-bold1">\uE018</span>',
                excmd: 'bold',
                hotkey: 'ctrl+b',
                transform: {
                    '<b>{SELTEXT}</b>': "[B]{SELTEXT}[/B]",
                    '<strong>{SELTEXT}</strong>': "[B]{SELTEXT}[/B]"
                }
            },
            italic: {
                title: 'Kursiv',
                buttonHTML: '<span class="fonticon ve-tlb-italic1">\uE001</span>',
                excmd: 'italic',
                hotkey: 'ctrl+i',
                transform: {
                    '<i>{SELTEXT}</i>': "[I]{SELTEXT}[/I]",
                    '<em>{SELTEXT}</em>': "[I]{SELTEXT}[/I]"
                }
            },
            underline: {
                title: 'Understregning',
                buttonHTML: '<span class="fonticon ve-tlb-underline1">\uE002</span>',
                excmd: 'underline',
                hotkey: 'ctrl+u',
                transform: {
                    '<u>{SELTEXT}</u>': "[U]{SELTEXT}[/U]"
                }
            }
        }
    };

    $('#' + textareaid).wysibb(wbbOpt);
}


function LoadwysibbeditorA(textareaid) {
    var wbbOpt = {
        // lang: "da",
        buttons: "bold,italic,underline,|,blue",

        allButtons: {

            bold: {
                title: 'Fed',
                buttonHTML: '<span class="fonticon ve-tlb-bold1">\uE018</span>',
                excmd: 'bold',
                hotkey: 'ctrl+b',
                transform: {
                    '<b>{SELTEXT}</b>': "[B]{SELTEXT}[/B]",
                    '<strong>{SELTEXT}</strong>': "[B]{SELTEXT}[/B]"
                }
            },
            italic: {
                title: 'Kursiv',
                buttonHTML: '<span class="fonticon ve-tlb-italic1">\uE001</span>',
                excmd: 'italic',
                hotkey: 'ctrl+i',
                transform: {
                    '<i>{SELTEXT}</i>': "[I]{SELTEXT}[/I]",
                    '<em>{SELTEXT}</em>': "[I]{SELTEXT}[/I]"
                }
            },
            underline: {
                title: 'Understregning',
                buttonHTML: '<span class="fonticon ve-tlb-underline1">\uE002</span>',
                excmd: 'underline',
                hotkey: 'ctrl+u',
                transform: {
                    '<u>{SELTEXT}</u>': "[U]{SELTEXT}[/U]"
                }
            },
            blue: {
                title: 'Inds&aelig;t blå',
                buttonText: 'Blå',
                transform: {
                    '<div class="forumtext-blue">{SELTEXT}</div>': '[blue]{SELTEXT}[/blue]'
                }
            }

        }
    };

    $('#' + textareaid).wysibb(wbbOpt);
}

function AdminGetSvarMods(svarid, url) {

    var p = document.getElementById("SvarModsPanel" + svarid)

    if (!p.hasChildNodes()) {
        $.ajax({
            type: "POST",
            url: "traadservice.aspx/AdminGetSvarMods",
            data: "{'svarid': '" + svarid + "', 'url': '" + url + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                $(p).html(msg.d);
            }
        });
    }
    else {
        while (p.firstChild) {
            p.removeChild(p.firstChild);
        }
    }
}

function AdminGetTraadMods(traadid, url, divid) {
    var p = document.getElementById(divid)

    if (!p.hasChildNodes()) {
        $.ajax({
            type: "POST",
            url: "traadservice.aspx/AdminGetTraadMods",
            data: "{'traadid': '" + traadid + "', 'url': '" + url + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                $(p).html(msg.d);
            }
        });
    }
    else {
        while (p.firstChild) {
            p.removeChild(p.firstChild);
        }
    }
}

function Displayindhold(id, handling, type) {
    window.open("forumEDdetail.aspx?id=" + id + "&handling=" + handling + "&type=" + type, "Details", "directories=no,status=no,scrollbars=yes,resizable=no,height=485,width=500,top=100,left=100");
}
function PopTraadoper(ED, fid, type, tid) {
    window.open("traadoperation.aspx?ED=" + ED + "&fid=" + fid + "&type=" + type + "&tid=" + tid, "Traad", "directories=no,status=no,scrollbars=no,resizable=no,height=500,width=520,top=100,left=100");
}
function PopTraadoperSvar(ED, type, id, fid, tid, sid) {
    window.open("traadoperation.aspx?ED=" + ED + "&fid=" + fid + "&type=" + type + "&tid=" + tid + "&id=" + id + "&sid=" + sid, "Svar", "directories=no,status=no,scrollbars=no,resizable=no,height=500 ,width=520,top=100,left=100");
}
function TellAdmin(id1, id2, id3, type) {
    window.open("telladmin.aspx?id1=" + id1 + "&id2=" + id2 + "&id3=" + id3 + "&type=" + type, "TellAdmin", "directories=no,status=no,scrollbars=yes,resizable=no,height=550,width=500,top=100,left=100");
}

function GetUrlString(str) {
    var vars = [], hash;
    var url = document.URL;
    if (url.indexOf("#") != -1) { url = url.split('#')[0]; }

    var q = url.split('?')[1];

    if (q != undefined) { q = q.split('&'); for (var i = 0; i < q.length; i++) { hash = q[i].split('='); vars.push(hash[1]); vars[hash[0]] = hash[1]; } }
    return vars[str];
}

function OpenMassConfirm() {
    var sid_tohide = '';
    var sid_toedit = '';
    var tid = GetUrlString("tid");
    var fid = GetUrlString("fid");
    $("#svar_outer :checked").each(function () {

        var sid = $(this).attr('name').substr(2);
        var mode = $(this).val();

        if (mode == "hide") {
            sid_tohide = sid_tohide + sid + ",";
        }
        else if (mode == "edit") {
            sid_toedit = sid_toedit + sid + ",";
        }
    });

    var url = "massedit.aspx?fid=" + fid + "&tid=" + tid + "&sh=" + sid_tohide + "&se=" + sid_toedit;
    newwindow = window.open(url, 'Bekræft', 'height=700,width=600');
    if (window.focus) { newwindow.focus() }
    return false;
}


function OpenMap(lat, lng, address, topic) {

    var url = "kort.html?lat=" + lat + "&lng=" + lng + "&address=" + address + "&topic=" + topic;
    //var url = "HtmlPage3.html";
    newwindow = window.open(url, 'Bekræft', 'height=600,width=800,toolbar=no');
    if (window.focus) { newwindow.focus() }
    return false;
}

Dropzone.autoDiscover = false;
function LoadDropzone(areaid, maxfilescount)
{
    var myDropzone = new Dropzone(areaid, {

        maxFiles: maxfilescount,
        uploadMultiple: false,
        addRemoveLinks: true,
        maxFilesize: 10,
        acceptedFiles: 'image/*',
        url: 'api/koebsalg/upload',

        dictDefaultMessage: 'Klik eller træk billeder her for at upload...',
        dictFallbackMessage: '',
        dictFallbackText: '',
        dictInvalidFileType: '',
        dictFileTooBig: '',
        dictResponseError: '',
        dictCancelUpload: 'Stop',
        dictCancelUploadConfirmation: 'Er du sikker?',
        dictRemoveFile: 'Fjern billede',
        dictMaxFilesExceeded: 'Du kan maksimalt upload 10 billeder',

        init: function () {
            this.on("removedfile", function (file) {

                $.getJSON("api/koebsalg/delete", { serverid: file.serverId }).done(function (data) {
                    //
                });
            });

            this.on("addedfile", function (file) {
                //
            });

            this.on("success", function (file, responseText) {
            
                /* DEBUG
                var thisATag = document.createElement('a');
                thisATag.setAttribute('href', '/koebsalgimg/' + encodeURI(responseText + '.jpg'));

                var thisTextNode = document.createTextNode('Link');
                thisATag.appendChild(thisTextNode);

                file.previewTemplate.appendChild(thisATag);
                */
                file.serverId = responseText;
            });

            this.on("maxfilesexceeded", function (file) {
                alert('Du kan maksimalt upload ' + maxfilescount + ' billeder');
                this.removeFile(file);
            });

            this.on("maxfilesreached", function () {
                //alert('Du kan maksimalt upload ' + maxfilescount + ' billeder');
            });
        }
    });

    var tid = GetUrlString("tid");
    if (tid != null) {
        //Eksisterende filer
        $.getJSON("/api/koebsalg/get", { traadid: tid }).done(function (data) {
            $.each(data, function (index, item) {
                var mockFile = {
                    name: item.filename,
                    size: item.contentlenght,
                    accepted: true,
                    type: 'image/jpeg',
                    status: Dropzone.ADDED,
                    serverId: item.imageid

                };

                myDropzone.emit("addedfile", mockFile);
                myDropzone.emit("thumbnail", mockFile, item.thumbpath);
                myDropzone.emit("complete", mockFile);
                myDropzone.files.push(mockFile);
            });
            myDropzone.options.maxFiles = myDropzone.options.maxFiles - data.length;
        });
    }
}

$(document).ready(function () {
    $(".fancybox-thumb").fancybox({
        prevEffect: 'none',
        nextEffect: 'none',
        helpers: {
            title: {
                type: 'outside'
            },
            thumbs: {
                width: 150,
                height: 150
            }
        }
    });
});

// Send PM besked fra køb/salg og profil mv.
$(function () {

    var dlg2 = $("#pm-sendbesked-sendt-dialog").dialog({
        autoOpen: false,
        modal: true,
        buttons: {
            Luk: function () {
                $(this).dialog("close");
            }
        }
    });

    var isadmin = $("#hfProfilIsAdmin").val();

    if (isadmin == "True") {
        $("#pm-sendbesked-dialog-adminreminder").attr('class', 'info-box-red');
    }

    var dlg = $("#pm-sendbesked-dialog").dialog({
        autoOpen: false,
        height: 600,
        width: 600,
        buttons: {
            "Send besked": function () {
                var message = $("#pm-sendbesked-dialog-text").val();
                var to = $("#hfProfilID").val();
                
                $.ajax({
                    type: "POST",
                    url: "pm.aspx/SendPM",
                    data: JSON.stringify({ to: to, message: message }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json"
                    
                })
                .done(function (msg) {
                    if (msg.d == "OK") {
                        dlg.dialog("close");
                 
                        $("#pm-sendbesked-sendt-dialog").dialog("open");
                        $('#pm-sendbesked-dialog-text').val('');
                    } else {
                        $('#pm-sendbesked-dialog-fejl').html("Fejl, kunne ikke sende besked");
                    }
                })
                .fail(function (msg) {
                    $('#pm-sendbesked-dialog-fejl').html("Fejl, kunne ikke sende besked");
                });
            },
            "Fortryd/luk": function () {
                $(this).dialog("close");
            }
        },
        open: function(event, ui) {
            $('#pm-sendbesked-dialog-fejl').html('');
            $('#pm-sendbesked-dialog-text').val('');
        }
    });

    dlg.parent().appendTo(jQuery("form:first"));

    $(".btnDialog").click(function (e) {
        e.preventDefault();
        $("#pm-sendbesked-dialog").dialog("open");
    });
});

//Advarsel hvis ens køb/salg tråd ikke starter med fx S:/K:
$(function () {
    $("#aekoebsalgtxtemne").focusout(function () {

        var text = $("#aekoebsalgtxtemne").val();

        if (!text.match(/^(k|s|v|b):/i)) {
            $("#aekoebsalg-overskriftadvarsel").show("blind", 1000);
        }
    });

    $("#aekoebsalg-overskriftadvarsel-ok").click(function (e) {
        e.preventDefault();
        $("#aekoebsalg-overskriftadvarsel").hide();
    });
});

//Autoprefix køb/salg tråde
$(function () {
    $("#aekoebsalgdropType").change(function () {

        var text = $("#aekoebsalgtxtemne").val();

        if (text.trim().length < 3) {
            var prefix = "";
            switch ($('option:selected', this).val()) {
                case "1":
                    prefix = "K: ";
                    break;
                case "2":
                    prefix = "S: ";
                    break;
                case "3":
                    prefix = "B: ";
                    break;
                case "4":
                    prefix = "V: ";
                    break;
            }

            $("#aekoebsalgtxtemne").val(prefix);
        }
    });
});

$(function () {
    $("#aetraadtxtemne").focusout(function () {

        var text = $("#aetraadtxtemne").val();

        if (text.match(/^(k|s|v|b):/i)) {
            $("#aetraad-overskriftadvarsel").show("blind", 1000);
        }
    });

    $("#aetraad-overskriftadvarsel-ok").click(function (e) {
        e.preventDefault();
        $("#aetraad-overskriftadvarsel").hide();
    });
});

function ShowReleaseinfotriggerdialog() {
    $(function () {
        var cookiename = 'releaseinfotriggerdialog46';
        if ($.cookie(cookiename) == undefined || $.cookie(cookiename) == null || $.cookie(cookiename) != 'false') {
            var dlg = $("#releaseinfo-triggerdialog").dialog({
                autoOpen: true,
                height: 600,
                width: 600,
                modal: true,
                buttons: {
                    "Luk og vis ikke igen": function () {
                        $.cookie(cookiename, 'false', { expires: 1 });
                        $(this).dialog("close");
                    }
                },
                open: function (event, ui) {
                    $.getJSON("api/cms", { url: 'releaseinfo' }).done(function (data) {
                        $("#releaseinfo-triggerdialog").dialog("option", "title", data.titel);
                        $('#releaseinfo-triggerdialog-text').html(data.indhold);
                    });
                }
            });

            dlg.parent().appendTo(jQuery("form:first"));
        }
    });
};


var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-3697223-1']);
_gaq.push(['_trackPageview']);

(function () {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();




;
