/* 
 * Dosia 2.0
 *
 * Dyskretny Otwarty Samodzialajacy Inicjator Ajaxa
 *
 */

var Dosia = new Object(
		
);

Dosia.getElementsByClassName = function(classname, node) {

	if(!node) {
		node = document.getElementsByTagName("body")[0];
	}
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");

	for(var i=0,j=els.length; i<j; i++) {
		if(re.test(els[i].className))a.push(els[i]);
	}

	return a;
}

Dosia.Form = function(formObj) {

    Dosia.DisplayLoader(true);

	if (typeof formObj != 'object') {
		formObj = $(formObj);
	}

    Form.request(formObj,{
        onComplete: function(transport){
            Dosia.DisplayLoader(false); Dosia.Run(transport.responseText);
        }
    });

}

Dosia.Run = function(code) {
    eval(code);
}

Dosia.Request = function(target) {

    Dosia.DisplayLoader(true);

    var url = target;
    new Ajax.Request(url, {
        method: 'get',
        onSuccess: function(transport) {
            Dosia.DisplayLoader(false); Dosia.Run(transport.responseText);
            return transport.responseText;
        }
    });

}

Dosia.RequestArray = function(target, fields) {

    Dosia.DisplayLoader(true);
    var params = [];
    var key;
    var value;
    var i = 0

    //alert(fields[0] + ' '+ fields[1]+ ' ' + fields[2]);
    //alert(fields.length);
    for(i = 0; i < fields.length; i++) {
	
	key = fields[i];
	value = document.getElementById(fields[i]).value;
	params['' + key + ''] = '' + value + '';
    }
   
    var url = target;
    new Ajax.Request(url, {
        method: 'post',
	parameters: params,
        onSuccess: function(transport) {
            Dosia.DisplayLoader(false); Dosia.Run(transport.responseText);
            return transport.responseText;
        }
    });
}

Dosia.DisplayLoader = function(action) {
    if(action == true) {
        var div = new Element('div', { 'class': 'DosiaDisplayLoaderContainer', 'id': 'DosiaDisplayLoaderContainer' });
        div.innerHTML = 'Proszę czekać ...';
        var height = document.viewport.getHeight();
        var width = document.viewport.getWidth();
        var scrollLeft = document.viewport.getScrollOffsets().left;
        var scrollTop = document.viewport.getScrollOffsets().top;
        var left = (width - 100)/2 + scrollLeft;
        var top = (height - 80)/2 + scrollTop;
        div.style.left = left + 'px';
        div.style.top = top + 'px';
        document.body.appendChild(div);
    } else {
    	if($('DosiaDisplayLoaderContainer')) {
    		$('DosiaDisplayLoaderContainer').remove();
    	}
    }
}

Dosia.ShowMessageBox = function(event,from) {
    
    	var elementO = (from==null || from==undefined?Event.element(event):from);
    	var  correctField = Dosia.getValidatorsElement(elementO);
    	var index = (elementO.id != null && elementO.id != undefined && elementO.id.length > 0?elementO.id:elementO.name);
    	if(index == undefined || index == null)return;
    	if(index.endsWith('_divValidator')){
    		index = index.replace('_divValidator','');
    	}
//    	alert(index);
    	
    	do{
    		if(elementO == null)return;
    		if(elementO.id == null || !elementO.id.endsWith('divValidator')){
    			var pre = (elementO.name!=null?elementO.name:elementO.id);
    			element = $(pre+'_divValidator');
    		
    		}else if(elementO.id.endsWith('divValidator')){
    			element = elementO;
    		}
    		elementO = elementO.parentNode;
    	}while(element == null && elementO != $$('body'));
    	
    	if(element == null)return;
    	var object = $(element.id.replace('divValidator','messageBox'));
    	if(object == null)return;
    	var x = Element.viewportOffset(element).left + document.viewport.getScrollOffsets().left  + 30;
    	
//        if(document.viewport.getScrollOffsets().top > 0 && Element.viewportOffset(element).top == Dosia.fields[index]){
//			var y = Element.viewportOffset(element).top;
//			
//		}else{
			var y = Element.viewportOffsetFix(element).top + document.viewport.getScrollOffsets().top;
//		}
        
        
        var windowWidth = Dosia.windowWidth;
        if(windowWidth < x + 213){
        	object.removeClassName('tabelaGlownaChmurki');
        	object.removeClassName('tabelaGlownaChmurkiOdwrotnie');
        	object.addClassName('tabelaGlownaChmurkiOdwrotnie');
        	x = x - 213 - 30 - 20;
        }else{
        	object.removeClassName('tabelaGlownaChmurki');
        	object.removeClassName('tabelaGlownaChmurkiOdwrotnie');
        	object.addClassName('tabelaGlownaChmurki');
        }
        object.style.left = x + 'px';
        object.style.top = y + 'px';
        Element.show(object);
}

Dosia.ShowMessageBoxDwa = function(event) {
	var element = Event.element(event);
    if(element == null) {
        return;
    }
	var x = Event.pointerX(event) + 20;
	var y = Event.pointerY(event);
	y += 10;
	var body = $$('body');
	var i = 0;
	while(element != body[0] && i < 10){
		if($(element.name + '_messageBox') != null){
			$(element.name + '_messageBox').style.top = y + 'px';
			$(element.name + '_messageBox').style.left = x + 'px';
			Element.show($(element.name + '_messageBox'));
			break;
		}else if($(element.id + '_messageBox') != null){
			$(element.id + '_messageBox').style.top = y + 'px';
			$(element.id + '_messageBox').style.left = x + 'px';
			Element.show($(element.id + '_messageBox'));
			break;
		}else if($(element.id.replace(/_divValidator/, "_messageBox")) != null){
			$(element.id.replace(/_divValidator/, "_messageBox")).style.top = y + 'px';
			$(element.id.replace(/_divValidator/, "_messageBox")).style.left = x + 'px';
			Element.show($(element.id.replace(/_divValidator/, "_messageBox")));
			break;
		}else if(Element.readAttribute(element,'for') != null && Element.readAttribute(element,'for').length > 0){
			$(Element.readAttribute(element,'for') + '_messageBox').style.top = y + 'px';
			$(Element.readAttribute(element,'for') + '_messageBox').style.left = x + 'px';
			Element.show($(Element.readAttribute(element,'for') + '_messageBox'));
			break;
		}
			else{
			element = Element.getOffsetParent(element);
			i++;
		}
	}
}

Dosia.CreateMessageCloud = function(id, message) {
    var msgMainContainer = new Element('div', {'class' : 'tabelaGlownaChmurki','id' : id + '_messageBox'});
    var topBar = new Element('div', {'class' : 'tabelaGornaChmurki'});
    var bottomBar = new Element('div', {'class' : 'tabelaDolnaChmurki'});
    var msgContainer = new Element('div', {'class' : 'tabelaSrodkowaChmurki'});
    msgContainer.innerHTML = message;
    msgMainContainer.insert(topBar).insert(msgContainer).insert(bottomBar);
    $('messages').insert(msgMainContainer);
    Element.hide(msgMainContainer);
    return msgMainContainer;
}


Dosia.HideMessageBox = function(event,from) {
	var elementO = (from==null || from==undefined?Event.element(event):from);
	if(elementO == null)return;
	do{
		if(elementO.id == null || !elementO.id.endsWith('divValidator')){
			var pre = (elementO.name!=null?elementO.name:elementO.id);
			element = $(pre+'_divValidator');
		
		}
		elementO = elementO.parentNode;
	}while(element == null && elementO != $$('body') && elementO != null);
	
	if(element == null)return;
	var objectid = element.id;
	if(objectid != null){
		var object = $(objectid.replace('divValidator','messageBox'));
		Element.hide(object);
	}else{
		Dosia.HideMessageBoxDwa(event);
	}
	
}

Dosia.HideMessageBoxDwa = function(event) {
	var element = Event.element(event);
	var body = $$('body');
	var i = 0;
	while(element != body[0] && i < 10){
		if($(element.name + '_messageBox') != null){
			Element.hide($(element.name + '_messageBox'));
			break;
		}else if($(element.id + '_messageBox') != null){
			Element.hide($(element.id + '_messageBox'));
			break;
		}else if($(element.id.replace(/_divValidator/, "_messageBox")) != null){
			Element.hide($(element.id.replace(/_divValidator/, "_messageBox")));
			break;
		}else if(Element.readAttribute(element,'for') != null && Element.readAttribute(element,'for').length > 0){
			Element.hide($(Element.readAttribute(element,'for') + '_messageBox'));
			break;
		}else{
			element = Element.getOffsetParent(element);
			i++;
		}
	}
	Element.show(element);
}


Dosia.ValidateForm = function(form) {
	
    Event.observe(form, 'submit', function(event) {
    	var postBody = Form.serialize(form) + '&action=submit';
    	var redirect = false;
        new Ajax.Request(form.action, {
            method : 'post',
            postBody : Form.serialize(form) + '&action=submit',
            onCreate : function() {
                Dosia.DisplayLoader(true);
                form.disable();
                var arr = $$('div.newValidator');
                for(var i = 0; i < arr.length; i++ ){
                	arr[i].remove();
                }
                arr = $$('div.tabelaGlownaChmurki');
                for(var i = 0; i < arr.length; i++ ){
                	arr[i].remove();
                }
            },
            onSuccess : function(transport) {
            	form.enable();
                Dosia.DisplayLoader();
                var odp = (transport.responseText.isJSON()?transport.responseText.evalJSON():transport.responseText);
                if(!transport.responseText.isJSON()){
                	form.disable();
                	eval(odp);
//                	form.enable();
                }else if(odp.success == true) {
                	if(odp.redirect != null) {
                		window.location = odp.redirect;
                	}else {
	                    var odpDiv = new Element('div');
	                    var odpSpan = new Element('span');
	                    odpSpan.addClassName('state_ok');
	                    if(odp.msg != null){
	                    	odpSpan.innerHTML = odp.msg;
	                    }else{
	                    	odpSpan.innerHTML = 'Formularz został zaakceptowany';	
	                    }
	                    odpDiv.insert(odpSpan);
	                    Element.insert(form, {'after' : odpDiv});
	                    form.hide();
                	}
                } else if (odp.success == false) {
                	form.enable();
                    for(i in odp.fields) {
                    	var rmField = null;
                    	var cloude = null;
                    	var validDiv = null;
                    	if($(odp.fields[i].field + '_divValidator')== null && form[odp.fields[i].field] != null && form[odp.fields[i].field].name != null){
                    		rmField = form[odp.fields[i].field];
                    		validDiv = Dosia.UpdateValidatorState(rmField.name + '_divValidator',rmField,'no');

                            cloude = Dosia.CreateMessageCloud(rmField.name, odp.fields[i].msg);
                            Event.observe(validDiv,'mouseover', function(event){Dosia.ShowMessageBox(event);});
                        	Event.observe(validDiv,'mouseout', function(event){Dosia.HideMessageBox(event)});
                        	                        	
                    	}else if(form[odp.fields[i].field]!= null && form[odp.fields[i].field].name != null){
                    		rmField = form[odp.fields[i].field];
                    		validDiv = Dosia.UpdateValidatorState(rmField.name + '_divValidator',rmField,'no');
                    		if($(rmField.name + '_messageBox') != null){
                    			Element.remove($(rmField.name + '_messageBox'));
                    		}
                            cloude = Dosia.CreateMessageCloud(rmField.name, odp.fields[i].msg);
                            Event.observe(validDiv,'mouseover', function(event){Dosia.ShowMessageBox(event);});
                        	Event.observe(validDiv,'mouseout', function(event){Dosia.HideMessageBox(event)});
                        	
                    	}else if($(odp.fields[i].field) != null){
                    		rmField = $(odp.fields[i].field);
                    		validDiv = Dosia.UpdateValidatorState(rmField.id + '_divValidator',rmField,'no');
                    		if($(rmField.id + '_messageBox')){
                    			$(rmField.id + '_messageBox').remove();
                    		}
                            cloude = Dosia.CreateMessageCloud(rmField.id, odp.fields[i].msg);
                            
                            Event.observe(validDiv,'mouseover', function(event){Dosia.ShowMessageBox(event);});
                        	Event.observe(validDiv,'mouseout', function(event){Dosia.HideMessageBox(event)});
                        	
                    	}
                    	
                    	Event.observe(rmField,'mouseover',function(event,rmField){
                    		Dosia.ShowMessageBox(event,rmField);
                    	});
                    	Event.observe(rmField,'mouseout',function(event,rmField){
                    		Dosia.HideMessageBox(event,rmField);
                    	});
                    	
                    	
                    }
                    
                } 
            }
        });
        Event.stop(event);
    });
}


Dosia.UpdateValidatorState = function(validator_id,field,state){
	if($(validator_id) == null){
		var div = new Element('div', {'id' : validator_id, 'class' : 'newValidator'});
		var left = Element.viewportOffset(field).left + field.getWidth() + document.viewport.getScrollOffsets().left +10;
		var index = ((field.id != null && field.id != undefined && field.id.length > 0)?field.id:field.name);
//		alert(index);
//		if(document.viewport.getScrollOffsets().top > 0 && Element.viewportOffset(field).top == Dosia.fields[index]){
//			var top = Element.viewportOffset(field).top;
//			
//		}else{
			var top = Element.viewportOffsetFix(field).top + document.viewport.getScrollOffsets().top;
//		}
//		alert(document.viewport.getScrollOffsets().top + ' ' + Element.viewportOffsetFix(field).top);
		div.style.top = top + 'px';
		div.style.left = left + 'px';
		div.removeClassName('state_ok').removeClassName('state_no').removeClassName('state_load').addClassName('state_' + state);
		$('messages').insert(div);
	}else{
		var div = $(validator_id);
		div.removeClassName('state_ok').removeClassName('state_no').removeClassName('state_load').addClassName('state_' + state);
	}
	return div;
}

Dosia.HideAllValidators = function() {
	var validators = $$('div.newValidator');
	for(var i =0; i < validators.length; i++){
		Element.remove(validators[i]);
	}
}


Dosia.ValidateField = function(field) {
	var action = field.form.action;
	var rmField = field;
//	alert(field.type);
	if(field.type.toUpperCase() == 'CHECKBOX' && field.parentNode.tagName.toUpperCase() == 'FIELDSET'){
		rmField = rmField.parentNode;
		rmField.name = rmField.id;
	}
	if(field.type.toUpperCase() == 'TEXT'){
		Event.observe(field,'focus', function(e) {
			
			if($(field.name + '_divValidator')!=null)$(field.name + '_divValidator').remove();
			
		} );
	}
	
	Event.observe(field, (field.type.toUpperCase() == 'CHECKBOX'?'click':'blur'), function(){
//		alert(BrowserDetect.browser + ' v.' + BrowserDetect.version);
		var pB = '';
		if(rmField.tagName.toUpperCase() == 'FIELDSET'){
			var fields = rmField.childElements();
			for(i = 0; i < fields.length; i++){
				if(fields[i].tagName.toUpperCase() == 'INPUT'){
					pB = pB + '&' + Form.Element.serialize(fields[i]);
				}
			}
		}else{
			pB = Form.Element.serialize(field);
		}
		
		pB = pB  + '&validate=' + escape(field.name);
		
        new Ajax.Request(action + '/field/' + field.name , {
            method : 'post',
            postBody : pB,
            onCreate : function(transport) {
        		Dosia.UpdateValidatorState(rmField.name + '_divValidator',rmField,'load');
        		if($(rmField.name + '_messageBox') != null){
        			$(rmField.name + '_messageBox').remove();
        		}
        		Event.stopObserving(rmField,'mouseover');
        		Event.stopObserving(rmField,'mouseout');
            },
            onSuccess : function(transport) {
            	
                var odp = transport.responseText.evalJSON();
                if(odp.success == true) {
                	Dosia.UpdateValidatorState(rmField.name + '_divValidator',rmField,'ok');
                } else {
                	var validDiv = Dosia.UpdateValidatorState(rmField.name + '_divValidator',rmField,'no');
//                	alert(field.name);
//                	alert(odp['fields'][escape(field.name)]['msg']);
                	var cloude = Dosia.CreateMessageCloud(rmField.name,odp['fields'][escape(field.name)]['msg']);
                	Event.observe(validDiv,'mouseover', function(event){Dosia.ShowMessageBox(event)});
                	Event.observe(validDiv,'mouseout', function(event){Dosia.HideMessageBox(event)});
                	Event.observe(rmField,'mouseover',function(event){
                		Dosia.ShowMessageBox(event);
                	});
                	Event.observe(rmField,'mouseout',function(event){
                		Dosia.HideMessageBox(event);
                	});
                }
            }
        })
    });
	
}

//state : no , ok, load, null
Dosia.AddToolTipToElement = function(rmField,message,state) {
	var ident = (rmField.name != null?rmField.name:rmField.id);
	if(state != null){
		var validDiv = Dosia.UpdateValidatorState(ident + '_divValidator',rmField,state);
		Event.observe(validDiv,'mousemove', function(event){Dosia.ShowMessageBox(event)});
		Event.observe(validDiv,'mouseout', function(event){Dosia.HideMessageBox(event)});
	}
	var msgMainContainer = new Element('div', {'class' : 'tabelaGlownaChmurki','id' : ident + '_messageBox'});
	var topBar = new Element('div', {'class' : 'tabelaGornaChmurki'});
	var bottomBar = new Element('div', {'class' : 'tabelaDolnaChmurki'});
	var msgContainer = new Element('div', {'class' : 'tabelaSrodkowaChmurki'});
	msgContainer.innerHTML = message;
	msgMainContainer.insert(topBar).insert(msgContainer).insert(bottomBar);
	$('messages').insert(msgMainContainer);
	Element.hide(msgMainContainer);
	Event.observe(rmField,'mousemove', function(event){Dosia.ShowMessageBox(event)});
	Event.observe(rmField,'mouseout', function(event){Dosia.HideMessageBox(event)});
	
}

Dosia.AddValidatorByElementName = function (name){
	var i = 0;
	var elements = $$('input[name="' + name + '"]');
	for(i = 0; i<elements.length ; i++){
		Dosia.ValidateField(elements[i]);
	}
}

Dosia.AddValidatorByFormId = function (id){
	var form = $(id);
	if(form != null) {
		Dosia.ValidateForm(form);
	}
	
}

Dosia.getValidatorsElement = function(field){
	if(field.tagName.toUpperCase() == 'FORM') {
		return null;
	}
	if(  (field.getAttribute("type") != null && field.getAttribute("type") != undefined && field.getAttribute("type").toUpperCase() == 'TEXT') || (field.tagName != null && (field.tagName.toUpperCase() == 'FIELDSET' || field.tagName.toUpperCase() == 'TEXTAREA'))){
		return field;
	}else if(field.parentNode != null && field.parentNode != document.body){
		return Dosia.getValidatorsElement(field.parentNode);
	}else{
		return null;
	}
}

Event.observe(window, 'load', function(){
		

	var dosiafields = [];
	var fields = document.getElementsByClassName('avf');
    var c = fields.length;
    for(i = 0; i < c; i++) {
        Dosia.ValidateField(fields[i]);
        var correctField = Dosia.getValidatorsElement(fields[i]);
    	if(correctField != null){
    	var index = (correctField.id != null && correctField.id != undefined && correctField.id.length > 0?correctField.id:correctField.name);
        dosiafields[index] = Element.viewportOffset(correctField).top;
    	}
    }

    var forms = document.getElementsByClassName('avfo');
    c = forms.length;
    for(i = 0; i < c; i++) {
        Dosia.ValidateForm(forms[i]);
        fields = forms[i].getElements();
        var c = fields.length;
        for(i = 0; i < c; i++) {
        	var correctField = Dosia.getValidatorsElement(fields[i]);
        	if(correctField != null){
        	var index = (correctField.id != null && correctField.id != undefined && correctField.id.length > 0?correctField.id:correctField.name);
            dosiafields[index] = Element.viewportOffset(correctField).top;
//            alert(index);
        	}
        }
    }
    Dosia.fields = dosiafields;
    Dosia.windowWidth = document.viewport.getWidth();
    Dosia.replaceValidatorsOnResize = true;
    var arr = $$('#speciality_[type="checkbox"]');
    if(arr.length > 0)Event.observe(arr[0],'click',function(event){Dosia.noneSpec(event)});
    
});


Dosia.noneSpec = function (event) {
	if($('acceptedfieldset_divValidator') != null)$('acceptedfieldset_divValidator').remove();
	var el = Event.element(event);
	switch(Form.Element.getValue(el)){
	case null:
		$('specialtyFieldset').insert($('fieldsetHidden').innerHTML);
		$('fieldsetHidden').update('');
		var arr = $$('.avf');
		for(i = 0; i < arr.length; i++){
			Event.stopObserving(arr[i]);
			Dosia.ValidateField(arr[i]);
			if(arr[i].id.match(/^speciality_\d+/)){
				autocompleter(arr[i].id);
			}
		}
		var arr = $$('.autoloader');
		for(i = 0; i < arr.length; i++){
			Event.stopObserving(arr[i]);
			Dosia.ValidateField(arr[i]);
			if(arr[i].id.match(/^speciality_\d+/)){
				autocompleter(arr[i].id);
			}
		}
		$$('a.iconDodaj').invoke('show');
		el.name = '';
		el.id = 'specialty_';
		break;
	default:
		$('fieldsetHidden').update($('specialtyFieldset').innerHTML);
		$('specialtyFieldset').update('');
		$$('a.iconDodaj').invoke('hide');
		el.name = 'specialty[]';
		el.id = 'specialty_0';
		var arr = $$('.avf');
		for(i = 0; i < arr.length; i++){
			if(arr[i].id.match(/^speciality_\d+/)){
//				Event.stopObserving('blur',arr[i]);
				arr[i].stopObserving('blur');
				
				if($(arr[i].name + '_divValidator') != null){
					$(arr[i].name + '_divValidator').style.left = '-100px';
				}
				if($(arr[i].id + '_divValidator') != null){
					$(arr[i].id + '_divValidator').style.left = '-100px';;
				}
				
			}
		}
		var arr = $$('.autoloader');
		for(i = 0; i < arr.length; i++){
			if(arr[i].id.match(/^speciality_\d+/)){
//				Event.stopObserving('blur',arr[i]);
				arr[i].stopObserving('blur');
				
				if($(arr[i].name + '_divValidator') != null){
					$(arr[i].name + '_divValidator').style.left = '-100px';
				}
				
			}
		}
		break;
	}
}


Event.observe(window, 'resize', function(){
	
	
	if(Dosia.replaceValidatorsOnResize){
		var validatory = document.getElementsByClassName('newValidator');
		var diff = ((document.viewport.getWidth() - Dosia.windowWidth) - ((document.viewport.getWidth() - Dosia.windowWidth) % 2) )/ 2;
		for(i = 0; i< validatory.length; i++){
			validatory[i].style.left = (Element.viewportOffset(validatory[i]).left + diff) + 'px';
		}
	}
	Dosia.windowWidth = document.viewport.getWidth();
	
});

Dosia.Action2Run = new Array();

Dosia.AddAction2Run = function(ident, func) {
	if (Dosia.Action2Run[ident] == undefined) {
		Dosia.Action2Run[ident] = new Array();
	}

	Dosia.Action2Run[ident][Dosia.Action2Run[ident].length] = func;
}

/**
 * Funkcja uruchamia akcje które mają się zdarzyć po uruchomieniu zdarzenia o
 * zadanym identyfikatorze
 */
Dosia.RunAction = function(ident) {

	if (ident == true) {
		for ( a in Dosia.Action2Run) {
			for (i = 0 ; i < a.length ; i++) {
				Dosia.Run(a[i]);
			}
		}
	} else if (Dosia.Action2Run[ident] != undefined) {
		for (i = 0 ; i < Dosia.Action2Run[ident].length ; i++) {
			Dosia.Run(Dosia.Action2Run[ident][i]);
		}
	}
}

Dosia.CheckAction = function(ident, action) {
	if (ident == true) {
		for ( a in Dosia.Action2Run) {
			for (i = 0 ; i < a.length ; i++) {
				if (a[i] == action)
					return true;
			}
		}
	} else if (Dosia.Action2Run[ident] != undefined) {
		for (i = 0 ; i < Dosia.Action2Run[ident].length ; i++) {
			if (Dosia.Action2Run[ident][i] == action)
				return true;
		}
	}

	return false;
}

Element.addMethods({
	  viewportOffsetFix: function(forElement) {
	    var valueT = 0, valueL = 0;

	    var element = forElement;
	    do {
	      valueT += element.offsetTop  || 0;
	      valueL += element.offsetLeft || 0;

	      // Safari fix
	      if (element.offsetParent == document.body &&
	        Element.getStyle(element, 'position') == 'absolute') break;

	    } while (element = element.offsetParent);

	    element = forElement;
	    do {
	      if (!Prototype.Browser.Opera || element.tagName == 'HTML') {
	        valueT -= element.scrollTop  || 0;
	        valueL -= element.scrollLeft || 0;
	      }
	    } while (element = element.parentNode);

	    return Element._returnOffset(valueL, valueT);
	  }
	});

Dosia.Grade = function(form,callback) {
	Dosia.DisplayLoader(true);

	if (typeof form != 'object') {
		form = $(form);
	}

    form.request({
        onComplete: function(transport){
            Dosia.DisplayLoader(false);  var points = transport.responseText; eval(callback);
        }
    });
}

Dosia.GradePost = function(formId,divId){
	Dosia.Grade(formId,"Dosia.GradePostUpdate(points,'" + divId + "')");
}

Dosia.GradePostUpdate = function(points,divId){
	$(divId).update("<p class=\"floatLeft\"><b>Punkty: </b>" + points + "</p>");
}

Dosia.SWFFire = function (id) {
	
	var object = $(id);
	object.fire('click');

}
