/**
 * General utility functions
 *
 * Copyright: (c)2007 CK Web Technologies - http://www.ckweb.com.au/
 * Author:    Chris Knowles <chris.knowles@ckweb.com.au>
 * Version:   $Id: Util.js 30 2007-10-06 05:44:46Z Chris $
 */

if (!CKW) {
    var CKW = function(){};
}

CKW.Util =
{
    flash_timer: null,
       
    trim: function(str)
    {
        if (str) {
            return str.replace(/^\s+|\s+$/g, '');
        }
        return false;
    },

    mask: function(elm, mask, percentage)
    {
        var hidden_elm = CKW.DOM.id(elm);
        var mask_elm = CKW.DOM.id(mask);
        hidden_elm.style.zIndex = 0;
        mask_elm.style.zIndex = 1;
        CKW.setTransparency(mask, percentage);
    },

    unmask: function(elm, mask)
    {
        var hidden_elm = CKW.DOM.id(elm);
        var mask_elm = CKW.DOM.id(mask);
        hidden_elm.style.zIndex = 1;
        mask_elm.style.zIndex = -1;
        CKW.setTransparency(mask, 100);
    },

    hideSelects: function(id)
    {
        var elm = CKW.DOM.id(id);
        elm.onmouseover = function()
        {
            var selects = CKW.tags("select");
            for (var i = 0; i < selects.length; i++) {
                selects[i].style.visibility = "hidden";
            }
        };
        elm.onmouseout = function()
        {
            var selects = CKW.tags('select');
            for (var i = 0; i < selects.length; i++) {
                selects[i].style.visibility = "visible";
            }
        }
    },

    hideFlash: function(id)
    {
        var elm = CKW.DOM.id(id);
        elm.onmouseover = function()
        {
            clearTimeout(CKW.flash_timer);
            var flashes = CKW.tags('div');
            for (var i = 0; i < flashes.length; i++) {
                if (flashes[i].className == 'ckw-flash') {
                    flashes[i].style.visibility = "hidden";
                }
            }
        };
        elm.onmouseout = function()
        {
            CKW.flash_timer = window.setTimeout('CKW.showFlash()', 600);
        };
    },

    showFlash: function()
    {
        var flashes = CKW.tags('div');
        for (var j = 0; j < flashes.length; j++) {
            if (flashes[j].className == 'ckw-flash') {
                flashes[j].style.visibility = "visible";
            }
        }
        clearTimeout(CKW.flash_timer);
    },

    includeFlash: function(id, swf_file, width, height, version, bg_color)
    {
        var elm = CKW.DOM.id(id);
        if (elm) {
            var swf = new SWFObject(swf_file, id + "_swf", width, height, version, bg_color);
            swf.write(id);
        }
    },

    toggleContent: function(show, hide, display_type)
    {
        if (!display_type) {
            display_type = 'block';
        }
        var hide_elm = CKW.DOM.id(hide);
        if (hide_elm) {
            hide_elm.style.display = 'none';
        }
        if (show) {
            var show_elm = CKW.DOM.id(show).style.display = display_type;
        }
    },

    toggleTextfieldMessage: function(id, message)
    {
        var field = CKW.DOM.id(id);
        field.onfocus = function()
        {
            if (this.value == message) {
                this.value = '';
                return;
            }
        };
        field.onblur = function()
        {
            if (this.value == '') {
                this.value = message;
                return;
            }
        }
    },

    /**
     * Sets the transparency of an element
     *
     * @var string id      - id of the element to make semi-transparent
     * @var int percentage - the percentage transparency
     */
    setTransparency: function(id, percentage)
    {
        var mask = CKW.DOM.id(id);
        mask.style.KHTMLOpacity = percentage / 100;
        mask.style.MozOpacity = percentage / 100;
        mask.style.opacity = percentage / 100;
        mask.style.filter = "alpha(opacity:" + percentage + ")";
    },

    /**
     * Redirects directly from a select control without clicking a submit button.
     * @var string id  - id of the select element
     *
     * NOTE: It's assumed that the values of the selects option fields are url's
     */
    selectRedirect: function(id, new_window)
    {
        var select = CKW.DOM.id(id);
        select.onchange = function()
        {
            var url = this.options[this.selectedIndex].value;
            if (url) {
                if (new_window) {
                    window.open(url, '_blank');
                } else {
                    window.location = url;
                }
            }
        }
    },

    blurAnchors: function(id)
    {
        if (!id) {
            id = document;
        } else {
            id = CKW.DOM.id(id);
        }
        var tags = CKW.tags("a");
        if (tags.length > 0) {
            for (var i = 0; i < tags.length; i++) {
                tags[i].onfocus = function(){this.blur()};
            }
        }
    },

    blurInputs: function(id)
    {
        if (!id) {
            id = document;
        } else {
            id = CKW.DOM.id(id);
        }
        var tags = CKW.tags("input");
        if (tags.length > 0) {
            for (var i = 0; i < tags.length; i++) {
                tags[i].onclick = function(){this.style.outline = 0;};
            }
        }
    },
    
    setNewWindowLinks: function(class_name)
    {
        if (!class_name) {
            class_name = 'ckw_new_win';
        }
        var tags = CKW.tags('a');
        var re = new RegExp(class_name);
        if (tags.length > 0) {
            for (var i = 0; i < tags.length; i++) {
                if (tags[i].className.search(re) != -1) {
                    tags[i].onclick = function()
                    {
                        window.open(this.href, '_blank');
                        return false;
                    }
                }
            }
        }
    },

    setBackLinks: function(class_name)
    {
        if (!class_name) {
            class_name = 'ckw_back';
        }
        var tags = CKW.tags('a');
        var re = new RegExp(class_name);
        if (tags.length > 0) {
            for (var i = 0; i < tags.length; i++) {
                if (tags[i].className.search(re) != -1) {
                    tags[i].onclick = function()
                    {
                        window.history.go(-1);
                        return false;
                    }
                }
            }
        }
    },
        
    loadAudioPlayer: function(url, width, height, autostart, showcontrols, showstatusbar, elm)
    {
        if (navigator.userAgent.toLowerCase().indexOf("windows") != -1) {
        	var type = "application/x-mplayer2";
        } else {
            var type = "audio/mpeg"
        }
    
        var player = "";
        player += "<object width='" + width + "' height='" + height + "' id='os_player'>";
        player += "<param name='type' value='" + type + "'>";
        player += "<param name='src' value='" + url + "'>";
        player += "<param name='showstatusbar' value='" + showstatusbar + "'>";
        player += "<param name='autostart' value='" + autostart + "'>";
        player += "<param name='showcontrols' value='" + showcontrols + "'>";
        player += "<embed id='audio-player' src ='" + url + "' type='" + type + "' showcontrols='" + showcontrols + "' autoplay='true' autostart='" + autostart + "' width='" + width + "' height='" + height + "' controller='1' showstatusbar='" + showstatusbar + "'></embed>";
        player += "</object>";
    
        CKW.DOM.setContent(elm, player);
    
    },
    
    stylesheets: function()
    {
        return document.styleSheets[0]
    }

}

var $U = CKW.Util;
