

window.addEvent('domready', function(){
    var toolTips = new Tips($$('.tips'), {className: 'custom_tip'});
    if($('switch_tabs')) {
        if ($('switch_tabs').get('class')) manageTabs();
    }

//	changeLinkFunction();

    //kontruowanie selecta
    if ($('contract_id') && $('fleet_id') && $('vehicleForm')) {
        loadContractSelect();
    }

    if ($('add_user_form') && $('user_group_id')) {
        loadProfileSelect();
    }

    //inicjacja checkboxa zaznaczajacego wszystkie checkboxy w kolumnie (w formularzu)
    $$('.checkAll').each(function(item){
        item.addEvent('click', function() {
            toggleCheckboxes(item.getAttribute('rel'), item.checked);
        })
    })
    
    if($('alertBox')) {
    	alertListener();
    }

    document.getElements('.input-no-enter').each(function(el) {
        el.getElements('input[type=text], input[type=checkbox]').each(function(element) {
            element.addEvent('keydown', function(event) {
                if (event.key == 'enter') return false; //zablokowanie wyslania formularza enterem
            });
        });
    });

    //[XXX] zaznacza checkboxy przy dodawaniu depozytow, jesli ktores pole w formularzu zostanie zmienione
    if ($('depositForm')) {
        $('depositForm').getElements('input[type=text]').each(function(el) {
            el.addEvent('keydown', function() {
                var name=el.getProperty('id').split('-');
                var checkbox = $(name[0]+'-'+name[1]+'-'+'tyre_id');
                if (!checkbox.getProperty('checked')) {
                    checkbox.setProperty('checked', true);
                }
            });
        });
        $('depositForm').getElements('select').each(function(el) {
            el.addEvent('change', function() {
                var name=el.getProperty('id').split('-');
                var checkbox = $(name[0]+'-'+name[1]+'-'+'tyre_id');
                if (!checkbox.getProperty('checked')) {
                    checkbox.setProperty('checked', true);
                }
            });
        });
    }
    
    $$('form').addEvent('submit', function(){
        this.getElements('input, select, checkbox').each(function(e) {
            if (e.disabled == true) {
                e.disabled = false;
            }
        });
    });
    
    //przeniesienie kursora do pierwszego elementu tekstowego w pierwszym formularzu na stronie
    //@todo pomyslec nad tym jeszcze (nie na wszystkich formularzach powinno byc takie dzialanie)
//    if (document.getElement('form')) {
//        document.getElement('form').getElement('input[type=text]').focus();
//    }
});

checkIfOuterService = function(el) {
//    console.log(el.options[el.selectedIndex].getProperty('value'));
    var selectedService = el.options[el.selectedIndex].getProperty('value');
    if (selectedService == 0) {
        if ($('service_recipient_address_wrapper').hasClass('hidden-element')) {
            $('service_recipient_address_wrapper').removeClass('hidden-element');
        }
    } else {
        if (!$('service_recipient_address_wrapper').hasClass('hidden-element')) {
            $('service_recipient_address_wrapper').addClass('hidden-element');
        }
    }
}

clearRegistrationValidation = function() {
    if (Cookie.read('registrationNumberProvided')) {
        Cookie.dispose('registrationNumberProvided');
    }
}
clearRegistrationValidation();
checkRegistrationNumber = function(el, count, msg) {
    charString = el.getProperty('value');
    charCount = el.getProperty('value').length;

    var properValue = '';
    for (i=0; i<charCount; i++) {
        if (charString[i].test('^[a-z0-9]$', 'i')) {
            properValue += charString[i].toUpperCase();
        }
    }
    el.setProperty('value', properValue);
    charCount = properValue.length;

    if (Cookie.read('registrationNumberProvided') != '1' && charCount != count) {
        alert(msg);
    }
}


alertListener = function() {
	var alertBox = $('alertBox');
	var input = alertBox.getChildren('div');
	new Request.JSON({
	    url: '/alert',
	    initialDelay: 1,
	    delay: 20000,
	    limit: 1000,
		onComplete: function(obj) {
			if(!obj) {
				this.stopTimer();
				return;
			};
			if(obj.alertNumber) {
				this.options.delay = 120000;
				input.set('html', obj.message);
				alertBox.removeClass('disp-none');
			}
			else {
				this.options.delay = 20000;
				alertBox.addClass('disp-none');
			}
		}
	}).startTimer();
}

unDisableCheckboxes = function(className) {
    $$('.'+className).each(function(item){
        if (item.disabled) {
            item.disabled = false;
        }
    });
}

loadContractSelect = function() {
    new Request.JSON({
        method: 'post',
        url: '/contract/index/fleet/'+$('fleet_id').getProperty('value'),
        onComplete: function(contract) {
    		$('contract_id').set('html', '');
            if (contract != '' && $('fleet_id').getProperty('value') != '') {
                for (var i in contract) {
                    if (contract[i] != null) {
                        var newoption = new Element('option', {'value':i, 'text':contract[i]});
                        if (i == $('contract_idx').getAttribute('value')) {
                            newoption.selected = true;
                        }
                        newoption.inject($('contract_id'));
                    }
                }
            }
        }
    }).send();
}

loadProfileSelect = function() {
    new Request.JSON({
        method: 'post',
        url: '/profile/index/group/'+$('user_group_id').getProperty('value'),
        onComplete: function(profile) {
            $$('.dinamic_select').set('html', '');
    //    	$$('.dinamic_select').setStyles({display: 'none'});
            $('fieldset-serviceInput').addClass('hidden-element');
            $('fieldset-headServiceInput').addClass('hidden-element');
            $('fieldset-fleetInput').addClass('hidden-element');
    		switch ($('user_group_id').getProperty('value')){
    			case '1':
    				loadServices();
    				break;
    			case '11':
    				loadHeadOfficeSelect();
    				break;
    			case '21':
    				loadFleetSelect();
    				break;
    		}
    		$('user_profile_id').set('html', '');

            if (profile != '' && $('user_group_id').getProperty('value') != '') {
                for (var i in profile) {
                    var label = profile[i];
                    var selected;
                    if (Cookie.read('selectedProfileId') != undefined)
                        selected = (i == Cookie.read('selectedProfileId'))?true:false;
                    else
                        selected = (i == $('user_profile_idx').getProperty('value'))?true:false;
                    if (label != null) {
                        var newoption = new Element('option', {'value':i, 'text':label, 'selected':selected});

                        newoption.inject($('user_profile_id'));
                    }
                }
            }
        }
    }).send();

    
    return;
}

loadServices = function() {
	if($('user_group_id').getProperty('value') != '1'){
		return;
	}
	$('service_id').set('html', '');
//	$('service_id').setStyles({display: 'block'});
    $('fieldset-serviceInput').removeClass('hidden-element');
	 new Request.JSON({
		 method: 'post',
		 url: '/service',
		 onComplete: function(list){
		 	if (list != '' && $('user_group_id').getProperty('value') == '1') {
		 		for (var i in list) {
                    var label = list[i];
                    var selected;
                    if (Cookie.read('selectedServiceId') != undefined)
                        selected = (i == Cookie.read('selectedServiceId'))?true:false;
                    else
                        selected = (i == $('service_idx').getProperty('value'))?true:false;
		 			if (label != null) {
		 				var newoption = new Element('option', {'value':i, 'text':label, 'selected':selected});
		 				newoption.inject($('service_id'));
		 			}
		 		}
		 	}
	 	}
	 }).send();
	 return;
}

loadHeadOfficeSelect = function(){
//	$('service_head_office_id').setStyles({display: 'block'});
    $('fieldset-headServiceInput').removeClass('hidden-element');
	new Request.JSON({
		method: 'post',
		url: '/service-head-office',
		onComplete: function(list){
			if (list != '' && ($('user_group_id').getProperty('value') == '1' || $('user_group_id').getProperty('value') == '11')) {
				for (var i in list) {
                    var label = list[i];
                    var selected;
                    if (Cookie.read('selectedHeadServiceId') != undefined)
                        selected = (i == Cookie.read('selectedHeadServiceId'))?true:false;
                    else
                        selected = (i == $('service_head_office_idx').getProperty('value'))?true:false;
					if (label != null) {
						var newoption = new Element('option', {'value':i, 'text':label, 'selected':selected});
						newoption.inject($('service_head_office_id'));
					}
				}
			}
            //@todo potrzebne to??
//			if($('user_group_id').getProperty('value')=='1')
//				$('service_head_office_id').addEvent('change', function(){
//					loadServices($('service_head_office_id').getProperty('value'));
//				});
		}
	}).send();
	return;
}

loadFleetSelect = function(){
    $('fieldset-fleetInput').removeClass('hidden-element');
	 new Request.JSON({
		 method: 'post',
		 url: '/fleet',
		 onComplete: function(list){
		 	if (list != '' && $('user_group_id').getProperty('value') == '21') {
		 		for (var i in list) {
                    var label = list[i];
                    var selected;
                    if (Cookie.read('selectedFleetId') != undefined)
                        selected = (i == Cookie.read('selectedFleetId'))?true:false;
                    else
                        selected = (i == $('fleet_idx').getProperty('value'))?true:false;
		 			if (label != null) {
		 				var newoption = new Element('option', {'value':i, 'text':label, 'selected':selected});
		 				newoption.inject($('fleet_id'));
		 			}
		 		}
		 	}
	 	}
	 }).send();
	 return;
}

toggleVirtualForm = function(obj) {
    //'real' - to czlon nazwy pola fieldset ktore ma byc ukrywane i pokazywane
    if (obj.checked == true) {
        $('fieldset-real').addClass('hidden-element');
    } else {
        $('fieldset-real').removeClass('hidden-element');
    }
}

/**
 * Zaznacza i odznacza wszystkie checkboxy na stronie o podanej klasie
 * @param className|string Nazwa klasy
 * @param flag|string Zaznaczone lub odznaczone
 */
toggleCheckboxes = function(className, flag) {
    $$('.'+className).each(function(item){
        if (!item.disabled) {
            item.checked = flag;
        }

        //pokazuje lub ukrywa caly wiersz, jezeli dotyczy
        if (item.getAttribute('rel')) {
            var f = item.getAttribute('rel').split('::');
            if (f[0] == 'toggleAttendanceRow') {
                toggleAttendanceRow(f[1]);
            } else if (f[0] == 'toggleTyreBrandRow') {
                toggleTyreBrandRow(f[1]);
            }
        }
    })
}

var globalVal='';   //zmienna globalna uzywana do sprawdzania, czy uzytkownik cos wpisal w pole
setValueToInput = function(inputID, sourceObj) {
    if ($(inputID).value == '' || $(inputID).value == globalVal) {
        globalVal = sourceObj.options[sourceObj.selectedIndex].label;
        $(inputID).value = sourceObj.options[sourceObj.selectedIndex].label;
    }
}

/**
 * Pokazuje lub ukrywa jeden element o podanym id
 * @param elementId|int Nazwa identyfikatora
 * @param toggler|obj Element przelaczajacy - do sprawdzenia stanu przelacznika
 */
toggleElement = function(elementId, toggler) {
    if (toggler.checked) {
        $(elementId).disabled = true;
        $(elementId).value = '';
    } else {
        $(elementId).disabled = false;
    }
}

toggleTyreBrandRow = function(tyre_brand_id) {
    if (!$('tyre_brand_code-'+tyre_brand_id).checked) {
        $('tyre_authorization_in_season-'+tyre_brand_id).checked = false;
        $('tyre_authorization_in_season-'+tyre_brand_id).disabled = true;

        $('tyre_authorization_out_of_season-'+tyre_brand_id).checked = false;
        $('tyre_authorization_out_of_season-'+tyre_brand_id).disabled = true;
    } else {
        $('tyre_authorization_in_season-'+tyre_brand_id).disabled = false;
        $('tyre_authorization_out_of_season-'+tyre_brand_id).disabled = false;
    }
}

/**
 * Pokazuje lub ukrywa caly wiersz uslug w kontrakcie
 * @param contract_id|int ID kontraktu
 */
toggleAttendanceRow = function(contract_id) {
    if (!$('attendance_id-'+contract_id).checked) {
        $('attendance_authorization_in_season-'+contract_id).checked = false;
        $('attendance_authorization_in_season-'+contract_id).disabled = true;

        $('attendance_authorization_price_in_season-'+contract_id).value = '';
        $('attendance_authorization_price_in_season-'+contract_id).disabled = true;

        $('attendance_authorization_out_of_season-'+contract_id).checked = false;
        $('attendance_authorization_out_of_season-'+contract_id).disabled = true;

        $('attendance_authorization_price_out_of_season-'+contract_id).value = '';
        $('attendance_authorization_price_out_of_season-'+contract_id).disabled = true;

        $('attendance_net_price_for_fleet-'+contract_id).value = '';
        $('attendance_net_price_for_fleet-'+contract_id).disabled = true;

        $('attendance_net_price_for_service-'+contract_id).value = '';
        $('attendance_net_price_for_service-'+contract_id).disabled = true;
    } else {
        if (!$('attendance_authorization_in_season-'+contract_id).checked) {
            $('attendance_authorization_price_in_season-'+contract_id).disabled = false;
        }
        $('attendance_authorization_in_season-'+contract_id).disabled = false;


        if (!$('attendance_authorization_out_of_season-'+contract_id).checked) {
            $('attendance_authorization_price_out_of_season-'+contract_id).disabled = false;
        }
        $('attendance_authorization_out_of_season-'+contract_id).disabled = false;

        $('attendance_net_price_for_fleet-'+contract_id).disabled = false;
        $('attendance_net_price_for_service-'+contract_id).disabled = false;
    }
}

/**
 * Pokazuje lub ukrywa fragmenty formularza rabatow dla opon w zaleznosci ktora opcja typu rabatu zostanie wybrana
 * @param el|object Obiekt, ktorym zostaja zmieniane opcje
 */
toggleDiscountType = function(el) {
    if (el.options[el.selectedIndex].value == 3) {
        //cena FIX
        $('fieldset-isFixForm').removeClass('hidden-element');
        if (!$('fieldset-isAdditionalForm').hasClass('hidden-element')) {
            $('fieldset-isAdditionalForm').addClass('hidden-element');
        }
        if (!$('fieldset-isNotFixForm').hasClass('hidden-element')) {
            $('fieldset-isNotFixForm').addClass('hidden-element');
        }
    } else if (el.options[el.selectedIndex].value == 2) {
        //rabat dodatkowy
        $('fieldset-isAdditionalForm').removeClass('hidden-element');
        $('fieldset-isNotFixForm').removeClass('hidden-element');
        if (!$('fieldset-isFixForm').hasClass('hidden-element')) {
            $('fieldset-isFixForm').addClass('hidden-element');
        }
    } else {
        if (!$('fieldset-isAdditionalForm').hasClass('hidden-element')) {
            $('fieldset-isAdditionalForm').addClass('hidden-element');
        }
        if (!$('fieldset-isFixForm').hasClass('hidden-element')) {
            $('fieldset-isFixForm').addClass('hidden-element');
        }
        $('fieldset-isNotFixForm').removeClass('hidden-element');
    }
}

//zarzadza zakladkami
manageTabs = function(id) {
    tabs_class = $('switch_tabs').get('class');
    if (!id) {
        id = prepareTabs(tabs_class);
    }
    $$("#switch_tabs div.tabs").each(function(item){
        if (item.id == tabs_class+'_'+id) {
            Cookie.write('tabs_'+tabs_class, id);
            item.removeClass('dispnone');
        }
        else item.addClass('dispnone');
    });
    $$("#link_tabs a").each(function(item){
        item.addEvent('click', function(el) {
            new Event(el).stop();
            manageTabs(this.id.replace('link_tabs_',''));
        });
        if (item.id == 'link_tabs_'+id) {
            item.addClass('active');
        }
        else item.removeClass('active');
    });
}

prepareTabs = function(tabs_class) {
	var cookie = Cookie.read('tabs_'+tabs_class);
	if(!cookie) {
        $$("#switch_tabs div.tabs").each(function(item, index){
            if (index == 0) {
                Cookie.write('tabs_'+tabs_class, item.id.replace(tabs_class+'_',''));
            }
        });
    }
    cookie = Cookie.read('tabs_'+tabs_class);
    $(tabs_class+'_'+cookie).removeClass('dispnone');
    $('link_tabs_'+cookie).addClass('active');
    return cookie;
}

function answer(msg){
	var answer=window.confirm(msg);
	if (answer){
		return true;
	}
	else{
		return false;
	}
}

/**
 * Funkcja wykorzystana do obslugi zmiany parametrow np. widocznosci
 */
changeLinkFunction = function() {
	$$("#main_content a.change").each(function(link){
		addChangeEvent(link);
	});
}
changeSortFunction = function() {
	$$("#main_content a.sorting").each(function(link){
		addSortEvent(link);
	});
}
addChangeEvent = function(item) {
	item.addEvent('click', function(ev) {
		new Event(ev).stop();
		var parent = item.getParent();
    	new Request.JSON({
            method: 'post',
            url: item.href,
            onRequest: function(){parent.innerHTML = '<img src="/images/wait.gif" alt="wait" />';},
            onComplete: function(jsonObj) {
            	if(jsonObj.err) {setTimeout("window.location.reload()", 3000);}
            	if(item.hasClass('reload')) {setTimeout("window.location.reload()", item.rel);}

            	parent.set('html', jsonObj.msg);
            	parent.getChildren().each(function(link){
            		if(link.hasClass('change')) addChangeEvent(link);
        		});
        	}
    	}).send();
	});
}

addSortEvent = function(item) {
	item.addEvent('click', function(ev) {
		new Event(ev).stop();
		parent = item.rel;
    	new Request.JSON({
            method: 'post',
            url: item.href,
            onRequest: function(){$(parent).innerHTML = '<img src="/images/wait.gif" alt="wait" />';},
            onComplete: function(jsonObj) {
            	if(jsonObj.err) {setTimeout("window.location.reload()", 3000);}
            	$(parent).set('html', jsonObj.product_list);
            	$$("#"+parent+" a.sorting").each(function(link){addSortEvent(link);});
            	changeLinkFunction();
        	}
    	}).send();
	});
}

//usuniecie ciasteczek z zapamietanymi wczesniej zaznaczonymi selectami
if (Cookie.read('submitEditUser') != '1') {
    Cookie.dispose('selectedProfileId', {path:'/users'});
    Cookie.dispose('selectedHeadServiceId', {path:'/users'});
    Cookie.dispose('selectedServiceId', {path:'/users'});
    Cookie.dispose('selectedFleetId', {path:'/users'});

} else {
    Cookie.dispose('submitEditUser', {path:'/users'});
}

submitUserForm = function() {
    Cookie.write('submitEditUser', '1', {path:'/users'});
}

/**
 * Kopiuje pole formularza opony z jednego wiersza do drugiego
 * 
 * Uzywane w formularzu edycji opon w depozycie
 * 
 * @param tyreIdFrom ID opony zrodlowej, 'null' w przypadku gdy ma byc skopiowana ostatnia zaznaczona opona oznaczona klasa '.checkTyre'
 * @param tyreIdTo ID opony docelowej
 */
copyTyre = function(tyreIdFrom, tyreIdTo)
{
    if (tyreIdFrom == undefined || tyreIdFrom == null || tyreIdFrom == 'null') {
        //wskazanie elementu, ktory ma byc skopiowany
        $$('.checkTyre').each(function(element) {
            if (element.get('checked')) {
                tyreIdFrom = element.get('id');
            }
        });
    }
    tyreIdFrom = tyreIdFrom.replace('-tyre_id', '');
    if (!tyreIdFrom) return;
    
    if ($(tyreIdTo + '-tyre_pattern_idx') && $(tyreIdFrom + '-tyre_brand').get('value') != $(tyreIdTo + '-tyre_brand').get('value')) {
        var doLoadPattern = true;
    }
    
    if (!$(tyreIdTo + '-tyre_brand').get('disabled'))
        if ($(tyreIdTo + '-tyre_brand').get('type') == 'text') {
            var selectedIndex = $(tyreIdFrom + '-tyre_brand').selectedIndex;
            if (selectedIndex) {
                $(tyreIdTo + '-tyre_brand').set('value', $(tyreIdFrom + '-tyre_brand').options[selectedIndex].label);
            }
            else {
                $(tyreIdTo + '-tyre_brand').set('value', $(tyreIdFrom + '-tyre_brand').get('value'));
            }
        }
        else {
            $(tyreIdTo + '-tyre_brand').set('value', $(tyreIdFrom + '-tyre_brand').get('value'));
        }
    
    if ($(tyreIdTo + '-tyre_pattern_idx')) {
        $(tyreIdTo + '-tyre_pattern_idx').set('value', $(tyreIdFrom + '-tyre_pattern_idx').get('value'));
        if (doLoadPattern)
            loadTyrePatternSelect($(tyreIdFrom + '-tyre_brand'), tyreIdTo + '-tyre_pattern');
    }
    
    if (!$(tyreIdTo + '-tyre_pattern').get('disabled'))
        $(tyreIdTo + '-tyre_pattern').set('value', $(tyreIdFrom + '-tyre_pattern').get('value'));
    if (!$(tyreIdTo + '-tyre_size').get('disabled'))
        $(tyreIdTo + '-tyre_size').set('value', $(tyreIdFrom + '-tyre_size').get('value'));
    if (!$(tyreIdTo + '-tyre_aspect_ratio').get('disabled'))
        $(tyreIdTo + '-tyre_aspect_ratio').set('value', $(tyreIdFrom + '-tyre_aspect_ratio').get('value'));
    if (!$(tyreIdTo + '-tyre_diameter').get('disabled'))
        $(tyreIdTo + '-tyre_diameter').set('value', $(tyreIdFrom + '-tyre_diameter').get('value'));
    if (!$(tyreIdTo + '-li').get('disabled'))
        $(tyreIdTo + '-li').set('value', $(tyreIdFrom + '-li').get('value'));
    if (!$(tyreIdTo + '-si').get('disabled'))
        $(tyreIdTo + '-si').set('value', $(tyreIdFrom + '-si').get('value'));
    if (!$(tyreIdTo + '-tyre_season_key').get('disabled'))
        $(tyreIdTo + '-tyre_season_key').set('value', $(tyreIdFrom + '-tyre_season_key').get('value'));
    if($(tyreIdTo + '-vehicle_tyre_status_key')) {
        if (!$(tyreIdTo + '-vehicle_tyre_status_key').get('disabled'))
            $(tyreIdTo + '-vehicle_tyre_status_key').set('value', $(tyreIdFrom + '-vehicle_tyre_status_key').get('value'));
    }
    if ($(tyreIdTo + '-tyre_purpose_key') && !$(tyreIdTo + '-tyre_purpose_key').get('disabled'))
        $(tyreIdTo + '-tyre_purpose_key').set('value', $(tyreIdFrom + '-tyre_purpose_key').get('value'));
    if ($(tyreIdTo + '-dot') && !$(tyreIdTo + '-dot').get('disabled'))
        $(tyreIdTo + '-dot').set('value', $(tyreIdFrom + '-dot').get('value'));
    if ($(tyreIdTo + '-comment') && !$(tyreIdTo + '-comment').get('disabled'))
        $(tyreIdTo + '-comment').set('value', $(tyreIdFrom + '-comment').get('value'));
    if ($(tyreIdTo + '-rim') && !$(tyreIdTo + '-rim').get('disabled'))
        $(tyreIdTo + '-rim').set('value', $(tyreIdFrom + '-rim').get('value'));
    if ($(tyreIdTo + '-rim_description') && !$(tyreIdTo + '-rim_description').get('disabled'))
        $(tyreIdTo + '-rim_description').set('value', $(tyreIdFrom + '-rim_description').get('value'));
    if (!$(tyreIdTo + '-tread_depth').get('disabled'))
        $(tyreIdTo + '-tread_depth').set('value', $(tyreIdFrom + '-tread_depth').get('value'));
    if (!$(tyreIdTo + '-deposit_number').get('disabled'))
        $(tyreIdTo + '-deposit_number').set('value', $(tyreIdFrom + '-deposit_number').get('value'));
    
    if ($(tyreIdTo + '-tyre_id')) {
        if ($(tyreIdFrom + '-tyre_id').get('checked')) {
            $(tyreIdTo + '-tyre_id').set('checked', true);
        }
        else {
            $(tyreIdTo + '-tyre_id').set('checked', false);
        }
    }
//    $(tyreIdTo + '-tyre_id').set('checked', $(tyreIdFrom + '-tyre_id').get('checked'));
}
