
var Jaya = {};
Jaya.webroot ;
Jaya.divs = null;
Jaya.models = {};
Jaya.panels = null;
Jaya.scrollPos = null;
Jaya.scrolling = null;
Jaya.toploopinterval ;
Jaya.loopinterval ;
Jaya.friendNames = null;
Jaya.modelFriends = null;
Jaya.refreshmodel = false;


Jaya.init = function (wroot, jroot) {
	Jaya.webroot = wroot;
	Jaya.joomlaroot = jroot;
	Jaya.bodymodel = {};
	Jaya.bodymodel.maxy = 100;
	Jaya.divs = {};
	Jaya.guidivs ={};
	Jaya.yuidivs = {};
	Jaya.panels = {};
	Jaya.modelFriends = new Array();
	Jaya.refreshmodel = false;
	Jaya.scrollPos = "NW";
	Jaya.scrolling = false;
	if(window.top == window) {
		Jaya.toploopinterval = setInterval(Jaya.toploop, 3000);
	} else {
		Jaya.loopinterval = setInterval(Jaya.loop, 2000);
	}
	//alert("Jaya.init() " + wroot);
}

Jaya.newModel = function(m) {
	Jaya.models[m.name] = m;
}
Jaya.makeDiv = function(m, div, guidiv, yuidiv) {
	//alert(" makeDiv m.name " + m.name + " div.id=" + div.id + " guidiv.id=" + guidiv.id);
	//var m = JSON.parse(jsonModel, Jaya.jsonFilterParse);
	Jaya.models[m.name] = m;
	if(!JayaUtil.isDefined(div)){
		div =document.getElementById(m.name);
		//alert(div.id);
	}
	Jaya.divs[m.name] = div;
	if(!JayaUtil.isDefined(guidiv)){
		guidiv =document.getElementById(m.name + "_gui");
	}
	Jaya.guidivs[m.name] = guidiv;
	if(!JayaUtil.isDefined(yuidiv)) {
		yuidiv =document.getElementById(m.name + "_yui");
	}
	Jaya.yuidivs[m.name] = yuidiv;
	
	if(!div && div.id != m.name) {
		alert("ERROR NO DIV for model: " + m.name + " or missmatch div.id: " + yuidiv.id);
	}
	if(JayaUtil.isDefined(guidiv)) {
		//JayaGui.prepareModel(m, yuidiv);
	}
	if(JayaUtil.isDefined(yuidiv)) {
		JayaYui.prepareModel(m, yuidiv);
	}
	//alert("prepareModel " + div.id + " guidiv="  + guidiv);
	if(JayaUtil.isDefined(div.getElementsByTagName("h3")[0])) {
		m.myheader = div.getElementsByTagName("h3")[0].innerHTML ;
	} else {
		m.myheader = "";
	}
	m.myhtml = Jaya.getReadableHtml(div);
	if(window.location.hash && window.location.hash.indexOf("{") == 1) {
		Jaya.hashmodel = JSON.parse(window.location.hash.substring(1), Jaya.jsonFilterParse);
		Logger.log("JayaManager hashmodel=" + Jaya.hashmodel.name, "Jaya");
	}
	
	JayaUtil.applyCss(m.cssurl);
	
	if (m.cssurl.indexOf("yui.css") > 0 && JayaUtil.isDefined(Jaya.yuidivs[m.name])) {
		//alert("m.topyuiimage " + m.name + " " + m.topyuiimage);
		JayaYui.makeYuiPanel(m, Jaya.yuidivs[m.name]);
	}
	//alert(" makeDiv m.name " + m.name + " div.id=" + div.id + " guidiv.id=" + guidiv.id);
	Jaya.refreshAllModels();
	m.isStarted = true;
	
	if(Jaya.models[m.name].url.indexOf(".swf") > 0 && (Jaya.models[m.name].url.indexOf("?") == -1) ) {
		Jaya.insertFlash(div, Jaya.models[m.name]);
	} else if(Jaya.models[m.name].url.indexOf(".gif") > 0) {
		div.innerHTML = "<BR><BR><BR><img src=\"" + Jaya.models[m.name].url + "\">";
	} else if (Jaya.models[m.name].url.indexOf(".png")>0 || Jaya.models[m.name].url.indexOf(".jpg")>0 && Jaya.models[m.name].style != "panel") {
		div.innerHTML = "<img src=\"" + Jaya.models[m.name].url + "\" width=\"100%\" height=\"100%\">";
	} else if((Jaya.models[m.name].url.indexOf(".html") > 0) || (Jaya.models[m.name].url.indexOf(".php") > 0)) {
		div.innerHTML = Jaya.getInnerHTML(Jaya.models[m.name]);
		//Jaya.insertPanel(div, Jaya.models[m.name], Jaya.getInnerHTML(Jaya.models[m.name]) , false);
	} else if(Jaya.models[m.name].url != "") {
		div.innerHTML = "<IFRAME id=" + m.name + "_i" + " src=" + m.url + " name=" + m.name + " scrolling=no" 
				+ " width='100%' height='100%' frameborder='0' > </IFRAME>";
	}
}

Jaya.prepareModel = function(m, div, guidiv, yuidiv) {
	
	return;
}
Jaya.refreshModel = function(m) {
	if(JayaUtil.isDefined(Jaya.divs[m.name]) && m.isStarted) {
		//Logger.log("refreshModel.. m.name=" + m.name +" content offsetHeight=" +Jaya.divs[m.name].offsetHeight);
		//Jaya.alignDivToModel(m, Jaya.divs[m.name]);
		//alert("Jaya.refreshModel()" );
		JayaJoomla.refresh(m, Jaya.divs[m.name]);
	}
	if(JayaUtil.isDefined(Jaya.guidivs[m.name]) && m.isStarted){
		//Logger.log("refreshModel... m.name=" + m.name +" guidivId=" +Jaya.guidivs[m.name].id);
		//Jaya.alignDivToModel(m, Jaya.guidivs[m.name]);
		JayaGui.refresh(m, Jaya.guidivs[m.name]);
	}
	if(m.cssurl.indexOf("yui.css") >0 && JayaUtil.isDefined(Jaya.yuidivs[m.name])&& m.isStarted) {
		//Logger.log("......... m.name=" + m.name +" yui offsetHeight=" +Jaya.yuidivs[m.name].offsetHeight);
		//Jaya.alignDivToModel(m, Jaya.yuidivs[m.name]);
		JayaYui.refresh(m, Jaya.yuidivs[m.name]);
	}
	return;
}
Jaya.refreshAllModels = function() {
	for(var modelname in Jaya.models) {
		//Logger.log("refreshAllModels " + modelname);
		Jaya.refreshModel(Jaya.models[modelname]);
	}
	return;
}

Jaya.getReadableHtml = function (div) {
	return div.innerHTML;
	var res = "";
	//var elms = Jaya.getElementsByClassName("moduletable|contentpaneopen", "", div);
	var elms = JayaUtil.getElementsByTagName(div, "p");
	for(var i = 0, maxI = elms.length; i < maxI; ++i) {
		var elm = elms[i];
		//alert("nodeValue: " + elm.innerHTML   + "\Id: " + elm.id + "\nelem: " + elm);
		res = res + elm.innerHTML + "<br/>";
	}
	//Logger.log("getReadableHtml " + res);
	//return res;
}

Jaya.insertFlash = function (div, model) {
	if( model == undefined || model.webroot == undefined || model.gw == undefined) {
		alert("..NO Model or WEBROOT or GATEWAY!" +div.id + " model=" + model + " "+ model.webroot + " " + model.gw);
	}
	var swf = model.webroot + "/" + model.url;
	if(model.url.indexOf("http") == 0) {
		swf =  model.url;
	}
	if(window.parent != window.self) {
		tmp = window.parent.getModel(window.name);
		model.name = tmp.name;
		model.f = tmp.f;
	}
	//alert("insertFlash model.name=" + model.name + " window.name=" + window.name+ " "+ swf + " " + model.w + " "+document.getElementById("flashmodel"));
	window[model.name] = new Object();
	var flashvars = {name: model.name,
					 f: model.f,
					 g: model.g,
					 home: model.home,
					 webroot: model.webroot,
					 gatewayurl: model.gw,
					 windowlocation: window.location,
					 w: model.w,
					 h: model.h};
	var params = {scale: "noscale",
					swliveconnect:"true",
					allowFullScreen: true,
					wmode: "transparent"};
	var attributes = {id: div.id, name: model.name};
	swfobject.embedSWF(swf, div.id , "100%", "100%", "8", false, flashvars, params, attributes);
	return;
}
Jaya.addFriends = function(names) {
	//alert("flashIt " + names);
	if(names.indexOf(",") > 0 ) {
		Jaya.friendNames = names.split(",");
		
	} else {
		Jaya.friendNames = new Array(names);
	}
	for(var i=0; i<Jaya.friendNames.length; i++) {
		var m = window.parent.getModel(Jaya.friendNames[i]);
		if(m!= undefined) {
			Jaya.modelFriends.push(m);
		}
	}
	return;
}
Jaya.addModel = function(model) {
	if(window.top != window.self) {
		window.parent.addModel(model);
	} else {
		if(Jaya.models[model.name] == undefined) {
			alert("addModel " + model.name);
			Jaya.models[model.name] = model;
		} else {
			//alert("addModel merge... " + model.name);
			for (var propName in model.mcs) {
				//Logger.log("flashIt " + propName + " " + flashModel.mcs[propName]);
				Jaya.mergeMcObj(model.name, model.mcs[propName], false);
			}
		}
	}
	return;
}
Jaya.mergeMcObj = function(modelName, mcObj, overwrite) {
	var mcs = Jaya.models[modelName].mcs;
	if(mcs[mcObj.name] == undefined) {
		var obj = new Object();
		for (var key in mcObj) {
			obj[key] = mcObj[key];
		}
		Logger.log("mergeMcObj Added to model " + modelName  + " mcObj.name=" + mcObj.name , "FlashIt");
		mcs[mcObj.name] = obj;
	} else if(overwrite) {
		Logger.log("mergeMcObj modelName=" + modelName+ " mcObj.name=" + mcObj.name);
		for (var key in mcObj) {
			Jaya.models[modelName].mcs[mcObj.name][key] = mcObj[key];
		}
	}
	return;
}
Jaya.flashIt = function(fromFlashModel) {
	Jaya.collapse("panelmodel");
	var flashModel = JSON.parse(fromFlashModel, Jaya.jsonFilterParse);
	//alert("flashIt ...." + flashModel.name + " f="+flashModel.f + " " + window.location );
	if(window.top != window.self && flashModel.f != undefined) {
		Jaya.addFriends(flashModel.f);
	}
	for(var i=0; i<Jaya.modelFriends.length; i++) {
		var flashMovie = document.getElementById("flashmodel");
		Jaya.modelFriends[i].url = window.parent.getFrameUrl(Jaya.modelFriends[i].name); 
		//alert("flashIt modelFriend.name="  +modelFriend.name + " flashMovie=" + flashMovie);
		if(flashMovie!= undefined) {
			//alert("flashIt sending Back to Flash " +flashModel.name + " url=" +flashModel.url +" modelFriends[i].url= "+Jaya.modelFriends[i].url + " flashModel.f="+flashModel.f + " flashMovie="+ flashMovie);
			flashMovie.jaya_msg_from_js("NEWMODEL", JSON.stringify(Jaya.modelFriends[i]));
		} else {
			alert("flashIt ERROR NO FLASHMOVIE DIV" );
		}
	}
	Jaya.addModel(flashModel);
	//alert("flashIt added .. "+ flashModel.name +" jaya_wizard=" + window.parent.getModel(flashModel.name).mcs["jaya_wizard"].type +" hop="+window.parent.getModel(flashModel.name).mcs["hop"].type );
	Logger.log("flashIt Jaya.model.name=" + Jaya.models[Jaya.model.name].name +" fromFlashModel=" + fromFlashModel , "FlashIt");
	return;
}
Jaya.insertButton = function (div, model) {
	//alert("insertButton " + div.id + " model.url" + model.url + " " + model.clickhandler);
	button = new YAHOO.widget.Button ( { 
					label:"",
					name:model.name,
					id: model.name + "_button",
					container:div.id } );
	button.addListener("click", eval(model.clickhandler), "log");
}
Jaya.getModel = function(modelName) {
	var m = Jaya.models[modelName];
	if(m != undefined) {
		return m;
	} else {
		alert("getModel No such model in this window "+ modelName );
	}
}
Jaya.jsonFilterParse = function(key, value) {
	return key.indexOf('date') >= 0 ? new Date(value) : value;
}

Jaya.setOpacity = function(elem, opacityAsInt) {
    var opacityAsDecimal = opacityAsInt;   
	if (opacityAsInt > 100)
   		opacityAsInt = opacityAsDecimal = 100;
   	else if (opacityAsInt < 0)
    	opacityAsInt = opacityAsDecimal = 0; 
    opacityAsDecimal /= 100;
    if (opacityAsInt < 1)
        opacityAsInt = 1; // IE7 bug, text smoothing cuts out if 0
	elem.style.opacity = (opacityAsDecimal);
	elem.style.filter  = "alpha(opacity=" + opacityAsInt + ")";
	return;
}
Jaya.newHistory = function(story, m) {
	var model= JSON.parse(m, Jaya.jsonFilterParse);
	//alert("newHistory= " + story + " m.name=" + model.name + " home=" + model.home);
	if(window.parent != window.self) {
		if(story == "BACK") {
			window.parent.goTo(-1, model.name);
		} else if(story == "FORWARD") {
			window.parent.goTo(1, model.name);
		} else if(story == "REFRESH") {
			window.parent.goTo(model.url, model.name);
		} else if(story == "HOME"){
			window.parent.goTo(model.home, model.name);
		} else if(story == "GBG"){
			window.parent.goTo(model.g, model.name);
		} else if(story == "FULL") {
			windowprops1 = "left=0,top=0,width=" + screen.width + ",height=" + screen.height +",scrollbars=yes";
			alert("OPENING " + model.url + "  REMEMBER F11");
			preview1 = window.open(model.url, "preview1", windowprops1);
		}
		model.url = window.frames[model.name].location.href;
	}
	return;
}
Jaya.collapse = function(divname) {
	//Jaya.divs[divname].style.zIndex = -111111;
	Jaya.divs[divname].style.zIndex = Jaya.divs[divname].style.zIndex -100000;
	return;
}
Jaya.expand = function(divname) {
	Jaya.divs[divname].style.zIndex = Jaya.divs[divname].style.zIndex < 0 ? (Jaya.divs[divname].style.zIndex+100000) : Jaya.divs[divname].style.zIndex;
	return;
}

Jaya.insertPanel = function (div, model, body, modal) {
	//alert("insertPanel " + div.id + " " +model.url + " " + body);
	Logger.log("insertPanel " + div.id + " model.url=" + model.url);
	Jaya.panels[div.id] = new YAHOO.widget.Panel(div.id, 
				{ 	width: model.w+'px', height: model.h+'px', visible:true, draggable:false, close:true,
					underlay:"shadow", effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.3},
					constraintoviewport:false, fixedcenter:false,
					modal:modal, iframe:false, zIndex: model.zIndex }
				);
	
	//Jaya.panels[div.id].setHeader(model.url);
	Jaya.panels[div.id].setBody(body); // set the dynamic iframe
	//Jaya.panels[div.id].center();
	Jaya.panels[div.id].render(document.body);
	Jaya.panels[div.id].cfg.subscribe("configChanged", function (p_sType, p_aArgs) { 	     
		var aProperty = p_aArgs[0], 
			sPropertyName = aProperty[0], 
			oPropertyValue = aProperty[1]; 
		//alert("The value of the " + sPropertyName + " property was changed to: " + oPropertyValue);     
	});
	return;
}
Jaya.scrollToPos = function(pos) {
	//alert("scrollToPos=" + pos + " getDocWidth=" + Jaya.getDocWidth() + " getDocHeight=" + Jaya.getDocHeight());
	var bigTick = 250;
	if(window.top != window) {
		window.parent.Jaya.scrollToPos(pos);
	} else {
		windowhandle=window;
		if(pos == "NW") {
		  windowhandle.scrollTo(0,0);
		} else if(pos == "SW") {
		  windowhandle.scrollTo(0,Jaya.getDocHeight()/2);
		} else if(pos == "NE") {
		  windowhandle.scrollTo(Jaya.getDocWidth(), 0);
		} else if(pos == "SE") {
		  windowhandle.scrollTo(Jaya.getDocWidth(), Jaya.getDocHeight()/2);
		} else if(pos == "MIDDLE") {
		  windowhandle.scrollTo(Jaya.getDocWidth()/2, 0);
		} else if(pos == "MIDDLEMIDDLE") {
		  windowhandle.scrollTo(Jaya.getDocWidth()/4, Jaya.getDocHeight()/2 );
		} else if(pos == "N") {
		  windowhandle.scrollBy(0,-bigTick);
		} else if(pos == "E") {
		  windowhandle.scrollBy(5000,0);
		} else if(pos == "S") {
		  windowhandle.scrollBy(0,bigTick);
		} else if(pos == "W") {
		  windowhandle.scrollBy(-5000,0);
		} else if(pos > 0 || pos < 0) {
		  windowhandle.scrollBy(pos,0);
		}
	}
	return;
}

Jaya.toploop = function() {
	//alert("toploop " + f_clientHeight() + " left:"+ document.getElementById("left").clientHeight);
	Jaya.refreshAllModels();
	//clearInterval(Jaya.toploopinterval);
	//Logger.log("JayaManager toploop " + new Date());
}
Jaya.loop = function() {
	if(Jaya.modelFriends != null) {
		//alert("loop Jaya.friendNames.length="  + Jaya.friendNames.length );
		for(var i=0; i<Jaya.modelFriends.length; i++) {
			if(Jaya.modelFriends[i].url != window.parent.getFrameUrl(Jaya.modelFriends[i].name) || Jaya.refreshmodel ){
				if(Jaya.refreshmodel) {
					Jaya.modelFriends[i].url = window.parent.getFrameUrl(Jaya.modelFriends[i].name);
					var flashMovie = document.getElementById("flashmodel");
					if(flashMovie!= undefined) {
						//alert("loop sending Back to Flash modelFriends[i].url= "+Jaya.modelFriends[i].url + " flashMovie="+ flashMovie);
						flashMovie.jaya_msg_from_js("NEWMODEL", JSON.stringify(Jaya.modelFriends[i]));
					}
					 Jaya.refreshmodel = false;
				} else {
					 Jaya.refreshmodel = true;
				}
			}
		}
	} else {
		//alert("loop NO Jaya.modelFriends " + Jaya.modelFriends);
	}
}

Logger = {};
var loggers = null;
var divs = null;
var started = false;
Logger.insertLogger = function (div) {
	//alert("Logger insertLogger " + div.id );
	if(!Logger.started) {
		Logger.started = true;
		Logger.loggers = new Object();
		Logger.divs = new Object();
	}
	Logger.divs[div.id] = div;
	Logger.loggers[div.id] = new YAHOO.widget.LogReader(div.id, {verboseOutput:false, outputBuffer:500, right:0, isCollapsed:true} );
	Logger.loggers[div.id].setTitle("Jaya Logger:   " + div.id);
	Logger.loggers[div.id].hide();
	Logger.divs[div.id].style.zIndex = -20000;
},
Logger.log = function(msg, type ) {
	if(window.parent != window) {
		window.parent.log(msg, type);
	} else {
		YAHOO.log(msg, type);
	}
},
Logger.collapse = function(logname) {
	Logger.divs[logname].style.zIndex = -20000;
	//Logger.log("collapse " + Logger.divs[logname].id + " z=" +Logger.divs[logname].style.zIndex);
},
Logger.expand = function(logname) {
	Logger.loggers[logname].show();
	Logger.divs[logname].style.zIndex = 50;
},
Logger.isExpanded = function(loggername) {
	return Logger.divs[loggername].style.zIndex > 0 ? true : false;
}
Logger.toggleExpandCollapse = function(e, loggername)  {
	if (Logger.isExpanded(loggername)) {
		Logger.collapse(loggername);
	} else {
		Logger.expand(loggername);
	}
}


