/**
 * Framework web source code
 * Copyright (C) 2011 by:
 * Jaume Bellet <mauge@bixo.org>
 * Urgell Maquinaria Agricola SA -Plegamatic-
 *
*/
 
var RESULT_CODE_OK = 1;
var RESULT_CODE_FAIL = -1;
 
var TYPE_URL_REQUEST = 1;
var TYPE_URL_ACTION = 2;
var TYPE_URL_XML = 3;
var TYPE_URL_SCRIPT = 4;
var TYPE_SHELL = 5;
var TYPE_URL_DOCUMENT = 6;
 
var ERR_CODE_NO_FILE = -10;

var IGNORE_VISIBLE_FLAG = 1;
 
 
var inits = new Array ();
var frame_data_do = null;  // (xml)   this function if set processes the info loaded on iframe
 
$(document).ready(function() {
	for (i=0;i<inits.length;i++) inits[i]();
});
 
function build_url (type, obj,file,params)
{
	url = base_url;
		   
	switch (type)
	{
		case TYPE_URL_REQUEST: ext='.html'; break;
		case TYPE_URL_ACTION:  url = url +  "exec/"; ext='.html'; break;
		case TYPE_URL_XML : url = url + "data/"; ext='.xml'; break;
		case TYPE_URL_SCRIPT: url = url + "js/"; ext='.js'; break;
		case TYPE_URL_DOCUMENT: url = url + "dms/"; ext = null; break;
	}
   
	for (var k in obj)
	{
		url+= obj[k] + "/";
	}
   
	if (file)
		url+=file;
	if (file && ext)
		url+=ext;
	if (params)
	{
		url+="?";
		var i =0;
		for (var k in params)
		{
			if (i>0) url+="&";
			url+= (k+"=" + params[k]);
			i++;
		}
	}
   
 
	return url;
}
 
 function load_js (src)
 {
	var head= document.getElementsByTagName('head')[0];
	var script= document.createElement('script');
	script.type= 'text/javascript';
	script.src= src ;
	head.appendChild(script);
	//head.removeChild(script) //MAKES IE NOT WORK
 }
 
 
var modal = 0;
var body, fade, msg, modal_ok;

function createModal ()
{
	body = document.getElementsByTagName('body')[0];
	
	fade = document.createElement('div');
	fade.className = fade.id = 'overlay';
	body.appendChild (fade);
	
	msg = document.createElement ('div');
	msg.className = msg.id = 'modal_container';
	body.appendChild (msg);
	
	msg.rel = 0;  //change this flag for reloading
	var st = {'div' : { 'id' : 'modal', 'name':  'modal', 'className' : 'modal',  'CHILD' : 
			[{'div' : {'id' : 'modal_head', 'CHILD' : 
			 [{'div' : {'className' : 'title', 'CHILD' :
			  [{'span' : {'inner' : 'Modal title'} } ] }},{'a' : {'href' : 'javascript:unloadModal()', 'className' : 'close', 'CHILD' : 
			  [{'img' : {'src' : 'images/modal-close-x.png'}} ] }} ] }},{'div' : {'id' : 'modal_content'}},{'div' : {'id' : 'modal_foot', 'CHILD' : 
			 [{'div' : {'className' : 'left', 'CHILD' : 
			  [{'a' : {'type' : 'button', 'className' : 'ok', 'href' : '#', 'CHILD' : 
			   {'span' : {'inner' : 'Aceptar' }}}} ] }},{'div' : {'className' : 'right', 'CHILD' : 
			  [{'a' : {'type' : 'button', 'className' : 'ko', 'href' : 'javascript:unloadModal()', 'CHILD' : {'span' : {'inner' : 'Cerrar'}}}} ] }} ] }}]}};
	
	append_html(st, msg);
}


function showScriptMessage (file, mod)
{
	   
	createModal ();
	load_js (base_url + "modules/"+  mod + "/js/popup/" + file + ".js");
}

function showMessage (caption, text)
{
	createModal ();
	setModalCaption (caption);
	setModalContent ({"div" : {"inner" : text}});
}
 
function unloadModal()
{
	if (msg.rel == 1)
	{
		window.location.reload();
	}
	else
	{
		body.removeChild(fade);
		body.removeChild(msg);
		modal = 0;
	}
}
 
function setModalCaption (str)
{
	$("#modal_head > div > span").html (str);
}
 
function setModalContent (struct)
{
	append_html(struct, document.getElementById('modal_content'));
}
 
function ModalEnableAccept ()
{
	$("#modal_foot > .left").css ('visibility', 'visible');
}

function ModalAction (func)
{
	$("#modal_foot > .left > .ok").click ('click' ,function (e) { e.preventDefault ();});
	$("#modal_foot > .left > .ok").bind ('click' ,func);
}
 
function controlarReturn(e, func) {
  tecla = (document.all) ? e.keyCode : e.which;
  if (tecla == 13) {
	func ();
	return false;
  }
}
 
function emptyInput(obj)
{
	obj.value="";
}
 
/*checks for valid e-mail*/
function mail(texto){
	var mailres = true;            
	var cadena = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@._-";
	var arroba = texto.indexOf("@",0);
	if ((texto.lastIndexOf("@")) != arroba) arroba = -1;
	var punto = texto.lastIndexOf(".");
	for (var contador = 0 ; contador < texto.length ; contador++){
	  if (cadena.indexOf(texto.substr(contador, 1),0) == -1){
		mailres = false;
		break;
	  }
	}
	if ((arroba > 1) && (arroba + 1 < punto) && (punto + 1 < (texto.length)) && (mailres == true) && (texto.indexOf("..",0) == -1)) {
	 mailres = true;
	} else {
	 mailres = false;
	}
	return mailres;
}
 
/*gets param from the current url*/
function query_value(name)
{
	paramstr = window.location.search.substring(1);
	params = paramstr.split("&");
	for (i=0;i<params.length;i++)
	{
		pname = params[i].split("=");
		if (pname[0] == name)
		{
			return pname[1];
		}
	}
}
 
 
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
	  return false;
   else
	  return true;
}
 
function trim (str)
{
	while (str.substring(0,1) == ' ' || str.charCodeAt (0) == 10 ||  str.charCodeAt (0) == 13)
	{
		str= str.substring(1, str.length);
	}
	while (str.substring(str.length-1, str.length) == ' ')
	{
		str = str.substring(0,str.length-1);
	}
	return str;
}
 
 
function drop_table (table)
{
	var Parent = table.lastChild; //tbody
	while(Parent && Parent.hasChildNodes())     Parent.removeChild(Parent.firstChild);
}
 
 
var cell_index = 0;
 
function append_html(struct, parent)
{
	var element;
	var obj, child;
   
	if (isArray(struct))
	{
		for (var i in struct)
		{
			append_html(struct[i], parent);
		}
	}
	else
	{
		for (var i in struct)
		{
			obj = struct[i];
			switch (i)
			{
				case 'div':
				case 'a':
				case 'abbr':
				case 'span':
				case 'br':
				case 'p':
				case 'input':
				case 'form':
				case 'label':
				case 'ul':
				case 'li':
				case 'img':
				case 'textarea':
					var element = document.createElement(i);
					for (var j in obj)
					{
						switch(j)
						{
							case 'className':
								$(element).addClass(obj[j]);
								break;
							case 'href':
							case 'src':
							case 'id':
							case 'title':
							case 'type':
							case 'value':
							case 'action':
							case 'method':
							case 'enctype':
							case 'target':
							case 'name':
							case 'rel':
							case 'alt':
							case 'width':
							case 'height':
								$(element).attr(j,obj[j]);
								break;
							case 'inner':
								element.appendChild(document.createTextNode (obj[j]));
								break;
							case 'html':
								$(element).html (obj[j]);
								break;
							case 'onclick':
								$(element).click (new Function (obj[j]));
								break;
							case 'onsubmit':
								$(element).submit (new Function (obj[j]));
								break;
							case 'onchange':
								$(element).change (new Function (obj[j]));
								break;
							case 'checked':
								element.checked = obj[j];   //only works for true/ false values;
								break;
							case 'type':
								//element.type = obj[j]; //IE FUCKS, set on first place!
								/*element =document.createElement('span');
								element.innerHTML='<input type="'+obj[j]+'">';
								parent.appendChild(element);
								element = element.firstChild;*/
								$(element).attr(j,obj[j]);
								break;
							case 'CHILD':
								append_html(obj[j], element);
								 break;
							case 'custom_data':
								element.custom_data = obj[j];
								break;
							default:
								throw Error ("unknown element struct: " + j);
						}
					   
					}
					parent.appendChild(element);
					for (var j in obj)
					{  
						switch(j)
						{
							case 'checked':
								//IE...
								element.checked = obj[j];   //only works for true/ false values;
								break;
							default:
						}
					}
					break;
				case 'tr':
					var row = parent.insertRow(parent.rows.length);
					cell_index = 0;
					for (var j in obj)
					{
						switch(j)
						{
							case 'className':
								$(row).addClass(obj[j]);
								break;
							case 'CHILD':
								append_html(obj[j], row);
								 break;
							default:
								throw Error ("unknown element struct: " + j);
						}
					}
					break;
				case 'td':
					var cell = parent.insertCell(cell_index);
					cell_index++;
					for (var j in obj)
					{
						switch(j)
						{
							case 'className':
								$(cell).addClass(obj[j]);
								break;
							case 'inner':
								cell.appendChild(document.createTextNode (obj[j]));
								break;
							case 'CHILD':
								append_html(obj[j], cell);
								 break;
							default:
								throw Error ("unknown element struct: " + j);
						}
					}
					break;
				default:
					throw Error ("unknown element struct: " + i);
			}
		}
	}  
}
 
function popWindow (url , name,width, height)
{
	if (name.split (" ").length > 1)
		Error ("IE fails for name containing spaces");
   
	window.open(url, name, "left=50,top=50,height="+height+",width="+width+",resizable");
}
 
function change_tab (name, i)
{
	$('div[id^="'+name+'"]').each (function () { $(this).removeClass ('tab_show')});
	$('div[id="'+name+'_'+i+'"]').addClass ('tab_show');
   
	$('a[id^="label_'+name+'"]').each (function () { $(this).removeClass ('selected')});
	$('a[id="label_'+name+'_'+i+'"]').addClass ('selected');
}



/*this function returns the coordinates relative to the object wich triggers the event*/
function getcordsIn(e){
	ret = {};
	if (e.layerX)
	{
		/*mozilla rulez*/
		ret.x = e.layerX;
		ret.y = e.layerY;
	}
	else
	{
		if (!e) var e = window.event;
		
		var targ;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
		
		
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		
		ret.x = posx - $(targ).offset().left 
		ret.y = posy - $(targ).offset().top
	}
	return ret;
}
 
 
/*function called onload from iframe when loaded, in order to process data. form must specify the iframe as target*/
function frame_data_loaded (obj)
{
	var oDoc = (obj.contentWindow || obj.contentDocument);
	
	if (oDoc.location.host.length == 0) return;
   
	oDoc =  (oDoc.document) ?   oDoc = oDoc.document : oDoc;
	xml = (oDoc.XMLDocument) ?  oDoc.XMLDocument : oDoc; //IE
   
	if (frame_data_do)
	{
		frame_data_do (xml);
		document.getElementsByName("frame_data")[0].src = "";
	}
	
}


function unix_time (date)
{
	if (!date) date = new Date ();
	return Math.round(date.getTime() / 1000);
}
