var activePrice = ''; // current showing price comparison popup id
var activeLoading = ''; // current showing price comparison popups loading
var loadedPrice = {}; // object of price popups already loaded
var activeImg  = ''; // current showing image
var loadedImg = {}; // object of price images already loaded
var loadSuccess = {};
var mouseOut = {};
var undefined;
function show_price_compare(deal_id,provider_id){
    var divId = 'compare_' + deal_id;
    //var  loadingDiv = 'loading_compare_'+id;
    if (activePrice != '' && activePrice != divId) {
        new Effect.Fade(activePrice, {
            duration: 0
        });
    }
    if (loadedPrice[divId] == 1) { //if ajax query has already been called, then just show the div
      show_price_compare_info(divId);
    }
    else { //if query hasn't been called, then initialize ajax.updater and load the price comparison
        document.getElementById("dealprices").src = "/compare_price?id=" + provider_id + "&deal_id="+deal_id;
    }
}

function loadsucc(deal_id, content){
    var divId = 'compare_' + deal_id;
    if (content.match(new RegExp('cb_table_main', 'img'))) {
        var cssFragment = '(?:<style>)((\n|\r|.)*?)(?:</style>)';
        var docHead = document.getElementsByTagName("head")[0];
        var css = content.match(new RegExp(cssFragment, 'img'));
        if (css) {
            css = css.toString();
            var re = /(?:<style.*?id=[\"\'](.*?)[\"\'].*?>)([\S\s]*?)(?:<\/style>)|(?:<style>)([\S\s]*?)(?:<\/style>)/ig;
            var match;
            while (match = re.exec(css)) {
                if (match[2] || match[3]) {
                    var s0 = document.createElement("style");
                    var t;
                    if (match[1]) {
                        var e = document.getElementById(match[1]);
                        if (e)
                            e.parentNode.removeChild(e);
                        s0.setAttribute("id", match[1]);
                    }
                    s0.setAttribute("type", "text/css");
                    if (match[2])
                        t = match[2];
                    if (match[3])
                        t = match[3];
                    if (s0.styleSheet)
                        s0.styleSheet.cssText = t;//IE
                    else
                        s0.appendChild(document.createTextNode(t));//W3C
                    docHead.appendChild(s0);
                }
            }
        }
        loadSuccess["compare_" + deal_id] = true;
        hide_loadding(deal_id);
        $("compare_" + deal_id).update(content.replace(new RegExp(cssFragment, 'img'), ""));

    }
    else {
        loadSuccess["compare_" + deal_id] = false;
        hide_loadding(deal_id);
        defult_info = ['<div id="default-box' + deal_id + '" class="default-box" style="margin-left:0px;"><div class="default-slide-table-head">'];
        defult_info.push('<img class="img-link" src="/images/close-img-gray.jpg" onclick="Element.toggle(\'compare_' + deal_id + '\')"/></div>');
        defult_info.push(' <div class="default-slide-table-body" align="center"><img id="tip-img" src="/images/customer_service.png" />There is no content</div></div>');
        $("compare_" + deal_id).update(defult_info.join(''));
    }
    loadedPrice[divId] = 1;
	show_price_compare_info(divId);
}



function comparePirce(deal_id,provider_id){
    
    if (activeLoading != '' && activeLoading != deal_id) {
        cancleComparePirce(activeLoading);
    }
    if (loadSuccess["compare_" + deal_id] == undefined) {//if in loadding
        activeLoading = deal_id;
        show_loadding(deal_id);
    }
    show_price_compare(deal_id,provider_id)
}

function show_price_compare_info(price_id){
    activePrice = price_id;
    new Effect.Appear(price_id, {
        duration: 0
    });
    //add aoutside event to body,when click outside of current div,closed this.
    setTimeout("add_outside_event($('"+price_id+"'))",50);
//    add_outside_event($(price_id));
}

function close_price_compare(current_price_id){
    remove_outside_event($(current_price_id));
    new Effect.Fade(current_price_id, {
        duration: 0
    });
    activePrice  = '';
}

function cancleComparePirce(id){
    hide_loadding(id);
    close_price_compare("compare_" + id);
}

function show_loadding(deal_id){
    var loadding_id = 'loadding_' + deal_id;
    var loadding_div = $(loadding_id);
    if(loadding_div == undefined){//if loadding div not exist,create loadding div
        template_div = $('compare_deal_price_template').innerHTML;
        template_div = template_div.replace(new RegExp('-deal_id-',"gm"),deal_id);
        Element.insert('compare_deal_price_'+deal_id,template_div);
        Element.show(loadding_id);
    }else{
        loadding_div.show();
    }   
}

function hide_loadding(id){
    Element.hide('loadding_' + id);
}

function generate_compare_price_htmls_inner(type_id, product_id){
    
    var cobrand_id = '1423';
    var rating_star_type = 0;
    //var cb_limit = 6;
    var open_link_type2 = 1;
    var show_link_price2 = 1;
    var head_title_type = '1';
    document.write('<scr' + 'ipt src="http://ah.pricegrabber.com/cb_table.php?' +
    type_id +
    '=' +
    product_id +
    '&dw=1' +
    '&cobrand_id=' +
    cobrand_id +
    '&rst=' +
    rating_star_type +
    '&slp=' +
    show_link_price2 +
    '&olt=' +
    open_link_type2 +
    //'&l='+cb_limit+
    '&w=300' +
    '&htt=' +
    head_title_type +
    '"></scr' +
    'ipt>');
}

function show_price_grabber_info(id, img_url){
    var divId = 'pricegrabber_info_' + id;
    var img;

    if (activeImg != '' && activeImg != divId) {
        new Effect.Fade(activeImg, {
            duration: 0
        });
    }
    if (loadedImg[divId] == 1) { //if ajax query has already been called, then just show the div
        activeImg = divId;
        new Effect.Appear(divId, {
            duration: 0
        });
    }
    else { //if query hasn't been called, then initialize ajax.updater and load the price comparison
        if (/http/i.exec(img_url)) {
            activeImg = divId;
            img = document.createElement("img");
            img.src = img_url;
            $(divId).appendChild(img);
            loadedImg[divId] = 1;
            new Effect.Appear(divId, {
                duration: 0
            });
        }
    }
}


function mouseout(event, _id, eElem){
    e = event ? event : window.event;
    event_node = e.relatedTarget ? e.relatedTarget : e.toElement;
    if (event_node) {
        while (event_node != eElem && event_node.nodeName != 'BODY') {
            event_node = event_node.parentNode;
        }
        if (event_node != eElem) {
            close_price_compare(_id);
        }
    }
    return false;
}

function add_outside_event(current_price){
     Element.observe(document.body,'click',outside)
//    $(document.body).descendants().invoke('observe','click',outside);
    //need to then stop this from observing the outside - ie requires it at least
    current_price.stopObserving('click',outside);
    $(current_price).descendants().invoke('stopObserving','click',outside)
}

function remove_outside_event(){
    Element.stopObserving(document.body, 'click', outside)
//    $(document.body).descendants().invoke('stopObserving','click',outside);
}

function outside(event)
{
	if( activePrice == null || activePrice == undefined )
	{
		//this shouldnt happen, but just incase
		$(document.body).descendants().invoke('stopObserving','click',outside);
		return;
	}
	element = Event.element(event);
    current_price = $(activePrice);
	if( element.descendantOf(current_price) !== true)
	{
        close_price_compare(activePrice);
		activePrice = '';
		$(document.body).descendants().invoke('stopObserving','click',outside);
		
	}
}