var actors = new Array('blank','lineheight','text','font','size','bold','italic','underline');
var numLines = 18;
var cardHeight = 288 - (2 * 18);

if (!document.all) {
  HTMLElement.prototype.__defineGetter__("currentStyle", function() {
    return document.defaultView.getComputedStyle(this, null);
  });
  CSSStyleDeclaration.prototype=function() {
    for (i=0;i<this.length;i++) {
      var prop=this.item(i);
      this[prop]=this.getPropertyValue(prop);
    }
  }
  CSSStyleSheet.prototype.__defineGetter__("rules", function() {
    return this.cssRules;
  });
}

function adjustLineForMozilla(targetid, adjust) {
  if (!document.all) {
    var target1 = document.getElementById(targetid);
    var target2 = document.getElementById(targetid+'arrow');

    target1.style.height = 'auto';
    target2.style.height = 'auto';
    
    if (adjust) {
      target1.style.height = (parseInt(target1.currentStyle.height)-1)+'px';
      target2.style.height = (parseInt(target2.currentStyle.height)-1)+'px';
    }
  }
}

function escapeHTML(str) {
  var rstr = str;
  while (rstr.search(/</) > -1) {
    rstr = rstr.replace(/</, "&lt;");
  }
  while (rstr.search(/>/) > -1) {
    rstr = rstr.replace(/>/, "&gt;");
  }
  return rstr;
}

function setText(text, targetid)
{
  var targetel = document.getElementById(targetid);
  var text = escapeHTML(text);
  if (text == '' || text == null) {
    text = '&nbsp;';
    targetel.style.color = 'white';
  }
  else {
    targetel.style.color = 'black';
  }
  
  while (text.search(' ') > -1) {
    text = text.replace(' ', "&nbsp;");
  }
  
  targetel.innerHTML = text;
}

function resetForm()
{
  for (var i=1; i<=numLines; i++)
  {
    var linevariable = "line[" + i + "]";
    setText('', linevariable);

    var text = "text";  //hide blank line layer, show text layer
    text += i;
    var blank = "blank";
    blank += i;
    var target1 = document.getElementById(text);
    var target2 = document.getElementById(blank);
    target1.style.display = 'inline';   
    target2.style.display = 'none';

    adjustLineForMozilla(linevariable);

    var elem = document.getElementsByName(linevariable+'[font]')[0];
    elem.selectedIndex = 0;
    setFont(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[size]')[0];
    elem.selectedIndex = 0;
    setSize(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[bold]')[0];
    elem.checked = false;
    setBold(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[italic]')[0];
    elem.checked = false;
    setItalic(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[underline]')[0];
    elem.checked = false;
    setUnderline(elem, linevariable);
  }
}

function removeUnrenderedInput() {
  var totalHeight = 0;
  for (var i=1; i<=numLines; i++)
  {
    var linevariable = "line[" + i + "]";
    var divtag = document.getElementById(linevariable);
    var currentHeight = divtag.offsetHeight;
    totalHeight += currentHeight;
    if ((totalHeight - currentHeight + 1) > cardHeight) {
      var textInput = document.getElementsByName(linevariable+'[text]')[0];
      textInput.value = '';
      setText('', linevariable);
    }
  }
}

function setUnderline(actor, targetid)
{
  var target1 = document.getElementById(targetid);
//  var target2 = document.getElementById(targetid+'arrow');
  if (actor.checked)
  {
    target1.style.textDecoration = 'underline';
//    target2.style.textDecoration = 'underline';
  }
  else
  {
    target1.style.textDecoration = '';
//    target2.style.textDecoration = '';
  }
}

function setBold(actor, targetid)
{
  var target1 = document.getElementById(targetid);
  var target2 = document.getElementById(targetid+'arrow');
  if (!validateGaramond(targetid)) {
    actor.checked = false;
  }
  if (actor.checked)
  {
    target1.style.fontWeight = 'bold';
    target2.style.fontWeight = 'bold';
  }
  else
  {
    target1.style.fontWeight = '';
    target2.style.fontWeight = '';
  }
}

function setItalic(actor, targetid)
{
  var target1 = document.getElementById(targetid);
  var target2 = document.getElementById(targetid+'arrow');
  if (!validateGaramond(targetid)) {
    actor.checked = false;
  }
  if (actor.checked)
  {
    target1.style.fontStyle = 'italic';
    target2.style.fontStyle = 'italic';
  }
  else
  {
    target1.style.fontStyle = '';
    target2.style.fontStyle = '';
  }
}

function setSize(actor, targetid)
{
  var target1 = document.getElementById(targetid);
  var target2 = document.getElementById(targetid+'arrow');
  target1.style.lineHeight = 'normal';
  target2.style.lineHeight = 'normal';
  var fontsize = 18;
  if (actor.value != '' || actor.value != null)
  {
    fontsize = actor.value * 2;
  }
  target1.style.fontSize = fontsize+'px';
  target2.style.fontSize = fontsize+'px';
  target2.style.width=fontsize+'px';

  adjustLineForMozilla(targetid, false);
}

function setFont(actor, targetid)
{
  var target1 = document.getElementById(targetid);
  var target2 = document.getElementById(targetid+'arrow');
  var currentValue = target1.style.fontFamily;
  if (!validateGaramond(targetid)) {
    actor.value = currentValue;
  }
  if (actor.value == '' || actor.value == null)
  {
    target1.style.fontFamily = 'Times';
    target2.style.fontFamily = 'Times';
  }
  else
  {
    target1.style.fontFamily = actor.value;
    target2.style.fontFamily = actor.value;
  }
}

function hideArrow(spanid) {
  var target1 = document.getElementById('line['+spanid+']arrow');
  var target2 = document.getElementById('inputarrow'+spanid);
  if (document.getElementById) { // DOM3 = ie5, NS6 
    target1.style.visibility = 'hidden';
    target2.style.visibility = 'hidden';
  } 
  else { 
    if (document.layers) { // Netscape 4 
      document.hideShow.visibility = 'hidden'; 
    } 
    else { // ie 4 
      document.all.hideShow.style.visibility = 'hidden'; 
    } 
  } 
} 

function showArrow(spanid) { 
  var target1 = document.getElementById('line['+spanid+']arrow');
  var target2 = document.getElementById('inputarrow'+spanid);
  if (document.getElementById) // DOM3 = ie5, NS6
  {  
    target1.style.visibility = 'visible';
    target2.style.visibility = 'visible';
  } 
  else
  { 
    if (document.layers) // Netscape 4
    { 
      document.hideShow.visibility = 'visible';
    }
    else // ie 4
    {  
      document.all.hideShow.style.visibility = 'visible';
    } 
  }
} //end of function

function showBlank(actor, spanid, targetid)
{
  var text = "text";
  text += spanid;
  var blank = "blank";
  blank += spanid;
  var target1 = document.getElementById(text);
  var target2 = document.getElementById(blank);
  
  var targetel = document.getElementById(targetid);

  if (actor.checked)
  {
    //hide text layer, show blank line layer
    target1.style.display = 'none';   
    target2.style.display = 'inline';

    setText('',targetid);

    setLineHeight(document.getElementsByName(targetid+'[lineheight]')[0],targetid);
  }
  else //show text layer, hide blank line layer
  {
    target1.style.display = 'inline';   
    target2.style.display = 'none';
	
    setText(document.getElementsByName(targetid+'[text]')[0].value, targetid);
    setSize(document.getElementsByName(targetid+'[size]')[0],targetid);
  }
}

function setLineHeight(actor, targetid)
{
  var target1 = document.getElementById(targetid);
  var target2 = document.getElementById(targetid+'arrow');
  setText('', targetid);

  var radios = actor.form[targetid+'[lineheight]'];
  for(var i=0; i<radios.length; i++){
    if(radios[i].checked){
      var lineheight = radios[i].value * 2;
      target1.style.lineHeight = lineheight+'px';
      target2.style.lineHeight = lineheight+'px';
      if (document.all) {
        target1.style.fontSize = '0px';
        target2.style.fontSize = '0px';
      }
      target2.style.width=lineheight+'px';
      break;
    }
  }

  adjustLineForMozilla(targetid, true);
}

function setFocusAndBlurEvents() {
  for (var i=1; i<=numLines; i++) {
    var linevariable = 'line['+i+']';
    for (var j=0; j<actors.length; j++) {
      var elem = document.getElementsByName(linevariable+'['+actors[j]+']');
      for (var k=0; k<elem.length; k++) {
        var str = 'elem['+k+'].onfocus = function() {showArrow('+i+');};';
    	eval(str);
        str = 'elem['+k+'].onblur = function() {hideArrow('+i+');};';
    	eval(str);
      }
    }
  }
}

function initPreview() {
  for (var i=1; i<=numLines; i++) {
    var linevariable = 'line['+i+']';

    var elem = document.getElementsByName(linevariable+'[font]')[0];
    setFont(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[bold]')[0];
    setBold(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[italic]')[0];
    setItalic(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[underline]')[0];
    setUnderline(elem, linevariable);
    var elem = document.getElementsByName(linevariable+'[text]')[0];
    setText(elem.value, linevariable);
    var blank = document.getElementsByName(linevariable+'[blank]')[0];
    if (blank.checked) {
      var text = "text";  //hide blank line layer, show text layer
      text += i;
      var blank = "blank";
      blank += i;
      var target1 = document.getElementById(text);
      var target2 = document.getElementById(blank);
      target1.style.display = 'none';   
      target2.style.display = 'inline';

      var elem = document.getElementsByName(linevariable+'[lineheight]')[0];
      setLineHeight(elem, linevariable);
    }
    else {
      var elem = document.getElementsByName(linevariable+'[size]')[0];
      setSize(elem, linevariable);
    }
  }
}

function validateGaramond(targetid) {
  var font = document.getElementsByName(targetid+'[font]')[0];
  var bold = document.getElementsByName(targetid+'[bold]')[0];
  var italic = document.getElementsByName(targetid+'[italic]')[0];
  
  if (font.value == 'Garamond' && bold.checked && italic.checked) {
    alert("Garamond does not support Bold and Italic at the same time.  Please choose one or the other.");
    return false;
  }

  return true;
}

function confirmSubmission() {
  return confirm('I have reviewed the preview of the business card.\nI understand that my business card will be ordered as is.\nThe order cannot be modified once it is submitted.\n\nContinue?');
}

function getCardForPreview() {
  var previewText = document.getElementById('cardcolumn').innerHTML;

  document.getElementById('preview').value = previewText;
  
  return previewText;
}

function disableEnterKey(e)
{
  var event = e;
  if (window.event) {
    event = window.event;
  }
  if (event.keyCode == 13) {
    return false;
  }

  return true;
}

function initForm() {
  document.forms[0].onkeypress = disableEnterKey;
  setFocusAndBlurEvents();
  initPreview();
}

function setBackground(actor, targetid)
{	
	var target1 = document.getElementById(targetid);
	if (actor.value == 'S') {
		target1.style.background = 'url(images/backgrounds/Splash.jpg)';	
	}
	else {
		if (actor.value == 'H') {
			target1.style.background = 'url(images/backgrounds/Harvest.jpg)';		
		}
		else {
			if (actor.value == 'G') {
				target1.style.background = 'url(images/backgrounds/Gold.jpg)';			
			}
			else {
				if (actor.value == 'B') {
					target1.style.background = 'url(images/backgrounds/Burst.jpg)';				
				}
				else {
					target1.style.background = 'url(images/JPlusCard_non_printing.jpg)';				
				}			
			}		
		}
	}	
}

function messageWindow(title, msg)
{
  var width="300", height="125";
  var left = (screen.width/2) - width/2;
  var top = (screen.height/2) - height/2;
  var styleStr = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=no,copyhistory=yes,width='+width+',height='+height+',left='+left+',top='+top+',screenX='+left+',screenY='+top;
  var msgWindow = window.open("","msgWindow", styleStr);
  var head = '<head><title>'+title+'</title></head>';
  var body = '<center>'+msg+'<br><p><form><input type="button" value="   Done   " onClick="self.close()"></form>';
  msgWindow.document.write(head + body);
}

