var screen_locked = false;

function unlock_screen() {
	if(!screen_locked) return;
	
	screen_locked = false;


   if(!$chk( $('lock_div') ) ) {
      var obj = document.createElement('div');
      document.body.appendChild( obj );
      obj.set('id', 'lock_div');
   }
   $('lock_div').setStyles({
        width:  0,
        height: 0,
        opacity: 0
    });

   try {
       $$('object').each(function(item) {
            item.setStyle('visibility', item.retrieve('visibility'));
       });
       /*$$('iframe').each(function(item) {
           item.setStyle('visibility', item.retrieve('visibility'));
       });*/
   } catch(e) {
       
   }
}

function lock_screen() {
	if(screen_locked) return;
	
	screen_locked = true;
	

    if(!$chk($('lock_div'))) {
      var obj = new Element('div', {id: 'lock_div', 'class': 'screen_lock'}).inject( document.body );
    }

	$( 'lock_div').setStyles({
        width:  Math.max(window.getSize().x, window.getScrollSize().x) + 'px',
        height: Math.max(window.getSize().y, window.getScrollSize().y) + 'px',
        opacity: 0
    });

    try {
        $$('object').each(function(item) {
            item.store('visibility', item.getStyle('visibility'));
            item.setStyle('visibility','hidden');
        });
        /*$$('iframe').each(function(item) {
            item.store('visibility', item.getStyle('visibility'));
            item.setStyle('visibility','hidden');
        });*/
    } catch(e) {
        
    }
    
	$(document.body).scrollTo(0,0);

	$('lock_div').fade(0.3);
}

function show_popup( str, w, h, left, top ) {
   lock_screen();
	
	//De tweede keer dat in firefox een window wordt geopend, geeft hij een XULElement.accessibleType error.
	//Het breekt echter niets, en in IE gaat het prima... Oplossingen zijn welkom. 
	left = ((window.getSize().x-w)/2)-35;
	// door deze regel werd de popup altijd een bepaalde afstand van de onderkant van het venster geplaatst,
	// waardoor de popup bij lage schermhoogtes half onzichtbaar werd.
	//top = ((window.getSize().y-h)/2); 
   
   if(!$('popup_div')) {
      // ik stop hier een iframe achter om te zorgen dat de popup over de inputs eenvalt
      var obj = new Element('iframe', {id: 'popup_iframe', 'class': 'popup_iframe' }).inject(document.body);

      var obj_iframe = new Element('div', {id : 'popup_div', 'class':'popup_div'}).inject( document.body );
	  
      $('popup_div').setStyles( { display: 'none' } );
   }

   $( 'popup_div' ).set( 'html', str );
	
	

	var popup_location = {
                    width: w.toInt(),
                    left: left.toInt(),
                    top: top.toInt()
                  };
	$('popup_div').setStyles(popup_location);
   
	$('popup_div').setStyles( { display: 'block' } );
	
	var dim = $( 'popup_div' ).getCoordinates();

	popup_location['height'] = dim.height.toInt();
	
	$('popup_iframe').setStyles( { display: 'block' } );
	$('popup_iframe').setStyles(popup_location);
}

function hide_popup() {
    try {
        if($('popup_iframe')) {
            $('popup_iframe').setStyles( { display: 'none' } );
       }
    
       if ($('popup_div')) {
            $('popup_div').setStyles( { display: 'none' } );
       }
       unlock_screen();
    } catch(e) {}
}

function get_html(url, pars) {
   var ajax_obj = new Request.HTML({url:url, method: 'get', onComplete: put_html, evalScripts: false }).send(pars);;
}

function ajax_request(url, pars) {
   var ajax_obj = new Request.HTML({url:url, method: 'get', onComplete: function(){}}).send(pars);
}

function put_html(responseTree, responseElements, responseHTML, responseJavaScript) {
   //dom_eval(responseJavaScript);

   show_popup(responseHTML, 800, 600, 30, 60);
   
   dom_eval(responseJavaScript);
}

function goto_ajax(loc) {
   if(loc.search(/\?/) == -1) {
      var url = loc;
      var pars = 'ajax=true';
   } else {
      var arr = loc.split(/\?/);
      var url = arr[0];
      var pars = arr[1] + '&ajax=true';
   }
   
   get_html(url, pars);
}

function goto_ajax_post(url,pars) {
   var ajax_obj = new Request.HTML({url:url, method: 'post', onComplete: put_html}).send(pars + '&ajax=true');
}

function goto_ajax_script(url, success_function) {
	var request = new Request.HTML({url:url, method: 'get', evalScripts: false });
	request.addEvent('success',function(responseTree, responseElements, responseHTML, responseJavaScript) {
		if (responseHTML == '1') {
			success_function();
		}
	});
	request.send();
}

function show_custom_popup( prefix, w, h, left, top ) {
   lock_screen();

   if(left == null) left = parseInt((window.getSize().x-w)/2,10);
   if(top == null) top = parseInt((window.getSize().y-h)/2,10);
   
	var popup_location = {
						width: w.toInt(),
//                  	height: (h + 'px'),
						left: left.toInt(),
						top: top.toInt()
                  };        
   
   $(prefix + '_popup_div').setStyles(popup_location);
   $(prefix + '_popup_div').setStyles( { display: 'block' } );
// Event.observe( prefix + '_popup_div', 'click', hide_popup, true);


    var dim = $( prefix + '_popup_div' ).getCoordinates();

    popup_location['height'] = dim.height.toInt();
    $(prefix + '_popup_iframe').setStyles(popup_location);
    $(prefix + '_popup_iframe').setStyles( { display: 'block' } );
   
   //setTimeout(activate, 0);
}

function hide_custom_popup( prefix ) {
   $( prefix + '_popup_iframe' ).setStyles( { display: 'none' } ); 
   $( prefix + '_popup_div' ).setStyles( { display: 'none' } );
   unlock_screen();
}

function switch_custom_popup( prefix ) {
   $( prefix + '_popup_iframe' ).fade('out'); 
   $( prefix + '_popup_div' ).fade('out'); 
}

function ajax_xpath_eval(doc, xpath) {
    return $try(
    	function() {return doc.selectSingleNode(xpath)},
		function() {return doc.evaluate( xpath, doc, doc.createNSResolver(doc.documentElement), 9, null).singleNodeValue}
    );
}

function dom_include(src) {
   var headList = document.getElementsByTagName('head');
   var headElement = headList[0];
   
   var scriptElement = document.createElement('script');

   var attribute = document.createAttribute('type');
   attribute.nodeValue = 'text/javascript';
   scriptElement.setAttributeNode(attribute);

   var attribute = document.createAttribute('src');
   attribute.nodeValue = src;
   scriptElement.setAttributeNode(attribute);

   headElement.appendChild(scriptElement);
}

function dom_eval(body) {
   var headList = document.getElementsByTagName('head');
   var headElement = headList[0];
   
   var scriptElement = document.createElement('script');

   var attribute = document.createAttribute('type');
   attribute.nodeValue = 'text/javascript';
   scriptElement.setAttributeNode(attribute);

// werkt in IE en FF
   scriptElement.text = body;

// werkt in FF, niet in IE
//    var text = document.createTextNode(body);
//    scriptElement.appendChild(text);
   
   headElement.appendChild(scriptElement);
}

function post_ajax(fav_form) {
	var str = $(fav_form).toQueryString()
	goto_ajax( $(fav_form).get('action')+'&'+str);
}
