﻿var _start = 0;
var _pageSize = 10;
var _count;
var _pager;
var _cats = new Object();
var _schools;
var _degreeTypes;
var _ignore = false;
var _catsLoaded = false;

function loadData() {
    var catDD = $get('categoryDropDown');
    
    if (!_catsLoaded) {
        CyberCoders.WebServices.ThirdParty.GetCategories(
		function(cats) {
		    for (var i = 0; i < cats.Table.length; i++) {
		        var entry = _cats[cats.Table[i].cat_id];

		        if (!entry) {
		            entry = new Object();
		            entry.catname = cats.Table[i].catname;
		            entry.cat_id = cats.Table[i].cat_id;
		            entry.concentrations = [];
		        }

		        entry.concentrations.push({ "concentration_id": cats.Table[i].concentration_id, "concentration_name": cats.Table[i].concentration_name });
		        _cats[cats.Table[i].cat_id] = entry;
		    }
		   
		    var handler = function(e) {
		        var c = parseInt(catDD.options[catDD.selectedIndex].value);
		        populateDropDown($get('concentrationDropDown'), _cats[c] == null ? [] : _cats[c].concentrations, 'concentration_name', 'concentration_id', _emd['conc_id']);
		    };
		    $addHandler(catDD, 'change', handler);

		    populateDropDown(catDD, _cats, 'catname', 'cat_id', _emd['cat_id']);
		    populateDropDown($get('concentrationDropDown'), [], '', '', _emd['conc_id']);

		    handler(null);
		    _catsLoaded = true;

		});
    }
    else {
        //populateDropDown(catDD, _cats, 'catname', 'cat_id', _emd['cat_id']);
        var c = parseInt(catDD.options[catDD.selectedIndex].value);
        populateDropDown($get('concentrationDropDown'), _cats[c] == null ? [] : _cats[c].concentrations, 'concentration_name', 'concentration_id', _emd['conc_id']);
    }
    
	CyberCoders.WebServices.ThirdParty.GetDegreeTypes(function(degrees) { _degreeTypes = degrees.Table; populateDropDown($get('degreeDropDown'), _degreeTypes, 'type', 'type_id'); });
	CyberCoders.WebServices.ThirdParty.GetSchools(function(schools) { _schools = schools.Table; populateDropDown($get('schoolDropDown'), _schools, 'school_name', 'school_id'); });
}

function populateDropDown(dd, data, dataTextField, dataValueField, selectedValue) {
	dd.innerHTML = '';
	
	var o = createOption('All', 0, selectedValue == null || selectedValue == 0);			
	dd.appendChild(o);
	
	for(var item in data) {
		if (data[item][dataValueField] !== 0) {
			o = createOption(data[item][dataTextField], data[item][dataValueField], selectedValue != null && selectedValue == data[item][dataValueField]);				
			dd.appendChild(o);
		}
	}
	dd.disabled = false;
}

function searchDegrees() {
	_start = 0;
	if (AjaxControlToolkit.PopupControlBehavior.__VisiblePopup) {
		AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.hidePopup();
	}

	if (lastTabIndex == 1)
	    fromSearch = false;
	else
	    fromSearch = true;

	loadDegrees(fromSearch);
	
	_ignore = true;
	_pager.jumpToPage(0);
	_ignore = false;
	
	$find('ccTracker').trackPage(window.location.pathname + '/CareerEducationSearchForm' + window.location.search);
}

function createOption(text, value, selected) {
	var o = document.createElement('option');
	o.innerHTML = text;
	o.value = value;
	o.selected = !!selected;
	return o;
}

function pager_pageChanged(sender, args) {
	if (AjaxControlToolkit.PopupControlBehavior.__VisiblePopup) {
		AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.hidePopup();
	}
	
	_start = args.get_page() * _pageSize;
	
	showAnimation();
	loadDegrees(fromSearch, stopAnimation);
	
	if (!_ignore) {
		$find('ccTracker').trackPage(window.location.pathname + '/CareerEducationSearch' + window.location.search);
	}
}

function stopAnimation() {
	var a = $find('upAnimation').get_OnUpdatedBehavior();
	var newAnimation = new AjaxControlToolkit.Animation.GenericAnimationBehavior($get('emdPanel'));
	newAnimation.set_json(a.get_json());
	newAnimation.get_animation().set_animationTarget('emdPanel');
	
	newAnimation.play();
}

function showAnimation() {
	var a = $find('upAnimation').get_OnUpdatingBehavior();
	var newAnimation = new AjaxControlToolkit.Animation.GenericAnimationBehavior($get('emdPanel'));
	newAnimation.set_json(a.get_json());
	newAnimation.get_animation().set_animationTarget('emdPanel');
	
	newAnimation.play();
}

function loadDegrees(fromSearch, onCompleted) {			
	var cat = getValue('categoryDropDown');
	var con = getValue('concentrationDropDown');
	var degree = getValue('degreeDropDown');
	var school = getValue('schoolDropDown');
	
	CyberCoders.WebServices.ThirdParty.SearchDegreesCount(cat, con, degree, school, onSearchDegreesCountComplete);
	CyberCoders.WebServices.ThirdParty.SearchDegrees(cat, con, degree, school, _start + 1, _start + _pageSize, function(table) { onSearchDegreesComplete(fromSearch, table); if (typeof(onCompleted) === 'function') { onCompleted(); }});
}		

function getValue(dd) {
	var d = $get(dd);
	var v = d.options.length > d.selectedIndex ? parseInt(d.options[d.selectedIndex].value) : 0;
	return isNaN(v) ? 0 : v;
}

function onSearchDegreesCountComplete(count) {
	_count = count;
	var label = $get('pageLabel');
	
	if (count == 0) {
		label.style.display.visibility = 'hidden';
		$get('emptyTemplate').style.display = 'block';
		$get('emdSearchResultHeader').style.display = 'none';
		$get('templateHolder').style.display = 'none';
	}
	else {
		$get('emdSearchResultHeader').style.display = 'block';
		$get('templateHolder').style.display = 'block';
		$get('emptyTemplate').style.display = 'none';
		label.style.display.visibility = 'visible';
		label.innerHTML = String.format('Degrees {0}-{1} of {2}', _start + 1, Math.min(_start + _pageSize, _start + count), count >= 1000 ? '1000+' : count);			
	}
	
	_pager.set_pageCount(Math.ceil(count / _pageSize) | 0);
}

function displayMore(target) {
	if (AjaxControlToolkit.PopupControlBehavior.__VisiblePopup) {
		AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.hidePopup();
	}
	
	var popup = $create(AjaxControlToolkit.PopupControlBehavior, { "id" : "tempPopup", "PopupControlID" : "moreInfoPopup", "OffsetY" : 12 }, null, null, target);
	$get('moreInfoPopupText').innerHTML = target._value.long_desc;
	
	popup.add_hidden(function() { popup.dispose(); Sys.Application.removeComponent(popup); });
	popup.showPopup();			
}
		
function onSearchDegreesComplete(fromSearch, table) {
	var template = $get('template');
	var templateHolder = $get('templateHolder');
				
	templateHolder.innerHTML = '';
	
	var results = null;
	if (table != null && table.Table != null)
		results = table.Table;
	else
		results = [];			
	
	for (var i = 0; i < results.length; i++) {
		var itemTemplate = template.cloneNode(true);
		itemTemplate.id = 'template' + i;
		
		var link = $get('templateLink', itemTemplate);	
		var q = document._q;
		var url = results[i].form_url;
		if (url.indexOf('?') <= 0)
			url = url + '?';
		else if (!url.endsWith('&'))
		    url = url + '&';
		if (fromSearch)
		    url = '/External.aspx?d=1&url=' + escape(url + getEMDQueryString(q));
		else
		    url = '/External.aspx?d=1&url=' + escape(url + q);
    
		link.href = url;				
		link.innerHTML = results[i].degree_title;
		itemTemplate._url = url;
		$addHandler(itemTemplate, 'click', goToUrl);
		
		var link2 = $get('templateMoreInfoLink', itemTemplate);
		link2.href = url;
		$addHandler(link2, 'click', function(e) { e.stopPropagation(); });
		
		var img = $get('templateLogo', itemTemplate);
		img.src = results[i].school_logo;
		img.alt = results[i].school_name;
		
		var desc = $get('templateDescription', itemTemplate);
		var text = results[i].long_desc;
		var readMore = $get('templateReadMore', itemTemplate);
		
		if (text.length > 300) {
			text = text.substring(0,300) + '... ';
			readMore.style.visibility = 'visible';
			$get('templateReadMoreLink', itemTemplate)._value = results[i];
		}
			
		desc.innerHTML = text;
		
		var school = $get('templateSchool', itemTemplate);
		school.innerHTML = results[i].school_name;
		
		var aos = $get('templateAoS', itemTemplate);
		aos.innerHTML = results[i].area_of_study;
		
		var degree = $get('templateDegree', itemTemplate);
		degree.innerHTML = results[i].type == null ? 'Unknown' : results[i].type;				
		
		itemTemplate.style.display = 'block';
		templateHolder.appendChild(itemTemplate);
	}
}

function getEMDQueryString(q) {
    var bIsKey = false;
    var qs = q.split("&");
    var finalq = "";

    for (var i = 0; i < qs.length; i++) {
        var pos = qs[i].indexOf("=");
        if (pos > 0) {
            var key = qs[i].substring(0, pos);
            var val = qs[i].substring(pos + 1);

            if (key == "key")
                bIsKey = true;
        }

        if (!bIsKey)
            finalq += qs[i] + "&";
        bIsKey = false;
    }
    
    finalq += "key=cybercdel_spnsred_link";
    

    return finalq;
}

function goToUrl(e) {
	e = e.target;
	
	while (e && !e._url) {
		e = e.parentNode;
	}
	
	if (e && e._url) {
		window.open(e._url);
	}
}

Sys.Application.add_init(function() { _pager = $create(CyberCoders.DataPager, {'previousPageText' : '&lt;- Previous', 'nextPageText' : 'Next -&gt;', 'pageSize' : _pageSize, 'maxPageNumber' : 5}, {"pageChanged": pager_pageChanged}, null, $get('pagerHolder'));});