var ajax_response_div = 'ajax-response';
var ajax_response_small_div = 'ajax-response-small';
var loading_time = 1000;
var timeout_time = 30000;
var ajax_button = 'ajax-button';
var ajax_disabled_button = ajax_button;
var submit_button = 'Submit';
var onclick_event;
var ajax_submitted = false;
var width = screen.width - 4;
var height = screen.height - 4;
var error_color = '#ffefef';
var clear_color = '#b7b7b7';

function get_xml_http_object()
 { var xml_http = null;
   
   if (window.XMLHttpRequest) 
	{ try 
	   { xml_http = new XMLHttpRequest(); } 
	  catch (e) 
	   { xml_http = false; }
    }
   else
    { try 
	   { xml_http = new ActiveXObject('Msxml2.XMLHTTP'); } 
      catch (e) 
	   { try 
	      { xml_http = new ActiveXObject('Microsoft.XMLHTTP'); } 
	     catch (e) 
	      { xml_http = false; }
       }
	}   
   
   return xml_http;
 } 

function xml2str(xmlNode)
 { try 
    { return (new XMLSerializer()).serializeToString(xmlNode); } // Gecko-based browsers, Safari, Opera.
   catch (e) 
    { try 
	   { return xmlNode.xml; } // Internet Explorer.
      catch (e)
       { alert('Xmlserializer not supported'); } //Strange Browser
    }
   return false;
 }
 
function ajax_timeout(msg)
 { ajax_clear_response();
   ajax_show_error(msg);
   ajax_enable_button();
   set_focus();
 } 
 
function ajax_timeout_small(msg)
 { ajax_clear_response_small();
   ajax_show_error_small(msg);
   ajax_enable_button();
   set_focus();
 } 
 
function ajax_show_loading(msg)
 { if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).style.display = 'block';
	  document.getElementById(ajax_response_div).innerHTML = '<div class="ajax-loading-default"><img class="padding-r-05" src="images/loading.gif" alt="' + msg + '" title="' + msg + '">' + msg + '</div>'; 
	}
 }
 
function ajax_show_loading_small(msg)
 { if (document.getElementById(ajax_response_small_div) != null)
    { document.getElementById(ajax_response_small_div).style.display = 'block';
	  document.getElementById(ajax_response_small_div).innerHTML = '<div class="ajax-loading-default"><img class="padding-r-05" src="images/loading.gif" alt="' + msg + '" title="' + msg + '">' + msg + '</div>'; 
	}
 }
 
function ajax_show_error(msg)
 { if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).style.display = 'block';
	  document.getElementById(ajax_response_div).innerHTML = '<div class="ajax-loading-error"><div class="float-l"><img class="padding-r-05" src="images/icons/error.gif"></div><div class="float-l">' + msg + '</div><div class="ajax-clear-response"><img class="hand" src="images/icons/button-close.gif" onclick="ajax_clear_response();"></div></div>'; 
	}
 } 
 
function ajax_show_error_small(msg)
 { if (document.getElementById(ajax_response_small_div) != null)
    { document.getElementById(ajax_response_small_div).style.display = 'block';
	  document.getElementById(ajax_response_small_div).innerHTML = '<div class="ajax-loading-error"><div class="float-l">' + msg + '</div></div>'; 
	}
 } 

function ajax_show_success(msg)
 { if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).style.display = 'block';
	  document.getElementById(ajax_response_div).innerHTML = '<div class="ajax-loading-success"><div class="float-l"><img class="padding-r-05" src="images/icons/success.gif"></div><div class="float-l">' + msg + '</div><div class="ajax-clear-response"><img class="hand" src="images/icons/button-close.gif" onclick="ajax_clear_response();"></div></div>'; 
	} 
 }
 
function ajax_clear_field(el, focus, f)
 { if (typeof f != 'undefined')
    { if (document.forms[f].elements[el] != null)
       { document.forms[f].elements[el].selectedIndex = 0; }
    }
   else if (document.getElementById(el) != null)
    { document.getElementById(el).value = ''; }
    
   if (typeof focus != 'undefined')
    { set_focus();	}
 }  
 
function ajax_clear_response()
 { if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).innerHTML = ''; 
	  document.getElementById(ajax_response_div).style.display = 'none';
	}
 
 if (document.getElementById('message-stack') != null)
    { document.getElementById('message-stack').innerHTML = ''; 
	  document.getElementById('message-stack').style.display = 'none';
	}
 } 
 
function ajax_clear_response_small()
 { if (document.getElementById(ajax_response_small_div) != null)
    { document.getElementById(ajax_response_small_div).innerHTML = ''; 
	  document.getElementById(ajax_response_small_div).style.display = 'none';
	}
 
 if (document.getElementById('book') != null)
    { document.getElementById('book').innerHTML = ''; 
	  document.getElementById('book').style.display = 'none';
	}
 } 
 
function ajax_disable_button(f, id)
 { ajax_disabled_button = ajax_button;
   if (id)
    { ajax_disabled_button = ajax_button + id; }

   if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).style.display = 'none'; }
   if (document.getElementById(ajax_disabled_button) != null)
    { onclick_event = document.getElementById(ajax_disabled_button).getAttribute('onclick');
	  document.getElementById(ajax_disabled_button).setAttribute('onclick', null);
	  //document.getElementById(ajax_disabled_button).className = 'button-disabled';
	  ajax_submitted = true;
	}
   if (document.getElementById(submit_button) != null)
    { document.getElementById(submit_button).disabled = true; 
	  ajax_submitted = true;
	}

   if (f)
    { var form = document.forms[f];
	  if (form != 'undefined')
	   { var field;
		 for (var i = 0; i < form.elements.length; i++) 
          { field = form.elements[i].name;
		    if (form.elements[i].type != 'hidden' && document.getElementById(field) != null)
			 { if (form.elements[i].type == 'radio' || form.elements[i].type == 'checkbox')
			    { document.getElementById(field).style.background = ''; }
			   else
			    { document.getElementById(field).style.background = clear_color; }
			 }
		  }
	   }	  
	} 
 } 
 
function ajax_disable_button_web(f, id)
 { if (document.getElementById(ajax_response_div) != null)
    { document.getElementById(ajax_response_div).style.display = 'none'; }
   ajax_submitted = true;

   if (f)
    { var form = document.forms[f];
	  if (form != 'undefined')
	   { var field;
		 for (var i = 0; i < form.elements.length; i++) 
          { field = form.elements[i].name;
		    if (form.elements[i].type != 'hidden' && form.elements[i].type != 'submit' && document.getElementById(field) != null)
			 { if (form.elements[i].type == 'radio' || form.elements[i].type == 'checkbox')
			    { document.getElementById(field).style.background = ''; }
			   else
			    { document.getElementById(field).style.background = clear_color; }
			 }
		  }
	   }	  
	} 
 }
 
function ajax_disable_button_web_small(f, id)
 { if (document.getElementById(ajax_response_small_div) != null)
    { document.getElementById(ajax_response_small_div).style.display = 'none'; }
   ajax_submitted = true;

   if (f)
    { var form = document.forms[f];
	  if (form != 'undefined')
	   { var field;
		 for (var i = 0; i < form.elements.length; i++) 
          { field = form.elements[i].name;
		    if (form.elements[i].type != 'hidden' && form.elements[i].type != 'submit' && document.getElementById(field) != null)
			 { if (form.elements[i].type == 'radio' || form.elements[i].type == 'checkbox')
			    { document.getElementById(field).style.background = ''; }
			   else
			    { document.getElementById(field).style.background = clear_color; }
			 }
		  }
	   }	  
	} 
 }
 
function ajax_enable_button()
 { if (document.getElementById(ajax_disabled_button) != null)
    { document.getElementById(ajax_disabled_button).setAttribute('onclick', onclick_event);
	  //document.getElementById(ajax_disabled_button).className = 'button-enabled';
	  ajax_submitted = false; 
	}
   if (document.getElementById(submit_button) != null)
    { document.getElementById(submit_button).disabled = false; 
	  ajax_submitted = false; 
	}
 }
 
function silent_error_handler() 
 { return true; }
 
function get_url_param(name) // use: var param = get_url_param('variable')
 { name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
   var regexS = "[\\?\/]" + name + "\/([^\/#]*)";  
   var regex = new RegExp(regexS);  
   var results = regex.exec(window.location.href);  
   if (results == null)    
    { return ''; }
   else 
    { return results[1]; }
 }
 
function get_url_parameter(name, url)
 { if (typeof url == 'undefined')
    { url = window.location.href; }
   name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
   var regex = new RegExp("[\\?\/]" + name + "\/([^\/#]*)");  
   var results = regex.exec(url);  
   if (results == null)    
    { return false; }
   else 
    { return decodeURIComponent(results[1].replace(/\+/g, " ")); }
 }; 
 
function get_parameter_names() // get all querystring parameter names
 { var params = new Array();
   var regex = /[\?\/]([^\/]+)\//g;
   while ((results = regex.exec(window.location.href)) != null)
	{ params.push(results[1]); }
   return params;
 }
 
function submit_form(f) 
 { ajax_disable_button(f);
   document.forms[f].submit();
   return false;   
 }
 
function submit_form_only(f) 
 { document.forms[f].submit();
   return false;   
 }

function popup_window(url)
 { window.open(url,'popup_window','toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=1, resizable=1, copyhistory=0, width=' + width + ', height=' + height + ', screenX=0, screenY=0, top=0, left=0'); }
 
function popup(url)
 { window.open(url,'popup','toolbar=1, location=1, directories=1, status=1, menubar=1, scrollbars=1, resizable=1, copyhistory=1, width=' + width + ', height=' + height + ', screenX=0, screenY=0, top=0, left=0'); } 
 
function set_focus(pos, action) 
 { pos = pos || 0;
   if (document.forms.length > 0) 
    { var field = document.forms[pos];
      for (i = 0; i < field.length; i++) 
	   { if ((field.elements[i].type != 'image') && (field.elements[i].type != 'hidden') && (field.elements[i].type != 'reset') && (field.elements[i].type != 'submit'))
	      { if (!document.forms[pos].elements[i].disabled && document.forms[pos].elements[i].value == '')
		     { document.forms[pos].elements[i].focus(); }
			if (action == 'select' && ((field.elements[i].type == 'text') || (field.elements[i].type == 'password'))) 
			 { document.forms[pos].elements[i].select(); }
            break;
          }
       }
    }
 }
 
function get_scroll_width()
 { var w = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
   return w ? w : 0;
 } 

function get_scroll_height()
 { var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
   return h ? h : 0;
 }   
 
function find_pos(obj)
 { var curleft = curtop = 0;
   if (obj.offsetParent)
    { do
	     { curleft += obj.offsetLeft;
		      curtop += obj.offsetTop;
	     }
	    while (obj = obj.offsetParent); // No, this is not a syntax error
	   }
   return [curleft, curtop];
 } 
 
Scroller = 
 { speed: 10,
	 	scroll: function(d)
    { i = window.innerHeight || document.documentElement.clientHeight;
		    h = document.body.scrollHeight;
		    a = get_scroll_height();
		    if (d > a)
			    { if (h - d > i)
				      { a += Math.ceil((d - a) / Scroller.speed); }
			      else
				      { a += Math.ceil((d - a - (h - d)) / Scroller.speed); }
       }
		    else
			    { a = a + (d - a) / Scroller.speed; }
		    window.scrollTo(0, a);
	  	  if (a == d || Scroller.offsetTop == a)
       { clearInterval(Scroller.interval); }
	  	  Scroller.offsetTop = a;
	   }
 }
 
function smooth_scroll(id)
 { var pos = find_pos(document.getElementById(id));
   Scroller.speed = 20;
   Scroller.interval = setInterval('Scroller.scroll(' + pos[1] + ')', 10); 
 }
 
function url_encode(string) 
 { if (window.encodeURIComponent) 
    { return encodeURIComponent(string); }
   return escape(string);
 }

function url_decode(string)
 { if (window.decodeURIComponent)
    { return decodeURIComponent(string); }
   return unescape(string);
 }

function compatibility_encode(string)
 { string = string.replace(/\+/g, '__PLUS__');
   string = string.replace(/\//g, '__SLASH__');
   string = string.replace(/\\/g, '__BACKSLASH__');
   string = string.replace(/&/g, '__AMPERSAND__');
   string = string.replace(/</g, '__LEFT_ANGLE_BRACKET__');
   string = string.replace(/>/g, '__RIGHT_ANGLE_BRACKET__');
   return url_encode(string);
 }
 
function load_datepicker()
 { $("#date").datepicker(
    { showOtherMonths: true,
      yearRange: "c:c+1",
      changeYear: true,
      changeMonth: true,
      firstDay: 1,
      dateFormat: "dd/mm/yy"
	   });
 }
 
window.onerror = function() 
 { silent_error_handler(); }
