// *********************************************************************//
// CopyRight (C) 2001-2002 BY Alawi Hussain BaAqeel (abaaqeel@hotmail.com)
// ********************** F R E E    P R O G R A M *********************//
// *********************************************************************//

// show or hide filter
// set 1 for showing or 0 for hiding
var enableFilter = 1;

////////////////////////// set default parameters //////////////////////////
function poet_setDefaultVar() {

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

  poetType = "0",
  poetAlign = "center",
  poetLine = "10";
  poetUse = "sp";
  poetLength = "0";

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

  poetBackColor = "none",
  poetBackImage = "none";  

  poetFilter = "";

  poetBorderStyle = "none",
  poetBorderWidth = "medium",
  poetBorderColor = "black";

  poetChar = "";

  poetSerialNum = "0",
  poetSerialNumColor = "";  

  poetSep = "";

}

//////////////////////////////////////////////////////////////////////////
           
  var poetSpaceWidth, poetExtendWidth;
  var poetToolFix;
            
  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 m.substring(i + 1);
  }

  function poet_getDefault(p, d) {
	  var r = ((p)?p:d);
	  return poet_trim(r);
  }
    
  function poet_setArg(arg) {        
    var par;        

    par = poet_getValue("font", arg) + ",,,,";  //comas = number of arrays - 1
    par = par.split(",");
    poetFontName = poet_getDefault(par[0], poetFontName);
	poetFontName = poetFontName.replace(/\-/g, ",");
    poetFontSize = poet_getDefault(par[1], poetFontSize);
    poetFontColor = poet_getDefault(par[2], poetFontColor);
    poetFontBold = poet_getDefault(par[3], poetFontBold);
    poetFontItalic = poet_getDefault(par[4], poetFontItalic);

    par = poet_getValue("border", arg) + ",,";
    par = par.split(",");
    poetBorderStyle = poet_getDefault(par[0], poetBorderStyle);
    poetBorderWidth = poet_getDefault(par[1], poetBorderWidth);
    poetBorderColor = poet_getDefault(par[2], poetBorderColor);

    par = poet_getValue("num", arg) + ",";	
	par = par.split(",");
    poetSerialNum = poet_getDefault(par[0], poetSerialNum);
	if (!poetSerialNum)
		poetSerialNum = 0;
    poetSerialNumColor = poet_getDefault(par[1], poetSerialNumColor);


    par = poet_getValue("type", arg);
    poetType = poet_getDefault(par, poetType); 

    par = poet_getValue("align", arg);
    poetAlign = poet_getDefault(par, poetAlign).toLowerCase();

    par = poet_getValue("line", arg);
    poetLine = poet_getDefault(par, poetLine);
	if (poetLine != 0)
	poetMargin = "margin-bottom:" + poetLine + "px";	

    par = poet_getValue("use", arg);
    poetUse = poet_getDefault(par, poetUse).toLowerCase();

    par = poet_getValue("length", arg);
    poetLength = poet_getDefault(par, poetLength);
    if (poetLength > 300)
	  poetLength = 300;

    par = poet_getValue("bkcolor", arg);
    poetBackColor = poet_getDefault(par, poetBackColor);

    par = poet_getValue("bkimage", arg);
    poetBackImage = poet_getDefault(par, poetBackImage);

    par = poet_getValue("char", arg);
    poetChar = poet_getDefault(par, poetChar);

    par = poet_getValue("sep", arg);
    poetSep = poet_getDefault(par, poetSep);

	if (enableFilter) {
      par = poet_getValue("filter", arg);
      poetFilter = poet_getDefault(par, poetFilter);
    }

    //////////// 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;

    testWidth.style.fontFamily = poetFontName;
    testWidth.style.fontSize = poetFontSize;
    testWidth.style.fontWeight = poetFontBold;
    testWidth.style.fontStyle = poetFontItalic;

    ///////////////////////////////////
  }
  
  function poet_trim(t) {
    t = t.replace(/^[ ]+/, "");
    t = t.replace(/[ ]+$/, "");
    return t;
  }
  
  function poet_textWidth(t) {
	t = t.replace(/ /g, "&nbsp;");
	t = t.replace(/\|lt\|/g, "<");
    t = t.replace(/\|eq\|/g, "=");
	t = t.replace(/\|sp\|/g, " ");	
	t = t.replace(/\^/g, "");
	testWidth.innerHTML= t;
    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,"alh");
	t = t.replace(/لله/g,"lah");
    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(/alh/g,"الله");
	s = s.replace(/lah/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);	  
    } else
		tw = 0;
	t = t.substr(0, i+1) + poetToolFix.replace(/%w%/,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 doPoetry(preview) {
    poet_setDefaultVar();	
    var d = document.getElementsByTagName("PRE");
    var poetry = d[d.length-1].innerHTML;
	var arg = d[d.length-1].tag.replace(/\\\"/g, "'");
	d[d.length-1].innerHTML = "";
	
	create_testWidth_table(); 

	poet_setArg(arg);
	
	poetToolFix = "<span style='font-size:1pt;width=%w%;'></span>";
    poetToolFix = poetToolFix.replace(/ /g,"^");

	poetry = poetry.replace(/[\^]|^[\r]+|[\r]+$|\n/gi, "");	
	poetry = poetry.replace(/[ـ]+( |$)/g,"ext1");
	poetry = poetry.replace(/(^| )[ـ]+/g,"ext2");
	poetry = poetry.replace(/ـ/g,"");
	poetry = poetry.replace(/ext1/g,"ـ");
	poetry = poetry.replace(/ext2/g,"ـ");
    poetry = poetry.replace(/[ ]+/g," ");
	if (preview)
		poetry = poetry.replace(/<[^<>\r]*>/g,"");	
	poetry = poetry.replace(/^(<[^<>\r ]*>|)[ ]*/g,"$1");
	poetry = poetry.replace(/(<[^<>\r ]*>|)[ ]*$/g,"$1");
	poetry = poetry.replace(/[ ]*(<[^<>\r]*>|)=/g,"$1=");
	poetry = poetry.replace(/=(<[^<>\r]*>|)[ ]*/g,"=$1");
	poetry = poetry.replace(/[ ]*(<[^<>\r]*>|)\r/g,"$1\r");
	poetry = poetry.replace(/\r(<[^<>\r]*>|)[ ]*/g,"\r$1");

// **** HTML TAG ****
	var ti, tj, tag;
	var re = /<[^<>\r]*>/;
	while (1) {		
		ti = poetry.search(re);	
		if (ti == -1) break;
		if (ti > -1) {
			tj = poetry.indexOf(">", ti);
			tag = poetry.substring(ti, tj + 1);
			tag = tag.replace(/</g,"|lt|");
			tag = tag.replace(/=/g,"|eq|");
			tag = tag.replace(/ /g,"|sp|");
			poetry = poetry.replace(re, tag);
		}
	}
// ***************    
	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, "^ـ");
    }

	var MTW = poet_textWidth(poetry.replace(/=/g,"<br>").replace(/\r/g,"<br>"));

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

    poetry = poetry.replace(/\|lt\|br\|sp\|\/>/gi,"");
    poetry = poetry.replace(/\|lt\|br>/gi,"");

// *************
    var poetBodyStyle = "", fonts = "";
	fonts += ";font-family:" + poetFontName;
    fonts += ";font-size:" + poetFontSize;
    fonts += ";color:" + poetFontColor;
    fonts += ";font-weight:" + poetFontBold;
    fonts += ";font-style:" + poetFontItalic;
	poetBodyStyle += fonts;
    poetBodyStyle += ";background-color:" + poetBackColor; 
    poetBodyStyle += ";background-image:url(" + poetBackImage + ")";
	poetBodyStyle += ";border:" + poetBorderWidth + " " + poetBorderStyle + " " + poetBorderColor;  
		
	
	document.write("<div align='" + poetAlign + "'>");
	if (poetSerialNum > 0 && poetAlign == "center")
		document.write("<table width=1 border=0 cellspacing=0 cellpadding=4 width=1><tr><td>");
    document.write("<table dir=rtl border=0 cellspacing=" + poetLine + " cellpadding=0 width=1 style='" + poetBodyStyle + "'>");
// *************

	var nbsp = "&nbsp;&nbsp;&nbsp;&nbsp;";
	var L, R, i, j = 0, cr = 0, sep, sn = 0;
	var poetSide, poetSideNum, wnum;
	if (poetSerialNum > 0)
		sn = poetSerialNum - 1;	
    while (1) {
   	  poetSideNum = "";
      poetSide = "";
      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);
		if (L == "-") {
			sep = true;
			L = poetSep;
		} else if (L != "\r" && L != "") {
			sep = false;
			L = poet_justify(L, MTW, ((i==cr)?0:1));
			L = L.replace(/ /g, "&nbsp;");
			L = L.replace(/\^/g, " ");
		}

		R = poetry.substring(i+1, cr);
		if (R == "-") {			
			sep = true;
			R = poetSep;
		} else if (R != "\r" && R != "") {
			sep = false;
			R = poet_justify(R, MTW, 2);
			R = R.replace(/ /g, "&nbsp;");
			R = R.replace(/\^/g, " ");
		}
 
		if (poetType == 0) {
		  if (i != cr) {
			  if (L != "" && R == "")
				poetSide = L;
			  else if (L == "" && R != "")
				poetSide = R;
			  else if (L != "" && R != "")	
				poetSide = L + nbsp + poetChar + nbsp + R;
		  } else
			    poetSide = L;
		  poetSide = "<div align=center style='" + fonts + ";'>" + poetSide + "</div>";
		  poetSideNum = ((sep)?"":++sn);
		}
		else if (poetType == 1) {
			poetSide = "<div align='right' style='" + fonts + "; margin-left:" + Math.round(MTW) + "pt;" + poetMargin + "'>" + L + "</div>";
			poetSide += "<div align='left' style='" + fonts + "; margin-right:" + Math.round(MTW) + "pt;'>" + R + "</div>";
			poetSideNum = ((sep)?"":++sn);
		}
		else if (poetType == 2) {
			poetSide = "<div align='right' style='" + fonts + "; margin-left:" + Math.round(MTW/2) + "pt;" + poetMargin + "'>" + L + "</div>";
			poetSide += "<div align='left' style='" + fonts + "; margin-right:" + Math.round(MTW/2) + "pt;'>" + R + "</div>";
			poetSideNum = ((sep)?"":++sn);
		}
		else if (poetType == 3) {
		  poetSideNum = ((sep)?"":++sn);
		  poetSide = "<div style='" + fonts + ";'>" + L + "</div>";
  		  poetSide += "<div style='" + fonts + ";'>" + R + "</div>";
		}        
	  }
      poetSide = poetSide.replace(/\|eq\|/g,"=");
  	  poetSide = poetSide.replace(/\|sp\|/g," ");
	  poetSide = poetSide.replace(/\|lt\|/g,"<");
	  if (!sep) {
		  if (poetSerialNum > 0)
			  document.write("<tr><td align=left valign=top style='" + fonts + "; color:" + poetSerialNumColor + "' nowrap>" + poetSideNum + poetToolFix.replace(/%w%/,"0pt ").replace(/\^/, " ") + "&nbsp;&nbsp;</td>");
		  else
			  document.write("<tr><td>&nbsp;</td>");
		  document.write("<td align=center valign=middle style='" + fonts + "; filter:" + poetFilter + "' nowrap>" + poetSide + "</td></tr>");
	  } else {
		  document.write("<tr>");
  		  document.write("<td>&nbsp;</td>");
		  document.write("<td align=center valign=middle style='" + fonts + "; filter:" + poetFilter + "' nowrap>" + poetSide + "</td></tr>");	
	  }
	  cr += 1;
	  j = cr;
    }
    document.write("</table>");
    if (poetSerialNum > 0 && poetAlign == "center" ) {
        wnum = poet_textWidth(sn + "&nbsp;&nbsp;");
        document.write("</td><td><div style='width:" + wnum + "pt;'></div></td></tr></table>");
 	}
	document.write("</div>");

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

	poet_textWidth("");
  }  

  function poetryDialog(theform) {
    c = showModalDialog("hackpoet.htm","","help:no; center:yes; status:no; dialogHeight:50px; dialogWidth:50px");
    if (c) {
      theform.message.value += c;
      theform.message.focus();
    }
  }