var contextPath = '/ri'; // Basic nav rollover code function rollover (imagename, objectsrc) { if (document.images) { document.images[imagename].src=eval(objectsrc+".src"); } } // Declare rollover images for nav navcommercial = new Image; navcommercial_on = new Image; navnewhomes = new Image; navnewhomes_on = new Image; navprofilesearch = new Image; navprofilesearch_on = new Image; navmapsearch = new Image; navmapsearch_on = new Image; navmarketreports = new Image; navmarketreports_on = new Image; navnews = new Image; navnews_on = new Image; navrealnetsolutions = new Image; navrealnetsolutions_on = new Image; navhelpcentre = new Image; navhelpcentre_on = new Image; navaboutrealnet = new Image; navaboutrealnet_on = new Image; navrescommercial = new Image; navrescommercial_on = new Image; navresnewhomes = new Image; navresnewhomes_on = new Image; navresquickfind = new Image; navresquickfind_on = new Image; navresusermanagement = new Image; navresusermanagement_on = new Image; navressystem = new Image; navressystem_on = new Image; navresclientsite = new Image; navresclientsite_on = new Image; //REAL-164 navcommercial.src = contextPath + "/images/nav-commercial-off.gif"; navcommercial_on.src = contextPath + "/images/nav-commercial-on.gif"; navnewhomes.src = contextPath + "/images/nav-newhomes-off.gif"; navnewhomes_on.src = contextPath + "/images/nav-newhomes-on.gif"; navprofilesearch.src = contextPath + "/images/nav-profileSearch-off.gif"; navprofilesearch_on.src = contextPath + "/images/nav-profileSearch-on.gif"; navmapsearch.src = contextPath + "/images/nav-mapSearch-off.gif"; navmapsearch_on.src = contextPath + "/images/nav-mapSearch-on.gif"; navmarketreports.src = contextPath + "/images/nav-marketReports-off.gif"; navmarketreports_on.src = contextPath + "/images/nav-marketReports-on.gif"; navnews.src = contextPath + "/images/nav-newsEvents-off.gif"; navnews_on.src = contextPath + "/images/nav-newsEvents-on.gif"; navrealnetsolutions.src = contextPath + "/images/nav-realnetSolutions-off.gif"; navrealnetsolutions_on.src = contextPath + "/images/nav-realnetSolutions-on.gif"; navhelpcentre.src = contextPath + "/images/nav-helpCentre-off.gif"; navhelpcentre_on.src = contextPath + "/images/nav-helpCentre-on.gif"; navaboutrealnet.src = contextPath + "/images/nav-aboutRealnet-off.gif"; navaboutrealnet_on.src = contextPath + "/images/nav-aboutRealnet-on.gif"; navrescommercial.src = contextPath + "/images/nav-res-createCommercial-off.gif"; navrescommercial_on.src = contextPath + "/images/nav-res-createCommercial-on.gif"; navresnewhomes.src = contextPath + "/images/nav-res-createNewHomes-off.gif"; navresnewhomes_on.src = contextPath + "/images/nav-res-createNewHomes-on.gif"; navresquickfind.src = contextPath + "/images/nav-res-quickFind-off.gif"; navresquickfind_on.src = contextPath + "/images/nav-res-quickFind-on.gif"; navresusermanagement.src = contextPath + "/images/nav-res-userManagement-off.gif"; navresusermanagement_on.src = contextPath + "/images/nav-res-userManagement-on.gif"; navressystem.src = contextPath + "/images/nav-res-systemManagement-off.gif"; navressystem_on.src = contextPath + "/images/nav-res-systemManagement-on.gif"; navresclientsite.src = contextPath + "/images/nav-res-clientSite-off.gif"; navresclientsite_on.src = contextPath + "/images/nav-res-clientSite-on.gif"; //General form gymnastic code //Removes all options from a select box function removeAllOptions(selectbox) { var i; for(i = selectbox.options.length-1; i >= 0; i--) { selectbox.remove(i); } } //Adds an option to the bottom of the list in a select box function addOption(selectbox, value, text ) { var optn = document.createElement("OPTION"); optn.text = text; optn.value = value; selectbox.options.add(optn); } //Write HTML into a div dynamically function writeInnerHTML(target, content,objSwitch) { if (objSwitch) { target.innerHTML = content; } else { if (document.getElementById) { document.getElementById(target).innerHTML = content; } else if (document.all) { document.all[target].innerHTML = content; } else if (document.layers && document.layers[object]) { document.layers[target].document.open(); document.layers[target].document.write(content); document.layers[target].document.close(); } } } //Read HTML out of a div dynamically function readInnerHTML(target) { var content = ""; if (document.getElementById) { content = document.getElementById(target).innerHTML; } else if (document.all) { content = document.all[target].innerHTML; } return content; } //Toggle layer visibility function toggleLayer(target, status) { document.getElementById(target).style.display = status; } //Format any number with commas (ie. 1000 to 1,000) //Decimals are chopped off and then appended at the end function formatWithCommas(number) { //if we have a decimal place... var dec = ''; if (number.indexOf('.')>0) { //chop it off and append it later dec = number.substring(number.indexOf('.'),number.length); number = number.substring(0,number.indexOf('.')); } if (number.length <= 3) { return (number == '' ? '0' : number + dec); } else { var mod = number.length%3; var output = (mod == 0 ? '' : (number.substring(0,mod))); for (i=0 ; i < Math.floor(number.length/3) ; i++) { if ((mod ==0) && (i ==0)) output+= number.substring(mod+3*i,mod+3*i+3); else output+= ',' + number.substring(mod+3*i,mod+3*i+3); } //append decimals to formatted number return (output + dec); } } //Rounds a float to N decimal points function roundToNdp(X, N) { var T = Number("1e" + N); return Math.round(X * T) / T; } //Set a cookie function setCookie(cookieName,cookieValue,expiryDays) { var exdate = new Date(); exdate.setDate(exdate.getDate()+expiryDays); document.cookie=cookieName+ "=" + escape(cookieValue) + ((expiryDays==null) ? "" : ";expires="+exdate); } //Read a cookie function getCookie(cookieName) { if (document.cookie.length>0) { var cookieStart = document.cookie.indexOf(cookieName + "=") if (cookieStart != -1) { cookieStart = cookieStart + cookieName.length + 1; cookieEnd = document.cookie.indexOf(";",cookieStart) if (cookieEnd == -1) { cookieEnd=document.cookie.length; } return unescape(document.cookie.substring(cookieStart,cookieEnd)) } } return null } //Send the user to the login page; called "colourVars()" to help obfuscate it's function function colourVars(hparam) { /* var form = document.forms['navigationform']; form.delegate.value = "login"; form.action.value = "pageredirect"; form.page.value = "login.jsp"; form.submit(); */ //alert(hparam); document.location.replace(document.location.protocol + "//" + document.location.host + "/RealNet/RealInfoController?action=pageredirect&page=login.jsp&delegate=login&hparam=" + hparam); } //Temporary script for demo purposes function parseQueryString(varToFind) { var myURL = document.location.search; var varLength = varToFind.length; var varStartIndex = myURL.indexOf(varToFind+'='); myURL = myURL.substr(varStartIndex,myURL.length); var varValueStartIndex = myURL.indexOf("=") + 1; var varValueEndIndex = myURL.indexOf("&"); if (varValueEndIndex < 0) { varValueEndIndex = myURL.length; } myURL = myURL.substr(varValueStartIndex, (varValueEndIndex-varValueStartIndex)); myURL = myURL.replace(/%20/g,' '); return myURL; } // Calculate the percentage of a price based on a total price function calculatePricePercentage(number, totalPrice) { var percentage = ((number/totalPrice)*100); return (percentage.toFixed(2)); } // Calculate the 100% Equivalent Price function calculateEquivalent(totalPrice, percentageTransferred) { var equivalent = ((totalPrice/percentageTransferred)*100); return (formatWithCommas(equivalent.toFixed(2)+'')); } //converts "YYYY-MM-DD" to "January 2006" or whatever format you'd like //dateNum should be provided as a YYYY-MM-DD format function dateToStringConvert(dateNum, format){ //Profesh To Do: Soft code this to accept different formats of input and return different outputs //Profesh To Do: Write a script that goes the other way var months=new Array("January","February","March","April","May","June","July","August","September","October","November","December"); var monthsShort=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"); var year = dateNum.substring(0,4); var monthStr = dateNum.substring(5,7); if (monthStr.substring(0,1)=="0") { monthStr=monthStr.substring(1,2); } var monthInt = parseInt(monthStr); var newMonth = ""; if (format == "long") { newMonth = months[monthInt - 1]; } else { newMonth = monthsShort[monthInt - 1]; } var dayStr = dateNum.substring(8,10); if (dayStr.substring(0,1)=="0") { dayStr=dayStr.substring(1,2); } newDay = dayStr; var dateString = newMonth + " " + year; return dateString; } //Converts "YYYY-MM-DD" to actual date object for date comparison function stringToDateObjectConvert(dateString) { var year = parseInt(dateString.substring(0,4)); var month = dateString.substring(5,7); //if month starts with a zero, strip it; then make it a number and subtract 1 'cuz months start at 0 month.indexOf("0") == 0 ? month = (parseInt(month.substring(1,2)) - 1) : month = (parseInt(month) - 1); var day = dateString.substring(8,10); //if date starts with a zero, strip it; then make it a number day.indexOf("0") == 0 ? day = parseInt(day.substring(1,2)) : day = parseInt(day); var myDate = new Date(); myDate.setFullYear(year,month,day); myDate.setHours(0); myDate.setMinutes(0); myDate.setSeconds(0); myDate.setMilliseconds(0); return myDate; } //Used mainly on the search form //Placed here instead of formval.js because this is a specific check for this project, and depends on date functions that handle very specific formats for this project //Profesh to do: Consider placing a kind of "isValidRange" function in formval.js in the future that's all nice and soft coded function isValidRange(myFrom,myTo) { //For purposes of comparison, when "blanks" come in for From and To, that means they've been set to "All" //Give these things default values so that they'll come back as a valid range myFrom == "" ? myFrom = 0 : myFrom = myFrom; (myTo == "-1" || myTo == '') ? myTo = 9000000000 : myTo = myTo; if (parseFloat(myFrom) >= parseFloat(myTo)) { return false; } else { return true; } } //Compares to dates in the format "YYYY-MM-DD" by turning them into date objects and comparing them //MUST be in the format YYYY-MM-DD function isValidDateRange(myFrom,myTo) { var myFromObj = stringToDateObjectConvert(myFrom); var myToObj = stringToDateObjectConvert(myTo); if (myFromObj >= myToObj) { return false; } else { return true; } } //Spits out the current date time in YYYY-MM-DD format function curDate() { var myDate = new Date(); var myYear= myDate.getFullYear(); var myMonth = myDate.getMonth(); var myWeekday= myDate.getDate(); var myWeekdayStr; var myMonthStr; if (myWeekday < 10) { myWeekdayStr = "0" + myWeekday; } else { myWeekdayStr = myWeekday; } if (myMonth < 10) { myMonthStr = "0" + myMonthStr } else { myMonthStr = myMonth; } var final = myYear + "-" + myMonthStr + "-" + myWeekdayStr; return final; } //This sets the date picker value when you click the "Last month" or "Last 3 months" radio buttons on Commercial Search //"amount" is a number in days, and "field" is the name of the picker we need to set function setPickerDate(amount,field) { var myDate = new Date(); var pickerTo = dojo.widget.byId(field + 'ToPicker'); var pickerToMonth = Number(myDate.getMonth()) + 1; pickerToMonth < 10 ? pickerToMonth = String("0" + pickerToMonth) : pickerToMonth = pickerToMonth; var pickerToDate = myDate.getDate(); pickerToDate < 10 ? pickerToDate = String("0" + pickerToDate) : pickerToDate = pickerToDate; pickerTo.setDate(myDate.getFullYear() + '-' + pickerToMonth + '-' + pickerToDate); myDate.setDate(myDate.getDate() - amount); var pickerFrom = dojo.widget.byId(field + 'FromPicker'); var pickerFromMonth = Number(myDate.getMonth()) + 1; pickerFromMonth < 10 ? pickerFromMonth = String("0" + pickerFromMonth) : pickerFromMonth = pickerFromMonth; var pickerFromDate = myDate.getDate(); pickerFromDate < 10 ? pickerFromDate = String("0" + pickerFromDate) : pickerFromDate = pickerFromDate; pickerFrom.setDate(myDate.getFullYear() + '-' + pickerFromMonth + '-' + pickerFromDate); } //This clears the date value and resets the picker to the current day; does this to both To and From fields function clearPickerDate(field) { var myDate = new Date(); var pickerTo = dojo.widget.byId(field + 'ToPicker'); var pickerFrom = dojo.widget.byId(field + 'FromPicker'); var pickerEditTo = document.getElementById(field + 'ToEdit'); var pickerEditFrom = document.getElementById(field + 'FromEdit'); var pickerMonth = Number(myDate.getMonth()) + 1; pickerMonth < 10 ? pickerMonth = String("0" + pickerMonth) : pickerMonth = pickerMonth; var pickerDate = myDate.getDate(); pickerDate < 10 ? pickerDate = String("0" + pickerDate) : pickerDate = pickerDate; if (pickerEditTo.value != "") { pickerTo.setDate(myDate.getFullYear() + '-' + pickerMonth + '-' + pickerDate); pickerEditTo.value = ""; } if (pickerEditFrom.value != "") { pickerFrom.setDate(myDate.getFullYear() + '-' + pickerMonth + '-' + pickerDate); pickerEditFrom.value = ""; } } //"Commafy" functions were written by Ahmed, I wish he would document his code :) function commafy (field) { var nStr = field.value; var x = nStr.split('.'); var x1 = x[0]; var x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } field.value = x1 + x2; } function deCommafy (field) { if (field) { field.value = field.value.replace(/,/g, ""); } } function deCommafyArray (fieldIds) { for (i = 0; i < fieldIds.length; i++) { f = document.getElementById(fieldIds[i]); if (f) deCommafy(f); } } function commafyArray (fieldIds) { for (i = 0; i < fieldIds.length; i++) { f = document.getElementById(fieldIds[i]); if (f) // some of the fields in the array may not be there due to sector and market restrictions commafy(f); } } //Lyon Report Functions //Dynamically writes in HTML into the display area to show the Lyon Report Charts //Requires the key name for the chart. Chart should be saved in /content/lyonReport/images/ //and should be named "current-chart-[key name].gif" function loadChart(chart) { var myDisplay = document.getElementById('lyonReportDisplay'); var myContent = '\n'; myContent = myContent + '

Print Report\n'; writeInnerHTML(myDisplay, myContent, true); } //Dynamically writes HTML to load up WMV files. Watch out, might not be cross-browser //compatible, but it works in our client's target browsers // //Requires the file name of the video to load, and the text header that should //appear above it. // //Video should be WMV, w=640 and h=480, stored in /usr/local/tomcat/webapps/realInfoVideoes/ //and should be named "YYYYMMDD-[report name].wmv" function loadVideo(file,header) { var myDisplay = document.getElementById('lyonReportDisplay'); var myContent = '

' + header + '

\n'; //Other stabs at the problem, trying to make this work; left here for posterity // //myContent = myContent + ''; //document.location.href = '../content/lyonReport/video/' + file; //Write out the embed code for the WMV files myContent = myContent + ''; writeInnerHTML(myDisplay, myContent, true); } //Dynamically adds alternating background colours to each row in the tables //contained in the div with the ID specified in the arguments function colourTableRows(myDiv) { var mainDiv = document.getElementById(myDiv); var tables = mainDiv.getElementsByTagName("table"); for(var i = 0; i < tables.length; i++){ var rows = tables[i].getElementsByTagName("tr"); for(var y = 0; y < rows.length; y++){ if(y % 2 != 0){ if (rows[y].className != "") { rows[y].className = rows[y].className + " row2"; } else { rows[y].className = "row2"; } } } } } //functions to handle check and de-check of search results //and pass the vars to the server to store the state /** * @param checkboxForm - the form that has the checkboxes, which should have id of 'recordCheckBox_{id}' * @param actionForm - the form that will be submitted, which should have params "selectedRecords" and "unselectedRecords" - note that the absence of "selectedRecords" param will cause * the form to clear the selected records from memory **/ function handleSelectedRecords(checkboxForm, actionForm){ // alert("handleSelectedRecords:start"); var selected_records = ''; var unselected_records = ''; for (i = 0; i < checkboxForm.elements.length; i++) { var el = checkboxForm.elements[i]; if(el.id.indexOf('recordCheckBox_') == 0){ if (el.checked) { selected_records += el.value + ','; }else{ unselected_records += el.value + ','; } } } actionForm.selectedRecords.value = selected_records; actionForm.unselectedRecords.value = unselected_records; console.log(actionForm.selectedRecords.value); //alert("handleSelectedRecords:end: "+actionForm.selectedRecords.value); //TODO: copy all the csv records to the target form... /** **/ if(checkboxForm.name != actionForm.name){ for(i=0; i