src/cm/media/js/client/c_util.js
author rbernard
Thu, 21 Jan 2010 09:16:56 +0100
changeset 113 cf99f4e14534
parent 0 40c8f766c9b8
child 341 053551f213fb
permissions -rw-r--r--
fix ticket 22
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
_changeIds = function(elt, suffix) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
	if (elt.id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
		elt.id =  elt.id + suffix ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
	var c = elt.firstChild ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
	while (c != null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
		_changeIds(c, suffix) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
		c = c.nextSibling ; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
suffix = 0 ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
domDuplicate = function(elt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
	var newElt = elt.cloneNode(true) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
	suffix++ ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
	_changeIds(newElt, '-'+suffix) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	return newElt ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
getDuplicated = function(elt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
	return document.getElementById(elt.id + '-' + suffix) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
logSel = function(selection) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
	log('text :' + selection['text'] + ', start id : ' + selection['start']['elt'].id + ' , start offset : ' + selection['start']['offset'] + ' , end id : ' + selection['end']['elt'].id + 'end offset : ' + selection['end']['offset']) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
log = function (msg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
	var log = document.getElementById("log") ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
	log.innerHTML = log.innerHTML + "<li>" + msg + "</li>" ; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
// from ext
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
urlEncode = function(o){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
    if(!o){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        return "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    var buf = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    for(var key in o){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        var ov = o[key], k = encodeURIComponent(key);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        var type = typeof ov;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        if(type == 'undefined'){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            buf.push(k, "=&");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        }else if(type != "function" && type != "object"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            buf.push(k, "=", encodeURIComponent(ov), "&");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        }else if(CY.Lang.isArray(ov)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
            if (ov.length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
                for(var i = 0, len = ov.length; i < len; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
                    buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
                buf.push(k, "=&");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
    buf.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
    return buf.join("");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
//from ext
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
 * Takes an encoded URL and and converts it to an object. e.g. Ext.urlDecode("foo=1&bar=2"); would return {foo: 1, bar: 2} or Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", true); would return {foo: 1, bar: [2, 3, 4]}.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
 * @param {String} string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
 * @param {Boolean} overwrite (optional) Items of the same name will overwrite previous values instead of creating an an array (Defaults to false).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
 * @return {Object} A literal with members
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
urlDecode = function(string, overwrite){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
    if(!string || !string.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        return {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    var obj = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
    var pairs = string.split('&');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
    var pair, name, value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    for(var i = 0, len = pairs.length; i < len; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        pair = pairs[i].split('=');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        name = decodeURIComponent(pair[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        value = decodeURIComponent(pair[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        if(overwrite !== true){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
            if(typeof obj[name] == "undefined"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                obj[name] = value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
            }else if(typeof obj[name] == "string"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                obj[name] = [obj[name]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                obj[name].push(value);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
            }else{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                obj[name].push(value);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        }else{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
            obj[name] = value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
    return obj;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
areSortedArraysEqual = function (a1, a2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
	if (a1.length != a2.length) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
		return false ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
	for (var i = 0, ilen = a1.length ; i < ilen ; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
		if (a1[i] != a2[i])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
			return false ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
	return true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
} ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
// in place ordering!
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
quicksort = function (vec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
	_quicksort(vec, 0, vec.length-1) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
// cf. http://www.4guysfromrolla.com/webtech/012799-1.shtml
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
_quicksort = function (vec, loBound, hiBound)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
/**************************************************************
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
	This function adapted from the algorithm given in:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
		Data Abstractions & Structures Using C++, by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
		Mark Headington and David Riley, pg. 586.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
	quicksort is the fastest array sorting routine for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
	unordered arrays.  Its big O is n log n.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
 **************************************************************/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
	var pivot, loSwap, hiSwap, temp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
	// Two items to sort
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
	if (hiBound - loBound == 1)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
	{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
		if (vec[loBound] > vec[hiBound])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
		{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
			temp = vec[loBound];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
			vec[loBound] = vec[hiBound];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
			vec[hiBound] = temp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
		return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
	// Three or more items to sort
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
	pivot = vec[parseInt((loBound + hiBound) / 2)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
	vec[parseInt((loBound + hiBound) / 2)] = vec[loBound];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
	vec[loBound] = pivot;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
	loSwap = loBound + 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
	hiSwap = hiBound;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
	do {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
		// Find the right loSwap
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
		while (loSwap <= hiSwap && vec[loSwap] <= pivot)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
			loSwap++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
		// Find the right hiSwap
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
		while (vec[hiSwap] > pivot)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
			hiSwap--;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
		// Swap values if loSwap is less than hiSwap
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
		if (loSwap < hiSwap)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
		{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
			temp = vec[loSwap];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
			vec[loSwap] = vec[hiSwap];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
			vec[hiSwap] = temp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
	} while (loSwap < hiSwap);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
	vec[loBound] = vec[hiSwap];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
	vec[hiSwap] = pivot;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
	// Recursively call function...  the beauty of quicksort
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
	// 2 or more items in first section		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
	if (loBound < hiSwap - 1)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
		_quicksort(vec, loBound, hiSwap - 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
	// 2 or more items in second section
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
	if (hiSwap + 1 < hiBound)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
		_quicksort(vec, hiSwap + 1, hiBound);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
} ;