/**
 * javascript by Miracle 2.0
 * copyright (c) eWorld - 2004-2010
 */




function addEvent(obj, evType, fn, useCapture){
 if (obj.addEventListener){
 obj.addEventListener(evType, fn, useCapture);
 return true;
}else 
 if (obj.attachEvent){
 var r = obj.attachEvent("on"+evType, fn);
 return r;
}else{
 alert("Handler could not be attached");
}
}



var undefined;
var DOTS = "#define x_width 2\n#define x_height 1\nstatic char x_bits[]={0x01}";
var FORBIDDEN="[[-- FORBIDDEN --]";
var miracleConfig=new Array();



addEvent(window, 'load', miracle_init);


String.prototype.reverse = function(){
 var s = "";
 var i = this.length;
 while (i>0){
 s += this.substring(i-1,i);
 i--;
}
 return s;
}

String.prototype.trim = function(){
 return(this.replace(/^\s+/,'').replace(/\s+$/,''));
}

String.prototype.toInt = function(){
 var a = new Array();
 for (var i = 0; i < this.length; i++){
 a[i] = this.charCodeAt(i);
}
 return a;
}


document.getElementsByTagNameAndAttribute = function(tagname, attribute, value){
 if (!value) value="/.+/";
 var elements=new Array();
 var inputs=document.getElementsByTagName(tagname);
 var j=0;
 if (value.substring(0,1)!="/"){
 value=new RegExp("^"+value+"$", "i");
}else{
 value=new RegExp(value.substring(1, value.length-1), "i");
}
 for (var i=0; i<inputs.length; i++){
 var attr=inputs[i].getAttribute(attribute);
 if (!attr) continue; // ha nincs ilyen attributum akkor megyunk tovabb
 var sattr=new String(attr);
 if (sattr.match(value)){
 elements[j]=inputs[i];
 j++;
}
}
 return elements;
}

if (typeof(HTMLElement)!="undefined"){
HTMLElement.prototype.getElementsByTagNameAndAttribute = function(tagname, attribute, value){
 if (!value) value="/.+/";
 var elements=new Array();
 var inputs=this.getElementsByTagName(tagname);
 var j=0;
 if (value.substring(0,1)!="/"){
 value=new RegExp("^"+value+"$", "i");
}else{
 value=new RegExp(value.substring(1, value.length-1), "i");
}
 for (var i=0; i<inputs.length; i++){
 var attr=inputs[i].getAttribute(attribute);
 if (!attr) continue; // ha nincs ilyen attributum akkor megyunk tovabb
 var sattr=new String(attr);
 if (sattr.match(value)){
 elements[j]=inputs[i];
 j++;
}
}
 return elements;
}
}








String.prototype.matchAll = function (re){
 var res = [];
 
 this.replace(re, function(){
 for(var i = 0; i < arguments.length - 2; i++)
 (res[i] || (res[i] = [])).push(arguments[i]);
});
 
 return res;
}

if (typeof(Node)!="undefined"){
Node.prototype.swapSiblings = function(node){
 if (this.parentNode!=node.parentNode) return;
 var parent=this.parentNode;
 if (this.sourceIndex()<node.sourceIndex()){// a node lejjebb van
 parent.insertBefore(node, this); // mozgasd be a 'node'-ot 'ez' ele
}else{// feljebb van amivel cserelnunk kell
 parent.insertBefore(this, node); // mozgasd be 'ezt' a node
}
}
}

if (typeof(Node)!="undefined"){
Node.prototype.sourceIndex = function(){
 var elements=document.getElementsByTagName("*");
 for (var i=0; i<elements.length; i++){
 if (this==elements[i]) return i;
}
 return false;
}
}
function isAlien(a){
 return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a){
 return isObject(a) && a.constructor == Array;
}

function isBoolean(a){
 return typeof a == 'boolean';
}

function isEmpty(o){
 var i, v;
 if (isObject(o)){
 for (i in o){
 v = o[i];
 if (isUndefined(v) && isFunction(v)){
 return false;
}
}
}
 return true;
}

function isFunction(a){
 return typeof a == 'function';
}

function isNull(a){
 return typeof a == 'object' && !a;
}

function isNumber(a){
 return typeof a == 'number' && isFinite(a);
}

function isObject(a){
 return (a && typeof a == 'object') || isFunction(a);
}

function isString(a){
 return typeof a == 'string';
}

function isUndefined(a){
 return typeof a == 'undefined';
}

function arrayValues(array){
 var tmp=new Array();
 var j=0;
 for (var i in array){
 tmp[j]=array[i];
 j=j+1;
}
 return tmp;
}

function arrayAlert(array){
 var tmp="";
 for (var i in array){
 tmp=tmp+"["+i+"] - "+array[i],"\n\r";
}
 alert(tmp);
}

function show_data(contentlayer, displaylayer){
 var c = document.getElementById(contentlayer);
 var d = document.getElementById(displaylayer);

 d.innerHTML=c.innerHTML;
}

function showOrders(i){
 var d = document.getElementById("orderdata_"+i);
 d.style.display='block';
 var h = document.getElementById("link_"+i);
 h.href='javascript: hideOrders('+i+')';
 var h = document.getElementById("link1_"+i);
 h.href='javascript: hideOrders('+i+')';
 var s = document.getElementById("img_"+i);
 s.src='/images/arrow2.gif';
}

function hideOrders(i){
 var d = document.getElementById("orderdata_"+i);
 d.style.display='none'; 
 var h = document.getElementById("link_"+i);
 h.href='javascript: showOrders('+i+')';
 var h = document.getElementById("link1_"+i);
 h.href='javascript: showOrders('+i+')';
 var s = document.getElementById("img_"+i);
 s.src='/images/arrow.gif';
}

function showIt(e,x){
 var a = document.getElementById(x);
 a.style.visibility = 'visible';
 moveIt(e,x);
}

function hideIt(e,x){
 var a = document.getElementById(x);
 a.style.visibility = 'hidden';
 moveIt(e,x);
}
 
function moveIt(e,x){
 var a = document.getElementById(x);
 
 var posx = 0;
 var posy = 0;
 if (!e) var e = window.event;
 if (e.pageX || e.pageY){
 posx = e.pageX;
 posy = e.pageY;
}
 else if (e.clientX || e.clientY){
 posx = e.clientX + document.body.scrollLeft
 + document.documentElement.scrollLeft;
 posy = e.clientY + document.body.scrollTop
 + document.documentElement.scrollTop;
}

 if (document.body.offsetWidth){
 w=document.body.offsetWidth;
}
 else{
 w=window.innerWidth;
}

 if (w>960){
 offset=(w-960)/2; 
}
 
 posx -= offset;

 posx = posx+5;
 posy = posy+5;
 a.style.left = posx+'px';
 a.style.top = posy+'px';
}

function DOM_InsertAfter(afterNode, thisNode){
 var parent=afterNode.parentNode;
 if (parent.lastChild==afterNode){
 return parent.appendChild(thisNode);
}else{
 return parent.insertBefore(thisNode, afterNode.nextSibling);
}
}// Browser Detect v2.1.6





function BrowserDetect(){
 var ua = navigator.userAgent.toLowerCase(); 

 this.isGecko = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
 this.isAppleWebKit = (ua.indexOf('applewebkit') != -1);

 this.isKonqueror = (ua.indexOf('konqueror') != -1); 
 this.isSafari = (ua.indexOf('safari') != - 1);
 this.isOmniweb = (ua.indexOf('omniweb') != - 1);
 this.isOpera = (ua.indexOf('opera') != -1); 
 this.isIcab = (ua.indexOf('icab') != -1); 
 this.isAol = (ua.indexOf('aol') != -1); 
 this.isIE = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) ); 
 this.isMozilla = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
 this.isFirebird = (ua.indexOf('firebird/') != -1);
 this.isFirefox = (ua.indexOf('firefox/') != -1);
 this.isNS = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && !this.isOpera && !this.isSafari && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );

 this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
 this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);

 this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
 this.equivalentMozilla = ( (this.isGecko) ? parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) ) : -1 );
 this.appleWebKitVersion = ( (this.isAppleWebKit) ? parseFloat( ua.substring( ua.indexOf('applewebkit/') + 12) ) : -1 );

 this.versionMinor = parseFloat(navigator.appVersion); 

 if (this.isGecko && !this.isMozilla){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('/', ua.indexOf('gecko/') + 6) + 1 ) );
}
 else if (this.isMozilla){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
}
 else if (this.isIE && this.versionMinor >= 4){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
}
 else if (this.isKonqueror){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
}
 else if (this.isSafari){
 this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
}
 else if (this.isOmniweb){
 this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('omniweb/') + 8 ) );
}
 else if (this.isOpera){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera') + 6 ) );
}
 else if (this.isIcab){
 this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab') + 5 ) );
}
 
 this.versionMajor = parseInt(this.versionMinor); 

 this.isDOM1 = (document.getElementById);
 this.isDOM2Event = (document.addEventListener && document.removeEventListener);

 this.mode = document.compatMode ? document.compatMode : 'BackCompat';

 this.isWin = (ua.indexOf('win') != -1);
 this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
 this.isMac = (ua.indexOf('mac') != -1);
 this.isUnix = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1);
 this.isLinux = (ua.indexOf('linux') != -1);

 this.isNS4x = (this.isNS && this.versionMajor == 4);
 this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
 this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
 this.isNS4up = (this.isNS && this.versionMinor >= 4);
 this.isNS6x = (this.isNS && this.versionMajor == 6);
 this.isNS6up = (this.isNS && this.versionMajor >= 6);
 this.isNS7x = (this.isNS && this.versionMajor == 7);
 this.isNS7up = (this.isNS && this.versionMajor >= 7);
 
 this.isIE4x = (this.isIE && this.versionMajor == 4);
 this.isIE4up = (this.isIE && this.versionMajor >= 4);
 this.isIE5x = (this.isIE && this.versionMajor == 5);
 this.isIE55 = (this.isIE && this.versionMinor == 5.5);
 this.isIE5up = (this.isIE && this.versionMajor >= 5);
 this.isIE6x = (this.isIE && this.versionMajor == 6);
 this.isIE6up = (this.isIE && this.versionMajor >= 6);
 
 this.isIE4xMac = (this.isIE4x && this.isMac);
}
var browser = new BrowserDetect();


var antispam_pattern_1=/\/KUKAC\//gi;
var antispam_replacement_1="@";
var antispam_pattern_2=/email:\/\//gi;
var antispam_replacement_2="mailto:";




function antispam(){
 if (browser.isGecko){
 addEvent(window,'load',antispam_dom);
}else{
 addEvent(window,'load',antispam_innerhtml);
}
}


function antispam_innerhtml(){
 ihtml=document.body.innerHTML;
 ihtml=ihtml.replace(antispam_pattern_1,antispam_replacement_1);
 ihtml=ihtml.replace(antispam_pattern_2,antispam_replacement_2);
 document.body.innerHTML=ihtml;
}


function antispam_dom(){

 var as=document.getElementsByTagName("a");
 for (i=0; i<as.length; i++){
 var href=as[i].href;
 href=href.replace(antispam_pattern_1,antispam_replacement_1);
 href=href.replace(antispam_pattern_2,antispam_replacement_2);
 as[i].href=href;
}
 traverse(document.body);
}


function traverse(node){

 if ( (node.nodeName=="textarea") ||
 (node.nodeName=="input") 
 ){
 node.value=node.value.replace(antispam_pattern_1,antispam_replacement_1);
}
 if (node.nodeType == 3){
 node.nodeValue=node.nodeValue.replace(antispam_pattern_1,antispam_replacement_1);
}else{
 if (node.childNodes != null){
 for (var i=0; i < node.childNodes.length; i++){
 traverse(node.childNodes.item(i));
}
}
}
}




var stat=new Stat();



function call_stat(){
 var src="/client_stat.png";

 var img=new Image().src=src+"?"
 +"&screen=" +this.screen_size
 +"&javascript=" +'y'
 +"&images=" +(document.images?'y':'n')
 +"&cookies=" +(navigator.cookieEnabled?'y':'n')
 +"&color_depth="+(screen.colorDepth?screen.colorDepth:'NULL')
 ;

 createCookie("client_stat", true);
}


function Stat(){
 this.screen_width=(typeof(screen.width)!="undefined")?screen.width:"NULL";
 this.screen_height=(typeof(screen.height)!="undefined")?screen.height:"NULL";
 this.screen_size=(typeof(screen.height)!="undefined")?this.screen_width+"x"+this.screen_height:"NULL";
 this.call_stat=call_stat;
 if (!readCookie("client_stat")){
 this.call_stat();
}
}



function Popup(activeLink){
 this.activeLink=activeLink;
 this.href=this.activeLink.getAttribute("href");
 this.screenWidth=screen.width;
 this.screenHeight=screen.height;
 this.popupWidth=this.activeLink.getAttribute("popupwidth");
 this.popupHeight=this.activeLink.getAttribute("popupheight");
 this.scroll=this.activeLink.getAttribute("popupscroll");


 var parts=this.href.split(".");
 if ((parts[1]=="jpg") || (parts[1]=="gif") || (parts[1]=="png")){
 this.imageURL=this.href;
 this.createImage();
}

 this.left=(this.screenWidth-this.img.width)/2; 
 this.top=(this.screenHeight-this.img.height)/2-20;

 this.settings="toolbars='no'";
 this.settings+=",width="+this.img.width;
 this.settings+=",height="+this.img.height;
 this.settings+=",left="+this.left;
 this.settings+=",top="+this.top;
 if (this.scroll) this.settings+=",scrollbars=1";

 this.setTitle();
 this.openCenteredWindow();
}

Popup.prototype.setTitle=function(){
 this.title=this.activeLink.firstChild.getAttribute("title");
 if (!this.title){
 this.title="";
}
}



Popup.prototype.createImage=function(){
 this.maxWidth=Math.round(this.screenWidth*0.97);
 this.maxHeight=Math.round(this.screenHeight*0.86);
 this.img=document.createElement("img");
 this.img.src=this.imageURL;
 this.ratio=this.popupWidth/this.popupHeight;
 this.maxRatio=this.maxWidth/this.maxHeight;

 if ( (this.popupWidth>this.maxWidth) || (this.popupHeight>this.maxHeight) ){
 if (this.ratio<this.maxRatio){
 this.img.width=Math.round(this.popupWidth*(this.maxHeight/this.popupHeight));
 this.img.height=this.maxHeight;
 alert("a");
}else{
 this.img.height=Math.round(this.popupHeight*(this.maxWidth/this.popupWidth));
 this.img.width=this.maxWidth;
 alert("b");
}
}else{
 
 this.img.width=this.popupWidth;
 this.img.height=this.popupHeight;
}
}


Popup.prototype.openCenteredWindow=function(){

 this.name=this.imageURL.split("/");
 this.name=this.name[this.name.length-1].replace(".", "_");

 var popup=window.open("", this.name, this.settings);


 var pd=popup.document;




 var innerHTML="<head><title>"+this.title+"</title></head><body style='margin: 0px; padding: 0px;'><img src='"+this.imageURL+"'>";
 pd.open();
 pd.write(innerHTML);
 pd.close();



 popup.focus();
}





function PopupHTML(activeLink){
 if (isArray(activeLink)){
 this.href=activeLink[0];
 this.popupWidth=activeLink[1];
 this.popupHeight=activeLink[2];
 this.scroll=activeLink[3];
}else{
 this.activeLink=activeLink;
 this.href=this.activeLink.getAttribute("href");
 this.popupWidth=this.activeLink.getAttribute("popupwidth");
 this.popupHeight=this.activeLink.getAttribute("popupheight");
 this.scroll=this.activeLink.getAttribute("popupscroll");
}

 this.screenWidth=screen.width;
 this.screenHeight=screen.height;
 this.left=(this.screenWidth-this.popupWidth)/2; 
 this.top=(this.screenHeight-this.popupHeight)/2-20;

 this.settings="toolbars='no'";
 this.settings+=",width="+this.popupWidth;
 this.settings+=",height="+this.popupHeight;
 this.settings+=",left="+this.left;
 this.settings+=",top="+this.top;
 if (this.scroll) this.settings+=",scrollbars=yes";

 this.openCenteredWindow();
}

PopupHTML.prototype.openCenteredWindow=function(){

 this.name=this.href.split("/");
 this.name=this.name[this.name.length-1].replace(".", "_");

 this.mywindow=window.open(this.href, this.name, this.settings);
 this.mywindow.onload=function(){


}
 if (window.focus){this.mywindow.focus();}
 return false;
}


function init_Popups(){
 var links=document.getElementsByTagName("a");
 for (var i=0; i<links.length; i++){
 if (links[i].getAttribute("rel")=="popup"){
 var parts=links[i].getAttribute("href").split(".");
 if (
 (parts[1]=="jpg") || (parts[1]=="gif") || (parts[1]=="png")
 ){
 var onclick_function=function (ev){
 if (!ev) var ev = window.event;


 new Popup(this);

 if (ev.preventDefault){
 ev.preventDefault(); ev.stopPropagation();
}else{
 ev.cancelBubble = true; ev.returnValue = false;
}
 return false;
}
}else{
 var onclick_function=function (ev){
 if (!ev) var ev = window.event;

 new PopupHTML(this);

 if (ev.preventDefault){
 ev.preventDefault(); ev.stopPropagation();
}else{
 ev.cancelBubble = true; ev.returnValue = false;
}
 return false;
}
}
 links[i].onclick=onclick_function;
}
}
}
var openedIDs;

function init_treemenu(divID)
{

 if (!document.getElementsByTagName) return; 

 var wtm_cookie='openedIDs';

 var buttonclass='wtmbutton';

 var imgOpen='/images/plus.png';
 var imgClose='/images/minus.png';
 var imgWidth=9;

 openedIDs=new Array();

 openedIDs=(document.getElementById('wtmactualid'))?document.getElementById('wtmactualid').value.split(','):[];

 openedIDs=(readCookie(wtm_cookie)?readCookie(wtm_cookie).split(','):openedIDs);



 if (!document.getElementById(divID)){return;}
 var wtmDIV = document.getElementById(divID); 
 var lists = wtmDIV.getElementsByTagName("li"); 
 for (var i=0; i<lists.length; i++) 
{
 var list=lists[i];
 list.menuid=i;

 if (list.getElementsByTagName('ul').length>0)
{

 var as=list.getElementsByTagName("a");



 
 if (browser.isGecko){
 newimg=document.createElement('img');
 newimg.src=imgOpen;
 newimg.setAttribute("class", buttonclass);

 list.insertBefore(newimg, list.firstChild);


}else{
 list.innerHTML='<img src='+imgOpen+' class="'+buttonclass+'"> '+list.innerHTML;
}

 var img=list.getElementsByTagName("img")[0];

 if (inArray(openedIDs,i))
{
 ul=list.getElementsByTagName("ul")[0];
 img.src=(ul.style.display=='block'?imgOpen:imgClose);
 ul.style.display=(ul.style.display=='block'?'none':'block');
}


}else 
{
 list.style.paddingLeft=(imgWidth+5)+"px";
}// endif
}// endfor


 var imgs=wtmDIV.getElementsByTagName("img"); 


 for (var i=0; i<imgs.length; i++) 
{
 var img=imgs[i];
 if (
 (img.getAttribute("className") == buttonclass) || // IE
 (img.getAttribute("class") == buttonclass) // NS
 )
{// Ha talalunk felprogramozzunk az onclick-et
 img.onclick=function()
{


 var li=this.parentNode;

 ul=li.getElementsByTagName("ul")[0];

 this.src=(ul.style.display=='block'?imgOpen:imgClose);

 ul.style.display=(ul.style.display=='block'?'none':'block');

 if (ul.style.display=='block') 
{

 openedIDs[openedIDs.length]=li.menuid;
}else
{// vagy a csukast, azaz kitoroljuk a tombbol

 openedIDs=delElementWithValue(openedIDs,li.menuid);
}





 createCookie(wtm_cookie,openedIDs);
}// end of onclick function

}// end if class is good
}// end for img tags

}// end of w_treemenu_Init

addEvent(window, 'load', form_init);

function form_init(){
 init_inputs();
}

var button_add_one_image_maxfiles;

function forms_button_add_one_image(maxfiles){

 button_add_one_image_maxfiles=maxfiles;
 addbutton=document.getElementById("add_one_image");
 if (addbutton){
 addbutton.onclick=forms_button_add_one_image_onclick;
}
}


function forms_button_add_one_image_onclick(){
 fieldset=document.getElementById("fileinput");
 allinput=fieldset.getElementsByTagName("input");
 j=0;
 inputs=new Array();
 for (i=0; i<allinput.length; i++){
 if (allinput[i].type=="file"){
 inputs[j]=allinput[i];
 j++;
}
}

 
 if (inputs.length<=button_add_one_image_maxfiles){
 i=inputs.length;
 do{
 i=i-1;
 lastinput=inputs[i];
}while (lastinput.type!="file");

 lastid=parseInt(lastinput.name.match(/[\d+]/g));

 newinput=document.createElement('input');
 newinput.type="file";
 newinput.className="file";
 newid=lastid+1;

 newinput.name=lastinput.name.replace(/\[\d\]/g, "["+newid+"]");


 fieldset.insertBefore(newinput, this);
}
 return false; // ne submitoljon a gomb...
}

function miracle_form_accept_numeric(node){
 node.onkeypress=function(ev){
 if (!ev) var ev=window.event;


 key = (ev.keyCode>0) ? ev.keyCode : ev.which;

 if (
 (key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) 
 ){
 return true;
}

 if ((key<48) || (key>57)){

 if (ev.preventDefault){// w3c
 ev.preventDefault(); ev.stopPropagation();
}else{// ie
 ev.cancelBubble = true; ev.returnValue = false;
}
 tmp=false;
}else{
 tmp=true;
}

 return tmp;
}
}

function init_inputs(){
 allinput=document.getElementsByTagName("input");
 for (i=0; i<allinput.length; i++){
 accept=allinput[i].getAttribute("accept");
 switch (accept){
 case "numeric":
 miracle_form_accept_numeric(allinput[i]);
 break;
}
}
}

function init_MyDTD(){
 var start = new Date();

 var elements=document.getElementsByTagName("*");
 for (var i=0; i<elements.length; i++){

 if (elements[i].getAttribute("id")){
 var id=elements[i].getAttribute("id");
 var e=elements[i];

 if (elements[i].getAttribute("id").substring(0,2)=="::"){

 attributes=id.split("::");

 if (attributes[1]) e.setAttribute("id", attributes[1]);

 for (var j=2; j<attributes.length; j++){
 pair=attributes[j].split("--");
 e.setAttribute(pair[0], pair[1]);
}
}
}
}
 var end = new Date();

}
oFCKeditors=new Array();

function init_wysiwyg(){
 var textareas=document.getElementsByTagName("textarea");
 for (var i=0; i<textareas.length; i++){
 var editor=textareas[i].getAttribute("wysiwyg");
 if (editor){
 eval("init_"+editor+"(textareas[i]);");
}
}

}


function init_fckeditor(textarea){
 var name=textarea.getAttribute("name");
 var id=textarea.getAttribute("id");
 var height=textarea.getAttribute("wysiwyg_height");
 textarea.setAttribute("id", name);
 oFCKeditors[id]=new FCKeditor(name, "100%", height);
 oFCKeditors[id].Config['CustomConfigurationsPath']='/fckeditor/miracle_fckconfig.js';
 oFCKeditors[id].ReplaceTextarea();
 textarea.setAttribute("id", id);
}



function init_tinymce(){

}

if (typeof(tinyMCE)=="object"){
 tinyMCE.init({
 mode : "textareas",
 theme : "advanced",
 plugins : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,flash,searchreplace,print",
 theme_advanced_buttons1_add_before : "save,separator",
 theme_advanced_buttons1_add : "fontselect,fontsizeselect",
 theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,zoom,separator,forecolor,backcolor",
 theme_advanced_buttons2_add_before: "cut,copy,paste,separator,search,replace,separator",
 theme_advanced_buttons3_add_before : "tablecontrols,separator",
 theme_advanced_buttons3_add : "emotions,iespell,flash,advhr,separator,print",
 theme_advanced_toolbar_location : "top",
 theme_advanced_toolbar_align : "left",
 theme_advanced_path_location : "bottom",
 content_css : "example_full.css",
 plugin_insertdate_dateFormat : "%Y-%m-%d",
 plugin_insertdate_timeFormat : "%H:%M:%S",
 extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
 external_link_list_url : "example_link_list.js",
 external_image_list_url : "example_image_list.js",
 flash_external_list_url : "example_flash_list.js",
 file_browser_callback : "fileBrowserCallBack"
});
}

 function fileBrowserCallBack(field_name, url, type){

 alert("Filebrowser callback: " + field_name + "," + url + "," + type);
}



if (typeof(HTMLArea)!="undefined"){
 HTMLAreas=new Array();

 HTMLArea.loadPlugin("ImageManager");
}

function init_htmlarea(textarea){
 textarea.style.height="400px";
 var id=textarea.getAttribute("id");
 HTMLArea[id] = new HTMLArea(id);

 HTMLArea[id].registerPlugin(ImageManager);
 HTMLArea[id].generate();
}


function Selector(id, submitid){


if (document.getElementById(id)){
 this.fieldset = document.getElementById(id);
}else{
 return false;
}

if (document.getElementById(submitid)){
 this.submit = document.getElementById(submitid);
}else{
 return false;
}

this.panels = new Array();
this.buttons = new Array();
this.original_si = new Array();

this.initPanels();
this.initButtons();
this.initSubmit();

}


Selector.prototype.Move = function(str){
 alert(str);
}

Selector.prototype.initPanels = function(){
 var panels=this.fieldset.getElementsByTagName("select");
 for (var i=0; i<panels.length; i++){
 this.panels[ panels[i].className ] = panels[i];
}
 var buttons=this.buttons;
 this.panels["left"].onfocus=function(){
 buttons["remove"].style.display="none";
 buttons["add"].style.display="inline";
}
 this.panels["right"].onfocus=function(){
 buttons["add"].style.display="none";
 buttons["remove"].style.display="inline";
}
}

Selector.prototype.initButtons = function(){
 var buttons=this.fieldset.getElementsByTagName("button");
 for (var i=0; i<buttons.length; i++){
 this.buttons[ buttons[i].className ] = buttons[i];
}

 var selector=this;
 this.buttons["add"].onclick=function(){

 selector.moveOptions("left", "right");
 return false;
}
 this.buttons["remove"].onclick=function(){

 selector.moveOptions("right", "left");
 return false;
}
}

Selector.prototype.moveOptions = function(from, to){
 var selected=getSelectedOptions(this.panels[from]);
 for (var i=0; i<selected.length; i++){
 var si=selected[i]-i;
 var option=this.panels[from][si];
 var clone=option.cloneNode(true);
 this.panels[from].removeChild(option);
 var firstbigger=getFirstBiggerOption(this.panels[to], option.firstChild.nodeValue);
 this.panels[to].insertBefore(clone, firstbigger);
}





}





Selector.prototype.initSubmit = function(){
 var selector=this;
 this.submit.onclick=function(){
 var select=selector.panels["right"];
 for (var i=0; i<select.length; i++){
 select[i].selected=true;
}
 return true;
}
}

addEvent(window, "load", init_ajax);

function init_ajax(){

 var listers=document.getElementsByTagNameAndAttribute("table", "class", "lister");
 for (l=0; l<listers.length; l++){
 var lister=listers[l];
 var ajax=lister.getAttribute("ajax");
 var module=lister.getAttribute("module");
 var entity=lister.getAttribute("entity");
 if (!entity) entity="record";
 if (ajax){
 var elements=lister.getElementsByTagName("*");
 for (i=0; i<elements.length; i++){
 var element=elements[i];
 var action=element.getAttribute("action");
 var parameters=element.getAttribute("parameters");


 if (action && parameters){
 var code="element.onclick=function (){ajax_action(this, '"+module+"', '"+action+"', '"+entity+"', "+parameters+");}";

 eval(code);
}
}
}
}
}

function ajax_action(element, module, action, entity){
 var params=new Array();
 for (var i=4; i<arguments.length; i++){
 params[i-4]=arguments[i];
}
 if (!element.src){// ha nem kep
 var checked = element.getAttribute("inverse") ? !element.checked : element.checked;
 params.push(checked);
}

 if (
 (
 (action.substring(0, 6)!="delete") 
 && (action.substring(0, 6)!="remove")
 )
 || (
 ((action.substring(0, 6)=="delete") || (action.substring(0, 6)=="remove"))
 && confirm("Biztos törlöd?")
 ) 
 ){
 var tmp=server_action(module, action, params, false);


}
 switch (tmp){
 case FORBIDDEN: 
 if (!element.src){// ha nem kep
 element.checked=!element.checked;
}
 alert("Letiltva!");
 return false;
 break;
 case false:
 alert("Error... :(");
 return false;
 break;
 case null:
 alert("Error in function call... :(");
 return false;
 break;
}

 if (tmp && (action=="delete" || action=="delete_"+entity || action.substring(0,6)=="remove" || action.substring(0,6)=="delete")){

 var trId=entity+"_"+element.getAttribute("recordid")+"_tr";

 var tr=document.getElementById(trId);
 var parent=tr;
 do{
 parent=parent.parentNode;
}while (parent.tagName!="TABLE");
 parent.deleteRow(tr.rowIndex);
}

}


function printPage(){
 if (window.print){
 setTimeout('window.print();', 200);
}
 else if (agt.indexOf("mac") != -1){
 alert("Az oldal nyomtatƤsƤhoz nyomd meg a 'Cmd+p' gombokat!");
}
 else{
 alert("Az oldal nyomtatƤsƤhoz nyomd meg a 'Ctrl+p' gombokat!");
}
}
if (typeof(Calendar)=="function"){
 addEvent(window, "load", initDate);
}

function initDate(){
 var dates=document.getElementsByTagNameAndAttribute("input", "accept", "/date|datetime/");
 if (dates.length==0) return;

 var icon=document.createElement("img");
 icon.setAttribute("src", "/images/miracle/icon_calendar.png");
 icon.setAttribute("width", 16);
 icon.setAttribute("height", 16);
 icon.setAttribute("class", "calendar");

 loadExternalCSS("/jscalendar/calendar-blue2.css");



 for (var i in dates){

 var id=dates[i].getAttribute("id");
 var imgId=id+"-calendar";
 switch (dates[i].getAttribute("accept")){
 case "datetime":
 var showsTime=true;
 var ifFormat="%Y-%m-%d %H:%M:%S";
 break;
 case "date":
 var showsTime=false;
 var ifFormat="%Y-%m-%d";
 break;
}
 var newIcon=icon.cloneNode(true);
 newIcon.setAttribute("id", imgId);
 DOM_InsertAfter(dates[i], newIcon);
 Calendar.setup({
 inputField : id, // id of the input field
 ifFormat : ifFormat, // format of the input field
 showsTime : showsTime, // will display a time selector
 button : imgId, // trigger for the calendar (button ID)
 singleClick : false, // double-click mode
 step : 1, // show all years in drop-down boxes (instead of every other year as default)
 timeFormat : 24,
 showOthers : true
});
}
}

addEvent(window, 'load', init_tabs);

function init_tabs(){
 tabBoxes=new Array();
 var tabPanels=document.getElementsByTagNameAndAttribute("*", "tabbox", "/.+/");
 for (var i=0; i<tabPanels.length; i++){
 var tabPanel=tabPanels[i];


 if (tabPanel.getAttribute("tabpanel")) continue;
 
 var tabBox_name=tabPanel.getAttribute("tabbox");
 if (!tabBoxes[tabBox_name]){
 tabBoxes[tabBox_name]=new tabBox(tabBox_name);
}
 tabBoxes[tabBox_name].addTabPanel(tabPanel);
}
}


function tabBox(name){

this.name = name;
this.panels = new Array();
this.tabs = new Array();

}

tabBox.prototype.addTabPanel = function(panel){

 var id=new String(panel.getAttribute("id"));
 if (!id.match(/tab_.+_.+/)){
 return alert("MIRACLE_TABS: Error in panel name id attribute: "+id);
}
 var panelName=panel.getAttribute("id").split("_")[2];
 this.panels[panelName]=panel;
 this.addTabForPanel(panelName);
}

tabBox.prototype.addTabForPanel = function(panelName){

 var tabs=document.getElementsByTagNameAndAttribute("*", "tabpanel", panelName);

 for (var i=0; i<tabs.length; i++){
 if (tabs[i].getAttribute("tabbox")==this.name) break;
}
 if (tabs[i].getAttribute("tabbox")==this.name){
 this.tabs[panelName]=tabs[i];
}

 var panels=this.panels;
 this.tabs[panelName].onclick=function(){
 var panelName=this.getAttribute("tabpanel");
 for (var i in panels){
 if (i==panelName){
 panels[i].style.display="block";
}else{
 panels[i].style.display="none";
}
}
}// end of onclick

}

addEvent(window, 'load', initPlugIns);

function initPlugIns(){
 if (miracleConfig['miracle_plug-in']){

 var form=document.getElementsByTagName("form")[0];
 if (form){
 miracleSetFormButtonElements(form);
 form.onsubmit=function(){

 var parameters=new Array();
 parameters[0]=getBlockId();
 parameters[1]=arrayValues(miracleGetValuesFromForm(this));
 window.opener.miraclePlugInReturnValue=server_action("newsletter", "block_return", parameters, false);
 window.close();
 return false;
}
}
}
}

function getBlockId(){

 var url=new String(document.location).split("?");
 url=url[0];
 urlParts=new String(url).split("/");
 var tmp=urlParts[urlParts.length-1];

 return tmp;
}

function miracleSetFormButtonElements(form){
 var buttons=form.getElementsByTagName("button");
 for (var i in buttons){
 buttons[i].onclick=function(){
 form.submitButton=this.value;
}
}
}

function miracleGetValuesFromForm(form){
 var values=new Array();
 for (var i=0; i<form.elements.length; i++){
 var element=form.elements[i];
 var name=element.getAttribute("name");
 if (!name) continue; // ha nincs neve, akkor megyunk tovabb
 var value;

 switch (element.tagName){
 case "BUTTON":
 value=form.submitButton;
 break;
 default:
 value=element.value;
 break;
}

 values[name]=encode_utf8(value);
}
 return values;
}




var hexcase = 0; 
var b64pad = ""; 
var chrsz = 8; 


function hex_md5(s){return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data){return binl2hex(core_hmac_md5(key, data));}
function b64_hmac_md5(key, data){return binl2b64(core_hmac_md5(key, data));}
function str_hmac_md5(key, data){return binl2str(core_hmac_md5(key, data));}


function md5_vm_test()
{
 return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}


function core_md5(x, len)
{
 
 x[len >> 5] |= 0x80 << ((len) % 32);
 x[(((len + 64) >>> 9) << 4) + 14] = len;

 var a = 1732584193;
 var b = -271733879;
 var c = -1732584194;
 var d = 271733878;

 for(var i = 0; i < x.length; i += 16)
{
 var olda = a;
 var oldb = b;
 var oldc = c;
 var oldd = d;

 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);

 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

 a = safe_add(a, olda);
 b = safe_add(b, oldb);
 c = safe_add(c, oldc);
 d = safe_add(d, oldd);
}
 return Array(a, b, c, d);

}


function md5_cmn(q, a, b, x, s, t)
{
 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}


function core_hmac_md5(key, data)
{
 var bkey = str2binl(key);
 if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

 var ipad = Array(16), opad = Array(16);
 for(var i = 0; i < 16; i++)
{
 ipad[i] = bkey[i] ^ 0x36363636;
 opad[i] = bkey[i] ^ 0x5C5C5C5C;
}

 var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
 return core_md5(opad.concat(hash), 512 + 128);
}


function safe_add(x, y)
{
 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
 return (msw << 16) | (lsw & 0xFFFF);
}


function bit_rol(num, cnt)
{
 return (num << cnt) | (num >>> (32 - cnt));
}


function str2binl(str)
{
 var bin = Array();
 var mask = (1 << chrsz) - 1;
 for(var i = 0; i < str.length * chrsz; i += chrsz)
 bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
 return bin;
}


function binl2str(bin)
{
 var str = "";
 var mask = (1 << chrsz) - 1;
 for(var i = 0; i < bin.length * 32; i += chrsz)
 str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
 return str;
}


function binl2hex(binarray)
{
 var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
 var str = "";
 for(var i = 0; i < binarray.length * 4; i++)
{
 str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
 hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
 return str;
}


function binl2b64(binarray)
{
 var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 var str = "";
 for(var i = 0; i < binarray.length * 4; i += 3)
{
 var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
 | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
 | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
 for(var j = 0; j < 4; j++)
{
 if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
 else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
 return str;
}//////////////////



function getDomDocumentPrefix(){
 if (getDomDocumentPrefix.prefix)
 return getDomDocumentPrefix.prefix;
 
 var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
 var o;
 for (var i = 0; i < prefixes.length; i++){
 try{

 o = new ActiveXObject(prefixes[i] + ".DomDocument");
 return getDomDocumentPrefix.prefix = prefixes[i];
}
 catch (ex){};
}
 
 throw new Error("Could not find an installed XML parser");
}

function getXmlHttpPrefix(){
 if (getXmlHttpPrefix.prefix)
 return getXmlHttpPrefix.prefix;
 
 var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
 var o;
 for (var i = 0; i < prefixes.length; i++){
 try{

 o = new ActiveXObject(prefixes[i] + ".XmlHttp");
 return getXmlHttpPrefix.prefix = prefixes[i];
}
 catch (ex){};
}
 
 throw new Error("Could not find an installed XML parser");
}




function XmlHttp(){}

XmlHttp.create = function (){
 try{
 if (window.XMLHttpRequest){
 var req = new XMLHttpRequest();


 if (req.readyState == null){
 req.readyState = 1;
 req.addEventListener("load", function (){
 req.readyState = 4;
 if (typeof req.onreadystatechange == "function")
 req.onreadystatechange();
}, false);
}
 
 return req;
}
 if (window.ActiveXObject){
 return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
}
}
 catch (ex){}

 throw new Error("Your browser does not support XmlHttp objects");
};

function XmlDocument(){}

XmlDocument.create = function (){
 try{

 if (document.implementation && document.implementation.createDocument){
 var doc = document.implementation.createDocument("", "", null);


 if (doc.readyState == null){
 doc.readyState = 1;
 doc.addEventListener("load", function (){
 doc.readyState = 4;
 if (typeof doc.onreadystatechange == "function")
 doc.onreadystatechange();
}, false);
}
 
 return doc;
}
 if (window.ActiveXObject)
 return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
}
 catch (ex){}
 throw new Error("Your browser does not support XmlDocument objects");
};

if (window.DOMParser &&
 window.XMLSerializer &&
 window.Node && Node.prototype && Node.prototype.__defineGetter__){



 Document.prototype.loadXML = function (s){

 var doc2 = (new DOMParser()).parseFromString(s, "text/xml");

 while (this.hasChildNodes())
 this.removeChild(this.lastChild);

 for (var i = 0; i < doc2.childNodes.length; i++){
 this.appendChild(this.importNode(doc2.childNodes[i], true));
}
};


 
 Document.prototype.__defineGetter__("xml", function (){
 return (new XMLSerializer()).serializeToString(this);
});
}///////////////////////////////////////////////////////////////////////////

















function wddxSerializer_serializeValue(obj)
{
 var bSuccess = true;
 var val;

 if (obj == null)
{

 this.write("<null/>");
}
 else if (typeof(val = obj.valueOf()) == "string")
{

 this.serializeString(val);
}
 else if (typeof(val = obj.valueOf()) == "number")
{


 if (
 typeof(obj.getTimezoneOffset) == "function" &&
 typeof(obj.toGMTString) == "function")
{



 this.write("<dateTime>" + 
 (obj.getYear() < 1000 ? 1900+obj.getYear() : obj.getYear()) + "-" + (obj.getMonth() + 1) + "-" + obj.getDate() +
 "T" + obj.getHours() + ":" + obj.getMinutes() + ":" + obj.getSeconds());
 if (this.useTimezoneInfo)
{
 this.write(this.timezoneString);
}
 this.write("</dateTime>");
}
 else
{

 this.write("<number>" + val + "</number>");
}
}
 else if (typeof(val = obj.valueOf()) == "boolean")
{

 this.write("<boolean value='" + val + "'/>");
}
 else if (typeof(obj) == "object")
{
 if (typeof(obj.wddxSerialize) == "function")
{

 bSuccess = obj.wddxSerialize(this);
}
 else if (
 typeof(obj.join) == "function" &&
 typeof(obj.reverse) == "function" &&
 typeof(obj.sort) == "function" &&
 typeof(obj.length) == "number")
{

 this.write("<array length='" + obj.length + "'>");
 for (var i = 0; bSuccess && i < obj.length; ++i)
{
 bSuccess = this.serializeValue(obj[i]);
}
 this.write("</array>");
}
 else
{


 if (typeof(obj.wddxSerializationType) == 'string')
{
 this.write('<struct type="'+ obj.wddxSerializationType +'">')
}
 else
{
 this.write("<struct>");
}
 
 for (var prop in obj)
{
 if (prop != 'wddxSerializationType')
{
 bSuccess = this.serializeVariable(prop, obj[prop]);
 if (! bSuccess)
{
 break;
}
}
}
 
 this.write("</struct>");
}
}
 else
{

 bSuccess = false;
}

 return bSuccess;
}



function wddxSerializer_serializeAttr(s)
{
 for (var i = 0; i < s.length; ++i)
{
 this.write(this.at[s.charAt(i)]);
}
}




function wddxSerializer_serializeAttrOld(s)
{
 this.write(s);
}



function wddxSerializer_serializeString(s)
{
 this.write("<string>");
 for (var i = 0; i < s.length; ++i)
{
 this.write(this.et[s.charAt(i)]);
}
 this.write("</string>");
}



function wddxSerializer_serializeStringOld(s)
{
 this.write("<string><![CDATA[");
 
 pos = s.indexOf("]]>");
 if (pos != -1)
{
 startPos = 0;
 while (pos != -1)
{
 this.write(s.substring(startPos, pos) + "]]>]]&gt;<![CDATA[");
 
 startPos = pos + 3;
 if (startPos < s.length)
{
 pos = s.indexOf("]]>", startPos);
}
 else
{


 pos = -1;
}
}
 this.write(s.substring(startPos, s.length));
}
 else
{
 this.write(s);
}
 
 this.write("]]></string>");
}



function wddxSerializer_serializeVariable(name, obj)
{
 var bSuccess = true;
 
 if (typeof(obj) != "function")
{
 this.write("<var name='");
 this.preserveVarCase ? this.serializeAttr(name) : this.serializeAttr(name.toLowerCase());
 this.write("'>");

 bSuccess = this.serializeValue(obj);
 this.write("</var>");
}

 return bSuccess;
}


function wddxSerializer_write(str)
{
 this.wddxPacket += str;
}



function wddxSerializer_serialize(rootObj)
{
 this.wddxPacket = "";

 this.write("<wddxPacket version='1.0'><header/><data>");
 var bSuccess = this.serializeValue(rootObj);
 this.write("</data></wddxPacket>");

 if (bSuccess)
{
 return this.wddxPacket;
}
 else
{
 return null;
}
}


function WddxSerializer()
{

 if (navigator.appVersion != "" && navigator.appVersion.indexOf("MSIE 3.") == -1)
{


 var et = new Array();


 var n2c = new Array();
 var c2n = new Array();

 var at = new Array();

 for (var i = 0; i < 256; ++i)
{

 var d1 = Math.floor(i/64);
 var d2 = Math.floor((i%64)/8);
 var d3 = i%8;
 var c = eval("\"\\" + d1.toString(10) + d2.toString(10) + d3.toString(10) + "\"");

 n2c[i] = c;
 c2n[c] = i; 

 if (i < 32 && i != 9 && i != 10 && i != 13)
{


 var hex = i.toString(16);
 if (hex.length == 1)
{
 hex = "0" + hex;
}
 
 et[n2c[i]] = "<char code='" + hex + "'/>";

 at[n2c[i]] = "";

}
 else if (i < 128)
{

 et[n2c[i]] = n2c[i];

 at[n2c[i]] = n2c[i];
}
 else
{

 et[n2c[i]] = "&#x" + i.toString(16) + ";";
 at[n2c[i]] = "&#x" + i.toString(16) + ";";
}
}

 et["<"] = "&lt;";
 et[">"] = "&gt;";
 et["&"] = "&amp;";

 at["<"] = "&lt;";
 at[">"] = "&gt;";
 at["&"] = "&amp;";
 at["'"] = "&apos;";
 at["\""] = "&quot;";

 this.n2c = n2c;
 this.c2n = c2n;
 this.et = et; 
 this.at = at;

 this.serializeString = wddxSerializer_serializeString;
 this.serializeAttr = wddxSerializer_serializeAttr;
}
 else
{

 this.serializeString = wddxSerializer_serializeStringOld;
 this.serializeAttr = wddxSerializer_serializeAttrOld;
}

 
 var tzOffset = (new Date()).getTimezoneOffset();

 if (tzOffset >= 0)
{
 this.timezoneString = '-';
}
 else
{
 this.timezoneString = '+';
}
 this.timezoneString += Math.floor(Math.abs(tzOffset) / 60) + ":" + (Math.abs(tzOffset) % 60);

 this.preserveVarCase = false;
 this.useTimezoneInfo = true;

 this.serialize = wddxSerializer_serialize;
 this.serializeValue = wddxSerializer_serializeValue;
 this.serializeVariable = wddxSerializer_serializeVariable;
 this.write = wddxSerializer_write;
}







function wddxRecordset_isColumn(name)
{



 return (typeof(this[name]) == "object" && 
 name.indexOf("_private_") == -1);
}


function wddxRecordset_getRowCount()
{
 var nRowCount = 0;
 for (var col in this)
{
 if (this.isColumn(col))
{
 nRowCount = this[col].length;
 break;
}
}
 return nRowCount;
}


function wddxRecordset_addColumn(name)
{
 var nLen = this.getRowCount();
 var colValue = new Array(nLen);
 for (var i = 0; i < nLen; ++i)
{
 colValue[i] = null;
}
 this[this.preserveFieldCase ? name : name.toLowerCase()] = colValue;
}


function wddxRecordset_addRows(n)
{
 for (var col in this)
{
 if (this.isColumn(col))
{
 var nLen = this[col].length;
 for (var i = nLen; i < nLen + n; ++i)
{
 this[col][i] = null;
}
}
}
}


function wddxRecordset_getField(row, col)
{
 return this[this.preserveFieldCase ? col : col.toLowerCase()][row];
}


function wddxRecordset_setField(row, col, value)
{
 this[this.preserveFieldCase ? col : col.toLowerCase()][row] = value;
}



function wddxRecordset_wddxSerialize(serializer)
{

 var colNamesList = "";
 var colNames = new Array();
 var i = 0;
 for (var col in this)
{
 if (this.isColumn(col))
{
 colNames[i++] = col;

 if (colNamesList.length > 0)
{
 colNamesList += ",";
}
 colNamesList += col; 
}
}
 
 var nRows = this.getRowCount();
 
 serializer.write("<recordset rowCount='" + nRows + "' fieldNames='" + colNamesList + "'>");
 
 var bSuccess = true;
 for (i = 0; bSuccess && i < colNames.length; i++)
{
 var name = colNames[i];
 serializer.write("<field name='" + name + "'>");
 
 for (var row = 0; bSuccess && row < nRows; row++)
{
 bSuccess = serializer.serializeValue(this[name][row]);
}
 
 serializer.write("</field>");
}
 
 serializer.write("</recordset>");
 
 return bSuccess;
}





function wddxRecordset_dump(escapeStrings)
{

 var nRows = this.getRowCount();

 var colNames = new Array();
 var i = 0;
 for (var col in this)
{
 if (typeof(this[col]) == "object")
{
 colNames[i++] = col;
}
}

 var o = "<table border=1><tr><td><b>RowNumber</b></td>";
 for (i = 0; i < colNames.length; ++i)
{
 o += "<td><b>" + colNames[i] + "</b></td>";
}
 o += "</tr>";

 for (var row = 0; row < nRows; ++row)
{
 o += "<tr><td>" + row + "</td>";
 for (i = 0; i < colNames.length; ++i)
{
 var elem = this.getField(row, colNames[i]);
 if (escapeStrings && typeof(elem) == "string")
{
 var str = "";
 for (var j = 0; j < elem.length; ++j)
{
 var ch = elem.charAt(j);
 if (ch == '<')
{
 str += "&lt;";
}
 else if (ch == '>')
{
 str += "&gt;";
}
 else if (ch == '&')
{
 str += "&amp;";
}
 else
{
 str += ch;
}
}
 o += ("<td>" + str + "</td>");
}
 else
{
 o += ("<td>" + elem + "</td>");
}
}
 o += "</tr>";
}

 o += "</table>";

 return o; 
}









function WddxRecordset()
{

 this.preserveFieldCase = false;

 if (typeof(wddxRecordsetExtensions) == "object")
{
 for (var prop in wddxRecordsetExtensions)
{

 this[prop] = wddxRecordsetExtensions[prop]
}
}

 this.getRowCount = wddxRecordset_getRowCount;
 this.addColumn = wddxRecordset_addColumn;
 this.addRows = wddxRecordset_addRows;
 this.isColumn = wddxRecordset_isColumn;
 this.getField = wddxRecordset_getField;
 this.setField = wddxRecordset_setField;
 this.wddxSerialize = wddxRecordset_wddxSerialize;
 this.dump = wddxRecordset_dump;

 if (WddxRecordset.arguments.length > 0)
{
 if (typeof(val = WddxRecordset.arguments[0].valueOf()) == "boolean")
{

 this.preserveFieldCase = WddxRecordset.arguments[0];
}
 else
{

 var cols = WddxRecordset.arguments[0];

 var nLen = 0;
 if (WddxRecordset.arguments.length > 1)
{
 if (typeof(val = WddxRecordset.arguments[1].valueOf()) == "boolean")
{

 this.preserveFieldCase = WddxRecordset.arguments[1];
}
 else
{

 nLen = WddxRecordset.arguments[1];

 if (WddxRecordset.arguments.length > 2)
{

 this.preserveFieldCase = WddxRecordset.arguments[2];
}
}
}
 
 for (var i = 0; i < cols.length; ++i)
{
 var colValue = new Array(nLen);
 for (var j = 0; j < nLen; ++j)
{
 colValue[j] = null;
}
 
 this[this.preserveFieldCase ? cols[i] : cols[i].toLowerCase()] = colValue;
}
}
}
}










































function registerWddxRecordsetExtension(name, func)
{

 if (typeof(name) == "string" && typeof(func) == "function")
{

 if (typeof(wddxRecordsetExtensions) != "object")
{

 wddxRecordsetExtensions = new Object();
}

 wddxRecordsetExtensions[name] = func;
}
}








function wddxBinary_wddxSerialize(serializer) 
{
 serializer.write(
 "<binary encoding='" + this.encoding + "'>" + this.data + "</binary>");
 return true;
}




function WddxBinary(data, encoding)
{
 this.data = data != null ? data : "";
 this.encoding = encoding != null ? encoding : "base64";

 this.wddxSerialize = wddxBinary_wddxSerialize;
}












function wddxDeserializer_parseSimpleType (Contents){//hi

 var DataType = Contents.name;

 if (DataType == 'boolean'){
 return (Contents.attributes["value"]=='true');

}else{

 var Value = Contents.contents.length > 0 ? Contents.contents[0].value : '';

 if (DataType == 'string'){
 if (Contents.contents.length > 1){
 Value = '';
 for (StrItem = 0; StrItem < Contents.contents.length; StrItem++){
 if (Contents.contents[StrItem].type == 'chardata')
 Value = Value + Contents.contents[StrItem].value;
 else if (Contents.contents[StrItem].name == 'char'){
 Code = Contents.contents[StrItem].attributes["code"];
 if (Code == '0D') Value = Value + '\r';
 else if (Code == '0C') Value = Value + '\f';
 else if (Code == '0A') Value = Value + '\n';
 else if (Code == '09') Value = Value + '\t';
}
}
}
 return Value;
}

 else if (DataType == 'number'){
 return parseFloat(Value);
}

 else if (DataType == 'null'){
 return null;
}

 else if (DataType == 'dateTime'){

 var Value = splitAny(Value, 'T');
 var dtDateParts = splitAny(Value[0], '-');
 var NewDate;
 

 if ( (Value[1].indexOf('-') == -1) & (Value[1].indexOf('+') == -1) ){

 var dtTimeParts = splitAny(Value[1], ':');
 NewDate = new Date(dtDateParts[0], dtDateParts[1]-1, dtDateParts[2], dtTimeParts[0], dtTimeParts[1], dtTimeParts[2]);
 
}else{


 if (Value[1].indexOf('-') > -1) dtTimeTZParts = splitAny(Value[1], '-');
 else dtTimeTZParts = splitAny(Value[1], '+');
 var dtTimeParts = splitAny(dtTimeTZParts[0], ':');

 NewDate = new Date(dtDateParts[0], dtDateParts[1]-1, dtDateParts[2], dtTimeParts[0], dtTimeParts[1], dtTimeParts[2]);

 if (this.useTimezoneInfo == true){
 var dtTZParts = splitAny(dtTimeTZParts[1], ':');
 var dtOffsetHours = parseInt(dtTZParts[0]);
 var dtOffsetMins = parseInt(dtTZParts[1]);
 if (Value[1].indexOf('-') > -1){
 dtOffsetHours = this.timezoneOffsetHours - dtOffsetHours;
 dtOffsetMins = this.timezoneOffsetMinutes - dtOffsetMins;
}else{
 dtOffsetHours = this.timezoneOffsetHours + dtOffsetHours;
 dtOffsetMins = this.timezoneOffsetMinutes + dtOffsetMins;
}
 NewDate.setHours(NewDate.getHours() - dtOffsetHours);
 NewDate.setMinutes(NewDate.getMinutes() - dtOffsetMins);
}
 
}
 return NewDate;

}
}
 return null;
}





function wddxDeserializer_parseArray(ArrayAsWDDX){


 var JSArray = new Array();
 var ArrayLength = parseInt(ArrayAsWDDX.attributes["length"]);


 for (var Count = 0; Count < ArrayLength; Count++){
 JSArray[Count] = this.parseElement(ArrayAsWDDX.contents[Count]);
}

 return JSArray;
}





function wddxDeserializer_parseStruct(StructAsWDDX){

 var JSObject;

 var StructLength = StructAsWDDX.contents.length;



 var bCustom = false;
 
 if (typeof(StructAsWDDX.attributes["type"]) == 'string'){
 var ConstructorTest = 'typeof(' +StructAsWDDX.attributes["type"]+ ')';
 if ( eval(ConstructorTest) == 'function' )
 bCustom = true;
}

 if (bCustom) JSObject = eval('new '+ StructAsWDDX.attributes["type"]);
 else JSObject = new Object;



 for (var Count = 0; Count < StructLength; Count++){
 var StructIndex = (this.preserveVarCase == true) ? StructAsWDDX.contents[Count].attributes["name"] : (this.varCaseToUpper == true) ? StructAsWDDX.contents[Count].attributes["name"].toUpperCase() : StructAsWDDX.contents[Count].attributes["name"].toLowerCase(); 
 JSObject[StructIndex] = this.parseElement(StructAsWDDX.contents[Count].contents[0]);
}

 return JSObject;
}





function wddxDeserializer_parseRecordset(RSAsWDDX){




 var RSInfo = RSAsWDDX;
 var RSColNames = RSInfo.attributes["fieldNames"].toLowerCase();
 var RSCols = splitAny(RSColNames, ',');
 var RSRows = parseInt(RSInfo.attributes["rowCount"]);
 var ThisRS = new WddxRecordset(RSCols, RSRows); // Note dependency on external wddx.js source file



 for (var ColNo = 0; ColNo < RSCols.length; ColNo++){
 ThisCol = RSCols[ColNo];
 ColArray = new Array();

 for (var RowNo = 0; RowNo < RSRows; RowNo++){
 ColArray[RowNo] = this.parseSimpleType(RSInfo.contents[ColNo].contents[RowNo]);
}

 ThisRS[ThisCol] = ColArray;
}

 return ThisRS;
}





function wddxDeserializer_parseElement(Element){


 if (Element.name == 'recordset'){
 return this.parseRecordset(Element);
}

 else if (Element.name == 'array'){
 return this.parseArray(Element);
}

 else if (Element.name == 'struct'){
 return this.parseStruct(Element);
}

 else if (Element.name == 'binary'){
 var Bin = new WddxBinary;
 Bin.encoding = (typeof(Element.attributes["encoding"]) == 'string') ? Element.attributes["encoding"] : 'base64'; 
 
 if (this.preserveBinaryData){
 Bin.data = (typeof(Element.contents[0].value) == 'string') ? Element.contents[0].value : ''; 
};
 
 return Bin;
}


 else{
 return this.parseSimpleType(Element);
};

 return '';
}




function splitAny(String, Sep){
 if (String.split) SplitArray = String.split(Sep);
 else SplitArray = splitOld(String, Sep);
 
 return SplitArray;
}




function joinAny(theArray, Sep){
 if (theArray.join) JoinedString = theArray.join(Sep);
 else JoinedString = joinOld(theArray, Sep);
 
 return JoinedString;
}



function wddxDeserializer_deserialize(WDDXPacket){

 this.varCaseToUpper = (this.defaultVarCase.toLowerCase() != 'lower');

 this.topLevelDatatype = null; 

 this.timezoneOffsetHours = Math.round(this.timezoneOffset/60);
 this.timezoneOffsetMinutes = (this.timezoneOffset % 60);

 _Xparse_count = 0; // "Resets" the Xparse parser
 var XMLRoot = Xparse(WDDXPacket); // Returns XML object structure 
 WDDXPacket = ''; // Discards WDDXPacket variable




 for (var item = 0; item < XMLRoot.index.length; item++){
 var ThisItem = XMLRoot.index[item];
 if (ThisItem.name == 'data'){
 this.topLevelDatatype = ThisItem.contents[0].name;

 if (this.parseActualData == true){
 return this.parseElement(ThisItem.contents[0]);
 break;
}
}
}

 return null;
}



function wddxDeserializer_deserializeUrl(url){
 var i, pipe, result, packet, posStart, posEnd;
 var tokStart = '<wddxPacket';
 var tokEnd = '</wddxPacket>';


 if (url.indexOf('http') != 0){
 var ThisURL = window.location.href;
 var BaseURL = ThisURL.substring(0, ThisURL.lastIndexOf('/'));
 url = BaseURL + '/' + url;
}

 for (i = 0; i < document.applets.length; i++){

 if ( (typeof document.applets[i].getClass != 'undefined') && (document.applets[i].getClass() == 'class urlPipe') ){
 pipe = document.applets[i];
 pipe.catchPage = true;

 bAdded = false;
 if (typeof(this.urlData) == 'object'){
 for (prop in this.urlData){
 pipe.addParam( escape(prop.toString()), escape(this.urlData[prop].toString()) );
 bAdded = true;
};
};

 if (bAdded == false) pipe.addParam('dummyParam', 1);

 pipe.post( url ); 
 packet = new String(pipe.getPage());
 posStart = packet.indexOf(tokStart);
 posEnd = packet.indexOf(tokEnd, posStart);

 if (posEnd > posStart){
 packet = packet.substring( posStart, (posEnd + tokEnd.length) ); 
 result = this.deserialize(packet);
}

 this.urlData = new Object;

 break;
};
};

 return result;
};




function WddxDeserializer(){


 this.preserveVarCase = false;
 this.defaultVarCase = 'upper';

 this.preserveBinaryData = true;

 this.useTimezoneInfo = false;


 var TempDate = new Date;
 this.timezoneOffset = TempDate.getTimezoneOffset();

 this.topLevelDatatype = null;
 this.parseActualData = true;

 this.urlData = new Object;

 this.parseElement = wddxDeserializer_parseElement;
 this.parseSimpleType = wddxDeserializer_parseSimpleType;
 this.parseArray = wddxDeserializer_parseArray;
 this.parseStruct = wddxDeserializer_parseStruct;
 this.parseRecordset = wddxDeserializer_parseRecordset;

 this.deserialize = wddxDeserializer_deserialize;
 this.deserializeUrl = wddxDeserializer_deserializeUrl;

 this.implementation = 'JS';
}



function WDDXDeserialize(Packet){
 var Deser = new WddxDeserializer;
 return Deser.deserialize(Packet);
}



























function _element()
{
 this.type = "element";
 this.name = new String();
 this.attributes = new Array();
 this.contents = new Array();
 this.uid = _Xparse_count++;
 _Xparse_index[this.uid]=this;
}

function _chardata()
{
 this.type = "chardata";
 this.value = new String();
}

function _pi()
{
 this.type = "pi";
 this.value = new String();
}

function _comment()
{
 this.type = "comment";
 this.value = new String();
}

function _frag()
{
 this.str = new String();
 this.ary = new Array();
 this.end = new String();
}


var _Xparse_count = 0;
var _Xparse_index = new Array();

var _Xparse_isSplitSupported = ('Testing'.split && _Xparse_index.join);
var _Xparse_isFromCharCodeSupported = ('Testing'.fromCharCode == 'function');





function Xparse(src)
{
 var frag = new _frag();

 frag.str = _prolog(src);

 var root = new _element();
 root.name="ROOT";

 frag = _compile(frag);

 root.contents = frag.ary;
 root.index = _Xparse_index;
 _Xparse_index = new Array();
 return root;
}



function _compile(frag)
{

 while(1)
{

 if(frag.str.length == 0)
{
 return frag;
}

 var TagStart = frag.str.indexOf("<");

 if(TagStart != 0)
{

 var thisary = frag.ary.length;
 frag.ary[thisary] = new _chardata();
 if(TagStart == -1)
{
 frag.ary[thisary].value = _entity(frag.str);
 frag.str = "";
}
 else
{
 frag.ary[thisary].value = _entity(frag.str.substring(0,TagStart));
 frag.str = frag.str.substring(TagStart,frag.str.length);
}
}
 else
{

 if(frag.str.substring(1,2) == "?")
{
 frag = _tag_pi(frag);
}
 else
{
 if(frag.str.substring(1,4) == "!--")
{
 frag = _tag_comment(frag);
}
 else
{
 if(frag.str.substring(1,9) == "![CDATA[")
{
 frag = _tag_cdata(frag);
}
 else
{
 if(frag.str.substring(1,frag.end.length + 3) == "/" + frag.end + ">" || _strip(frag.str.substring(1,frag.end.length + 3)) == "/" + frag.end)
{

 frag.str = frag.str.substring(frag.end.length + 3,frag.str.length);
 frag.end = "";
 return frag;
}
 else
{
 frag = _tag_element(frag);
}
}
}
}

}
}
 return "";
}




function _tag_element(frag)
{

 var close = frag.str.indexOf(">");
 var empty = (frag.str.substring(close - 1,close) == "/");
 if(empty)
{
 close -= 1;
}

 var starttag = _normalize(frag.str.substring(1,close));
 var nextspace = starttag.indexOf(" ");
 var attribs = new String();
 var name = new String();
 if(nextspace != -1)
{
 name = starttag.substring(0,nextspace);
 attribs = starttag.substring(nextspace + 1,starttag.length);
}
 else
{
 name = starttag;
}

 var thisary = frag.ary.length;
 frag.ary[thisary] = new _element();
 frag.ary[thisary].name = _strip(name);
 if(attribs.length > 0)
{
 frag.ary[thisary].attributes = _attribution(attribs);
}
 if(!empty)
{


 var contents = new _frag();
 contents.str = frag.str.substring(close + 1,frag.str.length);
 contents.end = name;
 contents = _compile(contents);
 frag.ary[thisary].contents = contents.ary;
 frag.str = contents.str;
}
 else
{
 frag.str = frag.str.substring(close + 2,frag.str.length);
}
 return frag;
}

function _tag_pi(frag)
{
 var close = frag.str.indexOf("?>");
 var val = frag.str.substring(2,close);
 var thisary = frag.ary.length;
 frag.ary[thisary] = new _pi();
 frag.ary[thisary].value = val;
 frag.str = frag.str.substring(close + 2,frag.str.length);
 return frag;
}

function _tag_comment(frag)
{
 var close = frag.str.indexOf("-->");
 var val = frag.str.substring(4,close);
 var thisary = frag.ary.length;
 frag.ary[thisary] = new _comment();
 frag.ary[thisary].value = val;
 frag.str = frag.str.substring(close + 3,frag.str.length);
 return frag;
}

function _tag_cdata(frag)
{
 var close = frag.str.indexOf("]]>");
 var val = frag.str.substring(9,close);
 var thisary = frag.ary.length;
 frag.ary[thisary] = new _chardata();
 frag.ary[thisary].value = val;
 frag.str = frag.str.substring(close + 3,frag.str.length);
 return frag;
}




function _attribution(str)
{
 var all = new Array();
 while(1)
{
 var eq = str.indexOf("=");
 if(str.length == 0 || eq == -1)
{
 return all;
}

 var id1 = str.indexOf("\'");
 var id2 = str.indexOf("\"");
 var ids = new Number();
 var id = new String();
 if((id1 < id2 && id1 != -1) || id2 == -1)
{
 ids = id1;
 id = "\'";
}
 if((id2 < id1 || id1 == -1) && id2 != -1)
{
 ids = id2;
 id = "\"";
}
 var nextid = str.indexOf(id,ids + 1);
 var val = str.substring(ids + 1,nextid);

 var name = _strip(str.substring(0,eq));
 all[name] = _entity(val);
 str = str.substring(nextid + 1,str.length);
}
 return "";
}




function _prolog(str)
{
 var A = new Array();

 if (_Xparse_isSplitSupported){
 A = str.split("\r\n");
 str = A.join("\n");
 A = str.split("\r");
 str = A.join("\n");
}else{
 A = splitOld(str, "\r\n");
 str = joinOld(A, "\n");
 A = splitOld(str, "\r");
 str = joinOld(A, "\n");
}

 var start = str.indexOf("<");
 if(str.substring(start,start + 3) == "<?x" || str.substring(start,start + 3) == "<?X" )
{
 var close = str.indexOf("?>");
 str = str.substring(close + 2,str.length);
}
 var start = str.indexOf("<!DOCTYPE");
 if(start != -1)
{
 var close = str.indexOf(">",start) + 1;
 var dp = str.indexOf("[",start);
 if(dp < close && dp != -1)
{
 close = str.indexOf("]>",start) + 2;
}
 str = str.substring(close,str.length);
}
 return str;
}



function _strip(str)
{
 var A = new Array();

 if (_Xparse_isSplitSupported){
 A = str.split("\n");
 str = A.join("");
 A = str.split(" ");
 str = A.join("");
 A = str.split("\t");
 str = A.join("");
}else{
 A = splitOld(str, "\n");
 str = joinOld(A, "");
 A = splitOld(str, " ");
 str = joinOld(A, "");
 A = splitOld(str, "\t");
 str = joinOld(A, "");
}

 return str;
}



function _normalize(str)
{
 var A = new Array();

 if (_Xparse_isSplitSupported){
 A = str.split("\n");
 str = A.join(" ");
 A = str.split("\t");
 str = A.join(" ");
}else{
 A = splitOld(str, "\n");
 str = joinOld(A, " ");
 A = splitOld(str, "\t");
 str = joinOld(A, " ");
}
 
 
 return str;
}



function _entity(str)
{
 var A = new Array();

 
 if (_Xparse_isSplitSupported){
 A = str.split("&lt;");
 str = A.join("<");
 A = str.split("&gt;");
 str = A.join(">");
 A = str.split("&quot;");
 str = A.join("\"");
 A = str.split("&apos;");
 str = A.join("\'");
 A = str.split("&amp;");
 str = A.join("&");

 while (str.indexOf('&#') > -1){
 var pos1 = str.indexOf('&#');
 var pos2 = str.indexOf(';', pos1);
 var ent = str.substring(pos1, pos2+1);
 var charNum = parseInt('0' + ent.substring(2));
 
 if (charNum.valueOf() > 0){
 if (_Xparse_isFromCharCodeSupported) 
 thisChar = String.fromCharCode(charNum);
 else 
 thisChar=chr(charNum-1);
};
 
 A = str.split(ent);
 str = A.join(thisChar);
}

}else{
 A = splitOld(str, "&lt;");
 str = joinOld(A, "<");
 A = splitOld(str, "&gt;");
 str = joinOld(A, ">");
 A = splitOld(str, "&quot;");
 str = joinOld(A, "\"");
 A = splitOld(str, "&apos;");
 str = joinOld(A, "\'");
 A = splitOld(str, "&amp;");
 str = joinOld(A, "&");

 while (str.indexOf('&#') > -1){
 var pos1 = str.indexOf('&#');
 var pos2 = str.indexOf(';', pos1);
 var ent = str.substring(pos1, pos2+1);
 var charNum = parseInt('0' + ent.substring(2));

 if (charNum.valueOf() > 0){
 if (_Xparse_isFromCharCodeSupported) 
 thisChar = String.fromCharCode(charNum);
 else 
 thisChar=chr(charNum-1);
};
 
 A = splitOld(str, ent);
 str = joinOld(str, thisChar);
}
}
 
 return str;
}





function splitOld(String, Sep){
 var NewArray = new Array;
 var Chunk = String;
 Sep = Sep.substring(0, 1);
 
 while (Chunk.indexOf(Sep) > -1){
 NextSep = Chunk.indexOf(Sep);
 NewArray[NewArray.length] = Chunk.substring(0, NextSep);
 Chunk = Chunk.substring(NextSep+1);
}

 NewArray[NewArray.length] = Chunk; 
 return NewArray;
}




function joinOld(theArray, Sep){
 Sep = Sep.substring(0, 1);
 
 if (theArray.length == 0) 
 NewString = '';
 else 
 NewString = theArray[0];
 
 for (var i = 1; i < theArray.length; i++){
 NewString = NewString + Sep + theArray[i];
}
 
 return NewString;
}

function CheckTree(myName)
{
 this.myName = myName;

 this.root = null;


 this.countAllLevels = false;

 this.checkFormat = '(%n%)';

 this.evtProcessed = navigator.userAgent.indexOf('Safari') > -1 ? 'safRtnVal' : 'returnValue';

 CheckTree.list[myName] = this;
};
CheckTree.list = [];

CheckTree.prototype.init = function(){with (this)
{
 if (!document.getElementById) return;
 root = document.getElementById('tree-' + myName);
 if (root)
{
 var lists = root.getElementsByTagName('ul');
 for (var ul = 0; ul < lists.length; ul++)
{

 lists[ul].style.display = 'none';
 lists[ul].treeObj = this;
 lists[ul].setBoxStates = setBoxStates;

 var fn = new Function('e', 'this.setBoxStates(e)');

 if (lists[ul].addEventListener && navigator.vendor != 'Apple Computer, Inc.')
{
 lists[ul].addEventListener('click', fn, false);
}
 else lists[ul].onclick = fn;
}

 root.treeObj = this;
 root.setBoxStates = setBoxStates;
 if (root.addEventListener && navigator.vendor != 'Apple Computer, Inc.')
{

 root.addEventListener('click', new Function('e', myName + '.click(e)'), false);
}
 else{
 root.onclick = new Function('e', myName + '.click(e)'); 
}

 root.setBoxStates({}, true, true);

 var nodes = root.getElementsByTagName('li');
 for (var li = 0; li < nodes.length; li++)
{
 if (nodes[li].id.match(/^show-/))
{
 nodes[li].className = (nodes[li].className=='last' ? 'plus-last' : 'plus');
}
}
}
}};

CheckTree.prototype.click = function(e){with (this)
{
 e = e || window.event;
 var elm = e.srcElement || e.target;



 if (!e[evtProcessed] && elm.id && elm.id.match(/^check-(.*)/))
{
 var tree = document.getElementById('tree-' + RegExp.$1);
 if (tree) tree.setBoxStates(e, true, false);
}

 while (elm)
{

 if (elm.tagName.match(/^(input|ul)/i)) break;

 if (elm.id && elm.id.match(/^show-(.*)/))
{
 var targ = document.getElementById('tree-' + RegExp.$1);
 if (targ.style)
{
 var col = (targ.style.display == 'none');
 targ.style.display = col ? 'block' : 'none';

 elm.className = elm.className.replace(col?'plus':'minus', col?'minus':'plus');
}
 break;
}

 elm = elm.parentNode;
}
}};






function setBoxStates(e, routingDown, countOnly){with (this)
{

 if (!this.childNodes) return;

 e = e || window.event;
 var elm = e.srcElement || e.target;



 if (elm && elm.id && elm.id.match(/^check-(.*)/) && !routingDown && !e[treeObj.evtProcessed])
{
 var refTree = document.getElementById('tree-' + RegExp.$1);
 if (refTree)
{
 refTree.setBoxStates(e, true, countOnly);
 e[treeObj.evtProcessed] = true;
}
}

 var allChecked = true, boxCount = 0, subBoxes = null;

 var thisLevel = this.id.match(/^tree-(.*)/)[1];
 var parBox = document.getElementById('check-' + thisLevel);

 for (var li = 0; li < childNodes.length; li++)
{
 for (var tag = 0; tag < childNodes[li].childNodes.length; tag++)
{
 var child = childNodes[li].childNodes[tag];
 if (!child) continue;
 if (child.tagName && child.type && child.tagName.match(/^input/i) &&
 child.type.match(/^checkbox/i))
{

 if (routingDown && parBox && elm && elm.id && elm.id.match(/^check-/) && !countOnly)
 child.checked = parBox.checked;

 allChecked &= child.checked;
 if (child.checked) boxCount++;
}

 if (child.tagName && child.tagName.match(/^ul/i) && (!e[treeObj.evtProcessed] || routingDown))
 child.setBoxStates(e, true, countOnly);
}
}


 if (!routingDown) e[treeObj.evtProcessed] = true;


 if (parBox && parBox != elm && !countOnly) parBox.checked = allChecked;

 if (treeObj.countAllLevels)
{
 boxCount = 0;
 var subBoxes = this.getElementsByTagName('input');
 for (var i = 0; i < subBoxes.length; i++) if (subBoxes[i].checked) boxCount++;
}

 var countElm = document.getElementById('count-' + thisLevel);
 if (countElm)
{
 while (countElm.firstChild) countElm.removeChild(countElm.firstChild);
 if (boxCount) countElm.appendChild(document.createTextNode(treeObj.checkFormat.replace('%n%',
 boxCount)));
}
}};



function miracle_init(){
 miracleLoadConfig();

 external_links();


 init_Popups();
 init_wysiwyg();
}



function miracleErrorLogging(){
 window.onerror = function(message, url, line){
 var query="message="+escape(message);
 query+="&url="+escape(url);
 query+="&line="+escape(line);
 query+="&referer="+escape(document.referrer);
 var img=new Image();
 img.src="/javascript_error.png?"+query;
}
}



function removeEvent(obj, evType, fn, useCapture){
 if (obj.removeEventListener){
 obj.removeEventListener(evType, fn, useCapture);
 return true;
}else{
 if (obj.detachEvent){
 var r = obj.detachEvent("on"+evType, fn);
 return r;
}else{
 alert("Handler could not be removed");
}
}
}


function external_links(){
 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++){
 var anchor = anchors[i]; 
 if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external"){
 anchor.target = "_blank"; 
}
}

 var anchors = document.getElementsByTagName("form"); 
 for (var i=0; i<anchors.length; i++){
 var anchor = anchors[i]; 
 if (anchor.getAttribute("rel") == "external"){
 anchor.target = "_blank"; 
}
}
}



function isValidEmail(address){
 var pattern=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
 tmp=pattern.test(address);
 return tmp;
}


function isModuleLoaded(name){
 var module=document.getElementById("module_"+name);
 return module;
}



function server_action(module, method, parameters, debug){




 MySer = new WddxSerializer;
 MyWDDXPacket = MySer.serialize(parameters);

 Des = new WddxDeserializer();




 var xmlHttp = XmlHttp.create();
 if (xmlHttp){
 xmlHttp.open("POST", "/serveraction/", false);
 xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
 xmlHttp.send("module="+module+"&method="+method+"&packet="+escape(MyWDDXPacket));
 packet=xmlHttp.responseText;

 if (debug){
 alert("PACKET: "+packet);
}
 tmp=Des.deserialize(packet);
}else{
 tmp=false;
}



 return tmp;
}

function server_action_async(module, method, parameters, funct, debug){

 MySer = new WddxSerializer;
 MyWDDXPacket = MySer.serialize(parameters);
 Des = new WddxDeserializer();

 var xmlHttp = XmlHttp.create();
 if (xmlHttp){
 xmlHttp.open("POST", "/serveraction/", true);
 xmlHttp.onreadystatechange = function (){
 if (xmlHttp.readyState == 4){
 packet=xmlHttp.responseText;
 tmp=packet;
 if (debug){
 alert(packet);
}
 tmp=Des.deserialize(packet);
 funct(tmp);
}
}
 xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
 xmlHttp.send("module="+module+"&method="+method+"&packet="+escape(MyWDDXPacket));
 tmp=true;
}else{
 tmp=false;
}
 return tmp;
}


function server_action_wait(on){
 var div=document.getElementById("serveraction_loading");
 div.style.visibility=on?'visible':'hidden';
}

function debug_watch(s){
 var debug=document.getElementById("debug");
 if (!debug){return;}
 debug.firstChild.nodeValue=s+" / "+debug.firstChild.nodeValue;
}

function isFunction(a){
 return typeof a == 'function';
}



var base64s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function base64_encode(decStr){
decStr=escape(decStr); 
 var bits, dual, i = 0, encOut = '';
 while(decStr.length >= i + 3){
 bits =
 (decStr.charCodeAt(i++) & 0xff) <<16 |
 (decStr.charCodeAt(i++) & 0xff) <<8 |
 decStr.charCodeAt(i++) & 0xff;
 encOut +=
 base64s.charAt((bits & 0x00fc0000) >>18) +
 base64s.charAt((bits & 0x0003f000) >>12) +
 base64s.charAt((bits & 0x00000fc0) >> 6) +
 base64s.charAt((bits & 0x0000003f));
}
 if(decStr.length -i > 0 && decStr.length -i < 3){
 dual = Boolean(decStr.length -i -1);
 bits =
 ((decStr.charCodeAt(i++) & 0xff) <<16) |
 (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
 encOut +=
 base64s.charAt((bits & 0x00fc0000) >>18) +
 base64s.charAt((bits & 0x0003f000) >>12) +
 (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +
 '=';
}
 return encOut
}

function base64_decode(encStr){
 var bits, decOut = '', i = 0;
 for(; i<encStr.length; i += 4){
 bits =
 (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 |
 (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | 
 (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
 base64s.indexOf(encStr.charAt(i +3)) & 0xff;
 decOut += String.fromCharCode(
 (bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
}
 if(encStr.charCodeAt(i -2) == 61)
 undecOut=decOut.substring(0, decOut.length -2);
 else if(encStr.charCodeAt(i -1) == 61)
 undecOut=decOut.substring(0, decOut.length -1);
 else undecOut=decOut;
 
 return unescape(undecOut); 
}

function encode_utf8(rohtext){

 rohtext = rohtext.replace(/\r\n/g,"\n");
 var utftext = "";
 for(var n=0; n<rohtext.length; n++)
{

 var c=rohtext.charCodeAt(n);

 if (c<128)
 utftext += String.fromCharCode(c);

 else if((c>127) && (c<2048)){
 utftext += String.fromCharCode((c>>6)|192);
 utftext += String.fromCharCode((c&63)|128);}

 else{
 utftext += String.fromCharCode((c>>12)|224);
 utftext += String.fromCharCode(((c>>6)&63)|128);
 utftext += String.fromCharCode((c&63)|128);}
}
 return utftext;
}

function decode_utf8(utftext){
 var plaintext = ""; var i=0; var c=c1=c2=0;

 while(i<utftext.length)
{
 c = utftext.charCodeAt(i);
 if (c<128){
 plaintext += String.fromCharCode(c);
 i++;}
 else if((c>191) && (c<224)){
 c2 = utftext.charCodeAt(i+1);
 plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
 i+=2;}
 else{
 c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
 plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
 i+=3;}
}
 return plaintext;
}

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 
 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 c.substring(nameEQ.length,c.length);
}
 return null;
}

function inArray(array,value)
{
 var i=0;
 while (array[i]!=value && i<array.length)
{i++;}
 return (array[i]==value);
};

function delElementWithValue(array,value)
{
 var i;
 var newarray=new Array();
 for (i=0; i<array.length; i++)
{
 if (array[i]!=value)
{newarray[newarray.length]=array[i];}
}
 return newarray;
}

function indexWithValue(array,value)
{
 var i=0;
 while (array[i]!=value && i<array.length)
{
 i++;
}

 return i;
}

function getSelectedOptions(select){
 var tmp=new Array();
 var j=0;
 for (var i=0; i<select.options.length; i++){
 if (select.options[i].selected){
 tmp[j]=i;
 j++;
}
}
 return tmp;
}

function getFirstBiggerOption(select, option_text){
 var i=0;
 while (i<select.length && strcmp(select[i].firstChild.nodeValue, option_text)<=0){
 i++;
}
 return select[i];
}



function strcmp(str1 , str2){
 function stringCode(str){
 str = str.replace('á',"azzz");
 str = str.replace('é',"ezzz");
 str = str.replace('í',"izzz");
 
 str = str.replace('ó',"oxxx");
 str = str.replace('ö',"oyyy");
 str = str.replace('ő',"ozzz");
 
 str = str.replace('ú',"uxxx");
 str = str.replace('ü',"uyyy");
 str = str.replace('ű',"uzzz");
 
 str = str.replace('Á',"AZZZ");
 str = str.replace('é',"EZZZ");
 str = str.replace('í',"IZZZ");
 
 str = str.replace('ó',"OXXX");
 str = str.replace('ö',"OYYY");
 str = str.replace('ő',"OZZZ");
 
 str = str.replace('ú',"UXXX");
 str = str.replace('ü',"UYYY");
 str = str.replace('ű',"UZZZ");
 return str;
}

 var string1=stringCode(str1); 
 var string2=stringCode(str2); 
 
 if (string1<string2) val=-1;
 if (string1==string2) val=0;
 if (string1>string2) val=1;

 return (val);
}

function sleep(millisec){
 var date=new Date();
 var curDate=null;
 do{
 var curDate=new Date(); 
}while (curDate-date<millisec);
}

function loadExternalCSS(url){

 var node=document.createElement("link");
 node.setAttribute("rel", "stylesheet");
 node.setAttribute("type", "text/css");
 node.setAttribute("media", "screen");
 node.setAttribute("href", url);
 document.getElementsByTagName("head")[0].appendChild(node);
}


function loadExternalJS(url){

 var head=document.getElementsByTagName("head")[0];
 var node=document.createElement("script");
 node.setAttribute("type", "text/javascript");
 node.setAttribute("loaded", false);
 node.setAttribute("src", url);
 node.setAttribute("id", url);
 node.onload=function (){
 this.setAttribute("loaded", true); 
}
 document.getElementsByTagName("head")[0].appendChild(node);
 while (document.getElementById(url).getAttribute("loaded")!=true){
 var i=i+1;
}
}

function miracleLoadConfig(){
 var metas=document.getElementsByTagName("meta");
 for (var i=0; i<metas.length; i++){
 var name=new String(metas[i].getAttribute("name"));
 var content=metas[i].getAttribute("content");
 if (name.substring(0, 8)=="miracle_"){
 miracleConfig[name]=content;
}
}
}

function leadingZero(nr){
 if (nr < 10) nr = "0" + nr;
 return nr;
}