/**
 * -------------------------------------------------------------------------
 *  General objects
 * -------------------------------------------------------------------------
 */
 
 /**
 * RubricGroup object 
 */
 function RubricGroup(id, name){
 		this.id = id; 	
 		this.name = name;
 }
 
 /**
 * State object 
 */
 function Rubric(id, name, groupID){
 		this.id = id; 	
 		this.name = name;
 		this.groupID = groupID;
 }
 
 
function RubricInfo(groupID,rubricID){
 	this.groupID = groupID;
 	this.rubricID = rubricID;
 }

 function specialLetters(str){

	for(var i=0;i<str.length;i++){
		if(str.charCodeAt(i) > 192)
		{
			break;
		}
		return str;
	}

 	//À	&#192;
 	str = str.replace(String.fromCharCode(192),"AZ_")
 	//Á	&#193;
 	str = str.replace(String.fromCharCode(193),"AZ_") 	
 	//Â	&#194;
 	str = str.replace(String.fromCharCode(194),"AZ_")
 	//Ã	&#195;
 	str = str.replace(String.fromCharCode(195),"AZ_")
 	//Ä	&#196
 	str = str.replace(String.fromCharCode(196),"AZ_")
	//Å	&#197;
	str = str.replace(String.fromCharCode(197),"AZ_")
	//Æ	&#198;
	str = str.replace(String.fromCharCode(198),"AZ_")

 	//à	&#224;
 	str = str.replace(String.fromCharCode(224),"az_", "g")
 	//á	&#225;
 	str = str.replace(String.fromCharCode(225),"az_", "g")
 	//â	&#226;
 	str = str.replace(String.fromCharCode(226),"az_", "g")
	//ã	&#227; 	
	str = str.replace(String.fromCharCode(227),"az_", "g")	
 	//ä	&#228;
	str = str.replace(String.fromCharCode(228),"az_", "g")
	//å	&#229;
	str = str.replace(String.fromCharCode(229),"az_", "g")	
 	
	//Ò	&#210;
	str = str.replace(String.fromCharCode(210),"OZ_", "g")
	//Ó	&#211;
	str = str.replace(String.fromCharCode(211),"OZ_", "g")
	//Ô	&#212;
	str = str.replace(String.fromCharCode(212),"OZ_", "g")
	//Õ	&#213;
	str = str.replace(String.fromCharCode(213),"OZ_", "g")
	//Ö	&#214;
	str = str.replace(String.fromCharCode(214),"OZ_", "g")

	//ò	&#242;
	str = str.replace(String.fromCharCode(242),"oz_", "g")
	//ó	&#243;
	str = str.replace(String.fromCharCode(243),"oz_", "g")
	//ô	&#244;
	str = str.replace(String.fromCharCode(244),"oz_", "g")
	//õ	&#245;
	str = str.replace(String.fromCharCode(245),"oz_", "g")	
	//ö	&#246;
	str = str.replace(String.fromCharCode(246),"oz_", "g")
 	
 	//Ý	&#221;
	str = str.replace(String.fromCharCode(221),"YZ_", "g")
	//ý	&#253;
	str = str.replace(String.fromCharCode(253),"yz_", "g")
	 	
 	//ß	&#223;
 	str = str.replace(String.fromCharCode(223),"sz_", "g")
 	
	//Ù	&#217;
	str = str.replace(String.fromCharCode(217),"UZ_", "g")
	//Ú	&#218;
	str = str.replace(String.fromCharCode(218),"UZ_", "g")
	//Û	&#219;
	str = str.replace(String.fromCharCode(219),"UZ_", "g")
 	//Ü	&#220;
	str = str.replace(String.fromCharCode(220),"UZ_", "g")
	
	//ù	&#249;
	str = str.replace(String.fromCharCode(249),"uz_", "g")
	//ú	&#250;
	str = str.replace(String.fromCharCode(250),"uz_", "g")
	//û	&#251;
	str = str.replace(String.fromCharCode(251),"uz_", "g")
	//ü	&#252;
	str = str.replace(String.fromCharCode(252),"uz_", "g")
 	
 	
 	//Ç	&#199;
 	str = str.replace(String.fromCharCode(199),"CZ_", "g")
 	//ç	&#231;
 	str = str.replace(String.fromCharCode(231),"cz_", "g")
 	
	//È	&#200;
	str = str.replace(String.fromCharCode(200),"EZ_", "g")
	//É	&#201;
	str = str.replace(String.fromCharCode(201),"EZ_", "g")
	//Ê	&#202;
	str = str.replace(String.fromCharCode(202),"EZ_", "g")
	//Ë	&#203;
	str = str.replace(String.fromCharCode(203),"EZ_", "g")
	
	//è	&#232;
	str = str.replace(String.fromCharCode(232),"ez_", "g")
	//é	&#233;
	str = str.replace(String.fromCharCode(233),"ez_", "g")
	//ê	&#234;
	str = str.replace(String.fromCharCode(234),"ez_", "g")
	//ë	&#235;
	str = str.replace(String.fromCharCode(235),"ez_", "g")
	
	//Ì	&#204;
	str = str.replace(String.fromCharCode(204),"IZ_", "g")
	//Í	&#205;
	str = str.replace(String.fromCharCode(205),"IZ_", "g")
	//Î	&#206;
	str = str.replace(String.fromCharCode(206),"IZ_", "g")
	//Ï	&#207;
	str = str.replace(String.fromCharCode(207),"IZ_", "g")
	
	//ì	&#236;
	str = str.replace(String.fromCharCode(236),"iz_", "g")	
	//í	&#237;
	str = str.replace(String.fromCharCode(237),"iz_", "g")	
	//î	&#238;
	str = str.replace(String.fromCharCode(238),"iz_", "g")	
	//ï	&#239;
	str = str.replace(String.fromCharCode(239),"iz_", "g")	
 	
 	str = str.toLowerCase()
 	return str;
 }
 
/**
* helper  select functions
*/


function getRubricGroups()
{
 	for (var i = 0; i < AllRubricArray.length; i++) 
 	{
 		var found=false;
 		for(var f=0; f< shownRubricGroups.length; f++)
		if (AllRubricArray[i].groupID == shownRubricGroups[f]){
			found=true;
	 		break;
	 	}
	 	if (!found) {	 		
			shownRubricGroups[shownRubricGroups.length] = AllRubricArray[i].groupID;
		}
 	}
}
function getRubrics(rubricGroup)
{
	rubricGroup = rubricGroup + ","
 	for (var i = 0; i < AllRubricArray.length; i++) 
 	{ 	
 		if ((rubricGroup==",") || ((","+rubricGroup).indexOf(","+AllRubricArray[i].groupID+",") > -1 )){
		 		var found=false;
		 		for(var f=0; f<shownRubrics.length; f++)
	 			 	if (AllRubricArray[i].rubricID == shownRubrics[f]){
	 			 		found=true;
	 		 			break;
	 		 		}
			 		if (!found) {	 		
			 			shownRubrics[shownRubrics.length] = AllRubricArray[i].rubricID;
	 				}
 		}
	}
}

function renderRubricItems(elementID,itemsArray,namesArray,selectedItemID)
{
  	var obj = document.getElementById(elementID);
  	if(obj != null){
		
	  	var len = obj.length;
	  	// remove existing
	 	for (var i = 0; i < len; i++) {
	 	  		obj.remove(0);
		}
		for (var i = 0,j=0; i < itemsArray.length; i++) {
			if(selectedItemID == itemsArray[i]){
				optionObj = new Option(namesArray[itemsArray[i]+"_"].name, itemsArray[i], true, true);
			}else{
				
				optionObj = new Option(namesArray[itemsArray[i]+"_"].name, itemsArray[i], false, false);
			}
			obj.options[i]=optionObj;
		}
	}
}

function get_selectedRubricGroupID(rubric)
{
 	for (var i = 0; i < AllRubricArray.length; i++) {
 		if (AllRubricArray[i].rubricID==rubric) {
	 		return AllRubricArray[i].groupID;
 		}
 	}
 	return '';
}

function addUniqueInArray(dataArray, dataID)
{
 	var found=false;
 	for(var k=0; k<dataArray.length; k++)
	if (dataArray[k]==dataID){
 		found=true;
		break;
	}
 	if (!found) dataArray[dataArray.length]=dataID;
}


 function renderRubrics(Obj)
 {
 	if(Obj == null){
	 	Obj = new Object();
	 	Obj.id = '';
 	}
 	
 	switch(Obj.id){
	 	case RUBRICGROUP_ID:
			 	selectedRubricGroupID = Obj.value;		 	
				selectedRubricID='';
	 		break;
	 	case RUBRIC_ID:
			 	if (Obj.value!='' && Obj.value!='-ALL-'){
			 		if(document.getElementById(RUBRICGROUP_ID )){
					 	selectedRubricGroupID = get_selectedRubricGroupID(Obj.value);
				 	}else{
					 	selectedRubricGroupID =""
				 	}
				}
			 	selectedRubricID= Obj.value;
	 		break;
 	}

	shownRubricGroups = new Array();
	shownRubricGroups[0]=""; //include all
	shownRubrics = new Array();
	shownRubrics[0]=""; //include *all*
	
	//check for element status
 	//if (!document.getElementById(RUBRICGROUP_ID)) selectedRubricGroupID='';
 	//if (!document.getElementById(RUBRIC_ID)) selectedRubricID='';

	//get Rubric Groups
	getRubricGroups();

	// rubric
	getRubrics(selectedRubricGroupID);

	//sortRubricGroups()	
	sortRubrics()							

	renderItems(RUBRICGROUP_ID,shownRubricGroups,rubricGroupsArray, selectedRubricGroupID);
	renderItems(RUBRIC_ID,shownRubrics,rubricArray,selectedRubricID);
	
 }
 
  function sortRubricGroups(){
 	shownRubricGroups.sort(sortRubricGroupObject)
 }
 function sortRubrics(){
 	shownRubrics.sort(sortRubricsObject)
 } 
 
 
 function sortRubricGroupObject(id1, id2){ 
 	var obj1 = rubricGroupsArray[id1+"_"]
 	var obj2 = rubricGroupsArray[id2+"_"] 	
 	
 	if(obj1.id == "" && obj2.id == "-ALL-") return -1
 	if(obj1.id == "-ALL-" && obj2.id == "") return 1
 	
 	if(obj1.id == "" || obj1.id == "-ALL-") return -1
 	if(obj2.id == "" || obj2.id == "-ALL-") return 1

 	if(specialLetters(obj1.name) > specialLetters(obj2.name))
 		return 1
 	else
 		return -1
 }
 
 function sortRubricsObject(id1, id2){ 
 	var obj1 = rubricArray[id1+"_"]
 	var obj2 = rubricArray[id2+"_"] 	

 	if(obj1.id == "" && obj2.id == "-ALL-") return -1
 	if(obj1.id == "-ALL-" && obj2.id == "") return 1
 	
 	if(obj1.id == "" || obj1.id == "-ALL-") return -1
 	if(obj2.id == "" || obj2.id == "-ALL-") return 1

 	if(specialLetters(obj1.name) > specialLetters(obj2.name))
 		return 1
 	else
 		return -1
 }

var RUBRICGROUP_ID  				= '__RubricGroup';
var RUBRIC_ID 						= '__Rubric';
var RUBRIC_SELECTED_ITEMS_ID 		= '__RubricSelectedItems';
var RUBRICGROUP_SELECTED_ITEMS_ID 	= '__RubricGroupSelectedItems';

var selectedRubricGroupID = '';
var selectedRubricID      = '';
 
 var rubricGroupsArray = new Array();
 var rubricArray       = new Array(); 
 var AllRubricArray    = new Array()
 
 
 function MakeTest1()
 {
 		rubricArray[rubricArray.length] = new Rubric("",strAll,"");
		rubricArray[rubricArray[rubricArray.length-1].id+"_"] = rubricArray[rubricArray.length-1];
		
		rubricArray[rubricArray.length] = new Rubric("rubric11","rubric 1-1","group1");
		rubricArray[rubricArray[rubricArray.length-1].id+"_"] = rubricArray[rubricArray.length-1];
		
		rubricArray[rubricArray.length] = new Rubric("rubric12","rubric 1-2","group1");
		rubricArray[rubricArray[rubricArray.length-1].id+"_"] = rubricArray[rubricArray.length-1];

		rubricArray[rubricArray.length] = new Rubric("rubric21","rubric 2-1","group2");
		rubricArray[rubricArray[rubricArray.length-1].id+"_"] = rubricArray[rubricArray.length-1];
			
		AllRubricArray[AllRubricArray.length]= new RubricInfo("group1","rubric11");
		AllRubricArray[AllRubricArray.length]= new RubricInfo("group1","rubric12");		
		AllRubricArray[AllRubricArray.length]= new RubricInfo("group2","rubric21");	
 }
