var isConnecting = 0; var url = 'controller.php'; function preparePage ( ) { // remove all elements that have the 'cc_nojs' class $(".cc_nojs").remove(); } function prepareCartPage ( step ) { preparePage(); switch (step) { case -1: // empty cart $(".cc_connect").unbind().css("backgroundColor","#AAA"); $(".cc_payment").unbind().css("backgroundColor","#AAA"); break; case 0: // payment not started $(".cc_connect").hover( function () { $(this).css("cursor", "pointer") }, function () { $(this).css("cursor", "auto") }); $(".cc_payment").unbind().css("backgroundColor","#AAA"); break; case 1: // token from PayPal received $(".cc_connect").unbind().css("backgroundColor","#AAA"); $(".cc_payment").hover( function () { $(this).css("cursor", "pointer") }, function () { $(this).css("cursor", "auto") }); break; case 2: // paid and done $(".cc_connect").unbind().css("backgroundColor","#AAA").text("Connection Closed"); $(".cc_payment").unbind().css("backgroundColor","#AAA").text("Payment Confirmed"); break; default: alert("Unexpected value for 'step' (" + step + ") in prepareCartPage."); } } function updateCheckoutButton ( ) { prepareCartPage(0); $(".cc_connect").unbind(); $(".cc_connect").bind('mouseup', function(e) { changeCart(); }).text("Update Cart"); } function prepareProductPage() { preparePage(); // set the options that are selected in the cart /* if( selectedOptions ) { var opts = selectedOptions.split(','); for( var i = 0; i < opts.length; i++ ) { tmpid = 'option' + (i+1) + 'Sel_' + prodId; var e = document.getElementById(tmpid); if( e ) { for( var j = 0; j < e.length; j++ ) { if( e.options[j].value == opts[i] ) { e.options[j].selected = true; break; } } } } } // set quantity that is set if( cartQty ) { var e = document.getElementById('quantitySel_' + prodId); if( e ) { e.value = cartQty; } } */ } function add ( prodid, grpid ) { // get all form fields, string->json conversion with eval() var fields = $("input"); var post = "({"; for( var i = 0; i < fields.length; i++ ) { post += fields[i].name + ":'" + fields[i].value + "',"; } fields = $("select"); for( i = 0; i < fields.length; i++ ) { post += fields[i].name + ":'" + fields[i].value + "',"; } // get possible cartid from query string -- no necessary, cartid is hidden form field //result = window.location.search.match(/cartid=(\w+)(?:&|$)/); //if( result != null) { // post += " cartid:'" + result[1] + "',"; //} post += "task:'add', ajax:'1',productid:'" + prodid + "',groupid:'" + grpid + "'})"; $.post(url, eval(post), function(data){ processData(data); }, 'text'); } function popUpMsg ( msg ) { popUp(); $("#cc_popupdiv").html(" " + "

" + msg + "

"); } function popUp ( ) { var myDiv = document.getElementById('cc_popupdiv'); var width = 300; if( !myDiv ) { myDiv = document.createElement("div"); myDiv.id = "cc_popupdiv"; myDiv.style.position = "absolute"; myDiv.style.textAlign = "center"; myDiv.style.backgroundColor = "#FFCC80"; myDiv.style.border = "thin solid #0000FF"; document.body.appendChild(myDiv); } // position (window may have scrolled or changed size since last use) myDiv.style.top = width/3 + (document.all ? document.body.scrollTop : window.pageYOffset); myDiv.style.left = document.body.clientWidth/2 - width/2; } function connectPP ( myUrl ) { if( isConnecting == 1 ) { return; } else { isConnecting = 1; } // disable all input elements $("input").attr("disabled","disabled"); // show something, because this takes a while popUpMsg("Connecting to PayPal, please wait..."); window.defaultStatus = "Connecting to PayPal, please wait..."; $.post(myUrl, { ajax:'1' }, function(data){ processData(data); }, 'text'); } function confirmPP ( myUrl ) { if( isConnecting == 1 ) { return; } else { isConnecting = 1; } // show something, because this takes a while popUpMsg("Connecting to PayPal again, please wait..."); window.defaultStatus = "Connecting to PayPal, please wait..."; $.ajaxSetup( { timeout: 30000 } ); $.post(myUrl, { ajax:'1' }, function(data){ processData(data); }, 'text'); } // ajax data returned from the server function processData ( data ) { isConnecting = 0; if (data == '') { alert("Ajax call did not return any data."); return; } // sometimes providers add garbage, lets clean up var start = data.search(/htmlblock\n|url\n|refresh\n/); if( start == -1 ) { start = 0; } switch (data.slice(start, data.indexOf('\n', start))) { case 'url': location.replace(data.slice(data.indexOf('\n', start) + 1)); popUp("Connecting, please wait..."); break; case 'htmlblock': popUp(); $("#cc_popupdiv").fadeIn('fast'); $("#cc_popupdiv").html( data.slice(data.indexOf('\n', start) + 1) ); $("#cc_popupdiv").fadeOut(3000); break; case 'refresh': window.location.reload(); break; default: alert("Ajax call returned data that can not be handled: " + data); } } function changeCart ( ) { // string->json conversion with eval() var fields = $(":input"); var post = "({"; for( var i = 0; i < fields.length; i++ ) { post += fields[i].name + ":'" + fields[i].value + "',"; } post += " task : 'update', ajax : '1'})"; $.post(url, eval(post), function(data){ processData(data); }, 'text'); } function removeProd ( id ) { $.post(url, { task: 'remove', ajax : '1', cartid: id }, function(data){ processData(data); }, 'text'); } ///// only private functions below this line ///// function getOptionsValue ( e ) { if( e != null ) { var idx = e.selectedIndex; // if no availble option selected -> return value of first option if (idx == -1 ) idx = 0; return e.options[idx].value; } // if there are no options, return -1 return -1; } // if a third parametr is set to true, the query is appended, not replaced function makeUrl ( url, task ) { var u = (url != '' ? url : window.location.href); if( task.charAt(0) != '?' ) { task = '?' + task; } if( u.lastIndexOf('?') == -1 ) { u += task; } else { if( arguments.length > 2 && arguments[2]) { // append with & u += task.replace(/\?/, '&'); } else { // replace u = u.replace(/\?[^?]*$/, task); } } return u; }