/*

    FDE CMS ML 2.0
    File: ROOT/tpl/fde/english/js/ajax.js;
    Copyright: FDSTAR Company
    Release date: Sat, 26 Jun 2010 07:42:24 +0300
    More info: http://fdstar.net/
    
    Licensed to: FDE_Main_Site
    Licensed domain(s): fdstar.net

*/
   // COPYRIGHT FDSTAR COMPANY. 2006-1010. http://fdstar.net/
var fdeax=new Array(), fi, fde_preg_arr_name_ = new RegExp('^.*\]$', 'ig'),
	fde_preg_scripts = new RegExp('<script(.|[\r\n])*?>((.|[\r\n])*?)</script>', 'ig');
	fde_preg_scripts_drop = new RegExp('</?script(.|[\r\n])*?>', 'ig'),
	fde_preg_replace_scripts_comments = /<\!\-\-((.|[\r\n])*?)\-\->/ig;

function fde_id_correct(id)
{
	return id!=undefined && id? id: 'fde_menu_'+ Math.random();
}
function FDMK(url, method, params)
{
    var i_, n_, http_request = false, e, e2, get_params = new Array(), post_params = new Array();
    
    method = method=='POST'? 'POST': 'GET';
    
    
    
    
    if(window.XMLHttpRequest)
    {
        http_request = new XMLHttpRequest();
        if(http_request.overrideMimeType)
        {
            http_request.overrideMimeType('text/xml');
        }
    }
    else 
    if(window.ActiveXObject)
    { // IE
        try
        {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch(e)
        {
            try
            {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch(e2){}
        }
    }
    
    url = url.split('?');
    if(url.length>=2)
    {
        get_params = fde_parse_params(url[1]);
    }
    
    if(params!==false)
    {
        if(typeof(params)!='object')
        {
            params = fde_parse_params(params);
        }
        else
        {
            for(i_ in params)
            {
                if(typeof(params[i_])!='object')
                {
                    params[i_] = encodeURIComponent(params[i_]);
                }
                else
                {
                    for(n_ in params[i_])
                    {
                        params[i_][n_] = encodeURIComponent(params[i_][n_]);
                    }
                }
            }
        }
    }
    
    switch(method)
    {
        case 'GET':
             for(i_ in params)
             {
                 get_params[i_] = params[i_];
             }
        break;
        case 'POST':
             for(i_ in params)
             {
                 post_params[i_] = params[i_];
             }
        break;
    }
    
    get_params['ajax'] = 1;
    get_params['fde_rand'] = Math.random();
    
    if(!http_request)
    {
        get_params['ajax'] = '';
        url = [url[0], fde_implode_params(get_params)];
        url[1] = url[1].length>0? '?' + url[1]: '';
        location.href = url.join('');
        return false;
    }
    else
    {
        url = [url[0], fde_implode_params(get_params)];
        url[1] = url[1].length>0? '?' + url[1]: '';
        url = url.join('');
    }
    
    http_request.onreadystatechange = function(){alertContents(http_request);};
    
    http_request.open(method, url, true);
        
    if(method=='POST')
    {
        params = fde_implode_params(params);
        
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //http_request.setRequestHeader("Content-length", params.length);
        http_request.setRequestHeader("Connection", "close");
        
        http_request.send(params.length>0? params: null);
    }
    else
    {
        http_request.send(null);
    }
}
function alertContents(http_request)
{
    var FDE_AJAX, fde_eval_data, script_matches, i_, fi, script_node, j, script_params_str, params_arr;
                                    
    switch(http_request.readyState)
    {    
        case 4:
        {
            //window.status='loaded';
            //document.body.style.cursor="auto";
            if(http_request.status==200)
            {
                FDE_AJAX=http_request.responseText.split("<FDE/>");
                if(FDE_AJAX.length>0)
                {
                    eval(FDE_AJAX[0]);               
                    for(fi=0;fi<fdeax.length;fi++)
                    {
                                    
                        
                        if(typeof(fdeax[fi])!='undefined' && typeof(FDE_AJAX[fi+1])!='undefined')
                        {
                            if(fdeax[fi]=='title')
                                document.title=FDE_AJAX[fi+1];
                            else
                            {
                                if(document.getElementById(fdeax[fi]))
                                {
                                    fde_eval_data = new Array();
                                    script_matches = FDE_AJAX[fi+1].match(fde_preg_scripts);
                                    
                                    if(script_matches!=null)
                                    {
                                    	for(i_ in script_matches)
                                    	{
                                    		FDE_AJAX[fi+1] = FDE_AJAX[fi+1].replace(script_matches[i_], '');
                                    		fde_eval_data[fde_eval_data.length] = [
	                                    		script_matches[i_].replace(fde_preg_scripts_drop, ''), 
	                                    		script_matches[i_]
                                    		];
                                    	}
                                    }
                                    
                                    document.getElementById(fdeax[fi]).innerHTML=FDE_AJAX[fi+1];
                                    
                                    if(fde_eval_data.length>0)
                                    {
                                    	for(i_ in fde_eval_data)
                                    	{
	                                    	script_node = document.getElementById(fdeax[fi]).appendChild(document.createElement('script'));
	                                    	script_node.text = fde_eval_data[i_][0].replace(fde_preg_replace_scripts_comments, "$1");
	                                    	script_params_str = fde_eval_data[i_][1].substring(fde_eval_data[i_][1].indexOf(' ',0),fde_eval_data[i_][1].indexOf('>',0));
			                                params_arr = script_params_str.split(' ');
			
			                                if(params_arr.length > 1)
			                                {
			                                   for(j=0;j< params_arr.length; j++ )
			                                   {
			                                        if(params_arr[j].length > 0)
			                                        {
			                                            var param_arr = params_arr[j].split('=');
			                                            param_arr[1] = param_arr[1].substr(1,(param_arr[1].length-2));
			                                            script_node.setAttribute(param_arr[0],param_arr[1]);
			                                        }
			
			                                  }
			                                }
	                                    }
                                    }
                                    
                                }
                            }
                        }                 
                    }
                } 
            }
            else
            {
                //alert('there are some problem with request');
            }
        }
        break;
    }
}
function fde_implode_params(array_)
  {
      var i_, n_, new_ = new Array();
      for(i_ in array_)
      {
          if(i_!==false && i_.length>0)
          {
              if(typeof(array_[i_])!='object')
              {
                 
                  new_[new_.length] = i_ + '='+ array_[i_];
              }
              else
              {
                  for(n_ in array_[i_])
                  {
                       new_[new_.length] = i_ + '='+ array_[i_][n_];
                  }
              }
          }
      }
      return new_.join('&');
  }
  function fde_parse_params(str_)
  {
      var i_, new_ = new Array(), is_exists_, x_;
      
      str_ = str_.split('&');
      for(i_ in str_)
      {
          str_[i_] = str_[i_].split('=');
          
          name_ = false;
          
          if(str_[i_].length==2 && str_[i_][0].length>0)
          {
               name_ = str_[i_][0];
               value_ = str_[i_][1];
          }
          else if(str_[i_].length==1 && str_[i_][0].length>0)
          {
              name_ = str_[i_][0];
              value_ = '';
          } 
          
          if(name_!==false)
          {
              if(name_.match(fde_preg_arr_name_)!=null)
              {
                 if(typeof(new_[name_])=='undefined')
                 {
                      new_[name_] = new Array();
                 }
                 is_exists_ = false;
                 for(x_ in new_[name_])
                 {
                     if(new_[name_][x_]==value_)
                     {
                          is_exists_ = true;
                     }
                 }
                 if(!is_exists_)
                 {
                     new_[name_][new_[name_].length] = value_;
                 }
              }
              else
              {
                 new_[name_] = value_;
              }
          }
          

      }
      return new_;
  } 

  
function fde_send_form_by_ajax(form_id_)
{
   var fde_form_ = document.getElementById(form_id_),
        values_ = new Array(),
        name_arr_ = new Array(),
        method_ = 'GET',
        action_ = location.pathname; 
   
    if(fde_form_.getAttribute('method')!=undefined && fde_form_.getAttribute('method').toLowerCase()=='post')
    {
       method_ = 'POST';
    }
    if(fde_form_.getAttribute('action')!=undefined)
    {
       action_ = fde_form_.getAttribute('action');
    }
     
   nodes_ = fde_form_.childNodes;
   values_ = fde_send_form_by_ajax_(values_, nodes_);

   FDMK(action_, method_, values_);
}  

function fde_send_form_by_ajax_(values_, elements_)
{
   var node_name_, name_, is_exists_, x_, a_;
        for(a_ in elements_)
        {
             if(
                 elements_[a_].nodeType == 1 && 
                 elements_[a_].nodeName!=undefined
             )
             {
                 node_name_ = elements_[a_].nodeName.toLowerCase();
                 
                 if(
                     node_name_=='input' || 
                     node_name_=='select' || 
                     node_name_=='button' || 
                     node_name_=='textarea')
                 {
                     if(elements_[a_].getAttribute('name')!=undefined)
                     {
                     
                         disabled_ = false;
                         if(
                             (elements_[a_].getAttribute('disabled')!=undefined && elements_[a_].disabled==true)
                             ||
                             (elements_[a_].type.toLowerCase()=='radio' && elements_[a_].checked!=true)
                             ||
                             (elements_[a_].type.toLowerCase()=='checkbox' && elements_[a_].checked!=true)
                         )
                         {
                             disabled_ = true;
                         }
                         if(!disabled_)
                         {
                             name_ = elements_[a_].getAttribute('name');
                             if(name_.match(fde_preg_arr_name_)!=null)
                             {
                                 if(typeof(values_[name_])=='undefined')
                                 {
                                      values_[name_] = new Array();
                                 }
                                 is_exists_ = false;
                                 for(x_ in values_[name_])
                                 {
                                     if(values_[name_][x_]==elements_[a_].value)
                                     {
                                         is_exists_ = true;
                                     }
                                 }
                                 if(!is_exists_)
                                 {
                                     values_[name_][values_[name_].length] = elements_[a_].value;
                                 }
                             }
                             else
                             {
                                 values_[name_] = elements_[a_].value;
                             }
                         }
                     }
                 }
                 else
                 {
                     values_ = fde_send_form_by_ajax_(values_, elements_[a_].childNodes);
                 }
             }
        
        }
    return values_;
}
