function gotoAnchor(anchor_name)
{
	window.location = '#'+anchor_name;	
}

function e(message)
{
	alert(message);	
}

function $e(name) 
{
	return document.getElementById(name);
}

function strpos( haystack, needle, offset)
{  
    var i = (haystack+'').indexOf( needle, offset );   
    return i===-1 ? false : i;  
} 

function getType(obj) 
{ 
    var type = typeof obj;
    return type;
}

function is_number(a_string) 
{
	tc = a_string.charAt(0);
	
	if (tc == "+" || tc == "."  || tc == "0" || tc == "1" || tc == "2" || tc == "3" ||	tc == "4" || tc == "5" || tc == "6" || tc == "7" || tc == "8" || tc == "9") 
	{
		return true;
	} 
	else 
	{
		return false;
	}
}

function checkEmail(address) 
{
	var preg = /([a-z0-9_])+(@)+([a-z0-9\-])+([.])+([a-z])/gi;
	
	if(address.match(preg)) 
	{
		return true;
	} 
	else  
	return false;
}

function isEmpty(field, form, message) 
{
	var object = eval("document."+form+"."+field);
	
	if(object != undefined) 
	{
		if(object.value.length > 0) 
		{
			return false;
		} 
		else 
		{
			alert(message);
			object.focus();
			return true;
		}
	}
}

function isNumField(field, form, message) 
{
	var object = eval("document."+form+"."+field);
	
	if(object != undefined) 
	{
		if(is_number(object.value)) 
		{
			return false;
		} 
		else 
		{
			alert(message);
			object.focus();
			return true;
		}
	}
}

function isEmailField(field, form, message) 
{ 
	var object = eval("document."+form+"."+field);
	
	if(object != undefined) 
	{
		if(checkEmail(object.value)) 
		{
			return false;
		} 
		else 
		{
			alert(message);
			object.focus();
			return true;
		}
	}
}

function writeCookie(name, value, hours)
{
  var expire = "";
  if(hours != null)
  {
	expire = new Date((new Date()).getTime() + hours * 3600000);
	expire = "; expires=" + expire.toGMTString();
  }
  document.cookie = name + "=" + escape(value) + expire;
}

function echeck(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		return false;
	}

	 if (str.indexOf(at,(lat+1))!=-1){
		return false;
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		return false;
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
		return false;
	 }
	
	 if (str.indexOf(" ")!=-1){
		return false;
	 }

	 return true;		
}

function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) 
{
	var x = Math.round(num * Math.pow(10,dec));
	
	if (x >= 0) n1=n2='';
	
	var y = (''+Math.abs(x)).split('');
	var z = y.length - dec;
	y.splice(z, 0, pnt);
	
	while (z > 3) {
		z-=3; 
		y.splice(z,0,thou);
	}
	
	var r = curr1+n1+y.join('')+n2+curr2;
		
	return r;
}

function openWin(adr)
{
	var pathURL = adr;
	clWin = window.open(pathURL,"gallery", "height=460, width=590, top=0, left=0, status=no, toolbar=no, menubar=no, location=no, scrollbars=no, directories=no");
	clWin.focus();
}

function is_number(a_string) 
{
    tc = a_string.charAt(0);
    
    if (tc == "+" || tc == "0" || tc == "1" || tc == "2" || tc == "3" ||	tc == "4" || tc == "5" || tc == "6" || tc == "7" || tc == "8" || tc == "9") 
    {
    	return true;
    } 
    else 
    {
    	return false;
    }
}

function createCookie(name,value,days) 
{
	if (days) 
    {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
    
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
    
	for(var i=0;i < ca.length;i++)
    {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return URLDecode(c.substring(nameEQ.length,c.length));
	}
	return null;
}

function eraseCookie(name) 
{
	createCookie(name,"",-1);
}

function focusAndSelect(field_id)
{
	$e(field_id).focus();
	if($e(field_id).type != 'select-one');return;
	$e(field_id).select();
}

function CreateBookmarkLink(url, title) 
{
	if (window.sidebar) 
	{ // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");
	} 
	else 
	if( window.external ) 
	{ // IE Favorite
		window.external.AddFavorite( url, title); 
	}
	else 
	if(window.opera && window.print) 
	{ // Opera Hotlist
		return true; 
	}
}

function removeElementById(object_id, opac) 
{
		var passed = parseInt(opac);
		var newOpac = parseInt(passed-10);
		if ( newOpac > 0 ) {
			$e(object_id).style.opacity = '.'+newOpac;
			$e(object_id).style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("removeElementById('"+object_id+"', '"+newOpac+"')",20);
		} else { 
			$e(object_id).parentNode.removeChild($e(object_id));
		}
}
	
function print_r(input, _indent)
{
	var indent = (typeof(_indent)=='string')?_indent+'    ':'    ';
	var paren_indent = (typeof(_indent)=='string')?_indent+'  ':'';
	
	if ( typeof(input) == 'string' ) {
		var output = "'"+ input +"'\n"
	} else if ( typeof(input) == 'boolean' ) {
		var output = (input?'true':'false') +"\n"
	} else if ( typeof(input) == 'number' ) {
		var output = (input)+"\n"
	} else if ( typeof(input) == 'object' ) {
		var output = ((input.reverse)?'Array':'Object') +"\n"
		output += paren_indent + "(\n";
	for ( var i in input ) {
		output += indent + "["+ i +"] => "+ print_r(input[i],indent)
	}
		output += paren_indent + ")\n"
	}
	return output
};

function formSubmit(name) {
	var obj = eval("document."+name);
	
	var onsubmit = obj.onsubmit();
    if (onsubmit) {
		obj.submit();	
	}
}

function  is_numeric( mixed_var ) {
    return !isNaN( mixed_var );
};

function count( mixed_var, mode ) {

    var key, cnt = 0;
 
    if( mode == 'COUNT_RECURSIVE' ) mode = 1;
    if( mode != 1 ) mode = 0;
 
    for (key in mixed_var){
        cnt++;
        if( mode==1 && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object) ){
            cnt += count(mixed_var[key], 1);
        }
    }
 
    return cnt;
}

function serialize(_obj) {
   var type =  typeof(_obj);
   if(parseFloat(_obj)) { type = "number"; }
   //alert(type);
   switch(type) {
		case "number":
			if (isNaN(_obj)){
                return false;
            } else{
                return (Math.floor(_obj) == _obj ? "i" : "d") + ":" + _obj + ";";
            }
		break;
		case "string":
				return "s:" + _obj.length + ":\"" + _obj + "\";";
		break;
		case "boolen":
				return "b:" + (_obj ? "1" : "0") + ";";
		break;
		case "object":
			if(_obj == null) { return "N;"; }
			_ser = "a:" + count(_obj) + ":{";
			for(i in _obj) {
				_ser += serialize(i)+serialize(_obj[i]);
			}
			_ser += "}";
			return _ser;
		break;
		case "undefined":
            return "N;";
		break;
   }
};

function inArray(needle, haystack, strict) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
 
    var found = false, key, strict = !!strict;
 
    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }
 
    return found;
}

function setFormKeyUP() {
	
	
	
	elements = document.getElementsByTagName('form');
	for(i=0; i<elements.length; i++) {
		  var inputs = elements[i].getElementsByTagName('input');
		  //form = eval(elements[i]);
		  if(elements[i].className != 'req')
		  {
				continue;  
		  }
		  for(c=0; c<inputs.length; c++ ){
			  	 
				inputs[c].onkeypress = function(event) { 
					var keycode = '';
					if(navigator.appName == 'Netscape')
						keycode = event.keyCode;
					else
						keycode = window.event.keyCode;
				
					
					if (keycode == 13) 
					{	
						
						var input_id = String(this.id);
						
						var form_to_submit = document.getElementById(input_id).form;
						
						if(form_to_submit.onsubmit) 
						{	
							
							ajaxRPC.validate(form_to_submit.name);	
							return false;
						}
						
					}
					
				}
		  }
	}
	
}

//LOAD EVENTS

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

function URLEncode( )
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";
 
	var plaintext = document.URLForm.F1.value;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for
 
	document.URLForm.F2.value = encoded;
  document.URLForm.F2.select();
	return false;
};
 
function URLDecode(value)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = value;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				return null;
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
  return plaintext;
};


function urlencode_string( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                                    
    var histogram = {}, histogram_r = {}, code = 0, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    
    return ret;
}

function Set_Cookie( name, value, expires, path, domain, secure )
{
	var today = new Date();
	today.setTime( today.getTime() );

	if ( expires )
	{
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}
