// ChildNode Control (c) alfadesign - alfadesign.dk
/*--------------------findElement----------------------------------*/

var $userAgent = navigator.userAgent.toLowerCase();
// Figure out what browser is being used
var $browser = {
	version: ($userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( $userAgent ),
	opera: /opera/.test( $userAgent ),
	msie: /msie/.test( $userAgent ) && !/opera/.test( $userAgent ),
	mozilla: /mozilla/.test( $userAgent ) && !/(compatible|webkit)/.test( $userAgent )
};

/* ja*/
function getRangeObject(frame) {
	if (frame.contentWindow.getSelection){
		selectionObject=frame.contentWindow.getSelection();
		if (selectionObject.getRangeAt) return selectionObject.getRangeAt(0);
		else { // Safari!
			var range = document.createRange();
			range.setStart(selectionObject.anchorNode,selectionObject.anchorOffset);
			range.setEnd(selectionObject.focusNode,selectionObject.focusOffset);
			return range;
		}
	}else if (frame.contentWindow.document.selection)return frame.contentWindow.document.selection.createRange().text;
}

var $tag = function(e,p){if(!p)p=document; return p.getElementsByTagName(e);}
var $id  = function(e){ return (e=='body'||e=='head')?$tag(e)[0]:document.getElementById(e);}
var $css= function(){
	var e=[];
	for (q=0;q<arguments.length;q++){
		var a=arguments[q].split(" "), p=[document];
		for (i=0;i<a.length;i++){
			var c='',t='*',id='',parent=p, p=[];
			var class_search=a[i].split('.');
			if(class_search.length>1){
				c=class_search[1];
				a[i]=class_search[0];
			}
			var id_search=a[i].split('#');
			id=(id_search[1])?id_search[1]:id;
			t=(id_search[0])?id_search[0]:t;
			for (x=0;x<parent.length;x++){
				var all=parent[x].getElementsByTagName(t);
				for(w=0;w<all.length;w++){
					if((id==all[w].id || id=='') && (t==all[w].tagName.toLowerCase() || t=='*') && (c==all[w].className || c==''))p.push(all[w]);
				};
			};
		};
		for (i = 0; i < p.length; i++) {
			e.push(p[i]);
		}
	};
	return e;
}


var $class = function (className,parent,tag){ //getElementsByClassName
	var classElements = [];
	if(!parent)parent=document;
	if(!tag)tag='*';
	var els = parent.getElementsByTagName(tag);
	for (i=0;i<els.length;i++){	if(els[i].className==className)classElements.push(els[i]); }
	return classElements;
}
var $array = function(){
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		elm=arguments[i];
		if (typeof elm == 'string'){
			if($id(elm)!=null){elements.push( $id(elm) );}
			else if (elm=='body' || elm=='head'){elements.push( tag(elm)[0] );}
			else if($tag(elm)!=null){for(it=0;it<$tag(elm).length;it++){elements.push( $tag(elm)[it] )};}
			else if($class(elm)!=null){for(ic=0;ic<$class(elm).length;ic++){elements.push( $class(elm)[ic] )};}
		}else{ elements.push(elm);}
	}
	if(elements.length>0)return elements;
	else return null;
}
var $ = function(){ 
	txt="";
	for (i=0;i<arguments.length;i++){ txt+="'"+arguments[i]+"'"; if(i<arguments.length-1)txt+=",";	}
	elm = eval("$array("+txt+")");
	if(elm){
		if (elm.length==1)return elm[0];
		else return elm;
	}else return null;
}
var $childsOf = function(p){
	var Elm=$array(p), ElmChilds=new Array();
	for(var i=0;i<Elm.length;i++){
		for(var j=0;j<Elm[i].childNodes.length;j++){
			if(Elm[i].childNodes[j].nodeType==1)ElmChilds.push(Elm[i].childNodes[j]);
		}
	}
	return ElmChilds;
}
/*--------------------childControl---------------------------------*/
var $n = function(id,parent,insertPlace,type){
	if($id(id))return $id(id);
	else return $insert(type,parent,insertPlace,id)
}
var $insert = $new =function(type,parent,insertPlace,id,className){
		if(!parent)parent=$('body');
		if(!type)type='div';
		var e=document.createElement(type);
		if(id)e.id=id;
		if(className)e.className=className;
		return $m(e,parent,insertPlace);	
}
var $removeElement = $remove = $destroy = $delete = $r = function removeElement(e){
	if(e)e.parentNode.removeChild(e); 
}

var $cloneElement = $clone = function(e,rElm,insertPlace){
	if(!rElm)rElm=$('body');
	return $m(e.cloneNode(true),rElm,insertPlace);
}
var $moveElement = $move = $m = function(e,rElm,moveToPlace){
	if(rElm){
		if(!moveToPlace)moveToPlace=1;
		if(moveToPlace==2 || moveToPlace=='first'){
			if(rElm.firstChild)rElm.insertBefore(e,rElm.firstChild);
			rElm.appendChild(e);
		}
		if(moveToPlace==3 || moveToPlace=='after'){
			if($next(rElm))rElm.parentNode.insertBefore(e,$next(rElm));
			else rElm.parentNode.appendChild(e);	
		}
		if(moveToPlace==4 || moveToPlace=='before'){
			rElm.parentNode.insertBefore(e,rElm);
		}
		if(moveToPlace==1 || moveToPlace=='last'){
			rElm.appendChild(e);
		}
		return e;
	}else return false;
}
var $replaceElement = $replace = function(oE,e){
	if(oE.nodeType==e.nodeType)$parent(oE).replaceChild(oE,e);
}
var $changeType = $ctype = function(e,type){
	n=$new(type,e,'after');
	n.innerHTML=e.innerHTML;
	if(e.onclick)n.onclick=e.onclick;
	if(e.onmouseover)n.onmouseover=e.onmouseover;
	if(e.onmouseout)n.onmouseout=e.onmouseout;
	if(e.onmousedown)n.onmousedown=e.onmousedown;
	if(e.onmouseover)n.onmouseover=e.onmouseover;
	if(e.id)n.id=e.id;
	if(e.className)n.className=e.className;
	if(e.href)n.href=e.href;
	if(e.rel)n.rel=e.rel;

	
	$delete(e);
	return n;
}
var $nextElement = $next = function(e){
	while(e){
		if(e.nextSibling)e=e.nextSibling;
		else return false;
		if(e.nodeType==1)return e;
	}
}
var $previousElement = $previous = $prev = function(e){
	while(e){
		if(e.previousSibling)e=e.previousSibling;
		else return false;
		if(e.nodeType==1)return e;
	}
}
var $firstChild = function(parent){
	if(parent.firstChild)var e=parent.firstChild;
	else return false;
	if(e.nodeType==1)return e;
	else return $next(e);
}
var $lastChild = function(parent){
	if(parent.firstChild)var e=parent.firstChild;
	else return false;
	while(e){
		if($next(e))e=$next(e);
		else return e;
	}
	return false;
}
var $parent = function(e){ return e.parentNode; }

/*--------------------elementFunction----------------------------------*/
var toggle = function(e){
	return (getStyle(e,'display')!='none')? hide(e) : show(e);
}
var toggleEval = function(e,evalshow,evalhide){
	if(getStyle(e,'display')!='none'){
		hide(e);
		eval(evalhide);
	}else{
		show(e);
		eval(evalshow);
	}
	return e;
}
var hide = function(e){ e.style.display='none'; return e; }
var show = function(e){ e.style.display='block'; return e; }

var fadein = function(el,millisec,func) { 
	if(!millisec)millisec=500;
	if(el){
		animate(millisec,{e:el,f:func},function(p,o){
			setOpacity(o.e,p);
			show(o.e);
			if(p==1 && o.f)o.f();
		});
	}
} 
var fadeout = function(el) { 
	for(var i=0;i<arguments.length;i++){
		if(typeof arguments[i] == 'object')var el=arguments[i];
		else if(typeof arguments[i] == 'number')var millisec=arguments[i];		
		else if(typeof arguments[i] == 'boolean')var donthide=arguments[i];
		else if(typeof arguments[i] == 'function')var func=arguments[i];
	}
	if(!millisec)millisec=500;
	if(el){
		animate(millisec,{e:el,f:func,h:donthide},function(p,o){
			setOpacity(o.e,1-p);
			show(o.e);
			if(p==1){
				if(!o.h)hide(o.e);
				if(o.f)o.f();
			};
		});
	}
} 
var __animates = Array();
var __animate_timer=null;
var __animate_count=0;
var __animate = function(id,millisec,parm,func){
	this.id=id; this.millisec=millisec; this.parm=parm; this.func=func; this.start=0; return this;
}
var animate = function(millisec,parm,func) {
 	if(millisec && parm && func)__animates[__animates.length] = new __animate(__animates.length,millisec,parm,func);
	__animate_run();
}
var __animate_run = function(){
	if(__animate_timer)clearTimeout(__animate_timer);
	__animate_count++;
	var A=__animates;
	for(var i=0;i<A.length;i++){
		if(A[i].start==0)A[i].start=__animate_count;
		var p =(__animate_count-A[i].start)/(A[i].millisec/20);
		if(p>1 && (__animate_count-1-A[i].start)/(A[i].millisec/20)<1)p=1;
		if(p<=1){
 			if(A[i].func)A[i].func(p,A[i].parm);
		}
	}
	__animate_timer=setTimeout(__animate_run,20);	
}




var setOpacity = setO = function(e,v) {
	e.style.opacity = v;	
	e.style.filter = 'alpha(opacity=' + v*100 + ')';
	return e;
}

var moveTo=function(e,x,y){
	if(getStyle(e,"position")!="absolute" && getStyle(e,"position")!="relative")e.style.position="absolute";
	e.style.left=x+"px";
	e.style.top=y+"px";
	return e;
}
var resizeTo=function(e,w,h,e2){
	e.style.width=w+"px";
	if(!e2)e2=e;
	e2.style.height=h+"px";	
	return e;
}
function getStyle(el,styleProp){
	if (el.currentStyle)
		var y = el.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
	if(y) return y
	else if(styleProp.indexOf('-')>-1){
		tt=styleProp.split('-');
		t2=tt[0]+tt[1].substr(0,1).toUpperCase()+tt[1].substr(1);
		return getStyle(el,t2);		
	}
}
function setStyle(el,style){
	style=style.split(";");
	for(i=0;i<style.length;i++){
		styleName=style[i].split(":")[0];
		styleValue=style[i].split(":")[1];
		if(!styleName || !styleValue )return false;
		if(styleName.indexOf('-')>-1){
			styleName=styleName.split('-');
			styleName=styleName[0]+styleName[1].substr(0,1).toUpperCase()+styleName[1].substr(1);
		}
		if(styleName=="opacity")setOpacity(el,styleValue);
		else eval("el.style."+styleName+"='"+styleValue+"'");
	}
}
function getCSSRule(ruleName, deleteFlag) {
   ruleName=ruleName.toLowerCase(); 
   if (document.styleSheets) {      
      for (var i=0; i<document.styleSheets.length; i++) { 
         var styleSheet=document.styleSheets[i];
         var ii=0;                              
         var cssRule=false;                      
         do {                                   
            if (styleSheet.cssRules) {          
               cssRule = styleSheet.cssRules[ii];
            } else {                             
               cssRule = styleSheet.rules[ii];    
            }                                    
            if (cssRule)  {                      
               if (cssRule.selectorText.toLowerCase()==ruleName) { 
                  if (deleteFlag=='delete') {    
                     if (styleSheet.cssRules) {  
                        styleSheet.deleteRule(ii);
                     } else {                     
                        styleSheet.removeRule(ii);
                     }                            
                     return true;                 
                  } else {                        
                     return cssRule;              
                  }                               
               }                                  
            }                                     
            ii++;                                 
         } while (cssRule)                        
      }                                           
   }                                              
   return false;                                  
}                                                  

function killCSSRule(ruleName) {     
  return getCSSRule(ruleName,'delete');  
}                                         

function addCSSRule(ruleName) {       
  if (document.styleSheets) {        
    if (!getCSSRule(ruleName)) {    
      if (document.styleSheets[0].addRule) {       
        document.styleSheets[0].addRule(ruleName, null,0);
      } else {                   
        document.styleSheets[0].insertRule(ruleName+' { }', 0);
      }        
    }           
  }              
  return getCSSRule(ruleName);   
} 


function getLeft(e){
	var curLeft = 0;
	if (e.offsetParent) {
		curLeft = e.offsetLeft
		while (e = e.offsetParent){ curLeft += e.offsetLeft }
	}
	return curLeft;
}
function getRight(e){
	var curLeft = 0, w = e.offsetWidth;
	if (e.offsetParent) {
		curLeft = e.offsetLeft
		while (e = e.offsetParent){ curLeft += e.offsetLeft }
	}
	return curLeft+w;
}
function getTop(e){
	var curTop = 0;
	if (e.offsetParent) {
		curTop = e.offsetTop
		while (e = e.offsetParent){ curTop += e.offsetTop }
	}
	return curTop;
}
function getBottom(e){
	var curTop = 0, h = e.offsetHeight;
	if (e.offsetParent) {
		curTop = e.offsetTop
		while (e = e.offsetParent){ curTop += e.offsetTop }
	}
	return curTop+h;
}
function getPos(e){
	return [getLeft(e),getTop(e)];
}
function getHeight(e){return parseFloat(getStyle(e,'height'));}
function getWidth(e){return parseFloat(getStyle(e,'width'));}

function getWinHeight(){
	if(typeof(window.innerHeight)=='number')return window.innerHeight;
	else if(document.documentElement && document.documentElement.clientHeight)return document.documentElement.clientHeight;
	else if(document.body && document.body.clientHeight)return document.body.clientHeight;	
}
function getWinWidth(){
	if(typeof(window.innerWidth)=='number')return window.innerWidth;
	else if(document.documentElement && document.documentElement.clientWidth)return document.documentElement.clientWidth;
	else if(document.body && document.body.clientWidth)return document.body.clientWidth;
}
function getWinScrollY() {
	if(typeof(window.pageYOffset)=='number')return window.pageYOffset;
	else if(document.body && document.body.scrollTop)return document.body.scrollTop;
	else if(document.documentElement && document.documentElement.scrollTop)return document.documentElement.scrollTop;
}
function getWinScrollX() {
	if(typeof(window.pageXOffset) == 'number')return window.pageXOffset;
	else if(document.body && document.body.scrollLeft)return document.body.scrollLeft;
	else if(document.documentElement && document.documentElement.scrollLeft)return document.documentElement.scrollLeft;
}
function getWinH(){ return getWinHeight()+getWinScrollY(); }
function getWinW(){ return getWinWidth()+getWinScrollX(); }


var addEvent = function(e,type,func){ 
	if (e.addEventListener)e.addEventListener(type, func, false); 
	else if (e.attachEvent)e.attachEvent('on'+ type, func); 
	return func;
}
var removeEvent = function(e,type,func){ 
	if (e.removeEventListener)e.removeEventListener(type, func , false); 
	else if (e.detachEvent)e.detachEvent('on' + type, func); 
}
var unFocus = function(e){
	if (document.attachEvent){ 
		window.event.cancelBubble=true; 
		window.event.returnValue=false;
	}else if(e.preventDefault)e.preventDefault();
	
}
var fixTarget = fix = function(e){
	if (!e) var e = window.event;
	var target = (e.target)?e.target:e.srcElement;// Firefox, Netscape, Opera(e.target) or IE(e.srcElement)
	if (target.nodeType == 3)target = target.parentNode;// defeat Safari bug(if nodeType=3(inlinetext))
	return target;
}
/*--------------------------  Ajax functins  ---------------------------*/
function load(e,url,func,ua){
	var load_element=e;
	var load_func=func;
	if($('ajax_loader') && ua==null){
		$('ajax_loader').style.left=(getLeft(e)+5)+"px";
		$('ajax_loader').style.top=(getTop(e)+5)+"px";
	}
	ajax_request(url,function(response){
		if($('ajax_loader'))$('ajax_loader').style.left="-500px";
		load_element.innerHTML=response;
		if(load_func)load_func(response);
	});
	return e;
}


var arequest = ajax_request;
function ajax_request(url,func){
	var ajax_request_func=func;
	var x = window.ActiveXObject ? new ActiveXObject(navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"): new XMLHttpRequest();
	if (x){
		//if(x.readyState != 0)
		x.abort();
		x.onreadystatechange = function(){
			if (x.readyState == 4 && x.status == 200){
				var response = x.responseText;
				var ajaxBeforeActionScript = response.match(/<script class=\"ajaxBeforeAction\">((\n|.)*?)<\/script>/);
				var ajaxAfterActionScript = response.match(/<script class=\"ajaxAfterAction\">((\n|.)*?)<\/script>/);
				response = response.replace(/<script class=\"ajax(Before|After)Action\">((\n|.)*?)<\/script>/,"");
				if(ajaxBeforeActionScript)ajaxBeforeActionScript=ajaxBeforeActionScript[1];
				if(ajaxAfterActionScript)ajaxAfterActionScript=ajaxAfterActionScript[1];
				
				if(ajaxBeforeActionScript)eval(ajaxBeforeActionScript);
				if(ajax_request_func)ajax_request_func(response); // response function
				if(ajaxAfterActionScript)eval(ajaxAfterActionScript);
			}else if(x.readyState == 4)alert("ajax faild!  (readyState="+x.readyState+" status="+x.status+" url="+url+")")
		}
		x.open("GET", url , true);
		x.send(null);
	}
}

function ajax_request_post(url,params,func){
	var ajax_request_post_func=func;
	var x = window.ActiveXObject ? new ActiveXObject(navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"): new XMLHttpRequest();
	if (x){
		x.onreadystatechange = function(){
			if (x.readyState == 4 && x.status == 200){
				if(ajax_request_post_func)ajax_request_post_func(x.responseText);
			}
		}
		x.open("POST", url , true);
		x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		x.setRequestHeader("Content-length", params.length);
		x.setRequestHeader("Connection", "close");
		x.send(params);
	}
}

