/*
 * file: modulex.parser.js
 * -
 * What: Modulex XML parser main Object
 * When: -
 * Why: -
 */
 
/* Global variables */


/*
 * object: Modulex.Parser
 * -
 * What: 
 * When: 
 * Why: 
 */
 
Modulex.Parser = {

	/*
	 * function: Modulex.Parser.init()
	 * -
	 * What: 
	 * When: 
	 * Why: 
	 */
	 
	init: function(originalRequest) {
	
		var xmlData = originalRequest.responseXML.getElementsByTagName("data")[0];
		
		/* XML parser initialization */
		try {
			Modulex.Parser.parseCategories(xmlData.getElementsByTagName("categories")[0].childNodes);
			Modulex.Parser.parsePriceRanges(xmlData.getElementsByTagName("priceRanges")[0].childNodes);
			Modulex.Parser.parseModels(xmlData.getElementsByTagName("models")[0].childNodes);
		}
			
		/* Catch any error */
		catch(error) {
			Modulex.error(error);
		}
		
		/* Finally */
		finally {
		}
		
		return true;
	},
	
	/*
	 * function: Modulex.Parser.parseCategories()
	 * -
	 * What: 
	 * When: 
	 * Why: 
	 */
	 
	parseCategories: function(xmlNode) {
	
		/* Parsing each model node */
		for(var i=0;i<xmlNode.length;i++) {
			
			/* Verifying that this is real XML node */
			if(xmlNode[i].nodeType == 1) {
			
				var id = xmlNode[i].getAttribute("id");
				var name = xmlNode[i].firstChild.nodeValue;
				
				gModulexCategoryArray[id] = name;
			}
		}
	
		Modulex.Display.updateCategoryList();
		
		return true;
	},
	
	/*
	 * function: Modulex.Parser.parsePriceRanges()
	 * -
	 * What: 
	 * When: 
	 * Why: 
	 */
	 
	parsePriceRanges: function(xmlNode) {
	
		/* Parsing each model node */
		for(var i=0;i<xmlNode.length;i++) {
			
			/* Verifying that this is real XML node */
			if(xmlNode[i].nodeType == 1) {
			
				var id = xmlNode[i].getAttribute("id");
				var thumbnailUrl = xmlNode[i].getAttribute("thumbnailUrl");
				var name = xmlNode[i].firstChild.nodeValue;
				
				gModulexPriceRangeArray[id] = {
					name: name,
					thumbnailUrl: thumbnailUrl
				};
			}
		}
		
		Modulex.Display.updatePriceRangeList();
		
		return true;
	},
	
	/*
	 * function: Modulex.Parser.parseModels()
	 * -
	 * What: 
	 * When: 
	 * Why: 
	 */
	 
	parseModels: function(xmlNode) {
		
		/* Parsing each model node */
		for(var i=0;i<xmlNode.length;i++) {
			
			/* Verifying that this is real XML node */
			if(xmlNode[i].nodeType == 1) {
			
				var category = "";
				var priceRange = "";
				var name = "";
				var description = "";
				var roomNumber = "";
				var surface = "";
				var mainThumbnail = "";
				var images = "";
				var technicalSheet = "";
				var slideshow = "";
			
				if(eval(xmlNode[i].getElementsByTagName("category")[0].firstChild)) {
					var category = $A(xmlNode[i].getElementsByTagName("category")[0].firstChild.nodeValue.toString().split(','));
				}
				if(eval(xmlNode[i].getElementsByTagName("priceRange")[0].firstChild)) {
					var priceRange = xmlNode[i].getElementsByTagName("priceRange")[0].firstChild.nodeValue;
				}
				if(eval(xmlNode[i].getElementsByTagName("name")[0].firstChild)) {
					var name = xmlNode[i].getElementsByTagName("name")[0].firstChild.nodeValue;
				}
				if(eval(xmlNode[i].getElementsByTagName("description")[0].firstChild)) {
					var description = xmlNode[i].getElementsByTagName("description")[0].firstChild.nodeValue;
				}
				if(eval(xmlNode[i].getElementsByTagName("roomNumber")[0].firstChild)) {
					var roomNumber = xmlNode[i].getElementsByTagName("roomNumber")[0].firstChild.nodeValue;
				}
				if(eval(xmlNode[i].getElementsByTagName("surface")[0].firstChild)) {
					var surface = xmlNode[i].getElementsByTagName("surface")[0].firstChild.nodeValue;
				}
				var mainThumbnail = {url: xmlNode[i].getElementsByTagName("mainThumbnail")[0].getAttribute("url")};
				var images = $A(xmlNode[i].getElementsByTagName("images")[0].childNodes).collect(function(imageNode) {

						/* Verifying that this is real XML node */
						if(imageNode.nodeType == 1) {
							return {
								url: imageNode.getAttribute("url"),
								thumbnailUrl: imageNode.getAttribute("thumbnailUrl")
							};
						}
					});
				if(eval(xmlNode[i].getElementsByTagName("technicalSheet")[0])){
					var technicalSheet = {url: xmlNode[i].getElementsByTagName("technicalSheet")[0].getAttribute("url")}
				}
				if(eval(xmlNode[i].getElementsByTagName("slideshow")[0])){
					var slideshow = {url: xmlNode[i].getElementsByTagName("slideshow")[0].getAttribute("url")}
				}
				gModulexModelArray.push({
					category: category,
					priceRange: priceRange,
					name: name,
					description: description,
					roomNumber: roomNumber,
					surface: surface,
					mainThumbnail: mainThumbnail,
					images: images,
					technicalSheet: technicalSheet,
					slideshow: slideshow
				});
			}
		}
		
		/* Make a copy of the main models Array */
		gModulexModelArray_runtime = gModulexModelArray.slice();
		
		/* Check if categoryId passed in URL */
		var categoryIdRegExp = /categoryId=([^&]+)(.*)/g;
		var categoryIdRegExpArray = categoryIdRegExp.exec(window.location.search);
		if(categoryIdRegExpArray != null && categoryIdRegExpArray.length > 1) {
			gModulexCurrentCategory = categoryIdRegExpArray[1];
			Modulex.Actions.filterModelsByCategory(gModulexCurrentCategory);
		} else {
			//gModulexCurrentCategory = "1";
			Modulex.Actions.filterAllModels();
		}
		
		
		
		return true;
	}
}
