F.API={};F.API.callMethod=function(B,L,C,E,N,K,G,Q){if(_qs_args.APIdelayMS){Q=_qs_args.APIdelayMS}var R={};if(typeof L=="object"){for(var J in L){R[J]=L[J]}}R.method=B;var D=(G)?0:1;var S="/services/rest/";if(K){S=K+S}R.src="js";R.api_key=global_magisterLudi;R.auth_hash=global_auth_hash;R.auth_token=global_auth_token;R.cb=new Date().getTime();var O=[];var I="";for(var J in R){if(J=="RESTURL"){continue}R[J]=R[J];O.push(J);I+="&"+J+"="+escape_utf8(R[J])}O.sort();var H=global_flickr_secret;if(H!=""&&window.md5_calcMD5){for(var P=0;P<O.length;P++){H+=O[P]+R[O[P]]}H=md5_calcMD5(H);I="api_sig="+H+I}R.RESTURL=I;var N=(N==undefined)?1:N;var A=new XMLHttpRequest();var M={};if(D){F.eb_add(M);M.window_onbeforeunload=function(T){F.eb_remove(M);A.onreadystatechange=function(){};A.abort();if(T&&typeof F.API=="object"){F.API.handleResponse(null,B,R,"Action cancelled by window unload. Try again please!",C)}}}R.timer_index=_page_timer.add("before api call "+R.method);if(A){A.onreadystatechange=function(){if(A.readyState==4){if(A.responseText==""&&N<2){N++;A.abort();F.API.callMethod(B,R,C,E,N,K,D)}else{F.eb_remove(M);if(typeof F.API=="object"){F.API.handleResponse(A.responseXML,B,R,A.responseText,C)}}this.onreadystatechange=null}};if(E){S=E}A.open("POST",S,D);A.setRequestHeader("Content-Type","application/x-www-form-urlencoded");if(D&&Q){if(_qs_args.no_api_debug!="1"){writeAPIDebug("delaying API call "+Q+" milliseconds for "+S+"?"+I)}setTimeout(function(){if(_qs_args.no_api_debug!="1"){writeAPIDebug(S+"?"+I)}A.send(I)},Q)}else{if(_qs_args.no_api_debug!="1"){writeAPIDebug(S+"?"+I)}A.send(I)}if(!D){this.handleResponse(A.responseXML,B,R,A.responseText,C)}}return A};F.API.getCallBackName=function(A){return A.split(".").join("_")+"_onLoad"};F.API.handleResponse=function(responseXML,APIMethod,params,responseText,listener){if(params.format=="json"){var success=0;var jsonFlickrApi=function(rsp){if(rsp.stat=="ok"){success=1}responseXML=rsp};try{eval(responseText)}catch(e){}}else{if(!responseXML){var success=(responseText.indexOf('<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="ok">')==0)?true:false}else{if(navigator.userAgent.indexOf("Gecko")>-1&&!F.is_safari){responseXML=F.str_to_XML(responseText)}var success=(responseXML.documentElement&&responseXML.documentElement.getAttribute("stat")=="ok")?true:false}}if(success){if(_qs_args.no_api_debug!="1"){writeAPIDebug(responseText)}}else{writeAPIDebug(responseText+"\r"+_uber_toString(params))}if((window.global_rper&&!success)||_qs_args.rper=="1"){var code="";var msg="";var rsp_str="";if(responseXML&&responseXML.documentElement){if(responseXML.documentElement.getElementsByTagName("err")){var err=responseXML.documentElement.getElementsByTagName("err")[0];if(err){code=err.getAttribute("code");msg=err.getAttribute("msg");rsp_str=responseText}}}F.fragment_getter.get("/report_error.gne",{report:"api_err",json_str:JSON.stringify({req_params:params,success:success,code:code,rsp_str:rsp_str,user_nsid:window.global_nsid,user_name:window.global_name,agent:navigator.userAgent})},{rp:function(){}},"rp")}_page_timer.add("after api call "+params.method);_page_timer.dump(params.timer_index);listener=(listener)?listener:this;if(typeof listener[this.getCallBackName(APIMethod)]=="function"){listener[this.getCallBackName(APIMethod)](success,responseXML,responseText,params)}else{if(typeof listener.generic_api_onLoad=="function"){listener.generic_api_onLoad(success,responseXML,responseText,params)}}};F.fragment_getter={};F.fragment_getter.get=function(B,I,E,C,O,H,L,J){if(typeof I!="object"){I={}}var G=(L)?0:1;var N=B;if(H){N=H+N}if(B&&B.indexOf("?")==-1){var A="?src=js"}else{var A="&src=js"}for(var D in I){A+="&"+D+"="+escape_utf8(I[D])}A+="&cb="+new Date().getTime();I.RESTURL=N+A;var O=(O==undefined)?1:O;var K=new XMLHttpRequest();if(K){K.onreadystatechange=function(){if(K.readyState==4){if(K.responseText==""&&O<1){O++;K.abort();F.fragment_getter.get(B,I,E,C,O,H,L,J)}else{F.fragment_getter.handleResponse(C,I,K.responseText,E)}this.onreadystatechange=null}};var M=A.length>1000||window.page_always_post_fragment_requests;if(M){K.open("POST",N,G)}else{K.open("GET",N+A,G)}K.setRequestHeader("Content-Type","application/x-www-form-urlencoded");if(G&&J){setTimeout(function(){if(M){K.send(A)}else{K.send(null)}},J)}else{if(M){K.send(A)}else{K.send(null)}}}};F.fragment_getter.handleResponse=function(A,E,D,C){C=(C)?C:this;if(_qs_args.no_api_debug!="1"){writeAPIDebug(D)}try{C[A](1,D,E)}catch(B){}};var escape_utf8=function(H){if(H===""||H===null||H===undefined){return""}H=H.toString();var B="";for(var E=0;E<H.length;E++){var I=H.charCodeAt(E);var D=new Array();if(I>65536){D[0]=240|((I&1835008)>>>18);D[1]=128|((I&258048)>>>12);D[2]=128|((I&4032)>>>6);D[3]=128|(I&63)}else{if(I>2048){D[0]=224|((I&61440)>>>12);D[1]=128|((I&4032)>>>6);D[2]=128|(I&63)}else{if(I>128){D[0]=192|((I&1984)>>>6);D[1]=128|(I&63)}else{D[0]=I}}}if(D.length>1){for(var C=0;C<D.length;C++){var A=D[C];var G=nibble_to_hex((A&240)>>>4)+nibble_to_hex(A&15);B+="%"+G}}else{if(encodeURIComponent&&typeof encodeURIComponent=="function"){B+=encodeURIComponent(String.fromCharCode(D[0]))}else{B+=(String.fromCharCode(D[0]))}}}return B};var nibble_to_hex=function(A){var B="0123456789ABCDEF";return B.charAt(A)};