It's just a root-finding problem in the end.
Consider the case that you just want to check if two bezier curves intersect in the x-axis only. The equation simply becomes:
0 = bezier1(t1).x - bezier2(t2).x;
That's one equation and two unkowns (t1 and t2). Now add the second dimension:
0 = bezier1(t1).x - bezier2(t2).x;
0 = bezier1(t1).y - bezier2(t2).y;
That's two equations and two unkowns, e.g. a system that can be solved.
The bezier equations itself can be expressed several ways. I favor the polynomial form for a reason I'll give you later. The polynomial form is just:
bezier(t).x = a.x * t^3 + b.x * t^2 + c.x * t + d.x;
a,b,c and d are the polynomial coefficients. You can get them with a bit of math from the control points (if you need help with this part write me a comment, I have that part in my source-code somewhere).
A polynomial of degree 3 may have at most three roots (or zeros). Subtracting two polynomials of the same degree yields another polynomial with that degree. In other words: The degree does not grow, and that's great because finding roots of a polynomial of that degree can be done with a closed form solution, so you don't have to use iterative algorithms. Code to do so can be found en masse on the net.
Since your beziers are only defined in the interval 0 <= t <= 1 you should ignore all roots outside this range.
Next step: You have an intersection between the curves only If you find the same roots for your X and Y polynom. All others can be ignored. At this point you split your curves and insert an intersection point. (If you need help on this part again write a comment).
Here's the reason why I like to do these things in the polynomial form so much: Finding out if two polynomials have a root at the same position at all is cheaper to calculate the roots first and search for a duplicate. To do so you build the sylvester determinant of the two polynomials and calculate the determinant from it.
If this determinant is zero, the two polynomials don't only have a root and you can examine the next pair of possible intersecting beziers.
The sylvester matrix for two polynomials of degree three looks like this (assume a,b,c and d are the polynomial coefficients again):
| a.x b.x c.x d.x 0 0 |
| 0 a.x b.x c.x d.x 0 |
| 0 0 a.x b.x c.x d.x |
| a.y b.y c.y d.y 0 0 |
| 0 a.y b.y c.y d.y 0 |
| 0 0 a.y b.y c.y d.y |
That seems like a hell of a matrix (and it is), but calculating the determinant of it is cheaper than root-finding because of it's structure.
Since the first column contains only two non-zero elements you can get the determinant via cofactor expansion of exactly these elements.
Btw - if yoou work with only quadratic beziers (e.g. those that only have a single control-point) things become a bit easier of course.
Useful links:
Sylvester Matrix on Wikipedia
Cofactor Expansion on Wikipedia