//Following things are brought from MarkList related JSPX.
//Global variables moved from MarkList.jspx

// Marks all the checkboxes to either checked or unchecked.

function markAll(chkBox){	
	var marklistDivs = document.getElementsBySelector("div.markItem");
	var elementCnt = marklistDivs.length;
	var markCnt = MARK_CNT;
	var pgCnt =  PG_CNT;
    var totalMarked = markCnt - pgCnt  + elementCnt;   
 	if( chkBox.checked == true  )	{
        if( totalMarked <= 50 )	{
            updateMarkListCheckBoxes(chkBox);
            var markedURL = getMarkListURL();
   	        postRequest(markedURL);

        } else {
            alert(MARKLIST_ALL_ERR_MSG1+" "+MARKLIST_ALL_ERR_MSG2);
            chkBox.checked = false;
            return;
        }
    }	else {
        // For uncheck there is no need to do any validation.
        // It basically unchecks all and then enables or disables the viewmarklist button and updates the server.
        updateMarkListCheckBoxes(chkBox);
        //displayTotalMarkedCount(totalMarked);
        var markedURL = getMarkListURL();
        postRequest(markedURL);
	}
	/* no longer 2 checkboxes on page, just one; ECE200025805 - jmarx
	if(chkBox.id == "iteratorBar-selectAll_1"){
		getElementById("iteratorBar-selectAll_2").checked = chkBox.checked;
	}else{
		getElementById("iteratorBar-selectAll_1").checked = chkBox.checked;
	}
	*/
	//enableMySavedItem(getTotalMarkedCount());
}


// changes the state of each of the checkbox.
var inCheckAll = false;
function updateMarkListCheckBoxes(chkBox)	{
    inCheckAll = true;
	// Check for total number of Marked & capture the status of each marked Checkboxes.
	var marklistDivs = document.getElementsBySelector("div.markItem");
	for(var i=0;i<marklistDivs.length;i++){
		var element = marklistDivs[i].getElementsByTagName("INPUT")[0];
            if (chkBox.checked ==true) { // If CheckAll is True, makes all of them as Checked.
                element.checked = true;
                if(isValidObject(getElementById("globalTools-markedItems"))) {
                	getElementById("globalTools-markedItems").className = "";
                }           		
           		var totalMarked = getTotalMarkedCount();
           		displayTotalMarkedCount(totalMarked);
                Toggle(element);
            } else {
                element.checked = false;
           		if(MARK_CNT <=0){
           		 if(isValidObject(getElementById("globalTools-markedItems"))) {
					getElementById("globalTools-markedItems").className = "hide";	
           		 }		
				}
				var totalMarked = getTotalMarkedCount();
           		displayTotalMarkedCount(totalMarked);
                Toggle(element);
            }
	}
	inCheckAll = false;
}

function getMarkListURL() {
    var markedInfo = getMarkListString();
    return getMarkListURLForMarkedInfo(markedInfo);
}

// Returns the MarkListString for all the checkboxes depending on their state.
function getMarkListString() {
	var element;
	var markedInfo = "";
	var marklistDivs = document.getElementsBySelector("div.markItem");
	for(var i=0;i<marklistDivs.length;i++){
		var element = marklistDivs[i].getElementsByTagName("INPUT")[0];
        var markedString = element.value;
        if (element.checked == true ) {
            markedInfo += prepareMarkedString(markedString,"1");
        }else {
            markedInfo += prepareMarkedString(markedString,"0");
        }
	}
	return markedInfo;
}

function getMarkListURLForMarkedInfo(markedInfo) {
    var timeNow = new Date();
    var qrystring = UPDATE_MARKLIST_LINK + "&markedString="+markedInfo;
    qrystring += "&a="+timeNow.getTime();
//    var searchType = getSearchType();
//    if(searchType != ''){
//    	qrystring += "&searchType="+searchType;
//    }
    return qrystring;
}

function getSearchType(){
	var url = window.location.href;
	url = url.replace(/.*\?(.*?)/,"$1");
	params = url.split ("&");
	for (i = 0; i < params.length; i++) {
		parts = params[i].split("=");
		if(parts[0] == 'searchType')
			return parts[1];
	}
	return '';
}


/**
* Generic function to prepare the Marked String that needs to be sent to the browser for Update.
* This is written in a generic fashion to cater to both "Select" for individual checkboxes and "SelectAll" checkbox as well.
*
* All what it does it creates a Mark List String of all the items in the current page with their status appended with appropriate delimiter
*/

function prepareMarkedString(dirtyMarkedString, updateStatus)	{
    // Retrieving the Tab ID from the String.
    // The original format of the string would be <TABID>_<DocID>_<BucketSubID>_<PageNo>
    // Final Format would be <TabID>_<DocID>_<UpdateStatus>_<BucketSubID>_<PageNo>
    var markedInfo = "";
    // check for product attribution
    markedInfo += dirtyMarkedString.substring(0,dirtyMarkedString.indexOf('_'));
    markedInfo += "_";
    dirtyMarkedString = dirtyMarkedString.substring(dirtyMarkedString.indexOf('_') + 1);

    markedInfo +=  dirtyMarkedString.substring(0,dirtyMarkedString.indexOf('_')); // Retrieve the tabID & store in markedInfo
    dirtyMarkedString = dirtyMarkedString.substring(dirtyMarkedString.indexOf('_') + 1); // Remove the tabID from the markedString.

    // Retrieving the DocID
    markedInfo +=  "_"+ dirtyMarkedString.substring(0,dirtyMarkedString.indexOf('_')); // Retrieve the docID from markedString.
	tempDirtyMarkedString =  dirtyMarkedString.substring(dirtyMarkedString.indexOf('_') + 1); // Remove the docID from the markedString
    
	
	if(tempDirtyMarkedString == "0" || tempDirtyMarkedString == "1"
		|| tempDirtyMarkedString.indexOf("0_") == 0 || tempDirtyMarkedString.indexOf("1_") == 0){ //passing contentset
   	  dirtyMarkedString = tempDirtyMarkedString;
	}else{
	  dirtyMarkedString = tempDirtyMarkedString.substring(tempDirtyMarkedString.indexOf('_') + 1);
	  tempDocId = tempDirtyMarkedString.substring(0,tempDirtyMarkedString.indexOf('_'));	  
	  markedInfo += "~"+ tempDocId;
	}
		
    if(updateStatus == "1")	{
        markedInfo += "_"+"1";
    } else {
        markedInfo += "_"+"0";
    }

    // append the rest to the markedInfo
    markedInfo += "_" + dirtyMarkedString;
/**
    var tmpIndex = dirtyMarkedString.indexOf('_'); // Check for availability of PageNum
    if( tmpIndex != -1)	{ // Page Num available
        //markedInfo +=  "_" + dirtyMarkedString.substring(0,dirtyMarkedString.indexOf('_'));
        markedInfo +=  dirtyMarkedString; // Appending the bucketSubID & Page Num.
    } else { // Page Num not available
        markedInfo += "_" + dirtyMarkedString; // Appending the bucketSubID.
    }
    */
    markedInfo += "^";
    return markedInfo;
}


// Marks the markListItem on the result list & markList page.
//# var tmpImg = new Image();
function mark(chkbox) {
    if (inCheckAll) return;
    var xmlhttp = getXmlHttpRequest();
    var isAllChecked  = true;
 	var marklistDivs = document.getElementsBySelector("div.markItem");
	for(var i=0;i<marklistDivs.length;i++){
		var element = marklistDivs[i].getElementsByTagName("INPUT")[0];
        if (element.checked == false){
            isAllChecked  = false;
            break;
        }
    }
    checkOrUncheckMarkAll(isAllChecked);
	var totalMarked = getTotalMarkedCount();    
	var markedInfo ="";
	if(chkbox.checked == true)	{
        if( totalMarked <= 50 )	{
            var markedURL = getMarkListURL();
    	    postRequest(markedURL);
		} else {
            alert(MARKLIST_ERR_MSG);
			chkbox.checked = false;
			checkOrUncheckMarkAll(false);
			return;
		}
	} else {
	    var markedURL = getMarkListURL();
	    postRequest(markedURL);
	}    
    
	if(totalMarked > 0){
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
			 getElementById("globalTools-markedItems").className = "";
		 }
        displayTotalMarkedCount(totalMarked);
	}else{
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
			 getElementById("globalTools-markedItems").className = "hide";
		 }
	}
	
	//enableMySavedItem(getTotalMarkedCount());
}

function markPageCheckBox(){
	markPage(this);
}

function markPage(chkbox) {
	var markCnt = MARK_CNT;
	var pgCnt =  PG_CNT;
	// ECE200027995 - was getting totalMarked as string and not populating the innerHTML string correctly. jmarx
	var totalMarked = getTotalMarkedCount();
    var markedInfo ="";
	if(chkbox.checked == true)	{
		if( totalMarked <= 50 )	{
			var markedInfo = prepareMarkedString(chkbox.value,"1");
            var qrystring = getMarkListURLForMarkedInfo(markedInfo);
   	        postRequest(qrystring);
		} else {
			alert("There are already 50 articles marked.");
			chkbox.checked = false;
			return;
		}
	} else {
			var markedInfo = prepareMarkedString(chkbox.value,"0");
            var qrystring = getMarkListURLForMarkedInfo(markedInfo);
   	        postRequest(qrystring);
	}
	if(totalMarked > 0){
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
			 getElementById("globalTools-markedItems").className = "";
		 }
		displayTotalMarkedCount(totalMarked);
	}else{
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
			 getElementById("globalTools-markedItems").className = "hide";	
		 }
	}	
	
	/* no longer 2 checkboxes on page, just one; ECE200025805 - jmarx
	if(chkbox.id == "iteratorBar-markDocument_1"){
		getElementById("iteratorBar-markDocument_2").checked = chkbox.checked;
	}else{
		getElementById("iteratorBar-markDocument_1").checked = chkbox.checked;
	}
	*/
	//enableMySavedItem(totalMarked);
}

function getTotalMarkedCount() {

	var markCnt = MARK_CNT;
	var pgCnt =  PG_CNT;
	var curCnt = getNoOfMarkedItem();
	var totalMarked = markCnt - pgCnt + curCnt;
    return totalMarked;
}

// Returns the current count of number of Items marked in the particular page.
function getNoOfMarkedItem()	{
	var element;
	var curCnt = 0;
    // Check for total number of Marked & capture the status of each marked Checkboxes.
	// If it exceeds the predefined count then it break.
	var marklistDivs = document.getElementsBySelector("div.markItem");
    for(var i=0;i<marklistDivs.length;i++){
		var element = marklistDivs[i].getElementsByTagName("INPUT")[0];
        if (element.checked == true){
            curCnt += 1;
      }
    }
	return curCnt;
}

function getMarkedItemCount()	{
    var totalNumber = 0;
    var spanObj = getElementById('totalNoOfItems');
    if(spanObj !=null) {
        totalNumber = spanObj.innerHTML.replace(/<[^>]+>/g,'');
        totalNumber = totalNumber.replace("(","");
        totalNumber = trim(totalNumber.split("&nbsp;")[0]);
        totalNumber = totalNumber.replace(")","");
        if(isNaN(totalNumber)) {
              totalNumber = 0;
        }
    }
    return totalNumber;
}

function Toggle(whichRow) {
	if (whichRow.checked) {
		Highlight(whichRow);
	}
	else {
		Unhighlight(whichRow);
	}
}

function Highlight(whichRow) {
	var resultsRow = null;
	if (whichRow.parentNode && whichRow.parentNode.parentNode  && whichRow.parentNode.parentNode.parentNode) {
		resultsRow = whichRow.parentNode.parentNode.parentNode;
	}
	if (resultsRow) {
		if (resultsRow.className == "resultsRow") {
			resultsRow.className = "resultsRow highlight";
		}
	}
}

function Unhighlight(whichRow) {
	var resultsRow = null;
	if (whichRow.parentNode && whichRow.parentNode.parentNode  && whichRow.parentNode.parentNode.parentNode) {
		resultsRow = whichRow.parentNode.parentNode.parentNode;
	}
	if (resultsRow) {
	    if (resultsRow.className == "resultsRow highlight") {
			resultsRow.className = "resultsRow";
	    }
	}
}

function addToggleEvent(){
	var checkBoxElements = document.getElementsByTagName("checkbox");
   	for(var i=0;i<checkBoxElements.length;i++){
		var chkBoxId = checkBoxElements[i].id;
	    if(chkBoxId.match("resultsTable-markItem_")){
    		checkBoxElements[i].onclick = Toggle;
    		checkBoxElements[i].onclick = mark;
		}
	}
}

// To check the no of records selected while clicking the print/email option
//If the any records selected than only the user is allowed to go further
function checkMarkedRecords() {
     var currentCount = getMarkedItemCount();
 	if( currentCount <= 0 ){
 		alert(NO_RECORDS_MARKED_MSG);
 		return false;
 	}else{
 		 window.open(this.href,"galeChildWindow","toolbar=no, directories=no, status=no, location=no, resizable=yes, menubar=no, scrollbars=yes,screenX=50,screenY=50,top=50,left=50,width=750,height=550");
  		 return false;
  	}
}

function printMarkedRecords() {
     var currentCount = getMarkedItemCount();
 	if( currentCount <= 0 ){
 		alert(NO_RECORDS_MARKED_MSG);
 		return false;
 	}else{
 		 window.open(this.href,"galeChildWindow","toolbar=no, directories=no, status=no, location=no, resizable=yes, menubar=yes, scrollbars=yes,screenX=50,screenY=50,top=50,left=50,width=750,height=550");
  		 return false;
  	}
}

function downloadDocument(){
      var markedItems = getNoOfMarkedItemForTab(this.href);
	if(markedItems <= 0 ){
	   	alert(NO_RECORDS_DOWNLOAD_MSG);
	   	return false;
	}else{
		window.open(this.href,"galeChildWindow","toolbar=no, directories=no, status=no, location=no, resizable=yes, menubar=yes, scrollbars=yes,screenX=50,screenY=50,top=50,left=50,width=750,height=550");
    	return false;
	}
}

function getNoOfMarkedItemForTab(url) {
 	var spanObj = getElementById("marklistCollectionSize");
    var totalNumber = spanObj.innerHTML.replace(/<[^>]+>/g,'');
    totalNumber = totalNumber.replace("(","");
	totalNumber = trim(totalNumber.split("&nbsp;")[0]);
	totalNumber = trim(totalNumber.split(" ")[0]);
    totalNumber = totalNumber.replace(")","");
    if(isNaN(totalNumber)) {
          totalNumber = 0;
	 }
	return totalNumber;
}

function closeRow(row){
    toClose = getElementById(row);
	toClose.style.display = "none";
}

function reduceCountByOne(spanId) {
    var spanObj = getElementById(spanId);
	var totalNumber = spanObj.innerHTML.replace(/<[^>]+>/g,'');
	totalNumber = totalNumber.replace("(","");
	totalNumber = trim(totalNumber.split("&nbsp;")[0]);
	totalNumber = totalNumber.replace(")","");
	if(isNaN(totalNumber)) {
    	totalNumber = 0;
	} else {
	    --totalNumber;
	}			
	if(totalNumber == 0){
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
		getElementById("globalTools-markedItems").className = "hide";
		 }
	}else{
		 if(isValidObject(getElementById("globalTools-markedItems"))) {
		getElementById("globalTools-markedItems").className = "";
		 }
	}			
	var parsedText = document.createTextNode(' '+totalNumber+' ');
	spanObj.innerHTML = "";
	spanObj.appendChild(parsedText);
	spanObj.innerHTML = "(" + spanObj.innerHTML + "&nbsp;saved item(s))";
	displayTotalMarkedCount(totalNumber); 
}

function displayTotalMarkedCount(totalMarkedCount){
   
    if(isValidObject(document.getElementsBySelector("span.noOfMarkedItems")[0])) {
    	 var spanObj = document.getElementsBySelector("span.noOfMarkedItems")[0];
    } else {
    	 var spanObj = document.getElementsBySelector("span.marklistCollectionSize")[0];
    }
	var parsedText = document.createTextNode(totalMarkedCount);
	spanObj.innerHTML = "";
	spanObj.appendChild(parsedText);
	spanObj.innerHTML = "(" + spanObj.innerHTML + ")";	
}
function removeItemFromMarkList(){
	//('markList${j}_${item}_${bucketId}', 'markRow${j}_${item}_${bucketId}', '${item}_${bucketId}')
	//checkBoxID, rowId, tabListId

	var elementId = this.id;


    var tempId = elementId.substring(elementId.indexOf("-")+1);
	var markListId = "markList"+tempId;
	var tabListId = elementId.substring(elementId.indexOf("_")+1);
	var markRowId = "markRow"+tempId;
	var hiddenObj = getElementById(markListId);
	var markedString = prepareMarkedString(hiddenObj.value,"0");
    var markedURL = getMarkListURLForMarkedInfo(markedString);
    postRequest(markedURL);
    reduceCountByOne('marklistCollectionSize');
	reduceCountByOne('totalNoOfItems');		
	//To disable the marked item image and link, if the marked items are empty.
    var spanObj = getElementById('totalNoOfItems');
    var totalNumber = spanObj.innerHTML.replace(/<[^>]+>/g,'');

    if(isNaN(totalNumber)) {
        totalNumber = 0;
    }
   
    //enableMySavedItem(totalNumber);
    closeRow(markRowId);
    adjustFollowingLabels(markRowId);
}

////////////////////////////////////////////////////////////////////////////////
//
// This function adjusts the marklists by subtracting the sequence number by
// 1 from the given row to the end.
//
// Typically executed from a <div> element
// (<div id="markRow1_T003_0" class="resultsRow">).  Any children with tag
// name <STRONG> are assumed to be sequence numbers and subtracted by 1.
// Repeat for all remaining rows till the end.
//
// <div id="markRow1_T003_0" class="resultsRow">
//  <div class="citationBlock">
//      <div class="citation IAC Gale">
//          <strong>1.</strong>
//
////////////////////////////////////////////////////////////////////////////////
function adjustFollowingLabels(rowId) {
	var nextRowId = getNextRow(rowId);
  	var nextRow = getElementById(nextRowId);
	while (nextRow != null)  {
		linkArray = nextRow.getElementsByTagName("STRONG");
		for (i=0; i < linkArray.length; ++i) {
            var newSequenceNumber = parseInt(linkArray[i].innerHTML)-1;
       	    linkArray[i].innerHTML = newSequenceNumber + ".";

    	}
        nextRowId = getNextRow(nextRowId);
    	nextRow = getElementById(nextRowId);
	}
}

function getNextRow(rowId) {
	var rowParams = rowId.split("_");
	// assume 3 parameters
	var nextRowNum = parseInt(rowParams[0].substring(7))+1 ;
	var nextBucketRowId = "markRow" + nextRowNum + "_EBOOK_" +  rowParams[2];
	if(document.getElementById(nextBucketRowId) != null ) {
		var nextRowId = nextBucketRowId;
	} else { 
		var nextRowId = "markRow" + nextRowNum + "_" + rowParams[1] + "_" + rowParams[2];
	}	
	return nextRowId;
}

function checkOrUncheckMarkAll(isChecked){
	var markAll_1 = getElementById("iteratorBar-selectAll_1");
	if(markAll_1 != null){
	     markAll_1.checked = isChecked;
    	 /* no longer 2 checkboxes on page, just one; ECE200025805 - jmarx
    	 getElementById("iteratorBar-selectAll_2").checked = isChecked;
    	 */
    }
}

function attachToolsForMarkList(id, func){
	var obj = getElementById(id);//parent Id
	if(obj != null){
		var linkArray = obj.getElementsByTagName("a"); //child
		if(linkArray.length > 0){
			linkArray[0].onclick = func;
		}
	}
}
function identifyIdOfRemoveItem(){
    var elements = document.links;
	for(var i = 0; i < elements.length; i++) {
      if(elements[i].id.match("remove-")){
	   	elements[i].onclick=removeItemFromMarkList;
      }
    }
}
function addDownloadEvenForEachTab(){
    var downloadTabs =document.links;
    for(var i = 0; i < downloadTabs.length; i++) {
        if(downloadTabs[i].id.match("marklist_download") != null) {
            downloadTabs[i].onclick=downloadDocument;
        }
    }
}

function attachEventsForCheckBox(){
	var chkBox_1 = getElementById("iteratorBar-markDocument_1");
    if(chkBox_1 != null){
    	chkBox_1.onclick = markPageCheckBox;
    	/* no longer 2 checkboxes on page, just one; ECE200025805 - jmarx
    	var chkBox_2 = getElementById("iteratorBar-markDocument_2");
    	chkBox_2.onclick = markPageCheckBox;
    	*/
    }
}
function attachMarklistPageEvents(){
	attachToolsForMarkList("docTools-email", checkMarkedRecords);
	attachToolsForMarkList("docTools-print", printMarkedRecords);
    attachToolsForMarkList("globalTools-infomark", printMarkedRecords);
    attachToolsForMarkList("docTools-citation", checkMarkedRecords);
	attachPopupForSelector("li.howToCiteLink", openGaleChildWindow);
	attachPopupForSelector("ul.libraryLinks", openGaleChildWindow);
	var pdfLink = document.getElementsBySelector("li.pdfLink")[0];
	if(isValidObject(pdfLink)){
	attachPopupForSelector("li.pdfLink", retrievePDFFromResultList);
	}
    attachPopup("marklist-howToCite" , checkMarkedRecords);
    attachEventsForCheckBox();
    addDownloadEvenForEachTab();
    addToggleEvent();
	identifyIdOfRemoveItem();
}

addWindowLoadEvent(attachMarklistPageEvents);