// on crée des variables pour stocker l'activité du scan
var nb_url_total = 0;
var nb_url_scanned = 0;
var nb_errors_total=0;
var page_scan_duration = 0.5; //seconds
var nb_minutes_left = 0;
var nb_seconds_left = 0;
var continue_scan = false;
var url_save = 'tools/save_demande.php'; // url du fichier qui sauvegarde la demande
var url_scan_processor = 'tools/scan-it.php'; // url du fichier qui effectue le scan

var div_text_scroll;
var t_region_div_text_scroll;

// on crée des variables permettant de stocker les indicateurs d'activité à mettre à jour sur la page
var node_url_scanned, node_url_total, node_errors_total, node_minutes_left, node_seconds_left, node_loading_image;
var t_io_id = new Array();

// on crée une instance de YAHOO (IO)
var IO = YUI().use('io-base');
var IO_save = YUI().use('io-base');
// on crée une instance de YAHOO (Slider)
var YUI_slider = YUI().use('slider');
// on crée une instance de YAHOO (animation)
var YUI_anim = YUI().use('anim');

// on crée une instance de YAHOO (Node)
var Node = YUI().use('node', function(Y){
	node_url_scanned = Y.one('#nb_url_scanned');
	node_url_total = Y.one('#nb_url_total');
	node_errors_total = Y.one('#nb_errors_total');
	node_minutes_left = Y.one('#minutes_left');
	node_seconds_left = Y.one('#seconds_left');
	node_loading_image = Y.one('#loading_image');
	text_slider_animation = null;
	
	update_activity_indicators();
});

var temp;


// Fonction appelée lors du retour de l'appel ajax
function save_complete(id, o, args) {
	eval(o.responseText);
};


// Fonction appelée lors du retour de l'appel ajax
function complete(id, o, args) {
	if(typeof(t_io_id[id])=='undefined') {
		// on stock l'id pour ne pas executer plusieurs fois le onComplete
		t_io_id[id] = 'ok';
		
		var id = id; // Transaction ID.
		var xmlDoc = o.responseXML.documentElement; // Response data.
		temp = xmlDoc;
        var response_action = xmlDoc.getElementsByTagName("response_action")[0].childNodes[0].nodeValue;
        
        
		// on met à jour les compteur et l'affichage de l'avancement
		nb_url_scanned++;
		nb_url_total = xmlDoc.getElementsByTagName("nb_files")[0].childNodes[0].nodeValue;
		nb_errors_total = xmlDoc.getElementsByTagName("nb_errors_total")[0].childNodes[0].nodeValue;
		nb_url_scanned = Math.min(nb_url_total,nb_url_scanned);
		nb_seconds_left = Math.ceil((Math.min(nb_url_total,500)-nb_url_scanned)*page_scan_duration);
		nb_minutes_left = Math.floor(nb_seconds_left/60);
		nb_seconds_left -= (nb_minutes_left*60);
		update_activity_indicators();
		
	
		// si ce n'est pas la dernière page, on lance la suite du scan
		if(response_action!='stop') {
			process_scan(false,false);
		}
		else {
			continue_scan = false;
			diplay_scan_menu(xmlDoc);
			diplay_scan_pages(xmlDoc);
			//on masque le loading
			node_loading_image.setStyle('visibility','hidden');
		}
	}
};

//Fonction qui effectue l'appel Ajax
// laisser start_url à false pour continuer le scan en cours
var process_scan = function($start_url,$agglomerate,$subdomains) {	
		var url = url_scan_processor;
		if($start_url!=false) {
			// on affiche le loading
			node_loading_image.setStyle('visibility','visible');
			continue_scan = true;
			nb_url_scanned = 0;
			
			url += '?action=start';
			if($agglomerate) {
				url += '&agglomerate=true';
			}
			if($subdomains) {
				url += '&subdomains=true';
			}
			url += '&url='+escape($start_url);
		}
		
		if(continue_scan) {
			IO.on('io:complete', complete, this, []);
			IO.io(url);
		}
} 

// on crée une fonction qui met à jour les compteur en fonction des variables définies plus haut
var update_activity_indicators = function() {
	if(node_url_scanned) {
		node_url_scanned.set('innerHTML',nb_url_scanned);
	}
	if(node_url_total) {
		node_url_total.set('innerHTML',nb_url_total);
	}
	if(node_errors_total) {
		node_errors_total.set('innerHTML',nb_errors_total);
	}	
	if(node_minutes_left && node_seconds_left) {
		node_minutes_left.set('innerHTML',nb_minutes_left);
		node_seconds_left.set('innerHTML',nb_seconds_left);
	}
}

// on crée une fonction qui construit le menu du résultat de l'analyse.
var diplay_scan_menu = function(xmlDoc) {
	var node_td_menu = Node.one('#td_menu');
	var menu_content = '';
	
	var t_stats = xmlDoc.getElementsByTagName("stats")[0].childNodes;
	var t_refs = xmlDoc.getElementsByTagName("refs")[0].childNodes;
	var report_filename = xmlDoc.getElementsByTagName("report_filename")[0].childNodes[0].nodeValue;
    var scan_status = xmlDoc.getElementsByTagName("scan_status")[0].childNodes[0].nodeValue;
    var display_popup;
    var i;
	
    if(scan_status=='complete') {
    	display_popup = 'false';
    }
    else {
    	display_popup = 'true';
    }
    
	menu_content += '<table width="165" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2" style="border-bottom:#313133 1px solid; padding-bottom:12px" class="txt_blanc_18px"  >Résultats du Scan !</td></tr><tr><td colspan="2" align="left" valign="middle" class="txt_white_12px" style="padding-top:12px; padding-bottom:5px">Outils de statistiques :</td></tr>';
	for(i=0;i<t_stats.length;i++) {
		var nom = t_stats[i].childNodes[0].childNodes[0].nodeValue;
		var nb_errors = t_stats[i].childNodes[1].childNodes[0].nodeValue;
		var id = t_stats[i].childNodes[2].childNodes[0].nodeValue;
		
		menu_content += '<tr><td align="left" valign="middle" class="txt_white_12px" width="10"><img src="images/';
		if(nb_errors>0) {
			menu_content += 'croix-blanc';
		}
		else {
			menu_content += 'check-blanc';
		}
		menu_content += '.png" alt="Wrong" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px" style="padding-top:4px;padding-bottom:4px;';
		if(i==(t_stats.length-1)) {
		menu_content += 'border-bottom:#313133 1px solid;';
		}
		menu_content += '"><a href="#" onclick="display_module(\''+id+'\'); return false;" class="lien_module_scan">'+nom
		if(nb_errors>0) {
			menu_content += ' ('+nb_errors+')';
		}
		menu_content += '</a></td></tr>';
	}
	menu_content += '<tr><td colspan="2" align="left" valign="middle" class="txt_white_12px" style="padding-top:12px; padding-bottom:5px">Référencement :</td></tr>';
	for(i=0;i<t_refs.length;i++) {
		var nom = t_refs[i].childNodes[0].childNodes[0].nodeValue;
		var nb_errors = t_refs[i].childNodes[1].childNodes[0].nodeValue;
		var id = t_refs[i].childNodes[2].childNodes[0].nodeValue;
		
		menu_content += '<tr><td align="left" valign="middle" class="txt_white_12px" width="10"><img src="images/';
		if(nb_errors>0) {
			menu_content += 'croix-blanc';
		}
		else {
			menu_content += 'check-blanc';
		}
		menu_content += '.png" alt="Wrong" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px" style="padding-top:4px;padding-bottom:4px;';
		if(i==(t_refs.length-1)) {
		menu_content += 'border-bottom:#313133 1px solid;';
		}
		menu_content += '"><a href="#" onclick="display_module(\''+id+'\'); return false;" class="lien_module_scan">'+nom
		if(nb_errors>0) {
			menu_content += ' ('+nb_errors+')';
		}
		menu_content += '</a></td></tr>';
	}
	//menu_content += '<tr><td align="left" valign="middle" class="txt_white_12px"><img src="images/check-blanc.png" alt="Checked" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px" style="padding-top:4px; padding-bottom:4px">Titres de pages <em>(12)</em></td></tr><tr><td align="left" valign="middle" class="txt_white_12px"><img src="images/croix-bleu.png" alt="Wrong" width="9" height="8" /></td><td align="left" valign="middle" class="txt_a0c6ee_12px" style="padding-top:4px; padding-bottom:4px">Textes alternatifs <em>(3)</em></td></tr><tr><td align="left" valign="middle" class="txt_white_12px"  style="border-bottom:#313133 1px solid; "><img src="images/check-blanc.png" alt="Checked" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px"  style="border-bottom:#313133 1px solid; padding-top:4px; padding-bottom:4px">Métas &amp; keywords <em>(8)</em></td></tr><tr><td colspan="2" align="left" valign="middle" class="txt_white_12px" style="padding-top:12px; padding-bottom:5px">Erreurs HTML :</td></tr><tr><td align="left" valign="middle" class="txt_white_12px"><img src="images/check-bleu.png" alt="Checked" width="9" height="8" /></td><td align="left" valign="middle" class="txt_a0c6ee_12px" style="padding-top:4px; padding-bottom:4px">404</td></tr><tr><td align="left" valign="middle" class="txt_white_12px"  style="border-bottom:#313133 1px solid; "><img src="images/check-blanc.png" alt="Checked" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px"  style="border-bottom:#313133 1px solid;padding-top:4px; padding-bottom:4px">sitemap.xml <em>(1)</em></td></tr><tr><td colspan="2" align="left" valign="middle" class="txt_white_12px" style="padding-top:12px; padding-bottom:5px">Autres erreurs :</td></tr><tr><td align="left" valign="middle" class="txt_white_12px"><img src="images/check-blanc.png" alt="Checked" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px" style="padding-top:4px; padding-bottom:4px">Flux RSS <em>(3)</em></td></tr><tr><td align="left" valign="middle" class="txt_white_12px"><img src="images/croix-blanc.png" alt="Wrong" width="9" height="8" /></td><td align="left" valign="middle" class="txt_white_12px" style="padding-top:4px; padding-bottom:4px">Favicon <em>(1)</em></td></tr>';
	menu_content += '<tr><td colspan="2" class="txt_white_12px" style="padding-top:25px"><a href="#" onclick="create_report('+"'"+report_filename+"'"+','+display_popup+'); return false;"><img src="images/btn-xls.png" alt="XLS Report" /></a></td></tr></table>';

	node_td_menu.set('innerHTML', menu_content);
	
}


// on crée une fonction qui construit les différents modules du scan
var diplay_scan_pages = function(xmlDoc) {
	var node_td_pages = Node.one('#td_pages');
	var pages_content = '';
	
	var summary = xmlDoc.getElementsByTagName("summary")[0];
	var t_stats = xmlDoc.getElementsByTagName("stats")[0].childNodes;
	var t_refs = xmlDoc.getElementsByTagName("refs")[0].childNodes;
	var i;
	
	var id = summary.childNodes[2].childNodes[0].nodeValue;
	var current_content = summary.childNodes[3].childNodes[0].nodeValue;
	pages_content += current_content;
	
	for(i=0;i<t_stats.length;i++) {
		var id = t_stats[i].childNodes[2].childNodes[0].nodeValue;
		var current_content = t_stats[i].childNodes[3].childNodes[0].nodeValue;
		pages_content += current_content;
	}
	for(i=0;i<t_refs.length;i++) {
		var id = t_refs[i].childNodes[2].childNodes[0].nodeValue;
		var current_content = t_refs[i].childNodes[3].childNodes[0].nodeValue;
		pages_content += current_content;
	}
	node_td_pages.set('innerHTML', pages_content);	
}


var display_module = function(id_module) {
	// on commence par masquer tous les modules 
	var t_modules = Node.all('div.page_scan_result');
	t_modules.setStyle('display','none');
	
	//on affiche enfin le module
	Node.one('#page_'+id_module).setStyle('display','block');
	
	// on récupère la div avec les texts
	div_text_scroll = Node.one('#text_'+id_module);
	// on récupère la hauteur 
	t_region_div_text_scroll = div_text_scroll.get('region');
	
	// on crée un scroll si nécessaire et on masque la zone de scroll sinon
	if(div_text_scroll.get('scrollHeight') > (t_region_div_text_scroll['bottom']-t_region_div_text_scroll['top'])) {
		// on affiche la barre de scroll
		Node.one('#scroll_'+id_module).setStyle('display','block');
		
		// on remonte le défilement en haut 
		div_text_scroll.set('scrollTop',0);
		
		//on crée le scroll pour ce module
		var slider = new YUI_slider.Slider({
			axis        : 'y',
			boundingBox : '#scroll_'+id_module,
			rail        : '#fond_scroll_'+id_module,
			thumbImage  : '#bouton_scrollbar_'+id_module,
			min         : 0,
			max         : 100,
			value       : 0
		});
		
		// callback function to display Slider's current value
		function slideText(e) {
			// on stoppe l'animation en cours si besoin
			if(text_slider_animation!=null) {
				text_slider_animation.stop();
			}
			
			var height_html = div_text_scroll.get('scrollHeight') - (t_region_div_text_scroll['bottom']-t_region_div_text_scroll['top']);
			
			text_slider_animation = new YUI_anim.Anim({
				node: '#'+div_text_scroll.get('id'),
				to: {
					scroll: [0, Math.round(height_html*e.newVal/100)]
				},
				duration:0.3
			});
			
			text_slider_animation.on('end', function() {
				div_text_scroll.set('scrollTop',Math.round(height_html*e.newVal/100));
			});

			
			text_slider_animation.run();
		}
		 
		slider.after('valueChange', slideText);
		slider.render();
	}
	else {
		Node.one('#scroll_'+id_module).setStyle('display','none');
	}
	
	

}


var submit_form = function(form) {
	var url_scan = form.url.value;
	if(continue_scan) {
		alert('Un scan est déjà en cours, veuillez attendre que celui-ci soit terminé.');
	}
	else {
		if(url_scan=='') {
			alert('Veuillez renseigner l\'adresse du site à scanner');
		}
		else {
			if(url_scan.substr(0,7)!='http://') {
				url_scan = 'http://'+url_scan;
			}
			
			// on lance le scan
			process_scan(url_scan, Node.one('#agglomerate').get('checked'), Node.one('#subdomains').get('checked'));
		}
	}	
}


var create_report = function(filename, open_popup) {
	if(continue_scan) {
		alert('Un scan est déjà en cours, veuillez attendre que celui-ci soit terminé.');
	}
	else {
    	if(open_popup) {
            Shadowbox.open({
                player:     'iframe',
                title:      '',
                content:    'popup_rapport.php',
                width: 333,
                height: 182
            });
		}
        else {
	        Node.one('#iframe_invisible').set('src','http://scan-it.one-door.com/export/'+filename);
        }	
	}
}


// fonction qui test la validité d'un email
var isEmail = function(emailStr) {
	var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/;
	var result = ((reg.exec(emailStr)!=null));
	return result;
}

// fonction appelée lorsque l'on valide le formulaire avec son email et qui check l'email et appelle l'insertion en BDD
var send_demande = function(form_element) {
	if(!isEmail(form_element.email.value)) {
        alert('Votre email est invalide, veuillez vérifier votre saisie', 'Erreur');
    }
    else {
        IO_save.on('io:complete', save_complete, this, []);
        IO_save.io(url_save+'?email='+form_element.email.value);
        Shadowbox.close();
    }
}
