var url = ("http://i-possible.com.au/clicktocall/"); var accountID = '' var methodCalls = new Object(); var callActive; // Set Netscape up to run the "captureMousePosition" function whenever // the mouse is moved. For Internet Explorer and Netscape 6, you can capture // the movement a little easier. if (document.layers) { // Netscape document.captureEvents(Event.MOUSEMOVE); document.onmousemove = captureMousePosition; } else if (document.all) { // Internet Explorer document.onmousemove = captureMousePosition; } else if (document.getElementById) { // Netcsape 6 document.onmousemove = captureMousePosition; } // Global variables xMousePos = 0; // Horizontal position of the mouse on the screen yMousePos = 0; // Vertical position of the mouse on the screen xMousePosMax = 0; // Width of the page yMousePosMax = 0; // Height of the page function captureMousePosition(e) { if (document.layers) { // When the page scrolls in Netscape, the event's mouse position // reflects the absolute position on the screen. innerHight/Width // is the position from the top/left of the screen that the user is // looking at. pageX/YOffset is the amount that the user has // scrolled into the page. So the values will be in relation to // each other as the total offsets into the page, no matter if // the user has scrolled or not. xMousePos = e.pageX; yMousePos = e.pageY; xMousePosMax = window.innerWidth+window.pageXOffset; yMousePosMax = window.innerHeight+window.pageYOffset; } else if (document.all) { // When the page scrolls in IE, the event's mouse position // reflects the position from the top/left of the screen the // user is looking at. scrollLeft/Top is the amount the user // has scrolled into the page. clientWidth/Height is the height/ // width of the current page the user is looking at. So, to be // consistent with Netscape (above), add the scroll offsets to // both so we end up with an absolute value on the page, no // matter if the user has scrolled or not. xMousePos = window.event.x+document.body.scrollLeft; yMousePos = window.event.y+document.body.scrollTop; xMousePosMax = document.body.clientWidth+document.body.scrollLeft; yMousePosMax = document.body.clientHeight+document.body.scrollTop; } else if (document.getElementById) { // Netscape 6 behaves the same as Netscape 4 in this regard xMousePos = e.pageX; yMousePos = e.pageY; xMousePosMax = window.innerWidth+window.pageXOffset; yMousePosMax = window.innerHeight+window.pageYOffset; } } function generateGuid() { var result, i, j; result = ''; for(j=0; j<32; j++) { if( j == 8 || j == 12|| j == 16|| j == 20) result = result + '-'; i = Math.floor(Math.random()*16).toString(16).toUpperCase(); result = result + i; } return result; } function ServerCall(functionName, functionParams, delegateResponse) { var method = new Object method.Image = new Image(); method.ID = generateGuid(); var property, propCollection = ""; for(property in functionParams) { propCollection += "&" + property + "=" + functionParams[property]; } method.name = functionName; method.parameters = functionParams; method.url = url + "widget/rpc.aspx?fn=" + functionName + propCollection + "&Key=" + accountID method.getReturnValue = function() { return this.Image.width; } method.callBack = function() { delegateResponse(method); } if (method.Image.addEventListener) { method.Image.addEventListener ("load", method.callBack,false); } else if (method.Image.attachEvent) { method.Image.attachEvent ("onload",method.callBack); } else { method.Image.onload = method.callBack; } methodCalls[method.ID] = method; method.Image.src = method.url; return method; } function TestResponse(method) { alert(method.url + " Response: " + method.getReturnValue()); } function TestFunction(first,second){ var Parameters = new Object(); Parameters.First = first; Parameters.Second = second; testMethod = ServerCall("MyTest", Parameters, TestResponse); } function responsePlaceCall(method) { var callout = document.getElementById("c2c_container"); var status = document.getElementById("c2c_status"); var number = document.getElementById("c2c_number"); var button = document.getElementById("c2c_button"); if (method.getReturnValue() == 1) { status.style.color='#000000'; status.innerHTML = "Please wait for connection.."; number.disabled = 'disabled'; setButtonHangup(); callActive.TimerID = setTimeout("CheckCallStatus()", 4000); } else { status.style.color='#FF0000'; status.innerHTML = "Sorry, your call could not be connected."; number.disabled = ''; setButtonCall(); callActive = null; } } function PlaceCall(number){ var Parameters = new Object(); var CallID = generateGuid(); callActive = new Object(); callActive.CallID = CallID; Parameters.Number = number; Parameters.CallID = CallID; methodPlaceCall = ServerCall("PlaceCall", Parameters, responsePlaceCall); } function responseCheckCallStatus(method) { var callout = document.getElementById("c2c_container"); var status = document.getElementById("c2c_status"); var number = document.getElementById("c2c_number"); var button = document.getElementById("c2c_button"); if (method.getReturnValue() == 1) { status.style.color='#000000'; status.innerHTML = "Call connected."; callActive.TimerID = setTimeout("CheckCallStatus()", 4000); } else if (method.getReturnValue() == 2) { callActive.TimerID = setTimeout("CheckCallStatus()", 4000); } else { status.style.color='#000000'; status.innerHTML = "Call ended."; number.disabled = ''; setButtonCall(); clearTimeout(callActive.TimerID) callActive = null; } } function CheckCallStatus() { if (callActive != null) { var Parameters = new Object(); Parameters.CallID = callActive.CallID; methodPlaceCall = ServerCall("CheckCallStatus", Parameters, responseCheckCallStatus); } } function showCallout() { var offsetx = -5; var offsety = -33; var position = 0; var callout = document.getElementById("c2c_container"); var calloutform = document.getElementById("c2c_form"); // choose whether to use callout to the left or right if ((xMousePos + offsetx) + 280 > xMousePosMax) { position = 1 // to the left } switch (position) { case 0: // right offsetx = -5; offsety = -33; callout.style.left = xMousePos + offsetx; callout.style.top = yMousePos + offsety; callout.style.backgroundImage = 'url(http://i-possible.com.au/clicktocall/widget/themes/default/images/right_background.png)'; calloutform.style.left = 55; calloutform.style.top = 10; break; case 1: //left offsetx = -272; offsety = -33; callout.style.left = xMousePos + offsetx; callout.style.top = yMousePos + offsety; callout.style.backgroundImage = 'url(http://i-possible.com.au/clicktocall/widget/themes/default/images/left_background.png)'; calloutform.style.left = 13; calloutform.style.top = 10; break; } callout.style.display = ''; } function closeCallout() { var callout = document.getElementById("c2c_container"); callout.style.display = 'none'; } function replaceElements() { var clicktocallElements = document.getElementsByTagName("clicktocall"); //alert("Length: " + clicktocallElements.length); tagBody = document.getElementsByTagName("body")[0]; var sMatch; //alert(tagBody.innerHTML.match("<\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll].*?<\s*/\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll]\s*>")); while ((sMatch = tagBody.innerHTML.match("<\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll].*?<\s*/\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll]\s*>")) != null) { sMatch = new String(sMatch); var sOpenTag, sCloseTag, sInnerHTML; sOpenTag = new String(sMatch.match("^<\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll].*?>")); sCloseTag = new String(sMatch.match("<\s*/\s*[Cc][Ll][Ii][Cc][Kk][Tt][Oo][Cc][Aa][Ll][Ll]\s*>$")); sInnerHTML = sMatch.substring(sOpenTag.length, (sMatch.length - sCloseTag.length)); // alert(sInnerHTML); // Replace the orginal string with our new one tagBody.innerHTML = tagBody.innerHTML.replace(sMatch,"" + sInnerHTML + ""); } //alert(tagBody.innerHTML); } function drawCallout () { document.write("
"); } function calloutCall() { if (callActive == null) { var callout = document.getElementById("c2c_container"); var status = document.getElementById("c2c_status"); var number = document.getElementById("c2c_number"); var button = document.getElementById("c2c_button"); if (number.value.length == 0) { status.style.color='#ff0000'; status.innerHTML = "We need a number to call you on."; } else if (number.value.search(/^(\(0\d{1}\))|(0\d{1})([- ]?\d){8}$/) < 0) { status.style.color='#ff0000'; status.innerHTML = "Enter a valid Australian number."; } else { status.style.color='#000000'; status.innerHTML = "Calling you now.."; number.disabled = 'disabled'; button.style.visibility = 'hidden'; PlaceCall(number.value); } } else { var Parameters = new Object(); Parameters.CallID = callActive.CallID; var callout = document.getElementById("c2c_container"); var status = document.getElementById("c2c_status"); var number = document.getElementById("c2c_number"); status.style.color='#000000'; status.innerHTML = "Hanging up.."; number.disabled = 'disabled'; methodPlaceCall = ServerCall("HangupCall", Parameters, responseHangup); setButtonHangup(); } } function setButtonCall() { var button = document.getElementById("c2c_button"); button.src = 'http://i-possible.com.au/clicktocall/widget/themes/default/images/call.png'; button.style.visibility = ''; } function setButtonHangup() { var button = document.getElementById("c2c_button"); button.src = 'http://i-possible.com.au/clicktocall/widget/themes/default/images/hangup.png'; button.style.visibility = ''; } function responseHangup (method) { var callout = document.getElementById("c2c_container"); var status = document.getElementById("c2c_status"); var number = document.getElementById("c2c_number"); var button = document.getElementById("c2c_button"); status.style.color='#000000'; status.innerHTML = "Call ended."; number.disabled = ''; setButtonCall(); callActive = null; } if (window.addEventListener) { window.addEventListener ("load", replaceElements,false); } else if (window.attachEvent) { window.attachEvent ("onload",replaceElements); } else { window.onload = replaceElements; } drawCallout();