/* General Utility functions used within application */

/* Function to fetch the contents from the given URL and display it within the target element
 * Variable target_el (Target Element) should be defined in the page itself 
 * where this function will be used.
*/ 
function fetchUsingAjax(url1)
{
	dojo.io.bind({
		url: url1,
		load: function(type, data, evt){
		if(type == "load")
		{
			var tr_el = document.getElementById(target_el);
			tr_el.innerHTML = data;
			//alert(data);
		}
		else if(type == "error")
		{
			alert("ERROR: " +data); 
		}
		else
		{
			alert("WARNING: I don't understand this event: " +data); 
					// other types of events might get passed, handle them here
		}

		},
		mimetype: "text/plain", // get plain text, don't eval()
		transport: "XMLHTTPTransport"
	});
}

function selfStudyLoginUsingAjax(url1, formId)
{

     dojo.io.bind({
      url: url1,
      formNode:  dojo.byId(formId),
      method: "POST",
      load: function(type, data, evt, initMarkup){
      if(type == "load")
      {
			var index = data.indexOf('errorCode');
			if(index!=-1)
			{	
				//hide message
                hideLayer("divLoginAreaMsg");
                showLayer("divLoginArea");
				//display error message
				if(data.indexOf('errorCode=invalidUserNameORPassword')!=-1)
				{
					var elem = document.getElementById("divAboveLogin");
					elem.className="darkRedErrorMessage";
					elem.innerHTML = "Invalid username or password.<br/><span style='font-size:7pt;'>(sample username = joe@school.edu)</span>";
				}
				if(data.indexOf('errorCode=AccessDeniedToBook')!=-1)
				{
					var elem = document.getElementById("divAboveLogin");
					elem.className="darkRedErrorMessage";
					elem.innerHTML = "You do not have access to the given book. Please choose a book you have access to.";
				}
			}
			else
			{
				//no errors
				var homeLink = document.getElementById("Home");
				var childHref = homeLink.childNodes[0];
				var origHref = childHref.href;
				var newHref = origHref.replace('infoCenter','studentCenter');
				childHref.href = newHref;

				document.location.href= "/connect/studentCenter.do?isSelfStudy=true&"+data;
				//fetchUsingAjax(alaURL);
			}      
	  }
      else if(type == "error")
      {
        alert("ERROR: " +data);
      }
      else
      {
        alert("WARNING: I don't understand this event: " +data);
        //other types of events might get passed, handle them here
      }

      },
      mimetype: "text/plain", // get plain text, don't eval()
      transport: "XMLHTTPTransport"
     });
     //Hide the div
     showLayer("divLoginAreaMsg");
     hideLayer("divLoginArea");
     //Display the login message
     var elem = document.getElementById("divLoginAreaMsg");
     //var elem = document.getElementById("divLoginArea");
     elem.className="darkRedErrorMessage";
     elem.innerHTML = "<b>We are processing your request. Please wait.....</b>";


}

function saveQuizResultUsingAjax(url1,formId)
{

     dojo.io.bind({
      url: url1,
      formNode: dojo.byId(formId),
      method: "POST",
      load: function(type, data, evt){
      if(type == "load")
      {
        //alert(data);
      }
      else if(type == "error")
      {
        alert("ERROR: " +data);
      }
      else
      {
        alert("WARNING: I don't understand this event: " +data);
         // other types of events might get passed, handle them here
      }

      },
      mimetype: "text/plain", // get plain text, don't eval()
      transport: "XMLHTTPTransport"
     });

}


function updateStudentExternalIDUsingAjax(url1, formId)
{
     var msgDiv = document.getElementById('messageDisplay');
     msgDiv.className="darkRedErrorMessage";
     dojo.io.bind({
      url: url1,
      formNode: dojo.byId(formId),
      method: "POST",
      load: function(type, data, evt){
      if(type == "load")
      {
        //alert(data);
        hideLayer('enterSystemID');
        msgDiv.innerHTML = data;
        showLayer("messageDisplay");
        showLayer("messageDummyDiv");
      }
      else if(type == "error")
      {
        //alert("ERROR: " +data);
        msgDiv.innerHTML = "ERROR:"+ data;
        showLayer("messageDisplay");
        showLayer("messageDummyDiv");
      }
      else
      {
        //alert("WARNING: I don't understand this event: " +data);
         // other types of events might get passed, handle them here
        msgDiv.innerHTML = "Unexpected Error:" + data;
        showLayer("messageDisplay");
        showLayer("messageDummyDiv");
      }

      },
      mimetype: "text/plain", // get plain text, don't eval()
      transport: "XMLHTTPTransport"
     });

}



function checkedBox(myself, mySelectAllBox){		
	if(myself.checked == false){
		mySelectAllBox.checked = false;
	}
	var counter = 0;
	var flag = false;
	if(myself.checked == true){
		if(myself.length == 1){
			mySelectAllBox.checked = true;
		}else{
			for(counter = 0; counter < myself.length; counter++){
				flag = myself[counter].checked;
				if(flag == false){
					break;
				}
			}
			if(flag == true){
				mySelectAllBox.checked = true;
			}
		}
	}
	return;
}

function set_select_All(myself, myCheckBoxes){
	var flag = false;
	var single_element_flag=true;
	if(myself.checked){
		flag = true;
	}
	var counter=0;	
	for (counter = 0; counter < myCheckBoxes.length; counter++){
		if(myCheckBoxes[counter].disabled==false){
			myCheckBoxes[counter].checked = flag;
			single_element_flag=false;
		}
	}
	if(single_element_flag==true && myCheckBoxes.disabled==false){
		myCheckBoxes.checked=flag;
	}		
}


function gotoPageNo(pageNum,sort,totalPage){
       if(pageNum>=1 && pageNum<=totalPage) {
	       document.gotoPageForm.page.value=pageNum;
	       document.gotoPageForm.sort.value=sort;
	       setTimeout('document.forms.gotoPageForm.submit();',100);
       }
}


function atLeastOneCheckboxIsChecked(thisform){
    var counter=0;
    var atleastOneChecked = false;
     for (counter = 0; counter < thisform.elements.length; counter++)
     {
       if(thisform.elements[counter].type=="checkbox")
       {
         if(thisform.elements[counter].checked)
        {
            atleastOneChecked = true;
            break;
        }
       }
     }
     return atleastOneChecked;
}

function atLeastOneCheckboxElementIsChecked(elements){
    var counter=0;
    var atleastOneChecked = false;
    if(elements.length!=null){
	     for (counter = 0; counter < elements.length; counter++)
	     {
	       if(elements[counter].type=="checkbox")
	       {
		 if(elements[counter].checked)
		{
		    atleastOneChecked = true;
		    break;
		}
	       }
	     }
    }else{
    	 if(elements.type=="checkbox" && elements.checked) atleastOneChecked = true;
    }
      return atleastOneChecked;
}

function atMostOneCheckboxElementIsChecked(elements){
    var counter=0;
    var noOfCheckedElements=0;
    if(elements.length!=null){
	     for (counter = 0; counter < elements.length; counter++)
	     {
	       if(elements[counter].type=="checkbox")
	       {
		 if(elements[counter].checked)
		{
		    noOfCheckedElements++;
		    if(noOfCheckedElements>1) return false;
		}
	       }
	     }
    }
    
    return true;
}

function returnCheckedElementIndex(elements){
     var counter = 0;
     var index=-1;
    if(elements.length!=null){
	     for (counter = 0; counter < elements.length; counter++)
	     {
	       if(elements[counter].type=="checkbox")
	       {
		 if(elements[counter].checked)
		{
			index = counter;
			return index;
		}
	       }
	     }
    }else {
    	 if(elements.type=="checkbox" && elements.checked) return -2;//only one element present
    }	    
   
   return index;
}


/*function deleteAssignment(thisform){
    if(!atLeastOneCheckboxIsChecked(thisform))
    {
        alert("Please select at least one assignment to delete.");
        return false;
    }
    thisform.action="deleteAssignments.do";
    thisform.submit();
}*/

function confirmDelete() {
		return confirm("Are you sure you want to delete selected assignment(s)? Any existing students scores will be lost if you continue.");
}

function submitDeleteAssignment(thisform){
    if(!atLeastOneCheckboxIsChecked(thisform))
    {
        alert("Please select at least one assignment to delete.");
        return false;
    }
    if (confirmDelete())
    {
        thisform.submit();
    }
}

/* prabhakar added this */

function editAssignment(elements, editFlags){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select one assignment to edit.");
        return false;
    }
    if(!atMostOneCheckboxElementIsChecked(elements))
    {
        alert("Please select only one assignment to edit.");
        return false;
    }
    
    var selectedElementIndex=returnCheckedElementIndex(elements);
    var editElement = false;
    var selectedElementValue = '';
    if (selectedElementIndex==-2) {
    	editElement = editFlags.value ;
    	selectedElementValue =elements.value;
    }else{
        editElement = editFlags[selectedElementIndex].value;
    	selectedElementValue = elements[selectedElementIndex].value;
    }
    

    if(editElement=='true'){
	var postUrl='/connect/assignments.do?action=edit&assignmentID='.concat(selectedElementValue);
	
	if(getElementName(editFlags).charAt(0) != 'u'){//if upcoming : do not need confirmation
		confirmEdit(postUrl);
	}else{
		window.location.href=postUrl;//redirect without confirmation
	}
    }else{
        alert("You are not allowed to edit this assignment due to insufficient privileges.");
        return false;
    
    }
}

function getElementName(elements){
    if(elements!=null){	
    	if(elements.length!=null)
    	 	return elements[0].name;
   	else
   	 	return elements.name;
   }
}

function deleteAssignment(thisform, elements, deleteFlags,isSyllabusFlags){
    /* isSyllabusFlags array will have values either 'true' or the asignment id */
    
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select at least one assignment to delete.");
        return false;
    }
    
    var otherElement=thisform.upAssignment;
    var thisElement=getElementName(elements);
    thisform.action="deleteAssignments.do?sectionCode=current";

    if(thisElement.indexOf('upAssignment')>-1){
	otherElement = thisform.currAssignment;
    	thisform.action="deleteAssignments.do?sectionCode=upcoming";
    }
    
    var queryStringForSyllabus="";     
    
    if(thisElement.indexOf('chbx_assignment')>-1) {
    	if(elements.length!=null) {
		for(ii = 0; ii < elements.length; ii++) {
			if(elements[ii].checked) {
				queryStringForSyllabus+= "&allAsgID="+elements[ii].value;
			}
		}   
    	} else {
    	    // only one element	
    		if(elements.checked) {
    			queryStringForSyllabus+= "&allAsgID="+elements.value;    	
    		}
    	}    	
     	thisform.action="deleteAssignments.do?sectionCode=all" + queryStringForSyllabus;
    }

    var syllabusAssignmentSelected='false';
    var queryString="?action=delete";
    
    if(elements.length!=null){
	for(counter = 0; counter < elements.length; counter++){
 	  if(elements[counter].checked){
 	  	if(deleteFlags[counter].value=='false'){
			alert("Please deselect assignment no."+ (counter+1)+".\nYou are not allowed to delete this assignment due to insufficient privileges.");
			return false;
	  	}
 	  	if(isSyllabusFlags[counter].value=='true'){
			syllabusAssignmentSelected='true';/* got one syllabus assignment */
	  	}
 	  	if(isSyllabusFlags[counter].value!='true'){
			/* append in the queryString */
			queryString+="&assignmentID="+isSyllabusFlags[counter].value;	  	
	  	}
	  }
	}
    }else {
    	//only one element
 	  if(elements.checked){
 	  	if(deleteFlags.value=='false'){
			alert("You are not allowed to delete the checked assignment due to insufficient privileges.");
			return false;
	  	}
	   	if(isSyllabusFlags.value=='true'){
			syllabusAssignmentSelected='true';/* is a syllabus assignment */
	  	}
	   	if(isSyllabusFlags.value!='true'){
			/* append in the queryString */
			queryString+="&assignmentID="+isSyllabusFlags.value;
	  	}
	  }
    }
    
    if(syllabusAssignmentSelected=='false'){
    	/* directly delete all the selected ones, no redirection required */
    	thisform.action="deleteAssignmentsSubmit.do"+ queryString;
	thisform.submit();
    }else{
    	/* just show a pop-up message alerting the user that 
    	 * the selected assignments have atleast one syllabus assignment */ 
	 if(confirm("Are you sure you want to delete selected assignment(s). Some of them are Syllabus Assignments?")){
		thisform.submit();
	 }
    }
}

function gradeAssignment(elements){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select at least one assignment to view grades for.");
        return false;
    }
    if(!atMostOneCheckboxElementIsChecked(elements))
    {
        alert("Please select only one assignment to view grades for.");
        return false;
    }
    
    var selectedElementIndex=returnCheckedElementIndex(elements);
    var selectedElementValue = '';
    if (selectedElementIndex==-2) {
    	selectedElementValue =elements.value;
    }else{
    	selectedElementValue = elements[selectedElementIndex].value;
    }
    
    var postUrl='gradebook_assignment.do?assignmentID='.concat(selectedElementValue);
    window.location.href=postUrl;//redirect without confirmation

}

function editAnnouncement(elements, editFlags){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select one announcement to edit.");
        return false;
    }
    if(!atMostOneCheckboxElementIsChecked(elements))
    {
        alert("Please select only one announcement to edit.");
        return false;
    }
    
    var selectedElementIndex=returnCheckedElementIndex(elements);
    var editElement = false;
    var selectedElementValue = '';
    if (selectedElementIndex==-2) {
    	editElement = editFlags.value ;
    	selectedElementValue =elements.value;
    }else{
        editElement = editFlags[selectedElementIndex].value;
    	selectedElementValue = elements[selectedElementIndex].value;
    }
    if(editElement=='true'){
	var postUrl='/connect/announcements.do?action=edit&announcementID='.concat(selectedElementValue);
	if(getElementName(elements)=='expiredAnnouncement'){
		postUrl='/connect/announcements.do?action=edit&startDateReadOnly=true&announcementID='.concat(selectedElementValue);	
	}
	window.location.href=postUrl;//redirect without confirmation
    }else{
        alert("You are not allowed to edit this announcement due to insufficient privileges.");
        return false;
    
    }
}

function deleteAnnouncement(thisform, elements, deleteFlags,syllabusAnnouncement){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select at least one announcement to delete.");
        return false;
    }

    
    var otherElement=thisform.upcomingAnnouncement;
    var thisElement=getElementName(elements);
    thisform.action="deleteAnnouncements.do?sectionCode=current";

    if(thisElement.indexOf('upcomingAnnouncement')>-1){
	otherElement = thisform.currentAnnouncement;
    	thisform.action="deleteAnnouncements.do?sectionCode=upcoming";
    }else if(thisElement.indexOf('expiredAnnouncement')>-1){
    	thisform.action="deleteAnnouncements.do?sectionCode=expired";
    }
    
    if(elements.length!=null){
	for(counter = 0; counter < elements.length; counter++){
 	  if(elements[counter].checked && (deleteFlags[counter].value=='false'))
	  {
		alert("Please deselect announcement no."+ (counter+1)+".\nYou are not allowed to delete this announcement due to insufficient privileges.");
		return false;
	  }
	}
    }else {
    	//only one element
 	  if(elements.checked && (deleteFlags.value=='false'))
	  {
		alert("You are not allowed to delete the checked announcement due to insufficient privileges.");
		return false;
	  }
    	
    }
	var confirmDelete='';
	var counter=0;
    if(syllabusAnnouncement.length!=null){    
    	
    	var announcementList='';
	
	for(var announcementCounter=0;announcementCounter<syllabusAnnouncement.length;announcementCounter++){
		if(elements[announcementCounter].checked && syllabusAnnouncement[announcementCounter].value!='false'){
					counter++;
					announcementList+=syllabusAnnouncement[announcementCounter].value+'\n';
		}
	}
	if(counter>0){
		if(counter>1){
			confirmDelete+='Following announcements will be deleted from the master syllabus and all of its child sections. Are you sure you want to delete these announcements?\n'
		}else{
			confirmDelete+='Following announcement will be deleted from the master syllabus and all of its child sections. Are you sure you want to delete this announcement?\n';
		}
		confirmDelete+=announcementList;
	}
    }else {
    		
    		if(elements.checked && syllabusAnnouncement.value!='false'){
			confirmDelete='Following announcement will be deleted from the master syllabus and all of its child sections. Are you sure you want to delete this announcement?\n';
			confirmDelete+=syllabusAnnouncement.value;
			counter++;
		}
    }
    if(counter==0 || confirm(confirmDelete)){
    	thisform.submit();
    }

}

function gradeStudent(elements){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select at least one student to grade.");
        return false;
    }
    if(!atMostOneCheckboxElementIsChecked(elements))
    {
        alert("Please select only one student to grade.");
        return false;
    }
    
    var selectedElementIndex=returnCheckedElementIndex(elements);
    var selectedElementValue = '';
    if (selectedElementIndex==-2) {
    	selectedElementValue =elements.value;
    }else{
    	selectedElementValue = elements[selectedElementIndex].value;
    }
    
    var postUrl='gradebook_student.do?studentID='.concat(selectedElementValue.substring(selectedElementValue.indexOf("_")+1));
    window.location.href=postUrl;//redirect without confirmation

}

function editRoster(elements){
    if(!atLeastOneCheckboxElementIsChecked(elements))
    {
        alert("Please select at least one student to edit his/her information.");
        return false;
    }
    if(!atMostOneCheckboxElementIsChecked(elements))
    {
        alert("Please select only one student at a time to edit.");
        return false;
    }
    
    var selectedElementIndex=returnCheckedElementIndex(elements);
    var selectedElementValue = '';
    if (selectedElementIndex==-2) {
    	selectedElementValue =elements.value;
    }else{
    	selectedElementValue = elements[selectedElementIndex].value;
    }
    
    var postUrl='roster.do?action=edit&id='.concat(selectedElementValue);
    window.location.href=postUrl;//redirect without confirmation

}


function openTimezoneWindow() {
	var newWin = window.open('/connect/timezone.do','Classware','width=400,height=350,resizable=yes,scrollbars=yes,status=no');	
	newWin.focus();
}

/* This function is required to change this template after pageID is set */
function reloadCourseInfo(newPageID){
	if(newPageID=='adoptForm' || newPageID=='courseLibrary'){
		var el_divUserInfo=document.getElementById("divUserInfo");
		if(el_divUserInfo!=null) el_divUserInfo.style.display="none";
		var el_titleAreaBottomAlign=document.getElementById("titleAreaBottomAlign");
		if(el_titleAreaBottomAlign!=null) el_titleAreaBottomAlign.style.display="none";
	}	
	
	if(newPageID=='courseLibrary' && typeof(cwentry) != "undefined"){
		var el_btcc=document.getElementById("td_forPageTitle");
		if(el_btcc!=null) el_btcc.style.display="block";
		
		el_btcc=document.getElementById("divBackToCreateCourse");
		if(el_btcc!=null) el_btcc.style.display="inline";
	}

	/** Manish : commented for bug fix 3362 *
	if(newPageID=='adoptForm' || newPageID=='courseLibrary'){
		var el_adoptCourse=document.getElementById("adoptACourse");
		if(el_adoptCourse!=null) el_adoptCourse.style.display="none";
	}
	if(newPageID=='courseLibrary'){
		var el_defaultReadOnlyText=document.getElementById("defaultReadOnlyText");
		if(el_defaultReadOnlyText!=null) el_defaultReadOnlyText.innerHTML="You are in a library course. You may switch to a different<br/>library course by selecting any course below or exit this course";
	}
	*/
}

function infoTabPopup(url) {
	var newWin = window.open(url,'ShowMe','width=645,height=645,top=15,left=80,resizable=yes,scrollbars=yes,status=no');	
	newWin.focus();
}

function openStudyGuide(isbn,alaid){
	var url="/connect/ala.do?isbn="+isbn+"&alaid=structure_"+alaid;
	studyguideWindow = window.open(url+"&viewStudyGuide=true","_studyguide","menubar=no,resizable=yes,scrollbars=yes",true);
	studyguideWindow.focus();
}

function openALA(alaid,assignmentId){
	var url="/connect/ala.do?alaid=ala_"+alaid+"&assignmentId="+assignmentId;
	window.location.href = url;
}

function openUploadWindow(alaid,activityId){
	var url="/connect/uploadProject.do";
	window.name="cw_parent_window";
	uploadWindow = window.open(url+"?openUploadWindow=true&alaid="+alaid+"&activityId="+activityId,"_uploadPopup","height=260,width=400,menubar=no,resizable=no,scrollbars=no",true);
	uploadWindow.focus();
}

function populateResultForAutoGrader(activityID, activityScore){
	if(activityScore==null){ activityScore = '';}
	if(activityID==null){
		activityID='';
	}else if(activityID==''){
		activityID='';
	}else{
		activityID ='_' + activityID;
	}
	var el_n_correct = document.getElementById("n_correct"+activityID);
	var el_n_incorrect = document.getElementById("n_incorrect"+activityID);
	var el_n_cells = document.getElementById("n_cells"+activityID);
	var el_n_percent = document.getElementById("n_percent"+activityID);
	var el_answers = document.getElementsByName("n_answers"+activityID);
	
	var correct=0,incorrect=0,cells=0,percent=0;
	if(el_answers!=null){
		if(el_answers.length!=null){
			correct=0;
			for(i=0;i<el_answers.length;i++){
				if(el_answers[i].value=='y'){
					correct++;
				}
			}
			cells = el_answers.length;				
			incorrect = cells - correct;
			percent=(correct/cells)*100;
		}else{
			if(el_answers.value=='y') correct=1;
			else incorrect = 1;
			percent=(correct/1)*100;
			
		}
		el_n_correct.innerHTML=correct;
		el_n_incorrect.innerHTML=incorrect;
		el_n_cells.innerHTML=cells;
		if(activityScore==''){
			el_n_percent.innerHTML=percent;
		}else{
			el_n_percent.innerHTML=activityScore;
		}
	}
}

function openWindow(url){
       autograderWindow = window.open(url,"","menubar=yes,resizable=yes,scrollbars=yes",true);
       autograderWindow.focus(); 
}

function signIn(){
       var f=document.loginForm;
       if(f.username.value==""){
       	   alert("Please enter the Username.");
       	   f.username.focus();
       	   return false;
       }
       if(f.password.value==""){
       	   alert("Please enter the Password.");
       	   f.password.focus();
       	   return false;
       }
       
       f.submit();
}