changeFormStyleTarget = null;
var radioImgs = [],
	checkImgs = [];

function changeRadioCheckImg(){
	for ( i = 0; i < radioImgs.length; i++) {
		path =  radioImgs[i].src;
		radioImgs[i].src = THEME_IMG_ROOT + path.substring(path.indexOf("images"), path.length);
	}

	for ( i = 0; i < checkImgs.length; i++) {
		path =  checkImgs[i].src;
		checkImgs[i].src = THEME_IMG_ROOT + path.substring(path.indexOf("images"), path.length);
	}
}

	function replaceButton( buttonNode )
	{
		if( buttonNode.isGenerated )return;

		var configOptions = makeAttrsKeyValue(buttonNode.attributes );
		configOptions["minWidth"] = parseInt( configOptions["minwidth"]);
		configOptions["text"] = configOptions["value"];
		if( configOptions["text"] == null )
			configOptions["text"] = buttonNode.innerText;
		if( configOptions["minWidth"] == null  ) configOptions["minWidth"] = 80;

		var mySpan =  document.createElement("SPAN");
		buttonNode.parentNode.insertBefore( mySpan, buttonNode );
	    var newButton = new Ext.Button( mySpan, configOptions );
		buttonNode.style.display = "none";
		buttonNode._ext_object = newButton;
		buttonNode.isGenerated = true;

		var buttons = mySpan.getElementsByTagName("BUTTON");
		if( buttons.length != 0 )buttons[0].isGenerated = true;

		if( buttonNode.onclick != null )
		{
			newButton.purgeListeners();
			newButton.addListener( "click", buttonNode.onclick, buttonNode, false );
		}
	return newButton;
	}

function changeFormStyle(el, text, select, radio, checkbox, ta, bool_, button) {

	var selects,
		inputs,
		radios = [],
		checkboxes = [],
		hovers = [],
		buttons = [],
		textFields = [],
		selectText = "please select",
		selectInfo ,
		target = el;
		bool = false;
 		if(bool != null) bool = bool_;
		if (text) replaceTextFields();
		if (checkbox) replaceCheckboxes();
		if (ta) replaceTextAreas();
		if (radio) replaceRadios();
		if (select) replaceSelects();
		if (button) replaceButtons();

	changeFormStyleTarget = el;

	function replaceButtons(){
		var inputs = target.getElementsByTagName('input');
		for(var i=0; i < inputs.length; i++){
			if (inputs[i].type == 'button' && inputs[i].getAttribute("nice") != 'true')
				replaceButton( inputs[i] );
		}

		var buttons = target.getElementsByTagName('button');
		for(var i=0; i < buttons.length; i++)
			replaceButton( buttons[i] );
	}




	function replaceTextFields(){
		var inputs = target.getElementsByTagName('input');
		var j = 0;
		for(var i=0; i < inputs.length; i++) {
			if(inputs[i].type == "text" || inputs[i].type == "password" )
			{
					if( inputs[i].isGenerated )continue;

					var configOptions = makeAttrsKeyValue(inputs[i].attributes );
					configOptions["height"] = "";
					var ExtFormObj = Ext.form.TextField;
					switch( configOptions.vtype )
					{
						case "num":{
							 ExtFormObj = Ext.form.NumberField; configOptions.vtype = "";
							 configOptions[ "maxValue" ] = parseInt(configOptions.maxvalue);
							  break;
						}
						case "date":ExtFormObj = Ext.form.DateField; configOptions.vtype = "";  break;
						default:
						{
							configOptions[ "allowBlank" ] = parseBool(configOptions.allowblank);
							if( configOptions[ "allowBlank" ] == null ) configOptions[ "allowBlank" ] = true;
						}
					}
					var alpha = new ExtFormObj( configOptions );
					alpha.applyTo( inputs[i] );
					inputs[i]._ext_object = alpha;
					inputs[i].isGenerated = true;
					inputs[i].className='x-form-text x-form-field';
			}
		}
	}



	function replaceTextAreas(){

		var ta = target.getElementsByTagName('textarea');
		var j = 0;
		for(var i=0; i < ta.length; i++) {

			var configOptions = makeAttrsKeyValue(ta[i].attributes );
			configOptions["width"] = parseInt(configOptions["width"]);
			if( configOptions["width"] == null  ) configOptions["width"] = 200;
			configOptions[ "allowBlank" ] = parseBool(configOptions.allowblank);
		    var textarea = new Ext.form.TextArea(configOptions);
		    textarea.applyTo(ta[i]);
			ta[i]._ext_object = textarea;
			ta[i].className="x-form-textarea x-form-field";
		}

	}


	function replaceRadios() {
		var inputs = target.getElementsByTagName('input');
		var j = 0;
		for(var i=0; i < inputs.length; i++) {
			if(inputs[i].type=='radio') {
				radios[j] = inputs[i];
				radios[j].changeValue = radioClick;
				++j;
			}
		}

		for(var i=0; i <radios.length; i++) {
			radios[i].style.display = "none";
			var radioImg = document.createElement('img');
			radioImg.className = "checkbox";
			if(radios[i].checked) radioImg.src = THEME_IMG_ROOT+"images/niceform/radioChecked.gif";
				else radioImg.src = THEME_IMG_ROOT+"images/niceform/radioUnchecked.gif";
			radioImg.id = 'myRadio_'+i;

			radioImg.onclick = checkRadio;

			if (radios[i].nextSibling)
				 radios[i].parentNode.insertBefore(radioImg, radios[i].nextSibling);
			else 	radios[i].parentNode.appendChild(radioImg);

			radioImgs[radioImgs.length] = radioImg;

			radios[i].setCheck = function(bool_){
				this.checked = bool_;
				this.nextSibling.src = THEME_IMG_ROOT+"images/niceform/radio" + ((bool_) ? "" : "Un") + "checked.gif";
			}

		}
	}
	function replaceCheckboxes() {
		var inputs = target.getElementsByTagName('input');

		var j = 0;
		for (var i2=0; i2 < inputs.length; i2++) {
			if(inputs[i2].type == 'checkbox' && inputs[i2].getAttribute("nice") != "true") {
				checkboxes[j] = inputs[i2];
				checkboxes[j].changeValue = checkboxClick;
				checkboxes[j].changeDisabled = checkboxDisabled;
				inputs[i2].setAttribute("nice", "true");
				++j;
			}
		}

		for(var i2=0; i2 < checkboxes.length; i2++) {
			checkboxes[i2].style.display="none";
			var checkboxImg = document.createElement('img');
			checkboxImg.className = "checkbox " + checkboxes[i2].className;

			if(checkboxes[i2].checked) checkboxImg.src = THEME_IMG_ROOT+"images/niceform/checkActive.gif";
			else checkboxImg.src = THEME_IMG_ROOT+"images/niceform/checkPassive.gif";

			if (checkboxes[i2].disabled && checkboxes[i2].checked) checkboxImg.src = THEME_IMG_ROOT+"images/niceform/checkActiveDisable.gif";
			else if(checkboxes[i2].disabled) checkboxImg.src = THEME_IMG_ROOT+"images/niceform/checkDisable.gif";
			checkboxImg.id = 'myCheck_'+i2;
			checkboxes[i2].val = 'myCheck_'+i2;
			Ext.EventManager.addListener(checkboxImg, "mousedown", checkCheck);

			if (checkboxes[i2].nextSibling)
				 checkboxes[i2].parentNode.insertBefore(checkboxImg, checkboxes[i2].nextSibling);
			else checkboxes[i2].parentNode.appendChild(checkboxImg);

			checkImgs[checkImgs.length] = checkboxImg;

		}
	}
	function checkboxDisabled(boolType){

		if(this.disabled != boolType){
			var img = this.nextSibling;
			if(boolType){
				img.src = THEME_IMG_ROOT+"images/niceform/check" + ((this.checked) ? "Active" : "") + "Disable.gif";
			} else{
				img.src = THEME_IMG_ROOT+"images/niceform/check" + ((this.checked) ? "Active" : "Passive") + ".gif";
			}
			this.disabled = boolType;
		}
	}

	function radioClick(boolType){
		this.checked = boolType;
		for (i = 0; i < radios.length; i++){
	  		if(radios[i].checked) {
				$("myRadio_"+i).src = THEME_IMG_ROOT+"images/niceform/radioChecked.gif";
			 } else {
				$("myRadio_"+i).src = THEME_IMG_ROOT+"images/niceform/radioUnchecked.gif";
			}
		}
	}

	function checkboxClick(boolType){
		if(this.checked != boolType){

			this.checked = boolType;
			img = this.nextSibling;
			if(boolType){
				if(this.disabled) img.src = THEME_IMG_ROOT+"images/niceform/checkActiveDisable.gif";
				else img.src = THEME_IMG_ROOT+"images/niceform/checkActive.gif";
			}
			else {
				if(this.disabled)img.src = THEME_IMG_ROOT+"images/niceform/checkDisable.gif";
				else img.src = THEME_IMG_ROOT+"images/niceform/checkPassive.gif";
			}
		}
	}

	function checkRadio(g) {
		id = this.id.substring(this.id.indexOf("_")+1, this.id.length);
	    var g = parseInt(id);
	    if(radios[g].disabled) return;

	 	if(radios[g].onchange)
			radios[g].onchange();
		if(radios[g].onclick)
			radios[g].onclick();

	    radios[g].checked = true;
	    for (i = 0; i < radios.length; i++){
	  		if(radios[i].checked && radios[i].nextSibling) {
				radios[i].nextSibling.src = THEME_IMG_ROOT+"images/niceform/radioChecked.gif";
			 } else if(radios[i].nextSibling){
				radios[i].nextSibling.src = THEME_IMG_ROOT+"images/niceform/radioUnchecked.gif";
			}
		}
	}

	function checkCheck(event) {
		var obj = event.target || event.srcElement;
	    id = obj.id.substring(obj.id.indexOf("_")+1, obj.id.length);
	    var g = parseInt(id);
	   if(checkboxes[g].disabled) return;

	   if(checkboxes[g].checked) checkboxes[g].checked = false;
	   else checkboxes[g].checked = true;

		if(checkboxes[g].onchange){
			checkboxes[g].onchange();
		}
		if(checkboxes[g].onclick){
			checkboxes[g].onclick();
		}
	  	if(checkboxes[g].checked) {
			obj.src = THEME_IMG_ROOT+"images/niceform/checkActive.gif";
		} else {
			obj.src = THEME_IMG_ROOT+"images/niceform/checkPassive.gif";
		}
		event.cancelBubble = true;
	}

SELECTS_ARRAY = [];


function replaceSelects() {
   var  selects = target.getElementsByTagName('select');

   var converted;

   for( var i=0; i < selects.length; i++) {

		var isEditable = selects[i].getAttribute("editable");
		if(isEditable == null)isEditable = false;
		var emptyText = selects[i].getAttribute("emptyText");
		if(emptyText == null)emptyText = "Select";
		var forceSelection = selects[i].getAttribute("forceSelection");
		if(forceSelection == null)forceSelection = true;
		var width = parseInt(selects[i].getAttribute("width"));
		if(width == null) width = 164;
		
		var w = parseInt(selects[i].getAttribute("width"));
		if(!w) w = 164;
		
		var id = selects[i].id;
		var onchangeHandler = selects[i].onchange;
		converted = new Ext.form.ComboBox({
			listWidth: w,
			width:width,
			maxHeight:150,
		    typeAhead: true,
		    triggerAction: 'all',
		    transform:selects[i],
			blankText: selects[i].getAttribute("blankText"),
			editable: true,
			disabled: parseBool(selects[i].getAttribute("disabled")),
			emptyText: emptyText,
			blankText: emptyText,
		    forceSelection:forceSelection
		});



//		converted.autoSize();
		if( onchangeHandler != null )
		{
			converted.purgeListeners();
			converted.addListener( "select", onchangeHandler, converted, false );
//			converted.addListener( "blur", onchangeHandler, converted, false );
		}

		onchangeHandler = null;

		var cont = converted.container.dom.childNodes[0];
		if( id != null )cont.id = id;
		cont._ext_object = converted;
		i--;
   }
}

function changeComboValue(value,boolValue){
	var divs = this.parentNode.getElementsByTagName("div");
	var textDiv,text;
	for(var i =0; i < divs.length; i++){
		if(this.val == divs[i].id){
			textDiv = divs[i];break;
		}
	}

	for(var k = 0; k < this.options.length; k++) {
		if(this.options[k].value == value) {
			this.options[k].selected = "selected";
			text = this.options[k].text;
		}
		else {
			this.options[k].selected = "";
		}
	}

	if(boolValue == null){
		if(this.onchange) this.onchange();
	}

	if(text && text.length > Math.floor(textDiv.offsetWidth/9)){
			text = text.substring(0,Math.floor(textDiv.offsetWidth/9))+'...';
	}

	var newText = document.createTextNode(text);
	if(!text || text == "") newText = document.createTextNode("Test name is empty");
	textDiv.replaceChild(newText, textDiv.childNodes[0]);

}

function removeOptionDiv(){

	var elems = target.getElementsByTagName("div");
		for(var k = 0; k < elems.length; k++){
			if(elems[k].id && elems[k].id.substring(0,10) == "optionsDiv")
				{target.removeChild(elems[k]);}
		}
}

function showOptions(ev) {

		var  selects = target.getElementsByTagName('select');

		var x,y;
		var i = parseInt(this.value);
		var width = selectInfo[i].width;
		var bool = selectInfo[i].bool;
		var t = target;
		var popUp = target;

		if(!bool){
			while(t.parentNode.nodeName != "body"){
				var id = "";
				if(t.id) id = t.id.substring(t.id.length - 4,t.id.length);

				if(t.nodeName == "DIV" && id == "-dlg"){
					popUp = $(t.id);
					break;
				}else{
					t = t.parentNode;
				}
			}
		}

		if(!bool){
				x = findPosX(selects[i].nextSibling) -  findPosX(popUp) - 1;
		 		y = findPosY(selects[i].nextSibling)- findPosY(popUp) + 50;
		}else if(bool){
				x= findPosX(selects[i].parentNode) - findPosX(target) - 1;
				y = findPosY(selects[i].parentNode) - findPosY(target) +36 ;
		}

		var elem = null;
		if(!bool) target = popUp;
		var elems = target.getElementsByTagName("div");
		for(var k = 0; k < elems.length; k++){
			if(elems[k].id && elems[k].id.substring(0,10) == "optionsDiv" && elems[k].id != "optionsDiv"+i)
				{target.removeChild(elems[k]);}
		}
		for(var k = 0; k < elems.length; k++){
			if(elems[k].id == "optionsDiv"+i)
				{elem = elems[k];break;}
		}

		if(!elem || elem.className=="optionsDivInvisible") {

			if(elem)target.removeChild(elem);
			var optionsDiv = document.createElement('div');
			optionsDiv.style.minWidth = (width - 27 ) + "px";
			if(isIE) optionsDiv.style.width = (width - 27 ) + "px";

			optionsDiv.className = "optionsDivVisible";
			optionsDiv.id = "optionsDiv"+i;
			optionsDiv.style.left = x +"px";
			optionsDiv.style.top = y + "px";

			var textVar;
		for(var j=0; j < selects[i].options.length; j++) {
			var optionHolder = document.createElement('p');
			var optionLink = document.createElement('span');
			optionLink.className = "outOver";
			optionLink.value = j;
			optionLink.onclick = selectMe;
			optionLink.onmouseover = styleOver;
			optionLink.onmouseout = styleOut;
			var optionTxt = document.createTextNode(selects[i].options[j].text);
			if(!selects[i].options[j].text || selects[i].options[j].value == "" )
				optionTxt = document.createTextNode("Test name is empty");
			optionLink.appendChild(optionTxt);
			optionHolder.appendChild(optionLink);
			optionsDiv.appendChild(optionHolder);
		}

		if(!bool){
			popUp.appendChild(optionsDiv);
			var allowHeight = parseInt(popUp.offsetHeight) - parseInt(optionsDiv.style.top);
			if(parseInt(optionsDiv.offsetHeight) >= allowHeight){
				optionsDiv.style.height = (allowHeight-10)+"px";
				if(Ext.isSafari)optionsDiv.style.overflow = "auto";
				else optionsDiv.style.overflowY = "auto";
			}

		}else target.appendChild(optionsDiv);



		}
		else if(elem.className=="optionsDivVisible") {
			elem.className = "optionsDivInvisible";
		}
		ev.cancelBubble = true;
		return false;
}
changeFormStyle.prototype.showOptions = showOptions;

function styleOver(ev){
	this.className = "hover";
}

function styleOut(ev){
	this.className = "outOver";
}

function 	selectMe(ev) {
	var  selects = target.getElementsByTagName('select');
	var linkNo = parseInt(this.value);
	var selectNo = parseInt(this.parentNode.parentNode.id.substring(10));
	var selectField = selects[selectNo];


	for(var k = 0; k < selectField.options.length; k++) {
		if(k==linkNo) {
			selectField.options[k].selected = "selected";
		}
		else {
			selectField.options[k].selected = "";
		}
	}

	var textVar;
	var t = selects[selectNo].parentNode.getElementsByTagName("div");
	for(var k = 0; k < t.length; k++){
		if(t[k].id == "mySelectText"+selectNo)
			{textVar = t[k];break;}
	}

	var text = selects[selectNo].options[selects[selectNo].selectedIndex].text;
	if(!text) text = "Test name is empty";
		if(text.length > Math.floor(textVar.offsetWidth/9)){
			text = text.substring(0,Math.floor(textVar.offsetWidth/9))+'...';
		}

	var newText = document.createTextNode(text);
	textVar.replaceChild(newText, textVar.childNodes[0]);
	this.parentNode.parentNode.className = "optionsDivInvisible";

	if(selectField.getAttribute("onchange"))
		selectField.onchange();
	else if(selectField.onchange)
		selectField.onchange();
}



}

function removeOptionsDiv(){
	if(!$("common-dlg")) return;

	var target = $("common-dlg");

	var elems = target.getElementsByTagName("div");

	for(var k = 0; k < elems.length; k++){
		if(elems[k].id && elems[k].id.substring(0,10) == "optionsDiv"){
			elems[k].parentNode.removeChild(elems[k]);k=k-1;
		}
	}

/*	target = $("tag-cloud-dlg");
	elems = target.getElementsByTagName("div");
		for(var k = 0; k < elems.length; k++){
			if(elems[k].id && elems[k].id.substring(0,10) == "optionsDiv"){
				elems[k].parentNode.removeChild(elems[k]);k=k-1;
			}
		}*/
	target = $("signUp-dlg");
	if( target != null )
	{
		elems = target.getElementsByTagName("div");
			for(var k = 0; k < elems.length; k++){
				if(elems[k].id && elems[k].id.substring(0,10) == "optionsDiv"){
					elems[k].parentNode.removeChild(elems[k]);k=k-1;
				}
			}
	}

}
function createNiceButton(value, float_, callback, style){
	var width = "40px";
	if(value.length >= 4)
		width = value.length*10 + 20 + "px";
	if(typeof callback=='undefined'){
		callback=null;
	}
	if (style==null) style="";
	return "<table onclick='"+callback+"' style='float:"+float_+";margin-right:12px;width:"+width+ ";"+style+"' cellspacing=0 cellpadding=0 onmouseover='this.className=\"x-btn-over\"' onmouseout='this.className=\"\"'><tbody>"+
		   		"<tr>"+
					"<td class=x-btn-left></td>"+
				   	"<td class='x-btn-center text'>"+value+"</td>"+
				   	"<td class=x-btn-right></td>"+
		   		"</tr>"+
		   "</tbody></table>";
}

function createNiceButtonObj(value, float_, style){
	var table = document.createElement("table");
	if(value.length < 4)
	width = "40px";
	else
	width = value.length*10 +  20  + "px";
	if(style==null) style="";
	table.setAttribute("style", "float:"+float_+";width:"+width+";"+style);
	table.cellSpacing = "0";
	table.cellPadding = "0";
	table.onmouseover = "this.className='x-btn-over'";
	table.onmouseout = "this.className=''";
	var tr = table.insertRow(0);
	var td0 = tr.insertCell(0);
	var td1 = tr.insertCell(1);
	var td2 = tr.insertCell(2);
	td0.className = "x-btn-left";
	td1.className = "x-btn-center text";
	td2.className = "x-btn-right";
	td1.innerHTML = value;
	table.setText = function(val){
	    this.rows[0].cells[1].innerHTML = val;
		var wd = "40px";
		if(val.length >= 4)
			 wd = (val.length*10 +5)+ "px";
	    this.setAttribute("style", "float:"+float_+";width:"+wd);
 	}
 	table.setDisabled = function(bool_){
 		if(bool_) {
 			this.setAttribute("disabled","true");
 			this.rows[0].cells[1].style.color = "gray";
 		} else {
 			this.setAttribute("disabled","false");
 			this.rows[0].cells[1].style.color = "black";
 		}
 	}
	return table;
}



function makeAttrsKeyValue( attrs )
{
	var newArray = {};
	for( var i=0; i<attrs.length; i++ )
		newArray[ attrs[i].nodeName ] = attrs[i].nodeValue;
	return newArray;
}
