﻿/* FJF.UrlTool v2.1 (20090403) */
//eg:
/*
<script type="text/javascript" src="lib/js/FJF/FJF.js"></script>
<script type="text/javascript" src="lib/js/FJF/Url.js"></script>
<script type="text/javascript" >alert(FJF.Url.getUrl())</script>
*/


if(!FJF){FJF=new Object();}
FJF.Url ={	
	 getUrl						:function(){return self.location.href.toString();}		
	,redirect 					:function(url){if(url){if(document.all){location.href=url;}else{location=url;}}}	
	,encode 					:function(string){return encodeURIComponent(string);}
	,decode 					:function(string){return decodeURIComponent(string);}	
	,getName					:function(url){url=this._chkUrl(url);var ob=this.urlToObject(url);return ob["protocol"]+ob["host"]+ob["path"]+ob["file"];}
	,getQuery					:function(url){url=this._chkUrl(url);var ob=this.urlToObject(url);return ob["query"];}		
	,getParam					:function(key,url){url=this._chkUrl(url);try{key=(url.match(new RegExp(key+'=([^&]*)')))[1];return key}catch(e){return '';}}	
	,addParam					:function(key,value,url){url=this._chkUrl(url);var ob=this.urlToObject(url);var qob=this.queryToObject(ob["query"]);qob[key]=new String(value);ob["query"]=this.objectToQuery(qob);return this.objectToUrl(ob);}
	,removeParam				:function(key,url){url=this._chkUrl(url);url=url.replace(new RegExp('([\?]'+key+'=[^&]*)+([\&])+'),'?');	url=url.replace(new RegExp('([\?]'+key+'=[^&]*)+$'),'');url=url.replace(new RegExp('([\&]'+key+'=[^&]*)+'),'');return url;}
	,replaceParam				:function(key,value,url){url=this._chkUrl(url);url=this.removeParam(key,url);return this.addParam(key,value,url);}	
	,getFragment 				:function(url){url=this._chkUrl(url);var ob=this.urlToObject(url);return ob["hash"].substr(1,ob["hash"].length);}
	,addFragment				:function(value,url){url=this._chkUrl(url);var ob=this.urlToObject(url);ob["hash"]='#'+value;return this.objectToUrl(ob);}
	,removeFragment				:function(url){url=this._chkUrl(url);return url.replace(new RegExp('#[\\S]*'),'');}	
	/*adapter*/
	
	,urlToObject				:function(urlString){urlString=this._chkUrl(urlString);var obj={url:urlString,protocol:"",host:"",path:"",file:"",query:"",hash:""};var reg=/^(http:\/\/|https:\/\/|ftp:\/\/)?([^\/]*)([\S]*)\/([^?&=#]*)?(\?[^#]*)?(#[\S]*)?/;var result=urlString.match(reg);
	
								if(result){			
									if (result[1]){obj["protocol"]=result[1];}
									if (result[2]){obj["host"]=result[2];}
									if(result[3]){obj["path"]=result[3];}
									if(result[4]){obj["file"]=result[4];}
									if(result[5]){obj["query"]=result[5];}
									if(result[6]){obj["hash"]=result[6];}									
								}return obj;}
		
		
	,queryToObject				:function(queryString){var obj=new Object();queryString.replace(new RegExp("([^?=&#]+)(=([^&#]*))?","g"),function($0,$1,$2,$3){obj[$1]=$3;});return obj;}	
	,objectToQuery				:function(qob){var s="";var i =0;for(var key in qob){s+=(i==0)?'?':'&';s+=key+"="+qob[key];i++;}return s;}
	,objectToUrl				:function(ob){var s="";s+=ob["protocol"]+ob["host"]+ob["path"];	if (s.substr(s.length,1)!='/'){s+='/';}s+=ob["file"]+ob["query"]+ob['hash'];return s;}
	,htmlspecialchars			:function(string,quote_style){string = string.toString();string = string.replace(/&/g,'&amp;');string=string.replace(/</g,'&lt;');string=string.replace(/>/g,'&gt;');if(quote_style=='ENT_QUOTES'){string=string.replace(/"/g,'&quot;');string=string.replace(/\'/g,'&#039;');}else if(quote_style!='ENT_NOQUOTES'){string=string.replace(/"/g,'&quot;');}return string;}
	,htmlspecialchars_decode	:function(string,quote_style) {string=string.toString();string=string.replace(/&amp;/g,'&');string=string.replace(/&lt;/g,'<');string=string.replace(/&gt;/g,'>');if(quote_style == 'ENT_QUOTES'){string=string.replace(/&quot;/g,'"');string=string.replace(/&#039;/g,'\'');}else if(quote_style!='ENT_NOQUOTES'){string=string.replace(/&quot;/g,'"');}return string;}

	/*private*/
	,_chkUrl					:function (url){if(!url || url==undefined || url==null || url==""){url=this.getUrl();}return url;}	
	
	/*deprecated(for old version under 1.4)*/
	,getParamArr				:function(url){url=this._chkUrl(url);var ob=this.urlToObject(url);return this.queryToArray(ob["query"])}	
	,queryToArray				:function(queryString){var arr=new Array();queryString.replace(new RegExp("([^?=&#]+)(=([^&#]*))?","g"),function($0,$1,$2,$3){arr.push([$1,$3]);});return arr;}	
}