// -*- Mode:java; c-basic-offset:4; tab-width:8 -*-
// vi: set ai sw=4 sts=4:
var locale_map = [];  // state-country mapping
var Location = {};    // last state/country
function init() {
    MM_preloadImages('/images/home_nav2/home_banner/btn_contact_over.gif',
		     '/images/home_nav2/home_banner/btn_employment_over.gif',
		     '/images/home_nav2/home_banner/btn_support_over.gif',
		     '/images/home_nav2/home_banner/btn_offers_over.gif',
		     '/images/page_nav/btn_page_co_over.gif',
		     '/images/page_nav/btn_page_so_over.gif',
		     '/images/page_nav/btn_page_pro_over.gif',
		     '/images/page_nav/btn_page_tech_over.gif',
		     '/images/page_nav/btn_page_news_over.gif',
		     '/images/page_nav/btn_page_partners_over.gif',
		     '/images/page_nav/btn_page_co_over.gif',
		     '/images/page_nav/btn_page_so_over.gif',
		     '/images/page_nav/btn_page_pro_over.gif',
		     '/images/page_nav/btn_page_tech_over.gif',
		     '/images/page_nav/btn_page_news_over.gif',
		     '/images/page_nav/btn_page_partners_over.gif');
    restore_location();
}

function restore_location() {
    if (Location.country) {
        var id = document.getElementById('country_id');
        id.value = Location.country;
    }
    if (Location.state) {
        var id = document.getElementById('state_prov_id');
        id.value = Location.state;
    }
}

function MM_swapImgRestore() { //v3.0
    var i, x, a = document.MM_sr; 

    for(i=0; a && i < a.length && (x = a[i]) && x.oSrc; i++) {
	x.src = x.oSrc;
    }
}

function MM_preloadImages() { //v3.0
    var d = document; 

    if(d.images) { 
	if(!d.MM_p) 
	    d.MM_p = new Array();

	var i, j = d.MM_p.length, a = MM_preloadImages.arguments; 

	for (i = 0; i < a.length; i++) {
	    if (a[i].indexOf("#") != 0) { 
		d.MM_p[j] = new Image; 
		d.MM_p[j++].src = a[i];
	    }
	}
    }
}

function MM_findObj(n, d) { //v4.01
    var p, i, x;  

    if (!d)
	d = document; 
    if (n.length && (p = n.indexOf("?")) > 0 && parent.frames.length) {
	d = parent.frames[n.substring(p + 1)].document; 
	n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) 
	x = d.all[n]; 
    for (i = 0; !x && i < d.forms.length; i++) 
	x = d.forms[i][n];
    for (i=0; !x && d.layers && i < d.layers.length; i++) 
	x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) 
	x = d.getElementById(n); 

    return x;
}

function MM_swapImage() { //v3.0
    var i = 0, j = 0, x, a = arguments; 

    document.MM_sr = new Array; 

    //for (i = 0; i < a.length - 2; i += 3);

    if ((x = MM_findObj(a[i])) != null) {
	document.MM_sr[j++] = x; 
	if (!x.oSrc) 
	    x.oSrc =x.src; 
	x.src = a[i+2];
    }
}

function validation(form) {
    if ((form.first_name.value.length < 1) || 
	hasDigits(form.first_name.value)) {
	alert('Invalid first name');
	form.first_name.focus();
	return false;
    }

    if ((form.last_name.value.length < 1) || hasDigits(form.last_name.value)) {
	alert('Invalid last name');
	form.last_name.focus();
	return false;
    }

    if ((form.title.value.length < 1) || hasDigits(form.title.value.length)) {
	alert('Invalid title');
	form.title.focus();
	return false;
    }

    if (form.company.value.length < 2) {
	alert('Please enter your company');
	form.company.focus();
	return false;
    }

    if (!validate_email(form.email.value)) {
	alert("Invalid E-mail address");
	form.email.focus();
	return false;
    }

    if ((form.city.value.length < 2) || hasDigits(form.city.value)) {
	alert('Invalid city');
	form.city.focus();
	return false;
    }

    if (form.state.value == 'Select Below') {
	alert("Please enter state (enter 'Unknown' for non-USA / Canada addresses)");
	form.state.focus();
	return false;
    }
	
    // phone is a  label:
    //            [      ]
    // veritical layout
    if (form.phone && !validate_phone(form.phone.value)) {
	alert('Please enter phone number with area code');
	form.phone.focus();
	return false;
    }

    if (form.country.value == 'Select Country Below') {
	alert('Please enter your country');
	form.country.focus();
	return false;
    }
    // phone number is a label:[   ] layout
    // horizontal layout
    if (form.phone_number && !validate_phone(form.phone_number.value)) {
	alert('Please enter phone number with area code');
	form.phone_number.focus();
	return false;
    }

    if (form.code.value.length < 6) {
	alert('Please enter code');
	form.code.focus();
	return false;
    }

    return true;
}

function validate_email(str) {
    var at = "@";
    var dot = ".";
    var lat = str.indexOf(at);
    var lstr = str.length;
    var ldot = str.indexOf(dot);

    if (str.indexOf(" ") != -1) {
	return false;
    }
    if (str.indexOf(at) == -1) {
	return false;
    }
    if (str.indexOf(dot) == -1) {
	return false;
    }
    if (str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
	return false;
    }
    if (str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
	return false;
    }

    if (str.indexOf(at, lat + 1) != -1) {
	return false;
    }
    if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
	return false;
    }
    if (str.indexOf(dot, lat + 2) == -1) {
	return false;
    }

    return true;
}

var phoneNumberDelimiters = "()-. ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";

// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s) {   
    var i;
    for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) {
	    return false;
	}
    }
    // All characters are numbers.
    return true;
}

function hasDigits(s) {   
    var i;
    for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((("0" <= c) && (c <= "9"))) {
	    return true;
	}
    }
    // No digits present
    return false;
}

function stripCharsInBag(s, bag) {   
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) {
	    returnString += c;
	}
    }
    return returnString;
}

function checkPhone(strPhone){
    var s = stripCharsInBag(strPhone, validWorldPhoneChars);
    return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function validate_phone(phone){
    if (phone.length < 2){
	return false;
    }
    if (checkPhone(phone) == false) {
	return false;
    }
    return true;
}
function setLocation(obj) {
    if (obj.country) {
        Location.country = obj.country;
    }
    if (obj.state) {
        Location.state = obj.state;
    }
}
function autoSelectState(ob) {
    if (ob == '' || ob.value == '') return;
    var state_id = document.getElementById('state_prov_id');
    if (Location.country && ob.value == Location.country) {
        // retore last Location 
        state_id.innerHTML = getStatesSelect({type:'code', val:Location.state}); 
        return;
    }

    // from locale_map find the States
    var cur_state = state_id.value;
    var country = getCountryByState(cur_state);

    if (country == ob.value) {
        return; // no change is needed 
    }
    // var alert_msg = 'Country has been reset, please select a ';
    var alert_msg = 'Please select a ';
    if (ob.value == 'United States') {
        state_id.innerHTML = getStatesSelect({val:'Select Below'}); 
        alert(alert_msg + 'State.');
        document.forms[0].state.focus(); 
    } else if (ob.value == 'Canada') {
        state_id.innerHTML = getStatesSelect({val:'Select Below'}); 
        alert(alert_msg + 'Province.');
        document.forms[0].state.focus(); 
    } else {
        // unknown, repopulate State/Province id 
        state_id.innerHTML = getStatesSelect({type:'name',val:'Unknown'}); 
    } 
}

function getStatesSelect(selObj) {
    var html = '';
    var html = '<select onChange="autoSelectCountry(this)" name="state">\n';
    if (selObj.val == 'Select Below') {
	html += '<option>' + selObj.val + '</option>';
    }
    for(var i = 0; i < locale_map.length; i++) {
	var locale = locale_map[i];
        html += '<option value="' + locale.code +'" ';
        if (((selObj.type == 'name') 
         && (locale.name == selObj.val)) ||
            ((selObj.type == 'code') 
         && (locale.code == selObj.val)) ||
            ((selObj.type == 'country') 
         && (locale.country == selObj.val))) {
            html += ' selected ';
        }
        html += '>' + locale.name + '</option>\n';
    }
    html += '</select>';
    return html;
}
 
function selectOption(opt,val) {
    for (var i = 0; i < opt.length; i++) {
        var option = opt[i];
        if (option.value == val) {
             option.selected = 'true';
        }
    }
}

function autoSelectCountry(ob) {
    if (ob.value == 'Unknown') return;
    var country = getCountryByState(ob.value);
    var country_id = document.getElementById("country_id");
    country_id.value = country;
    selectOption(country_id.options, country);
    Location = {
		state:ob.value,
                country:country
               };
}

function addLocale(ob) {
    locale_map.push(ob);
    // alert('size of locale map - ' + locale_map.length);
}

function getStateListByCountry(country) {
    var locale; 
    var statelist = [];
    for(var i = 0; i < locale_map.length; i++) {
        var locale = locale_map[i];
        if (locale.country == country) {
	    statelist.push(locale);
        }        
    }
    return statelist;
}

function getCountryByState(state) {
    var locale;
    for(var i = 0; i < locale_map.length; i++) {
        var locale = locale_map[i];
        if (locale.code == state) {
	    return locale.country;
        }
    }
    return '';
}
