com_pagesociety_web_ModuleRequest.USE_JSONP = true;

com_pagesociety_web_ResourceUtil.init([ 
	{ resource_module_name: "Resource", resource_entity_name: "Resource", resource_base_url: "http://postera.s3.amazonaws.com/" },
	{ resource_module_name: "PosteraSystems",resource_entity_name: "SystemResource", resource_base_url: null },
	{ resource_module_name: "PosteraSystemSupportResource", resource_entity_name: "SystemSupportResource", resource_base_url: "http://postera.s3.amazonaws.com/" }
]);

var ua = navigator.userAgent;
var IS_ANDROID =  /iPad/i.test(ua);
var IS_IPAD =  /iPad/i.test(ua);
var IS_IPHONE = /iPhone/i.test(ua);
var IS_IOS =  IS_IPAD || IS_IPHONE; 
var IS_WEBKIT =  IS_IOS || /webkit/i.test(ua);

var _site;
var _selected_node;
var _tree;
var _system_properties;
var _system_properties_complete;
var _root_node;
var _in_styler = false;

function com_postera_system_init_js_styler(code_root,edit_tree,node_id,idx,b)
{
	_in_styler = b;
	com_postera_system_code_root = code_root;
	com_postera_system_set_preview_visible(true);
	com_postera_do_module("PosteraTreeModule/GetEditTree",[], function(edit_tree)
	{
		_site				= null;
		_tree			 	= edit_tree;
		com_postera_do_module("PosteraTreeModule/FillSystemNode", [ _tree._attributes.root.getId() ], function(node)
		{
			com_postera_system_add_parents(node);
			_root_node = node;
			_tree._attributes.root = node;
			include("main.js", function()
			{
				com_postera_init_system(_root_node, function(){
					com_postera_system_hookup_deep_linking();
					com_postera_system_display(_root_node._id);
					com_postera_system_complete_js_styler();
				});
			});
		});
	});
}

function com_postera_system_update_js_styler(code_root,edit_tree,node_id,idx,b)
{
	_in_styler = b;
	com_postera_system_code_root = code_root;
	com_postera_system_set_preview_visible(true);
	com_postera_do_module("PosteraTreeModule/GetEditTree",[], function(edit_tree)
	{
		_site				= null;
		_tree			 	= edit_tree;
		com_postera_do_module("PosteraTreeModule/FillSystemNode", [ _tree._attributes.root.getId() ], function(node)
		{
			com_postera_system_add_parents(node);
			_root_node = node;
			_tree._attributes.root = node;
			com_postera_init_system_root(_root_node);
			com_postera_system_display(_selected_node._id);
			com_postera_system_complete_js_styler();
		});
	});
}

function com_postera_system_complete_js_styler()
{
	if (swfobject!=null)
	{
		var swf = swfobject.getObjectById("swf_content");
		if (swf!=null)
			swf.com_postera_system_ready();
	}
	
}

function com_postera_system_init(type, id)
{
	com_postera_do_module("PosteraSystems/GetSiteBy"+type, [ id ], com_postera_system_on_get_data)
}

function com_postera_system_on_get_data(site)
{
	_site				= site;
	_tree			 	= site._attributes.published_tree;

	var system			= site._attributes.system; 
	var system_data 	= site._attributes.system_data;
	_system_properties_complete = null;
	if (system_data!=null)
		try {
			_system_properties_complete = system_data.evalJSON();
			
		} catch(e) {
			Logger.log("Can't decode "+system_data);
			//_system_properties = getPresets()[0];
		}
	_system_properties = {};
	com_postera_system_flatten_props(_system_properties_complete, _system_properties);
//	Logger.log(_system_properties);
//	else
//		_system_properties = getPresets()[0];
	com_postera_do_module("PosteraTreeModule/FillSystemNode", [ _tree._attributes.root.getId() ], com_postera_system_on_fill_node);
}

function com_postera_system_on_fill_node(node)
{
	com_postera_system_add_parents(node);
	_root_node = node;
	_tree._attributes.root = node;
	com_postera_init_system(_root_node, function(){
		com_postera_system_hookup_deep_linking();
	});
}

function com_postera_init_system(root_node)
{
	//override, optional
}

function com_postera_system_hookup_deep_linking()
{
	SWFAddress.addEventListener(SWFAddressEvent.CHANGE, function(event) 
    {
		com_postera_system_display(event.path);
    });
	com_postera_system_display(SWFAddress.getValue());
}

function com_postera_system_display(id)
{
	var n = null;
	if (id != null)
	{
		if (!isNaN(id))
		{
			if (id==-1)
				throw new Error("?")
			n = com_postera_system_find_node_by_id(id, _tree._attributes.root);
			//console.log("1",n,id);
		}
		else if (_in_styler && id.indexOf("/style/")==0)
		{
			id = id.split("/")[2];
			n = com_postera_system_find_node_by_id(id, _tree._attributes.root);
			//console.log(n);
		}
		else 
		{
			//console.log("3",id)
			if (id.indexOf("/")==0)
				id = id.substring(1);
		    n = com_postera_system_find_node_by_node_id(id, _tree._attributes.root);
		}
	}
    if (n == null)
        n = _tree._attributes.root;
    
    _selected_node = n;
    SWFAddress.setTitle(n._attributes.data._attributes.title);
    com_postera_display_node(n); 
}

function com_postera_system_get_selected_node_id()
{
	return _selected_node._id;
}

function com_postera_display_node(node)
{
	throw new Error("override abstract function com_postera_display_node");
}

function com_postera_system_navigate(tree_node,force)
{
	if (_in_styler)
		com_postera_system_display(tree_node._attributes.node_id);  // SWFAddress.setValue('/style/'+tree_node._id); //
	else
	{
		var xtra = "";
		if (force != null && force)
			xtra = "?____m="+Math.random();
		SWFAddress.setValue(tree_node._attributes.node_id+xtra);
	}
}


/// util

function com_postera_do_module(m,a,f)
{
	com_pagesociety_web_ModuleRequest.doModule(m,a,f, function(e){ alert("ERROR "+e); });
}

function com_postera_system_flatten_props(n,c)
{
	for (var p in n)
	{
		if (typeof(n[p])=="string" || typeof(n[p])=="number")
			c[p] = n[p];
		else if (typeof(n[p]) != "function")
			com_postera_system_flatten_props(n[p], c);
	}
}



/////// rec


function com_postera_system_find_node_by_node_id(id,node)
{
    if (node==null)
        return null;
    if (node._attributes.node_id==id)
        return node;
	for (var i=0; i<node._attributes.children.length; i++)
	{
		var nn = com_postera_system_find_node_by_node_id(id,node._attributes.children[i]);
		if (nn!=null)
			return nn;
	}
	return null;
}

function com_postera_system_find_node_by_id(id,node)
{
    if (node==null)
        return null;
    if (node._id==id)
        return node;
	for (var i=0; i<node._attributes.children.length; i++)
	{
		var nn = com_postera_system_find_node_by_id(id,node._attributes.children[i]);
		if (nn!=null)
			return nn;
	}
	return null;
}

function com_postera_system_add_parents(node)
{
    if (node==null)
        return;
	for (var i=0; i<node._attributes.children.length; i++)
	{
		var nn = node._attributes.children[i];
		nn._attributes.parent_node = node;
		nn._attributes.parent = node;
		com_postera_system_add_parents(nn);
	}
}

function com_postera_system_tree_ancestors(node)
{
	var a = [];
	var p = node._attributes.parent;
	while (p!=null)
	{
		a.unshift(p);
		p = p._attributes.parent;
	}
	return a;
}


//props
var SystemProperty = {};
SystemProperty.TYPE_COLOR 			= 0;
//SystemProperty.TYPE_COLOR_PALETTE = 1;
SystemProperty.TYPE_INTEGER 		= 100;
SystemProperty.TYPE_NUMBER 			= 101;
SystemProperty.TYPE_STRING 			= 200;
SystemProperty.TYPE_IMAGE 			= 300;
SystemProperty.TYPE_FONT 			= 400;
SystemProperty.TYPE_GROUP 			= 1000;
SystemProperty.TYPE_HIDDEN 			= 10000;
SystemProperty.ROW_BEGIN 			= 10001;
SystemProperty.ROW_END 				= 10002;
SystemProperty.GAP 					= 10003;

