Emv.Effects = {

	barToggleContent: function(contentId, openerId, openClass) {

		contentObj = document.getElementById(contentId);
	    openerObj  = document.getElementById(openerId);
	    if (!contentObj) {

	    	return;
	    }

        tmpClassName = contentObj.className.replace(new RegExp(openClass+"\\b"), "");

        if (tmpClassName != contentObj.className) {

            //opener found so close it
            contentObj.className = tmpClassName;
            if (openerObj) {

                openerObj.className = openerObj.className.replace(new RegExp(openClass+"\\b"), "");
            }
        } else {

            //opener not found so remove it
            contentObj.className += " " + openClass;

            if (openerObj) {

                openerObj.className += " " + openClass;
            }
        }
	},

	addClassName: function(objectId, objectClass) {

		contentObj = document.getElementById(objectId);
	    if (!contentObj) {

	    	return;
	    }

        if (!contentObj.className) {

            contentObj.className = objectClass;
            return;
        }

        tmpClassName = contentObj.className.replace(new RegExp(objectClass+"\\b"),"");

        if (tmpClassName == contentObj.className) {

            contentObj.className += " " + objectClass;
        }
	},

	removeClassName: function(objectId, objectClass) {

		contentObj = document.getElementById(objectId);
	    if (!contentObj) {

	    	return;
	    }

        if (!contentObj.className) {

            contentObj.className = '';
            return;
        }

        tmpClassName = contentObj.className.replace(new RegExp(objectClass+"\\b"),"");

        if (tmpClassName != contentObj.className) {

            contentObj.className = tmpClassName;
        }
	},

	switchClassNames: function(objectId, classOne, classTwo) {

		contentObj = document.getElementById(objectId);
	    if (!contentObj) {

	    	return;
	    }

    	//has class attrib?
        if (!contentObj.className) {

            contentObj.className = classOne;
            return;
        }
        //check for first class
        if(contentObj.className.indexOf(classOne) >= 0)
        {
        	Emv.Effects.removeClassName(objectId, classOne);
        	Emv.Effects.addClassName(objectId, classTwo);
        }
        else if(contentObj.className.indexOf(classTwo) >= 0)
        {
        	Emv.Effects.removeClassName(objectId, classTwo);
        	Emv.Effects.addClassName(objectId, classOne);
        }
	},

	switchInnerHtml: function(objectId, htmlOne, htmlTwo) {

		contentObj = document.getElementById(objectId);
		if (!contentObj) {

			return;
		}

		//has class attrib?
		if (!contentObj.innerHTML) {

			contentObj.innerHTML = htmlOne;
			return;
		}

		// check for first html
		if (contentObj.innerHTML == htmlOne) {

			contentObj.innerHTML = htmlTwo;
		} else {

			contentObj.innerHTML = htmlOne;
		}
	},
	setValue: function(id, value)
	{
		elem = document.getElementById(id);
		if(elem)
		{
			elem.innerHTML = value;
		}
	},
	clearValue: function(id)
	{
		Emv.Effects.setValue(id, '');
	}
};


Emv.Effects.Ajaxloader = {

	loadLoader: function (objectId, position) {

		ajaxLoaderId = objectId + 'AjaxLoader';

		if (null === document.getElementById(objectId) || null !== document.getElementById(ajaxLoaderId)) {

			return;
		}

		var loaderImage = document.createElement("img");
		loaderImage.setAttribute("id", ajaxLoaderId);
		loaderImage.setAttribute("src", "/jslib/int/ajax-loader.gif");
		loaderImage.setAttribute("style", "vertical-align: middle;");

		if (position == 'append') {

			document.getElementById(objectId).appendChild(loaderImage);
		} else {

			document.getElementById(objectId).insertBefore(loaderImage, document.getElementById(objectId).firstChild);
		}
	},

	removeLoader: function (objectId) {

		ajaxLoaderId = objectId + 'AjaxLoader';

		if (null === document.getElementById(ajaxLoaderId) || null === document.getElementById(objectId)) {

			return;
		}

		document.getElementById(objectId).removeChild(document.getElementById(ajaxLoaderId));
	},

	appendLoader: function (objectId) {

	    this.loadLoader(objectId, 'append');
	},

	prependLoader: function (objectId) {

		this.loadLoader(objectId, 'prepend');
	},

	setToImageId: function (objectId)
	{
		var elem = document.getElementById(objectId);
		elem.src = "/jslib/int/ajax-loader.gif";
	}
};

Emv.Effects.Overlay = {

	overlays: new Array(),

	add: function(overlay) {

		this.overlays[this.overlays.length] = overlay;
	},

	get: function(id) {

		for (var i=0; i<this.overlays.length; i++) {

            if (this.overlays[i].id == id) {

                return this.overlays[i];
            }
        }

        return false;
	},

	show: function(id) {

		var overlay = this.get(id);

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

			return false;
		}

		overlay.render(document.body);
		overlay.center();
		overlay.show();
		overlay.cfg.setProperty("zIndex", 9999);
	},

	hide: function(id) {

		var overlay = this.get(id);

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

			return false;
		}

		overlay.hide();
	}
};

Emv.Effects.Overlay.Image = {

	show: function(overlayId, imgSrc, imgAlt) {

		var overlayIdInt = overlayId;
		var imgSrcInt    = imgSrc;
		var imgAltInt    = imgAlt;

    	img = document.getElementById(overlayIdInt + 'Image');
    	img.src = '/jslib/int/ajax-loader.gif';

        Emv.Effects.Overlay.show(overlayIdInt);

        imageObj = new Image();
        imageObj.onload = function () {

        	img = document.getElementById(overlayIdInt + 'Image');
            img.src = this.src;

    		if ("undefined" != typeof(imgAltInt)) {

    			img.alt = imgAltInt;
    		}

    		document.getElementById(overlayIdInt + '_content').style.width  = this.width + 'px';
    		document.getElementById(overlayIdInt + '_content').style.height = this.height + 'px';

            Emv.Effects.Overlay.get(overlayIdInt).center();
            this.onload = null;
        };
        imageObj.src = imgSrcInt; /* :NOTICE: src MUST be set AFTER onload definition! */
	}
};

/**
 * Static Access to add Checkbox IDs to a Group of Checkboxes
 * ->  MultiCheckboxToggle.addNewCheckboxForGroup('checkbox_id', 'group_name');
 *     MultiCheckboxToggle.addNewCheckboxForGroup('checkbox2_id', 'group_name');
 * with:
 *   MultiCheckboxToggle.toogleCheckboxes('group_name', check_bool);
 *   All Checkboxes are checked for check_bool == true
 *   and unchecked for check_bool == false
 */
Emv.Effects.MultiCheckboxToggle = {
    checkBoxes: new Array(),

    /**
     * Adding a new Checkbox id to group.
     * If the group does not exists it will be created.
     */
    addNewCheckboxIdForGroup: function(id, group)
    {
         if (!this.checkBoxes[group])
         {
             this.checkBoxes[group] = new Array();
         }

         this.checkBoxes[group][this.checkBoxes[group].length] = id;
    },

    /**
     * Toogles all checkboxes for the group on/off if toogle == true/false
     */
    toogleCheckboxes: function (group, toggle)
    {
        for (i = 0; i < this.checkBoxes[group].length; i++)
        {
            var cCB = document.getElementById(this.checkBoxes[group][i]);
            cCB.checked = toggle;
        }
    },

    /**
     * Toogles master based on all sub checkboxes
     */
    clickSubCheckboxes: function (group, master)
    {
        cCB = document.getElementById(this.checkBoxes[group][0]);
        newmaster = cCB.checked;

        for (i = 1; i < this.checkBoxes[group].length; i++)
        {
            cCB = document.getElementById(this.checkBoxes[group][i]);
            newmaster = newmaster && cCB.checked;
        }

        document.getElementById(master).checked = newmaster;
    }
};

/**
 * Static Access to add togglebar IDs to a Group of Togglebars
 * ->  MultiTogglebarToggle.addNewTogglebarIdForGroup('checkbox_id', 'group_name');
 *     MultiTogglebarToggle.addNewTogglebarIdForGroup('checkbox2_id', 'group_name');
 * with:
 *   MultiTogglebarToggle.toogleTogglebars('group_name', check_bool);
 *   All Checkboxes are checked for check_bool == true
 *   and unchecked for check_bool == false
 */
Emv.Effects.MultiTogglebarToggle = {
	togglebars: new Array(),
	togglebarStati: new Array(),

	/**
	 * Adding a new togglebar id to group.
	 * If the group does not exists it will be created.
	 */
	addNewTogglebarIdForGroup: function(id, group)
	{
		if (!this.togglebars[group])
		{
			this.togglebars[group]     = new Array();
			this.togglebarStati[group] = true;
		}

		this.togglebars[group][this.togglebars[group].length] = id;
	},

	/**
	 * Toogles all togglebars for the group on/off
	 */
	toogleTogglebars: function (group)
	{
		if (!this.togglebars[group]) {

			return false;
		}

		if ("undefined" == typeof(this.togglebarStati[group])) {

			this.togglebarStati[group] = false;
		}

		var i=0;
		for (i=0; i < this.togglebars[group].length; i++) {

			if (this.togglebarStati[group] == true) {

				Emv.Effects.removeClassName(this.togglebars[group][i], 'open');
				Emv.Effects.removeClassName(this.togglebars[group][i] + '_opener', 'open');
			} else {

				Emv.Effects.addClassName(this.togglebars[group][i], 'open');
				Emv.Effects.addClassName(this.togglebars[group][i] + '_opener', 'open');
			}
		}

		this.togglebarStati[group] = !this.togglebarStati[group];
	}
};


function barToggleContent(contentId, openerId, openClass) {

	return Emv.Effects.barToggleContent(contentId, openerId, openClass);
}

function addClassName(objectId, objectClass) {

	return Emv.Effects.addClassName(objectId, objectClass);
}

function delClassName(objectId, objectClass) {

	return Emv.Effects.removeClassName(objectId, objectClass);
}