var rse_t;
var rse_old_value;

function rse_stop_search_locations()
{
	clearTimeout(rse_t);
}

function rse_check_card(what)
{
	what.value = what.value.replace(/[^0-9]+/g, '');
}

function rse_cc_form()
{
	var has_error = false;
	
	var cc_number = document.getElementById('cc_number');
	var cc_length = cc_number.value.length;
	if (cc_length < 14 || cc_length > 19)
	{
		if (cc_number.className.indexOf(' rse_cc_error') == -1) cc_number.className += " rse_cc_error";
		has_error = true;
	}
	else
		cc_number.className = cc_number.className.replace(new RegExp(" rse_cc_error\\b"), '');
	
	var csc_number = document.getElementById('cc_csc');
	if (csc_number.value.length < 3)
	{
		if (csc_number.className.indexOf(' rse_cc_error') == -1) csc_number.className += " rse_cc_error";
		has_error = true;
	}
	else
		csc_number.className = csc_number.className.replace(new RegExp(" rse_cc_error\\b"), '');
	
	var cc_fname   = document.getElementById('cc_fname');
	if (cc_fname.value.length == 0)
	{
		if (cc_fname.className.indexOf(' rse_cc_error') == -1) cc_fname.className += " rse_cc_error";
		has_error = true;
	}
	else
		cc_fname.className = cc_fname.className.replace(new RegExp(" rse_cc_error\\b"), '');
		
	var cc_lname   = document.getElementById('cc_lname');
	if (cc_lname.value.length == 0)
	{
		if (cc_lname.className.indexOf(' rse_cc_error') == -1) cc_lname.className += " rse_cc_error";
		has_error = true;
	}
	else
		cc_lname.className = cc_lname.className.replace(new RegExp(" rse_cc_error\\b"), '');
	
	
	return has_error ? false : true;
}

function isset () {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // +   improved by: Rafał Kukawski
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    var a = arguments,
        l = a.length,
        i = 0,
        undef;

    if (l === 0) {
        throw new Error('Empty isset');
    }

    while (i !== l) {
        if (a[i] === undef || a[i] === null) {
            return false;
        }
        i++;
    }
    return true;
}

function rse_search_locations(string)
{
	if (string == rse_old_value) return;
	rse_t = setTimeout( function() {
		selbox = document.getElementById('rse_locations');
		var url = 'index.php?option=com_rsevents';
		var params = 'task=location_filter&tmpl=component&string='+ string +'&randomTime='+Math.random();
		xml=buildXmlHttp();

		xml.open('POST',url,true);
		

		xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xml.setRequestHeader("Content-length", params.length);
		xml.setRequestHeader("Connection", "close");
		
		xml.onreadystatechange=function()
		{
			if(xml.readyState==4)
			{		
				document.getElementById('rse_hideme').style.display = 'none';
				selbox.innerHTML  = xml.responseText;
			}
		}
		xml.send(params);
		rse_old_value = string;
		document.getElementById('rse_hideme').style.display = '';
	}, 1000);
}


function rse_refresh_locations(root)
{
	selbox = document.getElementById('IdLocation');
	selbox.length = 1;
	var url = 'index.php';
	var params = 'option=com_rsevents&view=locations&layout=refreshlocations&randomTime='+Math.random();
	xml=buildXmlHttp();

	xml.open('POST',root + url,true);
	

	xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xml.setRequestHeader("Content-length", params.length);
	xml.setRequestHeader("Connection", "close");
	
	xml.onreadystatechange=function()
    {
		if(xml.readyState==4)
		{
			lines = xml.responseText.split("\n");
			for(i=0;i<lines.length;i++)
			{
				row = lines[i].split('|');
				selbox.options[i+1] = new Option(row[1],row[0]);
				
			}
		}
    }
	xml.send(params);
}

function rsevents_invite_validation(root)
{
	var form = document.adminForm;
	var ret = true;
	var url = 'index.php?option=com_rsevents';
	var params = 'task=checkcaptcha&secret='+document.getElementById('secret').value+'&tmpl=component&randomTime='+Math.random();
	xml=buildXmlHttp();

	xml.open('POST',root + url,true);
	

	xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xml.setRequestHeader("Content-length", params.length);
	xml.setRequestHeader("Connection", "close");
	
	xml.onreadystatechange=function()
    {
		if(xml.readyState==4)
		{
			if (xml.responseText == 0) 
			{
				ret = false;
				form.secret.className += ' rserror';
				reloadCaptcha();
			} else form.secret.className = '';
			if(form.emails.value=='') { form.emails.className += ' rserror'; ret=false; } else { form.emails.className = ' rsevents-message';  }
			
			if (ret) form.submit();
		}
    }
	xml.send(params);	
	
	return false;
}

function rse_import_contacts()
{
	str = '';
	checks = document.getElementsByName('importedContacts[]');
	for(i=0;i<checks.length;i++)
	{
		if(checks[i].checked == true)
		{
			str += checks[i].value + "\n";
		}
	}
	document.getElementById('rsevents-emails').value = str;
}

function rsevents_import_validation()
{
	var form = document.adminForm;
	var ret = true;
	
	if(form.username.value=='') { form.username.className += ' rserror'; ret=false; } else { form.username.className = '';  }	
	if(form.password.value=='') { form.password.className += ' rserror'; ret=false; } else { form.password.className = '';  }	
	
	if(document.getElementById('typename').value == 'gmail')
	{
		document.getElementById('task').value = 'importgmail';
	}else{
		document.getElementById('task').value = 'importyahoo';
	}
	
	return ret;
}

function rsevents_send_validation()
{
	var form = document.adminForm;
	var ret = true;
	
	if(form.subject.value=='') { form.subject.className += ' rserror'; ret=false; } else { form.subject.className = ' rsevents-message';  }	
	
	return ret;
}

function rse_change_carrier(carrier)
{
	if (carrier == 'gmail')
	{
		document.getElementById('rsevents-carrier').innerHTML = '';
		document.getElementById('typename').value = 'gmail';
		document.getElementById('task').value = 'importgmail';
	}
	if (carrier == 'yahoo')
	{
		document.getElementById('rsevents-carrier').innerHTML = '@yahoo.com';
		document.getElementById('typename').value = 'yahoo';
		document.getElementById('task').value = 'importyahoo';
	}
	
}


function buildXmlHttp()
{
	var xmlHttp;
	try
	{
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	return xmlHttp;
}

function rse_change_ticket(IdTicket)
	{
		var selbox = document.getElementById('IdTicket');
		//first lets hide all the ticket descriptions
		for(i =0;i<selbox.options.length;i++)
		{
			document.getElementById('rsevents_ticket_' + selbox.options[i].value).style.display='none';
		}
		document.getElementById('rsevents_ticket_' + IdTicket).style.display='inline';
	}

function add_ticket(type,string)
{
	var container		= document.getElementById('tickets');
	var container_ids	= document.getElementById('rse_tickets_ids');
	var container_nos	= document.getElementById('rse_tickets_no');
	var ticket			= type == 0 ? document.getElementById('IdTicket') : document.getElementById('RSEventsTickets');
	var ticket_number	= type == 0 ? document.getElementById('rse_numtickets').value : document.getElementById('RSEventsNumTickets').value;
	var ticket_id		= ticket.value;
	var ticket_name		= ticket.options[ticket.selectedIndex].text;
	
	if (!isset(document.getElementById('tickets'+ticket_id)))
	{	
		input_id = document.createElement('input');
		input_id.setAttribute('type', 'hidden');
		input_id.setAttribute('name', 'tickets['+ticket_id+']');
		input_id.setAttribute('id', 'tickets'+ticket_id);
		input_id.setAttribute('value', ticket_id);
		container_ids.appendChild(input_id);
		
		input_no = document.createElement('input');
		input_no.setAttribute('type', 'hidden');
		input_no.setAttribute('name', 'notickets['+ticket_id+']');
		input_no.setAttribute('id', 'notickets'+ticket_id);
		input_no.setAttribute('value', ticket_number);
		container_nos.appendChild(input_no);
		
		span = document.createElement('span');
		span.setAttribute('id', 'content'+ticket_id);
		span.innerHTML = ticket_number + ' x ' + ticket_name + ' <a href="javascript:void(0);" onclick="remove_ticket('+ ticket_id +')">'+string+'</a><br/>';
		
		container.appendChild(span);
	}
}

function remove_ticket(id)
{
	if (isset(document.getElementById('tickets'+id)))
	{
		var container		= document.getElementById('tickets');
		var container_ids	= document.getElementById('rse_tickets_ids');
		var container_nos	= document.getElementById('rse_tickets_no');
		
		container.removeChild(document.getElementById('content'+id));
		container_ids.removeChild(document.getElementById('tickets'+id));
		container_nos.removeChild(document.getElementById('notickets'+id));
	}
}

function rse_hidePayment(id,type,idevent)
{
	if (type == 0)
		selbox = document.getElementById('rse_numtickets');
	else if (type == 1)
		selbox = document.getElementById('RSEventsNumTickets');
	
	url = rseventsURL;
	var params = 'task=checkvalue&cid='+id+'&IdEvent='+idevent+'&randomTime='+Math.random();
	
	xml2=buildXmlHttp();
	xml2.open('POST',url,true);
	xml2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xml2.setRequestHeader("Content-length", params.length);
	xml2.setRequestHeader("Connection", "close");
	
	xml2.onreadystatechange=function()
    {
		if(xml2.readyState==4)
		{
			txt = xml2.responseText;
			txt = txt.split("\n");
			ticketPrice = txt[0];
			maxTickets = txt[1];
			
			if (ticketPrice != '0' && type == 1)
				document.getElementById('RSEventsNumTickets').style.display = '';
			
			selbox.options.length = 0;
			for(i=1;i<=maxTickets;i++)
				selbox.options[i-1] = new Option(i,i);
		}
    }
	xml2.send(params);	
	
	return false;
}

function rse_get_payment()
{
	var payments = document.getElementsByName('payment');
	var checkedpayment = '';
	for (var i=0;i<payments.length;i++)
		if (payments[i].checked)
			checkedpayment = payments[i].value;
	return checkedpayment;
}

function rse_feedback_add(value, idevent,root)
{	
	for (var i=1; i<=5; i++)
		document.getElementById('rse_feedback_' + i).onclick = function() { return false; }
	
	xmlHttp = buildXmlHttp();
	
	var url = root + 'index.php?option=com_rsevents&task=feedback';
	
	params  = 'cid=' + idevent;
	params += '&feedback=' + value;
	params += '&tmpl=component';
	xmlHttp.open("POST", url, true);
	
	//Send the proper header information along with the request
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", params.length);
	xmlHttp.setRequestHeader("Connection", "close");
	
	xmlHttp.onreadystatechange=function()
    {
		if(xmlHttp.readyState==4)
		{
			lines = xmlHttp.responseText.split("\n");
			document.getElementById('rse_rating').innerHTML = '<li id="rse_current_rating" class="rse_feedback_selected_'+ lines[1] +'">&nbsp;</li>';
			alert(lines[0]);
		}
    }
	
	xmlHttp.send(params);
	
	return false;
}

function cc_validate(card_message,ccv_message)
{
	var ret = true;
	var message = '';
	var cc_number = document.getElementById('cc_number');
	var cc_ccv = document.getElementById('cc_ccv');
	var firstname = document.getElementById('firstname');
	var lastname = document.getElementById('lastname');
	
	if (cc_number.value.length < 13 || cc_number.value.length > 16) { ret = false; message += card_message+"\n"; cc_number.className="rserror"; } else { cc_number.className=""; }
	if (cc_ccv.value.length < 3 || cc_ccv.value.length > 4) { ret = false; message += ccv_message+"\n"; cc_ccv.className="rserror"; } else { cc_ccv.className=""; }
	if (firstname.value == '') { ret = false; firstname.className="rserror"; } else { firstname.className=""; }
	if (lastname.value == '') { ret = false; lastname.className="rserror"; } else { lastname.className=""; }
	
	
	if (message.length != 0)
		alert(message);
	
	return ret;
}

function rse_description_on(id)
{
	document.getElementById('rsehref'+id).style.display = 'none';
	document.getElementById('rsedescription'+id).className = 'rse_extra_on';
}

function rse_description_off(id)
{
	document.getElementById('rsehref'+id).style.display = 'inline';
	document.getElementById('rsedescription'+id).className = 'rse_extra_off';
}


var rse_tooltip=function(){
	var id = 'rse_tt';
	var top = 3;
	var left = 3;
	var maxw = 400;
	var speed = 10;
	var timer = 20;
	var endalpha = 95;
	var alpha = 0;
	var tt,t,c,b,h;
	var ie = document.all ? true : false;
	return{
		show:function(v,w){
			if(tt == null){
				tt = document.createElement('div');
				tt.setAttribute('id',id);
				t = document.createElement('div');
				t.setAttribute('id',id + 'top');
				c = document.createElement('div');
				c.setAttribute('id',id + 'cont');
				b = document.createElement('div');
				b.setAttribute('id',id + 'bot');
				tt.appendChild(t);
				tt.appendChild(c);
				tt.appendChild(b);
				document.body.appendChild(tt);
				tt.style.opacity = 0;
				tt.style.filter = 'alpha(opacity=0)';
				document.onmousemove = this.pos;
			}
			tt.style.display = 'block';
			c.innerHTML = document.getElementById(v).innerHTML;
			tt.style.width = w ? w + 'px' : 'auto';
			if(!w && ie){
				t.style.display = 'none';
				b.style.display = 'none';
				tt.style.width = tt.offsetWidth;
				t.style.display = 'block';
				b.style.display = 'block';
			}
			if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
			h = parseInt(tt.offsetHeight) + top;
			clearInterval(tt.timer);
			tt.timer = setInterval(function(){rse_tooltip.fade(1)},timer);
		},
		pos:function(e){
			var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
			var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
			tt.style.top = (u - h) + 'px';
			tt.style.left = (l + left) + 'px';
		},
		fade:function(d){
			var a = alpha;
			if((a != endalpha && d == 1) || (a != 0 && d == -1)){
				var i = speed;
				if(endalpha - a < speed && d == 1){
					i = endalpha - a;
				}else if(alpha < speed && d == -1){
					i = a;
				}
				alpha = a + (i * d);
				tt.style.opacity = alpha * .01;
				tt.style.filter = 'alpha(opacity=' + alpha + ')';
			}else{
				clearInterval(tt.timer);
				if(d == -1){tt.style.display = 'none'}
			}
		},
		hide:function(){
			clearInterval(tt.timer);
			tt.timer = setInterval(function(){rse_tooltip.fade(-1)},timer);
		}
	};
}();

function strtotime(str, now) {
    // http://kevin.vanzonneveld.net
    // +   original by: Caio Ariede (http://caioariede.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: David
    // +   improved by: Caio Ariede (http://caioariede.com)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Wagner B. Soares
    // +   bugfixed by: Artur Tchernychev
    // %        note 1: Examples all have a fixed timestamp to prevent tests to fail because of variable time(zones)
    // *     example 1: strtotime('+1 day', 1129633200);
    // *     returns 1: 1129719600
    // *     example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200);
    // *     returns 2: 1130425202
    // *     example 3: strtotime('last month', 1129633200);
    // *     returns 3: 1127041200
    // *     example 4: strtotime('2009-05-04 08:30:00');
    // *     returns 4: 1241418600
    var i, l, match, s, parse = '';

    str = str.replace(/\s{2,}|^\s|\s$/g, ' '); // unecessary spaces
    str = str.replace(/[\t\r\n]/g, ''); // unecessary chars
    if (str === 'now') {
        return now === null || isNaN(now) ? new Date().getTime() / 1000 | 0 : now | 0;
    } else if (!isNaN(parse = Date.parse(str))) {
        return parse / 1000 | 0;
    } else if (now) {
        now = new Date(now * 1000); // Accept PHP-style seconds
    } else {
        now = new Date();
    }

    str = str.toLowerCase();

    var __is = {
        day: {
            'sun': 0,
            'mon': 1,
            'tue': 2,
            'wed': 3,
            'thu': 4,
            'fri': 5,
            'sat': 6
        },
        mon: [
            'jan',
            'feb',
            'mar',
            'apr',
            'may',
            'jun',
            'jul',
            'aug',
            'sep',
            'oct',
            'nov',
            'dec'
        ]
    };

    var process = function (m) {
        var ago = (m[2] && m[2] === 'ago');
        var num = (num = m[0] === 'last' ? -1 : 1) * (ago ? -1 : 1);

        switch (m[0]) {
        case 'last':
        case 'next':
            switch (m[1].substring(0, 3)) {
            case 'yea':
                now.setFullYear(now.getFullYear() + num);
                break;
            case 'mon':
                now.setMonth(now.getMonth() + num);
                break;
            case 'wee':
                now.setDate(now.getDate() + (num * 7));
                break;
            case 'day':
                now.setDate(now.getDate() + num);
                break;
            case 'hou':
                now.setHours(now.getHours() + num);
                break;
            case 'min':
                now.setMinutes(now.getMinutes() + num);
                break;
            case 'sec':
                now.setSeconds(now.getSeconds() + num);
                break;
            default:
                var day = __is.day[m[1].substring(0, 3)];
                if (typeof day !== 'undefined') {
                    var diff = day - now.getDay();
                    if (diff === 0) {
                        diff = 7 * num;
                    } else if (diff > 0) {
                        if (m[0] === 'last') {
                            diff -= 7;
                        }
                    } else {
                        if (m[0] === 'next') {
                            diff += 7;
                        }
                    }
                    now.setDate(now.getDate() + diff);
                }
            }
            break;

        default:
            if (/\d+/.test(m[0])) {
                num *= parseInt(m[0], 10);

                switch (m[1].substring(0, 3)) {
                case 'yea':
                    now.setFullYear(now.getFullYear() + num);
                    break;
                case 'mon':
                    now.setMonth(now.getMonth() + num);
                    break;
                case 'wee':
                    now.setDate(now.getDate() + (num * 7));
                    break;
                case 'day':
                    now.setDate(now.getDate() + num);
                    break;
                case 'hou':
                    now.setHours(now.getHours() + num);
                    break;
                case 'min':
                    now.setMinutes(now.getMinutes() + num);
                    break;
                case 'sec':
                    now.setSeconds(now.getSeconds() + num);
                    break;
                }
            } else {
                return false;
            }
            break;
        }
        return true;
    };

    match = str.match(/^(\d{2,4}-\d{2}-\d{2})(?:\s(\d{1,2}:\d{2}(:\d{2})?)?(?:\.(\d+))?)?$/);
    if (match !== null) {
        if (!match[2]) {
            match[2] = '00:00:00';
        } else if (!match[3]) {
            match[2] += ':00';
        }

        s = match[1].split(/-/g);

        s[1] = __is.mon[s[1] - 1] || s[1];
        s[0] = +s[0];

        s[0] = (s[0] >= 0 && s[0] <= 69) ? '20' + (s[0] < 10 ? '0' + s[0] : s[0] + '') : (s[0] >= 70 && s[0] <= 99) ? '19' + s[0] : s[0] + '';
        return parseInt(this.strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2]) + (match[4] ? match[4] / 1000 : ''), 10);
    }

    var regex = '([+-]?\\d+\\s' + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?' + '|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday' + '|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday)' + '|(last|next)\\s' + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?' + '|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday' + '|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday))' + '(\\sago)?';

    match = str.match(new RegExp(regex, 'gi')); // Brett: seems should be case insensitive per docs, so added 'i'
    if (match === null) {
        return false;
    }

    for (i = 0, l = match.length; i < l; i++) {
        if (!process(match[i].split(' '))) {
            return false;
        }
    }

    return now.getTime() / 1000 | 0;
}
