var FULL_PARAGRAPH=0,FULL_SENTENCE=1,FULL_WORD=2,pages,currentPage=0,debug=0;

function jspagination_main(){
	var i=document.getElementById("pageContainer"),I=document.getElementById("tempContent");
	pages=[];
	pages=paginate(I,pag_currentMode,pag_width,pag_height);
	if(i.childNodes.length>0){for(var l=(i.childNodes.length-1);l>=0;l--){i.removeChild(i.childNodes[l])}}
	if(pages.length==0){pages[0]=createPage(0)}
	switchPage(undefined,0)
}
function changeMode(i){currentMode=i;main()}
function paraBreak(l,o){var i=document.getElementById("scratchpad"),I=""+l;i.innerHTML=I;var O=i.offsetHeight;if(O>o.getRemainingHeight()){if(O>o.pageHeight){wordBreak(I,o);return}else{o.flushPage();o.addContentToPage(I);return}}else{o.addContentToPage(I);return}}
function sentenceBreak(C,o){var l=document.getElementById("scratchpad"),c=""+C;oneLineHeight=o.oneLineHeight;var v=0,i=new_explode(c);if(i.length<=3){l.innerHTML=C;var z=l.offsetHeight;if(z>o.getRemainingHeight()){if(z>o.pageHeight){wordBreak(c,o);return}else{o.flushPage();o.addContentToPage(c);return}}else{o.addContentToPage(c);return}}
l.innerHTML=i[0]+i[1];var V=l.offsetHeight;if(V>o.getRemainingHeight()){if(V>o.pageHeight){wordBreak(i[0]+i[1],o)}else{o.flushPage();o.addContentToPage(i[0]+i[1])}}else{o.addContentToPage(i[0]+i[1])}
var O=i.length-2;for(var I=0;I<O;I++){l.innerHTML=i[I+2];var X=l.offsetHeight;if(X>o.getRemainingHeight()){if(X>o.pageHeight){wordBreak(i[I+2],o)}else{o.flushPage();o.addContentToPage(i[I+2])}}else{o.addContentToPage(i[I+2])}}
l.innerHTML=i[i.length-2]+i[i.length-1];var x=l.offsetHeight;if(x>o.getRemainingHeight()){if(x>o.pageHeight){wordBreak(i[i.length-2]+i[i.length-1],o)}else{o.flushPage();o.addContentToPage(i[i.length-2]+i[i.length-1])}}else{o.addContentToPage(i[i.length-2]+i[i.length-1])}
return}
function wordBreak(l,c){var o=document.getElementById("scratchpad");oneLineHeight=c.oneLineHeight;var x=""+l;o.innerHTML="";var I=x.split(" "),i=0,V="",X="",O=false;while(i<I.length){o.innerHTML=I.slice(0,i+1).join(" ")+"...";var z=o.offsetHeight;if(z>c.getRemainingHeight()){V=I.slice(0,i).join(" ")+"...";X="..."+I.slice(i,I.length+1).join(" ");O=true;break}
i++}
if(V==""){V=l;c.addContentToPage(V);c.tryFlushPage();return}else{if(c.testIfOneLine(V)){c.flushPage();wordBreak(l,c);return}
if(c.testIfOneLine(X)){var C=c.howManyLine(V);if(C<=2){c.flushPage();wordBreak(l,c);return}else{var v=i-1;while(0<v){if(c.howManyLine(I.slice(0,v+1).join(" ")+"...")==(C-1)){V=I.slice(0,v).join(" ")+"...";X="..."+I.slice(v,I.length+1).join(" ");O=true;break}
v--}}}
c.addContentToPage(V);if(X!="")c.flushPage();else
c.tryFlushPage();if(O)wordBreak(X,c)}}
function pgVat(Z,l){var k=this,s=Z,W=l;var V=[];var S,i=document.getElementById("scratchpad");i.innerHTML="AgBCDj^";var c=i.offsetHeight;i.innerHTML="";X(V.length);k.getRemainingHeight=I
k.addContentToPage=o
k.tryFlushPage=C
k.finalFlush=x
k.getPages=w
k.testIfOneLine=O
k.howManyLine=v
k.flushPage=z
k.pageHeight=l
function I(){i.innerHTML=S.innerHTML;if(i.innerHTML=="")return W;else return(W-i.offsetHeight)}
function O(I){i.innerHTML=I;return(i.offsetHeight<=c)}
function v(I){i.innerHTML=I;return(parseInt(i.offsetHeight/c))}
function C(){if(I()<c){V[V.length]=S;X(V.length)}}
function z(){if(trimString(S.innerHTML)==""){return}
V[V.length]=S;X(V.length)}
function x(){if((""+S.innerHTML).split(" ").length!=1)V[V.length]=S}
function X(i){S=document.createElement("DIV");S.id="page"+i;S.className="paginatedContent"}
function o(i){var I=trimString(""+i);if(S.innerHTML==""){if(I=="&nbsp;"||I=="<br>"){return 0}else{S.innerHTML+=i}}else{if(I=="<br>"){if(endsWith(S.innerHTML,"<br>")){return 0}}
S.innerHTML+=i}
return 100}
function w(){return V}}
function pag_2(C,O,v,o,X,V){var c=document.getElementById("scratchpad"),l=document.getElementById("scratchpad"),I=parseToParagraphs(C),Z=0;for(var i=0;i<I.length;i++){l.innerHTML=I[i];var x=l.offsetHeight;if(x<=O.getRemainingHeight()){var z=O.addContentToPage(I[i]);if(z>0)O.addContentToPage("<br>");O.tryFlushPage()}else{if(o==FULL_WORD)wordBreak(I[i],O);if(o==FULL_SENTENCE)sentenceBreak(I[i],O);if(o==FULL_PARAGRAPH)paraBreak(I[i],O);O.addContentToPage("<br>");O.tryFlushPage()}}}
function paginate(l,z,C,O){var q=new pgVat(C,O);var R=18,s=document.getElementById("scratchpad"),K=document.getElementById("scratchpad"),E=l.innerHTML;removeElement(l);var S=E,V="{staytogether}",v="{/staytogether}",X="{breakhere}",Z="{/breakhere}";S=S.replace(V,"</p>"+V+"<p>").replace(v,"</p>"+v+"<p>").replace(X,"</p>"+X+"<p>").replace(Z,"</p>"+Z+"<p>");V=V.toUpperCase();v=v.toUpperCase();X=X.toUpperCase();Z=Z.toUpperCase();var W=S.toUpperCase(),I=0,x=W.indexOf(V,I),w=W.indexOf(X,I);while(x!=-1||w!=-1){var e=false,Q=false;if(x==-1){Q=true}else if(w==-1){e=true}else if(x<w){e=true}else{Q=true}
if(e){var o=S.substr(I,x-I);if(o.length!=0){pag_2(o,q,l,z,C,O)}
var k=W.indexOf(v,x);if(k==-1){alert("error, missing end tag : "+v);return}
var c=S.substr(x+V.length,k-x-V.length);if(c.length!=0){K.innerHTML=c;var r=K.offsetHeight;if(r>q.getRemainingHeight()){if(r>q.pageHeight){q.flushPage();pag_2(c,q,l,z,C,O)}else{q.flushPage();pag_2(c,q,l,z,C,O)}}else{pag_2(c,q,l,z,C,O)}}
I=k+v.length}
if(Q){var o=S.substr(I,w-I);if(o.length!=0){pag_2(o,q,l,z,C,O)}
q.flushPage();I=w+X.length}
x=W.indexOf(V,I);w=W.indexOf(X,I)}
pag_2(S.substr(I),q,l,z,C,O);q.finalFlush();pages=q.getPages();for(i=0;i<pages.length;i++){pages[i].innerHTML=pages[i].innerHTML.replace(/<br>\s*\.\.\.\s*/i,"<br>");pages[i].innerHTML=pages[i].innerHTML.replace(/(<br>|\s)*$/i,"");pages[i].innerHTML=pages[i].innerHTML.replace(/^(<br>|\s)*/i,"");pages[i].innerHTML=pages[i].innerHTML.replace(/\$\$spc/i," ")}
removeElement(s);return pages}
function parseToParagraphs(I){var i=[];if(I.match(/<p>/i)){I=I.replace(/<p>/gi,"");i=I.split(/<\/p>/gi)}else if(I.match(/<br>/i)){var i=I.split(/<br>/i)}else{i[i.length]=I}
return i}
function new_explode(V){var c="text",C="",I=0,l,v="",o="";var O=[];var x=true;for(i=0;i<V.length;i++){if(!I){l=v}else{l="";I=0}
v=V.charAt(i);switch(c){case "text":if(v==" "&&(l=="."||l==";"||l=="?"||l=="!")){o=o.replace(/<a\$\$spcname.*>/i,"");O[O.length]=o+" ";o=""}else{o+=v}
if(v=="<"){c="inblock";block_end_char=">"}
if(v=="&"){c="inblock";block_end_char=";"}
break;case "inblock":if(v==block_end_char){c="text";I=1}
if(v==" "){o+="$$spc"}else{o+=v}
break}}
if(o.replace(/(^\s*)|(\s*$)/g,"")!=""){O[O.length]=o+" "}
return O}
function trimString(i){return i.replace(/(^\s*)|(\s*$)/g,"")}
function explode(delimiter, copy) {

// check if we are looking for a string or a regex
if (typeof delimiter == "string") {
delimiter = new RegExp(delimiter);
} 

// store the split pieces of the string
var pieces = new Array();

var lastIndex = 0;
var index = 0;

while (copy.length > 0) {

// match the delimiter to the string
var a = delimiter.exec(copy);

var temp;
		
// if no match was found add the entire string (whats left of it) to the array
if (a == null && copy.length > 0) {
temp = copy;
copy = "";
} else {
var delim = new String(a);
temp = copy.substr(0, a.index + delim.length);
copy = copy.substr(a.index + + delim.length);

}

pieces[pieces.length] = temp;

}

return pieces;

}



function createPage(I){var i=document.createElement("DIV");i.id="page"+I;i.className="paginatedContent";return i}
function switchPage(O,o){var i=document.getElementById("previousLink"),l=document.getElementById("nextLink"),I=document.getElementById("pageContainer");I.innerHTML=pages[o].innerHTML;if(o==pages.length-1){l.style.visibility="hidden"}else{l.style.visibility="visible"}
if(o==0){i.style.visibility="hidden"}else{i.style.visibility="visible"}}
function nextPage(){if(pages[currentPage+1]!=undefined){switchPage(currentPage,++currentPage)}}
function previousPage(){if(pages[currentPage-1]!=undefined){switchPage(currentPage,--currentPage)}}
function getDivision(I){var i;if(document.getElementById){i=document.getElementById(I)}else if(document.all){i=document.all[I]}else if(document.layers){i=getN4Division(I)}
return i}
function getN4Division(o,i){var l=null;if(i==undefined){i=document.layers}
var I=false,O=0;while((O<i.length)&&(!I)){if(i[O].id==o){l=i[O];I=true}else if(i[O].layers.length>0){l=getDivision(o,i[O].layers);if(l!=undefined){I=true}}
O++}
return l}
function removeElement(i){i.style.visibility="hidden";i.style.height="1px"}
function openPopup(){var i=window.open("","_blank","toolbar=no,menubar=no,location=no,scrollbars=yes");return i}
function startsWith(o,i,I,l){if(arguments.length<2){throw new TypeError('startsWith() requires at least 2 arguments')}
if((I==null)||(isNaN(new Number(I)))){I=0}
if((l==null)||(isNaN(new Number(l)))){l=Number.MAX_VALUE}
if(typeof i=="object"){for(var C=0,c=i.length;C<c;C++){var O=_stringTailMatch(o,i[C],I,l,true);if(O){return true}}
return false}
return _stringTailMatch(o,i,I,l,true)}
function endsWith(o,i,I,l){if(arguments.length<2){throw new TypeError('endsWith() requires at least 2 arguments')}
if((I==null)||(isNaN(new Number(I)))){I=0}
if((l==null)||(isNaN(new Number(l)))){l=Number.MAX_VALUE}
if(typeof i=="object"){for(var C=0,c=i.length;C<c;C++){var O=_stringTailMatch(o,i[C],I,l,false);if(O){return true}}
return false}
return _stringTailMatch(o,i,I,l,false)}
function _stringTailMatch(v,O,i,c,o){var C=v.length,l=O.length,I=_adjustIndices(i,c,C);i=I[0];c=I[1];C=I[2];if(o){if(i+l>C){return false}}else{if(c-i<l||i>C){return false}
if(c-l>i){i=c-l}}
if(c-i>=l){return v.substr(i,l)==O}
return false}
function _adjustIndices(i,I,l){if(I>l){I=l}else if(I<0){I+=l}
if(I<0){I=0}
if(i<0){i+=l}
if(i<0){i=0}
return[i,I,l]}