
//*****************************************************************************
var slide_debug       = false;        // debug printing
var slide_mouseactive = false;        // if user has clicked on handle (and hold).
var slide_mins        = new Object(); // relative horiz. min valude handle should have
var slide_maxs        = new Object(); // relative horiz. max valude handle should have
var slide_vals        = new Object(); // current horizontal absolute value
var slide_active_id   = "";           // active handle id
var slide_maxlefts    = new Object(); // max how far to the left handle can go
var slide_maxrights   = new Object(); // max how far to the left handle can go
var slide_startpos    = new Object(); // mouse position when clicking.
var slide_minvals     = new Object(); // Where scale should begin
var slide_maxvals     = new Object(); // Where scale should end
var slide_precisions  = new Object(); // presicion of scale (0.1, 1, 10, 100, ...)
var slide_fields      = new Object(); // field connected to slider
var slide_slides      = new Object(); // slider connected to field
var slides_scale_points= new Object(); // number of points on scale
var slide_skew_scales = new Object(); // if to use skew scale or not
if(navigator.appName == "Microsoft Internet Explorer"){
    var slide_topoffset   = 0;
    var slide_leftoffset  = 0;
}else{
    var slide_topoffset   = -21;
    var slide_leftoffset  = 1;
}

//*****************************************************************************
function init_slides(){
    init_slide(1, 190, 10000, 250000,  0, "amount",    "15000", true);
    //init_slide(2, 200, 0,   22,    -2, "rate",      "0",    true);
    init_slide(3, 190, 2,   6,     0, "months",    "3",    false);
    //init_slide(4, 200, 0,   300,    0, "startfee",  "0",    true);
    //init_slide(5, 200, 19,  29,     0, "monthfee",  "29",   true);
    //init_slide(6, 200, 50,   10000,  0, "monthcost", "",    true);
    calc();
}

//*****************************************************************************
// precision: 0 -> round to integer.
//            1 -> round to closest 10
//            2 -> round to closest 100 and so on...
//           -1 -> round to closest .10
//           -2 -> round to closest .01 and so on...
function init_slide(num, width, minval, maxval, precision, connected_field,
                    init_val, skew_scale){
    var id = "slide" + num;
    var handleid = "handle" + num;
    var containerid = "container" + num;
    var slide = document.getElementById(id);
    var inner = "";
    inner += "<div id=\""+containerid+"\" "+container_style(width);
    inner += "</div>";
    inner += "<div id=\""+handleid+"\" "+handle_style()+"></div>";
    slide.innerHTML = inner;
    var h = document.getElementById(handleid);
    var containerpos = get_obj_pos(document.getElementById(containerid));
    var rightpos = containerpos[0] + width;
    var handlepos = get_obj_pos(h);
    var length = rightpos - containerpos[0] - 10;
    var height = containerpos[1] - handlepos[1];
    //h.style.left = Math.round((length/2));
    h.style.left = slide_leftoffset + "px";
    h.style.top = slide_topoffset + "px";
    slide_vals[handleid] = Math.round((length/2));
    add_listener(h, "mousedown", slide_it);
    slide_mins[handleid] = 0 + slide_leftoffset;
    slide_maxs[handleid] = length + slide_leftoffset;
    slide_fields[handleid] = connected_field;
    slide_slides[connected_field] = handleid;
    slide_maxvals[handleid] = maxval;
    slide_minvals[handleid] = minval;
    slide_precisions[handleid] = precision;
    slide_skew_scales[handleid] = skew_scale;
    if(skew_scale){
        slides_scale_points[handleid] = calc_slides_scale_points(handleid);
    }
    field = document.getElementById(connected_field);
    add_listener(field, "blur", update_slide);
    field.value = init_val;
    update_slide_id(connected_field);
    

    //update_field(handleid);
}

function calc_slides_scale_points(id){
    var val = slide_minvals[id];
    var i;
    for(i = 0; val < slide_maxvals[id]; i++){
        if(val < 25){
            val += 0.5;
        }else if(val < 100){
            val += 5;
        }else if(val < 300){
            val += 10;
        }else if(val < 1000){
            val += 50;
        }else if(val < 10000){
            val += 500;
        }else if(val < 20000){
            val += 1000;
        }else{
            val += 5000;
        }
    }
    return i;
}

function update_slide(e){
    if (!e){
        e = window.event;
    }
    if(e.target){
        element = e.target;
    }else{
        element = e.srcElement;
    }
    update_slide_id(element.id);
    var pcform = document.getElementById("pcform");
    c(pcform);
}

function update_slide_slides(){
    for(var fieldid in slide_slides){
        update_slide_id(fieldid);
    }
}

function update_slide_id(id){
    var field = document.getElementById(id);
    var handleid = slide_slides[id];
    var handle = document.getElementById(handleid);
    var val = myFloat(field.value);
    field.value = val;
    if(val != ""){
        if(!isNaN(val)){
            if(val < slide_minvals[handleid]){
                handle.style.left = slide_mins[handleid] + "px";
                field.value = slide_minvals[handleid];
            }else if(val > slide_maxvals[handleid]){
                handle.style.left = slide_maxs[handleid] + "px";
                field.value = slide_maxvals[handleid];
            }else{
                if(slide_skew_scales[handleid]){
                    var testval = slide_minvals[handleid];
                    var i;
                    for(i = 0; testval < val; i++){
                        if(testval < 25){
                            testval += 0.5;
                        }else if(testval < 100){
                            testval += 5;
                        }else if(testval < 300){
                            testval += 10;
                        }else if(testval < 1000){
                            testval += 50;
                        }else if(testval < 10000){
                            testval += 500;
                        }else if(testval < 20000){
                            testval += 1000;
                        }else{
                            testval += 5000;
                        }
						
                    }
                    var perc = i/slides_scale_points[handleid];
                }else{
                    var span = slide_maxvals[handleid] - slide_minvals[handleid];
                    var perc = (val-slide_minvals[handleid]) / span;
                }
                var length = slide_maxs[handleid] - slide_mins[handleid];
                var newleft = length * perc;
                handle.style.left = newleft + "px";
            }
        }
    }
}

//*****************************************************************************
function update_field(id){
    var handle = document.getElementById(id);
    var length = slide_maxs[id] - slide_mins[id];
    var cur = parseInt((handle.style.left.split("px"))[0]);
    var perc = cur / length;
    var field = document.getElementById(slide_fields[id]);


    if(slide_skew_scales[id]){
        var pointval = perc * slides_scale_points[id];
        var finalval = slide_minvals[id];
        for(var i = 0; i < pointval; i++){
            if(finalval < 25){
                finalval += 0.5;
            }else if(finalval < 100){
                finalval += 5;
            }else if(finalval < 300){
                finalval += 10;
            }else if(finalval < 1000){
                finalval += 50;
            }else if(finalval < 10000){
                finalval += 500;
            }else if(finalval < 20000){
            finalval += 1000;
            }else{
                finalval += 5000;
            }
			//alert(finalval);
						if(finalval > 250000)
						{
							finalval = 250000;
						}
						
        }
        field.value = finalval;
    }else{
        var span = slide_maxvals[id] - slide_minvals[id];
        var val = slide_minvals[id] + perc * span;
        field.value = slide_precision_round(val, slide_precisions[id]);
    }
}

function slide_precision_round(val, precision){
    var div = Math.pow(10, precision*(-1));
    return Math.round(val*div)/div;
}

//*****************************************************************************
function slide_it(e){
    if (!e){
        e = window.event;
    }
    if(e.target){
        element = e.target;
    }else{
        element = e.srcElement;
    }
    slide_active_id = element.id; // get id of slide.
    slide_vals[slide_active_id] = e.screenX;
    slide_startpos[slide_active_id] = e.screenX;
    var handle = document.getElementById(slide_active_id);
    curleft = parseInt((handle.style.left.split("px"))[0]);
    slide_maxlefts[slide_active_id] = curleft - slide_mins[slide_active_id];
    slide_maxrights[slide_active_id] = slide_maxs[slide_active_id] - curleft;
    slide_mouseactive = true;
    add_listener(document, "mousemove", move_the_slider);
    add_listener(document, "mouseup", slider_mouse_up);
    xPreventDefault(e);
    xStopPropagation(e);
}


function xPreventDefault(e){
    if (e && e.preventDefault) e.preventDefault();
    else if (window.event) window.event.returnValue = false;
}
function xStopPropagation(evt){
    if (evt && evt.stopPropagation) evt.stopPropagation();
    else if (window.event) window.event.cancelBubble = true;
}

//*****************************************************************************
function move_the_slider(e){
    if(slide_mouseactive){
        var x = e.screenX;
        var diff = x - slide_vals[slide_active_id];
        if(diff != 0){
            slide_vals[slide_active_id] = x;
            var handle = document.getElementById(slide_active_id);
            var oldleft = parseInt((handle.style.left.split("px"))[0]);
            var newval = oldleft + diff;
            if(slide_startpos[slide_active_id] - x >= slide_maxlefts[slide_active_id]){
                handle.style.left = slide_mins[slide_active_id] + "px";
            }else if(x - slide_startpos[slide_active_id] >= slide_maxrights[slide_active_id]){
                handle.style.left = slide_maxs[slide_active_id] + "px";
            }else{
                handle.style.left = newval + "px";
            }
            update_field(slide_active_id);
        }
    }
}

//*****************************************************************************
function slider_mouse_up(e){
    remove_listener(document, "mousemove", move_the_slider);
    remove_listener(document, "mouseup", slider_mouse_up);
    slide_mouseactive = false;
    calc();
}

function calc(){
    var pcform = document.getElementById("pcform");
    c(pcform);
}

//*****************************************************************************
// Find an objects location in browser window
function get_obj_pos(obj) {
    var curleft = curtop = 0;
    if(obj.offsetParent){
        curleft += obj.offsetLeft;
        curtop += obj.offsetTop;
        return [curleft,curtop];
    }
}

//*****************************************************************************
function add_listener(element, type, expression, bubbling){
    bubbling = bubbling || false;
    if(window.addEventListener) { // Standard
        element.addEventListener(type, expression, bubbling);
        return true;
    } else if(window.attachEvent) { // IE
        element.attachEvent('on' + type, expression);
        return true;
    } else return false;
}

//*****************************************************************************
function remove_listener(element, type, expression, bubbling){
    bubbling = bubbling || false;
    if(window.removeEventListener) { // Standard
        element.removeEventListener(type, expression, bubbling);
        return true;
    } else if(window.attachEvent) { // IE
        element.attachEvent('on' + type, expression);
        return true;
    } else return false;
}

//*****************************************************************************
function handle_style(){
    return " style=\"position: relative; \n"+
        "background-image: url(http://www.mediahelp.se/wp-content/themes/mediahelp/images/slider.gif); \n"+
        "width: 12px; \n"+
		"margin-right: 5px; \n"+
        "height: 20px; \n"+
        "cursor: pointer;\"";
}

//*****************************************************************************
function container_style(width){
    return " style=\"background-image: url(http://www.mediahelp.se/wp-content/themes/mediahelp/images/slider-bg.gif); \n"+
        "height: 20px; \n" +
        "width: "+width+"px;\"";
}

//*****************************************************************************
var dbg_arr = new Array();
function dbg(txt){
    if(slide_debug == true){
        var dbg_size = 20;
        if(dbg_arr.length < dbg_size){
            dbg_arr[dbg_arr.length] = txt;
        }else{
            for(i=0; i<dbg_arr.length-1; i++){
                dbg_arr[i] = dbg_arr[i+1];
            }
            dbg_arr[dbg_arr.length-1] = txt;
        }
        e = document.getElementById("dbg");
        var str = "";
        for(i=0; i<dbg_arr.length; i++){
            str += dbg_arr[i] + "<br/>";
        }
        e.innerHTML = str;
    }
}

//*****************************************************************************

