//<![CDATA[
//common functions
removeChildNodes = function (nodeId){
	node=YAHOO.util.Dom.get(nodeId);
	while (node.firstChild){
		node.removeChild(node.firstChild);
	};
}

removeNode = function (nodeId){
	node=YAHOO.util.Dom.get(nodeId);
	node.parentNode.removeChild(node);
}

nextSibling = function (node,searchedTagName){
	var tmpNode = node.nextSibling;
	searchedTagName = searchedTagName.toLowerCase();
	if(tmpNode.tagName!=undefined){
		var foundTag = tmpNode.tagName.toLowerCase();
	}
	else{
		nextSibling(tmpNode,searchedTagName);
	}
}

previousSibling = function (node,tagName){
	var tmpNode = node.previousSibling;
	tagName =tagName.toLowerCase();
	if(tmpNode.nodeType==1 && tagName==tmpNode.tagName.toLowerCase()){
		return 'xxx';
		return tmpNode;
	}
	else{
		previousSibling(tmpNode,tagName);
	}
}

disableButtons = function (nodeId){
	var buttons = YAHOO.util.Dom.get(nodeId).getElementsByTagName('button');
	var buttonsTmp = [];
	var inputs = YAHOO.util.Dom.get(nodeId).getElementsByTagName('input');
	for(var index=0; index<inputs.length; index++) {
		if(inputs[index].type=='submit' || inputs[index].type=='button'){
			buttonsTmp.push(inputs[index]);
		}		
	}
	for(var index=0; index<buttons.length; index++) {
			buttonsTmp.push(buttons[index]);	
	}
	for(var index=0; index<buttonsTmp.length; index++) {
		buttonsTmp[index].disabled = true;
	}
}

enableButtons = function (nodeId){
	var buttons = YAHOO.util.Dom.get(nodeId).getElementsByTagName('button');
	var buttonsTmp = [];
	var inputs = YAHOO.util.Dom.get(nodeId).getElementsByTagName('input');
	for(var index=0; index<inputs.length; index++) {
		if(inputs[index].type=='submit' || inputs[index].type=='button'){
			buttonsTmp.push(inputs[index]);
		}
	}
	for(var index=0; index<buttons.length; index++) {
			buttonsTmp.push(buttons[index]);	
	}
	for(var index=0; index<buttonsTmp.length; index++) {
		buttonsTmp[index].disabled = false;
	}
}

// grabs the javascript fragments
grabJS = function (inputText){
		var JSSearchRegularExpression = /<script[^>]*>([\s\S]*?)<\/script>/gi;
		return JSFragments=inputText.match(JSSearchRegularExpression);
}

//grabs the declared javascript files and loads them 
grabJSFiles = function (inputText){
	var JSFilesRegularExpression = /<script.*?src="(.*)"{1}[^>]*> *<\/script>/gi;
	JSFiles=inputText.match(JSFilesRegularExpression);
	if(JSFiles != undefined){
		for(var i=0; i<JSFiles.length; i++) {
			loadJS(JSFiles[i].replace(JSFilesRegularExpression,'$1'));
		}
	}
	return JSFiles;
}

// grabs the css files and includes them
grabCSSFiles = function (inputText){
	var CSSFilesRegularExpression = /<link *href="(.*?)".*type="text\/css"[^>]*>/gi;
	CSSFiles=inputText.match(CSSFilesRegularExpression)
	if(CSSFiles != undefined){
		for(var i=0; i<CSSFiles.length; i++) {
			loadCSS(CSSFiles[i].replace(CSSFilesRegularExpression,'$1'));
		}	
	}
	return CSSFiles;
}

//we execute the fragments of code
evalJS = function (JSFragments){
	var JSSearchRegularExpression = /<script[^>]*>([\s\S]*?)<\/script>/gi;
			// IE hack for global scope, we're evaluating code
		if (window.execScript) {
			if(JSFragments != undefined){
				for(var i=0; i<JSFragments.length; i++) {
					window.execScript(JSFragments[i].replace(JSSearchRegularExpression,'$1'));
				}	
			}	
		}
		else{
			if(JSFragments != undefined){
				for(var i=0; i<JSFragments.length; i++) {
					self.eval(JSFragments[i].replace(JSSearchRegularExpression,'$1'));
				}	
			}	
		}
}

//loads the passed javascript file
loadJS = function (fileName){
	var JSIncludeNode=document.createElement('script');
	JSIncludeNode.type='text/javascript';
	JSIncludeNode.src=fileName;
	tmpIncNode.appendChild(JSIncludeNode);
}
//loads the passed css file
loadCSS = function (fileName){
	var CSSFileIncludeNode=document.createElement('link');
	CSSFileIncludeNode.type='text/css';
	CSSFileIncludeNode.rel='stylesheet';
	CSSFileIncludeNode.href=fileName;
	tmpIncNode.appendChild(CSSFileIncludeNode);
}
// returns form fields with values as array
processForm = function(elemName){
	var inputElems = YAHOO.util.Dom.get(elemName).getElementsByTagName('input');
	var formFields=[];
		for(var i=0; i<inputElems.length; i++) {
			if((inputElems[i].type=='radio' || inputElems[i].type=='checkbox') && inputElems[i].checked==true){
				formFields.push([inputElems[i].name,inputElems[i].value]);
			}
			else if ( inputElems[i].type!='radio' && inputElems[i].type!='checkbox' && inputElems[i].type!='submit' && inputElems[i].type!='reset' && inputElems[i].type!='button') {
				formFields.push([inputElems[i].name,inputElems[i].value]);
			}
		}
		var textareas=YAHOO.util.Dom.get(elemName).getElementsByTagName('textarea');
		for(var i=0; i<textareas.length; i++) {
			formFields.push([textareas[i].name,textareas[i].value]);
		}
	return formFields;
}
//prepares array for post request via YAHOO
preparePostArray = function (array,uriEncode){
	if(uriEncode==undefined){
		for(var i=0; i<array.length; i++) {
			array[i]=[array[i][0]+'='+encodeURIComponent(array[i][1])];
		}
	}
	else{
		for(var i=0; i<array.length; i++) {
			array[i]=array[i].join('=');;
		}
	}
	return array.join('&');
}

//clears "content_content" div
clearContent = function (){
		while (contentContent.firstChild){
		//destroying all children
		contentContent.removeChild(contentContent.firstChild);
		};
}

// TODO: the handling of errors for now we reload on error (safe)
asyncCallError = function (){
	alert('error');
}

consumeReactionMessages = function (operations, errors){
	var operationsString = '';
	for(var index=0; index<operations.length; index++) {
		operationsString += '<div class="operation">' + operations[index] + '</div>';
	}
	var errorsString = '';
	for(var index=0; index<errors.length; index++) {
		errorsString += '<div class="error">' + errors[index] + '</div>';
	}
	return operationsString + errorsString;
}

//namespaces
YAHOO.namespace('global.panels');
YAHOO.namespace('global.handlers');
YAHOO.namespace('operations');
YAHOO.namespace('objects');

 function init(){
 	YAHOO.global.handlers.confirmationPanelConfirm = function (){
 		YAHOO.global.panels.confirmationPanel.hide();
 	} 
 	YAHOO.global.handlers.confirmationPanelCancel = function (){
 		YAHOO.global.panels.confirmationPanel.hide();
 	} 
 	
 	confirmationPanelConfig = {
 		width:"40em",
 		fixedcenter:true,
 		close:true,
 		draggable:true,
 		modal:true,
 		visible:false,
		effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}
 		};
	YAHOO.global.panels.confirmationPanel = new YAHOO.widget.Panel("confirmationPanel", confirmationPanelConfig) ;
	YAHOO.global.panels.confirmationPanel.setHeader(JSLang.confirmationPanelLabel);
	YAHOO.global.panels.confirmationPanel.setBody('<p id="confirmationPanelLabel"></p><p id="confirmationPanelBody"></p><p id="confirmationPanelButtons"></p>');
	YAHOO.global.panels.confirmationPanel.render(document.body);
	YAHOO.global.panels.confirmationPanelButtonConfirm = new YAHOO.widget.Button({label:JSLang.confirm, id:"confirmationPanelButtonConfirm", container:"confirmationPanelButtons" });
	YAHOO.global.panels.confirmationPanelButtonCancel = new YAHOO.widget.Button({label:JSLang.cancel, id:"confirmationPanelButtonCancel", container:"confirmationPanelButtons" });
	YAHOO.global.panels.confirmationPanelButtonConfirm.on("click", YAHOO.global.handlers.confirmationPanelConfirm);
	YAHOO.global.panels.confirmationPanelButtonCancel.on("click", YAHOO.global.handlers.confirmationPanelCancel);
 	
 	reactionPanelConfig = {
 		width:"40em",
 		fixedcenter:true,
 		close:true,
 		draggable:true,
 		modal:true,
 		visible:false,
		effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}
 		};
	YAHOO.global.panels.reactionPanel = new YAHOO.widget.Panel("reactionPanel", reactionPanelConfig ) ;
	YAHOO.global.panels.reactionPanel.setHeader(JSLang.reactionPanelLabel);
	YAHOO.global.panels.reactionPanel.setBody('<div id="reactionPanelBody"><\/div>');
	YAHOO.global.panels.reactionPanel.setFooter('');
	YAHOO.global.panels.reactionPanel.render(document.body);
 }
	YAHOO.util.Event.onAvailable('panels',init);
//]]>
