function d4encodeHtml(s) {
	s = s.replace(/&/ig, "&amp;");
	s = s.replace(/</ig, "&lt;");
	s = s.replace(/>/ig, "&gt;");
	s = s.replace(/\x22/ig, "&quot;");
	return s;
}			
function d4_open_edit_window(url, width, height, name) {
	width = width ? width : 680;
	height = height ? height : 600;
	name = name ? name : '';
	window.open(url, name, 'width=' + width + ',height=' + height + ',status,scrollbars,resizable');
	return false;
}

function d4addEventListener(element, handler, func) {

	if(element.attachEvent) { // MSIE
		element.attachEvent('on'+handler, func);
	} else {
		element.addEventListener(handler, func, false);
	}
}

function d4cancelEvent(event)
{
	if(event.stopPropagation) event.stopPropagation();
	event.cancelBubble = true;
}

function d4preventDefault(event)
{
	if(event.preventDefault) event.preventDefault();
	event.returnValue = false;
}

function d4getElements() {

	var len = arguments.length;
	var func;
	var i;
	
	if(typeof(arguments[arguments.length-1])=='function') {
		func = arguments[arguments.length-1];
		len--;
	}

	var elems = new Array();
	
	for(i=0; i<len; i++) {
		var s = arguments[i];
		var c = document.getElementsByTagName(s.tag);
		
		for(var j=0; j<c.length; j++) {
			var e = c[j];
		
			if(s.className != null && s.className != e.className) {
				continue;
			}
			if(s.idPrefix != null && e.id != null && e.id.indexOf(s.idPrefix)!=0) {
				continue;
			}
			elems.push(e);
		}
	}
	
	if(func) {
		for(i=0; i<elems.length; i++) {
			func(elems[i]);
		}
	}
	
	return elems;
}

function d4showElements(elems) {
	for(var i=0; i<elems.length; i++) {
		if(elems[i].style) {
			elems[i].style.display = '';
		} else {
			alert(elems[i] + "," + elems[i].className + "," + elems[i].tagName);
		}
	}	
}

function d4hideElements(elems) {
	for(var i=0; i<elems.length; i++) {
		if(elems[i].style) {
			elems[i].style.display = 'none';
		} else {
			alert(elems[i] + "," + elems[i].className + "," + elems[i].tagName);
		}
	}	
}

function d4_escape(str) {
  return encodeURIComponent(str);
}

function d4_unescape(str) {
  return(decodeURIComponent(str).replace(/\+/g, ' '));
}

function d4_get_cookie(name) {
  if(document.cookie.match(new RegExp("\\b"+name+"=([^;]+)"))) {
    return(d4_unescape(RegExp.$1));
  }
  return(null);
}

function d4validateLink(field) {
	var l = document.getElementById(field).value;
	if(l && l != '' && !l.match(/^(https?:|ftp:|mailto:|file:|\/)/i)) {
		document.getElementById(field).value = '';
		return false;
	}
	return true;
}

function d4fixLink(l) {
	if(l && l.value!='' && !l.value.match(/^[a-z]+:/) && l.value.indexOf('/')!=0) {
		l.value='http://'+l.value;
	}
}

function d4_set_cookie(name, value) {

  var cookie = name + '=' + d4_escape(value);

  if(arguments.length == 3) {
    var options = arguments[2];
    cookie += ';';
	if(options.expires) {
      if(options.expires=='never') {
	    cookie += 'expires=Tue, 28-Apr-2015 00:00:00 GMT;';
	  } else {
        cookie += 'expires=' + options.expires + ';';
	  }
	}
	if(options.path) {
	  cookie += 'path=' + options.path + ';';
	} else {
	  cookie += 'path=/;';
	}
	if(options.domain) {
	  cookie += 'domain=' + options.domain + ';';
	}
	if(options.secure) {
	  cookie += 'secure=1;'
	}
  } else {
  	cookie += ';path=/;';
  }
  document.cookie = cookie;
}

function d4_unset_cookie(name) {
	var d = new Date();
	d.setTime(d.getTime() - 1);
	d4_set_cookie(name, "x", { expires: d.toGMTString() });
}

function focus_first() {
  var fidx = 0;
  var eidx = 0;
  var found = false;
	
  if(document.all && document.all['tbContentElement']) {
    document.all['tbContentElement'].focus();
	found = true;
  }
	
  for(fidx = 0; fidx < document.forms.length && !found; fidx++) {
    for(eidx = 0; eidx < document.forms[fidx].elements.length && !found; eidx++) {
      switch(document.forms[fidx].elements[eidx].type) {
		case 'text':
		case 'textarea':
		  document.forms[fidx].elements[eidx].focus();
		  found = true;
		  break;
		default:
		  break;
	  }
	}
  }
}
function d4dumphash(hash) {
	var str = "";
	for(var i in hash) {
		str += i + ": " + hash[i] + "\n";
	}
	alert(str);
}
function d4addClass(elem, name) {
	if(typeof elem == "string") {
		elem = document.getElementById(elem);
	}
	if(elem) {
		if(elem.className == '') {
			elem.className = name;
		} else {
			d4removeClass(elem, name);
			elem.className += ' ' + name;
		}
	}
}
function d4removeClass(elem, name) {
	if(typeof elem == "string") {
		elem = document.getElementById(elem);
	}
	if(elem) {
		var old = elem.className;
		var regExp = new RegExp('\\b\\s?'+name+'\\b');
		if (old.indexOf(name) != -1) {
		    elem.className = old.replace(regExp,'');
		}
	}
}
function d4changeClass(elem, from, to) {
	d4addClass(elem, to);
	d4removeClass(elem, from);
}

function d4modQs(mod, oldqs) {
	var newqs = new Object;

	for(var k in oldqs) {
		newqs[k] = oldqs[k];
	}
	for(var k in mod) {
		if(k.indexOf('!')==0) {
			delete(newqs[k]);
		} else if(k.indexOf('+')==0) {
			var K = k.substr(1);
			var l;
			if(newqs[K]) {
				l = newqs[K].split(',');
			} else {
				l = new Array;
			}
			l.push(mod[k]);
			newqs[K] = l.join(',');
		} else if(k.indexOf('-')==0) {
			var K = k.substr(1);
			var l;
			if(newqs[K]) {
				l = newqs[K].split(',');
			} else {
				l = new Array;
			}
			var l2 = new Array();
			for(var i in l) {
				if(mod[k] != l[i]) {
					l2.push(l[i]);
				}
			}
			newqs[K] = l2.join(',');
		} else {
			newqs[k] = mod[k];
		}
	}
	return newqs;
}
function d4hash2qs(hash) {
	var qs = "";

	for(var k in hash) {
		if(hash[k]+"" != "") {
			qs += "&" + encodeURIComponent(k) + "=" + encodeURIComponent(hash[k]);
		}
	}

	if(qs=="") {
		return "";
	}

	return qs.substr(1).replace(/(%\w\w)/g,
		function (str, hex) {
	    	var repl = {
		    	'%24': '$',
				'%7B': '{',
				'%7D': '}'
			};
			return repl[hex] ? repl[hex] : hex;
		}
	);

}

function d4qs2hash(qs) {
	var hash = {};
	
	var pairs = qs.replace(/^\?/, "").split('&');
	for(var i=0; i<pairs.length; i++) {
		var pair = pairs[i].split('=');
		if(pair.length == 1) {
			pair.push('');
		}
		hash[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
	}
	return hash;
}

function d4modUrl(url, qsmod) {
	
	var oldqs;
	if(url.search(/\?(.*)/) != -1) {
		oldqs = d4qs2hash(RegExp.$1);
		url = url.replace(/\?.*/, "");
	}
	var newqs = d4hash2qs(d4modQs(qsmod, oldqs));
	
	if(newqs.length) {
		url += '?' + newqs;
	}
	
	return url;
}

function d4clearTabCookie() {
	if(typeof d4gCookieName != "undefined" && d4gCookieName) { d4_set_cookie(d4gCookieName, '') };
}

//////// d4 text resizer [Javascript Magnifier 0.97, obiewebsite.sourceforge.net]
d4trMeasureUnit = "px"
d4trMinSize = 1;
d4trMinStyleSize = 10;
d4trMaxSize = 6;
d4trMaxStyleSize = 30;
d4trStartSize = 1;
d4trStartStyleSize = 10;
d4trStepSize = 1;
d4trStepStyleSize = 2;
d4trAllowInputResize = false;

function d4trSearchTags(childTree, level) {
  var retArray = new Array();
  var tmpArray = new Array();
  var j = 0;
  var childName = "";
  for (var i=0; i<childTree.length; i++) {
    childName = childTree[i].nodeName;
    if (childTree[i].hasChildNodes()) {
      if ((childTree[i].childNodes.length == 1) && (childTree[i].childNodes[0].nodeName == "#text"))
        retArray[j++] = childTree[i];
      else {
        tmpArray = d4trSearchTags(childTree[i].childNodes, level+1);
        for (var k=0;k<tmpArray.length; k++)
          retArray[j++] = tmpArray[k];
        retArray[j++] = childTree[i];
      }
    }
    else
      retArray[j++] = childTree[i];
  }
  return(retArray);
}

function d4trChangeFontSize(d4trStepSize, d4trStepStyleSize, useCookie) {
  if (useCookie && !d4_get_cookie("incrSize")) { return }
  if (document.body) {
    var myObj = d4trSearchTags(document.body.childNodes, 0);
    var myCookieSize = parseInt(d4_get_cookie("incrSize"));
    var myCookieStyleSize = parseInt(d4_get_cookie("incrStyleSize"));
    var myStepSize = d4trStepSize;
    var myStepStyleSize = d4trStepStyleSize;

    if (isNaN(myCookieSize)) myCookieSize = 0;
    if (isNaN(myCookieStyleSize)) myCookieStyleSize = 0;

    if (useCookie) {
      myStepSize = myCookieSize;
      myStepStyleSize = myCookieStyleSize;
    }
    myObjNumChilds = myObj.length;
    for (i=0; i<myObjNumChilds; i++) {
      myObjName = myObj[i].nodeName;

      if (myObjName != "#text" && myObjName != "HTML" &&
          myObjName != "HEAD" && myObjName != "TITLE" &&
          myObjName != "STYLE" && myObjName != "SCRIPT" &&
          myObjName != "BR" && myObjName != "TBODY" &&
          myObjName != "EMBED" && myObjName != "OBJECT" &&
          myObjName != "PARAM" &&
          myObjName != "#comment" && myObjName != "FORM") {

        if (!d4trAllowInputResize && myObjName == "INPUT") continue;

        size = parseInt(myObj[i].getAttribute("size"));

        if (myObj[i].currentStyle)
          styleSize = parseInt(myObj[i].currentStyle.fontSize);
        else {
		  try {
          styleSize = parseInt(window.getComputedStyle(myObj[i], null).fontSize);
		  } catch(e) {
		    //alert(myObjName);
		  }
		}
        if (isNaN(size) || (size < d4trMinSize) || (size > d4trMaxSize))
          size = d4trStartSize;

        if (isNaN(styleSize) || (styleSize < d4trMinStyleSize) || (styleSize > d4trMaxStyleSize))
          styleSize = d4trStartStyleSize;

        if ( ((size > d4trMinSize) && (size < d4trMaxSize)) || 
             ((size == d4trMinSize) && (d4trStepSize > 0)) || 
             ((size == d4trMaxSize) && (d4trStepSize < 0)) || useCookie) {
          myObj[i].setAttribute("size", size+myStepSize);
        }

        if ( ((styleSize > d4trMinStyleSize) && (styleSize < d4trMaxStyleSize)) || 
             ((styleSize == d4trMinStyleSize) && (d4trStepStyleSize > 0)) ||
             ((styleSize == d4trMaxStyleSize) && (d4trStepStyleSize < 0)) || useCookie) {
          newStyleSize = styleSize+myStepStyleSize;
          myObj[i].style.fontSize = newStyleSize+d4trMeasureUnit;
        }
      }
    }
	
    if (!useCookie) {
      cookieIsSet = d4_set_cookie("incrSize", myStepSize+myCookieSize);
      cookieIsSet = d4_set_cookie("incrStyleSize", myStepStyleSize+myCookieStyleSize);
    }
  }
}

function d4trIncreaseFontSize() {
  if (document.body) {
    d4trChangeFontSize(d4trStepSize, d4trStepStyleSize, false);
  }
}

function d4trDecreaseFontSize() {
  if (document.body) {
    myStepSize = -d4trStepSize;
    myStepStyleSize = -d4trStepStyleSize;
    d4trChangeFontSize(myStepSize, myStepStyleSize, false);
  }
}

function d4validateEmail(form_value, multiple_seperator) {
	/* Jos erottimena rivinvaihto, kutsu minua
	   d4validateEmail(document.getElementById('emails').value, '\n'); */
	
	var addresses = new Array();
	var ok = true;
	
	if (multiple_seperator) {
		if (/\n/.test(multiple_seperator)) {
			addresses = form_value.split(/\n/);
		} else {
			addresses = form_value.split(multiple_seperator);
		}
	} else {
		addresses.push(form_value);
	}
	   
	for (i=0 ; i<addresses.length ; i++) {
		if (/\n/.test(multiple_seperator) && /[\r\n]$/.test(addresses[i])) {
			addresses[i] = addresses[i].slice(0, -1);
		}
		if (addresses[i].length == 0) {
			continue;
		} else if ( 
		  	/^[a-z0-9_][a-z0-9_\.\-\&\+]*\@[a-z0-9_][a-z0-9_\-\.]+[a-z][a-z]$/i.test(addresses[i]) &&
		 	/\@.*\./.test(addresses[i]) &&
	   		/\.[a-z]{2,7}$/i.test(addresses[i]) &&
		 	!/\.\./.test(addresses[i])
			)
		{
		   	continue;
	    } else {
		   	ok = false;
			break;
		}
   	}
	return ok;
}
												
function d4toggleDisplay() {
	var ids = d4toggleDisplay.arguments;
	for(i=0; i<ids.length; i++) {
		e = document.getElementById(ids[i]);
		if(e) {
			if(e.style.display == 'none') {
				e.style.display = '';
			} else {
				e.style.display = 'none';
			}
		}
	}
}

// apufunktio elementtien lisailyyn (vaatii jqueryn)
function d4elem(tag) {
	var e=(tag==='' ? document.createDocumentFragment() : document.createElement(tag));

	var i=1;
	if(typeof(arguments[1]) == 'object' && !arguments[1].nodeName && !(arguments[1] instanceof Array)) {
		$.each(arguments[1], function(k, v) {
			if(k=='_html') {
				$(e).html(v);
			} else if(typeof(v)=='function') {
				$(e).bind(k, v);
			} else {
				$(e).attr(k, v);
			}
		});
		i++;
	}
	
	function _add(item) {
		if(typeof(item) == 'string') {
			e.appendChild(document.createTextNode(item));
		} else if(typeof(item) == 'object') {
			if(item.nodeName) {
				e.appendChild(item);
			} else {
				for(var j=0;j<item.length;j++) {
					_add(item[j]);
				}
			}
		}
		// else: skipataan nullit
	}
	
	for(;i<arguments.length;i++) {
		_add(arguments[i]);
	}
	return e;
}
	

/* productinfo */
function productinfoToggle() {
	var productinfo = document.getElementById('productinfo');
    if(productinfo.style.display == 'none') {
		productinfo.style.display = '';
    } else {
        productinfo.style.display = 'none';
	    d4_set_cookie('productinfo_closed_by_user', 1);
    }
}

function productinfoClose(date) {
    var productinfoUpdate = document.getElementById('productinfoUpdate');
    if (date) {
        d4ajaxGet('/@User/Prinfo_update?DATE=' + date, function(resp) { productinfoUpdate.innerHTML = resp;});
	} else {
	    d4_set_cookie('productinfo_closed_by_user', 1);
    }
    document.getElementById('productinfo').style.display = 'none';
	if (productinfoTimer) {
		clearTimeout(productinfoTimer);
	}
}

