/* handling onload functions.
 * NEVER USE WINDOW.ONLOAD!!!
 */

var jsTranslator = new Object();

function translate(text)
{
    if (typeof jsTranslator[text] == 'undefined')
    {
        return text;
    }
    else
    {
        return jsTranslate[text];
    }
}

onloadFunctions = new Array();

var addFunctionToLoad = function(handle, param)
{
    onloadFunctions.push({
        func : handle,
        par : param
    });
};

jQuery(document).ready(function(){
    for(var i=0;i<onloadFunctions.length;i++)
    {
        var row = onloadFunctions[i];
        var f = row.func;
        var p = row.par;
        f(p);
    }
});

var gotoUrl = function(url, p)
{
    var form = document.createElement('form');
    form.method = "post";
    form.action = url;
    form.id = "gotourl_form";
    for(var key in p)
    {
        var value = p[key];
        var input = document.createElement('input');
        input.name = key;
        input.value = value;
        input.type = "hidden";
        form.appendChild(input);
    }
    jQuery('body').append(jQuery(form));
    jQuery('#gotourl_form').submit();
};

String.prototype.trim = function()
{
    return this.replace(/^\s+|\s+$/g,"")
};

var getTextSelection = function(){
  var t = '';
  if(window.getSelection){
    t = window.getSelection();
  }else if(document.getSelection){
    t = document.getSelection();
  }else if(document.selection){
    t = document.selection.createRange().text;
  }
  var str = new String(t);
  return str;
}

var addCloseToMessages = function() {
    jQuery('.message').click(function() {this.hide();});
};

addFunctionToLoad(addCloseToMessages);

var addMessageOnTop = function(text) {
    var div = document.createElement('div');
    var textElement = document.createTextNode(text);
    jQuery(div).addClass('message').addClass('message-ok').append(textElement);
    jQuery('#messages').append(div);
};

var addErrorOnTop = function(text) {
    var div = document.createElement('div');
    var textElement = document.createTextNode(text);
    jQuery(div).addClass('message').addClass('message-no').append(textElement);
    jQuery('#messages').append(div);
    addCloseToMessages();
};

var addOverride = function(block_element_id, key, value)
{
   var classNames = jQuery('#'+block_element_id).attr('class').split(' ');
   var newClass = '';
   for(var i = 0; i < classNames.length;i++)
   {
       var matches2 = classNames[i].match(/^overrides-([^-]+)-(.*)$/);
       if (matches2)
       {
           if ((typeof matches2[1] != "undefined") && (typeof matches2[2] != "undefined"))
           {
               if (matches2[1] == key)
               {
                   continue;
               }
           }
       }
       else
       {
           if (classNames[i].length == 0)
           {
               continue;
           }
       }
       newClass += classNames[i] + ' ';
   }
   newClass += 'overrides-'+key+'-'+ value;
   jQuery('#'+block_element_id).attr('class', newClass);
}

var refreshBlock = function(block_element_id, callbackFn) {
   var classNames = jQuery('#'+block_element_id).attr('class').split(' ');
   var data64 = false;
   var overrides = new Object();
   for(var i = 0; i < classNames.length;i++)
   {
       var matches = classNames[i].match(/^data-(.+)$/);
       if (matches)
       {
           if (typeof matches[1] != "undefined")
           {
               data64 = matches[1];
           }
       }
       var matches2 = classNames[i].match(/^overrides-([^-]+)-(.*)$/);
       if (matches2)
       {
           if ((typeof matches2[1] != "undefined") && (typeof matches2[2] != "undefined"))
           {
               overrides[matches2[1]] = matches2[2];
           }
       }
   }
    if (data64)
    {
        var params = new Object();
        params.data = data64;
        for (var k in overrides)
        {
            params['overrides-'+k] = overrides[k];
        }
        
        var bodyClasses = jQuery('body').attr('class').split(' ');
        for(i = 0; i < bodyClasses.length;i++)
        {
           matches = bodyClasses[i].match(/^method-(.+)$/);
           if (matches)
           {
               if (typeof matches[1] != "undefined")
               {
                   params['original-action'] = matches[1];
               }
           }
           
           matches2 = bodyClasses[i].match(/^controller-(.+)$/);
           if (matches2)
           {
               if (typeof matches2[1] != "undefined")
               {
                   params['original-controller'] = matches2[1];
               }
           }
           
        }
        jQuery.post(getBaseUrl('block/refresh'), params, function(data) {
            document.getElementById(block_element_id).innerHTML = data;
            if (callbackFn) callbackFn();
        }, 'html');
    }
}

var getParentCompositeBlockId = function(block_element_id)
{
    var thisId = block_element_id.replace('block-container-', '');
    var parentId = false;
    var composites = jQuery('.block-container-composite');
    for(var i=0;(i<composites.length) && (!parentId);i++)
    {
        var classNames = jQuery(composites[i]).attr('class').split(' ');
        for(var j = 0;(j < classNames.length) && (!parentId);j++)
       {
           var matches = classNames[j].match(/^parent-of-([0123456789-]+)$/);
           if (matches)
           {
               if (typeof matches[1] != "undefined")
               {
                   var childIds = matches[1].split('-');
                   for(var k=0;(k<childIds.length) && (!parentId);k++)
                   {
                       if (childIds[k] == thisId)
                       {
                           parentId = composites[i].id;
                           
                       }
                   }
                   
               }
           }
       }
    }
    return parentId;
}

var customEvents = new Object();

var addFunctionToCustomEvent = function(fn, evt)
{
    if (typeof customEvents[evt] == 'undefined')
    {
        customEvents[evt] = new Array();
    }
    customEvents[evt].push(fn);
}

var fireCustomEvent = function(evt)
{
    if (typeof customEvents[evt] == 'undefined')
    {
        return;
    }
    var fns = customEvents[evt];
    for (var i = 0; i < fns.length; i++)
    {
        var fn = fns[i];
        fn();
    }
}
