// Created by Insprise Shanghai on July 15, 2010.
// See 'Insprise Web Site Design' document for reference.
// Usage: 
// window.onload = function() {
//   processRoundBoxes();
// }

/**
 * Wraps all 'x_rcb' elements using proper round box constructs 'x-rcb'. 
 * 'x_rcb' may have a title element display on top with class name 'header'.
 */
function processRoundBoxes() {
	if(! window.jQuery) {
		alert("JQuery v1.4 or above is required!");
	}
	
	// http://james.padolsey.com/javascript/regex-selector-for-jquery/
	jQuery.expr[':'].regex = function(elem, index, match) {
	    var matchParams = match[3].split(','),
	        validLabels = /^(data|css):/,
	        attr = {
	            method: matchParams[0].match(validLabels) ? 
	                        matchParams[0].split(':')[0] : 'attr',
	            property: matchParams.shift().replace(validLabels,'')
	        },
	        regexFlags = 'ig',
	        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
	    return regex.test(jQuery(elem)[attr.method](attr.property));
	}

	// first, we find all the *_rcbs
	// alert("H2: " + $('*:regex(class, (^|\\s)\\S*_rcb(\\s|$))').length);

	var roundboxes = $('*:regex(class, (^|\\s)\\S*_rcb(\\s|$))');
	// alert("rbs = " + roundboxes.length);
	for(var i = 0; i < roundboxes.length; i++) {
		roundBox(roundboxes[i]);
	}	
}

/**
* Wraps the given 'x_rcb' element using proper round box constructs 'x-rcb'. 
* 'x_rcb' may have a title element display on top with class name 'header'.
* @param rcbElement should have class named 'x_rcb'
*/
function roundBox(rcbElement) {
	var debug = true;
	// 1. First, determine prefix ('abc_rcb' -> 'abc')
	var rcbCNRegExp = new RegExp("(^|\\s)(\\S*)_rcb(\\s|$)");
	var matchArray = rcbCNRegExp.exec(rcbElement.className);
	var prefix = matchArray[2];
	if(prefix == null) {
		if(debug) {
			alert("Invalid rcb class: " + rcbElement.className + ", prefix: " + prefix);
		}
		return;
	}

	var contents = $("> :not(.header)", rcbElement);
	var header = $("> .header", rcbElement);

	// 2. Second create elements
	// 2.1 header
	var rcb_h = document.createElement('div');
	rcb_h.className = prefix + "-rcb-h";
	var rcb_htlcorner = document.createElement('div');
	rcb_htlcorner.className = prefix + "-rcb-htlcorner";

	if(header.length > 0) {
		$(header[0]).addClass(prefix + "-rcb-hc");
		rcb_h.appendChild(header[0]);
	}else{
		var rcb_hc = document.createElement('div');
		rcb_hc.className = prefix + "-rcb-hc";
		rcb_h.appendChild(rcb_hc);
	}

	rcb_h.appendChild(rcb_htlcorner);

	// 2.2 body
	var rcb_bw1 = document.createElement('div');
	rcb_bw1.className = prefix + "-rcb-bw1";
	var rcb_bw2 = document.createElement('div');
	rcb_bw2.className = prefix + "-rcb-bw2";
	var rcb_bc = document.createElement('div');
	rcb_bc.className = prefix + "-rcb-bc";

	rcb_bw1.appendChild(rcb_bw2);
	rcb_bw2.appendChild(rcb_bc);
	for(var i = 0; i < contents.length; i++) {
		rcb_bc.appendChild(contents[i]);
	}

	// 2.3 footer
	var rcb_f = document.createElement('div');
	rcb_f.className = prefix + "-rcb-f";
	var rcb_fblcorner = document.createElement('div');
	rcb_fblcorner.className = prefix + "-rcb-fblcorner";
	rcb_f.appendChild(rcb_fblcorner);

	// switch now
	$(rcbElement).addClass(prefix + "-rcb");
	$(rcbElement).empty();
	rcbElement.appendChild(rcb_h);
	rcbElement.appendChild(rcb_bw1);
	rcbElement.appendChild(rcb_f);
	
	if( $(rcbElement).attr('content_height') ) { // explicit content height
		$(rcb_bc).css('height', $(rcbElement).attr('content_height'));
	}
}
