var MAXIMUM_LENGTH_TITLE=250;var MAXIMUM_LENGTH_TEXT=5000;var MAXIMUM_QUESTION_TAGS=50;var MAXIMUM_QUESTION_USER_TAGS=10;var MAXIMUM_TAG_LENGTH=40;var WRITE_TAG_URL="";var WRITE_VOTE_URL="";var WRITE_WATCH_URL="";var WRITE_GRADE_URL="";var TAG_STATUS_DISABLED=0;var TAG_STATUS_SELECTING=1;var TAG_STATUS_ACTIVE=255;var THRESHOLD_DELETE=3;var THRESHOLD_CLOSE=1;var CLASS_ENDING_SELECTED="Sel";var CLASS_ENDING_SELECTING="Sav";var CLASS_ENDING_NOT_SELECTED="Not";var CLASS_ENDING_ON="Onn";var CLASS_ENDING_DISABLED="Off";var CLASS_ENDING_OFF="Off";var CLASS_ENDING_LENGTH=CLASS_ENDING_SELECTED.length;var WATCH_BUTTON_CLASS_MIDDLE_SELECTED="Sel";var WATCH_BUTTON_CLASS_MIDDLE_NOT_SELECTED="Not";var WATCH_BUTTON_CLASS_MIDDLE_LENGTH=WATCH_BUTTON_CLASS_MIDDLE_SELECTED.length;var AJAX_TIMEOUT_MS=6000;var TOOLTIP_MS_BEFORE=1000;var TOOLTIP_TIMOUT_MS=3000;var GRADING_SCALE_TOOL_TIP_ON;var GRADING_SCALE_TOOL_TIP_OFF;var savedQuestionTitle=null;var savedQuestionText=null;var savedQuestionAnonymous=null;var savedQuestionPublish=null;var savedAnswerTitle="";var savedAnswerText="";var savedAnswerAnonymous=false;var savedAnswerPublish=false;var savedQuestionTags="";var answerActionSubmit=null;var answerActionSwitch=null;var questionActionSubmit=null;var questionActionSwitch=null;var answerLeaveOK=false;var questionLeaveOK=false;var questionTagsJson=null;var taggingMode=null;var answerUserGrade=null;var answerAverageGrade=null;var answerGradeVotes=null;var answerGradeEditable=null;var questionId=null;var answerId=null;var questionVotesJson=null;var answerVotesJson=null;var questionWatchingStatus=null;var watchButtonToolTips=new Object();watchButtonToolTips[WATCH_BUTTON_CLASS_MIDDLE_NOT_SELECTED]="You don't watch this question.";watchButtonToolTips[WATCH_BUTTON_CLASS_MIDDLE_SELECTED]="You are watching this question.";var waitForFbUntil=null;var isThisIE=null;function isArray(object){if(object.constructor.toString().indexOf("Array")==-1){return false}else{return true}}function isEmpty(variable){var result=false;if((variable===undefined)||(variable===null)){result=true}return result}function elementIndexInArray(element,inputArray){var result=false;if(!isEmpty(inputArray)&&isArray(inputArray)){var i;for(i=0;i<inputArray.length;i++){if(result===false){if(inputArray[i]==element){result=i}}}}return result}function removeCarriageReturn(inputString){var result=null;if(typeof(inputString)!="undefined"&&inputString!=null){result=inputString.replace(/\r\n/g,"\n")}return result}function checkBrowserName(name){var agent=navigator.userAgent.toLowerCase();if(agent.indexOf(name.toLowerCase())>-1){return true}return false}function isIE(){if(isEmpty(isThisIE)){isThisIE=checkBrowserName("MSIE")}return isThisIE}function addEventListenerToNode(node,eventType,listener){if(typeof node.addEventListener!="undefined"){node.addEventListener(eventType,listener,false)}else{if(typeof node.attachEvent!="undefined"){node.attachEvent("on"+eventType,listener)}else{}}}function setFacebookCanvasSize(){if(typeof(FB)!="undefined"){if(typeof(FB.Canvas!="undefined")){FB.Canvas.setSize()}}}function resizeAfterWaitForFb(){if(waitForFbUntil==null){waitForFbUntil=(new Date).getTime()+2000}if(typeof(FB)=="undefined"||typeof(FB.Canvas)=="undefined"){if((new Date).getTime()<waitForFbUntil){setTimeout("resizeAfterWaitForFb()",200)}}else{setFacebookCanvasSize();setTimeout("setFacebookCanvasSize();",1000)}}function showPopUp(messageTitle,messageText){alert(messageText)}function showConfirm(messageTitle,messageText){var result=confirm(messageText);return result}function confirmDeleteQuestion(){questionLeaveOK=true;return showConfirm("Really delete question?","You are about to completely remove this question with all its answers from the comp10-database. This would prevent other users with a similar question from getting immediate help. Note that you could also use the anonymous-checkbox if you do not want to be identified as the author of this question. \n\nDo you decide to delete the question anyway?")}function confirmDeleteAnswer(){answerLeaveOK=true;return showConfirm("Really delete answer?","You are about to completely remove this answer from the comp10-database. Are you sure that this answer cannot be helpful? Perhaps using the anonymous-checkbox could be a better option? \n\nDo you insist on deleting the answer?")}function confirmWriteAnswer(){return showConfirm("Really write answer to closed question?","This question is closed already. This means that a majority of users believe that no better answer is possible.\n\nDo you want to write an answer anyway?")}function putValueIntoInputField(stringValue,fieldId){var inputField=document.getElementById(fieldId);inputField.value=stringValue}function getValueFromInputField(fieldId){var result=null;var inputField=document.getElementById(fieldId);if(!isEmpty(inputField)){result=inputField.value}return result}function checkValueFromInputField(fieldId,correctValue){var result=true;var inputField=document.getElementById(fieldId);if(!isEmpty(inputField)){var currentValue=getValueFromInputField(fieldId);if(currentValue!==correctValue){var currentValueWithoutR=removeCarriageReturn(currentValue);var correctValueWithoutR=removeCarriageReturn(correctValue);if(currentValueWithoutR!=correctValueWithoutR){result=false}}}return result}function submitAnswer(){answerLeaveOK=true;putValueIntoInputField(answerActionSubmit,"answer_action_input_field");var title="";var text="";var answerTitleTextField=document.getElementById("answer_title_text_field");var answerTextTextArea=document.getElementById("answer_text_text_area");if(!isEmpty(answerTitleTextField)){title=answerTitleTextField.value}if(!isEmpty(answerTextTextArea)){text=answerTextTextArea.value}var answerOK=checkAnswer(title,text);return answerOK}function switchAnswer(){answerLeaveOK=true;putValueIntoInputField(answerActionSwitch,"answer_action_input_field");return true}function submitQuestion(){questionLeaveOK=true;writeTagsToHiddenField();putValueIntoInputField(questionActionSubmit,"question_action_input_field");var title="";var text="";var questionTitleTextField=document.getElementById("question_title_text_field");var questionTextTextArea=document.getElementById("question_text_text_area");if(!isEmpty(questionTitleTextField)){title=questionTitleTextField.value}if(!isEmpty(questionTextTextArea)){text=questionTextTextArea.value}var questionOK=checkQuestion(title,text);var tagsOK=false;if(questionOK){tagsOK=checkTags(getTags())}return questionOK&&tagsOK}function switchQuestion(){questionLeaveOK=true;writeTagsToHiddenField();putValueIntoInputField(questionActionSwitch,"question_action_input_field");return true}function checkAnswer(title,text){if(isEmpty(title)||title==""){showPopUp("Submission of answer failed.","You cannot submit an empty answer!");return false}else{if(title.length>MAXIMUM_LENGTH_TITLE){showPopUp("Submission of answer failed.","You cannot submit an answer of more than "+MAXIMUM_LENGTH_TITLE+" characters!");return false}else{if(text.length>MAXIMUM_LENGTH_TEXT){showPopUp("Submission of answer failed.","You cannot submit answer details of more than "+MAXIMUM_LENGTH_TEXT+" characters!");return false}else{return true}}}}function checkQuestion(title,text){if(isEmpty(title)||title==""){showPopUp("Submission of question failed.","You cannot submit an empty question!");return false}else{if(title.length>MAXIMUM_LENGTH_TITLE){showPopUp("Submission of question failed.","You cannot submit a question of more than "+MAXIMUM_LENGTH_TITLE+" characters!");return false}else{if(text.length>MAXIMUM_LENGTH_TEXT){showPopUp("Submission of question failed.","You cannot submit question details of more than "+MAXIMUM_LENGTH_TEXT+" characters!");return false}else{return true}}}}function checkTags(tags){var result=true;if(isEmpty(tags)||!isArray(tags)||tags.length==0){result=showConfirm("","Providing meaningful tags helps experts to find and answer your question.\nDo you really want to submit the question without tags?")}return result}function cancelQuestion(){var questionTitleTextField=document.getElementById("question_title_text_field");var questionTextTextArea=document.getElementById("question_text_text_area");var questionAnonymousCheckBox=document.getElementById("question_anonymous_check_box");var questionPublishCheckBox=document.getElementById("question_publish_check_box");var questionTagsTextField=document.getElementById("question_tags_text_field");var questionTagsHiddenField=document.getElementById("question_tags_hidden_field");if((!isEmpty(savedQuestionTitle))&&(!isEmpty(questionTitleTextField))){questionTitleTextField.value=savedQuestionTitle}if((!isEmpty(savedQuestionText))&&(!isEmpty(questionTextTextArea))){questionTextTextArea.value=savedQuestionText}if((!isEmpty(savedQuestionAnonymous))&&(!isEmpty(questionAnonymousCheckBox))){questionAnonymousCheckBox.checked=savedQuestionAnonymous}if((!isEmpty(savedQuestionPublish))&&(!isEmpty(questionPublishCheckBox))){questionPublishCheckBox.checked=savedQuestionPublish}if(!isEmpty(questionTagsTextField)){questionTagsTextField.value=""}if((!isEmpty(savedQuestionTags))&&(!isEmpty(questionTagsHiddenField))){questionTagsHiddenField.value=savedQuestionTags;initializeTagsFromHiddenField()}return true}function cancelAnswer(){var answerTitleTextField=document.getElementById("answer_title_text_field");var answerTextTextArea=document.getElementById("answer_text_text_area");var answerAnonymousCheckBox=document.getElementById("answer_anonymous_check_box");var answerPublishCheckBox=document.getElementById("answer_publish_check_box");if((!isEmpty(savedAnswerTitle))&&(!isEmpty(answerTitleTextField))){answerTitleTextField.value=savedAnswerTitle}if((!isEmpty(savedAnswerText))&&(!isEmpty(answerTextTextArea))){answerTextTextArea.value=savedAnswerText}if((!isEmpty(savedAnswerAnonymous))&&(!isEmpty(answerAnonymousCheckBox))){answerAnonymousCheckBox.checked=savedAnswerAnonymous}if((!isEmpty(savedAnswerPublish))&&(!isEmpty(answerPublishCheckBox))){answerPublishCheckBox.checked=savedAnswerPublish}return true}function checkBeforeLeavingPage(){var result=null;var answerOK=true;if(!answerLeaveOK){var answerTitleField=document.getElementById("answer_title_text_field");if(!isEmpty(answerTitleField)){answerOK=answerOK&&checkValueFromInputField("answer_title_text_field",savedAnswerTitle);answerOK=answerOK&&checkValueFromInputField("answer_text_text_area",savedAnswerText)}}var questionOK=true;if(!questionLeaveOK){var questionTitleField=document.getElementById("question_title_text_field");if(!isEmpty(questionTitleField)){questionOK=questionOK&&checkValueFromInputField("question_title_text_field",savedQuestionTitle);questionOK=questionOK&&checkValueFromInputField("question_text_text_area",savedQuestionText)}}if(!answerOK){result="There are unsaved changes to the current answer. "}else{if(!questionOK){result="There are unsaved changes to the current question. "}}answerLeaveOK=false;questionLeaveOK=false;return result}function displayTagsFromRead(tagsJson){if(existsAjaxError(tagsJson)){handleAjaxError(tagsJson)}else{var recordsReturned=Number(tagsJson.records_returned);if(!isEmpty(recordsReturned)&&!isNaN(recordsReturned)&&recordsReturned>=1&&Math.floor(recordsReturned)==recordsReturned){var records=tagsJson.records;var currentEntry,name,votesPlus,votesMinus,userVote,voteSum,desiredName;for(var i=0;i<recordsReturned;i++){currentEntry=records[i];name=currentEntry.name;desiredName=currentEntry.desired_name;votesPlus=currentEntry.votes_plus;votesMinus=currentEntry.votes_minus;voteSum=votesPlus-votesMinus;userVote=currentEntry.user_vote;if(votesPlus==0&&votesMinus==0&&userVote==0){voteSum=-1}insertUpdateTag(name,desiredName,voteSum,userVote,false)}}}}function existsAjaxError(responseData){var result=false;if(!isEmpty(responseData.message_text)&&responseData.message_text.length>0){result=true}return result}function handleAjaxError(responseData){showPopUp(responseData.message_title,responseData.message_text)}function addTags(){var newTagField=document.getElementById("tag_text_field");var newTagInput=newTagField.value;var newTags=newTagInput.split(",");var added=false;var currentTags=getTags().length;var currentUserTags=getUserTags().length;var currentTag="";var tooManyTags=false;for(i=0;i<newTags.length;i++){currentTag=newTags[i];if((currentTags<MAXIMUM_QUESTION_TAGS)&&(currentUserTags<MAXIMUM_QUESTION_USER_TAGS)){var sendAjax=(taggingMode=="old");added=insertUpdateTag(currentTag,currentTag,null,1,sendAjax);if(added){currentTags=getTags().length;currentUserTags=getUserTags().length}}else{tooManyTags=true}}if(tooManyTags){showPopUp("Not all tags were added.","Not all tags were added. You have a maximum of "+MAXIMUM_QUESTION_USER_TAGS+" votes for tags. And each question can have only up to "+MAXIMUM_QUESTION_TAGS+" tags in total.")}newTagField.value=""}function convertTag(tagName){tagName=tagName.toLowerCase();tagName=tagName.replace(/[\(\)\{\}\[\]\n\f\r\t\v\O\b\,\|\"'`]/g,"");tagName=tagName.replace(/^\p{M}*/,"");tagName=tagName.replace(/(\s)\p{M}*/,"$1");tagName=tagName.replace(/\s+/g," ");tagName=tagName.replace(/^\s+/,"");tagName=tagName.replace(/\s+$/,"");tagName=tagName.replace(/\s/g,"_");if(tagName.length>MAXIMUM_TAG_LENGTH){tagName=tagName.substring(0,MAXIMUM_TAG_LENGTH)}return tagName}function getTagNodeForIndex(tagIndex){return document.getElementById("tag_"+tagIndex)}function getTagIndexForName(tagName){tagName=convertTag(tagName);var tags=getTags();var tagIndex=elementIndexInArray(tagName,tags);return tagIndex}function minusTag(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingTagsAllowed()){var tagNode=pressedLink.parentNode;var textNode=tagNode.childNodes[0].childNodes[0];var tagName=textNode.nodeValue;if(taggingMode=="new"){removeTag(tagName)}else{if(taggingMode=="old"){insertUpdateTag(tagName,tagName,null,-1,true)}}}}}function neutralTag(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingTagsAllowed()){var tagNode=pressedLink.parentNode;var textNode=tagNode.childNodes[0].childNodes[0];var tagName=textNode.nodeValue;if(taggingMode=="new"){removeTag(tagName)}else{if(taggingMode=="old"){insertUpdateTag(tagName,tagName,null,0,true)}}}}}function plusTag(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingTagsAllowed()){var tagNode=pressedLink.parentNode;var textNode=tagNode.childNodes[0].childNodes[0];var tagName=textNode.nodeValue;if(taggingMode=="new"){insertUpdateTag(tagName,tagName,null,1,false)}else{if(taggingMode=="old"){insertUpdateTag(tagName,tagName,null,1,true)}}}}}function checkEditingTagsAllowed(){var result=true;if(urlType==CALLER_FBIFRAME||testVersionStatus==STATUS_DEV_LOCAL||taggingMode=="new"){if(loggedIn){}else{showPopUp("Tagging disabled","Changing tags or votes for tags is possible only if you are logged in at Facebook and if you have allowed comp10 access!");result=false}}else{showPopUp("Tagging disabled","Changing tags or votes for tags is possible only if you access comp10 at Facebook!");result=false}return result}function insertUpdateTag(tagName,oldName,voteSum,userVote,sendAjax){var result=false;var oldUserVote=0;if(isEmpty(userVote)){userVote=1}if(isEmpty(sendAjax)){sendAjax=false}if(isEmpty(oldName)){oldName=tagName}if(!isEmpty(tagName)&&tagName.length>0){tagName=convertTag(tagName)}if(isEmpty(tagName)||tagName.length==0){}else{oldName=convertTag(oldName);var tags=getTags();var tagIndex=elementIndexInArray(oldName,tags);var oldVoteSum=-1;if(tagIndex===false){if(isEmpty(voteSum)){voteSum=userVote}var newIndex=tags.length;var tagTemplate=document.getElementById("template_tag");var newTagNode=tagTemplate.cloneNode(true);newTagNode.id="tag_"+newIndex;var newNameDiv=newTagNode.childNodes[0];var newNumberDiv=newTagNode.childNodes[1];newNameDiv.appendChild(document.createTextNode(tagName));newNumberDiv.appendChild(document.createTextNode(""+voteSum));displayUserVote(newTagNode,userVote,sendAjax);var tagsDiv=document.getElementById("tags_div");tagsDiv.appendChild(newTagNode);tagsDiv.appendChild(document.getElementById("marker_end_of_tags"));newTagNode.style.display="inline-block";result=true}else{var newTagIndex=elementIndexInArray(tagName,tags);if(newTagIndex!=tagIndex){removeTag(oldName);insertUpdateTag(tagName,tagName,voteSum,userVote,sendAjax)}else{var tagNode=getTagNodeForIndex(tagIndex);var nameDiv=tagNode.childNodes[0];var nameTextNode=nameDiv.childNodes[0];nameTextNode.nodeValue=tagName;oldUserVote=getUserVote(tagNode);var numberDiv=tagNode.childNodes[1];var numberTextNode=numberDiv.childNodes[0];oldVoteSum=Number(numberTextNode.nodeValue);var newVoteSum=voteSum;if(!isEmpty(voteSum)){numberTextNode.nodeValue=""+voteSum}else{var changeOfVoteSum=userVote-oldUserVote;newVoteSum=oldVoteSum+changeOfVoteSum;numberTextNode.nodeValue=""+newVoteSum}displayUserVote(tagNode,userVote,sendAjax);if(!sendAjax&&newVoteSum<0){removeTag(tagName)}}}if(sendAjax){sendTagUserVote(tagName,userVote,oldUserVote,oldVoteSum)}if(typeof(FB)!="undefined"&&typeof(FB.Canvas)!="undefined"){FB.Canvas.setSize()}}return result}function sendTagUserVote(tagName,userVote,oldUserVote,oldVoteSum){if(isEmpty(oldVoteSum)){oldVoteSum=null}var handleSuccess=function(o){try{if(o.responseText!==undefined){var tagsData=YAHOO.lang.JSON.parse(o.responseText);displayTagsFromRead(tagsData)}else{throw new Error("Undefined AJAX response.")}}catch(e){insertUpdateTag(o.argument.tag_name,o.argument.tag_name,o.argument.old_grade_sum,o.argument.old_user_vote,false);try{if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e2){showPopUp("Error while writing tag data.","The new tagging data could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}}};var handleFailure=function(o){try{insertUpdateTag(o.argument.tag_name,o.argument.tag_name,o.argument.old_grade_sum,o.argument.old_user_vote,false);if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e){showPopUp("Error while writing tag data.","The new tagging data could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}};var callback={success:handleSuccess,failure:handleFailure,argument:{tag_name:tagName,old_user_vote:oldUserVote,old_grade_sum:oldVoteSum},timeout:AJAX_TIMEOUT_MS};var url=""+WRITE_TAG_URL;var postData="questionId="+questionId+"&tag="+tagName+"&userVote="+userVote;var request=YAHOO.util.Connect.asyncRequest("POST",url,callback,postData)}function getUserVote(tagNode){var result=0;var aNodePlus=tagNode.childNodes[4];var aNodeNeutral=tagNode.childNodes[3];var aNodeMinus=tagNode.childNodes[2];var buttonPlusClassEnding=getClassEnding(aNodePlus);var buttonMinusClassEnding=getClassEnding(aNodeMinus);if(buttonPlusClassEnding==CLASS_ENDING_SELECTED||buttonPlusClassEnding==CLASS_ENDING_SELECTING){result=1}else{if(buttonMinusClassEnding==CLASS_ENDING_SELECTED||buttonMinusClassEnding==CLASS_ENDING_SELECTING){result=-1}}return result}function isTagButtonActive(tagButton){var tagNode=tagButton.parentNode;var tagStatus=getTagStatus(tagNode);var result=false;if(tagStatus==TAG_STATUS_ACTIVE){result=true}return result}function getTagStatus(tagNode){var result=TAG_STATUS_ACTIVE;var aNodePlus=tagNode.childNodes[4];var aNodeNeutral=tagNode.childNodes[3];var aNodeMinus=tagNode.childNodes[2];var buttonPlusClassEnding=getClassEnding(aNodePlus);var buttonNeutralClassEnding=getClassEnding(aNodeNeutral);var buttonMinusClassEnding=getClassEnding(aNodeMinus);if(buttonPlusClassEnding==CLASS_ENDING_DISABLED||buttonNeutralClassEnding==CLASS_ENDING_DISABLED||buttonMinusClassEnding==CLASS_ENDING_DISABLED){result=TAG_STATUS_DISABLED}else{if(buttonPlusClassEnding==CLASS_ENDING_SELECTING||buttonNeutralClassEnding==CLASS_ENDING_SELECTING||buttonMinusClassEnding==CLASS_ENDING_SELECTING){result=TAG_STATUS_SELECTING}}return result}function getClassEnding(node){var nodeClass=node.className;var classNameEnding=nodeClass.substr(nodeClass.length-CLASS_ENDING_LENGTH);return classNameEnding}function setClassEnding(node,newClassEnding){var nodeClass=node.className;var nodeClassWithoutEnding=nodeClass.substr(0,nodeClass.length-CLASS_ENDING_LENGTH);var newNodeClass=""+nodeClassWithoutEnding+newClassEnding;node.className=newNodeClass}function displayUserVote(tagNode,userVote,requestPending){if(isEmpty(requestPending)){requestPending=false}var aNodePlus=tagNode.childNodes[4];var aNodeNeutral=tagNode.childNodes[3];var aNodeMinus=tagNode.childNodes[2];if(userVote==1){if(requestPending){setClassEnding(aNodePlus,CLASS_ENDING_SELECTING)}else{setClassEnding(aNodePlus,CLASS_ENDING_SELECTED)}setClassEnding(aNodeNeutral,CLASS_ENDING_NOT_SELECTED);setClassEnding(aNodeMinus,CLASS_ENDING_NOT_SELECTED)}else{if(userVote==0){setClassEnding(aNodePlus,CLASS_ENDING_NOT_SELECTED);if(requestPending){setClassEnding(aNodeNeutral,CLASS_ENDING_SELECTING)}else{setClassEnding(aNodeNeutral,CLASS_ENDING_SELECTED)}setClassEnding(aNodeMinus,CLASS_ENDING_NOT_SELECTED)}else{if(userVote==-1){setClassEnding(aNodePlus,CLASS_ENDING_NOT_SELECTED);setClassEnding(aNodeNeutral,CLASS_ENDING_NOT_SELECTED);if(requestPending){setClassEnding(aNodeMinus,CLASS_ENDING_SELECTING)}else{setClassEnding(aNodeMinus,CLASS_ENDING_SELECTED)}}}}}function removeTag(tag){var tags=getTags();var index=elementIndexInArray(tag,tags);if(index!==false){var tagDiv=getTagNodeForIndex(index);tagDiv.style.display="none";var parentNode=tagDiv.parentNode;parentNode.removeChild(tagDiv);var newIndex=0;var currentNode=null;for(i=0;i<MAXIMUM_QUESTION_TAGS;i++){currentNode=document.getElementById("tag_"+i);if(!isEmpty(currentNode)){currentNode.id="tag_"+newIndex;newIndex++}}}}function getTags(){var result=new Array();if(!isEmpty(taggingMode)){var currentTagNode=document.getElementById("template_tag");currentTagNode=currentTagNode.nextSibling;var currentNameNode,currentNameTextNode,currentTagName;while(!isEmpty(currentTagNode)&&(isEmpty(currentTagNode.attributes)||isEmpty(currentTagNode.id)||currentTagNode.id!="marker_end_of_tags")){if(currentTagNode.nodeName=="DIV"||currentTagNode.nodeName=="div"){currentNameNode=currentTagNode.childNodes[0];currentNameTextNode=currentNameNode.childNodes[0];currentTagName=currentNameTextNode.nodeValue;result.push(currentTagName)}currentTagNode=currentTagNode.nextSibling}}return result}function getUserTags(){var result=new Array();var currentTagNode=document.getElementById("template_tag");currentTagNode=currentTagNode.nextSibling;var currentUserVote,currentNameNode,currentNameTextNode,currentTagName;while(!isEmpty(currentTagNode)&&(isEmpty(currentTagNode.attributes)||isEmpty(currentTagNode.id)||currentTagNode.id!="marker_end_of_tags")){if(currentTagNode.nodeName=="DIV"||currentTagNode.nodeName=="div"){currentUserVote=getUserVote(currentTagNode);if(currentUserVote==1||currentUserVote==-1){currentNameNode=currentTagNode.childNodes[0];currentNameTextNode=currentNameNode.childNodes[0];currentTagName=currentNameTextNode.nodeValue;result.push(currentTagName)}}currentTagNode=currentTagNode.nextSibling}return result}function initializeTags(){if(taggingMode=="new"){writeToTagsInputField("");initializeTagsFromHiddenField()}if(taggingMode=="old"){writeToTagsHiddenField("");writeToTagsInputField("");var questionTagsJsonParsed=YAHOO.lang.JSON.parse(questionTagsJson);displayTagsFromRead(questionTagsJsonParsed)}}function writeToTagsHiddenField(value){var tagsHiddenField=document.getElementById("tags_hidden_field");if(!isEmpty(tagsHiddenField)){tagsHiddenField.value=value}}function writeToTagsInputField(value){var tagsInputField=document.getElementById("tag_text_field");if(!isEmpty(tagsInputField)){tagsInputField.value=value}}function initializeTagsFromHiddenField(){var tagsHiddenField=document.getElementById("tags_hidden_field");if(!isEmpty(tagsHiddenField)){var tagsString=tagsHiddenField.value;var tags=tagsString.split(",");if(!isEmpty(tags)&&isArray(tags)){for(i=0;i<tags.length;i++){insertUpdateTag(tags[i],null,1,1,false)}}}}function writeTagsToHiddenField(){if(!isEmpty(taggingMode)){var tags=getTags();var tagsString="";if(!isEmpty(tags)){tagsString=tags.join(",")}writeToTagsHiddenField(tagsString)}}function initializeVotes(type){if(type=="question"&&!isEmpty(questionId)){var questionVotesJsonParsed=YAHOO.lang.JSON.parse(questionVotesJson);displayVotesFromRead(questionVotesJsonParsed)}else{if(type=="answer"&&!isEmpty(answerId)){var answerVotesJsonParsed=YAHOO.lang.JSON.parse(answerVotesJson);displayVotesFromRead(answerVotesJsonParsed)}}}function minusVote(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingVotesAllowed()){var voteNode=pressedLink.parentNode;var idVoteNode=voteNode.id;var type="question";if(idVoteNode.substr(0,6)=="answer"){type="answer"}var textNode=voteNode.childNodes[0].childNodes[0];var voteName=textNode.nodeValue;updateVote(type,voteName,null,-1,true)}}}function neutralVote(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingVotesAllowed()){var voteNode=pressedLink.parentNode;var idVoteNode=voteNode.id;var type="question";if(idVoteNode.substr(0,6)=="answer"){type="answer"}var textNode=voteNode.childNodes[0].childNodes[0];var voteName=textNode.nodeValue;updateVote(type,voteName,null,0,true)}}}function plusVote(pressedLink){if(!isEmpty(pressedLink)&&pressedLink.tagName=="A"&&isTagButtonActive(pressedLink)){if(checkEditingVotesAllowed()){var voteNode=pressedLink.parentNode;var idVoteNode=voteNode.id;var type="question";if(idVoteNode.substr(0,6)=="answer"){type="answer"}var textNode=voteNode.childNodes[0].childNodes[0];var voteName=textNode.nodeValue;updateVote(type,voteName,null,+1,true)}}}function checkEditingVotesAllowed(){var result=true;if(urlType==CALLER_FBIFRAME||testVersionStatus==STATUS_DEV_LOCAL){if(loggedIn){}else{showPopUp("Votes disabled","Changing votes is possible only if you are logged in at Facebook and if you have allowed comp10 access!");result=false}}else{showPopUp("Votes disabled","Changing votes is possible only if you access comp10 at Facebook!");result=false}return result}function displayVotesFromRead(votesJson){var reloadUrl=votesJson.reload_url;if(!isEmpty(reloadUrl)){window.top.location=reloadUrl}else{if(existsAjaxError(votesJson)){handleAjaxError(votesJson)}var type=String(votesJson.type);var recordsReturned=Number(votesJson.records_returned);if(!isEmpty(recordsReturned)&&!isNaN(recordsReturned)&&recordsReturned>=1&&Math.floor(recordsReturned)==recordsReturned){var records=votesJson.records;var currentEntry,name,votesPlus,votesMinus,userVote,voteSum;for(var i=0;i<recordsReturned;i++){currentEntry=records[i];name=currentEntry.name;votesPlus=currentEntry.votes_plus;votesMinus=currentEntry.votes_minus;voteSum=votesPlus-votesMinus;userVote=currentEntry.user_vote;updateVote(type,name,voteSum,userVote,false)}}}}function updateVote(type,voteName,voteSum,userVote,sendAjax){var result=true;var voteNode=null;if(isEmpty(userVote)){userVote=1}if(isEmpty(sendAjax)){sendAjax=false}if(type=="question"&&voteName=="Close"){voteNode=document.getElementById("question_vote_close")}else{if(type=="question"&&voteName=="Delete"){voteNode=document.getElementById("question_vote_delete")}else{if(type=="answer"&&voteName=="Delete"){voteNode=document.getElementById("answer_vote_delete")}else{throw new Error("Wrong type and/or voteName passed to insertUpdateVote(.)! voteName: '"+voteName+"', type: '"+type+"'.")}}}if(isEmpty(voteNode)){throw new Error("insertUpdateVote(.): Could not find DOM-node for user vote: voteName: '"+voteName+"', type: '"+type+"'.")}var oldUserVote=getUserVote(voteNode);var numberDiv=voteNode.childNodes[1];var numberTextNode=numberDiv.childNodes[0];var oldVoteSum=Number(numberTextNode.nodeValue);var newVoteSum=voteSum;if(isEmpty(newVoteSum)){var changeOfVoteSum=userVote-oldUserVote;newVoteSum=oldVoteSum+changeOfVoteSum}var voteOK=true;if(sendAjax){voteOK=confirmVote(voteName,oldVoteSum,newVoteSum)}if(voteOK){numberTextNode.nodeValue=""+newVoteSum;var voteSumClass="voteNumber";if(newVoteSum>0){voteSumClass="voteNumber voteNumberPositive"}numberDiv.className=voteSumClass;displayUserVote(voteNode,userVote,sendAjax);if(sendAjax){sendVote(type,voteName,userVote,oldUserVote,oldVoteSum)}}return result}function confirmVote(voteName,oldVoteSum,newVoteSum){var result=true;if(voteName=="Delete"&&oldVoteSum<THRESHOLD_DELETE&&newVoteSum>=THRESHOLD_DELETE){result=showConfirm("Deleting question/answer OK?","Your vote wll completely remove the question/answer from the comp10 database. Are you sure?")}else{if(voteName=="Close"&&oldVoteSum<THRESHOLD_CLOSE&&newVoteSum>=THRESHOLD_CLOSE){result=showConfirm("Closing question OK?","Your vote will close the question. Are you sure?")}else{if(voteName=="Close"&&oldVoteSum>=THRESHOLD_CLOSE&&newVoteSum<THRESHOLD_CLOSE){result=showConfirm("Re-opening question OK?","Your vote will re-open the question. Are you sure?")}}}return result}function sendVote(type,voteName,userVote,oldUserVote,oldVoteSum){var id;if(type=="question"){id=questionId}else{id=answerId}if(isEmpty(oldVoteSum)){oldVoteSum=null}var handleSuccess=function(o){try{if(o.responseText!==undefined){var votesData=YAHOO.lang.JSON.parse(o.responseText);displayVotesFromRead(votesData)}else{throw new Error("Undefined AJAX response.")}}catch(e){updateVote(o.argument.type,o.argument.vote_name,o.argument.old_grade_sum,o.argument.old_user_vote,false);try{if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e2){showPopUp("Error while writing vote data.","The new voting data could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}}};var handleFailure=function(o){try{updateVote(o.argument.type,o.argument.vote_name,o.argument.old_grade_sum,o.argument.old_user_vote,false);if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e){showPopUp("Error while writing vote data.","The new voting data could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}};var callback={success:handleSuccess,failure:handleFailure,argument:{type:type,vote_name:voteName,old_user_vote:oldUserVote,old_grade_sum:oldVoteSum},timeout:AJAX_TIMEOUT_MS};var url=""+WRITE_VOTE_URL;var postData="type="+type+"&id="+id+"&voteName="+voteName+"&userVote="+userVote;var request=YAHOO.util.Connect.asyncRequest("POST",url,callback,postData)}function initializeWatching(){if(!isEmpty(questionWatchingStatus)){var booleanWatchingStatus=false;if(questionWatchingStatus){booleanWatchingStatus=true}updateWatchingStatus(booleanWatchingStatus,booleanWatchingStatus,false);setWatchButtonStatus(CLASS_ENDING_ON)}else{setWatchButtonStatus(CLASS_ENDING_OFF)}}function watchButtonClicked(){var enabled=false;if(getWatchButtonStatus()===CLASS_ENDING_ON){enabled=true}if(enabled){var oldWatching=getWatchingStatusFromButton();var newWatching=Boolean(!oldWatching);updateWatchingStatus(newWatching,oldWatching,true)}return true}function displayWatchingStatusFromRead(watchingJson){var recordsReturned=Number(watchingJson.records_returned);if(recordsReturned==1){var records=watchingJson.records;var record=records[0];var watching=Boolean(record.watching);updateWatchingStatus(watching,watching,false)}}function updateWatchingStatus(watching,oldWatching,sendAjax){var result=true;setWatchingStatusInButton(watching);if(sendAjax){setWatchButtonStatus(CLASS_ENDING_SELECTING);sendWatchingStatus(watching,oldWatching)}else{setWatchButtonStatus(CLASS_ENDING_ON)}return result}function sendWatchingStatus(watching,oldWatching){var handleSuccess=function(o){try{if(o.responseText!==undefined){var watchingData=YAHOO.lang.JSON.parse(o.responseText);displayWatchingStatusFromRead(watchingData)}else{throw new Error("Undefined AJAX response.")}}catch(e){updateWatchingStatus(o.argument.old_watching,o.argument.old_watching,false);try{if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e2){showPopUp("Error while writing watching status.","The new watching status could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}}};var handleFailure=function(o){try{updateWatchingStatus(o.argument.old_watching,o.argument.old_watching,false);if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e){showPopUp("Error while writing watching status.","The new watching status could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}};var callback={success:handleSuccess,failure:handleFailure,argument:{old_watching:oldWatching},timeout:AJAX_TIMEOUT_MS};var url=""+WRITE_WATCH_URL;var postData="questionId="+questionId+"&watching="+watching;var request=YAHOO.util.Connect.asyncRequest("POST",url,callback,postData)}function setWatchButtonStatus(newStatus){var watchButton=getWatchButton();setClassEnding(watchButton,newStatus)}function getWatchButtonStatus(){var watchButton=getWatchButton();var classNameEnding=getClassEnding(watchButton);return classNameEnding}function getWatchingStatusFromButton(){var watchButton=getWatchButton();var watchButtonClass=watchButton.className;var classNameMiddle=watchButtonClass.substr(watchButtonClass.length-CLASS_ENDING_LENGTH-WATCH_BUTTON_CLASS_MIDDLE_LENGTH,WATCH_BUTTON_CLASS_MIDDLE_LENGTH);var result=false;if(classNameMiddle===WATCH_BUTTON_CLASS_MIDDLE_SELECTED){result=true}return result}function setWatchingStatusInButton(watching){var watchButton=getWatchButton();var watchButtonClass=watchButton.className;var classNameStart=watchButtonClass.substr(0,watchButtonClass.length-CLASS_ENDING_LENGTH-WATCH_BUTTON_CLASS_MIDDLE_LENGTH);var classNameMiddle=watchButtonClass.substr(watchButtonClass.length-CLASS_ENDING_LENGTH-WATCH_BUTTON_CLASS_MIDDLE_LENGTH,WATCH_BUTTON_CLASS_MIDDLE_LENGTH);var classNameEnding=watchButtonClass.substr(watchButtonClass.length-CLASS_ENDING_LENGTH);var newClassNameMiddle=WATCH_BUTTON_CLASS_MIDDLE_NOT_SELECTED;if(watching){newClassNameMiddle=WATCH_BUTTON_CLASS_MIDDLE_SELECTED}var newClassName=""+classNameStart+newClassNameMiddle+classNameEnding;watchButton.className=newClassName;var spanToolTipNode=document.getElementById("tool_tip_watch_button");var textNode=spanToolTipNode.childNodes[0];textNode.nodeValue=watchButtonToolTips[newClassNameMiddle]}function getWatchButton(){return document.getElementById("question_watch_button")}function initializeGrades(){if(answerGradeEditable){var gradingScaleImg=document.getElementById("answer_grading_scale_img");if(!isEmpty(gradingScaleImg)){addEventListenerToNode(gradingScaleImg,"click",gradingScaleClicked)}}updateGrades(answerUserGrade,answerUserGrade,answerAverageGrade,answerGradeVotes,false);if(!answerGradeEditable){setGradingScaleStatus(false)}}function gradingScaleClicked(clickEvent){var enabled=getGradingScaleStatus();if(enabled){var oldUserGrade=answerUserGrade;var newUserGrade=getScaleValueFromClickEvent(clickEvent);updateGrades(newUserGrade,oldUserGrade,null,null,true)}return true}function displayGradesFromRead(gradesJson){var recordsReturned=Number(gradesJson.records_returned);if(recordsReturned==1){var records=gradesJson.records;var record=records[0];var newUserGrade=record.user_grade;var newAverageGrade=record.average_grade;var newGradeVotes=record.grade_votes;updateGrades(newUserGrade,newUserGrade,newAverageGrade,newGradeVotes,false)}}function updateGrades(newUserGrade,oldUserGrade,averageGrade,gradeVotes,sendAjax){var result=true;if(!isEmpty(newUserGrade)){setUserGradeInGradingScale(newUserGrade)}if(sendAjax){setGradingScaleStatus(false);sendUserGrade(newUserGrade,oldUserGrade)}else{setGradingScaleStatus(true);if(!isEmpty(newUserGrade)){answerUserGrade=newUserGrade}if(!isEmpty(gradeVotes)){answerGradeVotes=gradeVotes}else{gradeVotes=answerGradeVotes}if(!isEmpty(averageGrade)){answerAverageGrade=averageGrade;displayGradeEntry(averageGrade,gradeVotes)}}return result}function sendUserGrade(newUserGrade,oldUserGrade){var handleSuccess=function(o){try{if(o.responseText!==undefined){var gradesJson=YAHOO.lang.JSON.parse(o.responseText);displayGradesFromRead(gradesJson)}else{throw new Error("Undefined AJAX response.")}}catch(e){updateGrades(o.argument.old_user_grade,o.argument.old_user_grade,null,null,false);try{if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e2){showPopUp("Error while writing grade.","Your grade could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}}};var handleFailure=function(o){try{updateGrades(o.argument.old_user_grade,o.argument.old_user_grade,null,null,false);if(o.responseText!==undefined){var responseData=YAHOO.lang.JSON.parse(o.responseText);handleAjaxError(responseData)}else{throw new Error("Undefined AJAX response.")}}catch(e){showPopUp("Error while writing grade.","Your grade could not be sent correctly. Please, contact the comp10-developer team if the error persists!")}};var callback={success:handleSuccess,failure:handleFailure,argument:{old_user_grade:oldUserGrade},timeout:AJAX_TIMEOUT_MS};var url=""+WRITE_GRADE_URL;var postData="answerId="+answerId+"&grade="+newUserGrade;var request=YAHOO.util.Connect.asyncRequest("POST",url,callback,postData)}function setGradingScaleStatus(newStatus){var gradingScale=getGradingScale();if(!isEmpty(gradingScale)){setScaleStatus(gradingScale,newStatus);var gradingScaleToolTipNode=document.getElementById("toolTipGradingScale");var gradingScaleToolTipTextNode=gradingScaleToolTipNode.childNodes[0];var newToolTip=GRADING_SCALE_TOOL_TIP_OFF;if(newStatus){newToolTip=GRADING_SCALE_TOOL_TIP_ON}gradingScaleToolTipTextNode.nodeValue=newToolTip}}function setScaleStatus(scaleNode,newStatus){if(!isEmpty(scaleNode)){var scaleStyle=scaleNode.style;var backgroundPosition=scaleStyle.backgroundPosition;var firstPart=backgroundPosition.substr(0,backgroundPosition.length-5);var newYOffset="-63px";var newClassEnding=CLASS_ENDING_OFF;if(newStatus){newYOffset="-42px";newClassEnding=CLASS_ENDING_ON}var newBackgroundPosition=firstPart+newYOffset;scaleNode.style.backgroundPosition=newBackgroundPosition;var imageNode=scaleNode.childNodes[0];setClassEnding(imageNode,newClassEnding)}}function getGradingScaleStatus(){var gradingScale=getGradingScale();var result=null;if(!isEmpty(gradingScale)){result=getScaleStatus(gradingScale)}return result}function getScaleStatus(scaleNode){var result=false;if(!isEmpty(scaleNode)){var scaleStyle=scaleNode.style;var backgroundPosition=scaleStyle.backgroundPosition;var yOffsetPart=backgroundPosition.substr(backgroundPosition.length-5);if(yOffsetPart=="-42px"){result=true}}return result}function setUserGradeInGradingScale(userGrade){var gradingScale=getGradingScale();setValueInScale(gradingScale,userGrade)}function setValueInScale(scaleNode,value){if(!isEmpty(scaleNode)){var scaleStyle=scaleNode.style;var backgroundPosition=scaleStyle.backgroundPosition;var offset=backgroundPosition.substr(1,3);var remainder=backgroundPosition.substr(4);if(offset.substr(2,1)=="p"){offset=offset.substr(0,2);remainder="p"+remainder}var newOffset=(20*value)-198;if(value<=0){newOffset=-199}var newBackgroundPosition=""+newOffset+remainder;scaleNode.style.backgroundPosition=newBackgroundPosition}}function getScaleValueFromClickEvent(clickEvent){var xOffset=0;if(isIE()){xOffset=clickEvent.x}else{xOffset=clickEvent.layerX}var temp=(xOffset-2);temp=temp/20;temp=Math.min(temp,10);temp=Math.max(temp,0);temp=Math.round(temp);return temp}function getGradingScale(){return document.getElementById("answer_grading_scale_div")}function displayGradeEntry(newAverageGrade,newGradeVotes){var newAverageGradeText="- ";var averageGradeNode=document.getElementById("answer_average_grade");if(!isEmpty(averageGradeNode)){var averageGradeTextNode=averageGradeNode.childNodes[0];if(!isEmpty(newAverageGrade)&&!isEmpty(newGradeVotes)&&newGradeVotes!=0){newAverageGradeText=""+newAverageGrade;if(newAverageGrade==Math.round(newAverageGrade)){newAverageGradeText=""+newAverageGradeText+".0"}newAverageGradeText=""+newAverageGradeText}averageGradeTextNode.nodeValue=String(newAverageGradeText)}var newGradeVotesText="(0 votes)";var gradeVotesNode=document.getElementById("answer_grade_votes");if(!isEmpty(gradeVotesNode)){var gradeVotesTextNode=gradeVotesNode.childNodes[0];newGradeVotesText="";if(!isEmpty(newGradeVotes)&&newGradeVotes!=0){if(newGradeVotes==1){newGradeVotesText="(1 vote)"}else{newGradeVotesText="("+newGradeVotes+" votes)"}}gradeVotesTextNode.nodeValue=String(newGradeVotesText)}}function handleMouseOverToolTip(aNode){var spanToolTipNode=aNode.childNodes[0];addMouseOverNode(spanToolTipNode);setTimeout(function(){showToolTip(aNode)},TOOLTIP_MS_BEFORE)}function handleMouseOutToolTip(aNode){hideToolTip(aNode)}function showToolTip(aNode){var spanToolTipNode=aNode.childNodes[0];if(existsMouseOverNode(spanToolTipNode)){spanToolTipNode.style.visibility="visible";removeMouseOverNode(spanToolTipNode);setTimeout(function(){hideToolTip(aNode)},TOOLTIP_TIMOUT_MS)}}function hideToolTip(aNode){var spanToolTipNode=aNode.childNodes[0];removeMouseOverNode(spanToolTipNode);spanToolTipNode.style.visibility="hidden"}function existsMouseOverNode(spanToolTipNode){var result=false;if(!isEmpty(spanToolTipNode)&&!isEmpty(spanToolTipNode.childNodes[1])&&spanToolTipNode.childNodes[1].className=="stillMouseOver"){result=true}return result}function addMouseOverNode(spanToolTipNode){if(!existsMouseOverNode(spanToolTipNode)){var emptyDivNode=document.createElement("div");emptyDivNode.className="stillMouseOver";emptyDivNode.style.display="none";emptyDivNode.style.visibility="hidden";spanToolTipNode.appendChild(emptyDivNode)}}function removeMouseOverNode(spanToolTipNode){if(existsMouseOverNode(spanToolTipNode)){var mouseOverNode=spanToolTipNode.childNodes[1];spanToolTipNode.removeChild(mouseOverNode)}}function parseSqlDate(dateTimeString){var parts=dateTimeString.split(" ");var dateParts=parts[0].split("-");if(parts.length>1){var timeParts=parts[1].split(":");return new Date(dateParts[0],dateParts[1]-1,dateParts[2],timeParts[0],timeParts[1],timeParts[2])}else{return new Date(dateParts[0],dateParts[1]-1,dateParts[2])}}function transformUTCToLocal(dateTimeUTC){var result=new Date();result.setUTCFullYear(dateTimeUTC.getFullYear());result.setUTCMonth(dateTimeUTC.getMonth());result.setUTCDate(dateTimeUTC.getDate());result.setUTCHours(dateTimeUTC.getHours());result.setUTCMinutes(dateTimeUTC.getMinutes());result.setUTCSeconds(dateTimeUTC.getSeconds());result.setUTCSeconds(dateTimeUTC.getSeconds());result.setMilliseconds(dateTimeUTC.getMilliseconds());return result}function dateToSqlDate(date){function twoDigits(number){var result=""+number;if(result.length==1){result="0"+result}return result}var result=""+date.getFullYear()+"-"+twoDigits(date.getMonth()+1)+"-"+twoDigits(date.getDate())+" "+twoDigits(date.getHours())+":"+twoDigits(date.getMinutes())+":"+twoDigits(date.getSeconds());return result}function transformSqlDateToLocal(sqlDate){return dateToSqlDate(transformUTCToLocal(parseSqlDate(sqlDate)))}function displaySqlDateInDiv(sqlDate,divId){var localSqlDate=transformSqlDateToLocal(sqlDate);var dateTextNode=document.createTextNode(localSqlDate);var divNode=document.getElementById(divId);divNode.appendChild(dateTextNode)}function buildPageLabel(page,paginator){var rowsPerPage=paginator.getRowsPerPage();var totalRecords=paginator.getTotalRecords();var startIndexOnPage=((page-1)*rowsPerPage)+1;var endIndexOnPage=Math.min(startIndexOnPage+rowsPerPage-1,totalRecords);var result=""+startIndexOnPage+"-"+endIndexOnPage;if(startIndexOnPage==endIndexOnPage){result=""+startIndexOnPage}return result}function make_double_digit(number){return((number<10)?"0"+number:number)}function parse_json(text){result=eval(text);return result}YAHOO.util.DataSource.Parser.json=parse_json;function parse_sql_date(oData){return transformUTCToLocal(parseSqlDate(oData))}YAHOO.util.DataSource.Parser.sql_date=parse_sql_date;function format_international_date(elCell,oRecord,oColumn,oData){var oDate=oData;var year=oDate.getFullYear();var month=make_double_digit(oDate.getMonth()+1);var date=make_double_digit(oDate.getDate());var hours=make_double_digit(oDate.getHours());var minutes=make_double_digit(oDate.getMinutes());var seconds=make_double_digit(oDate.getSeconds());result=""+year+"-"+month+"-"+date+" "+hours+":"+minutes+":"+seconds;elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.international_date=format_international_date;function format_string_with_url(elCell,oRecord,oColumn,oData){var url=oData.url;var string=oData.string;var target=oData.target;var result=string;result=string;if(url){result='<a href="'+url+'" target="'+target+'">'+string+"</a>"}elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.string_with_url=format_string_with_url;function format_message(elCell,oRecord,oColumn,oData){var message=oData.message;var url=oData.url;var unread=oData.unread;var result=message;if(url){result='<a href="'+url+'" target="_top">'+message+"</a>"}if(unread){result="<b>"+result+"</b>"}elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.message=format_message;function format_two_decimals(elCell,oRecord,oColumn,oData){number=Number(oData);result=number.toFixed(2);elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.two_decimals=format_two_decimals;function format_grade(elCell,oRecord,oColumn,oData){number=Number(oData);if(number==0){result="&nbsp;&ndash;&nbsp;";elCell.innerHTML=result}else{format_two_decimals(elCell,oRecord,oColumn,oData)}}YAHOO.widget.DataTable.Formatter.grade=format_grade;function format_integer_part(elCell,oRecord,oColumn,oData){var number1=oData.number1;var number2=oData.number2;var result=""+number1;if(YAHOO.lang.isValue(number2)){result=""+result+" / "+number2}elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.integer_part=format_integer_part;function format_rank(elCell,oRecord,oColumn,oData){var number1=oData.number1;var number2=oData.number2;var positionPercent=1;if(number2>0){positionPercent=Math.max(0,number1-1)/number2}var result=""+number1;if(positionPercent<=0.2){result="<b class='highlightedRank'>"+number1+"</b>"}if(YAHOO.lang.isValue(number2)){result=""+result+" / "+number2}elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.rank=format_rank;function format_level(elCell,oRecord,oColumn,oData){var negativeXOffsetBackground=198-(oData*20);if(oData<=0){negativeXOffsetBackground=199}var xOffsetBackground="-"+negativeXOffsetBackground;if(negativeXOffsetBackground<=0){xOffsetBackground=""+(0-negativeXOffsetBackground)}var result='<div class="gradingScale gradingScaleInList" style="background-position: '+xOffsetBackground+'px -42px;" ><img class="gradingScale gradingScaleInList" src="/images/Buttons410x166FEV7.png" /></div>';elCell.innerHTML=result}YAHOO.widget.DataTable.Formatter.level=format_level;function sort_by_default(row1,row2,desc){if(!YAHOO.lang.isValue(row1)){return(!YAHOO.lang.isValue(row2))?0:1}else{if(!YAHOO.lang.isValue(row2)){return -1}}var firstNumber1=row1.getData("sortColumn").number1;var firstNumber2=row2.getData("sortColumn").number1;var secondNumber1=row1.getData("sortColumn").number2;var secondNumber2=row2.getData("sortColumn").number2;var result=YAHOO.util.Sort.compare(firstNumber1,firstNumber2);if(result==0){result=YAHOO.util.Sort.compare(secondNumber1,secondNumber2)}if(desc){result=(-1)*result}return result}function sort_by_default_three(row1,row2,desc){if(!YAHOO.lang.isValue(row1)){return(!YAHOO.lang.isValue(row2))?0:1}else{if(!YAHOO.lang.isValue(row2)){return -1}}var firstNumber1=row1.getData("sortColumn").number1;var firstNumber2=row2.getData("sortColumn").number1;var secondNumber1=row1.getData("sortColumn").number2;var secondNumber2=row2.getData("sortColumn").number2;var thirdNumber1=row1.getData("sortColumn").number3;var thirdNumber2=row2.getData("sortColumn").number3;var result=YAHOO.util.Sort.compare(firstNumber1,firstNumber2);if(result==0){result=YAHOO.util.Sort.compare(secondNumber1,secondNumber2)}if(result==0){result=YAHOO.util.Sort.compare(thirdNumber1,thirdNumber2)}if(desc){result=(-1)*result}return result}function sort_by_user(row1,row2,desc){if(!YAHOO.lang.isValue(row1)){return(!YAHOO.lang.isValue(row2))?0:1}else{if(!YAHOO.lang.isValue(row2)){return -1}}var username1=row1.getData("user").string;var username2=row2.getData("user").string;var result=-1;if(username1=="you"){result=(username2=="you")?0:-1}else{if(username2=="you"){result=1}else{if(username1=="you (anonymously)"){result=(username2=="you (anonymously)")?0:-1}else{if(username2=="you (anonymously)"){result=1}else{if(username1=="anonymous"){result=(username2=="anonymous")?0:1}else{if(username2=="anonymous"){result=-1}else{result=YAHOO.util.Sort.compare(username1,username2)}}}}}}if(desc){result=(-1)*result}return result}function sort_by_title(row1,row2,desc){if(!YAHOO.lang.isValue(row1)){return(!YAHOO.lang.isValue(row2))?0:1}else{if(!YAHOO.lang.isValue(row2)){return -1}}var title1=row1.getData("title").string;var title2=row2.getData("title").string;var result=YAHOO.util.Sort.compare(title1,title2);if(desc){result=(-1)*result}return result}function sort_by_message(row1,row2,desc){if(!YAHOO.lang.isValue(row1)){return(!YAHOO.lang.isValue(row2))?0:1}else{if(!YAHOO.lang.isValue(row2)){return -1}}var message1=row1.getData("message").string;var message2=row2.getData("message").string;var result=YAHOO.util.Sort.compare(message1,message2);if(desc){result=(-1)*result}return result}window.onbeforeunload=function(e){e=e||window.event;var message=checkBeforeLeavingPage();if(!isEmpty(message)){if(e){e.returnValue=message}return message}};
