// <![CDATA[
/* tools - PeexMe common JavaScript
 * Copyright (C) 2009 MEETIC
 * 
 * date: 20090212
 * version 0.1
 * 
 * required JS library:
 * JQuery library : /javascript/inc/jquery.js
 * 
 */

/**************************************************/
/*                     TOOLS                      */
/**************************************************/
String.prototype.nl2br = function(){
	return this.replace(/(\r\n|\r|\n)/g, "<br />");
};

String.prototype.br2nl = function(){
	return this.replace(/<br( \/)?>/g, "\n");
};

String.prototype.stripnl = function(){
	return this.replace(/(\r\n|\r|\n)/g, "");
};

String.prototype.trim = function(){
	return this.replace(/^\\s*/, "").replace(/\\s*$/, "");
};

String.prototype.stripHTML = function(){
	return this.replace(/<(?:.|\s)*?>/g, "");
};

String.prototype.htmlspecialchars = function() {
	return this.split("<").join("&lt;").split(">").join("&gt;");
};

String.prototype.specialcharshtml = function() {
	return this.split("&lt;").join("<").split("&gt;").join(">");
};

$.extend({
	nl2br: function(str){
		return str.replace(/(\r\n|\r|\n)/g, "<br />");
	},
	br2nl: function(str){
		return str.replace(/<br( \/)?>/g, "\n");
	},
	stripnl: function(str){
		return str.replace(/(\r\n|\r|\n)/g, "");
	},
	striphtml: function(str){
		return str.replace(/<(?:.|\s)*?>/g, "");
	},
	htmlspecialchars: function(str){
		return str.split("<").join("&lt;").split(">").join("&gt;");
	},
	specialcharshtml: function(str){
		return str.split("&lt;").join("<").split("&gt;").join(">");
	}
});

$.fn.extend({
	maxchar: function(maxi){
		if(typeof maxi == "undefined") maxi = 159;
		var v = $(this).val();
		if(v.length > maxi) {
			$(this).val(v.slice(0, maxi));
		}
	},
	maxwordlength: function(maxi){
		if(typeof maxi == "undefined") maxi = 50;
		var sep = " ";
		var v = $(this).val();
		var final = v;
		if(v.length > maxi) {
			final = "";
			var rtab = v.split(/\s/gi);
			$.each(rtab, function(i, val){
				var tempval = val;
				while(tempval.length > maxi) {
					final += tempval.substring(0, maxi) + sep;
					tempval = tempval.substring(maxi, tempval.length);
				}
				final += tempval + (i < rtab.length-1 ? sep : "");
			});
		}
		$(this).val(final);
	}
});

function ejs_nodroit(){
	return(false);
}

/**************************************************/
/*                    COOKIES                     */
/**************************************************/

function setCookie(name, value) {
	var argv=setCookie.arguments;
	var argc=setCookie.arguments.length;
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	var args=((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
		((path==null) ? "" : ("; path="+path))+
		((domain==null) ? "" : ("; domain="+domain))+
		((secure==true) ? "; secure" : "");
//	document.cookie = name+"="+escape(value)+args;
	var val = escape(value);
	var n = 0;
	var maxi = 4096;
	while(val.length) {
		var nam = (n) ? name+n : name;
		var m = maxi-nam.length;
		var toobig = (val.length > m);
		document.cookie=nam+"="+(toobig ? val.substring(0, m) : val)+args;
		val = (toobig) ? val.substring(m, val.length) : "";
		n++;
	}
}

function getCookieVal(offset) {
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr==-1)
		endstr=document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function getCookie(name) {
	var val = "";
	var newval = "";
	var n = 0;
	while(newval != null) {
		var nam = (n) ? name+n : name;
		newval = readCookie(nam);
		if(newval != null) {
			val = val + newval;
		}
		else {
			val = (val == "") ? null : val;
		}
		n++;
 	}
 	return val;
}

function readCookie(name) {
	var arg=name+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var i=0;
	while (i<clen) {
		var j=i+alen;
		if (document.cookie.substring(i, j)==arg) {
			return getCookieVal (j);
		}
		i=document.cookie.indexOf(" ",i)+1;
		if (i==0) break;
	}
	return null;
}

function deleteCookie(name) {
	var argv=deleteCookie.arguments;
	var argc=deleteCookie.arguments.length;
	var path=(argc > 1) ? argv[1] : null;
	var domain=(argc > 2) ? argv[2] : null;
	var args=((path==null) ? "" : ("; path="+path))+
		((domain==null) ? "" : ("; domain="+domain))+
		";expires=Thu, 01-Jan-1970 00:00:01 GMT";
	var val = "";
	var n = 0;
	while(val != null) {
		var nam = (n) ? name+n : name;
		val = getCookie(nam);
		document.cookie=nam+"="+args;
		n++;
	}
}

/**************************************************/
/*                  getURLParam                   */
/**************************************************/
/* Copyright (c) 2006 Mathias Bank (http://www.mathias-bank.de)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * Thanks to Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
 */
jQuery.extend({
/**
* Returns get parameters.
*
* If the desired param does not exist, null will be returned
*
* @example value = $.getURLParam("paramName");
*/ 
 getURLParam: function(strParamName){
	  var strReturn = "";
	  var strHref = window.location.href;
	  var bFound=false;
	  
	  var cmpstring = strParamName + "=";
	  var cmplen = cmpstring.length;

	  if ( strHref.indexOf("?") > -1 ){
	    var strQueryString = strHref.substr(strHref.indexOf("?")+1);
	    var aQueryString = strQueryString.split("&");
	    for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
	      if (aQueryString[iParam].substr(0,cmplen)==cmpstring){
	        var aParam = aQueryString[iParam].split("=");
	        strReturn = aParam[1];
	        bFound=true;
	        break;
	      }
	      
	    }
	  }
	  if (bFound==false) return null;
	  return strReturn;
	}
});

/**************************************************/
/*                     DEBUG                      */
/**************************************************/
var debug = {
	enabled			: (false),
	consol			: (typeof console != "undefined"),
	iewatch			: (typeof IEWatch != "undefined"),
	cookieName	: "DEBUG_PEEXCOM",
	targ				: "debug",
	div					: null,
	
	create: function(){
		this.div = document.createElement("div");
		$(this.div)
			.css({
				"text-align":"left",
				"margin":"10px",
				"padding":"10px",
				"background-color":"#DDDDDD",
				"border":"solid 1px #666666"
			})
			.appendTo("body");
	},
	
	enable: function(){
		debug.log("debug enabled !");
		this.enabled = true;
	},
	
	disable: function(){
		debug.log("debug disabled !");
		this.enabled = false;
		deleteCookie(this.cookieName);
	},
	
	clear: function(){
		if(!this.enabled || this.consol || this.iewatch) return false;
		$("#"+this.targ).html("");
	},
	
	log: function(str){
		if(getCookie(this.cookieName) != "true") {
			if(this.enabled)
				setCookie(this.cookieName, this.enabled.toString());
			else
				return false;
		}
		/* firebug */
		if(this.consol) {
			console.log(str);
		}
		/* iewatch */
		else if(this.iewatch){
			IEWatch.Trace(str);
		}
		/* default */
		else {
			if(this.div == null)
				this.create();
			$(this.div).append("<div>"+str.htmlspecialchars().nl2br()+"</div>");
		}
 	}
};

$(document).ready(function(){
	debug.log("debug enabled !");
});


/**************************************************/
/*                 XML CONVERTERS                 */
/**************************************************/

/**
 * XML2Str: convert XML document to String
 * Input :
 * Output: 
 * var = $.XML2Str(xmldoc);
 */
jQuery.XML2Str = function(xmldoc) {
	var str;
	if (window.ActiveXObject) {
		str = xmldoc.documentElement.xml;
	} else {
		str = (new XMLSerializer()).serializeToString(xmldoc);
	}
	return str;
};

/**
 * str2XML: convert String to XML document
 * Input :
 * Output: 
 * var = $.str2XML(str);
 */
jQuery.str2XML = function(str) {
	var xmldoc;
	if (window.ActiveXObject) {
		xmldoc = new ActiveXObject('Microsoft.XMLDOM');
		xmldoc.async = 'false';
		xmldoc.loadXML(str);
	} else {
		xmldoc = (new DOMParser()).parseFromString(str, 'text/xml');
	}
	return xmldoc;
};

/**************************************************/
/*                     FLEX                       */
/**************************************************/
function getFlexApp(appName){
	var obj = document[appName];
	if(obj == undefined){
		obj = window[appName];
		if(obj == undefined)
			obj = document.getElementById(appName);
	}
	return obj;
}


/* EOF */
// ]]>
