// please DO NOT REMOVE this copyright notice - أرجو ان لا تزيل وصف الحقوق //
// ***********************************************************************//
// جميع الحقوق محفوظة لموقع روض الرياحين
// http://www.rayaheen.net
// قام ببرمجته علوي حسين عمر باعقيل
// ***********************************************************************//

  // إذا لم يوجد الخط الذي حدده المستخدم
  // فإن الاتش تي ام ال يختار تلقائيا واحد من الخطوط التالية علىالترتيب 
  // فإن لم يجد الأول انتقل إلى الثاني وهكذا
  var 
  poetDefaultFont = "tahoma,ms sans serif,verdana,arial,helvetica";  

  var
  poetType = "0",
  poetLine = "200%",
  poetAlign = "center",
  poetUse = "ex",
  poetLength = "0",
  poetChar = "",
  poetSerialVisilbe = "0",
  poetSerialColor = "",
  poetHeadBackColor = "none",
  poetHeadBackImage = "none",
  poetHeadBorder = "",
  poetBodyBackColor = "none",
  poetBodyBackImage = "none",
  poetBodyBorder = "";

  var
  poetFontName = "",
  poetFontSize = "4", //1 to 7
  poetFontColor = "",
  poetFontBold = "",
  poetFontItalic = "",
  poetFilter = "";

//////////////////////////////////////////////////////////////////////////
           
  var poetPoetrySerial, poetSpaceWidth, poetExtendWidth, poetWidth;
  var poetToolFix, poetDiff;
            
  var poetLetters1 = "اأإآؤءدذرزوةى"
  var poetLetters2 = "اأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى";
  var poetLetters3 = "ًٌٍَُِّْ";

  function create_testWidth_table() {
    if (!document.getElementById("testWidth")) {
      var HTML = "<table border=1 width=0 style='visibility:hidden;position:absolute'>"
      HTML += "<tr><td id='testWidth' width=0 nowrap></td></tr>"
      HTML += "</table>"
      document.body.insertAdjacentHTML("afterBegin", HTML);
    }
  }

  function poet_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 poet_trim(m.substring(i + 1));
  }

  function poet_getDefault(p, d) {
    p = poet_trim(p);
    return poet_trim((p?p:d));
  }

  function poet_setMainArg(arg) {
    var par;
    par = poet_getValue("serial", arg);
    par = par.split(",");  
    poetSerialVisible = par[0];
    poetSerialColor = par[1];

    poetType = poet_getValue("type", arg);
    poetLine = poet_getValue("line", arg);
    poetAlign = poet_getValue("align", arg);
    poetUse = poet_getValue("use", arg);
    poetChar = poet_getValue("char", arg);
    poetLength = poet_getValue("length", arg);
	if (poetLength>300)
      poetLength = 300;
	poetHeadBackColor = poet_getValue("headbkcolor", arg);
    poetHeadBackImage = poet_getValue("headbkimage", arg);
    poetHeadBorder  = poet_getValue("headborder", arg);
	poetBodyBackColor  = poet_getValue("bodybkcolor", arg);
    poetBodyBackImage = poet_getValue("bodybkimage", arg);
    poetBodyBorder = poet_getValue("bodyborder", arg);
  }
    
  function poet_setArg(arg) {        
    var par;
    par = poet_getValue("font", arg);  //comas = number of arrays - 1
    par = par.split(",");
    poetFontName = par[0];
    poetFontSize = par[1];
    poetFontColor = par[2];
    poetFontBold = par[3];
    poetFontItalic = par[4];

	poetFilter = poet_getValue("filter", arg);

    //////////// set style ///////////
    var facesize = new Array("xx-small","x-small","small","medium","large","x-large","xx-large");
    if (poetFontSize < 1) 
      poetFontSize = 1;
    else if (poetFontSize > 7) 
      poetFontSize = 4;
    else
      poetFontSize = facesize[poetFontSize - 1];

    poetFontName += "," + poetDefaultFont;

  }
  
  function poet_trim(t) {
    t = t.replace(/^[ ]+/,"");
    t = t.replace(/[ ]+$/,"");
    return t;
  }
  
  function poet_textWidth(t) {
    testWidth.innerHTML= t.replace(/ /g, "&nbsp;");
    return (testWidth.clientWidth - 2) * 0.75;
  }
  
  function poet_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 poet_count(str, ch) {
    var c = 0;
    for (var i = 0; i < str.length; i++)
      c += (str.charAt(i) == ch);
    return c;
  }

  function poet_space(n) {
    if (n == 1)
      return " ";
    return  " " + poet_space(n-1);
  }
  
  function poet_createExtend(t) {
    var alef = "اأإآ";
    var s = "";
    var befor = "", ch = "";
    t = t.replace(/لله/g,"@");
    for (i = 0; i < t.length; i++) {
      ch = t.charAt(i);
      if (poetLetters2.indexOf(ch.charAt(0)) != -1 || ch.charAt(0) == "ء") {        
        if (befor != "")
          if (poetLetters1.indexOf(befor.charAt(0)) == -1 && poetLetters2.indexOf(ch.charAt(0)) != -1 
            && (befor.charAt(0) != "ل" 
            || alef.indexOf(ch.charAt(0)) == -1))
            s += "^";
        befor = ch;
        s += ch;
      }
      else {
        s += ch;
        if (poetLetters3.indexOf(ch.charAt(0)) == -1)
          befor = "";
      }        
    }
    s = s.replace(/@/g,"لله");
    return s;
  }
  
  function poet_extend(n) {
    if (n<=0)
	  return "";
    if (n == 1)
      return "ـ";
    return  "ـ" + poet_extend(n-1);
  } 

  function poet_justifyBYextend(t, w) {
    var ex = 0, i, d, n, p, m;
    ex = poet_count(t, "^");
    if (ex == 0) return t;
    d = Math.floor((w - poet_textWidth(t.replace(/\^/g,""))) / poetExtendWidth);      
    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 = poet_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, "^" + poet_extend(n));
      if (d % ex > 0)
        t[i] = poet_strReplace(t[i], "^", "ـ", d % ex);
    }
    t = t.join(" ");
    t = t.replace(/\^/g, ""); 
    return t;
  }
  
  function poet_justifyBYspace(t, w, dir) {
    var sp = 0, i, d, tw, n;
    sp = poet_count(t, " ");
    if (sp != 0) {
      d = Math.floor((w - poet_textWidth(t)) / poetSpaceWidth);
      n = Math.floor(d / sp);
      if (n > 0)
        t = t.replace(/ /g, poet_space(n + 1));
      if (d % sp > 0)
        t = poet_strReplace(t, poet_space(n + 1), poet_space(n + 2), d % sp);
    }
    tw = w - poet_textWidth(t);
    if (tw > 0) {
      i = t.lastIndexOf(" ");
      if (i == -1)
        if (dir == 0)
          return t;
        else
          i = ((dir==2)?-1:t.length-1);
      tw -= poetDiff;
      t = t.substr(0, i+1) + poetToolFix.replace(/letter-spacing:normal/,"letter-spacing:"+tw+"pt") + t.substr(i+1);
    }    
    return t; 
  }
  
  function poet_justify(t, w, dir) {
    if (poetUse == "ex") t = poet_justifyBYextend(t, w);    
    return poet_justifyBYspace(t, w, dir);
  }
  
  function poet_doJustify(poetry) {
    var L, R, i, j, cr, MTW, poetPoetry;

    poetToolFix = "<span style='font-size:1pt;letter-spacing:normal;visibility:hidden;'>ii</span>";
    testWidth.innerHTML = poetToolFix;
    poetDiff = (testWidth.clientWidth - 2) * 0.75;
    poetToolFix = poetToolFix.replace(/ /g,"^");    

	poetry = poet_trim(poetry);
    poetry = poetry.replace(/[\^@ـ]/g,"");
    poetry = poetry.replace(/[ ]+/g," ");    
	poetry = poetry.replace(/\n/g,"");
    poetry = poetry.replace(/^[\r]+/,"");
    poetry = poetry.replace(/[\r]+$/,"");
	poetry = poetry.replace(/[ ]*\r[ ]*/g,"\r");
    poetry = poetry.replace(/[ ]*=[ ]*/g,"=");
    poetry = poet_trim(poetry);
    poetry += "\r";


	poetExtendWidth = poet_textWidth("ش" + "ــ" + "ش");
    poetExtendWidth -= poet_textWidth("ش" + "ـ" + "ش");
    poetSpaceWidth = poet_textWidth("ش" + "&nbsp;&nbsp;" + "ش");
    poetSpaceWidth -= poet_textWidth("ش" + "&nbsp;" + "ش");

    if (poetUse=="ex") {
	  var test = poet_textWidth(poetry);
	  poetry = poet_createExtend(poetry);
      test = (poet_textWidth(poetry.replace(/\^/g, "ـ")) - test) / poet_count(poetry,"^");
	  if (test != poetExtendWidth) //problem in some fonts
		poetry = poetry.replace(/\^/g, "^ـ");
    }

	testWidth.innerHTML = poetry.replace(/\r/g,"<br>").replace(/=/g,"<br>").replace(/ /g, "&nbsp;").replace(/\^/g, "");
    MTW = (testWidth.clientWidth - 2) * 0.75;

	if (parseFloat(poetLength) > MTW)
	   MTW = parseFloat(poetLength);

	var nbsp = "&nbsp;&nbsp;&nbsp;&nbsp;";

	poetWidth = 0;
    poetPoetrySerial = "";
    poetPoetry = "";
    cr = 0;
    j = 0;
    var sn = 0;
    while (1) {
      cr = poetry.indexOf("\r", cr);
      if (cr == -1) break;
      if (poetry.substring(j, cr) != "") {
        i = poetry.indexOf("=", j);        
        if (i == -1 || i > cr) i = cr; //no '=' in this line
        L = poetry.substring(j, i);
        L = poet_justify(L, MTW, ((i==cr)?0:1));
        L = L.replace(/ /g, "&nbsp;");
        L = L.replace(/\^/g, " ");

        R = poetry.substring(i+1, cr);
        R = poet_justify(R, MTW, 2);
        R = R.replace(/ /g, "&nbsp;");
        R = R.replace(/\^/g, " ");

        if (poetType == 0) {		  
          if (i != cr)
            poetPoetry += L + nbsp + poetChar + nbsp + R + "<br>";
		  else
            poetPoetry += "<div align=center>" + L + "</div>";          
          poetPoetrySerial += ++sn + "<br>";
        }
		
        else if (poetType == 1) {
          if (i != cr) {
            poetPoetry += "<div style='margin-left:"+Math.round(MTW)+"pt'>" + L + "</div>";
            poetPoetry += "<div style='margin-right:"+Math.round(MTW)+"pt'>" + R + "</div>";
            poetPoetrySerial += ++sn + "<br>-<br>";
          }
          else {
            poetPoetry += "<div align=center>" + L + "</div>";
            poetPoetrySerial += ++sn + "<br>";
          }
        }
        else if (poetType == 2) {
          if (i != cr) {
            poetPoetry += "<div style='margin-left:"+Math.round(MTW/2)+"pt'>" + L + "</div>";            
            poetPoetry += "<div style='margin-right:"+Math.round(MTW/2)+"pt'>" + R + "</div>";
            poetPoetrySerial += ++sn + "<br>&nbsp;<br>";
          }
          else {
            poetPoetry += "<div align=center>" + L + "</div>";
            poetPoetrySerial += ++sn + "<br>";
          }
        }
        else if (poetType == 3) {
          poetPoetrySerial += ++sn + "<br>";
          poetPoetry += L + "<br>";          
          if (i != cr) {
            poetPoetry += R + "<br>";
            poetPoetrySerial += "&nbsp;<br>";          
          }
        }        
      }
      else {
        poetPoetry += "<br>";
        poetPoetrySerial += "<br>";
      }      
      cr += 1;
      j = cr;
    }
    poetPoetrySerial = poetPoetrySerial.replace(/(<br>)+$/i, "");
    return poetPoetry.replace(/(<br>)+$/i, "");
  }   
  
  function getPoetStyle() {
    var poetStyle = "";
	poetStyle += ";font-family:" + poetFontName;
    poetStyle += ";font-size:" + poetFontSize;
    poetStyle += ";color:" + poetFontColor;
    poetStyle += ";font-weight:" + poetFontBold;
    poetStyle += ";font-style:" + poetFontItalic;
	poetStyle += ";filter:" + poetFilter;
	return poetStyle;
  }

  function sh3r_start() {
	 var d = document.getElementsByTagName("DIV");   
	 div1 = d[d.length-1];
	 div2 = d[d.length-2];
	 div3 = d[d.length-3];
	 div4 = d[d.length-4];
	 document.write(doPoetry(div1,div2,div3,div4));
  }

  function doPoetry(div1,div2,div3,div4) {
    var HTML = "";

	poet_setMainArg(div4.tag);	
    create_testWidth_table();
    poet_setArg(div1.tag);
    testWidth.style.fontFamily = poetFontName;
    testWidth.style.fontSize = poetFontSize;
    testWidth.style.fontWeight = poetFontBold;
    testWidth.style.fontStyle = poetFontItalic;

	var poetPoetry = poet_doJustify(div1.innerText);
	var poetPoetryStyle = getPoetStyle();

	poet_setArg(div2.tag);
	var poetPoet = div2.innerText;
	var poetPoetStyle = getPoetStyle();

	poet_setArg(div3.tag);
	var poetSubject = div3.innerText;
	var poetSubjectStyle = getPoetStyle();

	var poetHeadStyle = "";
    poetHeadStyle += ";background-color:" + poetHeadBackColor; 
    poetHeadStyle += ";background-image:url(" + poetHeadBackImage + ")";
    poetHeadStyle += ";border:" + poetHeadBorder;

	var poetBodyStyle = "";
    poetBodyStyle += ";background-color:" + poetBodyBackColor; 
    poetBodyStyle += ";background-image:url(" + poetBodyBackImage + ")";
    poetBodyStyle += ";border:" + poetBodyBorder;
	poetPoetryStyle += ";line-height:" + poetLine;

	var poetSerialNumStyle = "color:" + poetSerialColor + "; display:" + ((poetSerialVisible=="0")?"none":"block");

	HTML += "<div align='" + poetAlign + "'>";
	HTML += "<table dir=rtl border=0 cellpadding=0 cellspacing=10 width=0 style='" + poetBodyStyle + "'><tr><td style='" + "border:" + poetHeadBorder + "'>";
	if (poetSubject!="") {
      HTML += "<table border=0 cellpadding=0 cellspacing=10 width=100%><tr><td>";
      HTML += "<table border=0 cellpadding=10 cellspacing=0 width=100% style='" + poetHeadStyle + "'>";
   	  HTML += "<tr><td align=center nowrap style='" + poetSubjectStyle + "'>";	  
	  HTML += poetSubject.replace(/\r\n/g,"<br>").replace(/ /g,"&nbsp;");
      HTML += "</td></tr>";
	  if (poetPoet!="") {
  	    HTML += "<tr><td align=left nowrap style='" + poetPoetStyle + "'>";
	    HTML += poetPoet + "&nbsp;&nbsp;";
        HTML += "</td></tr>";
      }
      HTML += "</table>";
	  HTML += "</td></tr></table>";
    }
    HTML += "<table border=0 cellpadding=0 cellspacing=10 width=100% style='" + poetPoetryStyle + "'><tr>";
	HTML += "<td align=center valign=top style='" + poetSerialNumStyle + "' nowrap>";
	HTML += poetPoetrySerial;
	HTML += "</td>";
    HTML += "<td align=center valign=top nowrap>";
    HTML += poetPoetry;
    HTML += "</td>";
    HTML += "</tr></table>";
	HTML += "</td></tr></table>";
	HTML += "</div>";
    return HTML;
  }