/**
 * @author jk
 */
/*FUNCIONES PARA AJAX*/
var xhr = new Array();
var xi = new Array(0);
xi[0] = 1;


function xhrRequest(type) {
	if (!type) {
	type = 'html';
	}


	// xhrsend IS THE xi POSITION THAT GETS PASSED BACK
	// INITIALIZED TO THE LENGTH OF THE ARRAY(LAST POSITION + 1)
	// IN CASE A FREE RESOURCE ISN'T FOUND IN THE LOOP
	var xhrsend = xi.length;

	// GO THROUGH AVAILABLE xi VALUES
	for (var i=0; i<xi.length; i++) {


	// IF IT'S 1 (AVAILABLE), ALLOCATE IT FOR USE AND BREAK
	if (xi[i] == 1) {
	xi[i] = 0;
	xhrsend = i;
	break;
	}
	}


	// SET TO 0 SINCE IT'S NOW ALLOCATED FOR USE
	xi[xhrsend] = 0;


	// SET UP THE REQUEST
	if (window.ActiveXObject) {
	try {
	xhr[xhrsend] = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	try {
	xhr[xhrsend] = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (e) {}
	}
	} else if (window.XMLHttpRequest) {
	xhr[xhrsend] = new XMLHttpRequest();
	if (xhr[xhrsend].overrideMimeType) {
	xhr[xhrsend].overrideMimeType('text/' + type);
	}
	}
	return (xhrsend);
	}


function ArKaAjaxRequest(url,tipoenvio,functionfinal,envio) {

	
	var xhri = xhrRequest('html');
	if(tipoenvio=="POST"){
		xhr[xhri].open('POST', url, true);
	}else{
		xhr[xhri].open('GET', url, true);
	}
		
	xhr[xhri].onreadystatechange = ensureReadiness;

	function ensureReadiness() {
		if (xhr[xhri].readyState < 4) {
			return;
		}

		if (xhr[xhri].status !== 200) {
			return;
		}

		if (xhr[xhri].readyState === 4) {
			functionfinal(xhr[xhri]);
		}
	}	
	
	xhr[xhri].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	if(tipoenvio=="POST"){
		xhr[xhri].send(envio);
	}else{
		xhr[xhri].send(null);
	}
	
}

function format(rep){
	//checkerror(rep);
	return eval(rep);
}

/*FIN FUNCIONES PARA AJAX*/

/*SERIALIZAR FORMULARIO*/
var Form = {
  serialize: function(form) {
    var elements = Form.getElements((form));
    
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
    
      var queryComponent = Form.Element.serialize(elements[i]);
      
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = (form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = (form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    (form).reset();
  }
}
Form.Element = {
  serialize: function(element) {
    element = (element);
    var method = element.tagName.toLowerCase();
    
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
    
      var key = encodeURIComponent(parameter[0]);
      
      if (key.length == 0){ 
     
      return;}

      if (parameter[1].constructor != Array){
       
        parameter[1] = [parameter[1]];
        }
      
      return key + '=' + encodeURIComponent(parameter[1]);
    }
  },

  getValue: function(element) {
    element = (element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
	if(element.type=="textarea"){
		//var ed = tinyMCE.get(element.name);
		//alert(ed.getContent());
		//if(ed){
		//	return [element.name, ed.getContent()];
		//}else{
			return [element.name, element.value];
		//}
		
	}else{
		return [element.name, element.value];
	}
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}
/*FIN SERIALIZAR FORMULARIO*/

/*HALLAR LA POSICION DE UN ELEMENTO EN LA PÁGINA*/
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	var printstring = '';
	if (obj.offsetParent) {
		while (obj.offsetParent) {

			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;
	window.status = printstring;
	return curtop;
}
/*FIN HALLAR LA POSICION DE UN ELEMENTO EN LA PÁGINA*/

/*ADD EVENTOS*/
function addEvent(obj, evt, fn, capture) {  
     if ( window.attachEvent ) {  
         obj.attachEvent("on" + evt, fn);  
     }  
     else {  
         if ( !capture ) capture = false; // capture  
         obj.addEventListener(evt, fn, capture)  
     }  
}
/*sample
# addEvent(ul, "click", function(e) {  
#   // Firefox and IE access the target element different. e.target, and event.srcElement, respectively.  
#   var target = e ? e.target : window.event.srcElement;  
#   if ( target.nodeName.toLowerCase() === 'a' ) {  
#      alert("clicked");  
#      return false;  
#   }  
# }); 
*/
/*FIN ADD EVENTOS*/ 

