// JavaScript Document
//layout vars
var width;
var rootDiv = null;

//initial functions
function createModules (){
	//create main div
	if (!rootDiv){
		rootDiv = document.createElement('div');
		rootDiv.id = 'rootDiv';
		document.body.appendChild(rootDiv);
	}
	//make request
	try {
		request ('all', 'php/modules.php', handleModuleXML);
	}
	catch(e){
		alert (e.message);
	}
}

function handleModuleXML (xml){
	//parse xml
	var xmlObject 	= parseXML(xml, true);
	
	var modules		= new Array();
	var mod_xml		= xmlObject.getElementsByTagName('module');
	
	for (var i=0; i<mod_xml.length; i++){
		var curNode = mod_xml[i];
		modules[i]	= new Object();
				
		for (var j=0; j<curNode.attributes.length; j++){
			var att 			= curNode.getAttributeNode(curNode.attributes[j].name);
			var att_name 		= att.name;
			var att_value 		= unescape(att.value);
			
			modules[i][att_name]	= att_value;
			
			//special css vars
			if (att_name == 'css'){
				var css_array = att_value.split(';');
				for (var k=0; k<css_array.length; k++){
					var css_att_name = css_array[k].split("=")[0];
					var css_att_val = css_array[k].split("=")[1];
					modules[i][css_att_name] = css_att_val;
				}
			}
		}
	}
	
	
	//set vars
	width	= 100/modules.length;
		
	//create objects
	for (var i=0; i<modules.length; i++){
		var modDiv 	= document.createElement('div');
		modDiv.id	= String(modules[i].target);
		rootDiv.appendChild(modDiv);
		
		var mod		= new Module (modules[i]);
		modDiv.appendChild(mod);
	}
}


function Module (mod_object){
	var mod				= document.createElement('div');
	mod.className		= 'mod';
	mod.id				= mod_object.title;
	mod.style.width		= mod_object.width;
	
	//head : box, graphic, title
	var header			= document.createElement('div');
	header.className	= 'modheader';
	header.id			= mod_object.title+'_header';
	header.style.backgroundColor = mod_object.backgroundColor;
	mod.appendChild (header);
	
	if (mod_object.min == 1){
		//if minimizable, create arrow graphic
		var min				= document.createElement('div');
		min.className		= 'min';
		min.id				= mod_object.title+'_min';
		var minId			= mod_object.title+'_img';
		min.innerHTML		=  '<img id="'+minId+'"src='+ minImage+ ' />';
		header.appendChild (min);
	}
	var title			= document.createElement('div');
	title.className		= 'title';
	title.id			= mod_object.title+'_title';		
	title.innerHTML		= '<strong>'+ mod_object.title + '</strong>';
	header.appendChild (title);
	
	var contents		= document.createElement('div');
	contents.className	= 'moduleContent';
	contents.id			= mod_object.title+'_contents';
	if (mod_object.contents.length > 1){
		createContents(contents, mod_object.contents);
	} else {
	}
	mod.appendChild (contents);
	
	//set properties
	mod.opened			= true;
	mod.header			= header;
	mod.title			= title;
	mod.contents		= contents;
	mod.obj				= mod_object;
		
	if (mod_object.min == 1){
		mod.min				= minId;
		mod.header.onclick			= this.collapse;
	} 
	return mod;
}

//module methods
Module.prototype.collapse = function (){
	var mod		= this.parentNode;
	var c_div 	= mod.contents;
	if (mod.min){
		var min		= document.getElementById(mod.min);
	 }
	//set init
	if (!c_div.style.display){
		c_div.style.display 	= 'block';
		c_div.style.visibility	= 'visible';
	}
		
	//expand
	if (c_div.style.display 	== 'none'){
		mod.className			= 'mod';
		mod.opened				= true;
		mod.style.width			= mod.obj.width;
		min.src					= minImage;
		c_div.style.display 	= 'block';
		c_div.style.visibility	= 'visible';
		
	//collapse
	} else {
		mod.className			= 'miniMod';
		mod.opened				= true;
		mod.style.width			= mod.obj.width;
		min.src					= maxImage;
		c_div.style.display 	= 'none';
		c_div.style.visibility	= 'hidden';
	}
}

function createContents (scope, type){
	switch (type){
		case 'blog':
		request('', blog_src, blogHandler, true)
		blogScope = scope;
		break;
		
		default :
		scope.innerHTML = type;
	}
}

/********************************************************************
	LOAD MODULE!!!
********************************************************************/

function loadModule (type, div){
	alert(type);
	type = type.substr(0,1).toUpperCase()+type.substr(1);
	eval("load"+type+"("+div+");");
	alert(type);
}
