var AJAX_THREAD = new Array();
function form_ajax( container , form , page , form_ajax_cont , callbcack) {
    if( typeof form == 'string' ){
    
        $form = $( '#' + form );
        
    }else if( typeof form.load != 'undefined' ){ // to check if the form is already jquery object
        
        $form = form;
        
    } else {
    
       $form = $(form);
    }
    /*url from here*/
    url = $form.attr('action');
    q_string = "";
    
    if(typeof page !='undefined'){
        q_string = (url.indexOf('?')==-1 ? '?' : '&') + 'page=' + page;
    }
    /*type*/
    type = $form.attr('method');
    if(!type){
        type = "POST";/*since it is form the default is post*/
    }
    
    return _post_ajax( container , url + q_string , $form.serialize() , type , form_ajax_cont , callbcack);
}
function _post_ajax( container , url , data_to_send , type , form_ajax_cont , callbcack ) {

    if(typeof AJAX_THREAD[container]=='undefined'){
        AJAX_THREAD[container] = new Array();
        AJAX_THREAD[container]['thread_count'] = 0;
    }

    if(AJAX_THREAD[container]['thread_count'] > 0){
        setTimeout(function(){
            _post_ajax( container , url , data_to_send , type , form_ajax_cont , callbcack );
        },1500);
        return false;
    }else{
        AJAX_THREAD[container]['thread_count'] = 1;
    }
    
    //$cont = $('#'+container);
    
    AJAX_THREAD[container]['$cont'] = $( '#' + container );
    p_r = AJAX_THREAD[container]['$cont'].css('padding-right');
    p_l = AJAX_THREAD[container]['$cont'].css('padding-left');
    p_t = AJAX_THREAD[container]['$cont'].css('padding-top');
    p_b = AJAX_THREAD[container]['$cont'].css('padding-bottom');
    
    w = AJAX_THREAD[container]['$cont'].width() + parseInt(p_l)+ parseInt(p_r) 
    h = AJAX_THREAD[container]['$cont'].height() + parseInt(p_b)+ parseInt(p_t)
    l = AJAX_THREAD[container]['$cont'].offset().left ;
    t = AJAX_THREAD[container]['$cont'].offset().top;
    
    AJAX_THREAD[container]['$loader'] =   $('<div/>')
                .addClass('loader')
                .css({
                      position : 'absolute'
                    ,'top'     : t+(h/2)-24
                    ,'left'    : l+(w/2)-71
                    }).html( typeof MSG_LOADING != 'undefined' && MSG_LOADING ? MSG_LOADING : 'Loading ...');
    

    AJAX_THREAD[container]['$sahder'] = $('<div/>')
                .css({width:w,height:h,left:l,top:t})
                .addClass('ajax-shader');
    
    
    if(typeof FIX_IE_BUG !='undefined' && $.browser.msie){
        document.location = a_obj.href;
        $('body').append(AJAX_THREAD[container]['$sahder']).append(AJAX_THREAD[container]['$loader']);
        return false;
    }
    
    
    
    if( typeof data_to_send == 'undefined' || !data_to_send){
        data_to_send = [];
    }    
    if( typeof type == 'undefined' || !type){
        type = 'GET';
    }

    $.ajax({
          url: url
        , type: type
        , cache: false
        , data: data_to_send
        , success    : function(data){ 
            $('div.error').hide(); 
            AJAX_THREAD[container]['$cont'].html(data);  
            AJAX_THREAD[container]['$sahder'].remove();
            AJAX_THREAD[container]['$loader'].remove(); 
            AJAX_THREAD[container]['thread_count'] = 0;
            if(typeof form_ajax_cont != 'undefined' && form_ajax_cont){
                $( '#' + form_ajax_cont ).find('.error_list').hide(); 
            }else{
                $('.error_list').hide();
            }
            if(typeof callbcack == 'function' ){
                callbcack.call();
            }
        }
        , error      : function(data){ 
                
                AJAX_THREAD[container]['$sahder'].remove();
                AJAX_THREAD[container]['$loader'].remove(); 
                AJAX_THREAD[container]['thread_count'] = 0;
                if(typeof form_ajax_cont != 'undefined'){
                    $( '#' + form_ajax_cont ).html( data.responseText );
                    $( '#' + form_ajax_cont ).find('.error').show(); 
                }else{
                    $('.error').show(); 
                }
            }
        , beforeSend : function(data){ $('body').append(AJAX_THREAD[container]['$sahder']).append(AJAX_THREAD[container]['$loader']); }
    });
    return false;
}
function link_to_ajax(container , a_obj , form ,data_to_send, type , form_ajax_cont , callbcack){
    

    
    if( typeof form != 'undefined' ){
        return form_ajax( container , form , $(a_obj).attr('page') , form_ajax_cont , callbcack);
    } else {
        return   _post_ajax( container , a_obj.href , data_to_send , type , form_ajax_cont , callbcack);
    }
    
}
function select_to_ajax(container , a_obj , form ,data_to_send, type , form_ajax_cont , callbcack){



    if( typeof form != 'undefined' ){
        return form_ajax( container , form , $(a_obj).attr('page') , form_ajax_cont , callbcack);
    } else {
        return   _post_ajax( container , a_obj.value , data_to_send , type , form_ajax_cont , callbcack);
    }

}

