
	isFireFox = /(Firefox)/.test(window.navigator.userAgent);
	isIE = /(MSIE)/.test(window.navigator.userAgent);

	var fkey_company=1;
	function LoadPositions()
	{
		var url = "GetPositions.ashx?fkey_company="+fkey_company;
		ddlPositions.onCompletion = OnLoadPositionsBinding;
		ddlPositions.onError = ShowError;
		ddlPositions.requestFile = url;
		ddlPositions.runAJAX(url);
	}
	var displayParams={NAME:'PKEY_TIER'}
	var dropdown = null;
	var locations = null;
	function OnLoadPositionsBinding(response)
	{  
		var ddlpositions = document.getElementById('divPositions');
		var ddlNoPositions = document.getElementById('divNoPositions');
		var parsedData = xml2json.parser(response);
		dropdown = new DropDownList(ddlpositions,parsedData.admin,displayParams,OnSelectionChange,'------- Select Position -------',ddlNoPositions);
		
		dropdown.DisplayView();
	}
	
	function LoadLocations()
	{ 
		var url = "GetLocations.ashx?fkey_company="+fkey_company;
		ddlLocations.onCompletion = OnGetLocationsDataBinding;
		ddlLocations.onError = ShowError;
		ddlLocations.requestFile = url;
		ddlLocations.runAJAX(url);
	}
	var displayLocation={name:'pkey_location'}
	function OnGetLocationsDataBinding(response)
	{	
		var locationContainer = document.getElementById('divLocations');
		var nolocationContainer = document.getElementById('divNoLocations');
		var parsedData = xml2json.parser(response);
		var locations = new DropDownList(locationContainer,parsedData.common,displayLocation,OnSelectionChange,'------- Select Location -------',nolocationContainer);
		locations.DisplayView();
	}
	
	function ShowError(error)
	{	
		alert('Error on data reading.');
	}
	function OnSelectionChange(obj)
	{	
		var divLocations=document.getElementById('divLocations');
		var ddlLocationss= eval(divLocations.childNodes[0]);
		var seleced=ddlLocationss.options[ddlLocationss.selectedIndex].value;
		
		var divPositions=document.getElementById('divPositions');
		var ddlpositions= eval(divPositions.childNodes[0]);
		var positionvalues=ddlpositions.options[ddlpositions.selectedIndex].value;
		
		var url = "GetVacancies.ashx?selectedPositions="+positionvalues+"&selectedLocations="+seleced+"&fkey_company=1";
		vacancies.onCompletion = OnLoadVacanciesBinding;
		vacancies.onError = ShowError;
		vacancies.requestFile = url;
		vacancies.runAJAX(url);
	}
	function PostApplication(){
		//alert(arguments[0].currentTarget);
		var objTarget = isIE ? event.srcElement : arguments[0].currentTarget
		if(objTarget){
			var id=	objTarget.text;
			window.location.href = "submitresume.html?id="+id;
		}
	}
	function OnLoadVacanciesBinding(response)
	{
		
		var container= document.getElementById("divVacansies");
		var noVacansies = document.getElementById("divNoVacansies"); 
		var display_columns = {job_number:'job_number',vacancy_position:'vacancy_position',qualification:'qualification',required_date:'required_date',no_of_vacancies:'no_of_vacancies',experience_in_years:'experience_in_years',skills:'skills',locationname:'locationname'};
		var label_columns = {job_number:'job code',vacancy_position:'position title',qualification:'qualification',required_date:'apply before',no_of_vacancies:'no of positions',experience_in_years:'experience',skills:'responsibility',locationname:'location'};
		var date_columns = {required_date:'required_date'};
		var key_columns ={pkey_vacancy:'pkey_vacancy'};	
		if(response != "")
		{
			//alert(response.toLowerCase());
			var parsedData = xml2json.parser(response.toLowerCase());
			var grid = new Grid(container,parsedData.hrm,PostApplication,display_columns,label_columns,key_columns,date_columns,noVacansies);
		}
		else
		{
			container.innerText="There are no records to display.";
			container.style.display='block';
		}
	}
	/*function ChangeValuePositions(obj)
	{
		var seleced= event.srcElement;
		var divLocations=document.getElementById('divLocations');
		var ddllocations= eval(divLocations.childNodes[0]);
		var locationvalues=ddllocations.options[ddllocations.selectedIndex].value;

		var url = "GetVacancies.ashx?selectedPositions="+seleced.options[seleced.selectedIndex].value+"&selectedLocations="+ddllocations.options[ddllocations.selectedIndex].value+"&fkey_company=1";
		vacancies.onCompletion = OnLoadVacanciesBinding;
		vacancies.onError = ShowError;
		vacancies.requestFile = url;
		vacancies.runAJAX(url);
	}*/
	function LoadGrid()
	{
		var divPositions=document.getElementById('divPositions');
		var divLocations=document.getElementById('divLocations');
		var ddlpositions= eval(divPositions.childNodes[0]);
		var ddllocations= eval(divLocations.childNodes[0]);
		
		var positionvalues=-1;
		var locationvalues=-1;
		
		var url = "GetVacancies.ashx?selectedPositions="+positionvalues+"&selectedLocations="+locationvalues+"&fkey_company=1";
		vacancies.onCompletion = OnLoadVacanciesBinding;
		vacancies.onError = ShowError;
		vacancies.requestFile = url;
		vacancies.runAJAX(url);
	}
		
	
	var DEFAULT_WIDTH =100;
 	var DEFAULT_HEIGHT = 20;
 	function DropDownList(ddlcontainer,parsedData,displayParams,refreshOnChange,defaultValue,mContrainer)
 	{	
 		this.alertture = arguments[5];
		this.loading = document.createElement("div");
 		this.defaults = defaultValue;
 		this.options = displayParams;
 		this.container = ddlcontainer;
		this.messageContrainer = mContrainer
		//this.SetLoadingDialog();

		this.noData = false;
 		this.refresh = refreshOnChange;
 		this.data = parsedData;
 		this.myDropDown = document.createElement("select");
 		this.AppendOptions();
 	};
 	
 	DropDownList.prototype.AppendOption = function(rowdata){
 	     for(var obj in this.options)
 	     { 	
 			//if(this.alertture) alert(rowdata[obj.toLowerCase()]);
 			this.myDropDown.options[this.myDropDown.options.length] = new Option(rowdata[obj.toLowerCase()],rowdata[this.options[obj].toLowerCase()]);
 	     }
    };
    DropDownList.prototype.AppendOptions=function(){
		
		var data = this.data.table;
		this.myDropDown.options[this.myDropDown.options.length] = new Option(this.defaults,'-1');
		if(this.messageContrainer)
		this.messageContrainer.style.display = 'none';
		this.container.style.display = 'block';
		
		if (data == undefined)
		{
			this.container.style.display = 'none';
			if(this.messageContrainer)
			this.messageContrainer.style.display = 'block';
		}
		else if(data.length == undefined){			
			this.AppendOption(data);			
		}else{
			for(var obj in data){			
				this.AppendOption(data[obj]);
			}
		}
    }

	DropDownList.prototype.SetLoadingDialog = function(){
		//alert('Loading...');
		this.loading.style.width = '75px';
		this.loading.style.height = '20px';
		this.loading.innerText = "Loading...";
		this.loading.style.backgroundColor = 'red';
		this.loading.style.color = 'white';
		this.container.appendChild(this.loading);
	};

    DropDownList.prototype.DisplayView = function(){
		this.container.appendChild(this.myDropDown);
		this.myDropDown.onchange = this.refresh;
    };

    

    function Grid(container,values,PostApplication,displayColumns,labelColumns,keyColumns,dateColumns,nVacansies)
    {	
		
		this.Apply = PostApplication;
		this.displayFields = displayColumns;
		this.labelFields = labelColumns;
		this.DateFields = dateColumns;
		this.keyFields = keyColumns;
		this.noVacansies = nVacansies;
		this.itemColor = "#D5D7DB";
		this.alternateItemColor = "#E3E5E6";
		this.pane = new Pane();		
		this.className = "texttable";
		this.container = container;
        this.parser = values;//new DataParser(values);
        this.names  = [];
		this.GetHeaders();
        this.ResetView(this.container);
		this.myGrid = document.createElement("table");
		this.SetView();
        this.CreateRowView();
        this.ShowView();
        
    };

	Grid.prototype.GetHeaders = function(){
		if(this.parser.table)
		{
			for(var x in this.parser.table){
				this.names[x] = x;
			}
		}
	}
    
    Grid.prototype.CreateRowView = function(){
		var data = this.parser;
		if(data.table && !data.table.length)
		{	
			for(var obj in data)
            {	
				if(obj != 'xmlns')
				this.CreateDataView(data[obj]);
            }
           
		}
		else if(data.table && data.table.length){
			for(i=0;i<data.table.length;i++)
            {	
				this.CreateDataView(data.table[i]);
            }
           
		}
		else{
			this.SetNoRecords();
		}
    };
    
    Grid.prototype.GetColor = function(index){
		return index%2 == 0 ? this.itemColor : this.alternateItemColor;
    };   
    
    
    Grid.prototype.GetPanes = function(){
		return this.pane.GetPanes();
    };
    
    Grid.prototype.ShowView = function(){
		this.container.appendChild(this.myGrid);
		
    }
    
    Grid.prototype.AppendRow = function(pane){
		
		var myRow = null
		if(isIE)
			myRow = this.myGrid.insertRow();
		else
			myRow = document.createElement("tr");
		if(!isIE) this.myGrid.appendChild(myRow);


		var myCell = null;
		if(isIE)
			myCell = myRow.insertCell();
		else
			myCell= document.createElement("td");
		if(!isIE) myRow.appendChild(myCell);

		myCell.appendChild(pane);
    };
    
    Grid.prototype.SetView = function(){
		this.myGrid.width="100%";
		this.myGrid.className = this.className;
		this.myGrid.cellSpacing=0;
		this.myGrid.border=0;
		this.myGrid.cellPadding=2;
    };
    
    Grid.prototype.SetNoRecords = function()
    {	
		//alert(this.container.children.length);
		//var norecords=document.createTextNode("No Vacancies are found.");
		//this.container.firstChild.replaceNode(norecords);
		//this.container.style.display='none';
		this.noVacansies.style.display = 'block';
		//alert('No Vacancies are found.');
		
    };
    
    Grid.prototype.ResetView = function(myContainer)
    {	
		//alert(myContainer.children.length);
		if(myContainer.firstChild){
			if(isIE)
				myContainer.firstChild.removeNode(true);
			else
				myContainer.removeChild(myContainer.firstChild);
		}
		/*if(myContainer.children.length == 0) return;
		else this.ResetView(myContainer);*/
    };
    
    Grid.prototype.CreateDataView = function(rowdata){		
		this.pane.CreatePaneRowView();
		this.pane.CreatePane(rowdata,this.names,this);
		//alert(this.pane.GetCurrentPane().innerHTML);
		this.AppendRow(this.pane.GetCurrentPane());
		
    };
    
    function Pane(){
		this.panes = [];
		this.currentPane = null;
		this.myRowHeaderClass = "trtext";
		this.mySeparatorClass = "tdpoint";
		this.myDataClass = "tddata";
		this.apply = null;
    };
    
    Pane.prototype.CreatePaneRowView = function(){
		this.panes[this.panes.length] = document.createElement("table");
		this.currentPane = this.panes[this.panes.length-1];
		this.apply = document.createElement('input');
		this.apply.type = 'button';
		this.apply.value = 'Apply';
		this.apply.className = 'savebtn';
		this.SetPaneView();
    }
     
    Pane.prototype.GetCurrentPane = function(){
		return this.currentPane;
    };
    
    Pane.prototype.GetPanes = function(){
		return this.panes.length;
    };
   
    Pane.prototype.SetEvents = function(grid,rowdata){
		if(this.apply){
			this.SetKeys(grid,rowdata);	
			(document.addEventListener) ? this.apply.addEventListener('click',grid.Apply,false):this.apply.attachEvent('onclick',grid.Apply);
			
		}
    }
    
    Pane.prototype.SetKeys = function(grid,rowdata){
		var values = new Array();
		for(var obj in grid.keyFields){
			values.push(rowdata[obj.toLowerCase()]);
		}
		this.apply.text = values;
    }
   
    Pane.prototype.SetPaneView = function(){
		this.currentPane.width="100%";
		this.currentPane.className="texttable";
		this.currentPane.cellSpacing=1;
		this.currentPane.border=0;
		this.currentPane.cellPadding=0;
		this.currentPane.height = DEFAULT_HEIGHT;
    };
    
    Pane.prototype.FormatDate = function(dateValue){
		if(dateValue && dateValue.toUpperCase().indexOf('T') > -1)
			return dateValue.toUpperCase().split('T')[0];
		else return dateValue
    }

    Pane.prototype.CreatePane = function(rowdata,names,grid){
		
		var index = 0;
		this.SetEvents(grid,rowdata);
		
		for(var obj in grid.displayFields)
		{
			var color = grid.GetColor(index);
			var row = null
			if(isIE)
				row = this.currentPane.insertRow();
			else
				row = document.createElement("tr");
			if(!isIE) this.currentPane.appendChild(row);

			row.bgColor = grid.GetColor(index);
			var cell1 = null;
			if(isIE)
				 cell1= row.insertCell();
			else
				cell1= document.createElement("td");

			cell1.className=this.myRowHeaderClass;
			
			cell1.innerHTML = grid.labelFields[grid.displayFields[obj]];
			
			if(!isIE) row.appendChild(cell1);
			
			var cell2 = null;
			if(isIE)
				cell2= row.insertCell();
			else
				cell2= document.createElement("td");
			if(!isIE) row.appendChild(cell2);

			cell2.className = this.mySeparatorClass;
			cell2.innerHTML = ":";
			
			var cell3 = null;
			if(isIE)
				cell3= row.insertCell();
			else
				cell3= document.createElement("td");
			if(!isIE) row.appendChild(cell3);
			
			cell3.className=this.myDataClass;

			if(grid.DateFields[obj]){// alert('2 : '+obj);alert('2 : '+rowdata[obj.toLowerCase()]);
				cell3.innerHTML = this.FormatDate(rowdata[obj.toLowerCase()]);	
			}
			else{//alert('1 : '+obj);alert('1 : '+rowdata[obj.toLowerCase()]);alert(rowdata);
				cell3.innerHTML = rowdata[obj.toLowerCase()];	
			}
			index++;
		}
		
		if(this.apply){
			var color = grid.GetColor(index);
			
			var row = null
			if(isIE)
				row = this.currentPane.insertRow();
			else
				row = document.createElement("tr");
			if(!isIE) this.currentPane.appendChild(row);
				
			row.bgColor = grid.GetColor(index);
			
			var cell1 = null;
			if(isIE)
				cell1= row.insertCell();
			else
				cell1= document.createElement("td");
			if(!isIE) row.appendChild(cell1);

			cell1.colSpan = 3;
			cell1.innerHTML = "Click 'Apply' button to submit resume";
			cell1.align = 'right';
			cell1.appendChild(this.apply);
			index++;
		}
		
		this.apply = null;
    };
    
    // call ajax to get date.
    // user handle to render the output.
    
	function DataParser(xmldata){
		this.header = null;
		this.hiddenkeys = null;
		this.rows = new Array(); 
		if(isIE)
		{
			this.xmlDoc =new ActiveXObject("Microsoft.XMLDOM");
			this.xmlDoc .async="false";
			this.xmlDoc .loadXML(xmldata);			
			this.Parse();

		}
		else
		{
			parser=new DOMParser();
			this.xmlDoc = parser.parseFromString(xmldata,"text/xml");
			this.Parse();
		}
	};
	DataParser.prototype.Header = function(){
		return this.header;
	}

	DataParser.prototype.Hidden = function(){
		return this.hiddenkeys;
	}
	DataParser.prototype.Parse = function()
	{
		//alert(this.xmlDoc);
		if(this.xmlDoc.firstChild.childNodes.length > 0)
		{
			node = this.xmlDoc.firstChild.firstChild;
			columns = [];
			this.ReadNodeValues(node,columns);
		}
	};
	DataParser.prototype.ReadNodeValues = function(node,columns){
		var noheader = this.header == null;
		var myHeader = [];
		for(var k=0; k<node.childNodes.length; k++)
		{	
			name = node.childNodes[k].nodeName;
			value  = node.childNodes[k].text;
			columns[name] = value;			
			if(noheader){
			var ishidden = name.replace('hidden_','').length != name.length;
			if(!ishidden)
				myHeader[name] = name;
			else
				this.hiddenkeys[name] = name.replace('hidden_','');
			}
		}
		if(noheader){
			this.header = myHeader;
		}
		this.rows.push(columns);
		columns = [];			
		if(node.nextSibling)
		this.ReadNodeValues(node.nextSibling,columns);
	};
	DataParser.prototype.GetRows = function()
	{
		//alert(this.rows);
		return this.rows;
	};



xml2json={
	parser:function(xmlcode,ignoretags,debug){
		if(!ignoretags){ignoretags=""};
		xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
		xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
		if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
		var x=this.no_fast_endings(xmlcode);
		//alert(x);
		x = x.replace(' xmlns="http://tempuri.org/Admin.xsd"','');
		x = x.replace(' xmlns="http://tempuri.org/Common.xsd"','');
		x = x.replace(' xmlns="http://tempuri.org/hrm.xsd"','');
		//alert(x);
		x=this.attris_to_tags(x);
		x=escape(x);
		x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
		for (var i=0;i<ignoretags.length;i++){
			x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
			x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
		};
		//alert(x);
		x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
		this.xmlobject={};
		var y=this.xml_to_object(x).jsontagwrapper;
		if(debug){y=this.show_json_structure(y,debug)};
		return y
	},
	xml_to_object:function(xmlcode){
		var x=xmlcode.replace(/<\//g,"§");
		x=x.split("<");
		var y=[];
		var level=0;
		var opentags=[];
		for (var i=1;i<x.length;i++){
			var tagname=x[i].split(">")[0];
			opentags.push(tagname);
			level++
			y.push(level+"<"+x[i].split("§")[0]);
			while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
		};
		var oldniva=-1;
		var objname="this.xmlobject";
		for (var i=0;i<y.length;i++){
			var preeval="";
			var niva=y[i].split("<")[0];
			var tagnamn=y[i].split("<")[1].split(">")[0];
			tagnamn=tagnamn.toLowerCase();
			var rest=y[i].split(">")[1];
			if(niva<=oldniva){
				var tabort=oldniva-niva+1;
				for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
			};
			objname+="."+tagnamn;
			var pobject=objname.substring(0,objname.lastIndexOf("."));
			if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
			var objlast=objname.substring(objname.lastIndexOf(".")+1);
			var already=false;
			for (k in eval(pobject)){if(k==objlast){already=true}};
			var onlywhites=true;
			for(var s=0;s<rest.length;s+=3){
				if(rest.charAt(s)!="%"){onlywhites=false}
			};
			if (rest!="" && !onlywhites){
				if(rest/1!=rest){
					rest="'"+rest.replace(/\'/g,"\\'")+"'";
					rest=rest.replace(/\*\$\*\*\*/g,"</");
					rest=rest.replace(/\*\$\*\*/g,"<");
					rest=rest.replace(/\*\*\$\*/g,">")
				}
			} 
			else {rest="{}"};
			if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
			if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
			var before="=";after="";
			if (already){before=".push(";after=")"};
			var toeval=preeval+objname+before+rest+after;
			eval(toeval);
			if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
			oldniva=niva
		};
		return this.xmlobject
	},
	show_json_structure:function(obj,debug,l){
		var x='';
		if (obj.sort){x+="[\n"} else {x+="{\n"};
		for (var i in obj){
			if (!obj.sort){x+=i+":"};
			if (typeof obj[i] == "object"){
				x+=this.show_json_structure(obj[i],false,1)
			}
			else {
				if(typeof obj[i]=="function"){
					var v=obj[i]+"";
					//v=v.replace(/\t/g,"");
					x+=v
				}
				else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
				else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
			}
		};
		if (obj.sort){x+="],\n"} else {x+="},\n"};
		if (!l){
			x=x.substring(0,x.lastIndexOf(","));
			x=x.replace(new RegExp(",\n}","g"),"\n}");
			x=x.replace(new RegExp(",\n]","g"),"\n]");
			var y=x.split("\n");x="";
			var lvl=0;
			for (var i=0;i<y.length;i++){
				if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
				tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
				x+=tabs+y[i]+"\n";
				if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
			};
			if(debug=="html"){
				x=x.replace(/</g,"&lt;").replace(/>/g,"&gt;");
				x=x.replace(/\n/g,"<BR>").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;")
			};
			if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
		};
		return x
	},
	no_fast_endings:function(x){
		x=x.split("/>");
		for (var i=1;i<x.length;i++){
			var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
			x[i]="></"+t+">"+x[i]
		}	;
		x=x.join("");
		return x
	},
	attris_to_tags: function(x){
		var d=' ="\''.split("");
		x=x.split(">");
		for (var i=0;i<x.length;i++){
			var temp=x[i].split("<");
			for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
			if(temp[1]){
				temp[1]=temp[1].replace(/'/g,'"');
				temp[1]=temp[1].split('"');
				for (var j=1;j<temp[1].length;j+=2){
					for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
				};
				temp[1]=temp[1].join('"')
			};
			x[i]=temp.join("<")
		};
		x=x.join(">");
		x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
		x=x.replace(/>"/g,">").replace(/"</g,"<");
		for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])}	;
		return x
	}
};


if(!Array.prototype.push){
	Array.prototype.push=function(x){
		this[this.length]=x;
		return true
	}
};

if (!Array.prototype.pop){
	Array.prototype.pop=function(){
  		var response = this[this.length-1];
  		this.length--;
  		return response
	}
};