// ----------------------------------------------------------------------------
// markItUp! Universal MarkUp Engine, JQuery plugin
// v 1.1.x
// Dual licensed under the MIT and GPL licenses.
// ----------------------------------------------------------------------------
// Copyright (C) 2007-2010 Jay Salvat
// http://markitup.jaysalvat.com/
// ----------------------------------------------------------------------------
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
// ----------------------------------------------------------------------------
(function($){$.fn.markItUp=function(settings,extraSettings){var options,ctrlKey,shiftKey,altKey;ctrlKey=shiftKey=altKey=false;options={id:"",nameSpace:"",root:"",previewInWindow:"",previewAutoRefresh:true,previewPosition:"after",previewTemplatePath:"~/templates/preview.html",previewParserPath:"",previewParserVar:"data",resizeHandle:true,beforeInsert:"",afterInsert:"",onEnter:{},onShiftEnter:{},onCtrlEnter:{},onTab:{},markupSet:[{}]};$.extend(options,settings,extraSettings);if(!options.root){$("script").each(function(a,tag){miuScript=$(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/);if(miuScript!==null){options.root=miuScript[1]}})}return this.each(function(){var $$,textarea,levels,scrollPosition,caretPosition,caretOffset,clicked,hash,header,footer,previewWindow,template,iFrame,abort;$$=$(this);textarea=this;levels=[];abort=false;scrollPosition=caretPosition=0;caretOffset=-1;options.previewParserPath=localize(options.previewParserPath);options.previewTemplatePath=localize(options.previewTemplatePath);function localize(data,inText){if(inText){return data.replace(/("|')~\//g,"$1"+options.root)}return data.replace(/^~\//,options.root)}function init(){id="";nameSpace="";if(options.id){id='id="'+options.id+'"'}else{if($$.attr("id")){id='id="markItUp'+($$.attr("id").substr(0,1).toUpperCase())+($$.attr("id").substr(1))+'"'}}if(options.nameSpace){nameSpace='class="'+options.nameSpace+'"'}$$.wrap("<div "+nameSpace+"></div>");$$.wrap("<div "+id+' class="markItUp"></div>');$$.wrap('<div class="markItUpContainer"></div>');$$.addClass("markItUpEditor");header=$('<div class="markItUpHeader"></div>').insertBefore($$);$(dropMenus(options.markupSet)).appendTo(header);footer=$('<div class="markItUpFooter"></div>').insertAfter($$);if(options.resizeHandle===true&&$.browser.safari!==true){resizeHandle=$('<div class="markItUpResizeHandle"></div>').insertAfter($$).bind("mousedown",function(e){var h=$$.height(),y=e.clientY,mouseMove,mouseUp;mouseMove=function(e){$$.css("height",Math.max(20,e.clientY+h-y)+"px");return false};mouseUp=function(e){$("html").unbind("mousemove",mouseMove).unbind("mouseup",mouseUp);return false};$("html").bind("mousemove",mouseMove).bind("mouseup",mouseUp)});footer.append(resizeHandle)}$$.keydown(keyPressed).keyup(keyPressed);$$.bind("insertion",function(e,settings){if(settings.target!==false){get()}if(textarea===$.markItUp.focused){markup(settings)}});$$.focus(function(){$.markItUp.focused=this})}function dropMenus(markupSet){var ul=$("<ul></ul>"),i=0;$("li:hover > ul",ul).css("display","block");$.each(markupSet,function(){var button=this,t="",title,li,j;title=(button.key)?(button.name||"")+" [Ctrl+"+button.key+"]":(button.name||"");key=(button.key)?'accesskey="'+button.key+'"':"";if(button.separator){li=$('<li class="markItUpSeparator">'+(button.separator||"")+"</li>").appendTo(ul)}else{i++;for(j=levels.length-1;j>=0;j--){t+=levels[j]+"-"}li=$('<li class="markItUpButton markItUpButton'+t+(i)+" "+(button.className||"")+'"><a href="" '+key+' title="'+title+'">'+(button.name||"")+"</a></li>").bind("contextmenu",function(){return false}).click(function(){return false}).bind("focusin",function(){$$.focus()}).mousedown(function(){if(button.call){eval(button.call)()}setTimeout(function(){markup(button)},1);return false}).hover(function(){$("> ul",this).show();$(document).one("click",function(){$("ul ul",header).hide()})},function(){$("> ul",this).hide()}).appendTo(ul);if(button.dropMenu){levels.push(i);$(li).addClass("markItUpDropMenu").append(dropMenus(button.dropMenu))}}});levels.pop();return ul}function magicMarkups(string){if(string){string=string.toString();string=string.replace(/\(\!\(([\s\S]*?)\)\!\)/g,function(x,a){var b=a.split("|!|");if(altKey===true){return(b[1]!==undefined)?b[1]:b[0]}else{return(b[1]===undefined)?"":b[0]}});string=string.replace(/\[\!\[([\s\S]*?)\]\!\]/g,function(x,a){var b=a.split(":!:");if(abort===true){return false}value=prompt(b[0],(b[1])?b[1]:"");if(value===null){abort=true}return value});return string}return""}function prepare(action){if($.isFunction(action)){action=action(hash)}return magicMarkups(action)}function build(string){openWith=prepare(clicked.openWith);placeHolder=prepare(clicked.placeHolder);replaceWith=prepare(clicked.replaceWith);closeWith=prepare(clicked.closeWith);if(replaceWith!==""){block=openWith+replaceWith+closeWith}else{if(selection===""&&placeHolder!==""){block=openWith+placeHolder+closeWith}else{block=openWith+(string||selection)+closeWith}}return{block:block,openWith:openWith,replaceWith:replaceWith,placeHolder:placeHolder,closeWith:closeWith}}function markup(button){var len,j,n,i;hash=clicked=button;get();$.extend(hash,{line:"",root:options.root,textarea:textarea,selection:(selection||""),caretPosition:caretPosition,ctrlKey:ctrlKey,shiftKey:shiftKey,altKey:altKey});prepare(options.beforeInsert);prepare(clicked.beforeInsert);if(ctrlKey===true&&shiftKey===true){prepare(clicked.beforeMultiInsert)}$.extend(hash,{line:1});if(ctrlKey===true&&shiftKey===true){lines=selection.split(/\r?\n/);for(j=0,n=lines.length,i=0;i<n;i++){if($.trim(lines[i])!==""){$.extend(hash,{line:++j,selection:lines[i]});lines[i]=build(lines[i]).block}else{lines[i]=""}}string={block:lines.join("\n")};start=caretPosition;len=string.block.length+(($.browser.opera)?n-1:0)}else{if(ctrlKey===true){string=build(selection);start=caretPosition+string.openWith.length;len=string.block.length-string.openWith.length-string.closeWith.length;len-=fixIeBug(string.block)}else{if(shiftKey===true){string=build(selection);start=caretPosition;len=string.block.length;len-=fixIeBug(string.block)}else{string=build(selection);start=caretPosition+string.block.length;len=0;start-=fixIeBug(string.block)}}}if((selection===""&&string.replaceWith==="")){caretOffset+=fixOperaBug(string.block);start=caretPosition+string.openWith.length;len=string.block.length-string.openWith.length-string.closeWith.length;caretOffset=$$.val().substring(caretPosition,$$.val().length).length;caretOffset-=fixOperaBug($$.val().substring(0,caretPosition))}$.extend(hash,{caretPosition:caretPosition,scrollPosition:scrollPosition});if(string.block!==selection&&abort===false){insert(string.block);set(start,len)}else{caretOffset=-1}get();$.extend(hash,{line:"",selection:selection});if(ctrlKey===true&&shiftKey===true){prepare(clicked.afterMultiInsert)}prepare(clicked.afterInsert);prepare(options.afterInsert);if(previewWindow&&options.previewAutoRefresh){refreshPreview()}shiftKey=altKey=ctrlKey=abort=false}function fixOperaBug(string){if($.browser.opera){return string.length-string.replace(/\n*/g,"").length}return 0}function fixIeBug(string){if($.browser.msie){return string.length-string.replace(/\r/g,"").length}return 0}function insert(block){if(document.selection){var newSelection=document.selection.createRange();newSelection.text=block}else{textarea.value=textarea.value.substring(0,caretPosition)+block+textarea.value.substring(caretPosition+selection.length,textarea.value.length)}}function set(start,len){if(textarea.createTextRange){if($.browser.opera&&$.browser.version>=9.5&&len==0){return false}range=textarea.createTextRange();range.collapse(true);range.moveStart("character",start);range.moveEnd("character",len);range.select()}else{if(textarea.setSelectionRange){textarea.setSelectionRange(start,start+len)}}textarea.scrollTop=scrollPosition;textarea.focus()}function get(){textarea.focus();scrollPosition=textarea.scrollTop;if(document.selection){selection=document.selection;if($.browser.msie){var range=selection.createRange();var stored_range=range.duplicate();stored_range.moveToElementText(textarea);stored_range.setEndPoint("EndToEnd",range);var s=stored_range.text.length-range.text.length;caretPosition=s-(textarea.value.substr(0,s).length-textarea.value.substr(0,s).replace(/\r/g,"").length);selection=range.text}else{caretPosition=textarea.selectionStart}}else{caretPosition=textarea.selectionStart;selection=textarea.value.substring(caretPosition,textarea.selectionEnd)}return selection}function preview(){if(!previewWindow||previewWindow.closed){if(options.previewInWindow){previewWindow=window.open("","preview",options.previewInWindow);$(window).unload(function(){previewWindow.close()})}else{iFrame=$('<iframe class="markItUpPreviewFrame"></iframe>');if(options.previewPosition=="after"){iFrame.insertAfter(footer)}else{iFrame.insertBefore(header)}previewWindow=iFrame[iFrame.length-1].contentWindow||frame[iFrame.length-1]}}else{if(altKey===true){if(iFrame){iFrame.remove()}else{previewWindow.close()}previewWindow=iFrame=false}}if(!options.previewAutoRefresh){refreshPreview()}if(options.previewInWindow){previewWindow.focus()}}function refreshPreview(){renderPreview()}function renderPreview(){var phtml;if(options.previewParserPath!==""){$.ajax({type:"POST",url:options.previewParserPath,data:options.previewParserVar+"="+encodeURIComponent($$.val()),success:function(data){writeInPreview(localize(data,1))}})}else{if(!template){$.ajax({url:options.previewTemplatePath,success:function(data){writeInPreview(localize(data,1).replace(/<!-- content -->/g,$$.val()))}})}}return false}function writeInPreview(data){if(previewWindow.document){try{sp=previewWindow.document.documentElement.scrollTop}catch(e){sp=0}previewWindow.document.open();previewWindow.document.write(data);previewWindow.document.close();previewWindow.document.documentElement.scrollTop=sp}}function keyPressed(e){shiftKey=e.shiftKey;altKey=e.altKey;ctrlKey=(!(e.altKey&&e.ctrlKey))?e.ctrlKey:false;if(e.type==="keydown"){if(ctrlKey===true){li=$("a[accesskey="+String.fromCharCode(e.keyCode)+"]",header).parent("li");if(li.length!==0){ctrlKey=false;setTimeout(function(){li.triggerHandler("mousedown")},1);return false}}if(e.keyCode===13||e.keyCode===10){if(ctrlKey===true){ctrlKey=false;markup(options.onCtrlEnter);return options.onCtrlEnter.keepDefault}else{if(shiftKey===true){shiftKey=false;markup(options.onShiftEnter);return options.onShiftEnter.keepDefault}else{markup(options.onEnter);return options.onEnter.keepDefault}}}if(e.keyCode===9){if(shiftKey==true||ctrlKey==true||altKey==true){return false}if(caretOffset!==-1){get();caretOffset=$$.val().length-caretOffset;set(caretOffset,0);caretOffset=-1;return false}else{markup(options.onTab);return options.onTab.keepDefault}}}}init()})};$.fn.markItUpRemove=function(){return this.each(function(){var $$=$(this).unbind().removeClass("markItUpEditor");$$.parent("div").parent("div.markItUp").parent("div").replaceWith($$)})};$.markItUp=function(settings){var options={target:false};$.extend(options,settings);if(options.target){return $(options.target).each(function(){$(this).focus();$(this).trigger("insertion",[options])})}else{$("textarea").trigger("insertion",[options])}}})(jQuery);var comment={markupSet:[{name:"B",openWith:"[b]",closeWith:"[/b]",key:"B",className:"strong"},{name:"i",openWith:"[i]",closeWith:"[/i]",key:"I",className:"italic"},{name:"u",openWith:"[u]",closeWith:"[/u]",key:"U",className:"underline"},{name:"Colors &darr;",dropMenu:[{name:"Red",className:"color",openWith:"[c=red]",closeWith:"[/c]"},{name:"Orange",className:"color",openWith:"[c=orange]",closeWith:"[/c]"},{name:"Blue",className:"color",openWith:"[c=blue]",closeWith:"[/c]"},{name:"Green",className:"color",openWith:"[c=green]",closeWith:"[/c]"},{name:"Purple",className:"color",openWith:"[c=purple]",closeWith:"[/c]"},{name:"Pink",className:"color",openWith:"[c=pink]",closeWith:"[/c]"},{name:"Yellow",className:"color",openWith:"[c=yellow]",closeWith:"[/c]"},{name:"Brown",className:"color",openWith:"[c=brown]",closeWith:"[/c]"}]},{name:"Very happy",openWith:" :D ",className:"image very-happy"},{name:"Happy",openWith:" :) ",className:"image happy"},{name:"Sad",openWith:" :( ",className:"image sad"},{name:"Surprised",openWith:" :o ",className:"image surprised"},{name:"Wink",openWith:" ;) ",className:"image wink"},{name:"Plain",openWith:" :| ",className:"image plain"},{name:"Cry",openWith:" (CRY) ",className:"image cry"},{name:"Kiss",openWith:" (KISS) ",className:"image kiss"},{name:"Grin",openWith:" :B ",className:"image grin"},{name:"Devil",openWith:" (DEVIL) ",className:"image devil"},{name:"Super-man",openWith:" (SUPER MAN) ",className:"image super-man"},{name:"Eyes dropped",openWith:" (EYES DROPPED) ",className:"image eyes-dropped"},]};var ticket={markupSet:[{name:"B",openWith:"[b]",closeWith:"[/b]",key:"B",className:"strong"},{name:"i",openWith:"[i]",closeWith:"[/i]",key:"I",className:"italic"},{name:"u",openWith:"[u]",closeWith:"[/u]",key:"U",className:"underline"},{name:"Code",openWith:"[code]",closeWith:"[/code]",key:"*",className:"code"},{name:"Colors &darr;",dropMenu:[{name:"Red",className:"color",openWith:"[c=red]",closeWith:"[/c]"},{name:"Orange",className:"color",openWith:"[c=orange]",closeWith:"[/c]"},{name:"Blue",className:"color",openWith:"[c=blue]",closeWith:"[/c]"},{name:"Green",className:"color",openWith:"[c=green]",closeWith:"[/c]"},{name:"Purple",className:"color",openWith:"[c=purple]",closeWith:"[/c]"},{name:"Pink",className:"color",openWith:"[c=pink]",closeWith:"[/c]"},{name:"Yellow",className:"color",openWith:"[c=yellow]",closeWith:"[/c]"},{name:"Brown",className:"color",openWith:"[c=brown]",closeWith:"[/c]"}]},{name:"Very happy",openWith:" :D ",className:"image very-happy"},{name:"Happy",openWith:" :) ",className:"image happy"},{name:"Sad",openWith:" :( ",className:"image sad"},{name:"Surprised",openWith:" :o ",className:"image surprised"},{name:"Plain",openWith:" :| ",className:"image plain"},{name:"Cry",openWith:" (CRY) ",className:"image cry"}]};var news={markupSet:[{name:"H1",openWith:"[h1]",closeWith:"[/h1]"},{name:"H2",openWith:"[h2]",closeWith:"[/h2]"},{name:"H3",openWith:"[h3]",closeWith:"[/h3]"},{name:"B",openWith:"[b]",closeWith:"[/b]",key:"B",className:"strong"},{name:"i",openWith:"[i]",closeWith:"[/i]",key:"I",className:"italic"},{name:"u",openWith:"[u]",closeWith:"[/u]",key:"U",className:"underline"},{name:"Link",openWith:"[url=[![Url (with http://)]!]]",closeWith:"[/url]",placeHolder:"Your text to link here...",key:"L"},{name:"Code",openWith:"[code]",closeWith:"[/code]",key:"*"},{name:"Bullet list",openWith:"[list]\n",closeWith:"\n[/list]"},{name:"Numeric list",openWith:"[list=1]\n",closeWith:"\n[/list]"},{name:"List item",openWith:"[*] "},{name:"Image",key:"P",replaceWith:"[img align=[![Image Alignement (left, center, right); leave blank to set it to default (left)]!]][![Image Url]!][/img]",className:"picture"},{name:"Break",openWith:"[---more---]"},{name:"Colors &darr;",dropMenu:[{name:"Red",className:"color",openWith:"[c=red]",closeWith:"[/c]"},{name:"Orange",className:"color",openWith:"[c=orange]",closeWith:"[/c]"},{name:"Blue",className:"color",openWith:"[c=blue]",closeWith:"[/c]"},{name:"Green",className:"color",openWith:"[c=green]",closeWith:"[/c]"},{name:"Purple",className:"color",openWith:"[c=purple]",closeWith:"[/c]"},{name:"Pink",className:"color",openWith:"[c=pink]",closeWith:"[/c]"},{name:"Yellow",className:"color",openWith:"[c=yellow]",closeWith:"[/c]"},{name:"Brown",className:"color",openWith:"[c=brown]",closeWith:"[/c]"}]},]};

