////////////////////////////////////////////////////////////////////////////////
///                          DSUtils  (DSUtils.js)                           ///
///                          Version: 1.0.6 (PHP5)                           ///
///                               30.06.2009                                 ///
///                Copyright © 2007-2009 by Daniel Seichter                  ///                         
///                                                                          ///
///--------------------------------------------------------------------------///
///                                                                          ///
/// -> License/Lizenz <-                                                     ///
///                                                                          ///
/// You can modify and use this script in your own homepages/scripts for     ///
/// free, but if you use it or only parts of it, you have to add the name    ///
/// and the author of the following script in your homepages/scripts.        ///
///                                                                          ///
/// Sie dürfen dieses Script nach belieben modifizieren und benutzten,       ///
/// unter der Bedienung, dass eine Erwähnung des Scriptes inkl. Autor        ///
/// innerhalb des Programms erfolgt, wenn das Script in irgendeiner          ///
/// Art und Weise benutzt wird.                                              ///
///                                                                          ///
///--------------------------------------------------------------------------///
///                                                                          ///
/// -> ChangeLog <-                                                          ///
///                                                                          ///
///  15.03.2008: First Release (Version 1.0.0)                               ///
///  30.06.2009: Add ajax-functions                                          ///
///  29.07.2009: Fix in "get_pagesize", "get_clientwindowsize"               ///
///  29.07.2009: Add function "is_defined"                                   ///
///  30.07.2009: Add function "get_element_style"                            ///
///  30.07.2009: Add function "set_element_style"                            ///
///  30.07.2009: Fix in "get_pagesize", "get_clientwindowsize"               ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////


/*******************************************************************************
* Ajax_Init
* @access public
* @return XMLHttpRequest req
*/
  function ajax_init() {
      var req;
      
      try {
        req = new XMLHttpRequest();
      }
      catch (e) {
        try {
          req = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
          try {
            req = new ActiveXObject("Microsoft.XMLHTTP");
          } 
          catch (failed){
            req = null;
          }
        }  
      }
      if (req == null) {
        alert("Ihr Webbrowser unterstuetzt leider kein Ajax!");
        return false;
      }  
      else {  
        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        return req;
      }
  }

/*******************************************************************************
* Is_defined
* @access public
* @return true or false
*/  
  function is_defined(param) {
	  return (typeof(param)!="undefined");
  };  

/*******************************************************************************
* Get_body_element
* @access public
* @return pointer
*/   
  function get_body_element() {
	  if (document.body) 
		return document.body;
	  if (document.getElementsByTagName) {
		var bodylist = document.getElementsByTagName("BODY");
		if ((bodylist!=null) && (bodylist.length > 0))
		  return bodies[0];
	  }
	  return null;
  };  

/*******************************************************************************
* Get_element_style (all browsers)
* @access public
* @param pointer el  pointer to the element
* @param string cssproperty css formated property 
* @return true or false
*/    
  function get_element_style(el, cssproperty) {
      if ((el != null) && (cssproperty != null)) {
       //convert property like margin-top to marginTop 
	    var con_property = null;
        if (cssproperty.indexOf("-") > -1) {
	      var str = "";
	      var cchar = null;
	      var len = cssproperty.length;
	      for (var i=0; i < len; i++) {
	  	    cchar = cssproperty.charAt(i);
		    str += (cchar != "-" ) ? cchar : cssproperty.charAt(++i).toUpperCase();
	      }
          con_property = str; 
        }
        else 
          con_property = cssproperty;
        var val = null;  
        
	   // "float" property
		if (cssproperty == "float") {
		  val = get_element_style(el,"cssFloat");
		  if (val == null)  
			val = get_element_style(el,"styleFloat"); 
		}
        else
          if (el.currentStyle && is_defined(el.currentStyle[con_property]))
			val = el.currentStyle[con_property];
          else
            if (window.getComputedStyle)
              val = window.getComputedStyle(el,null).getPropertyValue(cssproperty);
            else 
              if (el.style && is_defined(el.style[con_property]))
			    val = el.style[con_property];              
        return val;            
      }
      else
        return null;
  }
  
/*******************************************************************************
* Set_element_style (all browsers)
* @access public
* @param pointer el pointer to the element
* @param string cssproperty css formated property 
* @param value value to set
* @return true or false
*/     
  function set_element_style(el, cssproperty, value) {
    if ((el != null) && (is_defined(el.style)) && (is_defined(cssproperty)) && (cssproperty != null) && (is_defined(value)))
     // "float" property 
      if (cssproperty=="float") {
		el.style["cssFloat"] = value;
		el.style["styleFloat"] = value;
	  }
      else 
       // "opacity" property 
        if (cssproperty == "opacity") {
			el.style['-moz-opacity'] = value;
			el.style['-khtml-opacity'] = value;
			el.style.opacity = value;
			if (is_defined(el.style.filter)) 
				el.style.filter = "alpha(opacity=" + value*100 + ")";
	    }
        else {
         //convert property like margin-top to marginTop  
          var con_property = null;
          if (cssproperty.indexOf("-") > -1) {
	        var str = "";
	        var cchar = null;
	        var len = cssproperty.length;
	        for (var i=0; i < len; i++) {
	  	      cchar = cssproperty.charAt(i);
		      str += (cchar != "-" ) ? cchar : cssproperty.charAt(++i).toUpperCase();
	        }
            con_property = str; 
          }
          else 
            con_property = cssproperty;
          
          el.style[con_property] = value; 
          return true;
        }
    else
      return false;    
}        


/*******************************************************************************
* Get_pagesize (get pagesize (all browsers))
* @access public
* @return array(width,height)
*/
  function get_pagesize() {
     //get dimensions
      var height = (is_defined(document.height)) ? document.height : document.body.offsetHeight; 
      var width = (is_defined(document.width)) ? document.width : document.body.offsetWidth;
     //add margins
      var bodyobj = get_body_element();
      height += (parseInt(get_element_style(bodyobj,"margin-top")) + parseInt(get_element_style(bodyobj,"margin-bottom")));
      width += (parseInt(get_element_style(bodyobj,"margin-right")) + parseInt(get_element_style(bodyobj,"margin-left")));
     //return 
      PageSize = new Array(width,height); 
      return PageSize;   
    }
  
    
/*******************************************************************************
* Get_clientwindowsize (get clientwindowsize of the browser (all browsers))
* @access public
* @return array(width,height)
*/
  function get_clientwindowsize() {
      var c_width = (is_defined(document.layers)) ? window.innerWidth : ((document.compatMode=='CSS1Compat') && (!window.opera)) ? document.documentElement.clientWidth : document.body.clientWidth;
      var c_height = (is_defined(document.layers)) ? window.innerHeight : ((document.compatMode=='CSS1Compat') && (!window.opera)) ? document.documentElement.clientHeight : document.body.clientHeight;
      ClientWindowSize = new Array(c_width,c_height); 
      return ClientWindowSize;
  }


/*******************************************************************************
* Get_page_scrollpos (get the current srcollpos (all browsers))
* @access public
* @return array(scrollleft,scrollheight)
*/
  function get_page_scrollpos() {
      var ScrollTop = 0;
      var ScrollLeft = 0;
      if (self.pageYOffset || self.pageXOffset) {
        ScrollTop = self.pageYOffset;
        ScrollLeft = self.pageXOffset;
      } 
      else 
       if (document.documentElement && document.documentElement.scrollTop || document.documentElement.scrollLeft ) {   
         ScrollTop = document.documentElement.scrollTop;
         ScrollLeft = document.documentElement.scrollLeft;
       } 
       else 
         if (document.body) {
           ScrollTop = document.body.scrollTop;
           ScrollLeft = document.body.scrollLeft;
         }
      PageScrollPos = new Array(ScrollLeft,ScrollTop); 
      return PageScrollPos;
  }

/*******************************************************************************
* Fade_to_opacity (fade in/out (all browsers))
* @access public
* @param string id name of the element
* @param integer opacstart start opacity
* @param integer opacend finish opacity
* @param integer millisec duration of the fade effect
*/
  function fade_to_opacity(id, opacStart, opacEnd, millisec) { 
      var speed = Math.round(millisec / 100); 
      var timer = 0; 
      if (opacStart > opacEnd) { 
        for (i = opacStart; i >= opacEnd; i--) { 
          window.setTimeout("change_opacity(" + i + ",'" + id + "')",(timer * speed)); 
          timer++; 
        } 
      } 
      else
        if (opacStart < opacEnd) { 
          for( i = opacStart; i <= opacEnd; i++) { 
            window.setTimeout("change_opacity(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
          } 
        } 
  } 

/*******************************************************************************
* Change_opacity (set opacity of an element (all browsers))
* @access public
* @param integer opacity new opacity of the element
* @param string id name of the element
*/
  function change_opacity(opacity, id) { 
    var obj = document.getElementById(id); 
    if (obj != null) {    
      obj.style.opacity = (opacity / 100); 
      obj.style.MozOpacity = (opacity / 100); 
      obj.style.KhtmlOpacity = (opacity / 100); 
      obj.style.filter = "alpha(opacity=" + opacity + ")"; 
    }  
  } 

/*******************************************************************************
* _confirm 
* @access public
* @param string what desc
* @param string iftrue URL if true
* @param string ifflase URL if false
*/
function _confirm(what,iftrue,iffalse) {
    check = confirm(what);
    if (check == true) 
      location.href = iftrue;
    else
      location.href = iffalse;
}

/*******************************************************************************
* Insert_bbcode
* @access public
* @param string forms name of the form
* @param string field the field toGMTString insert the code
* @param string tag to insert
* @param string endtag to insert
*/
function insert_bbcode(form,field,tag,endtag) { 
    if (document.selection) {// for IE
      var str = document.selection.createRange().text;
      document.forms[form].elements[field].focus();
      var sel = document.selection.createRange();
      sel.text = tag + str + endtag;
      return;
    } 
    else if (is_defined(document.forms[form].elements[field].selectionStart)) { // for Mozilla
      var txtarea = document.forms[form].elements[field];
      var selLength = txtarea.textLength;
      var selStart = txtarea.selectionStart;
      var selEnd = txtarea.selectionEnd;
      var oldScrollTop = txtarea.scrollTop;
      var s1 = (txtarea.value).substring(0,selStart);
      var s2 = (txtarea.value).substring(selStart, selEnd)
      var s3 = (txtarea.value).substring(selEnd, selLength);
    
      txtarea.value = s1 + tag + s2 + endtag + s3;
      txtarea.selectionStart = s1.length;
      txtarea.selectionEnd = s1.length + s2.length + tag.length + endtag.length;  
      txtarea.scrollTop = oldScrollTop;
      txtarea.focus();
      return;
    }
    else {
      document.forms[form].elements[field].value += tag + endtag;
      document.forms[form].elements[field].focus();
    }
}

////////////////////////////////////////////////////////////////////////////////
///                          DSUtils  (DSUtils.js)                           ///
///                Copyright © 2007-2009 by Daniel Seichter                  ///                         
////////////////////////////////////////////////////////////////////////////////

