/**
 * Dodatkowe funkcje używane z jQuery
 * @author Jarzyn
 */

//brak konfliktów z np. mootools
jQuery.noConflict();

var ajaxUrl = '';
var ajaxUrlBack = '';

//var siteChangedByAjax = false; // dla bannerów

var scrollFrame = false;

/**
 * pobiera stronę przez ajax
 * po przełączeniu całości strony na jQuery history można sporo odchudzić, przynajmniej o bb_history itp.
 * @param {String} id - div
 * @param {String} url - adres
 * @param {String} params - parametry dodatkowe
 * @param {Bool} saveUrl - zapisać url w historii
 * @param {Bool} bigLoader - duży loader domyślnie false, chyba że saveUrl jest true
 */
function getByAJAX(id, url, params, saveUrl, bigLoader) {
	
	
	if(url == '') {
		url = 'ajax_trip.html';
	}
	
	if(url != ajaxUrlBack && saveUrl == true) {
		bb_save_state(id, url);
		
		//alert('zapis'+id+url);
	}
	//alert(url);
	
	if(saveUrl || bigLoader) {
		divLoading(1, 'loadDiv', 'mainWindowTd');
	} else {
		//jQuery("#"+id).bind("ajaxSend", function() {
		jQuery("#" + id).css('position', 'relative');
		jQuery("#" + id).append('<div id="loader"></div>');
			
		var loader = jQuery('#loader');
			
		loader.html('<img style="margin-bottom:-2px" src="theme/standard/images/loading2.gif" alt="" />');
		loader.css('position', 'absolute');
		loader.css('left', '0');
		loader.css('top', '0');
	}
	//jQuery("#"+id).load(url+"?ssid="+SSID+'&'+params);
	
	var sessionid = SSID;
	
	url2 = url.split('?');
	url = url2[0];
	if(url2[1] != null) {
		if(params != '') {
			params = params + '&' + url2[1];
		} else {
			params = url2[1];
		}
	}
	//alert(url);
	//alert('params: '+params)
	
	jQuery.ajax({                    
    	type: 'GET',
        url: url,
        data: 'ssid='+sessionid+(params ? '&'+params : ''),
 
        error: function (XMLHttpRequest, textStatus, errorThrown){
            //$("#error").show();
            //$("#error").append('Błąd obiektu o nazwie:'+XMLHttpRequest+'<br />Komunikat:'+textStatus+'<br />Rodzaj:'+ errorThrown);
			//alert('Błąd obiektu o nazwie:'+XMLHttpRequest+'<br />Komunikat:'+textStatus+'<br />Rodzaj:'+ errorThrown);
			return false;
        },
        success: function(html) {
			if(saveUrl || bigLoader) {
				divLoading(0, 'loadDiv', 'mainWindowTd');
				//siteChangedByAjax = true;
				// wyświetlenie następnych bannerów
				
			} else {
				jQuery('#loader').remove();
			}
			
            jQuery('#'+id).html(html);
            
            if(scrollFrame) {
            	scroll(0,0);
            	scrollFrame = false;
            }
            

            if (id=="webTripsDiv") {
			  	jQuery('#TSearch').hide();jQuery('#TSearchBtnHide').hide();jQuery('#TSearchBtnShow').show();//chowa formularz wyszukiwania
			}
        }
	});
	
	if(saveUrl) {
		// zapis przez bbfix
		if(url != ajaxUrlBack) {
			bb_save_state(id, url+'?'+params);
		}
		if(ajaxUrl != '') ajaxUrlBack = ajaxUrl;
		ajaxUrl = new String(url+'?'+params);
		
		//siteChangedByAjax = true;
	}
	
}

/**
 * wysyła formularz przez ajax
 * @param {Object} div
 * @param {Object} url
 * @param {Object} form - id formularza
 * @param {Object} saveUrl
 */
function sendFormByAJAX(div, url, form, saveUrl) {

	//var url = jQuery(form).attr('action');                
    var formData;
	
    jQuery("#"+form+' :input').each(function (elementIndex) {
    	var name = jQuery(this).attr('name');
        var value = jQuery(this).val();
 
        if (formData == null)
            formData = name+'='+value;
        else
            formData += '&'+name+'='+value;
     });
	 getByAJAX(div, url, formData, saveUrl);
}


//PageLoad function
// This function is called when:
// 1. after calling $.historyInit();
// 2. after calling $.historyLoad();
// 3. after pushing "Go Back" button of a browser
function pageload(hash) {
	// alert("pageload: " + hash);
	// hash doesn't contain the first # character.
	if(hash) {
		// restore ajax loaded state
		if(jQuery.browser.msie) {
			// jquery's $.load() function does't work when hash include special characters like aao.
			hash = encodeURIComponent(hash);
		}
		// ładowanie zawartości - możnaby zameniać hashe
		getByAJAX('webTripsDiv', hash+'.html', '', false, true);
	} else {

		getByAJAX('webTripsDiv', /*'ajax_'+*/window.location.pathname.replace(/^(.*)\//, ''), '', false, true);
	}
}

function getByAjax(id, hash) {
	
	jQuery.historyLoad(hash);
	
	//zmiana bannerów
	nextBanners();
	return false;
	
}

/*
 * wysyła formularz z hashowaniem adresu
 */
function sendFormByAjax(div, url, form, optimize) {
	var formData;
	
    jQuery("#"+form+' :input').each(function (elementIndex) {
    	var name = jQuery(this).attr('name');
        var value = jQuery(this).val();
        
        var test2 = optimize ? value : true;
 
        if(name && test2 !== '') {
	        if (formData == null)
	            formData = ','+name+','+encodeURIComponent(value);
	        else
	            formData += ','+name+','+encodeURIComponent(value);
        }
     });
	 getByAjax(div, url+formData);
}


/*
 * wysyła tradycyjnie formularz, np dla post
 */
function sendForm(div, form, optimize) {
	var formData;
	//var data = [];
	
	jQuery("#"+form+' :input').each(function (elementIndex) {
		
		var name = jQuery(this).attr('name');
		var value = '';
		
    	switch(jQuery(this).attr('type')) {
    	case "checkbox": case "radio":
    		if(jQuery(this).attr('checked'))
    			value = jQuery(this).val();
    		break;
    	default:
    		value = jQuery(this).val();
    	}
		
    	var test2 = optimize ? value : true;
 
        if(name && test2 !== '') {
	        if (formData == null)
	            formData = name+'='+encodeURIComponent(value);
	        else
	            formData += '&'+name+'='+encodeURIComponent(value);
        }
     });
	
	var method = jQuery("#"+form).attr('method');
	var url = jQuery('#'+form).attr('action');  
	
	requestByAjax(div, url, formData, method, false, 'big');
}

/**
 * może obsługiwać dowolne requesty, get, post itp. docelowo wykorzystywana, zastąpi funkcję getByAJAX
 * ze względu na ilość parametrów przydadzą się jakieś funkcje pośredniczące, osobno do formów, osobno do linków itp.
 */
function requestByAjax(div, url, data, type, scrollFrame, loader) {
	if(div == null) div = 'webTripsDiv';
	if(loader == 'big') {
		divLoading(1, 'loadDiv', 'mainWindowTd');
	} else {
		//jQuery("#"+id).bind("ajaxSend", function() {
		jQuery("#" + id).css('position', 'relative');
		jQuery("#" + id).append('<div id="loader"></div>');
			
		var loader = jQuery('#loader');
			
		loader.html('<img style="margin-bottom:-2px" src="theme/standard/images/loading2.gif" alt="" />');
		loader.css('position', 'absolute');
		loader.css('left', '0');
		loader.css('top', '0');
	}
	
	jQuery.ajax({                    
    	type: type,
        url: url,
        data: data, //'ssid='+sessionid+(data ? '&'+data : ''),
 
        error: function (XMLHttpRequest, textStatus, errorThrown){
            //$("#error").show();
            //$("#error").append('Błąd obiektu o nazwie:'+XMLHttpRequest+'<br />Komunikat:'+textStatus+'<br />Rodzaj:'+ errorThrown);
			//alert('Błąd obiektu o nazwie:'+XMLHttpRequest+'<br />Komunikat:'+textStatus+'<br />Rodzaj:'+ errorThrown);
			return false;
        },
        success: function(html) {
			if(loader == 'big') {
				divLoading(0, 'loadDiv', 'mainWindowTd');	
			} else {
				jQuery('#loader').remove();
			}
			
            jQuery('#'+div).html(html);
            
            if(scrollFrame) {
            	scroll(0,0);
            	scrollFrame = false;
            }
        }
	});
}


function historyBack(link) {
	var href = window.location.href;
	history.back();
	if(href == window.location.href) {
		window.location.href = link.href; 
	}
}


jQuery(document).ready(function(){
	// Initialize history plugin.
	// The callback is called at once by present location.hash. 
	jQuery.historyInit(pageload);
	
	// set onlick event for buttons
	jQuery("a.history").live("click", function() {
		//replace to myk dla ie <= 7 ;) 
		var hash = jQuery(this).attr("href").replace(/^(.*)\//, '');
		
		hash = hash.replace(/^.*#/, '');		
		hash = hash.replace(/(\.html)$/, '');
		
		scrollFrame = true;
		
		return getByAjax('webTripsDiv', hash);
	}); 
	
	jQuery("a.ajaxHistory").live("click", function() {
		
		var hash = jQuery(this).attr("href").replace(/^(.*)\//, '');
		
		hash = 'ajax_' + hash.replace(/^.*#/, '');
		hash = hash.replace(/(\.html)$/, '');
		
		scrollFrame = true;
		
		return getByAjax('webTripsDiv', hash);  
	});
	
	jQuery("a.noHistory").live("click", function() {
		var hash = jQuery(this).attr("href").replace(/^(.*)\//, '');
		
		hash = hash.replace(/^.*#/, '');		
		hash = hash.replace(/(\.html)$/, '');
		
		pageload(hash);
		return false;
	});
});

