/** * Teeko Framework AJAX Javascript library * * @copyright (C) 2009 Webisti Oy. All rights reserved * @version 1.0 * @author Tomi Tuovinen */ var PRELOADER_TIMEOUT = 400; var XHR; function Cursor(pointer) { try { document.body.style.cursor = pointer; } catch(ex) {} } function Refresh(dest) { var lastAction = $("#"+dest).attr('lastaction'); var lastArgs = $("#"+dest).attr('lastargs'); Request(lastAction, {'dest':dest, method:'post'}, lastArgs ); } function Request(act, parms, args, copyElementValue, returnXHR) { //var urlquery = location.href.split("?"); //var urlterms = urlquery[1].split(","); //var site = urlterms[0].split("="); //var site_id = site[1]; hash.clicked = true; var args_str = ""; if(typeof parms === 'string') { parms = eval('(' + parms + ')'); } if(typeof args === 'string') { // Check if it is json array if(args.substring(0,1) == '{' && args.substring(args.length-1,args.length) == '}') { args = eval('(' + args + ')'); } else if($('#'+args).length > 0) { // if its element // If its FORM if($('#'+args).attr('tagName') == 'FORM') { args = $('#'+args).serializeArray(); } else { var svalue = $('#'+args).attr('value'); var sname = $('#'+args).attr('name'); var sid = $('#'+args).attr('id'); args = '{"'+sname+'":"'+svalue.replace(/(\")/g, '”').replace(/<(.|\n)*?>/g, '')+'"}'; } } } var smethod = parms['method']; var destination = parms['dest']; var append = parms['append']; var get_dataType = parms['datatype']; if(!get_dataType) get_dataType = 'html'; if($("#"+destination).data('loading') !== undefined ) { XHR.abort(); $("#"+destination).preloader(); } // $("#"+destination).attr('lastaction', act); // $("#"+destination).attr('lastargs', args); var vasync = parms['async']; try { if(typeof args === 'object') { args = JSON.stringify(args); } if(typeof args !== 'undefined') { args_str = "args=" + encodeURIComponent($.base64.encode(args)); } var surl = ""; if(act.indexOf('http://') == -1) { // surl = 'index.php?ajax&act='+act; surl = 'template/'+act; } else { surl = act; } // args_str += '&ajax&act='+act; var success_function = function(data, status) { try { hash.clicked = false; if(destination) { if(data !== 'false') { if(append == 'true') { // DEBUG: Tää pitäis olla vaan väliaikanen ratkaisu eli kun alunperin // oon tehny niin et annetaan vaan elementin id ilman # merkkiä // niin se tarkoittaa sitä et esim. bodylle ei voi määritellä mitään koska // siihenki tulee se # merkki ja ei sais koska se ei oo id joten piti tehä niin // et tarkistetaan eka id onko siin edessä - merkkiä ja ei laiteta sitten # merkkiä jos on // tätä käytetään getelementclasses.js luokassa!! if(destination.substring(0,1) == '-') { if(typeof data === 'object') { $(destination.substring(1,destination.length)).append(data.css); $(destination.substring(1,destination.length)).append(data.js); $(destination.substring(1,destination.length)).append(data.html); } else $(destination.substring(1,destination.length)).append(data); } else { if(typeof data === 'object') { $("#"+destination).append(data.css); $("#"+destination).append(data.js); $("#"+destination).append(data.html); } else { $("#"+destination).append(data); } } } else { // $("#"+destination+" > *").remove(); $("#"+destination).empty(); if(typeof data === 'object') { $("#"+destination).html(data.css); $("#"+destination).append(data.js); $("#"+destination).append(data.html); } else { $("#"+destination).html(data); } } if(STARTED_TO_EDIT_PAGE == true) { StartToEditElements(); } // HistoryHandler(); $("#"+destination).preloader(); $("#"+destination).removeData('loading'); /* clearTimeout($("#"+destination).attr('preloader')); $("#"+destination).removeAttr('loading'); */ } } // If custom successFunction is defined then eval it if(parms['successFunction']) { // DEBUG Tässäkään ei pitäis olla erikseen successfunctionparameters kohtaa // vaan successfunctioon tulee ne ihan vaan samalla tavalla ku functio kutsu // eli successFunction:Ajataa('moro','hei'); if(!parms['successFunctionParameters']) { if(parms['successFunction'].substr(parms['successFunction'].length - 1) == ')') { eval(parms['successFunction']); } else { eval(parms['successFunction']+'()'); } } else { eval(parms['successFunction']+'(data,"'+parms['successFunctionParameters']+'")'); } } GetElementClasses("#"+destination); } catch(ex) { Error('CRITICAL','success_function', ex.message); } } $("#"+destination).data('loading',true); switch(smethod) { case 'get': case 'post': Cursor('Wait'); /* if($('#loading_animation').length > 0) $("#"+destination).attr('preloader', setTimeout( function() { $('#loading_animation').clone().css('opacity','0').show(1).appendTo("#"+destination).animate({opacity:$('#loading_animation').css('opacity')},400); }, PRELOADER_TIMEOUT)); */ $("#"+destination).preloader(PRELOADER_TIMEOUT); break; } if(args_str) surl += "&" + args_str; XHR = $.ajax({ async: vasync, type: smethod, url: surl, // data: args_str, contentType: "text/html; charset=utf-8", dataType: get_dataType, success: success_function, error: function (XMLHttpRequest, textStatus, errorThrown) { // if(XMLHttpRequest.status != 200) // { Error('CRITICAL','error', "ajax.js .ajax function Error - HTML status code: " + XMLHttpRequest.status); // } } }); Cursor('auto'); } catch(ex) { Error('CRITICAL','success_function',ex.message); } }