/*///////////////////////////////////////////////////////////////////////////////////////////////////////
///// Code mixing by Molokoloco for Agence Clark... [BETA TESTING FOR EVER] ........... (o_O)  /////////
///////////////////////////////////////////////////////////////////////////////////////////////////////

Functions :
	
	db(myvar)
	vd(obj, parent)
	showKey(obj)						: Montre les methodes d'un object
	die()
	exec(func)
	echo(str)
	redir(url)
	isSet(myVar)
	isId(myElmt)
	isWhat(myVar)						:  return ( number | string | object | boolean | function )
	isFrame()
	parseStr(str)
	getAtt(name, value)
	parseQuery(query)
	getUniqueId()
	loadImg(imgSrc)
	setImg(imgId,imgSrc)
	setSrc(element, newSrc)
	getImageHtm(imgSrc, imgId)
	trim(string)
	escapeURI(url)
	addslashes(string)
	stripslashes(string)
	baseName(path)
	getExt(string)
	affCleanName(filetitle)
	inArray(myValue,myArray)
	strRep(string, strSearch, strRep)
	nl2br(string)
	findIdInClass(el)
	findParamInClass(param, el)
	checkUrl(strUrl)
	checkMail(strMail)
	checkDate(strDate)
	formatTime(seconds)
	getKey(e)
	listenKey()
	enterEvent(element, func)
	
Have to check prototype !

	// EX. ONLOAD EVENT 
	var page_loaded = function(evt) { if (evt) Event.stop(evt); ... }
	Event.observe(window, 'load', page_loaded);	
	...
*/

// ------------------------- REQUIRE :) ---------------------------------- //
if (typeof Element == 'undefined') throw("tools.js requires prototype.js library");

// ------------------------- DEBUG VAR ---------------------------------- //
var db = function(myvar) {
    var varValue = 'DB (' + typeof myvar + ') :\n';
    if (typeof myvar == 'string' || typeof myvar == 'number') varValue = myvar;
    //else if (typeof myvar == 'object') return vd(myvar);
    else {
        for (var att in myvar) {
            if (typeof myvar[att] != 'function') // (bad prototype noise)
                varValue += '\t'+att + ' <'+typeof myvar[att]+'> ' + myvar[att]+'\n';
        }
    }
	if (typeof myvar == 'array') varValue += "\n"+myvar.inspect();
    if (navigator.userAgent.indexOf('Firefox') >= 0 && console.log) console.log(varValue); // DEV
    else nativeAlert(varValue);
};

/* ------------------------- DEBUG OBJET ---------------------------------- */
var vd = function(obj, parent) {
    if (typeof obj != 'object') return db(obj);
    for (var attr in obj) {
        if (parent) console.log(parent + "+" + attr + "\n" + obj[attr]);
        else console.log(attr + "\n" + obj[attr]);
        if (typeof obj[attr] == 'object') {
            if (parent) vd(obj[attr], parent + "+" + attr);
            else vd(obj[attr], attr);
        }
    }
}

/* ---------------- AFFICHE TOUTES LES PROPRIETES D'UN OBJET ------------- */
var showKey = function(obj) {
	var props = [];
    for (var prop in obj) props.push(prop);
    db(props.join(', '));
};

// ------------------------- STOP SCRIPT ---------------------------------- //
var die = function(mess) {
    throw(( mess ? mess : "JS says that you killing him softly : Oh my god moonWalker is down..."));
};


// ------------------------- Execute function ---------------------------------- //
var exec = function(func) {
	if (typeof(func) == 'string') func = eval(func);
	else if (typeof(func) != 'function') return false;
	try { func(); return true; }
	catch(e) { func; return true; }
	return false;
}

// ------------------------- ECHO ---------------------------------- //
var echo = function(str) {
	document.write(str);
}

// ------------------------- GOTO LOCATION (but goto is reserved) ---------------------------------- //
var redir = function(myUrl) {
	if (isFrame()) {
		if (!isSet(myUrl)) window.parent.document.location.reload();
		else window.parent.document.location.href = myUrl;
	}
	else {
		if (!isSet(myUrl)) window.document.location.reload();
		else window.document.location.href = myUrl;
	}
};

// ------------------------- IS SET ? ---------------------------------- //
var isSet = function(myVar) {
	if (typeof(myVar) == 'undefined' || myVar === '' || myVar === null) return false;
	else return true;
};

// ------------------------- ID ELEMENT EXIST ? ---------------------------------- //
var isId = function(element) {
	if (!isSet(element)) return false;
	try { 
		if ($(element)) return true;
		else return false;
	}
   	catch(e) { return false; }
};

// ------------------------- Type of ---------------------------------- //
var isWhat = function(myVar) {
	if (!isSet(myVar)) return '';
	else return typeof myVar; // number | string | object | boolean | function
};

// ------------------------- isFrame ---------------------------------- //
var isFrame = function() {
	return ( window.self == window.parent ? false : true ); /* Checks that page is in iframe. */ 
};

// ------------------------- Convert to string ---------------------------------- //
var parseStr = function(str) {
	return str.toString();
};

// ------------------------- Get Html Att from Array ---------------------------------- //
var getAtt = function(name, value) {
	return ' '+name+'="'+value+'"';
}
// ------------------------- PARSE QUERY ---------------------------------- //
var parseQuery = function(query) {
    if (!query) return {};
    var params = {};
    var pairs = query.split(/[;&]/);
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split("=");
        if (!pair || pair.length != 2) continue;
        params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, " ");
    }
    return params;
};

// ------------------------- STRING UNIQUE ---------------------------------- //
var getUniqueId = function() {
    var Stamp = new Date();
    var h = Stamp.getHours();
    var m = Stamp.getMinutes();
    var s = Stamp.getSeconds();
    return h+'_'+m+'_'+s+'_'+parseInt(Math.random()*100);
};

// ------------------------- Create loader IMAGE ---------------------------------- //
var loadArr = {};
var loadImg = function(imgSrc) {
	if (!isSet(imgSrc)) return;
    loadArr[imgSrc]= new Image();
    loadArr[imgSrc].src = imgSrc;
	return loadArr[imgSrc];
};

// ------------------------- setImg ---------------------------------- //
var setImg = function(imgId,imgSrc) {
    if (!isId(imgId) || !isSet(imgSrc)) return;
	var img = loadImg(imgSrc);
	img.onload = $(imgId).src = imgSrc;
};

var setSrc = function(element, newSrc) { // DEPRECIATED
    setTimeout( function() { $(element).src = newSrc; }, 100);
};

function getImageHtm(imgSrc, imgId) {
	return '<img src="'+imgSrc+'" id="'+imgId+'" border="0" align="absmiddle">';
}

// ------------------------- TRIM ---------------------------------- //
var trim = function(string) {
    return string.replace(/^\s+|\s+$/g, '');
};

// ------------------------- ENCODE URL ---------------------------------- //
var escapeURI = function(url) {
    if (encodeURIComponent) return encodeURIComponent(url);
    else if (encodeURI) return encodeURI(url);
    else if (escape) return escape(url);
    else return url;
};

// ------------------------- SLASHES ---------------------------------- //
var addslashes = function(string) {
    return string.replace(/'/g, "\\'");
};
var stripslashes = function(string) {
    return string.replace(/\\'/g, "'");
};

// ------------------------- baseName ---------------------------------- //
var baseName = function(path) {
    var vb;
    for (var i=path.length; i>0; i--) {
        vb = path.substring(i,i+1)
        if (vb == '/' || vb == '\\') return path.substring(i+1, path.length);
    }
	return path; // Si n'est pas-path..
};

// ------------------------- GetExt ---------------------------------- //
var getExt = function(string) {
	var vb;
	for (var i=string.length; i>0; i--) {
		vb = string.substring(i, i+1);
		if (vb == '.') return string.substring(i+1, string.length);
	}
};

// ------------------------- CLEAN FILE NAME ---------------------------------- //
var affCleanName = function(filetitle) { // 070305142221_c-est_aussi_ca.jpg >>> c est aussi ca
    if (filetitle.match('/')) filetitle = baseName(filetitle);
    myregexp = new RegExp(/[0-9]{4,}/gi);
    filetitle = filetitle.replace(myregexp,'');
    myregexp = new RegExp(/.jpg|.gif|.png/gi);
    filetitle = filetitle.replace(myregexp,'');
    myregexp = new RegExp(/[_|-]/gi);
    filetitle = filetitle.replace(myregexp,' ');
    return trim(filetitle);
};

// ------------------------- inArray ---------------------------------- //
var inArray = function(myValue, myArray) {
	if (isWhat(myArray) != 'object') return false;
    for (var k in myArray) { if (myArray[k] == myValue) return true; }
    return false;
};
var keyInArray = function(myKey, myArray) {
	if (isWhat(myArray) != 'object') return false;
    for (var k in myArray) { if (k === myKey) return true; }
    return false;
};

// ------------------------- STRING REPLACE ------------------------------ //
var strRep = function(string, strSearch, strRep) {
    var regEx = new RegExp(strSearch, 'gi');
    return string.replace(regEx,strRep);
};

var nl2br = function(string) {
	return strRep(string, "\n", '<br />');
};

// -------------------- FIND ID IN CLASS -------------------- //
var findIdInClass = function(el) {
	var regexp = /id_([0-9a-z_-]+)/;
	var mymatch = regexp.exec(el.className);
	if (mymatch)  return mymatch[1];
	else return false;
};

// -------------------- FIND PARAM IN CLASS -------------------- //
var findParamInClass = function(param, el) {
    var regexp = new RegExp(param + '_([A-Za-z0-9/:?&\-\._]+)');
    var mymatch = regexp.exec(el.className);
    if (mymatch)  return mymatch[1];
    else return false;
};

// ------------------------- VALIDATE URL ------------------------------ //
var checkUrl = function(strUrl) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return regexp.test(strUrl);
};

// ------------------------- VALIDATE URL ------------------------------ //
var checkMail = function(strMail) {
    var regexp = /^[A-Za-z0-9._-]+@[A-Za-z0-9.\-]{2,}[.][A-Za-z]{2,4}$/;
    return regexp.test(strMail);
};

// ------------------------- VALIDATE DATE : 15/02/78 ------------------------------ //
var checkDate = function(strDate) {
    if (!isSet(strDate) || !strDate.match('/')) return false;
    var date_array = strDate.split('/');
    var day = String(date_array[0]);
    var month = String(date_array[1]);
    var year = String(date_array[2]);
    if (day.length < 2 || month.length < 2 || year.length < 2) return false;
    if (parseInt(year) > 78) year = '19'+year;
    else year = '20'+year;
    month = parseInt(month - 1);
    var source_date = new Date(year,month,day);
    if (year != source_date.getFullYear() || month != source_date.getMonth() || day != source_date.getDate()) return false;
    else  return true;
};

// -------------------- Format Time -------------------- //
var formatTime = function(seconds) {
	var printDate = false;
	var timeFormat = '';
	var myHtml = '';
	var Stamp = new Date();
	switch(timeFormat) {
		case 'locale' : Stamp.toLocaleString(); break;
		case 'gtmdiff' : Stamp.getTimezoneOffset(); break;
		case 'gtm' : Stamp.toGMTString(); break;
	}
	// DATE
	if (printDate) { 
		var y = Stamp.getFullYear();
		var m = (Stamp.getMonth() + 1).toPaddedString(2);
		var d = Stamp.getDate();
		myHtml += d+'/'+m+'/'+y;
	}
	// TEMPS
	var he = Stamp.getHours().toPaddedString(2);
	var mi = Stamp.getMinutes().toPaddedString(2);
	var se = Stamp.getSeconds().toPaddedString(2);
	myHtml += he+'h'+mi+'min'+se+'sec';
    return myHtml;
};

// -------------------- Listen and Get KEY -------------------- //
// Also see // Event.observe('myInput','keypress', function(event){ if (event.keyCode == Event.KEY_RETURN) sendMessage(); });

var getKey = function(e) { // Call it with : getKey(event) !
	var keycode = ( window.event ? window.event.keyCode : e.which );
	switch(keycode) {
		case '' : return ''; // Unknow
		case 0 : return ''; // Unknow | unallowed
		case 8 : return 'backspace';

		case 9 : return 'tab';
		case 13 : return 'return'; // Enter !
		case 27 : return 'esc';
		case 33 : return 'pageup';
		case 34 : return 'pagedown';
		case 35 : return 'end';
		case 36 : return 'home';
		case 37 : return 'left';
		case 38 : return 'up';
		case 39 : return 'right';
		case 40 : return 'down';
		case 46 : return 'del';
		default : return String.fromCharCode(keycode).toLowerCase(); // a | b | ...
	}
};

var inputListen = {};
var enterEvent = function(element, func) { // onFocus="enterEvent('password',submitForm);"
	if (!isSet(inputListen[element])) {
		inputListen[element] = 1;
		Event.observe(element, 'keypress',
			function(e) {
				if (getKey(e) == 'return') {
					Event.stopObserving(element, 'keypress');
					exec(func);
				}
			}
		);
	}
};
var listenKey = function() { // ?
	document.onkeypress = getKey(event);
};