/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/* 
 * This global variable is used to allow the user, by clicking the mouse, to "hold" the info frame (the frame that
 * displays the annotation information.  When this variable is set to true, the info frame will not be updated.
 */
var holdInfoFrame = false;

/*
 * Initializes the annotation viewer
 */
function init()
{
	var doc = parent.frames["infoFrame"].document;
    doc.open();
    //write stylesheet reference
    doc.write('<link rel="StyleSheet" href="annotations.css" type="text/css" media="screen">');
    //write "Annotations" heading
    doc.write("<h2>Annotations</h2><br>");
}


/*
 * Clears the info frame of all annotation information.
 */
function clearInfoFrame() 
{
  if (!holdInfoFrame)
  {
    var doc = parent.frames["infoFrame"].document;
    //clear info frame
    
    var node = doc.getElementsByTagName("body")[0];
    // remove all the entries in the <body> tag
    while (node.firstChild) {
    	node.removeChild(node.firstChild);
    }
    //write back the "Annotations" heading
    doc.write("<h2>Annotations</h2><br>");
  }
}  

/*
 * Handles toggling of the holdInfoFrame variable.
 */
function toggleHoldInfoFrame() 
{
  holdInfoFrame = !holdInfoFrame;
  if (!holdInfoFrame)
  {
	clearInfoFrame();
  }
} 


/*
 * Writes information about an annotation to the info frame.
 *
 * styleClass - the value of the "class" attribute assigned to the annotation.  This determines the style
 *              used to format the annotation (e.g. background color)
 * spannedText - the annotated text
 * annotType - the CAS Type of the annotation
 * features - an array containing feature information.  Each element of this array is a two-element array
 *            containing a feature name and its value, in that order.
 */
function writeAnnotationInfo(styleClass, spannedText, annotType, features)
{
  if (!holdInfoFrame)
  {
    var doc = parent.frames["infoFrame"].document;

    //write the annotation's spanned text, formatted the same way in which it appears in the document view
    doc.write('<span class="' + styleClass + '">');
    doc.write(spannedText);
    doc.write('</span><br>');

    //write CAS type and features
    doc.write('CAS Type: ' + annotType + '<br>');
    for (i = 0; i < features.length; i++)
    {
      doc.writeln(features[i][0] + ' = ' + features[i][1] + '<br>');           
    }
    doc.write('<br>');
    doc.write('<br>');   
  }
}


/*
 * Changes a CSS style rule (in the document frame only).  This function assumes that there is only one stylesheet.
 *
 * selector - the selector text for the sytle to be changed.  There must exist a CSS rule with this selector.
 * newStyle - new style description to be assigned to the rule
 *
 */
function changeStyle(selector,newStyle)
{
  var doc = parent.frames["docFrame"].document;
  
  //get array of CSS style rules - note how this is done is different in Netscape and IE
  var theRules = new Array();
  if (doc.styleSheets[0].cssRules)
    theRules = doc.styleSheets[0].cssRules
  else if (doc.styleSheets[0].rules)
    theRules = doc.styleSheets[0].rules
  else 
    return
    
  //find the rule with the specified selector text
  for (i=0; i < theRules.length; i++)
  {
    //do a case-insensitive compare, because the selector text case differs between IE and Netscape
    if (theRules[i].selectorText.toLowerCase() == selector.toLowerCase())	
    {
      //in Netsacpe, can't set a style to the empty string in order to clear it.  
      //instead, set it to 'background:none'
      if (newStyle == '')
        newStyle = "background:none";
      
      //set the style text - this is different in Netscape and IE, so try it both ways
      if (theRules[i].style.cssText)      
        theRules[i].style.cssText = newStyle;
      else
        theRules[i].cssText = newStyle;
    }
  }
}
