var FK_xmlHttp;
var eval_str="";
var format = "";

		function FK_createXHR(){
			if (window.XMLHttpRequest) { //IE7、Mozilla、Safari、Firefox...
				FK_xmlHttp = new XMLHttpRequest();
				if(FK_xmlHttp.overrideMimeType){
					FK_xmlHttp.overrideMimeType('text/xml');
				}
			}else if (window.ActiveXObject) {//IE6
			
				FK_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			if (!FK_xmlHttp) {
				
				return false;
			}
		}

		function FK_readRequest(url,method,url_str,evalstr,formattype){
			format=formattype;
			eval_str = evalstr;
			if(formattype != ""){
				sUrl = 'proxy.php?url=' + encodeURIComponent( url+"&format="+formattype);
			}else{
				sUrl = 'proxy.php?url=' + encodeURIComponent( url);
			}
			FK_createXHR();
			FK_xmlHttp.open(method,sUrl,true);//method = POST or GET
			FK_xmlHttp.onreadystatechange=FK_callback;
			if(method == "POST"){
				FK_xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //for POST
			}
			FK_xmlHttp.send(url_str); 
		}

		function FK_callback(){
			if (FK_xmlHttp.readyState==4){
				if(format == "json"){
					xml_str=FK_xmlHttp.responseText;
					jsonStr = xml_str.split("jsonFlickrApi");
					var obj = eval (jsonStr[1]);
				}else{
					Xmlobj=FK_xmlHttp.responseXML; 
					if(Xmlobj.childNodes.length == 0 ){ 
						//for ie7 或不能正常解析PHP產生的XML,改抓text在轉xml
						xml_text=FK_xmlHttp.responseText;
						var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
						xmlDoc.async=false;
						xmlDoc.loadXML(xml_text);
						Xmlobj = xmlDoc;
					}
				}
				if(eval_str != ""){eval(eval_str);}
			}
		}
		
		function FK_getNodeContent(xmldoc,key) {
			var na=[],va=[],l;
			key=(typeof key=='undefined')?FK_getNodeName(xmldoc,false):key;

			for (var i=0;i<xmldoc.getElementsByTagName(key).length;i++){
				var xml=xmldoc.getElementsByTagName(key)[i];
				na=FK_getNodeName(xml,true);

				for (var j=0;j<na.length;j++){
					var xmlk=xml.getElementsByTagName(na[j]);
					for (var k=0;k<xmlk.length;k++){
						l=Math.max(va.length,va.length-1);
						if(xmlk[k].hasChildNodes()){
							nValue = xmlk[k].childNodes[0].nodeValue;
						}else{
							nValue = "";
						}
						va[l]=[na[j],nValue,xmlk[k]];
						//ex:pa=getNodeContent(xobj,'auth');->pa[0~n][0~2]
						//0:the node's tagName, 1:nodeValue 2: node object
						//if want get Attribute ex:pa[0][2].getAttribute(AttributeName);
					}
				}
			}
			return va
		}

		function FK_getNodeName(xmldoc,duplicate){
			var d;
			var na=[];

			d=(typeof duplicate=='undefined')?true:duplicate;
			for (var i=0;i<xmldoc.childNodes.length;i++){
				if (xmldoc.childNodes[i].tagName != undefined){
					na=na.concat(xmldoc.childNodes[i].tagName);
				}
			}
			na=(d)?na:na.unique();

			return na
		}
