/***************************************************************************** * PAGE DESCRIPTION ****************************************************************************** * * NAME: scripts.js * LANGUAGE: JavaScript * DATE: 2.12.2002 * AUTHOR: Kirsi Koponen, Jyväskylän yliopisto * DESCRIPTION: Useful javascript functions * ****************************************************************************** * COPYRIGHT (C) KORPPI-PROJEKTIRYHMÄ * Limited rights granted. Please refer to license ****************************************************************************** * UPDATES ****************************************************************************** * * 2.12.2002 KK * First version with functions * hideElement(id) * submitForm(form,id) * toggleElement(id) * * Usage: <input type="submit" id="add" name="addSubmit" value="Add these" /> * submitForm(this.form, "add"); * * 4.12.2002 / pjk * Added function moveFocus(id) which moves focus to element. * * 7.2.2003 / mn * Moved check_all from course/teacher/modifyGroup.jsp *****************************************************************************/ /** * Hides wanted element. */ function hideElement(id) { if (document.getElementById) { obj=document.getElementById(id); if (obj==null) return; obj.style.visibility="hidden"; obj.disabled=true; } } /** * Function to submit form where one additional parameter is needed to send with form. */ function submitForm(form,obj) { if (obj==null) { form.submit(); return true; } form.action=form.action+"&"+obj.name+"="+obj.value; form.submit(); return true; } function submitButton(id) { var obj = getObject(id); if ( obj ) obj.click(); } /** * Returns object with id or null if not found */ function getObject(id) { if (document.getElementById) { obj=document.getElementById(id); return obj; } return null; } /** * Toggles element's disabled property. */ function toggleElement(id,onOff) { if (document.getElementById) { obj=document.getElementById(id); if (obj==null) return; obj.disabled=onOff; } } /** * Moves focus to element. */ function moveFocus(id) { if (document.getElementById) { obj=document.getElementById(id); if (obj==null) { //alert("moveFocus(): object is null"); return; } obj.focus(); } } /** * Returns keycode either from e (Mozilla) or form window.event (IE) */ function getKeyCode(e) { if (!e) var e = window.event; if (e.keyCode) return e.keyCode; if (e.which) return e.which; return 0; } /** * set button text */ function setButton(id,value) { var obj = getObject(id); if ( obj ) obj.value = value; } /** * set button name */ function setButtonName(id,value) { var obj = getObject(id); if ( obj ) obj.name = value; } /** * Selects (or un-selects) all checkboxes. Moved from course/teacher/modifyGroup.jsp */ function checkAll(f,elementName) { var numChecked = 0, numNotChecked = 0; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "checkbox" && f.elements[e].name.substring(0,elementName.length) == elementName ) if ( f.elements[e].checked ) numChecked++; else numNotChecked++; var newState = null; // If all checkboxes are checked/unchecked, reverse the check mark. // Else all are unchecked if there are unchecked more than checked. // Else all are checked. if ( numNotChecked == numChecked+numNotChecked ) newState = true; else if ( numChecked == numChecked+numNotChecked ) newState = false; else if ( numChecked < numNotChecked ) newState = false; else newState = true; if ( newState != null ) { for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "checkbox" && f.elements[e].name.substring(0,elementName.length) == elementName ) f.elements[e].checked = newState; } } /** * Selects (or un-selects) all checkboxes. Moved from course/teacher/modifyGroup.jsp */ function checkAllMatch(f,elementName) { var numChecked = 0, numNotChecked = 0; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "checkbox" && f.elements[e].name == elementName ) if ( f.elements[e].checked ) numChecked++; else numNotChecked++; var newState = null; // If all checkboxes are checked/unchecked, reverse the check mark. // Else all are unchecked if there are unchecked more than checked. // Else all are checked. if ( numNotChecked == numChecked+numNotChecked ) newState = true; else if ( numChecked == numChecked+numNotChecked ) newState = false; else if ( numChecked < numNotChecked ) newState = false; else newState = true; if ( newState != null ) { for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "checkbox" && f.elements[e].name == elementName ) f.elements[e].checked = newState; } } /** * Fills an array where blank or not blank. Moved from course/teacher/modifyGroup.jsp */ function fillBlankWeeks(f, fillArray, elementStart, elementEnd) { if ( elementStart < elementEnd ) addition = +1; else if ( elementStart > elementEnd ) addition = -1; else return; var filledWeek = -1; var filledYear = -1; for (w=elementStart; w!=elementEnd+addition; w += addition) { if ( fillArray[1][w] != "" ) { filledWeek = parseInt(fillArray[1][w]); var slashPos = fillArray[1][w].indexOf("/"); if ( slashPos > 0 ) { filledYear = parseInt(fillArray[1][w].substring(slashPos+1)); } } if ( fillArray[1][w] == "" && filledWeek > 0 ) { oldFilledWeek = filledWeek; filledWeek += addition; if ( filledWeek > 52 ) { // If forwards to next year. filledWeek = 1; filledYear++; // -= addition; } else if ( filledWeek <= 0 ) { // If backwards to previous year. filledWeek = 52; filledYear--; // += addition; } tmp = filledWeek; if ( filledYear > 0 ) tmp += "/"+filledYear; fillArray[1][w] = tmp; f.elements[fillArray[0][w]].value = tmp; } } return fillArray; } /** * Fills blank weeks. Moved from course/teacher/modifyGroup.jsp */ function fillWeeks(f,elementName) { var fillArray = new Array(2); fillArray[0] = new Array(); // element number fillArray[1] = new Array(); // element value str = ""; var elements = 0; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "text" && f.elements[e].name.substring(0,elementName.length) == elementName ) { fillArray[0][elements] = e; if ( f.elements[e].value != "" ) { s = f.elements[e].value; s = checkWeek(s); f.elements[e].value = s; fillArray[1][elements] = f.elements[e].value; } else fillArray[1][elements] = ""; elements++; } // First forwards. if ( elements > 0 ) { fillArray = fillBlankWeeks(f, fillArray, 0, elements-1); } // Then backwards. var elements = 0; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "text" && f.elements[e].name.substring(0,elementName.length) == elementName ) { fillArray[0][elements] = e; if ( f.elements[e].value != "" ) fillArray[1][elements] = f.elements[e].value; else fillArray[1][elements] = ""; elements++; } if ( elements > 0 ) { fillArray = fillBlankWeeks(f, fillArray, elements-1, 0); } } /** * Function checks if s is fromat dd.mm.yy or dd.mm and in that case returns * a week representing that, otherwise return just s * vesal 23.1.2005 */ function checkWeek(s) { d = s.split("."); if ( d.length < 2 ) return s; // not format dd.mm dd = d[0]; mm = d[1]; thisyear = (new Date()).getYear() + 1900; if ( d.length < 3 ) yy = thisyear; else yy = 1*d[2]; if ( yy < 1900 ) yy += 2000; sy = ""; if ( yy != thisyear ) sy = "/"+(yy-2000); return YMDarrToYWDarr([yy,mm,dd])+sy; } /** * Function returns week number from string like 12.2.2004 * vesal 23.1.2005 */ function YMDarrToYWDarr(S) { with (new Date(S[0], S[1] - 1, S[2])) { var DoW = getDay(); setDate(getDate() - (DoW + 6) % 7 + 3); var ms = valueOf(); setMonth(0); setDate(4); var WN = Math.round((ms - valueOf()) / (604800000)) + 1; if (DoW == 0) { DoW = 7; } return WN; } } /** * Function is used on course/teacher/extraInfo.jsp page to renumber ordernums * of fields. * Pauli Kujala 14.4.2003 */ function renumberOrdernums(f, elementName) { var i=1; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "text" && f.elements[e].name.substring(0,elementName.length) == elementName ) { f.elements[e].value = i; i++; } } function getProperties(obj, obj_name) { var i; var result = "" for (i in obj) result += obj_name + "." + i + " = " + obj[i] + "\n" alert(result); } /** * Function is used on course/teacher/timeGrid.jsp page to replace all occurrences of text. * Minna Hillebrand 13.5.2003 */ function replaceTextInFields(d, elementName, replaceWhat, replaceWith, dontReplaceNames) { if (replaceWhat == "" && replaceWith == "") { alert('Määrittele muutettavat arvot!'); return; } for (i = 0; i < d.forms.length; i++) { for (e=0; e<d.forms[i].elements.length; e++) { if ( (d.forms[i].elements[e].type == "text" || d.forms[i].elements[e].type == "textarea" ) && d.forms[i].elements[e].name.substring(0,elementName.length) == elementName) { var match = false; for (j=0; j < dontReplaceNames.length; j++) { match = match || dontReplaceNames[j] == d.forms[i].elements[e].name.substring(0, dontReplaceNames[j].length); } if (!match) d.forms[i].elements[e].value = String(d.forms[i].elements[e].value).replace(new RegExp(replaceWhat, 'g'), replaceWith); } //if } //for e } //for i } /* function replaceTextInFields(f, elementName, replaceWhat, replaceWith, dontReplaceNames) { if (replaceWhat == "" || replaceWith == "") { alert('Määrittele muutettavat arvot!'); return; } for (e=0; e<f.elements.length; e++) { if ( f.elements[e].type == "text" && f.elements[e].name.substring(0,elementName.length) == elementName) { var match = false; for (j=0; j < dontReplaceNames.length; j++) { match = match || dontReplaceNames[j] == f.elements[e].name.substring(0, dontReplaceNames[j].length); } if (!match) f.elements[e].value = String(f.elements[e].value).replace(new RegExp(replaceWhat, 'g'), replaceWith); } } } */ function doWhenExiting(d) { //alert('About to clear the screen...'); //d.open(); d.write('<p>Please wait...</p>'); } var topwindow; function help(osoite,target) { // window1 = window.open (osoite,target,"") // topwindow = Window; window1 = window.open(osoite, target , 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1,width=800,height=600,left = 100,top = 100'); // window1 = window.open(osoite, target , 'toolbar=1,menubar=0,scrollbars=1,location=0,statusbar=1,resizable=1,width=800,height=600,left = 100,top = 100'); if ( window1 ) window1.focus(); else document.location.href = osoite; } /** * Following variables and functions are for checking all radios in * show "partial free spaces". */ var prevClicked = null; /** * Selects all radioboxes witha a value val * Do not select those where id=r (request) */ function selectAll(f,elementName,val) { for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "radio" && f.elements[e].name.substring(0,elementName.length) == elementName && f.elements[e].value == val && f.elements[e].id != 'r') f.elements[e].checked = true; if ( prevClicked != null ) prevClicked.value = '->'; } /** * Selects all radioboxes with a value val if val still free. * If clicked other time, selects anyway all in row. * Do not select those where id=r (request) */ function selectAllTest(but,f,elementName,val) { if ( but != null ) { if ( but.value == '=>' ) { prevClicked = but; selectAll(f,elementName,val); return; } if ( but.value == '->' ) { but.value = '=>'; if ( prevClicked != null ) prevClicked.value = '->'; prevClicked = but; } } var doNotSelect = new Array(); var n = 0; var valChecked = 0; for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "radio" && f.elements[e].name.substring(0,elementName.length) == elementName ) if ( f.elements[e].value == '0') if ( !f.elements[e].checked ) { doNotSelect.push(f.elements[e].name); n++ } else if ( f.elements[e].value == val && f.elements[e].checked ) valChecked++; var newState = true; if ( val == '0' || valChecked > 0 ) n = 0; if ( newState != null ) { for (e=0; e<f.elements.length; e++) if ( f.elements[e].type == "radio" && f.elements[e].name.substring(0,elementName.length) == elementName && f.elements[e].value == val && f.elements[e].id != 'r') { var doNot = false; for (i=0; i<n; i++) if ( f.elements[e].name == doNotSelect[i] ) { doNot = true; break; } if ( !doNot ) f.elements[e].checked = newState; } } } function writeSelAllButton(name,val) { document.write('<input type="button" name="selectall" id="selectall" value="=>" onClick="selectAll(this.form,\''+name+'\','+val+')" class="notPrinted" title="Valitse kaikki" Height="10px"/>'); } function writeSelAllTestButton(name,val) { document.write('<input type="button" name="selectall" id="selectall" value="->" onClick="selectAllTest(this,this.form,\''+name+'\','+val+')" class="notPrinted" title="Valitse kaikki" Height="10px"/>'); }