/****************************************************************************

Initialisation des variables globals

****************************************************************************/
var contentTextF="";

var cat = new Array();
cat["child"] = new Array();
cat["questions"] = new Array();
cat["questions"][0] = new Array();
cat["questions"][1] = new Array();
cat["name"] = "mainCat";
var counter = 0;

/****************************************************************************

Loader XML

****************************************************************************/
//Fonction qui permet de loader un fichier XML
function loadXMLDoc(lang)
{
	try //Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	}
	catch(e)
	{
		try //Firefox, Mozilla, Opera, etc.
		{
			xmlDoc=document.implementation.createDocument("","",null);
		}
		catch(e) {alert(e.message)}
	}
	try
	{
		xmlDoc.async=false;
		xmlDoc.load("./LA_FAQ/XML/livingactor_faq_"+lang+".xml");
		printFaq();
	}
	//catch(e) {alert(e.message)}
	catch(e)
	{ // unable to load
			try
			{       // for Safari
					xmlDoc = new XMLHttpRequest();
					xmlDoc.open("GET", "./LA_FAQ/XML/livingactor_faq_"+lang+".xml", false);
					xmlDoc.send();
					xmlDoc=xmlDoc.responseXML;
					printFaq();
			}
			catch(e)
			{
					alert(e.message)
					return; // return with nothing
			}
	}
	return(null);
}

//Détermine si une variable est un tableau
function is_array( mixed_var ) {
    // *     example 1: is_array(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: is_array('Kevin van Zonneveld');
    // *     returns 2: false
    // *     example 3: is_array({0: 'Kevin', 1: 'van', 2: 'Zonneveld'});
    // *     returns 3: true
    // *     example 4: is_array(function tmp_a(){this.name = 'Kevin'});
    // *     returns 4: false
 
    var key = '';
 
    if (!mixed_var) {
        return false;
    }
 
    if (typeof mixed_var === 'object') {
 
        if (mixed_var.hasOwnProperty) {
            for (key in mixed_var) {
                // Checks whether the object has the specified property
                // if not, we figure it's not an object in the sense of a php-associative-array.
                if (false === mixed_var.hasOwnProperty(key)) {
                    return false;
                }
            }
        }
 
        // Uncomment to enable strict JavsScript-proof type checking
        // This will not support PHP associative arrays (JavaScript objects), however
 
        //  if (mixed_var.propertyIsEnumerable('length') || typeof mixed_var.length !== 'number') {
        //      return false;
        //  }
 
        return true;
    }
 
    return false;
}

//Remplace toutes les occurrences dans une chaîne
function str_replace(search, replace, subject) {
    var s = subject;
    var ra = r instanceof Array, sa = s instanceof Array;
    var f = [].concat(search);
    var r = [].concat(replace);
    var i = (s = [].concat(s)).length;
    var j = 0;
    
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    }
 
    return sa ? s : s[0];
}

/****************************************************************************

Fonctions de création des questions et de la catégorie

****************************************************************************/

//Création du code HTML pour la question
function createQuestion(questionF) {
	var contentQuestion = new Array();
	var contentKeyWords = new Array();
	var questionText = "";
	var answerText = "";
	var link = "";
	var image = "";
	var imageName = "";
	var nameVideo = "";
	if(questionF != undefined) {
		for (j = 0; j < questionF.length; j++) {
			var identF = questionF[j].getElementsByTagName("ident");
			var textF = questionF[j].getElementsByTagName("text");
			var answerF = questionF[j].getElementsByTagName("answer");
			
			var infolinkF = questionF[j].getElementsByTagName("infolink");
			var infoimageF = questionF[j].getElementsByTagName("infoimage");
			var infoimagenameF = questionF[j].getElementsByTagName("infoimagename");
			var videofileF = questionF[j].getElementsByTagName("videofile");
			var keywordsF = questionF[j].getElementsByTagName("keywords");
			var publishedF = questionF[j].getElementsByTagName("published");
			
			if((publishedF[0] != undefined) && (publishedF[0].firstChild.nodeValue=="yes")) {
				
				contentTextF = "";
				questionText = textF[0].firstChild.nodeValue;
				answerText = answerF[0].firstChild.nodeValue;
				
				if(infolinkF[0] != undefined){				
					link = infolinkF[0].firstChild.nodeValue;
				}else{
					link = "";
				}
				if(infoimageF[0] != undefined){
					image = infoimageF[0].firstChild.nodeValue;
				}
				if(infoimagenameF[0] != undefined){
					 imageName = infoimagenameF[0].firstChild.nodeValue;
				}
				if(videofileF[0] != undefined){
					 nameVideo = videofileF[0].firstChild.nodeValue;
				}
				if(keywordsF[0] != undefined){
					contentTextF += keywordsF[0].firstChild.nodeValue;// + "<br/>";
				}
				
				answerText = str_replace('\'', '&#39;', answerText);
				answerText = str_replace('"', '\\&#34;', answerText);
				answerText = str_replace('«', '\\&#171;', answerText);
				answerText = str_replace('»', '\\&#187;', answerText);
				answerText = str_replace('/', '\/', answerText);

				var temp = "";
				temp += '<div class="frontQuestion">';
					temp += '<div class="frontNameQuestion">';	
						temp += '<a href=\'javascript:viewVideo("'+nameVideo+'","'+answerText+'","'+link+'","'+image+'","'+imageName+'")\'>'+questionText+'</a>';
					temp += '</div>';
				temp += '</div>';
				contentQuestion.push( temp );
				contentKeyWords.push( contentTextF );
			}
		}
	}	
	return [contentQuestion, contentKeyWords];
}

//Crée un tableau avec toutes les entrées
function read(name, questionF)
{	
	var paths = name.split("/");

	var childTag = cat["child"];
	var questionTag = cat["questions"];
	var name = cat["name"];

	for( var i in paths ) 
	{
		if( !childTag[paths[i]] )
		{				
			childTag[paths[i]] = new Array();
			childTag[paths[i]]["child"] = new Array();
			childTag[paths[i]]["questions"] = new Array();
			childTag[paths[i]]["questions"] = createQuestion(questionF);
			childTag[paths[i]]["name"] =  "cat" + counter++;
		}
		
		questionTag = childTag[paths[i]]["question"];
		childTag = childTag[paths[i]]["child"];
	}
	
}

//Crée le format HTML correspondant au fichier XML
function affichage( tableau, a_name , searchState)
{	
	var divText = '';
	var childText = new Array();
	var test = false;
	var j = "_null";
	for(j in tableau["child"] )
	{ 	
		if(searchState){
			childText[j] = affichage( tableau["child"][j], j ,searchState);
		}else{
			childText[j] = affichage( tableau["child"][j], j );		
		}
		if( childText[j].length > 0 ) test = true;
	}
		
	var questionText = "";
	for(var ques in tableau["questions"][0] )
	{	
		if( tableau["questions"][0][ques].length > 0 ) 
		{
			questionText += tableau["questions"][0][ques];
		}
	}
	
	if( a_name )
	{
		if( test || questionText.length > 0 )
		{
			if(searchState){
				divText += '<div class="frontCategoryWidth">';
					divText += '<div class="frontOpenCategory">';
						divText += '<a href="javascript:closedCategory(\''+tableau["name"]+'\',\'openCategory'+tableau["name"]+'\',\'linkOpenCategory'+tableau["name"]+'\', true)" id="linkOpenCategory'+tableau["name"]+'">';
							divText += '<img id="openCategory'+tableau["name"]+'" src="./LA_FAQ/images/closedFront.gif"/>';
						divText += '</a>';
					divText += '</div>';
					divText += '<div class="frontNameCategory">'+a_name+'</div>';
				divText += '</div>';
				divText += '<div id="'+tableau["name"]+'" class="frontListQuestion" style="visibility: visible; display: block;">';			
				divText += questionText;
			}else{
				divText += '<div class="frontCategoryWidth">';
					divText += '<div class="frontOpenCategory">';
						divText += '<a href="javascript:openCategory(\''+tableau["name"]+'\',\'openCategory'+tableau["name"]+'\',\'linkOpenCategory'+tableau["name"]+'\', true)" id="linkOpenCategory'+tableau["name"]+'">';
							divText += '<img id="openCategory'+tableau["name"]+'" src="./LA_FAQ/images/openFront.gif"/>';
						divText += '</a>';
					divText += '</div>';
					divText += '<div class="frontNameCategory">'+a_name+'</div>';
				divText += '</div>';
				divText += '<div id="'+tableau["name"]+'" class="frontListQuestion">';			
				divText += questionText;
			}
		}
	}
	
	for( j in tableau["child"] )
	{ 	
		divText += childText[j];
	}
	
	if( divText.length > 0 && a_name ) divText += "</div>";
	
	return divText;
}	
	
//Fonction qui affiche dans la page l'ensemble des FAQ
function printFaq() {
	document.keywordSearch.keyWords.value="";
	
	var category = xmlDoc.getElementsByTagName("category");
	
	var categoryArray = new Array();
	var categoryNames = new Array();
	var categoryPath = new Array();
	var iTab = 0;

	for (i = 0; i < category.length; i++) {
	
		if(category[i].getAttribute("name")=="WelcomeVideo/Welcome Video"){
			var questionW = category[i].getElementsByTagName("question");
			
			var answerText = "";
			var link = "";
			var image = "";
			var imageName = "";
			var nameVideo = "";
			
			randomVideo = Math.floor(Math.random()*questionW.length+1);

			for (j = 0; j < questionW.length; j++) {
				var identW = questionW[randomVideo-1].getElementsByTagName("ident");
				var textW = questionW[randomVideo-1].getElementsByTagName("text");
				var answerW = questionW[randomVideo-1].getElementsByTagName("answer");				
				var infolinkW = questionW[randomVideo-1].getElementsByTagName("infolink");
				var infoimageW = questionW[randomVideo-1].getElementsByTagName("infoimage");
				var infoimagenameW = questionW[randomVideo-1].getElementsByTagName("infoimagename");
				var videofileW = questionW[randomVideo-1].getElementsByTagName("videofile");
				var keywordsW = questionW[randomVideo-1].getElementsByTagName("keywords");
				var publishedW = questionW[randomVideo-1].getElementsByTagName("published");			
				
				if((publishedW[0] != undefined) && (publishedW[0].firstChild.nodeValue=="yes")){
					
					//contentTextW += publishedW[0].firstChild.nodeValue + "<br/>";
					//contentTextW += textW[0].firstChild.nodeValue + "<br/>";
					var answerTextW = answerW[0].firstChild.nodeValue;
					
					if(infolinkW[0] != undefined){				
						var linkW = infolinkW[0].firstChild.nodeValue;
					}
					if(infoimageW[0] != undefined){
						var imageW = infoimageW[0].firstChild.nodeValue;
					}
					if(infoimagenameW[0] != undefined){
						var imageNameW = infoimagenameW[0].firstChild.nodeValue;
					}
					if(videofileW[0] != undefined){
						var nameVideoW = videofileW[0].firstChild.nodeValue;
					}
					if(keywordsW[0] != undefined){
					//	contentTextW += keywordsW[0].firstChild.nodeValue + "<br/>";
					}					
				}				
			}	
			if(LA_GetCookie("WelcomeMessage")!=="true"){		
				LA_SetCookie("WelcomeMessage", "true", "");
				viewWelcomeVideo(nameVideoW, answerTextW, linkW , imageW , imageNameW);		
			}else{
				var flashvars = {
					autoStart: true,
					idle:"idle_CIF.flv",
					prcentBg:"70",
					bgColor:"bfa67d",
					powered:false,   
					logo:false
					};
				var params = {
				  menu: "false",
				  wmode:"transparent",
				  allowScriptAccess : "always"
				};

				var attributes = {
				  id: "LA_VideoViewer",
				  name: "LA_VideoViewer"
				};
				swfobject.embedSWF("./LA_FAQ/videos/swf/LA_VideoViewer.swf", "swfVideo", "280", "254", "9.0.0","./flv/expressInstall.swf",flashvars, params, attributes);
			}
		}
		else if(category[i].getAttribute("name")=="WelcomeVideo"){
		}
		else{
			var nameCategory = category[i].getAttribute("name").split("faqCategories/");		
			var questionF = category[i].getElementsByTagName("question");
			if(nameCategory[1] != undefined){
				read(nameCategory[1], questionF);
			}		
		}
	}
	document.getElementById('FAQs').innerHTML = affichage( cat );
		
	
}

//Compare les mots clefs de l'utilisateur et ceux du tableau (renovie true ou false)
function checkKeyWord(a_user, a_tab) {
	var reg=new RegExp("[ ,;]+", "g");	
	
	var a_tabA = str_replace(' ', '', a_tab);
	var a_userA = str_replace(' ', '', a_user);
	
	var a_tab_array = a_tabA.split(reg);						
	var a_user_array = a_userA.split(reg);
	
	
	var finded = false;
	for(var i = 0; i < a_tab_array.length && !finded; i++ )
	for(var j = 0; j < a_user_array.length && !finded; j++ )
	{		
		if( a_tab_array[i].toLowerCase() == a_user_array[j].toLowerCase() && a_user_array[j].toLowerCase() != "")	finded = true
	}
	return finded;
}

//Fonction appellé par le formulaire qui traite le tableau
function setFilter() {
	
	if( document.keywordSearch.keyWords.value != "" )
	{
		var newCat = cloneArray(cat);
		setFilter2( newCat );
		if( affichage( newCat) != "" )
		{
			document.getElementById('FAQs').innerHTML = affichage(newCat ,"", true);
		}else{
			document.getElementById('FAQs').innerHTML ="<div id='noAnswer'>No answer<br/><br/><a href='javascript:printFaq();'>Display all FAQs</a></div>";
		}
	} else {
		document.getElementById('FAQs').innerHTML = affichage(cat , "" , true);
	}
}

//Fonction qui permet de supprimer les entrées qui ne contiennent pas les mots clefs
function setFilter2(tableau) {
	var valueKeyword = document.keywordSearch.keyWords.value;
	
	for(var j in tableau["child"] )
	{ 	
		var counterChild=0;		
		for(var k in tableau["child"][j]["child"] ){			
			counterChild ++
			
			setFilter2( tableau["child"][j] );
		}		
		
		if(( tableau["child"][j]["questions"][0].length > 0)||(counterChild > 0)){		

			for(var ques in tableau["child"][j]["questions"][1])
			{	
				keyword = tableau["child"][j]["questions"][1][ques];		
				var isValid = checkKeyWord( valueKeyword , keyword );
				if( !isValid ) tableau["child"][j]["questions"][0][ques] = "";
			}
		}
	}	
}

//Fonction qui clonne un tableau
function cloneArray( a_array ) {
	var clone = new Array();

	for( var i in a_array )
	{
		if( is_array( a_array[i] ) )
		{
			clone[i] = cloneArray( a_array[i] );
		} else {
			clone[i] = a_array[i];
		}
	}
	return clone;	
}

//Affiche des informations lisibles pour un tableau
function print_r( array, return_val ) {
    // *     example 1: print_r(monTableau, true);
    
    var output = "", pad_char = " ", pad_val = 4;
 
    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        if (cur_depth > 0) {
            cur_depth++;
        }
 
        var base_pad = repeat_char(pad_val*cur_depth, pad_char);
        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";
 
        if (typeof obj === 'object' && obj !== null && obj.constructor && obj.constructor.name !== 'PHPJS_Resource') {
            str += "Array\n" + base_pad + "(\n";
            for (var key in obj) {
                if (obj[key] instanceof Array) {
                    str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
                } else {
                    str += thick_pad + "["+key+"] => " + obj[key] + "\n\n";
                }
            }
            str += base_pad + ")\n";
        } else if(obj == null || obj == undefined) {
            str = '';
        } else { // for our "resource" class
            str = obj.toString();
        }
 
        return str;
    };
 
    var repeat_char = function (len, pad_char) {
        var str = "";
        for(var i=0; i < len; i++) { 
            str += pad_char; 
        }
        return str;
    };
    output = formatArray(array, 0, pad_val, pad_char);
 
    if (return_val !== true) {
        if (document.body) {
        }
        else {
            try {
                XULDocument; // We're in XUL, so appending as plain text won't work
            }
            catch(e) {
            }
        }
        return true;
    } else {
        return output;
    }
}