// **********************************

// الرجاء عدم إزالة وصف الحقوق

// Please don't remove the copyright note

// Poem Software by Alawi Hussain Ba3qeel © http://www.rayaheen.net, software@rayaheen.net

// Poem Software          تطوير ابو عمر        © http://www.bdr130.net, bdr130@bdr130.net

// ( free software )

// **********************************



////////////////////////// set default parameters //////////////////////////



function poem_setDefaultVar() {

  // إذا لم يوجد الخط الذي حدده المستخدم

  // فإن الاتش تي ام ال يختار تلقائيا واحد من الخطوط التالية على الترتيب

  // فإن لم يجد الأول انتقل إلى الثاني وهكذا

  poemDefaultFont = "simplified arabic,tahoma,ms sans serif,verdana,arial,helvetica";  







  poemType = "0",



  poemAlign = "center",



  poemLine = "0";



  poemUse = "ex";







  poemFontName = "",



  poemFontSize = "4",  // 1 to 7



  poemFontColor = "",



  poemFontBold = "",



  poemFontItalic = "";







  poemBackColor = "none",



  poemBackImage = "none";







  poemBorderStyle = "none",



  poemBorderWidth = "4",



  poemBorderColor = "gray";







  poemSerialNum = "0",



  poemSerialNumColor = "";  







}







//////////////////////////////////////////////////////////////////////////           



  var poemSpaceWidth, poemExtendWidth;



  var poemToolFix, poemPrevHTML, poemMargin, poemPadding;



            



  var poemLetters1 = "اأإآؤءدذرزوةى"



  var poemLetters2 = "اأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى";



  var poemLetters3 = "ًٌٍَُِّْ";



if(typeof HTMLElement!="undefined" && !

HTMLElement.prototype.insertAdjacentElement){

HTMLElement.prototype.insertAdjacentElement = function

(where,parsedNode)

{

switch (where){

case 'beforeBegin':

this.parentNode.insertBefore(parsedNode,this)

break;

case 'afterBegin':

this.insertBefore(parsedNode,this.firstChild);

break;

case 'beforeEnd':

this.appendChild(parsedNode);

break;

case 'afterEnd':

if (this.nextSibling)

this.parentNode.insertBefore(parsedNode,this.nextSibling);

else this.parentNode.appendChild(parsedNode);

break;

}

}



HTMLElement.prototype.insertAdjacentHTML = function

(where,htmlStr)

{

var r = this.ownerDocument.createRange();

r.setStartBefore(this);

var parsedHTML = r.createContextualFragment(htmlStr);

this.insertAdjacentElement(where,parsedHTML)

}





HTMLElement.prototype.insertAdjacentText = function

(where,txtStr)

{

var parsedText = document.createTextNode(txtStr)

this.insertAdjacentElement(where,parsedText)

}

}



  function create_poemTestWidth_table() {



    if (!document.getElementById("poemtestWidth")) {



      var HTML = "<table border=1 width=1px style='visibility:hidden;position:absolute'>";



      HTML += "<tr><td id='poemTestWidth' width='0px' nowrap></td></tr>";



      HTML += "</table>";



      document.body.insertAdjacentHTML("afterBegin", HTML);



    }



  }







  function poem_getValue(t, p) {



    var r = new RegExp("([ \"]|^)" + t + "[ ]*=[ ]*\"[^\"]*\"", "i");



    var m = p.match(r);    



    if (!m) {



      r = new RegExp("([ \"]|^)" + t + "[ ]*=[ ]*[^\" ]*([ ]|$)", "i");



      m = p.match(r);



      if (!m)          



        return "";



    }



    m = m[0];



    m = m.replace(/\"/gi,"");    



    var i = m.search("=");



    return m.substring(i + 1).replace(/[\(\)\&\[\]\;]/g, "");



  }







  function poem_getDefault(p, d) {



	  var r = ((p)?p:d);



	  return poem_trim(r);



  }



    



  function poem_setArg(arg) {        



    var par, poemFontSize2;







    par = poem_getValue("font", arg) + ",,,,";  //comas = number of arrays - 1



    par = par.split(",");



    poemFontName = poem_getDefault(par[0], poemFontName);



	poemFontName = poemFontName.replace(/\-/g, ",");



    poemFontSize2 = parseInt(poem_getDefault(par[1], poemFontSize));



	if (isNaN(poemFontSize2))



		poemFontSize2 = 0;



	if (poemFontSize2 < 1 || poemFontSize2 > 7)



		poemFontSize2 = poemFontSize;



	poemFontSize = poemFontSize2;







    poemFontColor = poem_getDefault(par[2], poemFontColor);



    poemFontBold = poem_getDefault(par[3], poemFontBold);



    poemFontItalic = poem_getDefault(par[4], poemFontItalic);







    par = poem_getValue("border", arg) + ",,";



    par = par.split(",");



    poemBorderStyle = poem_getDefault(par[0], poemBorderStyle);



    poemBorderWidth = poem_getDefault(par[1], poemBorderWidth);



    poemBorderColor = poem_getDefault(par[2], poemBorderColor);







    par = poem_getValue("num", arg) + ",";	



	par = par.split(",");



    poemSerialNum = poem_getDefault(par[0], poemSerialNum);



	if (!poemSerialNum)



		poemSerialNum = 0;



	else {



		poemSerialNum = parseInt(poemSerialNum);



		if (isNaN(poemSerialNum))



			poemSerialNum = 0;



	}



    poemSerialNumColor = poem_getDefault(par[1], poemSerialNumColor);







    par = poem_getValue("type", arg);



    poemType = poem_getDefault(par, poemType);







    par = poem_getValue("align", arg);



    poemAlign = poem_getDefault(par, poemAlign).toLowerCase();







    par = poem_getValue("line", arg);



    poemLine = poem_getDefault(par, poemLine);



	poemLine = parseInt(poemLine);



	if (isNaN(poemLine))



		poemLine = 0;



	if (poemLine == 0) {



		poemPadding = "5px";



		poemMargin = "";



	} else {



		poemPadding = 15;



		poemMargin = "margin-bottom:" + poemPadding;



	}







    par = poem_getValue("use", arg);



    poemUse = poem_getDefault(par, poemUse).toLowerCase();







    par = poem_getValue("bkcolor", arg);



    poemBackColor = poem_getDefault(par, poemBackColor);







    par = poem_getValue("bkimage", arg);



    poemBackImage = poem_getDefault(par, poemBackImage);







    //////////// set style ///////////



    var facesize = new Array("xx-small","x-small","small","medium","large","x-large","xx-large");



    poemFontSize = facesize[poemFontSize - 1];







    poemFontName += "," + poemDefaultFont;

    if (document.all){

		//

    }else{

        poemTestWidth = document.getElementById('poemTestWidth');

    }



    poemTestWidth.style.fontFamily = poemFontName;



    poemTestWidth.style.fontSize = poemFontSize;



    poemTestWidth.style.fontWeight = poemFontBold;



    poemTestWidth.style.fontStyle = poemFontItalic;







    ///////////////////////////////////



  }



  



  function poem_trim(t) {



    t = t.replace(/^[ ]+/, "");



    t = t.replace(/[ ]+$/, "");



    return t;



  }



  



  function poem_textWidth(t) {



	t = t.replace(/ /g, "&nbsp;");



	t = t.replace(/\^/g, "");



	poemTestWidth.innerHTML= t;	



    return (poemTestWidth.clientWidth - 2) * 0.75;



  }



  



  function poem_strReplace(t, s1, s2, c) {



	if (c <= 0) 



	  return;



    t=t.split(s1);



    var s="";



    for (var i=t.length-1;i>0;i--)



	  if (c-->0)



        s = s2 + t[i] + s;



	  else



		s = s1 + t[i] + s;







	s = t[0] + s;



    return s;



  }



  



  function poem_count(str, ch) {



    var c = 0;



    for (var i = 0; i < str.length; i++)



      c += (str.charAt(i) == ch);



    return c;



  }







  function poem_space(n) {



    if (n == 1)



      return " ";



    return  " " + poem_space(n-1);



  }



  



  function poem_createExtend(t) {



    var alef = "اأإآ";



    var s = "";



    var befor = "", ch = "";



    t = t.replace(/الله/g,"alh");



	t = t.replace(/لله/g,"lah");



    for (i = 0; i < t.length; i++) {



      ch = t.charAt(i);



      if (poemLetters2.indexOf(ch.charAt(0)) != -1 || ch.charAt(0) == "ء") {        



        if (befor != "")



          if (poemLetters1.indexOf(befor.charAt(0)) == -1 && poemLetters2.indexOf(ch.charAt(0)) != -1 



            && (befor.charAt(0) != "ل" 



            || alef.indexOf(ch.charAt(0)) == -1))



            s += "^";



        befor = ch;



        s += ch;



      }



      else {



        s += ch;



        if (poemLetters3.indexOf(ch.charAt(0)) == -1)



          befor = "";



      }        



    }



    s = s.replace(/alh/g,"الله");



	s = s.replace(/lah/g,"لله");



    return s;



  }



  



  function poem_extend(n) {



	if (n <= 0)



      return ""; 



    if (n == 1)



      return "ـ";



    return  "ـ" + poem_extend(n-1);



  } 







  function poem_justifyBYextend(t, w) {



    var ex = 0, i, d, n, p, m;



    ex = poem_count(t, "^");



    if (ex == 0) return t;



    d = Math.floor((w - poem_textWidth(t.replace(/\^/g,""))) / poemExtendWidth);      



    t = t.split(" ");



    n = 0;



    for (i = 0; i < t.length; i++)      



      n += (t[i].indexOf("^") != -1);



    p = Math.floor(d / n);



    m = d % n;



    for (i = t.length-1; i >= 0; i--) {    



      ex = poem_count(t[i], "^");



      if (ex == 0)



        continue;



      d = p + (m-- > 0);



      n = Math.floor(d / ex);      



      if (n > 0)



        t[i] = t[i].replace(/\^/g, "^" + poem_extend(n));



      if (d % ex > 0)



        t[i] = poem_strReplace(t[i], "^", "ـ", d % ex);



    }



    t = t.join(" ");



    t = t.replace(/\^/g, ""); 



    return t;



  }



  



  function poem_justifyBYspace(t, w, dir) {



    var sp = 0, i, d, tw, n;



    sp = poem_count(t, " ");



    if (sp != 0) {



      d = Math.floor((w - poem_textWidth(t)) / poemSpaceWidth);



      n = Math.floor(d / sp);



      if (n > 0)



        t = t.replace(/ /g, poem_space(n + 1));



      if (d % sp > 0)



        t = poem_strReplace(t, poem_space(n + 1), poem_space(n + 2), d % sp);



    }



    tw = w - poem_textWidth(t);



    if (tw > 0) {



      i = t.lastIndexOf(" ");



      if (i == -1)



        if (dir == 0)



          return t;



        else



          i = ((dir==2)?-1:t.length-1);	  



    } else



		tw = 0;



	t = t.substr(0, i+1) + poemToolFix.replace(/%w%/,tw + "pt") + t.substr(i+1);



    return t; 



  }



  



  function poem_justify(t, w, dir) {



    if (poemUse == "ex") t = poem_justifyBYextend(t, w);    



    return poem_justifyBYspace(t, w, dir);



  }







  function showPoemLine(preview, html) {



	if (preview)



		poemPrevHTML += html;



	else



		document.write(html);



  }



  



  function doPoem(preview) {



	var found = 0, div;



	poem_setDefaultVar();



	if (preview) {



		div = poemExample;		



		poemPrevHTML = "";



	}



	else {



		var d = document.getElementsByTagName("div");



		div = d[d.length -1];		



	}



	var poem = div.innerHTML.replace(/<br \/>|<br>/gi, "\r");



	if (poem == "")



		return;



	if (!div.tag)



		div.tag = "";



	if (!preview)



		div.innerHTML = "";	



	var arg = div.tag.replace(/\\\"/g, "'");		



	



	create_poemTestWidth_table(); 







	poem_setArg(arg);



	



	poemToolFix = "<span style='font-size:1pt;padding-right:%w%;'></span>";



    poemToolFix = poemToolFix.replace(/ /g,"^");







	poem = poem.replace(/</g, "&lt;");



	poem = poem.replace(/>/g, "&gt;");	



	poem = poem.replace(/[\^]|^[\r]+|[\r]+$|\n/g, "");



	poem = poem.replace(/^[ ]+|[ ]+$|/g, "");



	poem = poem.replace(/[ـ]+( |$)/g, "ext1");



	poem = poem.replace(/(^| )[ـ]+/g, "ext2");



	poem = poem.replace(/ـ/g, "");



	poem = poem.replace(/ext1/g, "ـ");



	poem = poem.replace(/ext2/g, "ـ");



    poem = poem.replace(/[ ]+/g, " ");



	poem = poem.replace(/[ ]*=[ ]*/g, "=");



	poem = poem.replace(/[ ]+\r|\r[ ]+/g, "\r");	



	



	if (poem.substring(poem.length-1) != "\r") poem += "\r";







	poemExtendWidth = poem_textWidth("ش" + "ــ" + "ش");



    poemExtendWidth -= poem_textWidth("ش" + "ـ" + "ش");



    poemSpaceWidth = poem_textWidth("ش" + "&nbsp;&nbsp;" + "ش");



    poemSpaceWidth -= poem_textWidth("ش" + "&nbsp;" + "ش");







	var tmp, MTW, MTW1;	



	



	tmp = "\r" + poem + "\r";



	tmp = tmp.replace(/\r[^\r]+\=[^\r]+/gi,"");



	tmp = tmp.replace(/\r/g,"<br>");



	var MTW1 = poem_textWidth(tmp);







	tmp = "\r" + poem + "\r";



	tmp = tmp.replace(/\r[^=]+\r/gi,"\r");	



	tmp = tmp.replace(/=/g,"<br>");



	tmp = tmp.replace(/\r/g,"<br>");



	var MTW = poem_textWidth(tmp);



	tmp = "";







	if (poemUse=="ex") {



	  var test = poem_textWidth(poem);



	  poem = poem_createExtend(poem);



      test = (poem_textWidth(poem.replace(/\^/g, "ـ")) - test) / poem_count(poem,"^");



	  //if (test != poemExtendWidth) //problem in some fonts



		//poem = poem.replace(/\^/g, "^ـ");



    }







// *************



    var poemBodyStyle = "", fonts = "";



	fonts += ";font-family:" + poemFontName;



    fonts += ";font-size:" + poemFontSize;



    fonts += ";color:" + poemFontColor;



    fonts += ";font-weight:" + poemFontBold;



    fonts += ";font-style:" + poemFontItalic;



	poemBodyStyle += fonts;



    poemBodyStyle += ";background-color:" + poemBackColor; 



    poemBodyStyle += ";background-image:url(" + poemBackImage + ")";



	poemBodyStyle += ";border:" + poemBorderWidth + "px " + poemBorderStyle + " " + poemBorderColor; 



	



	showPoemLine(preview, "<div align='" + poemAlign + "'>");



    showPoemLine(preview, "<table dir='rtl' border='0' cellpadding='0' cellspacing='0' width='1px' style='" + poemBodyStyle + ";'>");



// *************	



	poem = "\r" + poem;







	var L, R, i, j = 0, cr = 0, sn = 0;



	var poemSide, poemSideNum, wnum;



	if (poemSerialNum > 0)



		sn = poemSerialNum - 1;	



    while (1) {



   	  poemSideNum = "";



      poemSide = "";



	  if (sn == 0)



		poemSide = "<div style='height:" + poemPadding + "px;font-size:1'></div>";



      cr = poem.indexOf("\r", cr);



	  if (cr == -1) break;	  



      if (poem.substring(j, cr) != "") {



        i = poem.indexOf("=", j);



        if (i == -1 || i > cr) i = cr; //no '=' in this line



		



        L = poem.substring(j, i);



		if (L != "\r" && L != "") {



			if (i != cr)



				L = poem_justify(L, MTW, 1);



			else {



				L = poem_justify(L, MTW1, 0);



			}



			L = L.replace(/ /g, "&nbsp;");



			L = L.replace(/\^/g, " ");



		}







		R = poem.substring(i + 1, cr);



		if (R != "\r" && R != "") {



			R = poem_justify(R, MTW, 2);



			R = R.replace(/ /g, "&nbsp;");



			R = R.replace(/\^/g, " ");



		}







		if (poemType == 0) {



		  if (i != cr) {



			  if (L != "" && R == "")



				poemSide = L;



			  else if (L == "" && R != "")



				poemSide = R;



			  else if (L != "" && R != "")



				poemSide = L + poemToolFix.replace(/%w%/, Math.floor(MTW / 2.1) + "px").replace(/\^/, " ") + R;



		  } else



			    poemSide = L;







		  poemSide = "<div align=center style='" + fonts + ";" + poemMargin +"'>" + poemSide + "</div>";



		  



		  poemSideNum = ++sn;



		}



		else if (poemType == 1) {



			if (i == cr) {



				poemSide = "<div align=center style='" + fonts + ";" + poemMargin +"'>" + L + "</div>";



			} else {



				poemSide = "<div align='right' style='" + fonts + "; margin-left:" + Math.round(MTW) + "pt;" + poemMargin + "'>" + L + "</div>";



				poemSide += "<div align='left' style='" + fonts + "; margin-right:" + Math.round(MTW) + "pt;" + poemMargin + "'>" + R + "</div>";



			}



			poemSideNum = ++sn;



		}



		else if (poemType == 2 || poemType > 3 || poemType < 1) {



			if (i == cr) {



				poemSide = "<div align=center style='" + fonts + ";" + poemMargin +"'>" + L + "</div>";



			} else {



				poemSide = "<div align='right' style='" + fonts + "; margin-left:" + Math.round(MTW/2) + "pt;" + poemMargin + "'>" + L + "</div>";



				poemSide += "<div align='left' style='" + fonts + "; margin-right:" + Math.round(MTW/2) + "pt;" + poemMargin + "'>" + R + "</div>";



			}



			poemSideNum = ++sn;



		}



		else if (poemType == 3) {



		  poemSideNum = ++sn;



		  poemSide = "<div style='" + fonts + ";" + poemMargin + "'>" + L + "</div>";



  		  poemSide += "<div style='" + fonts + ";" + poemMargin + "'>" + R + "</div>";



		}        



	  }



	  if (poemSerialNum > 0 && poemSideNum != "")



		  showPoemLine(preview, "<tr><td align=left valign=top style='" + fonts + "; color:" + poemSerialNumColor + "' nowrap>&nbsp;&nbsp;" + poemSideNum + "</td>");



	  showPoemLine(preview, "<td align=center valign=middle style='" + fonts + ";padding-left:15px;padding-right:15px;' nowrap>" + poemSide + "</td></tr>");



	  cr += 1;



	  j = cr;



    }



	if (poemLine == 0) {



		poemSide = "<div style='height:" + poemPadding + "px;font-size:1'></div>";		



		if (poemSerialNum > 0 && poemSideNum != "")



		  showPoemLine(preview, "<tr><td align=left valign=top style='" + fonts + "; color:" + poemSerialNumColor + "' nowrap>&nbsp;&nbsp;" + poemSideNum + "</td>");



		showPoemLine(preview, "<td align=center valign=middle style='" + fonts + ";padding-left:15px;padding-right:15px;' nowrap>" + poemSide + "</td></tr>");



	}







    showPoemLine(preview, "</table></div>");







	if (preview)



		poemPreview.innerHTML = poemPrevHTML;



	poemPrevHTML = "";







	// *******************************************







	poem_textWidth("");



  } 
