
/**
* kikuldetesirendelveny.hu site specification javascript document
*
* author: Gönczi Ákos
* site: http://www.sod.hu/
*
*/

window.addEvent('domready', function() {

    // get city name in postcode
    function getCityByPostcode( postcode, field ) {
        if( postcode.toInt() > 0 ) {
            new Ajax( '/ajax/getCityName/' + postcode.toInt(), {
                method: 'get',
				onRequest: function(el) {
					field.addClass('loading');
				},
                onComplete: function() {
					if( !field.value )
						field.value = this.response.text;
					field.removeClass('loading');
                }
            }).request();
        }
    }
    function getPostcode( str, field ) {
			if( str && !field.value )
            new Ajax( '/ajax/getPostcode/' + str, {
                method: 'get',
				onRequest: function(el) {
					field.addClass('loading');
				},
                onComplete: function() {
					if( !field.value )
						field.value = this.response.text;
					field.removeClass('loading');
                }
            }).request();
    }

    if( $('set_city') && $('city') && $('postcode') ) {

        if( !$('city').value )
            getCityByPostcode( $('postcode').value, $('city') );

        $('set_city').addEvent('click', function(){
            getCityByPostcode( $('postcode').value, $('city') );
        });

        $('postcode').addEvent('blur', function(){
            if( !$('city').value )
                getCityByPostcode( $('postcode').value, $('city') );
        });

        $('postcode').addEvent('keyup', function(){
            if( !$('city').value && $('postcode').value.length > 3 )
                getCityByPostcode( $('postcode').value, $('city') );
        });

		$('city').addEvent('change', function(){
			getPostcode( $('city').value, $('postcode') );
		});

		var city = new Autocompleter.Ajax.Json( $('city'), '/ajax/getCity/', {
			'onRequest': function(el) {
				$('city').addClass('loading');
			},
			'onComplete': function(el) {
				$('city').removeClass('loading');
			},
			'onSelect': function(el) {
				getPostcode( $('city').value, $('postcode') );
			}
		});

    }

    function requiredFieldRelease( e ) {
        var val = '';
        if( e.getTag() == 'select' ) {
            val = e.options[e.selectedIndex].value;
        }else if( e.getTag() == "input" ) {
            val = e.value;
        }
        if( val ) {
            e.removeClass('required');
        } else {
            e.addClass('required');
        }
    }

    if( $('getroadsinfo') ) {
        $('getroadsinfo').addEvent('click', function(){

            var from = $('FromLocationId').options[$('FromLocationId').selectedIndex].value;
            requiredFieldRelease( $('FromLocationId') );
            var to = $('ToLocationId').options[$('ToLocationId').selectedIndex].value;
            requiredFieldRelease( $('ToLocationId') );
            var employee = $('EmployeeId').options[$('EmployeeId').selectedIndex].value;
            requiredFieldRelease( $('EmployeeId') );
            var startdate = $('StartDate').value + ' ' + $('StartTime').value;
            requiredFieldRelease( $('StartDate') );
            var returnroad = $('returnroad').checked ? 1 : 0;

            if( !$('StartDate').value |  !checkDate( $('StartDate').value ) | !$('StartTime').value | !employee ) {
                alert( 'Hiányosan, nem megfelelően kitöltött űrlap!' );
            }else if( from && from == to ) {
                alert( 'A kiindulás nem lehet azonos az úticéllal!' );
            } else {

                $('loading').addClass('loading');

                var url = '/ajax/getroadsinfo/' + startdate + '/' + employee + '/' + from + '/' + to + '/' + returnroad + '/';
                new Ajax( url, {
                    method: 'get',
                    onComplete: function() {
                        $('loading').removeClass('loading');
                        if( this.response.text ) {
                            var roadsinfo = Json.evaluate(this.response.text);
                            if( from && to ) {
                                if( roadsinfo.DistanceKm ) {
                                    $('Distance').value = roadsinfo.DistanceKm;
                                    $('EndDate').value = roadsinfo.EndDate;
                                    $('EndTime').value = roadsinfo.EndTime;
                                    //if( !$('mrDescription').value && roadsinfo.Description )
                                    $('mrDescription').value = roadsinfo.Description;
                                } else {
                                    alert( 'Helytelen cím vagy a rendszer nem képes útvonaltervet kalkulálni, ilyen esetekben manuálisan is megadhatja a két helyszín közötti távolságot.' );
                                }
                            }
                            $('FuelPrice').value = roadsinfo.FuelPrice;
                            reCount();
                        } else {
                            alert( 'Hiba történt vagy nincs rendelkezésre álló információ.' );
                        }
                    }
                }).request();
            }
        });
    }
    if( $('recalc') ){
        $('recalc').addEvent('click', function(){
            reCount();
        });
    }
    if( $('signupform') ){

        $('signupform').addEvent('submit', function(e){

            new Event(e).stop();

            var error = '';

            if(
                !$('postcode').value |
                !$('city').value |
                !$('Address').value |
                ( $('signup_privacy') && !$('signup_privacy').checked ) |
                !$('AddressNum').value
                )
            {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            }

            if( error ) {
                alert( error );
            } else {
                $('signupform').submit();
            }
        });
    }

    if( $('order_form') ){

        function calc() {
            if( $('EmployeeNum').value ) {
                $('EmployeeNum').value = $('EmployeeNum').value.toInt();
                $('price').value = 9000 + ( $('EmployeeNum').value < 3 ? 0 : ( $('EmployeeNum').value - 2 ) * 2000 );
            }
        }
        calc();
        $('calc_btn').addEvent('click', function(e){
            calc();
        });
        $('EmployeeNum').addEvent('blur', function(e){
            calc();
        });
        $('order_form').addEvent( 'submit', function(e){
            new Event(e).stop();
        });
        if( $('order_btn') ) {
            $('order_btn').addEvent( 'click', function(e){
                calc();

                var error = '';

                if(
                    !$('EmployeeNum').value |
                    !$('price').value |
                    !$('Name').value |
                    !$('postcode').value |
                    !$('city').value |
                    !$('Address').value |
                    !$('AddressNum').value
                    )
                {
                    error = 'A csillaggal jelölt mezők kitöltése kötelező.';
                }

                if( error ) {
                    alert( error );
                } else {
                    $('order_form').submit();
                }
            });
        }
    }
    
    if( $('emloyee_order_form') ){

        function ecalc() {
            if( $('moreEmployeeNum').value ) {
                $('moreEmployeeNum').value = $('moreEmployeeNum').value.toInt();
                $('eprice').value = ( $('moreEmployeeNum').value * 2000);
            }
        }
        ecalc();
        $('calc_btn').addEvent('click', function(e){
            ecalc();
        });
        $('moreEmployeeNum').addEvent('blur', function(e){
            ecalc();
        });
        $('emloyee_order_form').addEvent( 'submit', function(e){
            new Event(e).stop();
        });
        if( $('order_btn') ) {
            $('order_btn').addEvent( 'click', function(e){
                ecalc();

                var error = '';

                if(
                    !$('moreEmployeeNum').value |
                    !$('eprice').value |
                    !$('Name').value |
                    !$('postcode').value |
                    !$('city').value |
                    !$('Address').value |
                    !$('AddressNum').value
                    )
                {
                    error = 'A csillaggal jelölt mezők kitöltése kötelező.';
                }

                if( error ) {
                    alert( error );
                } else {
                    $('emloyee_order_form').submit();
                }
            });
        }
        
    }
    
    if( $('employeeUserChk') ){
		if ($('employeeUserChk').checked == true)
		{
			$$('.employeeUserData').setStyle('display','table-row');
			if ($('employeeUserNickname')) $('employeeUserNickname').disabled = false;
			$('employeeUserPassword').disabled = false;
			$('employeeUserPasswordRe').disabled = false;
		}
		else
		{
			$$('.employeeUserData').setStyle('display','none');	
			if ($('employeeUserNickname')) $('employeeUserNickname').disabled = true;
			$('employeeUserPassword').disabled = true;
			$('employeeUserPasswordRe').disabled = true;
		}    
		$('employeeUserChk').addEvent('click', function(e){
			if ($('employeeUserChk').checked == true)
			{
				$$('.employeeUserData').setStyle('display','table-row');
				if ($('employeeUserNickname')) $('employeeUserNickname').disabled = false;
				$('employeeUserPassword').disabled = false;
				$('employeeUserPasswordRe').disabled = false;
			}
			else
			{
				$$('.employeeUserData').setStyle('display','none');			
				if ($('employeeUserNickname')) $('employeeUserNickname').disabled = true;
				$('employeeUserPassword').disabled = true;
				$('employeeUserPasswordRe').disabled = true;
			}
		});
    }
    
    if( $('employee_form_submit') ) {
        $('employee_form_submit').addEvent('click', function(e){

            new Event(e).stop();

            var error = '';

            if(
                !$('postcode').value |
                !$('city').value |
                !$('Address').value |
                !$('AddressNum').value |
                !$('Name').value |
                !$('MothersName').value |
                !$('BirthdayY').value |
                !$('BirthdayM').value |
                !$('BirthdayD').value |
                !$('TaxNumber').value |
                !$('CarName').value |
                !$('CarNumber').value |
                !$('CarEngineSize').value |
                !$('CarTypeId').value |
                !$('BirthdayCity').value )
            {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            } else if( $('BirthdayY').value != $('BirthdayY').value.toInt()
            		|  $('BirthdayM').value != $('BirthdayM').value.toInt()
            		|  $('BirthdayD').value != $('BirthdayD').value.toInt()
            ) {
                error = 'A megadott dátum formátuma nem megfelelő: ' + $('BirthdayY').value + '. ' + $('BirthdayM').value + '. ' + $('BirthdayD').value + ". \n A dátumot ÉÉÉÉ. HH. NN. formátumban kell megadni és csak egész számokat tartalmazhat.";
            } else if( $('CarEngineSize').value != $('CarEngineSize').value.toInt() )
            {
                error = 'Hengerűrtartalomnak egy egész számnak kell lennie.';
            }

            if( error ) {
                alert( error );
            } else {
                $('employee_form').submit();
            }
        });
    }
    
    if ($('ful-newRoad')){
   	 $('ful-newRoad').addEvent('click', function(e){
		 $('random').setStyle('display','none');
		 $('template').setStyle('display','none');
		 $('newRoad').setStyle('display','block');
		 
		 $('ful-random').removeClass('active');
		 $('ful-template').removeClass('active');
		 $('ful-newRoad').addClass('active');		 
	 });
    }
    if ($('ful-random')){
    	 $('ful-random').addEvent('click', function(e){
    		 $('newRoad').setStyle('display','none');
    		 $('template').setStyle('display','none');
    		 $('random').setStyle('display','block');
    		 
    		 $('ful-newRoad').removeClass('active');
    		 $('ful-template').removeClass('active');
    		 $('ful-random').addClass('active');
    	 });
    }
    if ($('ful-template')){
   	 $('ful-template').addEvent('click', function(e){
		 $('newRoad').setStyle('display','none');
		 $('random').setStyle('display','none');
		 $('template').setStyle('display','block');
		 
		 $('ful-newRoad').removeClass('active');
		 $('ful-random').removeClass('active');
		 $('ful-template').addClass('active');
		 
	 });
    }
    
    if( $('newmission_form_submit') ) {

        $('newmission_form_submit').addEvent('click', function(e){

            new Event(e).stop();

            var error = '';
/*
            if( !$('Name').value  ) {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            }
*/
            if( error ) {
                alert( error );
            } else {
                if( $('kkr_veglegesitese_form') ) {
                    if( confirm( 'Biztos, hogy megváltoztatja a rendelvény törzsadatait?\r\nA jelenleg szerkesztett rendelvény útvonalai elvesznek.' ) )
                        $('newmission_form').submit();
                } else {
                    $('newmission_form').submit();
                }
            }
        });
    }
    if ($('showEmloyeeOrder')){
    	$('showEmloyeeOrder').addEvent('click', function(e){
    		if ($('EmloyeeOrder').getStyle('display') == 'none')
    			$('EmloyeeOrder').setStyle('display','block');
    		else
    			$('EmloyeeOrder').setStyle('display','none');
    	});
    	
    }
    
    if( $('randmission_form_submit') ) {
        $('randmission_form_submit').addEvent('click', function(e){

            new Event(e).stop();

            var error = '';
            
            if( !$('PriceLimit').value  ) {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            }

            if( error ) {
                alert( error );
            } else {
                $('randmission_form').submit();
            }
        });
    }
    
    if ($('tempmission_form'))
    {
    	var tempmissionStartDate = new Calendar({ tempmissionStartDate: 'Y-m-d' },{ navigation: 0, offset: 1});
    	
        if( $('tempmission_form_submit') ) {
            $('tempmission_form_submit').addEvent('click', function(e){

                new Event(e).stop();

                var error = '';
                
                if( !$('templateId').value  ) {
                    error = 'A csillaggal jelölt mezők kitöltése kötelező.';
                }

                if( error ) {
                    alert( error );
                } else {
                    $('tempmission_form').submit();
                }
            });
        }
    }
    
    if ( $('randmission_det') )
    {
        var randmissionStartDate = new Calendar({ randmissionStartDate: 'Y-m-d' },{ navigation: 0, offset: 1});
        var randmissionEndDate = new Calendar({ randmissionEndDate: 'Y-m-d' },{ navigation: 0, offset: 1});
    	
    	$('randmission_det').addEvent('click',function(){
    		if ($('randmission_box').getStyle('display') == 'none')
    		{
    			if ($('.system_msg')) $('.system_msg').destroy();
    			$('randmission_box').setStyle('display','block');
    			$('randmission_det').innerHTML = 'részletes beállítások elrejtése  <img src="/images/order_asc.gif" border="0">';
    		}
    		else
    		{
    			$('randmission_box').setStyle('display','none');
    			$('randmission_det').innerHTML = 'részletes beállítások megjelenítése  <img src="/images/order_desc.gif" border="0">';
    		}
    	});
    	
    	$('PriceLimit').addEvent('change',function(){
    		if (parseInt($('PriceLimit').value) > 0){
	            var url = '/ajax/getrandomlocations/' + $('PriceLimit').value + '/' + $('missionId').value + '/' + $('randmissionStartDate').value + '/' + $('EmployeeId').value;
	            new Ajax( url, {
	                method: 'get',
	                onComplete: function() {
	                    if( this.response.text ) {
	                    	ret = '<table cellpadding="2" cellspacing="1" border="0" width="100%">';
	                        var locations = Json.evaluate(this.response.text);
	                        for (i=0;i<=locations.length-1;i++){
	                        	ret += '<tr><td style="font-size:11px;background:#F0F1F3"><b>'+locations[i].Name+'</b> - '+locations[i].Address+'</td><td style="background:#F0F1F3"><input type="checkbox" class="delLocChkRoad" name="randmission[locLimit][]" value="'+locations[i].Id+'" /></td></tr>';
	                        }
	                        ret += '</table>';
	                        $('randomlocs').innerHTML = ret;
	                        //$('roadListSelector').setStyle('display','inline');
	                    } else {
	                    	$('randomlocs').innerHTML = '<p style="color:red" align="center">Hiba történt vagy nincs rendelkezésre álló információ.</p>';
	                    	//$('roadListSelector').setStyle('display','none');
	                    }
	                }
	            }).request();
    		}
    		else {
    			$('randomlocs').innerHTML = '<p align="center">A helyszínek kiválasztásához először töltse ki a "Utazási költségtérítés összesen" mezőt!</p>';
    		}
    	});
    }
    
    if( $('location_form_submit') ) {
        $('location_form_submit').addEvent('click', function(e){
			
			var location_form_error = '';
			
			if(
				!$('postcode').value |
				!$('city').value |
				!$('Address').value )
			{
				alert( 'A csillaggal jelölt mezők kitöltése kötelező.' );
			} else {

				var address = $('Coordinate').value ? $('Coordinate').value : getAddress();
				geocoder.getLatLng( address, function(point) {

					if( !point ) {
						alert( "A megadott koordináta hibás vagy nem található. Kérjük ellenőrizze a formátumot." );
					} else {
						if( !$('Coordinate').value ) {
							addpoint( point );
						}
						$('location_form').submit();
					}

				});
				
			}
        });
    }

    if( $('mission_roads_form_submit') ) {

        var StartDate = new Calendar({ StartDate: 'Y-m-d' }, { tweak: { x: 2, y: 10 }, offset: 1});
        var EndDate = new Calendar({ EndDate: 'Y-m-d' }, { tweak: { x: 2, y: 10 }, offset: 1});
        
        var StartTime = new TimeSpinner( $('StartTime'), {increment: 10, delay:200}, $('StartTime').value );
        var EndTime = new TimeSpinner( $('EndTime'), {increment: 10, delay:200}, $('EndTime').value  );
        
        
        $('mission_roads_form_submit').addEvent('click', function(e){

            new Event(e).stop();

            var error = '';

            if(
                !$('TravelAllowance').value |
                !$('FuelPrice').value |
                !$('Distance').value |
                !$('EndDate').value |
                !$('EndTime').value |
                !$('ToLocationId').options[$('ToLocationId').selectedIndex].value |
                !$('FromLocationId').options[$('FromLocationId').selectedIndex].value |
                !$('StartDate').value |
                !$('StartTime').value )
            {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            }else if( $('ToLocationId').options[$('ToLocationId').selectedIndex].value == $('FromLocationId').options[$('FromLocationId').selectedIndex].value ) {
                error = 'A kiindulás nem lehet azonos az úticéllal!';
            }else if( strtotime( $('StartDate').value + ' ' + $('StartTime').value ) >= strtotime( $('EndDate').value + ' ' + $('EndTime').value ) ) {
                error = 'A megérkezés időpontjának nagyobbnak kell lennie az indulásnál!';
            }else if( !checkDate( $('StartDate').value ) ) {
                error = 'A megadott dátum formátuma nem megfelelő: ' + $('StartDate').value;
            }else if( !checkDate( $('EndDate').value ) ) {
                error = 'A megadott dátum formátuma nem megfelelő: ' + $('StartDate').value;
            }else if( !checkTime( $('StartTime').value ) ) {
                error = 'A megadott idő formátuma nem megfelelő: ' + $('StartTime').value;
            }else if( !checkTime( $('EndTime').value ) ) {
                error = 'A megadott idő formátuma nem megfelelő: ' + $('EndTime').value;
            }

            //alert( strtotime( $('StartDate').value + ' ' + $('StartTime').value ) >= strtotime( $('EndDate').value + ' ' + $('EndTime').value ) );
            if( error ) {
                alert( error );
            } else {
                $('mission_roads_form').submit();
            }
        });
    }

    if( $('kkr_veglegesitese_submit') ) {
        $('kkr_veglegesitese_submit').addEvent('click', function(e){

            var error = '';
/*
            if( !$('Name').value  ) {
                error = 'A csillaggal jelölt mezők kitöltése kötelező.';
            }
*/
            if( error ) {
                alert( error );
            } else {
                if( confirm( 'A kiküldetési rendelvény végleges példányának mentése nem visszavonható. Biztos, hogy ezt szeretné?' ) ) {
                    $('kkr_veglegesitese_form').submit();
                }
            }
        });
    }

    function reCount(){
        if( $('Consumption').value && $('Distance').value && $('FuelPrice').value && $('mission_roads_car_repaire').value && $('Distance').value  ) {
            $('TravelAllowance').value = ( ( ( $('Consumption').value / 100 ) * $('Distance').value * $('FuelPrice').value ) + ( $('mission_roads_car_repaire').value * $('Distance').value ) ).toInt();
        }
    }
    
    
    if ($('DelSelectedLocation'))
    {
    	$('DelSelectedLocation').addEvent('click',function(){
    		var items = $$('.delLocChk');
    		for (i=0;i<items.length;i++){
    			if (items[i].getProperties('checked').checked == true){
    				$('loc_'+items[i].value).destroy();
    			}
    		}
    	});
    }

    if ($('randmission_form')){
        
        $('delLocChkAllRoad').addEvent('click',function(){
        	$$('.delLocChkRoad').each(function(el) { el.checked = true; });
        });
        
        $('delLocChkNonRoad').addEvent('click',function(){
        	$$('.delLocChkRoad').each(function(el) { el.checked = false; });
        });
        
        $('delLocChkRevRoad').addEvent('click',function(){
        	$$('.delLocChkRoad').each(function(el) { el.checked = el.checked ? false :true; });
        });
    }    
    
    if ($('LocUpladForm')){
        
        $('delLocChkAll').addEvent('click',function(){
        	$$('.delLocChk').each(function(el) { el.checked = true; });
        });
        
        $('delLocChkNon').addEvent('click',function(){
        	$$('.delLocChk').each(function(el) { el.checked = false; });
        });
        
        $('delLocChkRev').addEvent('click',function(){
        	$$('.delLocChk').each(function(el) { el.checked = el.checked ? false :true; });
        });

        $('saveForm').addEvent('click',function(){
        	$('ser').value = $('LocUpladForm').toQueryString();
        	$('locationUploadHiddenForm').submit();
        });
    	
        if($('mapBox'))
	    	$('mapBox').setStyles({
	        	'visibility': 'hidden'
			});
    }
});

function AddBookmark() {
    if (navigator.appName=="Netscape") {
        alert( 'Az oldal könyvjelzőkhöz adásához, katt a "Könyvjelzőkre" és "Könyvjelző hozzáadására" vagy nyomd le a következő billentyűkombinációt: Ctrl+D.' );
    }
    else if (parseInt(navigator.appVersion)>3) {
        window.external.AddFavorite( location.href, document.title );
    }
    return void(0);
}

function setStartPage(e) {
    if (navigator.appName=="Netscape") {
        alert( 'Katt az "Eszközök -> Beállítésok" és ott "Kezdőlap -> Aktuális oldal használata".' );
    } else if (parseInt(navigator.appVersion)>3) {
        e.style.behavior='url(#default#homepage)'; e.setHomePage( window.location.href );
    }
}

var hivas = new Object();
function Dkesz(D) {
	hivas.mezo.value=D;
}
function SelectDate(n) {
	hivas.mezo=n;
	w=window.open('inc/calendar/calendar.php?Datum='+n.value,'naptar','height=300,width=230,screenX=20,screenY=57,resizable=no,status=no,scrollbars=no,menubar=no,titlebar=no');
	w.focus();
}
function openWindow(theURL,winName,features) {
	if(!winName)
	    winName='_blank';
	if(!features)
		features = 'width=520, height=700, menubar=no, toolbar=no, location=no, status=no, scrollbars=yes, resizable=yes';
	window.open(theURL,winName,features);
}

function toggle(id) {
    var id = document.getElementById(id);
	id.style.display=(id.style.display=="none")? "block" : "none";
}


function biztose(url, kerdes) {
	if (!kerdes)
		kerdes = "Biztos, hogy törölni akarja?";
    if (confirm(kerdes))
		location.href = url;
	return false;
}

function deleteConfim( url, quest ) {
	if (!quest)
		quest = "Biztos, hogy törölni akarja?";
    if (confirm(quest))
		location.href = url;
	return void(0);
}

function setCheckboxes(the_form, do_check) {
	var elts = document.forms[the_form].elements['foto_ids[]'];
	var elts_cnt  = (typeof(elts.length) != 'undefined') ? elts.length : 0;
    if (elts_cnt) {
        for (var i = 0; i < elts_cnt; i++) {
            elts[i].checked = do_check;
        }
    } else {
        elts.checked        = do_check;
    }
    return true;
}

function checkEmail(myForm) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(myForm.value)) {
		return (true)
	}
	alert("Érvénytelen e-mail cím!\nKérem javítsa.")
	return (false)
}


function checkDate(date) {
	return ( /^(19|20)\d\d(-)(0[1-9]|1[012])(-)(0[1-9]|[12][0-9]|3[01])$/.test( date ) );
}

function checkTime(time) {
	return ( /^(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])$/.test( time ) );
}

function printwindow() {
	bV = parseInt(navigator.appVersion)
	if (bV >= 4) {
		window.print(); window.opener=self;
	}
}

function init(){
	var width = 180;
	var height = 180;
	self.resizeTo(width, height);
	self.moveTo((screen.width-width)/2, (screen.height-height)/2);
	self.focus();
}

function jumpMenu(selObj){
  eval("parent.location='"+selObj.options[selObj.selectedIndex].value+"'");
}

function strtotime(str, now) {
    // Convert string representation of date and time to a timestamp
    //
    // version: 812.3015
    // discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strtotime

    // +   original by: Caio Ariede (http://caioariede.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %        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
    var i, match, s;

    str = str.replace(/\s{2,}|^\s|\s$/g, ' '); // unecessary spaces
    str = str.replace(/[\t\r\n]/g, ''); // unecessary chars

    if (str == 'now') return (new Date()).getTime();
    else if (!isNaN(parse = Date.parse(str))) return parse/1000;
    else if (now) now = new Date(now);
    else now = new Date();

    str = str.toLowerCase();

   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;
                        if (typeof (day = __is_day[m[1].substring(0, 3)]) != '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]);

                    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;
    }

    var __is =
    {
        day:
        {
            'sun': 0, 'mon': 1, 'tue': 2, 'wed': 3,
            'thu': 4, 'fri': 5, 'sat': 6
        },
        mon:
        {
            'jan': 0, 'feb': 1, 'mar': 2, 'may': 3, 'apr': 4,  'jun': 5,
            'jul': 6, 'aug': 7, 'sep': 8, 'oct': 9, 'nov': 10, 'dec': 11
        }
    }

    match = str.match(/^(\d{2,4}-\d{2}-\d{2})(\s\d{1,2}:\d{1,2}(:\d{1,2})?)?$/);

    if (match != null) {
        if (!match[2]) {
            match[2] = '00:00:00';
        } else if (!match[3]) {
            match[2] += ':00';
        }

        s = match[1].split(/-/g);

        for (i in __is.mon) {
            if (__is.mon[i] == s[1] - 1) {
                s[1] = i;
            }
        }

        return strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2]);
    }

    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, 'g'));

    if (match == null) {
        return false;
    }

    for (i in match) {
        if (!process(match[i].split(' '))) {
            return false;
        }
    }

    return (now);
}

