/*
Module: Notes.js

*/

/*
    Variable: translationList
    Translation code.
*/
var translationList = '';


/*
    Function: htmlEncode
    Encodes passed Html.

    Parameters:
        text - passed html

    Returns:
        string.

    See Also:
        <htmlDecode(text)>
*/
function htmlEncode(text) {
	return text.replace(/\&/ig,  '&amp;').replace(/\</ig,  '&lt;').replace(/\>/ig,  '&gt;').replace(/\"/ig,  '&quot;');
}


/*
    Function: htmlDecode
    Decodes passed Html.

    Parameters:
        text - passed html

    Returns:
        string.

    See Also:
        <htmlEncode(text)>
*/
function htmlDecode(text) {
	return text.replace(/\&amp\;/ig,  '&').replace(/\&lt\;/ig,  '<').replace(/\&gt\;/ig,  '>').replace(/\&quot\;/ig,  '"');
}

//for test reemove it later
function enableNoteWindow(imagename) {
    var obj = document.getElementById(imagename);
    PrepareNotesWindow(obj);

}


/*
    Function: enableNotesWindow
    Enables the bubble window to the object (if id not null), else it enables the bubble window
    to every image and span tag, which name contains 'WNotes' and 'iconpopupUserNote'.

    Parameters:
        id - element id.

    Returns:
        nothing.

    See Also:
        <PrepareNotesWindow(el)>
        <showNotesWindow(event)>
        <hideNotesWindow(event)>
        <LocateNotesWindow(event, object)>
        <closeNoteWindow()>
*/
function enableNotesWindow(id)
{
    if ( typeof(id) != 'undefined' && id != null )
    {
        var obj = document.getElementById(id);
        PrepareNotesWindow(obj);
        return;
    }

		var hh = document.getElementById('btc');
		if (hh == null)
		{
			hh = document.createElement("div");
			hh.id = "btc";
			hh.setAttribute("id","btc");
			hh.style.position="absolute";
			document.getElementsByTagName("body")[0].appendChild(hh);
    }

    var links,i,h;
    if (!document.getElementById || !document.getElementsByTagName) return;

    links = document.getElementsByTagName("img");
    for (var i=0;i<links.length;i++)
    {
        var name = links[i].id;
        var idx = name.indexOf( 'WNotes' );
        if (idx != -1)
        {
            PrepareNotesWindow(links[i]);
        }
        else
        {
            idx = name.indexOf( 'iconpopupUserNote' );
            if (idx != -1) { PrepareNotesWindow(links[i]); }
        }
    }

    links=document.getElementsByTagName("span");
    for (var i=0;i<links.length;i++)
    {
        var name = links[i].id;
        var idx = name.indexOf( 'WNotes' );//img
        if (idx != -1) 
        {
            PrepareNotesWindow(links[i]);
        }
    }
    return;
}


/*
    Function: PrepareNotesWindow
    Creates a bubble window with data.

    Parameters:
        el - element id.

    Returns:
        nothing.

    See Also:
        <showNotesWindow(event)>
        <hideNotesWindow(event)>
        <LocateNotesWindow(event, object)>
        <closeNoteWindow()>
*/
function PrepareNotesWindow(el)
{
    var noteswindow = CreateEl("span", "notesWindow");

    var noteid=el.getAttribute("noteid");
    var panel=el.getAttribute("panel");

    var qs = 'noteid=' + noteid;

    var tmp = '';
    tmp += '<div id="firstdiv" style="width:450px; height:310px;" >';
        //tmp += '<div id="linkBar" class="rtbToolBarBkg" onmousedown="getDivPosition(event,\'move\')" >';
        tmp += '<div id="linkBar" class="rtbToolBarBkg"   >';

        tmp += '<div style="float:left" class="left"">';
        tmp +=      '<input type="text" id="noteTitle" value="' + LocalStrings.EnterTitleHere + '" onclick="searchOnClick(this)" onmousedown="zoneType=\'Text\';" onblur="zoneType=\'\';searchOnBlur(this);" />';
        tmp += '</div>';

        // use this dragBar as the handler for dragging the note popup div, handler set in this js file, search for "YAHOO"
        tmp += '<div id="dragBar" style="cursor:move; float:left; width:160px; height:25px;">&nbsp;</div>';

        tmp += '<div class="right">';
        tmp +=      '<img src="' + skinImagePath + 'Button_x_close.gif" alt="' + LocalStrings.Close + '" title="' + LocalStrings.Close + '" onclick="closeNoteWindow();" />';
        tmp += '</div>';

        tmp += '</div>';

        tmp += '<div id="rtbFrame">';
            tmp += '<iframe id="frmT" name="frmT" style="width:100%; height:180px;overflow:hidden;" src="../RTB/default.aspx?' + qs +'" frameborder="0" scrolling="no"></iframe>';
        tmp += '</div>';

        tmp += '<div id="rtbStats">';
            tmp += '<div style="float:left; padding: 0 15px;" >';
                tmp += '<p style="padding-bottom:20px;">' + LocalStrings.AttachedNoteTo + ' ';
                tmp += '<span id="lblattached"></span></p>';
            tmp += '</div>'; 

            tmp += '<div id="applyNote:" style="float:right; padding: 0 15px;" >';
                tmp += '<p style="padding-bottom:0; margin-bottom:0;">Apply this note to</p>';
                tmp += '<div id="dvapplied" style="padding-top:0; margin-top:0;"></div>';
            tmp += '</div>';
            tmp += '<div style="clear:both" />';
            tmp += '<div>';
            tmp += '<p><img style="padding: 0 5px; float:left" src="' + skinImagePath + 'note_button_save_note.gif" alt="Save" title="Save" onclick="onClickSaveUserNotes(' + panel + ',false)" />';
            tmp += '<img style="padding: 0 5px; float:left" src="' + skinImagePath + 'note_button_save_and_close.gif" alt="Save & Close" title="Save & Close" onclick="onClickSaveUserNotes(' + panel + ',true);" />';
            tmp += '<img style="padding: 0 5px; float:left" src="' + skinImagePath + 'note_button_cancel.gif" alt="Cancel" title="Cancel" onclick="closeNoteWindow();" /><div style="float: left; margin-bottom:3px; margin-left: 5px;" id=\"lblMessage\"\></div\><br clear="all"></p>';
            tmp += '</div>';

            // tmp += '<div style="float:right;margin-right:0; margin-bottom:0px; "><img class="rteImage" src="' + skinImagePath + 'note_resize.gif" alt="italic" title="italic" style="cursor:col-resize" onmousedown="getDivPosition(event,\'resize\')" /></div>';
            // tmp += '<div id="resizeBar" style="float:right;margin-right:0; margin-bottom:0px; "><img class="rteImage" src="' + skinImagePath + 'note_resize.gif" style="cursor:nw-resize;" alt="italic" title="italic" /></div>';
            tmp += '<div style="float:right;margin-right:0; margin-bottom:0px; "><img id="resizeIcon" class="rteImage" src="' + skinImagePath + 'note_resize.gif" alt="italic" title="italic" /></div>';

        tmp += '</div>';

    tmp += '</div>';

    noteswindow.innerHTML = tmp;
    setOpacity(noteswindow);

    el.tooltip=noteswindow;
    el.onclick=showNotesWindow;
}


/*
    Function: onClickSaveUserNotes
    Calls save methods from the RTB-default page.
    From my-bst default page, it calls: saveUserNotesInPane()
    From personal-content default page, it calls: saveUserNotes()

    Parameters:
        panel    - panel index.
        closewin - boolean.

    Returns:
        nothing.

    See Also:
        <saveUserNotesInPane(imgAddNote,rowVerse,bookcode,chapterid,verseid,translation,noteid,rowversion,notetitle.value,panel,closewin)>
        <saveUserNotes(imgAddNote,hrefTitle,hrefVerses,dvTranslation,bookcode,chapterid,verseid,translation,noteid,rowversion,notetitle.value,closewin)>
*/
function onClickSaveUserNotes(panel, closewin)
{
  var notetitle = document.getElementById('noteTitle');
  var lblattached = document.getElementById('lblattached');
  var bookcode = lblattached.getAttribute('bookcode');
  var chapterid = lblattached.getAttribute('chapterid');
  var verseid = lblattached.getAttribute('verseid');
  var noteid = lblattached.getAttribute('noteid');
  var rowversion = lblattached.getAttribute('rowversion');

  var ddlTranslation = document.getElementById('ddlTrans1');
  var translation = ddlTranslation.options[ddlTranslation.selectedIndex].value;

  var oo = document.getElementById('frmT');

  var imgAddNote;
  if ( panel == null )
  {
			// personal content page
      document.getElementById('imgWNotes'+noteid);
      var hrefTitle = document.getElementById('updateWNotes'+noteid);
      var hrefVerses = document.getElementById('hrefVerses'+noteid);
      var dvTranslation = document.getElementById('dvTranslation'+noteid);
      imgAddNote = document.getElementById('imgWNotes'+noteid);
      if (noteid != 0) rowversion = imgAddNote.getAttribute('rowversion');
      oo.contentWindow.saveUserNotes(imgAddNote,hrefTitle,hrefVerses,dvTranslation,bookcode,chapterid,verseid,translation,noteid,rowversion,notetitle.value,closewin);
  }
  else
  {
			// my BST page
      var rowVerse = document.getElementById('verseTxt_' + panel + '_' + verseid);
      var partOfIcon = 'iconpopupUserNote' + noteid;
      if (panel==1)
          partOfIcon = 'left' + partOfIcon;
      else if (panel==2)
          partOfIcon = 'right' + partOfIcon;
      imgAddNote = document.getElementById(partOfIcon);
      if (noteid != 0) rowversion = imgAddNote.getAttribute('rowversion');
      oo.contentWindow.saveUserNotesInPane(imgAddNote,rowVerse,bookcode,chapterid,verseid,translation,noteid,rowversion,notetitle.value,panel,closewin);
  }
}


// remove this function
function onClickAttach(display, obj) {
    if (display=='on') {
        showdiv('applyNote');
    }
    else if (display=='off') {
        hidediv('applyNote');
    }
}


/*
    Function: setRtbWithData
    Gets the translations list and sets the RTB with the user-note info.

    Parameters:
        obj - description no-params.

    Returns:
        nothing.

    See Also:
        <processTranslation(context)>
        <BibleStudyTools.Site.BLLService.GetTranslationItems()>
        <GetTranslationItems_callback(result, context)>
*/
function setRtbWithData(obj) {
    var noteid=obj.getAttribute('noteid');
    var notetitle=obj.getAttribute('notetitle');
    document.getElementById('noteTitle').value = notetitle;

    var translation=obj.getAttribute('translation'); if (translation ==null) translation='All';
    var bookcode=obj.getAttribute('bookcode'); if (bookcode ==null) bookcode='';
    var chapterid=obj.getAttribute('chapterid'); if (chapterid ==null) chapterid=0;
    var verseid=obj.getAttribute('verseid'); if (verseid ==null) verseid=0;
    var rowversion=obj.getAttribute('rowversion');

    var lblattached = document.getElementById('lblattached');
    lblattached.setAttribute('bookcode',bookcode);
    lblattached.setAttribute('chapterid',chapterid);
    lblattached.setAttribute('verseid',verseid);
    lblattached.setAttribute('noteid',noteid);
    lblattached.setAttribute('rowversion',rowversion);
    lblattached.innerHTML = bookcode.capitalize() + ' ' + chapterid + ':' + verseid;

    var context = translation;
    if (translationList == '') 
    {
       BibleStudyTools.Site.BLLService.GetTranslationItems(GetTranslationItems_callback,GetTranslationItemsFailed_callback, context, null);
    }
    else 
    {
      processTranslation(context);
    }

    return;

}


/*
    Function: GetTranslationItems_callback
    Processes the result from the call-back method.

    Parameters:
        result - translation list as an Html.

    Returns:
        nothing.

    See Also:
        <GetTranslationItemsFailed_callback(result,context, methodName)>
        <processTranslation(context)>
*/
function GetTranslationItems_callback(result, context) {
    translationList = result;
    processTranslation(context);
}


/*
    Function: GetTranslationItemsFailed_callback
    In call-back failure, it displays an error message.

    Parameters:
        result - string.
        context - context.
        methodName - js method.

    Returns:
        nothing.

    See Also:
        <GetTranslationItems_callback(result, context)>
*/
function GetTranslationItemsFailed_callback(result,context, methodName) {
    //alert("Error in Web Method '"+methodName+"'.\nMessage='"+result._message+"'\nStatus Code="+result._statusCode+"\nStack Trace='"+result._stackTrace+"'\nException Type='"+result._exceptionType+"'\nTimed Out="+result._timedOut);
    alert(LocalStrings.AnErrorHasOccurredForThisOperationPleaseTryAgain);
}


/*
    Function: processTranslation
    Processes the result from the call-back method.

    Parameters:
        context - context.

    Returns:
        nothing.

    See Also:
        <GetTranslationItems_callback(result, context)>
*/
function processTranslation(context) 
{
    var dvapplied = document.getElementById('dvapplied');
    dvapplied.innerHTML = translationList;
    var ddlTranslation = document.getElementById('ddlTrans1');

    if (context == '') 
        return;
   
    for (var i = 0; i < ddlTranslation.options.length; i++)
    {
        if (ddlTranslation.options[i].value.toLowerCase() == context.toLowerCase()) 
	    {
	        ddlTranslation.selectedIndex = i;
            return;
        }
    }
}



// remove this
function pausecomp(millis) {
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}


/*
    Function: showNotesWindow
    Shows the bubble window.

    Parameters:
        e - event.

    Returns:
        nothing.

    See Also:
        <hideNotesWindow(e)>
*/
function showNotesWindow(e)
{
	if (typeof(this.src) != 'undefined')
	{
		var imgsource = this.src;
		if (imgsource.indexOf('_inactive') != -1 ) return;
	}

	// enable notes in panel (if applicable)
	if (typeof(displayOptions) != 'undefined')
	{
		var panelNumber = this.getAttribute('panel');
		if (displayOptions[panelNumber-1].Usernotes == false)
			displayOptionsUsernotes(displayOptions[panelNumber-1], panelNumber);
	}

	hideNotesWindow(e);
	document.getElementById('btc').appendChild(this.tooltip);
	LocateNotesWindow(e, this);
	document.getElementById('btc').setAttribute('visible','opened');
	setRtbWithData(this);
    
    // using YAHOO, make the notes draggable and resizeable
    var dd = new YAHOO.util.DD('btc'); // also works: firstdiv, but btc is the outermost div
    dd.setOuterHandleElId('dragBar');
    
    if (BrowserDetect.browser.toLowerCase() != 'explorer') {
        var Dom = YAHOO.util.Dom, Event = YAHOO.util.Event;
	    var resize = new YAHOO.util.Resize('firstdiv', {
	        minWidth: 450
	        ,minHeight: 310
	        ,handles: new Array('r')
	    });
	} else { // internet explorer, so disable resize.  otherwise it could crash IE
        document.getElementById('resizeIcon').style.display = 'none';	    
	}
	return;
}


/*
    Function: hideNotesWindow
    Hides the bubble window.

    Parameters:
        e - event.

    Returns:
        nothing.

    See Also:
        <showNotesWindow(e)>
*/
function hideNotesWindow(e){
    var d=document.getElementById("btc");
    if(d.childNodes.length>0) d.removeChild(d.firstChild);

}


/*
    Function: LocateNotesWindow
    Locates the bubble window.

    Parameters:
        e   - event.
        obj - object name

    Returns:
        nothing.
*/
function LocateNotesWindow(e, obj){
    var objLeftPad=0;parseFloat(obj.style.paddingLeft);
    var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	curtop = 50;
	curleft = 150;
	document.getElementById("btc").style.top=curtop+"px";
    document.getElementById("btc").style.left=curleft+"px";
    return;
}


/*
    Function: closeNoteWindow
    Closes the bubble window.

    Parameters:
        no-params.

    Returns:
        nothing.
*/
function closeNoteWindow() {
    var d=document.getElementById("btc");
    if(d.childNodes.length>0) d.removeChild(d.firstChild);
    d.setAttribute('visible','closed');
}


/*
    Function: printNote
    Prints the user-note text.

    Parameters:
        noteid - note id.

    Returns:
        nothing.
*/
function printNote(noteid) {
    var url = '../user/printnote.aspx?id=' + noteid;
    var windowOptions = 'height=600,width=450,location=0,menubar=0,scrollbars=1,status=0,toolbar=0,resizable=1';
    window.open(url, 'UserNotePrint', windowOptions, true);
}
