/*###############################
 *####   countryandstate.js  ####
 *###############################
 */
var countrylist = [
                    { abbr: 'AF', name: 'Afghanistan' },
                    { abbr: 'AL', name: 'Albania' },
                    { abbr: 'DZ', name: 'Algeria' },
                    { abbr: 'AS', name: 'American Samoa' },
                    { abbr: 'AD', name: 'Andorra' },
                    { abbr: 'AO', name: 'Angola' },
                    { abbr: 'AI', name: 'Anguilla' },
                    { abbr: 'AQ', name: 'Antarctica' },
                    { abbr: 'AG', name: 'Antigua and Barbuda' },
                    { abbr: 'AR', name: 'Argentina' },
                    { abbr: 'AM', name: 'Armenia' },
                    { abbr: 'AW', name: 'Aruba' },
                    { abbr: 'AU', name: 'Australia',
                      states: [
                        { abbr: 'AAT', name: 'Australian Antarctic Territory' },
                        { abbr: 'ACT', name: 'Australian Capital Territory' },
                        { abbr: 'NSW', name: 'New South Wales' },
                        { abbr: 'NT', name: 'Northern Territory' },
                        { abbr: 'QLD', name: 'Queensland' },
                        { abbr: 'SA', name: 'South Australia' },
                        { abbr: 'TAS', name: 'Tasmania' },
                        { abbr: 'VIC', name: 'Victoria' },
                        { abbr: 'WA', name: 'Western Australia' }
                    ]},
                    { abbr: 'AT', name: 'Austria' },
                    { abbr: 'AZ', name: 'Azerbaijan' },
                    { abbr: 'AP', name: 'Azores' },
                    { abbr: 'BS', name: 'Bahamas' },
                    { abbr: 'BH', name: 'Bahrain' },
                    { abbr: 'BD', name: 'Bangladesh' },
                    { abbr: 'BB', name: 'Barbados' },
                    { abbr: 'BY', name: 'Belarus' },
                    { abbr: 'BE', name: 'Belgium' },
                    { abbr: 'BZ', name: 'Belize' },
                    { abbr: 'BJ', name: 'Benin' },
                    { abbr: 'BM', name: 'Bermuda' },
                    { abbr: 'BT', name: 'Bhutan' },
                    { abbr: 'BO', name: 'Bolivia' },
                    { abbr: 'BA', name: 'Bosnia And Herzegowina' },
                    { abbr: 'XB', name: 'Bosnia-Herzegovina' },
                    { abbr: 'BW', name: 'Botswana' },
                    { abbr: 'BV', name: 'Bouvet Island' },
                    { abbr: 'BR', name: 'Brazil',
                      states: [
                        { abbr: 'AC', name: 'Acre' },
                        { abbr: 'AL', name: 'Alagoas' },
                        { abbr: 'AP', name: 'Amapa' },
                        { abbr: 'AM', name: 'Amazonas' },
                        { abbr: 'BA', name: 'Baia' },
                        { abbr: 'CE', name: 'Ceara' },
                        { abbr: 'DF', name: 'Distrito Federal' },
                        { abbr: 'ES', name: 'Espirito Santo' },
                        { abbr: 'FN', name: 'Fernando de Noronha' },
                        { abbr: 'GO', name: 'Goias' },
                        { abbr: 'MA', name: 'Maranhao' },
                        { abbr: 'MT', name: 'Mato Grosso' },
                        { abbr: 'MS', name: 'Mato Grosso do Sul' },
                        { abbr: 'MG', name: 'Minas Gerais' },
                        { abbr: 'PA', name: 'Para' },
                        { abbr: 'PB', name: 'Paraiba' },
                        { abbr: 'PR', name: 'Parana' },
                        { abbr: 'PE', name: 'Pernambuco' },
                        { abbr: 'PI', name: 'Piaui' },
                        { abbr: 'RJ', name: 'Rio de Janeiro' },
                        { abbr: 'RN', name: 'Rio Grande do Norte' },
                        { abbr: 'RO', name: 'Rondonia' },
                        { abbr: 'RR', name: 'Roraima' },
                        { abbr: 'RS', name: 'Rio Grande do Sul' },
                        { abbr: 'SC', name: 'Santa Catarina' },
                        { abbr: 'SP', name: 'Sao Paulo' },
                        { abbr: 'SE', name: 'Sergipe' },
                        { abbr: 'TO', name: 'Tocatins' }
                    ]},
                    { abbr: 'IO', name: 'British Indian Ocean Territory' },
                    { abbr: 'VG', name: 'British Virgin Islands' },
                    { abbr: 'BN', name: 'Brunei Darussalam' },
                    { abbr: 'BG', name: 'Bulgaria' },
                    { abbr: 'BF', name: 'Burkina Faso' },
                    { abbr: 'BI', name: 'Burundi' },
                    { abbr: 'KH', name: 'Cambodia' },
                    { abbr: 'CM', name: 'Cameroon' },
                    { abbr: 'CA', name: 'Canada',
                      states: [
                        { abbr: 'AB', name: 'Alberta' },
                        { abbr: 'BC', name: 'British Columbia' },
                        { abbr: 'MB', name: 'Manitoba' },
                        { abbr: 'NB', name: 'New Brunswick' },
                        { abbr: 'NL', name: 'Newfoundland and Labrador' },
                        { abbr: 'NT', name: 'Northwest Territories' },
                        { abbr: 'NS', name: 'Nova Scotia' },
                        { abbr: 'NU', name: 'Nunavut' },
                        { abbr: 'ON', name: 'Ontario' },
                        { abbr: 'PE', name: 'Prince Edward Island' },
                        { abbr: 'QC', name: 'Quebec' },
                        { abbr: 'SK', name: 'Saskatchewan' },
                        { abbr: 'YT', name: 'Yukon Territory' }
                    ]},
                    { abbr: 'CV', name: 'Cape Verde' },
                    { abbr: 'KY', name: 'Cayman Islands' },
                    { abbr: 'CF', name: 'Central African Republic' },
                    { abbr: 'TD', name: 'Chad' },
                    { abbr: 'CL', name: 'Chile' },
                    { abbr: 'CN', name: 'China' },
                    { abbr: 'CX', name: 'Christmas Island' },
                    { abbr: 'CC', name: 'Cocos (Keeling) Islands' },
                    { abbr: 'CO', name: 'Colombia' },
                    { abbr: 'KM', name: 'Comoros' },
                    { abbr: 'CG', name: 'Congo' },
                    { abbr: 'CD', name: 'Congo, The Democratic Republic O' },
                    { abbr: 'CK', name: 'Cook Islands' },
                    { abbr: 'XE', name: 'Corsica' },
                    { abbr: 'CR', name: 'Costa Rica' },
                    { abbr: 'CI', name: 'Cote d` Ivoire (Ivory Coast)' },
                    { abbr: 'HR', name: 'Croatia' },
                    { abbr: 'CU', name: 'Cuba' },
                    { abbr: 'CY', name: 'Cyprus' },
                    { abbr: 'CZ', name: 'Czech Republic' },
                    { abbr: 'DK', name: 'Denmark' },
                    { abbr: 'DJ', name: 'Djibouti' },
                    { abbr: 'DM', name: 'Dominica' },
                    { abbr: 'DO', name: 'Dominican Republic' },
                    { abbr: 'TP', name: 'East Timor' },
                    { abbr: 'EC', name: 'Ecuador' },
                    { abbr: 'EG', name: 'Egypt' },
                    { abbr: 'SV', name: 'El Salvador' },
                    { abbr: 'GQ', name: 'Equatorial Guinea' },
                    { abbr: 'ER', name: 'Eritrea' },
                    { abbr: 'EE', name: 'Estonia' },
                    { abbr: 'ET', name: 'Ethiopia' },
                    { abbr: 'FK', name: 'Falkland Islands (Malvinas)' },
                    { abbr: 'FO', name: 'Faroe Islands' },
                    { abbr: 'FJ', name: 'Fiji' },
                    { abbr: 'FI', name: 'Finland' },
                    { abbr: 'FR', name: 'France (Includes Monaco)' },
                    { abbr: 'FX', name: 'France, Metropolitan' },
                    { abbr: 'GF', name: 'French Guiana' },
                    { abbr: 'PF', name: 'French Polynesia' },
                    { abbr: 'TA', name: 'French Polynesia (Tahiti)' },
                    { abbr: 'TF', name: 'French Southern Territories' },
                    { abbr: 'GA', name: 'Gabon' },
                    { abbr: 'GM', name: 'Gambia' },
                    { abbr: 'GE', name: 'Georgia' },
                    { abbr: 'DE', name: 'Germany' },
                    { abbr: 'GH', name: 'Ghana' },
                    { abbr: 'GI', name: 'Gibraltar' },
                    { abbr: 'GR', name: 'Greece' },
                    { abbr: 'GL', name: 'Greenland' },
                    { abbr: 'GD', name: 'Grenada' },
                    { abbr: 'GP', name: 'Guadeloupe' },
                    { abbr: 'GU', name: 'Guam' },
                    { abbr: 'GT', name: 'Guatemala' },
                    { abbr: 'GN', name: 'Guinea' },
                    { abbr: 'GW', name: 'Guinea-Bissau' },
                    { abbr: 'GY', name: 'Guyana' },
                    { abbr: 'HT', name: 'Haiti' },
                    { abbr: 'HM', name: 'Heard And Mc Donald Islands' },
                    { abbr: 'VA', name: 'Holy See (Vatican City State)' },
                    { abbr: 'HN', name: 'Honduras' },
                    { abbr: 'HK', name: 'Hong Kong' },
                    { abbr: 'HU', name: 'Hungary' },
                    { abbr: 'IS', name: 'Iceland' },
                    { abbr: 'IN', name: 'India' },
                    { abbr: 'ID', name: 'Indonesia' },
                    { abbr: 'IR', name: 'Iran' },
                    { abbr: 'IQ', name: 'Iraq' },
                    { abbr: 'EI', name: 'Ireland (Eire)',
                      states: [
                        { abbr: 'CO ANTRIM', name: 'County Antrim' },
                        { abbr: 'CO ARMAGH', name: 'County Armagh' },
                        { abbr: 'CO CARLOW', name: 'County Carlow' },
                        { abbr: 'CO CAVAN', name: 'County Cavan' },
                        { abbr: 'CO CLARE', name: 'County Clare' },
                        { abbr: 'CO CORK', name: 'County Cork' },
                        { abbr: 'CO DONEGAL', name: 'County Donegal' },
                        { abbr: 'CO DOWN', name: 'County Down' },
                        { abbr: 'CO DUBLIN', name: 'County Dublin' },
                        { abbr: 'CO FERMANAGH', name: 'County Fermanagh' },
                        { abbr: 'CO GALWAY', name: 'County Galway' },
                        { abbr: 'CO KERRY', name: 'County Kerry' },
                        { abbr: 'CO KILDARE', name: 'County Kildare' },
                        { abbr: 'CO KILKENNY', name: 'County Kilkenny' },
                        { abbr: 'CO LAOIS', name: 'County Laois' },
                        { abbr: 'CO LEITRIM', name: 'County Leitrim' },
                        { abbr: 'CO LIMERICK', name: 'County Limerick' },
                        { abbr: 'CO DERRY', name: 'County Londonderry' },
                        { abbr: 'CO LONGFORD', name: 'County Longford' },
                        { abbr: 'CO LOUTH', name: 'County Louth' },
                        { abbr: 'CO MAYO', name: 'County Mayo' },
                        { abbr: 'CO MEATH', name: 'County Meath' },
                        { abbr: 'CO OFFALY', name: 'County Offaly' },
                        { abbr: 'CO MONAGHAN', name: 'County Monaghan' },
                        { abbr: 'CO ROSCOMMON', name: 'County Roscommon' },
                        { abbr: 'CO SLIGO', name: 'County Sligo' },
                        { abbr: 'CO TIPPERARY', name: 'County Tipperary' },
                        { abbr: 'CO TYRONE', name: 'County Tyrone' },
                        { abbr: 'CO WATERFORD', name: 'County Waterford' },
                        { abbr: 'CO WESTMEATH', name: 'County Westmeath' },
                        { abbr: 'CO WEXFORD', name: 'County Wexford' },
                        { abbr: 'CO WICKLOW', name: 'County Wicklow' }
                    ]},
                    { abbr: 'IL', name: 'Israel' },
                    { abbr: 'IT', name: 'Italy' },
                    { abbr: 'JM', name: 'Jamaica' },
                    { abbr: 'JP', name: 'Japan' },
                    { abbr: 'JO', name: 'Jordan' },
                    { abbr: 'KZ', name: 'Kazakhstan' },
                    { abbr: 'KE', name: 'Kenya' },
                    { abbr: 'KI', name: 'Kiribati' },
                    { abbr: 'KP', name: 'Korea, Democratic People\'s Repub' },
                    { abbr: 'KW', name: 'Kuwait' },
                    { abbr: 'KG', name: 'Kyrgyzstan' },
                    { abbr: 'LA', name: 'Laos' },
                    { abbr: 'LV', name: 'Latvia' },
                    { abbr: 'LB', name: 'Lebanon' },
                    { abbr: 'LS', name: 'Lesotho' },
                    { abbr: 'LR', name: 'Liberia' },
                    { abbr: 'LY', name: 'Libya' },
                    { abbr: 'LI', name: 'Liechtenstein' },
                    { abbr: 'LT', name: 'Lithuania' },
                    { abbr: 'LU', name: 'Luxembourg' },
                    { abbr: 'MO', name: 'Macao' },
                    { abbr: 'MK', name: 'Macedonia' },
                    { abbr: 'MG', name: 'Madagascar' },
                    { abbr: 'ME', name: 'Madeira Islands' },
                    { abbr: 'MW', name: 'Malawi' },
                    { abbr: 'MY', name: 'Malaysia' },
                    { abbr: 'MV', name: 'Maldives' },
                    { abbr: 'ML', name: 'Mali' },
                    { abbr: 'MT', name: 'Malta' },
                    { abbr: 'MH', name: 'Marshall Islands' },
                    { abbr: 'MQ', name: 'Martinique' },
                    { abbr: 'MR', name: 'Mauritania' },
                    { abbr: 'MU', name: 'Mauritius' },
                    { abbr: 'YT', name: 'Mayotte' },
                    { abbr: 'MX', name: 'Mexico' },
                    { abbr: 'FM', name: 'Micronesia, Federated States Of' },
                    { abbr: 'MD', name: 'Moldova, Republic Of' },
                    { abbr: 'MC', name: 'Monaco' },
                    { abbr: 'MN', name: 'Mongolia' },
                    { abbr: 'MS', name: 'Montserrat' },
                    { abbr: 'MA', name: 'Morocco' },
                    { abbr: 'MZ', name: 'Mozambique' },
                    { abbr: 'MM', name: 'Myanmar (Burma)' },
                    { abbr: 'NA', name: 'Namibia' },
                    { abbr: 'NR', name: 'Nauru' },
                    { abbr: 'NP', name: 'Nepal' },
                    { abbr: 'NL', name: 'Netherlands',
                      states: [
                        { abbr: 'DR', name: 'Drente' },
                        { abbr: 'FL', name: 'Flevoland' },
                        { abbr: 'FR', name: 'Friesland' },
                        { abbr: 'GL', name: 'Gelderland' },
                        { abbr: 'GR', name: 'Groningen' },
                        { abbr: 'LB', name: 'Limburg' },
                        { abbr: 'NB', name: 'Noord Brabant' },
                        { abbr: 'NH', name: 'Noord Holland' },
                        { abbr: 'OV', name: 'Overijssel' },
                        { abbr: 'UT', name: 'Utrecht' },
                        { abbr: 'ZH', name: 'Zuid Holland' },
                        { abbr: 'ZL', name: 'Zeeland' }
                    ]},
                    { abbr: 'AN', name: 'Netherlands Antilles' },
                    { abbr: 'NC', name: 'New Caledonia' },
                    { abbr: 'NZ', name: 'New Zealand' },
                    { abbr: 'NI', name: 'Nicaragua' },
                    { abbr: 'NE', name: 'Niger' },
                    { abbr: 'NG', name: 'Nigeria' },
                    { abbr: 'NU', name: 'Niue' },
                    { abbr: 'NF', name: 'Norfolk Island' },
                    { abbr: 'MP', name: 'Northern Mariana Islands' },
                    { abbr: 'NO', name: 'Norway' },
                    { abbr: 'OM', name: 'Oman' },
                    { abbr: 'PK', name: 'Pakistan' },
                    { abbr: 'PW', name: 'Palau' },
                    { abbr: 'PS', name: 'Palestinian Territory, Occupied' },
                    { abbr: 'PA', name: 'Panama' },
                    { abbr: 'PG', name: 'Papua New Guinea' },
                    { abbr: 'PY', name: 'Paraguay' },
                    { abbr: 'PE', name: 'Peru' },
                    { abbr: 'PH', name: 'Philippines' },
                    { abbr: 'PN', name: 'Pitcairn' },
                    { abbr: 'PL', name: 'Poland' },
                    { abbr: 'PT', name: 'Portugal' },
                    { abbr: 'PR', name: 'Puerto Rico' },
                    { abbr: 'QA', name: 'Qatar' },
                    { abbr: 'RE', name: 'Reunion' },
                    { abbr: 'RO', name: 'Romania' },
                    { abbr: 'RU', name: 'Russian Federation' },
                    { abbr: 'RW', name: 'Rwanda' },
                    { abbr: 'KN', name: 'Saint Kitts And Nevis' },
                    { abbr: 'SM', name: 'San Marino' },
                    { abbr: 'ST', name: 'Sao Tome and Principe' },
                    { abbr: 'SA', name: 'Saudi Arabia' },
                    { abbr: 'SN', name: 'Senegal' },
                    { abbr: 'XS', name: 'Serbia-Montenegro' },
                    { abbr: 'SC', name: 'Seychelles' },
                    { abbr: 'SL', name: 'Sierra Leone' },
                    { abbr: 'SG', name: 'Singapore' },
                    { abbr: 'SK', name: 'Slovak Republic' },
                    { abbr: 'SI', name: 'Slovenia' },
                    { abbr: 'SB', name: 'Solomon Islands' },
                    { abbr: 'SO', name: 'Somalia' },
                    { abbr: 'ZA', name: 'South Africa' },
                    { abbr: 'GS', name: 'South Georgia And The South Sand' },
                    { abbr: 'KR', name: 'South Korea' },
                    { abbr: 'ES', name: 'Spain' },
                    { abbr: 'LK', name: 'Sri Lanka' },
                    { abbr: 'NV', name: 'St. Christopher and Nevis' },
                    { abbr: 'SH', name: 'St. Helena' },
                    { abbr: 'LC', name: 'St. Lucia' },
                    { abbr: 'PM', name: 'St. Pierre and Miquelon' },
                    { abbr: 'VC', name: 'St. Vincent and the Grenadines' },
                    { abbr: 'SD', name: 'Sudan' },
                    { abbr: 'SR', name: 'Suriname' },
                    { abbr: 'SJ', name: 'Svalbard And Jan Mayen Islands' },
                    { abbr: 'SZ', name: 'Swaziland' },
                    { abbr: 'SE', name: 'Sweden' },
                    { abbr: 'CH', name: 'Switzerland' },
                    { abbr: 'SY', name: 'Syrian Arab Republic' },
                    { abbr: 'TW', name: 'Taiwan' },
                    { abbr: 'TJ', name: 'Tajikistan' },
                    { abbr: 'TZ', name: 'Tanzania' },
                    { abbr: 'TH', name: 'Thailand' },
                    { abbr: 'TG', name: 'Togo' },
                    { abbr: 'TK', name: 'Tokelau' },
                    { abbr: 'TO', name: 'Tonga' },
                    { abbr: 'TT', name: 'Trinidad and Tobago' },
                    { abbr: 'XU', name: 'Tristan da Cunha' },
                    { abbr: 'TN', name: 'Tunisia' },
                    { abbr: 'TR', name: 'Turkey' },
                    { abbr: 'TM', name: 'Turkmenistan' },
                    { abbr: 'TC', name: 'Turks and Caicos Islands' },
                    { abbr: 'TV', name: 'Tuvalu' },
                    { abbr: 'UG', name: 'Uganda' },
                    { abbr: 'UA', name: 'Ukraine' },
                    { abbr: 'AE', name: 'United Arab Emirates' },
                    { abbr: 'UK', name: 'United Kingdom',
                      states: [
                        { abbr: 'AVON', name: 'Avon' },
                        { abbr: 'BEDS', name: 'Bedfordshire' },
                        { abbr: 'BERKS', name: 'Berkshire' },
                        { abbr: 'BUCKS', name: 'Buckinghamshire' },
                        { abbr: 'CAMBS', name: 'Cambridgeshire' },
                        { abbr: 'CHESH', name: 'Cheshire' },
                        { abbr: 'CLEVE', name: 'Cleveland' },
                        { abbr: 'CORN', name: 'Cornwall' },
                        { abbr: 'CUMB', name: 'Cumbria' },
                        { abbr: 'DERBY', name: 'Derbyshire' },
                        { abbr: 'DEVON', name: 'Devon' },
                        { abbr: 'DORSET', name: 'Dorset' },
                        { abbr: 'DURHAM', name: 'Durham' },
                        { abbr: 'ESSEX', name: 'Essex' },
                        { abbr: 'GLOUS', name: 'Gloucestershire' },
                        { abbr: 'GLONDON', name: 'Greater London' },
                        { abbr: 'GMANCH', name: 'Greater Manchester' },
                        { abbr: 'HANTS', name: 'Hampshire' },
                        { abbr: 'HERWOR', name: 'Hereford & Worcestershire' },
                        { abbr: 'HERTS', name: 'Hertfordshire' },
                        { abbr: 'HUMBER', name: 'Humberside' },
                        { abbr: 'IOM', name: 'Isle of Man' },
                        { abbr: 'IOW', name: 'Isle of Wight' },
                        { abbr: 'KENT', name: 'Kent' },
                        { abbr: 'LANCS', name: 'Lancashire' },
                        { abbr: 'LEICS', name: 'Leicestershire' },
                        { abbr: 'LINCS', name: 'Lincolnshire' },
                        { abbr: 'MERSEY', name: 'Merseyside' },
                        { abbr: 'NORF', name: 'Norfolk' },
                        { abbr: 'NHANTS', name: 'Northamptonshire' },
                        { abbr: 'NTHUMB', name: 'Northumberland' },
                        { abbr: 'NOTTS', name: 'Nottinghamshire' },
                        { abbr: 'OXON', name: 'Oxfordshire' },
                        { abbr: 'SHROPS', name: 'Shropshire' },
                        { abbr: 'SOM', name: 'Somerset' },
                        { abbr: 'STAFFS', name: 'Staffordshire' },
                        { abbr: 'SUFF', name: 'Suffolk' },
                        { abbr: 'SURREY', name: 'Surrey' },
                        { abbr: 'SUSS', name: 'Sussex' },
                        { abbr: 'WARKS', name: 'Warwickshire' },
                        { abbr: 'WMID', name: 'West Midlands' },
                        { abbr: 'WILTS', name: 'Wiltshire' },
                        { abbr: 'YORK', name: 'Yorkshire' }
                    ]},
                    { abbr: 'US', name: 'United States',
                      states: [
                        { abbr: 'AK', name: 'Alaska' },
                        { abbr: 'AL', name: 'Alabama' },
                        { abbr: 'AS', name: 'American Samoa' },
                        { abbr: 'AR', name: 'Arkansas' },
                        { abbr: 'AZ', name: 'Arizona' },
                        { abbr: 'CA', name: 'California' },
                        { abbr: 'CO', name: 'Colorado' },
                        { abbr: 'CT', name: 'Connecticut' },
                        { abbr: 'DC', name: 'D.C.' },
                        { abbr: 'DE', name: 'Delaware' },
                        { abbr: 'FL', name: 'Florida' },
                        { abbr: 'GA', name: 'Georgia' },
                        { abbr: 'GU', name: 'Guam' },
                        { abbr: 'HI', name: 'Hawaii' },
                        { abbr: 'ID', name: 'Idaho' },
                        { abbr: 'IL', name: 'Illinois' },
                        { abbr: 'IA', name: 'Iowa' },
                        { abbr: 'IN', name: 'Indiana' },
                        { abbr: 'KS', name: 'Kansas' },
                        { abbr: 'KY', name: 'Kentucky' },
                        { abbr: 'LA', name: 'Louisiana' },
                        { abbr: 'ME', name: 'Maine' },
                        { abbr: 'MP', name: 'Marianas' },
                        { abbr: 'MD', name: 'Maryland' },
                        { abbr: 'MH', name: 'Marshall Islands' },
                        { abbr: 'MA', name: 'Massachusetts' },
                        { abbr: 'MI', name: 'Michigan' },
                        { abbr: 'FM', name: 'Micronesia' },
                        { abbr: 'AA', name: 'Military Americas' },
                        { abbr: 'AE', name: 'Military Europe/ME/Canada' },
                        { abbr: 'AP', name: 'Military Pacific' },
                        { abbr: 'MN', name: 'Minnesota' },
                        { abbr: 'MS', name: 'Mississippi' },
                        { abbr: 'MO', name: 'Missouri' },
                        { abbr: 'MT', name: 'Montana' },
                        { abbr: 'NE', name: 'Nebraska' },
                        { abbr: 'NV', name: 'Nevada' },
                        { abbr: 'NH', name: 'New Hampshire' },
                        { abbr: 'NJ', name: 'New Jersey' },
                        { abbr: 'NM', name: 'New Mexico' },
                        { abbr: 'NY', name: 'New York' },
                        { abbr: 'NC', name: 'North Carolina' },
                        { abbr: 'ND', name: 'North Dakota' },
                        { abbr: 'OH', name: 'Ohio' },
                        { abbr: 'OK', name: 'Oklahoma' },
                        { abbr: 'OR', name: 'Oregon' },
                        { abbr: 'PW', name: 'Palau' },
                        { abbr: 'PA', name: 'Pennsylvania' },
                        { abbr: 'PR', name: 'Puerto Rico' },
                        { abbr: 'RI', name: 'Rhode Island' },
                        { abbr: 'SC', name: 'South Carolina' },
                        { abbr: 'SD', name: 'South Dakota' },
                        { abbr: 'TN', name: 'Tennessee' },
                        { abbr: 'TX', name: 'Texas' },
                        { abbr: 'UT', name: 'Utah' },
                        { abbr: 'VT', name: 'Vermont' },
                        { abbr: 'VI', name: 'Virgin Islands' },
                        { abbr: 'VA', name: 'Virginia' },
                        { abbr: 'WA', name: 'Washington' },
                        { abbr: 'WV', name: 'West Virginia' },
                        { abbr: 'WI', name: 'Wisconsin' },
                        { abbr: 'WY', name: 'Wyoming' }
                      ] },
                    { abbr: 'UM', name: 'United States Minor Outlying Islands' },
                    { abbr: 'UY', name: 'Uruguay' },
                    { abbr: 'UZ', name: 'Uzbekistan' },
                    { abbr: 'VU', name: 'Vanuatu' },
                    { abbr: 'XV', name: 'Vatican City' },
                    { abbr: 'VE', name: 'Venezuela' },
                    { abbr: 'VN', name: 'Vietnam' },
                    { abbr: 'VI', name: 'Virgin Islands (U.S.)' },
                    { abbr: 'WF', name: 'Wallis and Furuna Islands' },
                    { abbr: 'EH', name: 'Western Sahara' },
                    { abbr: 'WS', name: 'Western Samoa' },
                    { abbr: 'YE', name: 'Yemen' },
                    { abbr: 'YU', name: 'Yugoslavia' },
                    { abbr: 'ZR', name: 'Zaire' },
                    { abbr: 'ZM', name: 'Zambia' },
                    { abbr: 'ZW', name: 'Zimbabwe' }
                ];

var magazine = "";  // used by tooltip 

function initcountries(country_id, state_id) {
    var csel = $('select#' + country_id);

    for (i=0; i<countrylist.length; ++i) {
        $("<option>" + countrylist[i].name + "</option>")
            .attr("value", countrylist[i].abbr)
            .appendTo(csel);
    }

    setTimeout(function(){ initcountryselected(country_id, state_id) }, 1);
    csel.bind("change", function(){ updatestateinput(country_id, state_id) });
}

function initcountryselected(country_id, state_id) {
    var csel = $('select#' + country_id);
    var val = $('#' + country_id + "val").attr('value') || 'US';
    csel.children("[value=" + val + "]").attr("selected", "on");
    if (state_id && $("#" + state_id).length ) updatestateinput(country_id, state_id);
}

function updatestateinput(country_id, state_id) {
    var csel = $('select#' + country_id);
    var opt = csel.children(":selected").attr('value') || "";

    for (i=0; i<countrylist.length; ++i) {
        if (countrylist[i].abbr == opt) {
            var newssel;
            var val = $('#' + state_id + "val").attr('value');

            if (countrylist[i].states) {
                newssel = $("<select></select>");
                $('<option value="">-- Select one --</option>').appendTo(newssel);
                for (j=0; j<countrylist[i].states.length; ++j) {
                    $("<option>" + countrylist[i].states[j].name + "</option>")
                        .attr("value", countrylist[i].states[j].abbr)
                        .appendTo(newssel);
                }

                if (val) {
                    newssel.children("[value=" + val + "]").attr("selected", "on");
                    $('#' + state_id + "val").attr('value', "");
                } else {
                    newssel.children(":first").attr("selected", "on");
                }
            } else {
                newssel = $('<input type="text">');
                if (val) {
                    newssel.attr("value", val);
                    $('#' + state_id + "val").attr('value', "");
                }
            }

            $(newssel).attr("tabindex", $('#' + state_id).attr("tabindex"));
            $(newssel).attr("tabIndex", $('#' + state_id).attr("tabIndex"));
            $(newssel).attr("name", $('#' + state_id).attr("name"));
            $(newssel).replaceAll('#' + state_id);

            $(newssel).attr("id", state_id); // Last to prevent duplicate id wackiness

            break;
        }
    }
}

/*#######################
 *####   account.js  ####
 *#######################
 */
 
 function accountSetMemberId(val) {
     document.account.member_id.value=val; 
     if(val) { 
         document.account.email_address.value=""; 
         document.account.username.value=""; 
         document.account.passwd.value=""; 
         document.account.passwd2.value=""; 
         document.account.go.value="Submit changes"; 
         doAccount(); 
         $('#forgot').hide();
     } else { 
         document.account.username.value = ""; 
         document.account.email_address.value = ""; 
         document.account.go.value="Signup Now"; 
     }
 }

 function doAccount() {
     var member_id = document.account.member_id.value;
     var email_address = document.account.email_address.value;
     var username = document.account.username.value;
     var passwd = document.account.passwd.value;
     var passwd2 = document.account.passwd2.value;
     if (passwd != passwd2) {
         document.account.passwd.value = '';
         document.account.passwd2.value = '';
         document.account.passwd.focus();
         alert('Password does not match.\nPlease retype password');
         return;
     }
     if (document.account.member_id.value == '') {
         var errmsg = '';
         if (document.account.email_address.value == '') {
             errmsg += 'An email address is required.\n';
             document.account.email_address.focus();
         }
         if (document.account.username.value == '') {
             errmsg += 'A username is required.\n';
             document.account.username.focus();
         }
         if (document.account.passwd.value == '') {
             errmsg += 'A password is required.\n';
             document.account.passwd.focus();
         }
         if (errmsg != '') {
             alert(errmsg + 'Please fill in the required fields.');
             return;
         }
     }

     $.ajax({
         type: "POST",
         url: "/account",
         data: "member_id=" + member_id + "&email_address=" + email_address + "&username=" + username + "&passwd=" + passwd,
         error: function(r,status,error) {
             alert('error: status='+status+' error='+error); 
         },
         success: function(xml) {
             var doc = xml.documentElement;
             var _member_id = doc.getAttribute('member_id');
             if (_member_id) {
                 member_id = _member_id;
             } else {
                 member_id = '';
             }
             var _email_address = doc.getAttribute('email_address');
             if (_email_address) {
                 email_address = _email_address;
             } else {
                 email_address = '';
             }
             var _username = doc.getAttribute('username');
             if (_username) {
                 username = _username;
             } else {
                 username = '';
             }
             var errormsg = doc.getAttribute('error_msg');
             if (errormsg) {
                 alert(errormsg)
             }
             document.account.member_id.value = member_id;
             document.account.email_address.value = email_address;
             document.account.username.value = username;

             if (StatusManager.get('member_id') != member_id) {
                 StatusManager.set('member_id',member_id);
             }

             if (StatusManager.get('username') != username) {
                 StatusManager.set('username',username);
             }
         }
     });
 }

 function doForgot() {
     var email_address = document.forgot.email_address.value;
     $.ajax({
         type: "POST",
         url: "/forgot",
         data: "email_address=" + email_address,
         success: function(xml) {
             var doc = xml.documentElement;
             var status = doc.childNodes[0].nodeValue;
             if (status == 'success') {
                 alert('Your username and password will be emailed to you.');
             } else {
                 alert('Sorry, we do not have a record of an account with this email address.');
             }
         }
     });
 }
 
/*#####################
*####   alert.js  ####
*#####################
*/
 
 function openAlert( content_id ) {
     if (content_id.indexOf('#') != 0) {
         content_id = '#' + content_id;
     }
     $("body").append('<div class="modal"></div><div class="alert_outer"><div class="alert_top"><img class="alert_close" src="/icons/button_close_whitebg.gif" alt="Close" title="Close"></div><div class="alert_inner"></div><div class="alert_bottom"></div></div>');
     $(".alert_close").click(closeAlert);
     $(".alert_inner").append($(content_id).show());

     // workaround for FF/Mac rendering problem
     $("#bubble_toc").css({ overflow: 'hidden' });
     $(".termsbox").css({ overflow: 'hidden' });

     // workaround for FF missing cursor bug
     $(content_id).css({ overflow: 'auto' });
     var text = $(content_id).find("input, button, textarea");
     if ($(text).size() > 0) $(text).get(0).focus();
 }
 function closeAlert() {
     // workaround for FF/Mac rendering problem
     $("#bubble_toc").css({ overflow: 'auto' });
     $(".termsbox").css({ overflow: 'auto' });

     $("body").append($(".alert_inner > *").hide());
     $(".alert_outer").remove();
     $(".modal").remove();
 }
 
/*#####################
*####   signin.js  ###
*#####################
*/
  
  $(document).ready(function(){
      initTooltip("#masthead");
  });
  function showSignin() {
      if (StatusManager.get('member_id')) {
          $("#signin_username").text(StatusManager.get('username'));
      } else {
          openAlert( "signin_form" );
      }
  }
  function hideSignin() {
      closeAlert();
  }

  function doSignin() {
    var username = document.signin.username.value;
    var passwd = document.signin.passwd.value;
    $.ajax({
        type: "POST",
        url: "/signin",
        data: "username=" + username + "&passwd=" + passwd,
        success: function(xml) {
            var elem = xml.documentElement;
            if (elem) {
                var member_id = elem.getAttribute('member_id');
                var error_msg = elem.getAttribute('error_msg');
                if (member_id) {
                    if(StatusManager.hashdict['redirect_back']){
                        location.href = StatusManager.hashdict['redirect_back'];
                    } 
                    toggle_user_messages(member_id); 
                    StatusManager.set('member_id',member_id);
		    var current_tab = StatusManager.get('current_tab');
                    if (current_tab == 'forgotpassword'){
                        StatusManager.set('current_tab','library');
                    } else {
                        var bubble_url = StatusManager.get('bubble_url');
                        if (bubble_url) {
                            bubble_load(bubble_url);
                        }
                    } 
                    closeAlert();
                } else if (error_msg) {
                    if (error_msg == 'invalid_login') {
                        alert('The username or password you typed was incorrect.\nPlease try again.');
                    }
                }
            }
        }
    });
}

function doSignout()
{
    var exdate = new Date();
    var dd = document.domain;
    var dd_array=dd.split(".");
    var length = dd_array.length;
    var domain = dd_array[length-2]+"."+dd_array[length-1]
    //alert("domain: "+domain);
    document.cookie = 'memberid=;domain='+domain+';expires=' + exdate.toGMTString();
    document.cookie = 'username=;domain='+domain+';expires=' + exdate.toGMTString();
    StatusManager.set('member_id','');
    document.signin.username.value = '';
    document.signin.passwd.value = '';
    toggle_user_messages(false);
    $("#userlibrary_chooser_group").hide(); 
    $("#userlibrary div.active_bubble_content").html($("#member_library_empty_bubble").html());

	//refresh the bubble, so that the buttons change from read(for the user) to lookinside after signing out -supriya
	var current_tab = StatusManager.get('current_tab');
	if (current_tab == 'library'){
      var bubble_url = StatusManager.get('bubble_url');
	   //remove memberid from the url on signout
	  var member_qs = '';
	  if (bubble_url && bubble_url.indexOf("member_id") >= 0)
		{	var temp = new Array();
			temp = bubble_url.split("&");
			var arLen=temp.length;
			for ( var i=0; i<arLen; i++ ){
				if (temp[i].indexOf("member_id") >= 0)
				{
					member_qs = temp[i];
					bubble_url = bubble_url.replace(member_qs,'');
				}
			}
		}
       if (bubble_url) {
         bubble_load(bubble_url);
      }
	}
}
//  function doSignin() {
//      var username = document.signin.username.value;
//      var passwd = document.signin.passwd.value;
//      $.ajax({
//          type: "POST",
//          url: "/signin",
//          data: "username=" + username + "&passwd=" + passwd,
//          success: function(xml) {
//              var elem = xml.documentElement;
//              if (elem) {
//                  var member_id = elem.getAttribute('member_id');
//                  var error_msg = elem.getAttribute('error_msg');
//                  if (member_id) {
//                      StatusManager.set('username',get_cookie('username'));
//                      toggle_user_messages(member_id); 
//                      StatusManager.set('member_id',member_id);
//  		    var current_tab = StatusManager.get('current_tab');
//                      if (current_tab == 'forgotpassword'){
//                          StatusManager.set('current_tab','library');
//                      }
//                      closeAlert();
//                  } else if (error_msg) {
//                      if (error_msg == 'invalid_login') {
//                          alert('The username or password you typed was incorrect.\nPlease try again.');
//                      }
//                  }
//              }
//          }
//      });
//  }
//
//  function doSignout()
//  {
//      var exdate = new Date();
//      var dd = document.domain;
//      var dd_array=dd.split(".");
//      var length = dd_array.length;
//      var domain = dd_array[length-2]+"."+dd_array[length-1]
//      //alert("domain: "+domain);
//      document.cookie = 'memberid=;domain='+domain+';expires=' + exdate.toGMTString();
//      StatusManager.set('member_id','');
//      document.signin.username.value = '';
//      document.signin.passwd.value = '';
//      toggle_user_messages(false);
//      $("#userlibrary_chooser_group").hide();
//      $("#userlibrary div.active_bubble_content").html($("#member_library_empty_bubble").html());
//  }

  if (document.cookie.length > 0) {
      var pos=document.cookie.indexOf("memberid=");
      if (pos!=-1)
      { 
          pos=pos + "memberid=".length;
          var end=document.cookie.indexOf(";",pos);
          if (end==-1) end=document.cookie.length;
          var member_id = document.cookie.substring(pos,end);
          $(document).ready( function() { 
              StatusManager.set('member_id',member_id);
          });
      } 
      pos=document.cookie.indexOf("username=");
      if (pos!=-1)
      { 
          pos=pos + "username=".length;
          var end=document.cookie.indexOf(";",pos);
          if (end==-1) end=document.cookie.length;
          var username = document.cookie.substring(pos,end);
          $(document).ready( function() { 
              StatusManager.set('username',username);
          });
      } 
  }

  function get_cookie( c_name ) {

      if (document.cookie.length>0)
      {
          var c_start=document.cookie.indexOf(c_name+"=");
          if (c_start!=-1)
          { 
              c_start=c_start + c_name.length+1; 
              var c_end=document.cookie.indexOf(";",c_start);
              if (c_end==-1) c_end=document.cookie.length;
              return unescape(document.cookie.substring(c_start,c_end));
          } 
      }
      return false;
  }

  function update_my_cart_link(){
      var item_count = get_cookie("item_count");
      if(item_count && item_count > 0){
          $("span.item_count").html("(" + item_count + ")");
      }else{
          $("span.item_count").empty();
      }
  }

  function toggle_user_messages(logged_in){
  	var current_tab = StatusManager.get('current_tab');
          update_my_cart_link();	
          if(logged_in){
  		$(".member_links").show();
          $(".nonmember_links").hide();
  	    $(".signin_username").text(StatusManager.get('username'));
  		switch(current_tab){
  			case "library":	
  				$(".member_greetings_userlibrary, .nonmember_greetings_userlibrary, .nonmember_greetings_library").hide();
  				$(".member_greetings_library").show().parent().show();
  		  		break;    
  			case "userlibrary":
  				$(".member_greetings_library, .nonmember_greetings_userlibrary, .nonmember_greetings_library").hide();
  				$(".member_greetings_userlibrary").show().parent().show();
  		  		break;
  		}
  	}else{
  		$(".member_links").hide();
  		$(".nonmember_links").show();
  		switch(current_tab){
  			case "library":	
  				$(".nonmember_greetings_userlibrary, .member_greetings_library, .member_greetings_userlibrary").hide();
  				$(".nonmember_greetings_library").show().parent().show();
  		  		break;    
  			case "userlibrary":
  				$(".nonmember_greetings_library, .member_greetings_library, .member_greetings_userlibrary").hide();
  				$(".nonmember_greetings_userlibrary").show().parent().show();
  		  		break;
  		}
  	}
  }

/*#####################
 *####   terms.js  ####
 *#####################
 */

  $(".terms_toc a").livequery('click',function(event){
          var current_hash = location.hash;
  	var terms_section = $(this).attr("href");
          var choice = this; 
          while ($(choice).length && ! $(choice).attr('id')) {
              choice = $(choice).parent();
          }
          var parent_id = choice.attr('id'); 
          if(parent_id != "terms"){
  		window.open('terms_text.html','mywindow','width=950,height=300, scrollbars=yes, resizable=yes')
                  return false;	
          }
  	var terms_anchor = $("#terms a[name='" + terms_section.substring(1) + "']");
  	var terms_anchor_offset = terms_anchor.offset();
  	var terms_anchor_y = terms_anchor_offset.top;	
          window.scrollTo(0,terms_anchor_y);
  	return false;
  });
  
/*#######################
 *####   tooltip.js  ####
 *#######################
 */ 
   function showTooltip (e) {
   
    var t = e.target;
    var id = $(t).attr('tip');
   
    var tip = $("#"+id);
    if ($(t).hasClass('disabled') || $(t).css('display') == 'none') {
        return;
    }
    var target = $(tip);
    positionTooltip(e);
    var target_html = target.html();
    if(target_html && $(t).attr('class').indexOf('spine') > -1){ 
        if(magazine != "")
    	    target.html("View QQQ cover and table of contents");
        target.html(target.html().replace("QQQ", $(t).html()));
        magazine = $(t).html();
    }
    $("blog_teaser_wrapper").focus();
    $(tip).show();
    $(t).mousemove(positionTooltip);
    setTimeout(function(){ hideTooltip(e); },2400);  
}

   function positionTooltip( e ) {
       var mouseX = e.pageX;
       var mouseY = e.pageY;
       var t = e.target;
       var id = $(t).attr('tip');
       var tip = $("#"+id);
       var sTop = $(document).scrollTop();
       var winWidth = $(window).width();
       var posX = mouseX;
       var posY = mouseY;
       if (mouseX + 40 + $(tip).width() > winWidth) {
           posX = mouseX - $(tip).width() - 40;
       } else {
           posX = mouseX + 20;
       }
       if (mouseY - 20 > sTop) {
           posY = mouseY - 20;
       } else {
           posY = mouseY;
       }
       $(tip).css({left: posX, top: posY });
   }

   function hideTooltip (e) {
       var t = e.target;
       var id = $(t).attr('tip');
       var tip = $("#"+id);
       $(tip).hide();
   }

   function cancelAltBehavior( img ){
       var has_alt =$(img).attr('src');
       if(has_alt){
           $(img).removeAttr('alt').removeAttr('title'); 
       } 
   }

   function initTooltip( div ) {
	   divholder = div;
       tipable = $(div).find("[tip]");
       tipable.each(function(){
           cancelAltBehavior(this); 
       });
       tipable.hoverIntent({
           interval: 500,
           timeout: 200,
           over: showTooltip,
           out: hideTooltip
       });
   }

 /*##############################
  *####   cookie_manager.js  ####
  *##############################
  */

 function CookieManagerBase(baseDomain){
     this.domain = baseDomain ? baseDomain : this.getBaseDomain();
 }

 CookieManagerBase.prototype.domain = new String();

 CookieManagerBase.prototype.get = function( c_name ){

     if (document.cookie.length>0){
         var c_start=document.cookie.indexOf(c_name+"=");
         if (c_start!=-1){
             c_start=c_start + c_name.length+1;
             var c_end=document.cookie.indexOf(";",c_start);
             if (c_end==-1){
                 c_end=document.cookie.length;
             }
             return unescape(document.cookie.substring(c_start,c_end));
         }
     }
     return false;
 }

 CookieManagerBase.prototype.set = function( c_name, val, days ){
     days = days ? days : 3000;
     var exp = new Date();
     exp.setDate(exp.getDate() + days);
     document.cookie=c_name+"="+val+";expires="+exp.toGMTString()+";path=/;domain=." + this.domain + ";";
 }

 CookieManagerBase.prototype.remove = function( c_name ){
     var exp = new Date();
     if(get_cookie(c_name)){
         exp.setDate(exp.getDate()-3000); // expires 10 years ago
         document.cookie=c_name+"=;expires="+exp.toGMTString()+";path=/;domain=." + this.domain + ";";
     }
 }

 CookieManagerBase.prototype.getBaseDomain = function(){
     var full_domain = document.domain;
     var domain_bits = full_domain.split(".");
     var bit_count = domain_bits.length - 1;
     var top_level_domain = domain_bits[bit_count - 1] + "." + domain_bits[bit_count];
     return top_level_domain;
 }
 
 /*##############################
  *####   jquery.preload.js  ####
  *##############################
  */

/**
 * jQuery Plugin modified by trixta
 * --------------------------------------------------------------------
 * jQuery-Plugin "preloadCssImages"
 * by Scott Jehl, scott@filamentgroup.com
 * http://www.filamentgroup.com
 * reference article: http://www.filamentgroup.com/lab/update_automatically_preload_images_from_css_with_jquery/
 * demo page: http://www.filamentgroup.com/examples/preloadImages/index_v2.php
 * 
 * Copyright (c) 2008 Filament Group, Inc
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
 *
 * Version: 3.0, 06.21.2008
 * --------------------------------------------------------------------
 */

;jQuery.preloadCssImages = function(settings){
	settings = jQuery.extend({
		statusTextEl: null,
		statusBarEl: null,
		errorDelay: 999, // handles 404-Errors in IE
		simultaneousCacheLoading: 2
	}, settings);
	var allImgs = [],
		loaded = 0,
		imgUrls = [],
		thisSheetRules,	
		errorTimer;
	
	function onImgComplete(){
		clearTimeout(errorTimer);
		if (imgUrls && imgUrls.length && imgUrls[loaded]) {
			loaded++;
			if (settings.statusTextEl) {
				var nowloading = (imgUrls[loaded]) ? 
					'Now Loading: <span>' + imgUrls[loaded].split('/')[imgUrls[loaded].split('/').length - 1] : 
					'Loading complete'; // wrong status-text bug fixed
				jQuery(settings.statusTextEl).html('<span class="numLoaded">' + loaded + '</span> of <span class="numTotal">' + imgUrls.length + '</span> loaded (<span class="percentLoaded">' + (loaded / imgUrls.length * 100).toFixed(0) + '%</span>) <span class="currentImg">' + nowloading + '</span></span>');
			}
			if (settings.statusBarEl) {
				var barWidth = jQuery(settings.statusBarEl).width();
				jQuery(settings.statusBarEl).css('background-position', -(barWidth - (barWidth * loaded / imgUrls.length).toFixed(0)) + 'px 50%');
			}
			loadImgs();
		}
	}
	
	function loadImgs(){
		//only load 1 image at the same time / most browsers can only handle 2 http requests, 1 should remain for user-interaction (Ajax, other images, normal page requests...)
		// otherwise set simultaneousCacheLoading to a higher number for simultaneous downloads
		if(imgUrls && imgUrls.length && imgUrls[loaded]){
			var img = new Image(); //new img obj
			img.src = imgUrls[loaded];	//set src either absolute or rel to css dir
			if(!img.complete){
				jQuery(img).bind('error load onreadystatechange', onImgComplete);
			} else {
				onImgComplete();
			}
			errorTimer = setTimeout(onImgComplete, settings.errorDelay); // handles 404-Errors in IE
		}
	}
	
	function parseCSS(sheets, urls) {
		var w3cImport = false,
			imported = [],
			importedSrc = [],
			baseURL;
		var sheetIndex = sheets.length;
		while(sheetIndex--){//loop through each stylesheet
			
			var cssPile = '';//create large string of all css rules in sheet
			
			if(urls && urls[sheetIndex]){
				baseURL = urls[sheetIndex];
			} else {
				var csshref = (sheets[sheetIndex].href) ? sheets[sheetIndex].href : 'window.location.href';
				var baseURLarr = csshref.split('/');//split href at / to make array
				baseURLarr.pop();//remove file path from baseURL array
				baseURL = baseURLarr.join('/');//create base url for the images in this sheet (css file's dir)
				if (baseURL) {
					baseURL += '/'; //tack on a / if needed
				}
			}
			if(sheets[sheetIndex].cssRules || sheets[sheetIndex].rules){
				thisSheetRules = (sheets[sheetIndex].cssRules) ? //->>> http://www.quirksmode.org/dom/w3c_css.html
					sheets[sheetIndex].cssRules : //w3
					sheets[sheetIndex].rules; //ie 
				var ruleIndex = thisSheetRules.length;
				while(ruleIndex--){
					if(thisSheetRules[ruleIndex].style && thisSheetRules[ruleIndex].style.cssText){
						var text = thisSheetRules[ruleIndex].style.cssText;
						if(text.toLowerCase().indexOf('url') != -1){ // only add rules to the string if you can assume, to find an image, speed improvement
							cssPile += text; // thisSheetRules[ruleIndex].style.cssText instead of thisSheetRules[ruleIndex].cssText is a huge speed improvement
						}
					} else if(thisSheetRules[ruleIndex].styleSheet) {
						imported.push(thisSheetRules[ruleIndex].styleSheet);
						w3cImport = true;
					}
					
				}
			}
			//parse cssPile for image urls
			var tmpImage = cssPile.match(/[^\("]+\.(gif|jpg|jpeg|png)/g);//reg ex to get a string of between a "(" and a ".filename" / '"' for opera-bugfix
			if(tmpImage){
				var i = tmpImage.length;
				while(i--){ // handle baseUrl here for multiple stylesheets in different folders bug
					var imgSrc = (tmpImage[i].charAt(0) == '/' || tmpImage[i].match('://')) ? // protocol-bug fixed
						tmpImage[i] : 
						baseURL + tmpImage[i];
					
					if(jQuery.inArray(imgSrc, imgUrls) == -1){
						imgUrls.push(imgSrc);
					}
				}
			}
			
			if(!w3cImport && sheets[sheetIndex].imports && sheets[sheetIndex].imports.length) {
				for(var iImport = 0, importLen = sheets[sheetIndex].imports.length; iImport < importLen; iImport++){
					var iHref = sheets[sheetIndex].imports[iImport].href;
					iHref = iHref.split('/');
					iHref.pop();
					iHref = iHref.join('/');
					if (iHref) {
						iHref += '/'; //tack on a / if needed
					}
					var iSrc = (iHref.charAt(0) == '/' || iHref.match('://')) ? // protocol-bug fixed
						iHref : 
						baseURL + iHref;
					
					importedSrc.push(iSrc);
					imported.push(sheets[sheetIndex].imports[iImport]);
				}
				
				
			}
		}//loop
		if(imported.length){
			parseCSS(imported, importedSrc);
			return false;
		}
		var downloads = settings.simultaneousCacheLoading;
		while( downloads--){
			setTimeout(loadImgs, downloads);
		}
	}
	parseCSS(document.styleSheets);
	return imgUrls;
};


 /*################################
  *####   stolen from wds util ####
  *################################
  */

function buildPropertyString (oDefaults) {
  var popup_properties = '';

  for (prop in oDefaults) {
        if (popup_properties.length > 0) { popup_properties += ', '; }
        popup_properties += prop + '=' + oDefaults[prop];
  }

  return popup_properties;
}
/*###############Copyright##################
 *####   Copyright 2008 Texterity, Inc  ####
 *###############Copyright##################
 */
