﻿function getSearchResults(artistParam, locationParam, fromDateParam, toDateParam, filterParam, includeSimilar, startWith, linkToReplace)
{
    var requestURL = "";
    
    if (linkToReplace != null)
    {        
        if (typeof(linkToReplace.remove) == 'function')
            linkToReplace.remove();
        else 
            linkToReplace.innerHTML = "";
    }
    
    setValueForPlaceHolder($('artistName'), artistParam); 
    setValueForPlaceHolder($('location'), locationParam); 
    setValueForPlaceHolder($('fromDate'), fromDateParam); 
    setValueForPlaceHolder($('toDate'), toDateParam);

    if (filterParam == "True")
        $('chkOnlyWithEvents').checked = true;

    $('chkWithSimilar').checked = (includeSimilar == "True");
    $('tdOnlyWithEvents').style.display = (includeSimilar == "True" ? "block" : "none");
    
        
    if (locationParam != "" && artistParam == "")
        requestURL = 'findshowslocation.aspx?location=' + locationParam + '&fromDate=' + fromDateParam + '&toDate=' + toDateParam + '&startWith=' + startWith;
    else
        requestURL = 'findshows.aspx?artistName=' + artistParam + '&location=' + locationParam + '&fromDate=' + fromDateParam + '&toDate=' + toDateParam + '&chkOnlyWithEvents=' + filterParam + '&chkWithSimilar=' + includeSimilar + '&startWith=' + startWith;

    new Ajax.Updater('resultsDiv', requestURL, { evalScripts: true, insertion: Insertion.Bottom }); 
    
    $('activityIndicatorDiv').show();
}

function removeSpinner()
{
    $('activityIndicatorDiv').hide();
}

var currImage = 1;

function switchImage(url)
{
    var currImgID = "artistImg" + currImage;
    
    // Switch
    //currImage = currImage == 1 ? 2 : 1;

    var newImgID = "artistImg" + currImage;
    $(newImgID).src = url;

    //Effect.Fade(currImgID);
    //Effect.Appear(newImgID);
}

// Artist links area
var objId;
var linkEffectTimer;

function showLinks(artistID)
{
    objId = "linksDiv" + artistID;
    
    window.clearTimeout(linkEffectTimer);
    linkEffectTimer = window.setTimeout('$(objId).style.visibility="visible"; $(objId).highlight({startcolor: "#4D7380", endcolor: "#000000"});', 200);    
}

function hideLinks(artistID)
{
    objId = "linksDiv" + artistID;
    
    window.clearTimeout(linkEffectTimer);
    linkEffectTimer = window.setTimeout('$(objId).style.visibility="hidden";', 1000);
}

function removePlaceHolder(txtObj)
{
    if (txtObj.getAttribute("placeholder") == txtObj.value)
    {
        txtObj.value = "";
        txtObj.removeClassName("blur");
    }
    
    // Encode ampersands
    txtObj.value = txtObj.value.replace("&", "%26");
}

function setValueForPlaceHolder(txtObj, value)
{
    // Fake focus ansd set value
    var tmpStr = utf8_decode(unescape(value));
    txtObj.value = tmpStr.replace(/\+/g, ' ');
    txtObj.removeClassName("blur");
}

function showPopUp(popid)
{
    $(popid).style.visibility = 'visible';
}

function hidePopUp(popid)
{
    $(popid).style.visibility = 'hidden';
}

// private method for UTF-8 decoding
    function utf8_decode (utftext) 
    {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }


var countriesList = [
'Andorra',
'United Arab Emirates',
'Afghanistan',
'Antigua And Barbuda',
'Anguilla',
'Albania',
'Armenia',
'Netherlands Antilles',
'Angola',
'Antarctica',
'Argentina',
'American Samoa',
'Austria',
'Australia',
'Aruba',
'Azerbaijan',
'Bosnia And Herzegovina',
'Barbados',
'Bangladesh',
'Belgium',
'Burkina Faso',
'Bulgaria',
'Bahrain',
'Burundi',
'Benin',
'Bermuda',
'Brunei Darussalam',
'Bolivia',
'Brazil',
'Bahamas',
'Bhutan',
'Bouvet Island',
'Botswana',
'Belarus',
'Belize',
'Canada',
'Cocos (Keeling) Islands',
'Congo',
'Central African Republic',
'Congo',
'Switzerland',
'Cote D`Ivoire',
'Cook Islands',
'Chile',
'Cameroon',
'China',
'Colombia',
'Costa Rica',
'Cuba',
'Cape Verde',
'Christmas Island',
'Cyprus',
'Czech Republic',
'Germany',
'Djibouti',
'Denmark',
'Dominica',
'Dominican Republic',
'Algeria',
'Ecuador',
'Estonia',
'Egypt',
'Western Sarara',
'Eritrea',
'Spain',
'Ethiopia',
'Finland',
'Fiji',
'Falkland Islands',
'Micronesia',
'Faroe Islands',
'France',
'Gabon',
'United Kingdom',
'Grenada',
'Georgia',
'French Guiana',
'Ghana',
'Gibraltar',
'Greenland',
'Gambia',
'Guinea',
'Guadeloupe',
'Equatorial Guinea',
'Greece',
'Guatemala',
'Guam',
'Guinea-Bissau',
'Guyana',
'Hong Kong',
'Honduras',
'Croatia',
'Haiti',
'Hungary',
'Indonesia',
'Ireland',
'Israel',
'India',
'British Indian Ocean',
'Iraq',
'Iran',
'Iceland',
'Italy',
'Jamaica',
'Jordan',
'Japan',
'Kenya',
'Kyrgyzstan',
'Cambodia',
'Kiribati',
'Comoros',
'Saint Kitts And Nevis',
'Korea, Dem. Republic',
'Korea, Republic Of',
'Kuwait',
'Cayman Islands',
'Kazakhstan',
'Lao',
'Lebanon',
'Saint Lucia',
'Liechtenstein',
'Sri Lanka',
'Liberia',
'Lesotho',
'Lithuania',
'Luxembourg',
'Latvia',
'Libyan Arab Jamabiriya',
'Morocco',
'Monaco',
'Moldova, Republic Of',
'Madagascar',
'Marshall Islands',
'Macedonia',
'Mali',
'Myanmar',
'Mongolia',
'Macau',
'Martinique',
'Mauritania',
'Montserrat',
'Malta',
'Mauritius',
'Maldives',
'Malawi',
'Mexico',
'Malaysia',
'Mozambique',
'Namibia',
'New Caledonia',
'Niger',
'Norfolk Island',
'Nigeria',
'Nicaragua',
'Netherlands',
'Norway',
'Nepal',
'Niue',
'New Zealand',
'Oman',
'Panama',
'Peru',
'French Polynesia',
'Papua New Guinea',
'Philippines',
'Pakistan',
'Poland',
'Pitcairn',
'Puerto Rico',
'Portugal',
'Palau',
'Paraguay',
'Qatar',
'Romania',
'Russian Federation',
'Rwanda',
'Saudi Arabia',
'Solomon Islands',
'Seychelles',
'Sudan',
'Sweden',
'Singapore',
'Saint Helena',
'Slovenia',
'Slovakia',
'Sierra Leone',
'San Marino',
'Senegal',
'Somalia',
'Suriname',
'Sao Tome And Principe',
'El Salvador',
'Syrian Arab Republic',
'Swaziland',
'Chad',
'Togo',
'Thailand',
'Tajikistan',
'Tokelau',
'Turkmenistan',
'Tunisia',
'Tonga',
'East Timor',
'Turkey',
'Trinidad And Tobago',
'Tuvalu',
'Taiwan',
'Tanzania',
'Ukraine',
'Uganda',
'United States',
'Uruguay',
'Uzbekistan',
'Venezuela',
'Virgin Islands',
'Viet Nam',
'Vanuatu',
'Wallis And Futuna',
'Samoa',
'Yemen',
'Mayotte',
'Yugoslavia',
'South Africa',
'Zambia',
'Zimbabwe'];


// Calendar

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar1(obj_target) {

	// assigning methods
	this.gen_date = cal_gen_date1;
	this.gen_time = cal_gen_time1;
	this.gen_tsmp = cal_gen_tsmp1;
	this.prs_date = cal_prs_date1;
	this.prs_time = cal_prs_time1;
	this.prs_tsmp = cal_prs_tsmp1;
	this.popup    = cal_popup1;

	// validate input parameters
	if (!obj_target)
		return cal_error("Error calling the calendar: no target control specified");
	if (obj_target.value == null)
		return cal_error("Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}

function cal_popup1 (str_datetime) {
	if (str_datetime)
		this.dt_current = this.prs_tsmp(str_datetime);
	else 
		this.dt_selected = this.dt_current = this.prs_tsmp(this.target.value);

	if (!this.dt_current) return;

	var obj_calwindow = window.open(
		'calendar.html?id=' + this.id + '&s=' + this.dt_selected.valueOf() + '&c=' + this.dt_current.valueOf(),
		'Calendar', 'width=200,height=' + (this.time_comp ? 215 : 190) +
		',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
	);
	obj_calwindow.opener = window;
	obj_calwindow.focus();
}

// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
	return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
	return (
		(dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
		+ (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
		+ dt_datetime.getFullYear()
	);
}
// time generating function
function cal_gen_time1 (dt_datetime) {
	return (
		(dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
		+ (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
		+ (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
	);
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
	// if no parameter specified return current timestamp
	if (!str_datetime)
		return (new Date());

	// if positive integer treat as milliseconds from epoch
	if (RE_NUM.exec(str_datetime))
		return new Date(str_datetime);
		
	// else treat as date in string format
	var arr_datetime = str_datetime.split(' ');
	return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

	var arr_date = str_date.split('-');

	if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
	if (!arr_date[0]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
	if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
	if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
	if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
	if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
	if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

	var dt_date = new Date();
	dt_date.setDate(1);

	if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
	dt_date.setMonth(arr_date[1]-1);
	 
	if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
	dt_date.setFullYear(arr_date[2]);

	var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
	dt_date.setDate(arr_date[0]);
	if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

	return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

	if (!dt_date) return null;
	var arr_time = String(str_time ? str_time : '').split(':');

	if (!arr_time[0]) dt_date.setHours(0);
	else if (RE_NUM.exec(arr_time[0]))
		if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
		else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
	else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
	
	if (!arr_time[1]) dt_date.setMinutes(0);
	else if (RE_NUM.exec(arr_time[1]))
		if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
		else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

	if (!arr_time[2]) dt_date.setSeconds(0);
	else if (RE_NUM.exec(arr_time[2]))
		if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
		else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

	dt_date.setMilliseconds(0);
	return dt_date;
}

function cal_error (str_message) {
	alert (str_message);
	return null;
}
