/*///////////////////////////////////////////////////////////////////////////////////////////////////////
///// 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(something) {
	if (arguments.length > 1) {
		for (var i=0, length=arguments.length; i<length; i++ ) db(arguments[i]);
		return;
	}
	var info = '';
	//if (db.caller != null) info += '[call by '+db.caller+']\n';
	//else info += '[direct call]\n';
	//if (typeof something == 'array' || typeof something == 'object') {
		//info += ' | CONSTRUCTOR : ['+something.constructor+']';
		//info += ' | INSPECT : ['+Object.inspect(something)+']';
	//}
   
	if (typeof something == 'string' || typeof something == 'number') info += '\t'+something.valueOf();
	//else if (typeof something == 'object') return vd(something);
	else {
		for (var key in something) {
			if (typeof something[key] != 'function') // (bad prototype noise)
				info += '\t'+key+' <'+typeof something[key]+'> '+something[key]+'\n';
		}
	}

	if (('console' in window) && ('firebug' in console)) {
		console.info('db('+typeof something+')');
		console.log(info); // DEV
	}
	else {
		info = 'db('+typeof something+') :\n'+info;
		var dbWin = window.open('about:blank','','resizabe=1,scrollbars=1,width=400,height=300,left=100,top=100');
		with (dbWin.document) { writeln('<xmp>'+info+'</xmp>'); close(); }
	}
};

var dbNode = function(element) {
	if (('console' in window) && ('firebug' in console)) {
		console.info('dbNode('+element+')');
		console.dirxml($(element));
	}
}

// ------------------------- 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);
}

// ------------------------- 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. */ 
};

// ------------------------- 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;
	}
};

// ------------------------- Hide input for OVERLAY ------------------------------ //
var showHideBoxes = function(v) {
	$$('select', 'iframe', 'embed', 'object').invoke((v == 'hidden' || v == 'hide' ? 'hide' : 'show'));
};

// ------------------------- Convert to string ---------------------------------- //
var parseStr = function(str) {
	return str.toString();
};

// ------------------------- Get Html Att from Array ---------------------------------- //
var getAtt = function(name, value) {
	return ' '+name+'="'+value+'"';
}

// ------------------------- 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);
};

// ------------------------- 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);
};

var cleanString = function(string) {
	if (!isSet(string)) return '';
	string = string.replace(/&ldquo;/gi, "'"); string = string.replace(/&rdquo;/gi, "'"); string = string.replace(/&acute;/gi, "'"); string = string.replace(/&lsquo;/gi, "'"); string = string.replace(/&rsquo;/gi, "'"); string = string.replace(/&hellip;/gi, '...'); string = string.replace(/“/gi, '"'); string = string.replace(/”/gi, '"'); string = string.replace(/´/gi, "'"); string = string.replace(/‘/gi, "'"); string = string.replace(/’/gi, "'"); string = string.replace(/Œ/gi, 'OE'); string = string.replace(/œ/gi, 'oe'); string = string.replace(/…/gi, '...'); string = string.replace(/„/gi, ' '); string = string.replace(//gi, ' '); string = string.replace(/»/gi, '"'); string = string.replace(/«/gi, '"'); string = string.replace(/€/gi, 'Euros');
	return string;
};

var formVerif = function(frm_name,arr_control,arr_param) {

    if (!document.forms[frm_name]) {
        alert('Vérifiez l\'ID du formulaire');
        die();
    }

	var myForm = document.forms[frm_name];
	
    var divErrorCss = 'divError'; // Class error applicable a la div affichant l'alerte
    var oneError = false;
    var focusinput = false;
    var errorMessage = '';
	
	// Array parametres (extensibles!...)
    var mep = arr_param['mep'] == 'alerte' ? 'alerte' : 'message';
    var autoScroll = arr_param['autoScroll'] == true ? true : false;
    var action = arr_param['action'] ? arr_param['action'] : 'submit';
	var afterFinish = arr_param['afterFinish'] ? arr_param['afterFinish'] : false;
   
    // Class error applicable aux champs
    var inputCss = {
        input:       'input_error',
        textarea:    'area_error',
        select:      'select_error'
    }

	// Par defaut, tous les champs a vérifier ?
	if (isWhat(arr_control) != 'object') {
		printInfo('toDO // Scan champs par defaut... !!!');
		inputCollection = Form.serialize(myForm, true);
		db(inputCollection);
		die();
		// Serialize form data to a string suitable for Ajax requests (default behavior) or,
		// if optional getHash evaluates to true, an object hash where keys are form control names and values are data
	}
	
	// Clean word bad string
	if (typeof cleanString == 'undefined') db("form.js requires 999_regexp.js");
	else {
		$$('#'+frm_name+' input[type="text"]').each( function(e) { $(e).value = cleanString($F(e)); });
		$$('#'+frm_name+' textarea').each( function(e) { $(e).value = cleanString($F(e)); });
	}
	
    for (var property in arr_control) {
		var nom_champ = property;
		var type = arr_control[property]['type'];
		var minchar = ( arr_control[property]['minchar'] > 0 ? arr_control[property]['minchar'] : false );
		if (minchar) var mincharAlerte = 'Le champ <strong>'+nom_champ+'</strong> doit faire '+minchar+' charact&egrave;res minimum';
		var alerte = ( arr_control[property]['alerte'] ? arr_control[property]['alerte'].stripScripts() : 'Le champ <strong>'+nom_champ+'</strong> est obligatoire');
		var divErrorCssCustom = arr_control[property]['errorMessCss'] ? arr_control[property]['errorMessCss'] : divErrorCss;
		//var specifiqueInput = arr_control[property]['input'] ? arr_control[property]['input'] : '';
		var defautValue = arr_control[property]['defaut'] ? arr_control[property]['defaut'] : '';
		
		var reg_expression;
		var matched = false;
		var alerte_sup = ''; // Alerte spécifique pour 2nd email
		//var toshort = false;
		
		if (!myForm[nom_champ] && !myForm[nom_champ+'[]']) {
			alert('Champ HTML absent : "'+nom_champ+'"');
			die();
		}
		var input_element = ( myForm[nom_champ] ? myForm[nom_champ] : myForm[nom_champ+'[]'] );
		
		var input_element_p = input_element;
		var input_element_d = input_element;
		if (input_element[0] && input_element[0].nodeName.toLowerCase() != 'option') { // Si input type radio|check > array
			input_element_p = input_element[0]; // Premier element
			input_element_d = input_element[(input_element.length-1)]; // Dernier element
		}
		
		var input_element_tag = input_element_p.nodeName.toLowerCase(); // 'textarea' | 'input' | ...
		var input_type_area = '';
		
		switch(input_element_tag) {
            case 'textarea': input_type_area = 'text'; // Astuce > fait passer textarea pour input "text"
            case 'input':
              var input_type = (input_type_area ? input_type_area : input_element_p.getAttribute('type'));
              input_type = input_type.toLowerCase();
              switch(input_type) {
                  case 'password':
						if (input_element.value == '') break;
						else if (minchar && input_element.value.length < minchar) {
							 alerte = mincharAlerte;
							 break;
						}
						else if (defautValue && defautValue == input_element.value) {
							myForm[nom_champ].value = '';
							break;
						}
						else matched = true;
                  case 'hidden':
                  case 'text':
						if ($F(input_element) == '') break;
						else if (defautValue && defautValue == input_element.value) {
							myForm[nom_champ].value = '';
							break;
						}
						else if (minchar && input_element.value.length < minchar) {
							 alerte = mincharAlerte;
							 break;
						}
                        switch(type) {
                            case 'tel_fr' :      reg_expression = /^0([1-6]|8|9)([. -\/]?)\d{2}(\2\d{2}) {3}$/; break;
                            case 'tel' :         reg_expression = /^[0-9]{10}$/; break;
                            case 'chiffre' :     reg_expression = /^[0-9]{1,}$/; break;
                            case 'mel' :         reg_expression = /^[A-Za-z0-9._-]+@[A-Za-z0-9.\-]{2,}[.][A-Za-z]{2,4}$/; break;
                            case 'url' :         reg_expression = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; break;
                            case 'date' : break;
                            default : reg_expression = /^(.+)[\r\n]|$/; break; // Valide text non vide
                        }
						
                        if (type == 'date') { // Valide jj/mm/aa(aa)
                            if (checkDate(input_element.value)) matched = true;
                        }
                        else if (input_element.value.match(reg_expression)) matched = true;
                        else if (type == 'mel') alerte = alerte; //'L\'email ne semble pas correcte';
                        // Si type "mel" check if "mel_2" exist et si identique
                        if (matched && type == 'mel' && myForm[nom_champ+'_2']) {
                            if (myForm[nom_champ+'_2'].value != myForm[nom_champ].value) alerte_sup = 'second_email_erreur';
                            else alerte_sup = 'second_email_ok';
                        }
                  break;
                  case 'file':
                        if (input_element.value != '') {
                            var fichier = baseName(input_element.value);
                            if (type != '') {
                                exts = type.split('|');
                                for (i=0; i<exts.length; i++) if (fichier.match(exts[i])) matched = true;
                            }
                            else if (fichier) matched = true;
                        }
                  break;
                  case 'checkbox':
                  case 'radio':
                     input_element_tag = 'radio';
                     if (input_element.length) {
                         for (var j=0; j<input_element.length; j++) { if (input_element[j].checked) matched = true; }
                     }
                     else if (input_element.checked) matched = true;
                  break;
              }
          break;
          case 'select':     
              if (input_element.options[input_element.selectedIndex].value != '') matched = true;
          break;
        }
		
        if (!matched) {
            oneError = true;
            if (mep == 'message') {
				//alerte = '<img src="images/form_error.png" class="form_error_ico" title="'+alerte+'" alt="'+alerte+'" />';
                if ($('div_error_'+nom_champ)) {
                   $('div_error_'+nom_champ).update(alerte);
                   $('div_error_'+nom_champ).addClassName('divError');
                   $('div_error_'+nom_champ).show();
                }
                else {
                    if ($(nom_champ+'_erreur')) $(nom_champ+'_erreur').show();
                    else new Insertion.After(input_element_d,'<div class="'+divErrorCssCustom+'" id="'+nom_champ+'_erreur">'+alerte+'</div>');
                }
            }
            else errorMessage += alerte+'<br />';

            if (input_type != 'checkbox' && input_type != 'radio') {
                Element.removeClassName(input_element_p, inputCss[input_element_tag]);
                Element.addClassName(input_element_p, inputCss[input_element_tag]);
            }
            if (!focusinput) { // Focus la première erreur
                focusinput = true;
                input_element_p.focus();
            }
        }
        else {
            if (input_type != 'checkbox' && input_type != 'radio') Element.removeClassName(input_element_p, inputCss[input_element_tag]);
            if ($('div_error_'+nom_champ)) $('div_error_'+nom_champ).hide();
            else if ($(nom_champ+'_erreur')) $(nom_champ+'_erreur').hide();
        }
		
        if (alerte_sup != '') {
            switch(alerte_sup) {
                case 'second_email_erreur' :
                    oneError = true;
                    alerte = 'Les deux e-mails  ne sont pas identiques';
						  nom_champ = nom_champ+'_2'; // Envois alert input "mel" sur "mel_2"
                    if (mep == 'message') {
							   alerte = '<img src="images/form_error.png" class="form_error_ico" title="'+alerte+'" alt="'+alerte+'" />';
                        if ($(nom_champ+'_erreur')) $(nom_champ+'_erreur').show();
                        else new Insertion.After($(nom_champ),'<div class="'+divErrorCssCustom+'" id="'+nom_champ+'_erreur">'+alerte+'</div>');
                        Element.removeClassName($(nom_champ), inputCss[input_element_tag]);
                        Element.addClassName($(nom_champ), inputCss[input_element_tag]);
                    }
                    else errorMessage += alerte+'<br />';
                   
                   if (!focusinput) { // Focus la première erreur
                        focusinput = true;
                        $(nom_champ).focus();
                    }
                break;
                case 'second_email_ok' :
                    nom_champ = nom_champ+'_2'; // Envois alert input "mel" sur "mel_2"
                    if (mep == 'message') {
                        Element.removeClassName($(nom_champ), inputCss[input_element_tag])
                        if ($('div_error_'+nom_champ)) $('div_error_'+nom_champ).hide();
                        else if ($(nom_champ+'_erreur')) $(nom_champ+'_erreur').hide();
                    }
                break;
            }
        }
    }

    // SUBMIT
    if (!oneError) {
        if (action == 'submit') {
			if (Element.hasAttribute(myForm, 'onsubmit')) $(myForm).setAttribute('onsubmit', '');
			myForm.submit();
		}
		else if (action == 'getUrl') {
			var responseElement = arr_param['responseElement'];
			var responseMessage = arr_param['responseMessage'];
			var updateElement = arr_param['updateElement'];
			// Submit the form by Ajax
			var callAction = Form.requestAction(document.forms[frm_name], {
				evalScripts: true,
				onSuccess: function(transport) {
					if (isId(updateElement)) $(updateElement).update(transport.responseText);
					else return alert('Verifiez votre element a updater dans formVerif()');
				}
			});
		}
      else if (isSet(action) && !exec(action)) return alert('Probleme avec votre action dans formVerif()');
		else return alert('Ajoutez une action dans le JS');
		
		if (afterFinish) exec(afterFinish); // !!!!
		return true;
    }
    else {
        if (autoScroll) new Effect.ScrollTo(myForm, {offset: -16});
        if (autoScroll && mep != 'message') setTimeout("printInfo('"+strRep(errorMessage,'\'','\\\'')+"');", 1000); // Wait scroll
        else if (mep != 'message') printInfo(strRep(errorMessage,'\'','\\\''));
		return false;
    }
};

// printInfo('C\'est un test');
var printInfo = function(infosHtml) {
	if (typeof myLightWindow != 'object') die('Require myLightWindow !');
	else if (!isSet(infosHtml)) return false;
	
	var options = Object.extend({infosHtml:infosHtml}, arguments[1] || {});
	options.infosHtml = options.infosHtml.stripScripts();
	options.infosHtml = stripslashes(options.infosHtml);
	if (options.infosHtml.match(/<br>/) || options.infosHtml.match(/<br \/>/)) options.infosHtml += '<br />&nbsp;';

	options.infosHtml = '<div class="divFormMessage"><div><p>'+options.infosHtml+'</p></div></div>';

	myLightWindow.activateWindow({
		href: options.infosHtml,
		title: 'Information',
		type: 'inline'
	});

	if (!isSet(options.timeOut) || parseInt(options.timeOut) < 1) options.timeOut = (parseInt(options.infosHtml.length) * 82);
   if (options.timeOut < 1600) options.timeOut = 2000;
	options.timeOut += 5000; // Window loading
	
	actionTimeOut = 'myLightWindow.deactivate();';
	if (options.afterFinish) actionTimeOut += ' exec('+options.afterFinish+');';
	_myTimer = setTimeout(actionTimeOut, options.timeOut);
};