jQuery.fn.dynamic_language_pairs = function(o) {
 
 // Defaults
 var o = jQuery.extend( {
 default_language: 'en',
 first_languages: ['ar', 'zh', 'en', 'fr', 'de', 'hi' , 'it', 'ja', 'ko', 'pt-PT', 'ru', 'es', 'vi', 'zh-CN', 'zh-TW'],
 hidden_source: ['CHINESE_SIMPLIFIED', 'CHINESE_TRADITIONAL', 'PORTUGUESE'],
 hidden_dest: ['CHINESE', 'PORTUGUESE'],
 last_languages: [],
 alpha_languages: {'HAITIAN_CREOLE': 'ht', 'URDU': 'ur', 'AZERBAIJANI': 'az', 'BASQUE': 'eu', 'GEORGIAN': 'ka', 'ARMENIAN': 'hy' },
 hidden_languages: ['TAGALOG'],
 source: true
 },o);
 
 $(this).each(function(){
$(this).width(140);
var lngs = {};
var s = $(this).html();
if (s.replace(/\s/g,"") != "") { return; }
var a = new Array();
if (o.source == true)
{
 for (var i in o.hidden_source)
 {
   o.hidden_languages.push(o.hidden_source[i]);
 }
} else {
 for (var i in o.hidden_dest)
 {
   o.hidden_languages.push(o.hidden_dest[i]);
 }
}

var my_alpha_languages = new Array();
for (var i in google.language.Languages)
{
 var langCode = google.language.Languages[i];
if (google.language.isTranslatable(langCode))
{
 var langst = language_pairs[i];
if (($.inArray(i, o.hidden_languages)) == -1)
{
 if (langst == undefined) {
          langst = i.substr(0,1).toUpperCase() + i.substr(1).toLowerCase();
 }
 lngs[langst] = langCode;
 a.push(langst);
}
}
}

for (var k in o.alpha_languages)
{
var h = language_pairs[k];
if (($.inArray(h, a)) == -1) {
var v =  o.alpha_languages[k];
lngs[h] = v;
a.push(h);
my_alpha_languages.push(v);
o.last_languages.push(v);
} 
}

var b = a.sort();


  for (var i in b) {
      var langCode = lngs[b[i]];
      if ($.inArray(langCode, o.first_languages) > -1)
if (($.inArray(langCode,my_alpha_languages) > -1) || (google.language.isTranslatable(langCode) && langCode != '')) {
        if (o.default_language == langCode)
        $(this).append('<option SELECTED value="' + langCode + '">' + b[i] + '</option>');
	else
        $(this).append('<option value="' + langCode + '">' + b[i] + '</option>');
       }
     }

        $(this).append('<option value="">--</option>');

     for (var i in b) {
        var langCode = lngs[b[i]];
        if ($.inArray(langCode, o.first_languages) == -1) 
        if ($.inArray(langCode, o.last_languages) == -1) 
         if (($.inArray(langCode,my_alpha_languages) > -1) || (google.language.isTranslatable(langCode) && langCode != '')) {
        if (o.default_language == langCode)
        $(this).append('<option SELECTED value="' + langCode + '">' + b[i] + '</option>');
	else
        $(this).append('<option value="' + langCode + '">' + b[i] + '</option>');

         }
       }

if (o.last_languages.length > 0) {
        $(this).append('<option value="">-- Alpha Languages</option>');
	 for (var i in b) {
	 var langCode = lngs[b[i]];
      if ($.inArray(langCode, o.last_languages) > -1)
if (($.inArray(langCode,my_alpha_languages) > -1) || (google.language.isTranslatable(langCode) && langCode != '')) {
        if (o.default_language == langCode)
        $(this).append('<option SELECTED value="' + langCode + '">' + b[i] + '</option>');
        else
        $(this).append('<option value="' + langCode + '">' + b[i] + '</option>');
       }
	}

	}

 });
 
};

